@Override public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException { List<Future<T>> futures = new ArrayList<Future<T>>(tasks.size()); List<Future<T>> result = new ArrayList<Future<T>>(tasks.size()); for (Callable<T> task : tasks) { futures.add(submit(task)); } for (Future<T> future : futures) { Object value; try { value = future.get(); } catch (ExecutionException e) { value = e; } result.add(new CompletedFuture<T>(getNodeEngine().getSerializationService(), value, getAsyncExecutor())); } return result; }
@Override public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException { List<Future<T>> futures = new ArrayList<Future<T>>(tasks.size()); List<Future<T>> result = new ArrayList<Future<T>>(tasks.size()); for (Callable<T> task : tasks) { futures.add(submit(task)); } for (Future<T> future : futures) { Object value; try { value = future.get(); } catch (ExecutionException e) { value = e; } result.add(new CompletedFuture<T>(getNodeEngine().getSerializationService(), value, getAsyncExecutor())); } return result; }
@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> 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; }
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> 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> Future<T> checkSync(ClientInvocationFuture f, String uuid, int partitionId, 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_PARTITION_DECODER, name, partitionId); } }
private <T> Future<T> checkSync(ClientInvocationFuture f, String uuid, int partitionId, 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_PARTITION_DECODER, name, partitionId); } }
@Override @SuppressWarnings("unchecked") protected InternalCompletableFuture<V> getAsyncInternal(Object key, ExpiryPolicy expiryPolicy, ExecutionCallback<V> callback) { key = serializeKeys ? toData(key) : key; V value = (V) getCachedValue(key, false); if (value != NOT_CACHED) { return new CompletedFuture<V>(getSerializationService(), value, getContext().getExecutionService().getUserExecutor()); } try { Data keyData = toData(key); long reservationId = nearCache.tryReserveForUpdate(key, keyData); GetAsyncCallback getAsyncCallback = new GetAsyncCallback(key, reservationId, callback); return super.getAsyncInternal(keyData, expiryPolicy, getAsyncCallback); } catch (Throwable t) { invalidateNearCache(key); throw rethrow(t); } }
@Override @SuppressWarnings("unchecked") protected InternalCompletableFuture<V> getAsyncInternal(Object key, ExpiryPolicy expiryPolicy, ExecutionCallback<V> callback) { key = serializeKeys ? toData(key) : key; V value = (V) getCachedValue(key, false); if (value != NOT_CACHED) { return new CompletedFuture<V>(getSerializationService(), value, getContext().getExecutionService().getUserExecutor()); } try { Data keyData = toData(key); long reservationId = nearCache.tryReserveForUpdate(key, keyData); GetAsyncCallback getAsyncCallback = new GetAsyncCallback(key, reservationId, callback); return super.getAsyncInternal(keyData, expiryPolicy, getAsyncCallback); } catch (Throwable t) { invalidateNearCache(key); throw rethrow(t); } }
private <T> Future<T> submitToPartitionOwner(Callable<T> task, int partitionId, boolean preventSync) { checkNotNull(task, "task can't be null"); checkNotShutdown(); NodeEngine nodeEngine = getNodeEngine(); Data taskData = nodeEngine.toData(task); String uuid = newUnsecureUuidString(); boolean sync = !preventSync && checkSync(); Operation op = new CallableTaskOperation(name, uuid, taskData) .setPartitionId(partitionId); InternalCompletableFuture future = invokeOnPartition(op); if (sync) { Object response; try { response = future.get(); } catch (Exception e) { response = e; } return new CompletedFuture<T>(nodeEngine.getSerializationService(), response, getAsyncExecutor()); } return new CancellableDelegatingFuture<T>(future, nodeEngine, uuid, partitionId); }
private <T> DurableExecutorServiceFuture<T> submitToPartition(Callable<T> task, int partitionId, T defaultValue) { checkNotNull(task, "task can't be null"); SerializationService serializationService = getNodeEngine().getSerializationService(); Data taskData = serializationService.toData(task); TaskOperation operation = new TaskOperation(name, taskData); operation.setPartitionId(partitionId); InternalCompletableFuture<Integer> future = invokeOnPartition(operation); int sequence; try { sequence = future.get(); } catch (Throwable t) { CompletedFuture<T> completedFuture = new CompletedFuture<T>(serializationService, t, getAsyncExecutor()); return new DurableExecutorServiceDelegateFuture<T>(completedFuture, serializationService, null, -1); } Operation op = new RetrieveResultOperation(name, sequence).setPartitionId(partitionId); InternalCompletableFuture<T> internalCompletableFuture = invokeOnPartition(op); long taskId = Bits.combineToLong(partitionId, sequence); return new DurableExecutorServiceDelegateFuture<T>(internalCompletableFuture, serializationService, defaultValue, taskId); }
private <T> Future<T> submitToPartitionOwner(Callable<T> task, int partitionId, boolean preventSync) { checkNotNull(task, "task can't be null"); checkNotShutdown(); NodeEngine nodeEngine = getNodeEngine(); Data taskData = nodeEngine.toData(task); String uuid = newUnsecureUuidString(); boolean sync = !preventSync && checkSync(); Operation op = new CallableTaskOperation(name, uuid, taskData) .setPartitionId(partitionId); InternalCompletableFuture future = invokeOnPartition(op); if (sync) { Object response; try { response = future.get(); } catch (Exception e) { response = e; } return new CompletedFuture<T>(nodeEngine.getSerializationService(), response, getAsyncExecutor()); } return new CancellableDelegatingFuture<T>(future, nodeEngine, uuid, partitionId); }
private <T> DurableExecutorServiceFuture<T> submitToPartition(Callable<T> task, int partitionId, T defaultValue) { checkNotNull(task, "task can't be null"); SerializationService serializationService = getNodeEngine().getSerializationService(); Data taskData = serializationService.toData(task); TaskOperation operation = new TaskOperation(name, taskData); operation.setPartitionId(partitionId); InternalCompletableFuture<Integer> future = invokeOnPartition(operation); int sequence; try { sequence = future.get(); } catch (Throwable t) { CompletedFuture<T> completedFuture = new CompletedFuture<T>(serializationService, t, getAsyncExecutor()); return new DurableExecutorServiceDelegateFuture<T>(completedFuture, serializationService, null, -1); } Operation op = new RetrieveResultOperation(name, sequence).setPartitionId(partitionId); InternalCompletableFuture<T> internalCompletableFuture = invokeOnPartition(op); long taskId = Bits.combineToLong(partitionId, sequence); return new DurableExecutorServiceDelegateFuture<T>(internalCompletableFuture, serializationService, defaultValue, taskId); }
@Override public ICompletableFuture<ReadResultSet<E>> readManyAsync(long startSequence, int minCount, int maxCount, IFunction<E, Boolean> filter) { checkSequence(startSequence); checkNotNegative(minCount, "minCount can't be smaller than 0"); checkTrue(maxCount >= minCount, "maxCount should be equal or larger than minCount"); try { capacity(); } catch (Throwable e) { //in case of exception return the exception via future to behave consistently to member e = new ExecutionException(e); ExecutorService userExecutor = getContext().getExecutionService().getUserExecutor(); return new CompletedFuture<ReadResultSet<E>>(getSerializationService(), e, userExecutor); } checkTrue(maxCount <= capacity, "the maxCount should be smaller than or equal to the capacity"); checkTrue(maxCount <= MAX_BATCH_SIZE, "maxCount can't be larger than " + MAX_BATCH_SIZE); ClientMessage request = RingbufferReadManyCodec.encodeRequest( name, startSequence, minCount, maxCount, toData(filter)); try { ClientInvocationFuture invocationFuture = new ClientInvocation(getClient(), request, getName(), partitionId).invoke(); return new ClientDelegatingFuture<ReadResultSet<E>>(invocationFuture, getSerializationService(), readManyAsyncResponseDecoder); } catch (Exception e) { throw rethrow(e); } }
@Override public ICompletableFuture<ReadResultSet<E>> readManyAsync(long startSequence, int minCount, int maxCount, IFunction<E, Boolean> filter) { checkSequence(startSequence); checkNotNegative(minCount, "minCount can't be smaller than 0"); checkTrue(maxCount >= minCount, "maxCount should be equal or larger than minCount"); try { capacity(); } catch (Throwable e) { //in case of exception return the exception via future to behave consistently to member e = new ExecutionException(e); ExecutorService userExecutor = getContext().getExecutionService().getUserExecutor(); return new CompletedFuture<ReadResultSet<E>>(getSerializationService(), e, userExecutor); } checkTrue(maxCount <= capacity, "the maxCount should be smaller than or equal to the capacity"); checkTrue(maxCount <= MAX_BATCH_SIZE, "maxCount can't be larger than " + MAX_BATCH_SIZE); ClientMessage request = RingbufferReadManyCodec.encodeRequest( name, startSequence, minCount, maxCount, toData(filter)); try { ClientInvocationFuture invocationFuture = new ClientInvocation(getClient(), request, getName(), partitionId).invoke(); return new ClientDelegatingFuture<ReadResultSet<E>>(invocationFuture, getSerializationService(), readManyAsyncResponseDecoder); } catch (Exception e) { throw rethrow(e); } }
@Override public <T> Future<T> submitToMember(Callable<T> task, Member member) { checkNotNull(task, "task can't be null"); checkNotShutdown(); NodeEngine nodeEngine = getNodeEngine(); Data taskData = nodeEngine.toData(task); String uuid = newUnsecureUuidString(); Address target = ((MemberImpl) member).getAddress(); boolean sync = checkSync(); MemberCallableTaskOperation op = new MemberCallableTaskOperation(name, uuid, taskData); InternalCompletableFuture future = nodeEngine.getOperationService() .invokeOnTarget(DistributedExecutorService.SERVICE_NAME, op, target); if (sync) { Object response; try { response = future.get(); } catch (Exception e) { response = e; } return new CompletedFuture<T>(nodeEngine.getSerializationService(), response, getAsyncExecutor()); } return new CancellableDelegatingFuture<T>(future, nodeEngine, uuid, target); }
@Override public <T> Future<T> submitToMember(Callable<T> task, Member member) { checkNotNull(task, "task can't be null"); checkNotShutdown(); NodeEngine nodeEngine = getNodeEngine(); Data taskData = nodeEngine.toData(task); String uuid = newUnsecureUuidString(); Address target = ((MemberImpl) member).getAddress(); boolean sync = checkSync(); MemberCallableTaskOperation op = new MemberCallableTaskOperation(name, uuid, taskData); InternalCompletableFuture future = nodeEngine.getOperationService() .invokeOnTarget(DistributedExecutorService.SERVICE_NAME, op, target); if (sync) { Object response; try { response = future.get(); } catch (Exception e) { response = e; } return new CompletedFuture<T>(nodeEngine.getSerializationService(), response, getAsyncExecutor()); } return new CancellableDelegatingFuture<T>(future, nodeEngine, uuid, target); }
@Override public <T> Future<T> submit(Runnable task, T result) { checkNotNull(task, "task can't be null"); checkNotShutdown(); NodeEngine nodeEngine = getNodeEngine(); Callable<T> callable = createRunnableAdapter(task); Data callableData = nodeEngine.toData(callable); String uuid = newUnsecureUuidString(); int partitionId = getTaskPartitionId(callable); Operation op = new CallableTaskOperation(name, uuid, callableData) .setPartitionId(partitionId); InternalCompletableFuture future = invokeOnPartition(op); boolean sync = checkSync(); if (sync) { try { future.get(); } catch (Exception exception) { logger.warning(exception); } return new CompletedFuture<T>(nodeEngine.getSerializationService(), result, getAsyncExecutor()); } return new CancellableDelegatingFuture<T>(future, result, nodeEngine, uuid, partitionId); }
@Override public <T> Future<T> submit(Runnable task, T result) { checkNotNull(task, "task can't be null"); checkNotShutdown(); NodeEngine nodeEngine = getNodeEngine(); Callable<T> callable = createRunnableAdapter(task); Data callableData = nodeEngine.toData(callable); String uuid = newUnsecureUuidString(); int partitionId = getTaskPartitionId(callable); Operation op = new CallableTaskOperation(name, uuid, callableData) .setPartitionId(partitionId); InternalCompletableFuture future = invokeOnPartition(op); boolean sync = checkSync(); if (sync) { try { future.get(); } catch (Exception exception) { logger.warning(exception); } return new CompletedFuture<T>(nodeEngine.getSerializationService(), result, getAsyncExecutor()); } return new CancellableDelegatingFuture<T>(future, result, nodeEngine, uuid, partitionId); }