public class DefaultExecutorService extends AbstractExecutorService implements DistributedExecutorService
ExecutorService
and DistributedExecutorService
.
This ExecutorService provides methods to submit tasks for an execution on a cluster of Infinispan
nodes.
Note that due to potential task migration to another nodes every Callable
,
Runnable
and/or DistributedCallable
submitted must be either Serializable
or Externalizable
. Also the value returned from a callable must be Serializable
or Externalizable
. Unfortunately if the value returned is not serializable then a
NotSerializableException
will be thrown.
Modifier and Type | Field and Description |
---|---|
protected AdvancedCache |
cache |
protected CancellationService |
cancellationService |
protected ClusteringDependentLogic |
clusterDependentLogic |
protected CommandsFactory |
factory |
protected InterceptorChain |
invoker |
protected AtomicBoolean |
isShutdown |
protected ExecutorService |
localExecutorService |
protected Marshaller |
marshaller |
static DistributedTaskFailoverPolicy |
NO_FAILOVER |
static DistributedTaskFailoverPolicy |
RANDOM_NODE_FAILOVER |
protected RpcManager |
rpc |
protected boolean |
takeExecutorOwnership |
Constructor and Description |
---|
DefaultExecutorService(Cache<?,?> masterCacheNode)
Creates a new DefaultExecutorService given a master cache node for local task execution.
|
DefaultExecutorService(Cache<?,?> masterCacheNode,
ExecutorService localExecutorService)
Creates a new DefaultExecutorService given a master cache node and an ExecutorService for
parallel execution of tasks ran on this node.
|
DefaultExecutorService(Cache<?,?> masterCacheNode,
ExecutorService localExecutorService,
boolean takeExecutorOwnership)
Creates a new DefaultExecutorService given a master cache node and an ExecutorService for
parallel execution of task ran on this node.
|
Modifier and Type | Method and Description |
---|---|
boolean |
awaitTermination(long timeout,
TimeUnit unit) |
protected <T> Callable<T> |
clone(Callable<T> task) |
<T> DistributedTaskBuilder<T> |
createDistributedTaskBuilder(Callable<T> callable)
Returns DistributedTaskBuilder for this DistributedExecutorService and a given Callable.
|
protected <T,K> org.infinispan.distexec.DefaultExecutorService.DistributedTaskPart<T> |
createDistributedTaskPart(DistributedTask<T> task,
DistributedExecuteCommand<T> c,
Address target,
int failoverCount) |
protected <T,K> org.infinispan.distexec.DefaultExecutorService.DistributedTaskPart<T> |
createDistributedTaskPart(DistributedTask<T> task,
DistributedExecuteCommand<T> c,
List<K> inputKeys,
Address target,
int failoverCount) |
void |
execute(Runnable command) |
protected <T> List<Address> |
executionCandidates(DistributedTask<T> task) |
protected List<Address> |
getMembers() |
<T> T |
invokeAny(Collection<? extends Callable<T>> tasks) |
<T> T |
invokeAny(Collection<? extends Callable<T>> tasks,
long timeout,
TimeUnit unit) |
boolean |
isShutdown() |
boolean |
isTerminated() |
protected <K> Map<Address,List<K>> |
keysToExecutionNodes(DistributedTaskExecutionPolicy policy,
K... input) |
protected <T> RunnableFuture<T> |
newTaskFor(Callable<T> callable) |
protected <T> RunnableFuture<T> |
newTaskFor(Runnable runnable,
T value) |
protected List<Address> |
randomClusterMembers(List<Address> members,
int numNeeded) |
protected <T> Address |
selectExecutionNode(DistributedTask<T> task) |
protected Address |
selectExecutionNode(List<Address> candidates) |
void |
shutdown() |
List<Runnable> |
shutdownNow() |
<T> Future<T> |
submit(Address target,
Callable<T> task)
Submits the given Callable task for execution on the specified target Infinispan node.
|
<T> Future<T> |
submit(Address target,
DistributedTask<T> task)
Submits the given DistributedTask for execution on the specified target Infinispan node.
|
<T> NotifyingFuture<T> |
submit(Callable<T> task) |
<T,K> Future<T> |
submit(Callable<T> task,
K... input)
Submits the given Callable task for execution on a single Infinispan node.
|
<T,K> Future<T> |
submit(DistributedTask<T> task,
K... input)
Submits the given DistributedTask for execution on a single Infinispan node.
|
<T> NotifyingFuture<T> |
submit(Runnable task,
T result) |
<T> List<Future<T>> |
submitEverywhere(Callable<T> task)
Submits the given Callable task for execution on all available Infinispan nodes.
|
<T,K> List<Future<T>> |
submitEverywhere(Callable<T> task,
K... input)
Submits the given Callable task for execution on all available Infinispan nodes using input
keys specified by K input.
|
<T> List<Future<T>> |
submitEverywhere(DistributedTask<T> task)
Submits the given DistributedTask for execution on all available Infinispan nodes.
|
<T,K> List<Future<T>> |
submitEverywhere(DistributedTask<T> task,
K... input)
Submits the given DistributedTask for execution on all available Infinispan nodes using input
keys specified by K input.
|
invokeAll, invokeAll, submit
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
invokeAll, invokeAll, submit
public static final DistributedTaskFailoverPolicy NO_FAILOVER
public static final DistributedTaskFailoverPolicy RANDOM_NODE_FAILOVER
protected final AtomicBoolean isShutdown
protected final AdvancedCache cache
protected final RpcManager rpc
protected final InterceptorChain invoker
protected final CommandsFactory factory
protected final Marshaller marshaller
protected final ExecutorService localExecutorService
protected final CancellationService cancellationService
protected final ClusteringDependentLogic clusterDependentLogic
protected final boolean takeExecutorOwnership
public DefaultExecutorService(Cache<?,?> masterCacheNode)
masterCacheNode
- Cache node initiating distributed taskpublic DefaultExecutorService(Cache<?,?> masterCacheNode, ExecutorService localExecutorService)
Note that DefaultExecutorService will not shutdown client supplied localExecutorService once
this DefaultExecutorService is shutdown. Lifecycle management of a supplied ExecutorService is
left to the client
Also note that client supplied ExecutorService should not execute tasks in the caller's thread
( i.e rejectionHandler of ThreadPoolExecutor
configured with {link
ThreadPoolExecutor.CallerRunsPolicy
)
masterCacheNode
- Cache node initiating distributed tasklocalExecutorService
- ExecutorService to run local taskspublic DefaultExecutorService(Cache<?,?> masterCacheNode, ExecutorService localExecutorService, boolean takeExecutorOwnership)
masterCacheNode
- Cache node initiating distributed tasklocalExecutorService
- ExecutorService to run local taskstakeExecutorOwnership
- if true ExecutorService.shutdown()
and
ExecutorService.shutdownNow()
method will shutdown
localExecutorService as wellpublic <T> DistributedTaskBuilder<T> createDistributedTaskBuilder(Callable<T> callable)
DistributedExecutorService
createDistributedTaskBuilder
in interface DistributedExecutorService
callable
- the execution unit of DistributedTaskDistributedTask
public <T> NotifyingFuture<T> submit(Runnable task, T result)
submit
in interface ExecutorService
submit
in class AbstractExecutorService
public <T> NotifyingFuture<T> submit(Callable<T> task)
submit
in interface ExecutorService
submit
in class AbstractExecutorService
public void shutdown()
shutdown
in interface ExecutorService
protected <T> List<Address> executionCandidates(DistributedTask<T> task)
public List<Runnable> shutdownNow()
shutdownNow
in interface ExecutorService
public boolean isShutdown()
isShutdown
in interface ExecutorService
public boolean isTerminated()
isTerminated
in interface ExecutorService
public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
awaitTermination
in interface ExecutorService
InterruptedException
public <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException
invokeAny
in interface ExecutorService
invokeAny
in class AbstractExecutorService
InterruptedException
ExecutionException
public <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
invokeAny
in interface ExecutorService
invokeAny
in class AbstractExecutorService
InterruptedException
ExecutionException
TimeoutException
protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value)
newTaskFor
in class AbstractExecutorService
protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable)
newTaskFor
in class AbstractExecutorService
public <T> Future<T> submit(Address target, Callable<T> task)
DistributedExecutorService
submit
in interface DistributedExecutorService
target
- address of Infinispan node selected for execution of the tasktask
- a task to execute on selected Infinispan nodepublic <T> Future<T> submit(Address target, DistributedTask<T> task)
DistributedExecutorService
submit
in interface DistributedExecutorService
target
- address of Infinispan node selected for execution of the tasktask
- a task to execute on selected Infinispan nodepublic <T,K> Future<T> submit(Callable<T> task, K... input)
DistributedExecutorService
Execution environment will chose an arbitrary node N hosting some or all of the keys specified as input. If all keys are not available locally at node N they will be retrieved from the cluster.
submit
in interface DistributedExecutorService
task
- a task to execute across Infinispan clusterinput
- input keys for this task, effective if and only if task is instance of DistributedCallable
public <T,K> Future<T> submit(DistributedTask<T> task, K... input)
DistributedExecutorService
Execution environment will chose an arbitrary node N hosting some or all of the keys specified as input. If all keys are not available locally at node N they will be retrieved from the cluster.
submit
in interface DistributedExecutorService
task
- a DistributedTask to execute across Infinispan clusterinput
- input keys for this task, effective if and only if task's callable is instance of
DistributedCallable
public <T> List<Future<T>> submitEverywhere(Callable<T> task)
DistributedExecutorService
submitEverywhere
in interface DistributedExecutorService
task
- a task to execute across Infinispan clusterpublic <T> List<Future<T>> submitEverywhere(DistributedTask<T> task)
DistributedExecutorService
submitEverywhere
in interface DistributedExecutorService
task
- a task to execute across Infinispan clusterpublic <T,K> List<Future<T>> submitEverywhere(Callable<T> task, K... input)
DistributedExecutorService
Execution environment will chose all nodes in Infinispan cluster where input keys are local, migrate given Callable instance to those nodes, execute it and return result as a list of Futures
submitEverywhere
in interface DistributedExecutorService
task
- a task to execute across Infinispan clusterinput
- input keys for this task, effective if and only if task is instance of DistributedCallable
public <T,K> List<Future<T>> submitEverywhere(DistributedTask<T> task, K... input)
DistributedExecutorService
Execution environment will chose all nodes in Infinispan cluster where input keys are local, migrate given Callable instance to those nodes, execute it and return result as a list of Futures
submitEverywhere
in interface DistributedExecutorService
task
- a task to execute across Infinispan clusterinput
- input keys for this task, effective if and only if task is instance of DistributedCallable
protected <T,K> org.infinispan.distexec.DefaultExecutorService.DistributedTaskPart<T> createDistributedTaskPart(DistributedTask<T> task, DistributedExecuteCommand<T> c, List<K> inputKeys, Address target, int failoverCount)
protected <T,K> org.infinispan.distexec.DefaultExecutorService.DistributedTaskPart<T> createDistributedTaskPart(DistributedTask<T> task, DistributedExecuteCommand<T> c, Address target, int failoverCount)
protected <T> Address selectExecutionNode(DistributedTask<T> task)
protected List<Address> randomClusterMembers(List<Address> members, int numNeeded)
protected <K> Map<Address,List<K>> keysToExecutionNodes(DistributedTaskExecutionPolicy policy, K... input)
Copyright © 2014 JBoss, a division of Red Hat. All Rights Reserved.