private <T> Future<T> submitToKeyOwnerInternal(Callable<T> task, Object key, T defaultValue, boolean preventSync) {
checkIfNotNull(task);
final String uuid = getUUID();
final int partitionId = getPartitionId(key);
final PartitionCallableRequest request = new PartitionCallableRequest(name, uuid, task, partitionId);
final ICompletableFuture<T> f = invokeFuture(request, partitionId);
return checkSync(f, uuid, null, partitionId, preventSync, defaultValue);
}