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)