You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Vyacheslav Daradur (JIRA)" <ji...@apache.org> on 2019/01/17 08:50:00 UTC

[jira] [Resolved] (IGNITE-8630) Node filter IgnitePredicate executes twice during deploying on one single node cluster

     [ https://issues.apache.org/jira/browse/IGNITE-8630?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Vyacheslav Daradur resolved IGNITE-8630.
----------------------------------------
    Resolution: Won't Fix

I closed the issue because it is not actual since IGNITE-9607 has been merged.

I checked the issue with the following code snippet.
{CODE}
Ignite ignite = startGrid("ignite-1");

startGrid("ignite-2");

// Deploy services only on server nodes.
ignite.services().deploy(new ServiceConfiguration()
 .setMaxPerNodeCount(1)
 .setNodeFilter((IgnitePredicate<ClusterNode>)node -> {
 System.out.println("Is local node: " + node.isLocal());
 System.out.println("ignite: " + Ignition.localIgnite().name());
 return true;
 })
 .setName("my-service")
 .setService(new DummyService())
);
{CODE}
The output is:
{NOFORMAT}
Is local node: true
ignite: ignite-1
Is local node: false
ignite: ignite-1
Is local node: false
ignite: ignite-2
Is local node: true
ignite: ignite-2
Initializing service: my-service
Initializing service: my-service
[2019-01-17 11:41:53,341][INFO ][services-deployment-worker-#97%ignite-2%][IgniteServiceProcessor] Starting service instance [name=my-service, execId=8b11d50e-8201-4754-ad4b-7922b1120772]
[2019-01-17 11:41:53,341][INFO ][services-deployment-worker-#48%ignite-1%][IgniteServiceProcessor] Starting service instance [name=my-service, execId=7e9b9730-d880-4483-bbe6-ff98cb031a9d]
Executing service: my-service
Executing service: my-service
{NOFORMAT}

> 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)