private <T> Future<T> submitToKeyOwnerInternal(Callable<T> task, Object key, T defaultValue, boolean preventSync) { checkNotNull(task, "task should not be null"); String uuid = getUUID(); int partitionId = getPartitionId(key); ClientMessage request = ExecutorServiceSubmitToPartitionCodec.encodeRequest(name, uuid, toData(task), partitionId); ClientInvocationFuture f = invokeOnPartitionOwner(request, partitionId); return checkSync(f, uuid, partitionId, preventSync, defaultValue); }
@Override public <T> Future<T> submit(Runnable command, T result) { final Object partitionKey = getTaskPartitionKey(command); Callable<T> callable = createRunnableAdapter(command); if (partitionKey != null) { return submitToKeyOwnerInternal(callable, partitionKey, result, false); } return submitToRandomInternal(callable, result, false); }
@Override public void execute(Runnable command, MemberSelector memberSelector) { List<Member> members = selectMembers(memberSelector); int selectedMember = random.nextInt(members.size()); executeOnMember(command, members.get(selectedMember)); }
@Override public void executeOnKeyOwner(Runnable command, Object key) { Callable<?> callable = createRunnableAdapter(command); submitToKeyOwner(callable, key); }
@Override public void executeOnMember(Runnable command, Member member) { Callable<?> callable = createRunnableAdapter(command); submitToMember(callable, member); }
@Override public Future<?> submit(Runnable command) { final Object partitionKey = getTaskPartitionKey(command); Callable<?> callable = createRunnableAdapter(command); if (partitionKey != null) { return submitToKeyOwner(callable, partitionKey); } return submitToRandomInternal(callable, null, false); }
private <T> Future<T> checkSync(ClientInvocationFuture f, String uuid, Address address, boolean preventSync, T defaultValue) { boolean sync = isSyncComputation(preventSync); if (sync) { Object response = retrieveResultFromMessage(f); Executor userExecutor = getContext().getExecutionService().getUserExecutor(); return new CompletedFuture<T>(getSerializationService(), response, userExecutor); } else { return new IExecutorDelegatingFuture<T>(f, getContext(), uuid, defaultValue, SUBMIT_TO_ADDRESS_DECODER, name, address); } }
private <T> void submitToKeyOwnerInternal(Callable<T> task, Object key, ExecutionCallback<T> callback) { checkNotNull(task, "task should not be null"); String uuid = getUUID(); int partitionId = getPartitionId(key); ClientMessage request = ExecutorServiceSubmitToPartitionCodec.encodeRequest(name, uuid, toData(task), partitionId); ClientInvocationFuture f = invokeOnPartitionOwner(request, partitionId); ClientDelegatingFuture<T> delegatingFuture = new ClientDelegatingFuture<T>(f, getSerializationService(), SUBMIT_TO_PARTITION_DECODER); delegatingFuture.andThen(callback); }
private <T> void submitToRandomInternal(Callable<T> task, ExecutionCallback<T> callback) { checkNotNull(task, "task should not be null"); String uuid = getUUID(); int partitionId = randomPartitionId(); ClientMessage request = ExecutorServiceSubmitToPartitionCodec.encodeRequest(name, uuid, toData(task), partitionId); ClientInvocationFuture f = invokeOnPartitionOwner(request, partitionId); ClientDelegatingFuture<T> delegatingFuture = new ClientDelegatingFuture<T>(f, getSerializationService(), SUBMIT_TO_PARTITION_DECODER); delegatingFuture.andThen(callback); }
private <T> Future<T> submitToRandomInternal(Callable<T> task, T defaultValue, boolean preventSync) { checkNotNull(task, "task should not be null"); String uuid = getUUID(); int partitionId = randomPartitionId(); ClientMessage request = ExecutorServiceSubmitToPartitionCodec.encodeRequest(name, uuid, toData(task), partitionId); ClientInvocationFuture f = invokeOnPartitionOwner(request, partitionId); return checkSync(f, uuid, partitionId, preventSync, defaultValue); }
private <T> Future<T> submitToTargetInternal(Callable<T> task, Address address , T defaultValue, boolean preventSync) { checkNotNull(task, "task should not be null"); String uuid = getUUID(); ClientMessage request = ExecutorServiceSubmitToAddressCodec.encodeRequest(name, uuid, toData(task), address); ClientInvocationFuture f = invokeOnTarget(request, address); return checkSync(f, uuid, address, preventSync, defaultValue); }
private <T> void submitToTargetInternal(Callable<T> task, Address address, ExecutionCallback<T> callback) { checkNotNull(task, "task should not be null"); String uuid = getUUID(); ClientMessage request = ExecutorServiceSubmitToAddressCodec.encodeRequest(name, uuid, toData(task), address); ClientInvocationFuture f = invokeOnTarget(request, address); ClientDelegatingFuture<T> delegatingFuture = new ClientDelegatingFuture<T>(f, getSerializationService(), SUBMIT_TO_ADDRESS_DECODER); delegatingFuture.andThen(callback); }
@Override public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException { final List<Future<T>> futures = new ArrayList<Future<T>>(tasks.size()); final List<Future<T>> result = new ArrayList<Future<T>>(tasks.size()); for (Callable<T> task : tasks) { futures.add(submitToRandomInternal(task, null, true)); } Executor userExecutor = getContext().getExecutionService().getUserExecutor(); for (Future<T> future : futures) { Object value = retrieveResult(future); result.add(new CompletedFuture<T>(getSerializationService(), value, userExecutor)); } return result; }
@Override public <T> void submitToMember(Callable<T> task, Member member, ExecutionCallback<T> callback) { final Address memberAddress = getMemberAddress(member); submitToTargetInternal(task, memberAddress, callback); }
@Override public void executeOnAllMembers(Runnable command) { Callable<?> callable = createRunnableAdapter(command); final Collection<Member> memberList = getContext().getClusterService().getMemberList(); for (Member member : memberList) { submitToMember(callable, member); } }
@Override public void executeOnMembers(Runnable command, MemberSelector memberSelector) { List<Member> members = selectMembers(memberSelector); executeOnMembers(command, members); }
private int randomPartitionId() { ClientPartitionService partitionService = getContext().getPartitionService(); return random.nextInt(partitionService.getPartitionCount()); } }
@Override public <T> Map<Member, Future<T>> submitToAllMembers(Callable<T> task) { final Collection<Member> memberList = getContext().getClusterService().getMemberList(); Map<Member, Future<T>> futureMap = new HashMap<Member, Future<T>>(memberList.size()); for (Member m : memberList) { Future<T> f = submitToTargetInternal(task, m.getAddress(), null, true); futureMap.put(m, f); } return futureMap; }
@Override public void submitToAllMembers(Runnable command, MultiExecutionCallback callback) { Callable<?> callable = createRunnableAdapter(command); submitToAllMembers(callable, callback); }