You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/04/18 15:04:36 UTC
[37/46] ignite git commit: IGNITE-4907: Fixed excessive service
instances can be started with dynamic deployment. This closes #1766.
IGNITE-4907: Fixed excessive service instances can be started with dynamic deployment. This closes #1766.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/3b93f791
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/3b93f791
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/3b93f791
Branch: refs/heads/ignite-1561-1
Commit: 3b93f791351cf1bb2a5aa1083e8fe208af2b368c
Parents: 99ba9de
Author: Andrey V. Mashenkov <an...@gmail.com>
Authored: Wed Apr 12 13:01:25 2017 +0300
Committer: Andrey V. Mashenkov <an...@gmail.com>
Committed: Tue Apr 18 14:51:53 2017 +0300
----------------------------------------------------------------------
.../service/GridServiceProcessor.java | 2 +-
...ServiceProcessorMultiNodeConfigSelfTest.java | 95 +++++++++++++++++---
.../GridServiceProcessorMultiNodeSelfTest.java | 61 +++++++++++++
3 files changed, 146 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/3b93f791/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
index 12e2081..afe9fea 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
@@ -960,7 +960,7 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite
int perNodeCnt = totalCnt != 0 ? totalCnt / size : maxPerNodeCnt;
int remainder = totalCnt != 0 ? totalCnt % size : 0;
- if (perNodeCnt > maxPerNodeCnt && maxPerNodeCnt != 0) {
+ if (perNodeCnt >= maxPerNodeCnt && maxPerNodeCnt != 0) {
perNodeCnt = maxPerNodeCnt;
remainder = 0;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/3b93f791/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorMultiNodeConfigSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorMultiNodeConfigSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorMultiNodeConfigSelfTest.java
index 1bd3b03..9da62c0 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorMultiNodeConfigSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorMultiNodeConfigSelfTest.java
@@ -17,11 +17,13 @@
package org.apache.ignite.internal.processors.service;
+import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.CountDownLatch;
import org.apache.ignite.Ignite;
import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.internal.IgniteInterruptedCheckedException;
import org.apache.ignite.internal.util.lang.GridAbsPredicateX;
-import org.apache.ignite.services.Service;
import org.apache.ignite.services.ServiceConfiguration;
import org.apache.ignite.testframework.GridTestUtils;
@@ -38,6 +40,9 @@ public class GridServiceProcessorMultiNodeConfigSelfTest extends GridServiceProc
/** Node singleton name. */
private static final String NODE_SINGLE_BUT_CLIENT = "serviceConfigEachNodeButClient";
+ /** Node singleton name. */
+ private static final String NODE_SINGLE_WITH_LIMIT = "serviceConfigWithLimit";
+
/** Affinity service name. */
private static final String AFFINITY = "serviceConfigAffinity";
@@ -51,7 +56,7 @@ public class GridServiceProcessorMultiNodeConfigSelfTest extends GridServiceProc
/** {@inheritDoc} */
@Override protected ServiceConfiguration[] services() {
- ServiceConfiguration[] arr = new ServiceConfiguration[4];
+ List<ServiceConfiguration> cfgs = new ArrayList<>();
ServiceConfiguration cfg = new ServiceConfiguration();
@@ -60,7 +65,7 @@ public class GridServiceProcessorMultiNodeConfigSelfTest extends GridServiceProc
cfg.setTotalCount(1);
cfg.setService(new DummyService());
- arr[0] = cfg;
+ cfgs.add(cfg);
cfg = new ServiceConfiguration();
@@ -68,7 +73,7 @@ public class GridServiceProcessorMultiNodeConfigSelfTest extends GridServiceProc
cfg.setMaxPerNodeCount(1);
cfg.setService(new DummyService());
- arr[1] = cfg;
+ cfgs.add(cfg);
cfg = new ServiceConfiguration();
@@ -79,7 +84,7 @@ public class GridServiceProcessorMultiNodeConfigSelfTest extends GridServiceProc
cfg.setTotalCount(1);
cfg.setService(new AffinityService(AFFINITY_KEY));
- arr[2] = cfg;
+ cfgs.add(cfg);
cfg = new ServiceConfiguration();
@@ -88,9 +93,18 @@ public class GridServiceProcessorMultiNodeConfigSelfTest extends GridServiceProc
cfg.setNodeFilter(new CacheConfiguration.IgniteAllNodesPredicate());
cfg.setService(new DummyService());
- arr[3] = cfg;
+ cfgs.add(cfg);
+
+ cfg = new ServiceConfiguration();
- return arr;
+ cfg.setName(NODE_SINGLE_WITH_LIMIT);
+ cfg.setMaxPerNodeCount(1);
+ cfg.setTotalCount(nodeCount() + 1);
+ cfg.setService(new DummyService());
+
+ cfgs.add(cfg);
+
+ return cfgs.toArray(new ServiceConfiguration[cfgs.size()]);
}
/** {@inheritDoc} */
@@ -107,6 +121,8 @@ public class GridServiceProcessorMultiNodeConfigSelfTest extends GridServiceProc
DummyService.cancelled(NODE_SINGLE) == 0 &&
DummyService.started(NODE_SINGLE_BUT_CLIENT) == nodeCount() &&
DummyService.cancelled(NODE_SINGLE_BUT_CLIENT) == 0 &&
+ DummyService.started(NODE_SINGLE_WITH_LIMIT) >= nodeCount() &&
+ DummyService.cancelled(NODE_SINGLE_WITH_LIMIT) == 0 &&
actualCount(AFFINITY, randomGrid().services().serviceDescriptors()) == 1;
}
},
@@ -170,6 +186,59 @@ public class GridServiceProcessorMultiNodeConfigSelfTest extends GridServiceProc
finally {
stopExtraNodes(nodeCnt);
}
+
+ checkCount(AFFINITY, g.services().serviceDescriptors(), 1);
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testDeployLimits() throws Exception {
+ final Ignite g = randomGrid();
+
+ final String name = NODE_SINGLE_WITH_LIMIT;
+
+ waitForDeployment(name, nodeCount());
+
+ checkCount(name, g.services().serviceDescriptors(), nodeCount());
+
+ int extraNodes = 2;
+
+ CountDownLatch latch = new CountDownLatch(1);
+
+ DummyService.exeLatch(name, latch);
+
+ startExtraNodes(extraNodes);
+
+ try {
+ latch.await();
+
+ checkCount(name, g.services().serviceDescriptors(), nodeCount() + 1);
+ }
+ finally {
+ stopExtraNodes(extraNodes);
+ }
+
+ assertEquals(name, 1, DummyService.cancelled(name));
+
+ waitForDeployment(name, nodeCount());
+
+ checkCount(name, g.services().serviceDescriptors(), nodeCount());
+ }
+
+ /**
+ * @param srvcName Service name
+ * @param expectedDeps Expected number of service deployments
+ *
+ */
+ private boolean waitForDeployment(final String srvcName, final int expectedDeps) throws IgniteInterruptedCheckedException {
+ final Ignite g = randomGrid();
+
+ return GridTestUtils.waitForCondition(new GridAbsPredicateX() {
+ @Override public boolean applyx() {
+ return actualCount(srvcName, g.services().serviceDescriptors()) == expectedDeps;
+ }
+ }, 1500);
}
/**
@@ -212,10 +281,6 @@ public class GridServiceProcessorMultiNodeConfigSelfTest extends GridServiceProc
try {
latch.await();
- // Ensure service is deployed.
- assertNotNull(grid(nodeCount() + newNodes - 1).services()
- .serviceProxy(NODE_SINGLE_BUT_CLIENT, Service.class, false, 2000));
-
assertEquals(name, newNodes, DummyService.started(name));
assertEquals(name, 0, DummyService.cancelled(name));
@@ -224,6 +289,10 @@ public class GridServiceProcessorMultiNodeConfigSelfTest extends GridServiceProc
finally {
stopExtraNodes(newNodes);
}
+
+ waitForDeployment(name, nodeCount());
+
+ checkCount(name, g.services().serviceDescriptors(), nodeCount());
}
/**
@@ -253,5 +322,9 @@ public class GridServiceProcessorMultiNodeConfigSelfTest extends GridServiceProc
finally {
stopExtraNodes(servers + clients);
}
+
+ waitForDeployment(name, nodeCount());
+
+ checkCount(name, g.services().serviceDescriptors(), nodeCount());
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/3b93f791/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorMultiNodeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorMultiNodeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorMultiNodeSelfTest.java
index 8d89969..467974c 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorMultiNodeSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorMultiNodeSelfTest.java
@@ -256,4 +256,65 @@ public class GridServiceProcessorMultiNodeSelfTest extends GridServiceProcessorA
stopGrid("client");
}
}
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testDeployLimits() throws Exception {
+ String name = "serviceWithLimitsUpdateTopology";
+
+ Ignite g = randomGrid();
+
+ final int totalInstances = nodeCount() + 1;
+
+ CountDownLatch latch = new CountDownLatch(nodeCount());
+
+ DummyService.exeLatch(name, latch);
+
+ ServiceConfiguration srvcCfg = new ServiceConfiguration();
+
+ srvcCfg.setName(name);
+ srvcCfg.setMaxPerNodeCount(1);
+ srvcCfg.setTotalCount(totalInstances);
+ srvcCfg.setService(new DummyService());
+
+ IgniteServices svcs = g.services().withAsync();
+
+ svcs.deploy(srvcCfg);
+
+ IgniteFuture<?> fut = svcs.future();
+
+ info("Deployed service: " + name);
+
+ fut.get();
+
+ info("Finished waiting for service future: " + name);
+
+ latch.await();
+
+ TestCase.assertEquals(name, nodeCount(), DummyService.started(name));
+ TestCase.assertEquals(name, 0, DummyService.cancelled(name));
+
+ checkCount(name, g.services().serviceDescriptors(), nodeCount());
+
+ int extraNodes = 2;
+
+ latch = new CountDownLatch(1);
+
+ DummyService.exeLatch(name, latch);
+
+ startExtraNodes(2);
+
+ try {
+ latch.await();
+
+ TestCase.assertEquals(name, totalInstances, DummyService.started(name));
+ TestCase.assertEquals(name, 0, DummyService.cancelled(name));
+
+ checkCount(name, g.services().serviceDescriptors(), totalInstances);
+ }
+ finally {
+ stopExtraNodes(extraNodes);
+ }
+ }
}
\ No newline at end of file