You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by "Andrey Aleksandrov (JIRA)" <ji...@apache.org> on 2018/05/28 15:00:00 UTC

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

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)