@Override public <T> DurableExecutorServiceFuture<T> submit(Runnable task, T result) { int partitionId = getTaskPartitionId(task); Callable<T> callable = createRunnableAdapter(task); return submitToPartition(callable, partitionId, result); }
@Override public void executeOnKeyOwner(Runnable task, Object key) { int partitionId = getPartitionId(key); Callable callable = createRunnableAdapter(task); submitToPartition(callable, partitionId, null); }
@Override public <T> DurableExecutorServiceFuture<T> submit(Callable<T> task) { int partitionId = getTaskPartitionId(task); return submitToPartition(task, partitionId, null); }
@Override public <T> DurableExecutorServiceFuture<T> submitToKeyOwner(Callable<T> task, Object key) { int partitionId = getPartitionId(key); return submitToPartition(task, partitionId, null); }
private <T> DurableExecutorServiceFuture<T> submitToPartition(Callable<T> task, int partitionId, T result) { checkNotNull(task, "task should not be null"); ClientMessage request = DurableExecutorSubmitToPartitionCodec.encodeRequest(name, toData(task)); int sequence; try { ClientMessage response = invokeOnPartition(request, partitionId); sequence = DurableExecutorSubmitToPartitionCodec.decodeResponse(response).response; } catch (Throwable t) { return new ClientDurableExecutorServiceCompletedFuture<T>(t, getUserExecutor()); } ClientMessage clientMessage = DurableExecutorRetrieveResultCodec.encodeRequest(name, sequence); ClientInvocationFuture future = new ClientInvocation(getClient(), clientMessage, getName(), partitionId).invoke(); long taskId = Bits.combineToLong(partitionId, sequence); return new ClientDurableExecutorServiceDelegatingFuture<T>(future, getSerializationService(), RETRIEVE_RESPONSE_DECODER, result, taskId); }
@Override public <T> Future<T> retrieveAndDisposeResult(long taskId) { int partitionId = Bits.extractInt(taskId, false); int sequence = Bits.extractInt(taskId, true); ClientMessage clientMessage = DurableExecutorRetrieveAndDisposeResultCodec.encodeRequest(name, sequence); ClientInvocationFuture future = new ClientInvocation(getClient(), clientMessage, getName(), partitionId).invoke(); return new ClientDelegatingFuture<T>(future, getSerializationService(), RETRIEVE_RESPONSE_DECODER); }
@Override protected void onInitialize() { ClientPartitionService partitionService = getContext().getPartitionService(); partitionCount = partitionService.getPartitionCount(); }
@Override public void shutdown() { ClientMessage request = DurableExecutorShutdownCodec.encodeRequest(name); invoke(request); }
@Override public void disposeResult(long taskId) { int partitionId = Bits.extractInt(taskId, false); int sequence = Bits.extractInt(taskId, true); ClientMessage clientMessage = DurableExecutorDisposeResultCodec.encodeRequest(name, sequence); invokeOnPartition(clientMessage, partitionId); }
private int getTaskPartitionId(Object task) { if (task instanceof PartitionAware) { Object partitionKey = ((PartitionAware) task).getPartitionKey(); if (partitionKey != null) { return getPartitionId(partitionKey); } } return random.nextInt(partitionCount); }
private <T> DurableExecutorServiceFuture<T> submitToPartition(Callable<T> task, int partitionId, T result) { checkNotNull(task, "task should not be null"); ClientMessage request = DurableExecutorSubmitToPartitionCodec.encodeRequest(name, toData(task)); int sequence; try { ClientMessage response = invokeOnPartition(request, partitionId); sequence = DurableExecutorSubmitToPartitionCodec.decodeResponse(response).response; } catch (Throwable t) { return new ClientDurableExecutorServiceCompletedFuture<T>(t, getUserExecutor()); } ClientMessage clientMessage = DurableExecutorRetrieveResultCodec.encodeRequest(name, sequence); ClientInvocationFuture future = new ClientInvocation(getClient(), clientMessage, getName(), partitionId).invoke(); long taskId = Bits.combineToLong(partitionId, sequence); return new ClientDurableExecutorServiceDelegatingFuture<T>(future, getSerializationService(), RETRIEVE_RESPONSE_DECODER, result, taskId); }
@Override public <T> Future<T> retrieveAndDisposeResult(long taskId) { int partitionId = Bits.extractInt(taskId, false); int sequence = Bits.extractInt(taskId, true); ClientMessage clientMessage = DurableExecutorRetrieveAndDisposeResultCodec.encodeRequest(name, sequence); ClientInvocationFuture future = new ClientInvocation(getClient(), clientMessage, getName(), partitionId).invoke(); return new ClientDelegatingFuture<T>(future, getSerializationService(), RETRIEVE_RESPONSE_DECODER); }
@Override public <T> DurableExecutorServiceFuture<T> submit(Callable<T> task) { int partitionId = getTaskPartitionId(task); return submitToPartition(task, partitionId, null); }
@Override public <T> DurableExecutorServiceFuture<T> submitToKeyOwner(Callable<T> task, Object key) { int partitionId = getPartitionId(key); return submitToPartition(task, partitionId, null); }
@Override protected void onInitialize() { ClientPartitionService partitionService = getContext().getPartitionService(); partitionCount = partitionService.getPartitionCount(); }
@Override public void shutdown() { ClientMessage request = DurableExecutorShutdownCodec.encodeRequest(name); invoke(request); }
@Override public void disposeResult(long taskId) { int partitionId = Bits.extractInt(taskId, false); int sequence = Bits.extractInt(taskId, true); ClientMessage clientMessage = DurableExecutorDisposeResultCodec.encodeRequest(name, sequence); invokeOnPartition(clientMessage, partitionId); }
private int getTaskPartitionId(Object task) { if (task instanceof PartitionAware) { Object partitionKey = ((PartitionAware) task).getPartitionKey(); if (partitionKey != null) { return getPartitionId(partitionKey); } } return random.nextInt(partitionCount); }
@Override public void execute(Runnable task) { int partitionId = getTaskPartitionId(task); Callable callable = createRunnableAdapter(task); submitToPartition(callable, partitionId, null); }
@Override public <T> Future<T> retrieveResult(long taskId) { int partitionId = Bits.extractInt(taskId, false); int sequence = Bits.extractInt(taskId, true); ClientMessage clientMessage = DurableExecutorRetrieveResultCodec.encodeRequest(name, sequence); ClientInvocationFuture future = new ClientInvocation(getClient(), clientMessage, getName(), partitionId).invoke(); return new ClientDelegatingFuture<T>(future, getSerializationService(), RETRIEVE_RESPONSE_DECODER); }