Andrey Aleksandrov created IGNITE-8630: ------------------------------------------
Summary: Node filter IgnitePredicate executes twice during deploing on one single node cluster Key: IGNITE-8630 URL: https://issues.apache.org/jira/browse/IGNITE-8630 Project: Ignite Issue Type: Bug Components: managed services Affects Versions: 2.4 Reporter: Andrey Aleksandrov Fix For: 2.6 Next code: {code:java} Ignite ignite = IgnitionEx.start("examples/config/example-ignite.xml", "ignite-1"); // Deploy services only on server nodes. ignite.services().deploy(new ServiceConfiguration() .setMaxPerNodeCount(1) .setNodeFilter(new IgnitePredicate<ClusterNode>() { Ignite filterIgnite; @Override public boolean apply(ClusterNode node) { System.out.println("Is local node: " + node.isLocal()); System.out.println("ignite: " + (isNull(filterIgnite) ? null : filterIgnite.name())); return true; } @IgniteInstanceResource void setFilterIgnite(Ignite filterIgnite) { this.filterIgnite = filterIgnite; } }) .setName("my-service") .setService(new SimpleMapServiceImpl<>()) ); {code} Produces next output: {code:java} Is local node: true ignite: ignite-1 Service was initialized: my-service Executing distributed service: my-service Is local node: true ignite: ignite-1{code} In case if we will increase the cluster size to 2 then we will have: {code:java} Ignite ignite = IgnitionEx.start("examples/config/example-ignite.xml", "ignite-1"); Ignite ignite2 = IgnitionEx.start("examples/config/example-ignite.xml", "ignite-2"); // Deploy services only on server nodes. ignite.services().deploy(new ServiceConfiguration() .setMaxPerNodeCount(1) .setNodeFilter(new IgnitePredicate<ClusterNode>() { Ignite filterIgnite; @Override public boolean apply(ClusterNode node) { System.out.println("Is local node: " + node.isLocal()); System.out.println("ignite: " + (isNull(filterIgnite) ? null : filterIgnite.name())); return true; } @IgniteInstanceResource void setFilterIgnite(Ignite filterIgnite) { this.filterIgnite = filterIgnite; } }) .setName("my-service") .setService(new SimpleMapServiceImpl<>()) ); {code} We will get: {code:java} Is local node: true ignite: ignite-1 Is local node: false ignite: ignite-1 Service was initialized: my-service Executing distributed service: my-service Service was initialized: my-service Is local node: true ignite: ignite-1 Is local node: false ignite: ignite-1 Executing distributed service: my-service Is local node: true ignite: ignite-1 Is local node: false ignite: ignite-1 {code} So we have additional execution: {code:java} Is local node: true ignite: ignite-1 Is local node: false ignite: ignite-1{code} So Ignite executes apply method several times (2 times for 1 server, 6 times for 2 servers). This behavior should be documented or fixed because at the moment it's could be unexpected for the user. -- This message was sent by Atlassian JIRA (v7.6.3#76005)