Can different nodes have different collisionSpi settings? What setting
would take effect - the collisionSpi used to start the grid or the
setting on the node executing the job or the setting on the node that
submitted the task?
I recently encountered a log file that could only have been generated if
two jobs were executing on a node concurrently. I have three nodes.
Two are started via ignite.bat and configured with parallelJobsNumber=1.
Due to some recent changes the third node lost its collisionSpi
configuration. Notice in java code below that the collisionSpi on that
node isn't specified.
The behavior I'm seeing suggests that it is the grid configuration on
the node submitting the task that matters - is that the case?
Two nodes started with this:
<bean id="grid.cfg"
class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="marshaller">
<bean
class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
<property name="requireSerializable" value="false"/>
</bean>
</property>
<property name="collisionSpi">
<bean
class="org.apache.ignite.spi.collision.fifoqueue.FifoQueueCollisionSpi">
<property name="parallelJobsNumber" value="1"/>
</bean>
</property>
<property name="metricsLogFrequency" value="0"/>
</bean>
The third node starts and submits a task via something similar to:
try {
IgniteConfiguration igniteConfig = new IgniteConfiguration();
igniteConfig.setMarshaller(new OptimizedMarshaller());
Ignite grid = Ignition.start(igniteConfig);
ClusterGroup forRemotes = grid.cluster().forRemotes();
MyComputeTask task = new MyComputeTask();
IgniteCompute withAsync = grid.compute(forRemotes).withAsync();
withAsync.execute(task, options);
future = withAsync.future();
Boolean retval1 = Boolean.FALSE;
try {
retval1 = future.get();
} catch (IgniteException e) {
e.printStackTrace();
}
retval = retval1;
} catch (IgniteException e) {
e.printStackTrace();
} finally {
Ignition.stop(true);
}