Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.4
-
None
Description
If a node is not a part of the baseline topology, the services will never be deployed on it. In particular, if that node calls a synchronous deploy* method, the method will hang.
After the node is added to the baseline, all previously initiated deployments succeed (and deploy* methods return).
It seems that the issue is with the continuous query started by the GridServiceProcessor on the ignite-sys-cache.
Example:
=====================
public class BltServicesBug { public static void main(String[] args) { // start one node IgniteConfiguration cfg1 = new IgniteConfiguration() .setIgniteInstanceName("node1") .setDataStorageConfiguration( new DataStorageConfiguration() .setDefaultDataRegionConfiguration( new DataRegionConfiguration() .setPersistenceEnabled(true) ) ); try (Ignite ignite1 = Ignition.start(cfg1)) { // activate and set baseline topology ignite1.cluster().active(true); // start another node IgniteConfiguration cfg2 = new IgniteConfiguration(cfg1) .setIgniteInstanceName("node2"); try (Ignite ignite2 = Ignition.start(cfg2)) { // try to deploy a service; // this call hangs until the second node is added to the BLT (e.g. externally via control.sh) ignite2.services().deployNodeSingleton("myService", new MyServiceImpl()); System.out.println(">>>>> Deployed"); } } } private static class MyServiceImpl implements Service { @Override public void cancel(ServiceContext ctx) { } @Override public void init(ServiceContext ctx) { } @Override public void execute(ServiceContext ctx) { } } } }
=====================
Attachments
Issue Links
- links to