17.4. Distributed Task Failover
17.4. Distributed Task Failover Red Hat JBoss Data Grid's distributed execution framework supports task failover in the following cases: Failover due to a node failure where a task is executing. Failover due to a task failure; for example, if a Callable task throws an exception. The failover policy is disabled by default, and Runnable , Callable , and DistributedCallable tasks fail without invoking any failover mechanism. JBoss Data Grid provides a random node failover policy, which will attempt to execute a part of a Distributed task on another random node if one is available. A random failover execution policy can be specified using the following as an example: Example 17.3. Random Failover Execution Policy The DistributedTaskFailoverPolicy interface can also be implemented to provide failover management. Example 17.4. Distributed Task Failover Policy Interface Report a bug
DistributedExecutorService des = new DefaultExecutorService(cache); DistributedTaskBuilder<Boolean> taskBuilder = des.createDistributedTaskBuilder(new SomeCallable()); taskBuilder.failoverPolicy(DefaultExecutorService.RANDOM_NODE_FAILOVER); DistributedTask<Boolean> distributedTask = taskBuilder.build(); Future<Boolean> future = des.submit(distributedTask); Boolean r = future.get(); /** * DistributedTaskFailoverPolicy allows pluggable fail over target selection for a failed remotely * executed distributed task. * */ public interface DistributedTaskFailoverPolicy { /** * As parts of distributively executed task can fail due to the task itself throwing an exception * or it can be an Infinispan system caused failure (e.g node failed or left cluster during task * execution etc). * * @param failoverContext * the FailoverContext of the failed execution * @return result the Address of the Infinispan node selected for fail over execution */ Address failover(FailoverContext context); /** * Maximum number of fail over attempts permitted by this DistributedTaskFailoverPolicy * * @return max number of fail over attempts */ int maxFailoverAttempts(); }