@IgniteSpiMultipleInstancesSupport(value=true) @IgniteSpiConsistencyChecked(optional=true) public class JobStealingFailoverSpi extends IgniteSpiAdapter implements FailoverSpi
JobStealingCollisionSpi
SPI.
When JobStealingCollisionSpi
receives a steal request and rejects jobs so they can be routed to the
appropriate node, it is the responsibility of this JobStealingFailoverSpi
SPI to make sure that the job is indeed re-routed to the node that has sent the initial
request to steal it.
JobStealingFailoverSpi
knows where to route a job based on the
JobStealingCollisionSpi.THIEF_NODE_ATTR
job context attribute
(see ComputeJobContext
).
Prior to rejecting a job, JobStealingCollisionSpi
will populate this
attribute with the ID of the node that wants to steal this job.
Then JobStealingFailoverSpi
will read the value of this attribute and
route the job to the node specified.
If failure is caused by a node crash, and not by steal request, then this
SPI behaves identically to AlwaysFailoverSpi
, and tries to find the
next balanced node to fail-over a job to.
setMaximumFailoverAttempts(int)
).JobStealingFailoverSpi
.
JobStealingFailoverSpi spi = new JobStealingFailoverSpi(); // Override maximum failover attempts. spi.setMaximumFailoverAttempts(5); IgniteConfiguration cfg = new IgniteConfiguration(); // Override default failover SPI. cfg.setFailoverSpiSpi(spi); // Starts grid. G.start(cfg);Here is an example of how to configure
JobStealingFailoverSpi
from Spring XML configuration file.
<property name="failoverSpi"> <bean class="org.apache.ignite.spi.failover.jobstealing.JobStealingFailoverSpi"> <property name="maximumFailoverAttempts" value="5"/> </bean> </property>
For information about Spring framework visit www.springframework.org
FailoverSpi
Modifier and Type | Field and Description |
---|---|
static int |
DFLT_MAX_FAILOVER_ATTEMPTS
Maximum number of attempts to execute a failed job on another node (default is
5 ). |
ignite, igniteInstanceName
Constructor and Description |
---|
JobStealingFailoverSpi() |
Modifier and Type | Method and Description |
---|---|
ClusterNode |
failover(FailoverContext ctx,
List<ClusterNode> top)
This method is called when method
ComputeTask.result(org.apache.ignite.compute.ComputeJobResult, List) returns
value ComputeJobResultPolicy.FAILOVER policy indicating that the result of
job execution must be failed over. |
protected List<String> |
getConsistentAttributeNames()
Returns back a list of attributes that should be consistent
for this SPI.
|
int |
getMaximumFailoverAttempts()
|
Map<String,Object> |
getNodeAttributes()
This method is called before SPI starts (before method
IgniteSpi.spiStart(String)
is called). |
int |
getTotalFailedOverJobsCount()
Get total number of jobs that were failed over including stolen ones.
|
int |
getTotalStolenJobsCount()
Get total number of jobs that were stolen.
|
JobStealingFailoverSpi |
setMaximumFailoverAttempts(int maxFailoverAttempts)
Sets maximum number of attempts to execute a failed job on another node.
|
JobStealingFailoverSpi |
setName(String name)
Sets SPI name.
|
void |
spiStart(String igniteInstanceName)
This method is called to start SPI.
|
void |
spiStop()
This method is called to stop SPI.
|
String |
toString() |
addTimeoutObject, assertParameter, checkConfigurationConsistency0, clientFailureDetectionTimeout, configInfo, createSpiAttributeName, failureDetectionTimeout, failureDetectionTimeoutEnabled, failureDetectionTimeoutEnabled, getExceptionRegistry, getLocalNode, getName, getSpiContext, ignite, initFailureDetectionTimeout, injectables, injectResources, isNodeStopping, onBeforeStart, onClientDisconnected, onClientReconnected, onContextDestroyed, onContextDestroyed0, onContextInitialized, onContextInitialized0, registerMBean, removeTimeoutObject, started, startInfo, startStopwatch, stopInfo, unregisterMBean
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getName, onClientDisconnected, onClientReconnected, onContextDestroyed, onContextInitialized
public static final int DFLT_MAX_FAILOVER_ATTEMPTS
5
).public int getMaximumFailoverAttempts()
@IgniteSpiConfiguration(optional=true) public JobStealingFailoverSpi setMaximumFailoverAttempts(int maxFailoverAttempts)
DFLT_MAX_FAILOVER_ATTEMPTS
value will be used.
Note this value must be identical for all grid nodes in the grid.
maxFailoverAttempts
- Maximum number of attempts to execute a failed
job on another node.this
for chaining.public int getTotalFailedOverJobsCount()
public int getTotalStolenJobsCount()
public Map<String,Object> getNodeAttributes() throws IgniteSpiException
IgniteSpi.spiStart(String)
is called). It allows SPI implementation to add attributes to a local
node. Kernal collects these attributes from all SPI implementations
loaded up and then passes it to discovery SPI so that they can be
exchanged with other nodes.getNodeAttributes
in interface IgniteSpi
getNodeAttributes
in class IgniteSpiAdapter
IgniteSpiException
- Throws in case of any error.public void spiStart(String igniteInstanceName) throws IgniteSpiException
spiStart
in interface IgniteSpi
igniteInstanceName
- Name of Ignite instance this SPI is being started for
(null
for default Ignite instance).IgniteSpiException
- Throws in case of any error during SPI start.public void spiStop() throws IgniteSpiException
Note that this method can be called at any point including during recovery of failed start. It should make no assumptions on what state SPI will be in when this method is called.
spiStop
in interface IgniteSpi
IgniteSpiException
- Thrown in case of any error during SPI stop.public ClusterNode failover(FailoverContext ctx, List<ClusterNode> top)
ComputeTask.result(org.apache.ignite.compute.ComputeJobResult, List)
returns
value ComputeJobResultPolicy.FAILOVER
policy indicating that the result of
job execution must be failed over. Implementation of this method should examine failover
context and choose one of the grid nodes from supplied topology
to retry job execution
on it. For best performance it is advised that FailoverContext.getBalancedNode(List)
method is used to select node for execution of failed job.failover
in interface FailoverSpi
ctx
- Failover context.top
- Collection of all grid nodes within task topology (may include failed node).null
if new node cannot be picked.
If job failover fails (returns null
) the whole task will be failed.protected List<String> getConsistentAttributeNames()
getConsistentAttributeNames
in class IgniteSpiAdapter
public JobStealingFailoverSpi setName(String name)
setName
in class IgniteSpiAdapter
name
- SPI name.this
for chaining.
Follow @ApacheIgnite
Ignite Database and Caching Platform : ver. 2.16.0 Release Date : December 15 2023