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)