[ https://issues.apache.org/jira/browse/IGNITE-8630?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Vyacheslav Daradur reassigned IGNITE-8630: ------------------------------------------ Assignee: Vyacheslav Daradur > Node filter IgnitePredicate executes twice during deploying 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 > Assignee: Vyacheslav Daradur > Priority: Major > Fix For: 2.8 > > > 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. > You can see the same behaviour during deploying of the caches with nodeFilter -- This message was sent by Atlassian JIRA (v7.6.3#76005)