You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ni...@apache.org on 2018/03/22 14:18:03 UTC
ignite git commit: IGNITE-5910: Method stopGrid(name) doesn't work in
multiJvm mode - Fixes #2382.
Repository: ignite
Updated Branches:
refs/heads/master 5765d60e9 -> 5ccb5482e
IGNITE-5910: Method stopGrid(name) doesn't work in multiJvm mode - Fixes #2382.
Signed-off-by: Nikolay Izhikov <ni...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/5ccb5482
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/5ccb5482
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/5ccb5482
Branch: refs/heads/master
Commit: 5ccb5482e2acc9dff502a0df7390e320760fed8d
Parents: 5765d60
Author: Vyacheslav Daradur <da...@gmail.com>
Authored: Thu Mar 22 17:10:42 2018 +0300
Committer: Nikolay Izhikov <ni...@apache.org>
Committed: Thu Mar 22 17:11:54 2018 +0300
----------------------------------------------------------------------
.../testframework/junits/GridAbstractTest.java | 7 ++--
.../junits/multijvm/IgniteProcessProxy.java | 43 +++++++++++++++++---
2 files changed, 42 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/5ccb5482/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
index 7e4b501..d597d9a 100755
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
@@ -1015,12 +1015,13 @@ public abstract class GridAbstractTest extends TestCase {
@SuppressWarnings({"deprecation"})
protected void stopGrid(@Nullable String igniteInstanceName, boolean cancel, boolean awaitTop) {
try {
- Ignite ignite = grid(igniteInstanceName);
+ IgniteEx ignite = grid(igniteInstanceName);
assert ignite != null : "Ignite returned null grid for name: " + igniteInstanceName;
- info(">>> Stopping grid [name=" + ignite.name() + ", id=" +
- ((IgniteKernal)ignite).context().localNodeId() + ']');
+ UUID id = ignite instanceof IgniteProcessProxy ? ignite.localNode().id() : ignite.context().localNodeId();
+
+ info(">>> Stopping grid [name=" + ignite.name() + ", id=" + id + ']');
if (!isRemoteJvm(igniteInstanceName))
G.stop(igniteInstanceName, cancel);
http://git-wip-us.apache.org/repos/asf/ignite/blob/5ccb5482/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
index 86a374a..fb59ae2 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
@@ -20,6 +20,7 @@ package org.apache.ignite.testframework.junits.multijvm;
import java.util.ArrayList;
import java.util.Collection;
import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CountDownLatch;
@@ -53,6 +54,7 @@ import org.apache.ignite.IgniteServices;
import org.apache.ignite.IgniteSet;
import org.apache.ignite.IgniteTransactions;
import org.apache.ignite.DataStorageMetrics;
+import org.apache.ignite.Ignition;
import org.apache.ignite.MemoryMetrics;
import org.apache.ignite.PersistenceMetrics;
import org.apache.ignite.cache.affinity.Affinity;
@@ -104,6 +106,9 @@ public class IgniteProcessProxy implements IgniteEx {
/** Property that specify alternative {@code JAVA_HOME}. */
private static final String TEST_MULTIJVM_JAVA_HOME = "test.multijvm.java.home";
+ /** Waiting milliseconds of the left of a node to topology. */
+ private static final long NODE_LEFT_TIMEOUT = 30_000L;
+
/** Jvm process with ignite instance. */
private final transient GridJavaProcess proc;
@@ -293,12 +298,39 @@ public class IgniteProcessProxy implements IgniteEx {
*
* @param igniteInstanceName Ignite instance name.
* @param cancel If {@code true} then all jobs currently will be cancelled.
+ * @throws Exception In case of the node stopping error.
*/
- public static void stop(String igniteInstanceName, boolean cancel) {
- IgniteProcessProxy proxy = gridProxies.get(igniteInstanceName);
+ public static void stop(String igniteInstanceName, boolean cancel) throws Exception {
+ final IgniteProcessProxy proxy = gridProxies.get(igniteInstanceName);
if (proxy != null) {
- proxy.remoteCompute().run(new StopGridTask(igniteInstanceName, cancel));
+ final CountDownLatch rmtNodeStoppedLatch = new CountDownLatch(1);
+ final UUID rmNodeId = proxy.getId();
+
+ proxy.locJvmGrid.events().localListen(new IgnitePredicateX<Event>() {
+ @Override public boolean applyx(Event e) {
+ if (((DiscoveryEvent)e).eventNode().id().equals(rmNodeId)) {
+ rmtNodeStoppedLatch.countDown();
+
+ return false;
+ }
+
+ return true;
+ }
+ }, EventType.EVT_NODE_LEFT);
+
+ try {
+ proxy.remoteCompute().runAsync(new StopGridTask(igniteInstanceName, cancel));
+
+ if (!rmtNodeStoppedLatch.await(NODE_LEFT_TIMEOUT, TimeUnit.MILLISECONDS))
+ throw new IllegalStateException("Remote node has not stopped [id=" + rmNodeId + ']');
+ }
+ catch (Throwable t) {
+ proxy.log().error("Failed to stop grid [igniteInstanceName=" + igniteInstanceName +
+ ", cancel=" + cancel + ']', t);
+
+ throw t;
+ }
gridProxies.remove(igniteInstanceName, proxy);
}
@@ -848,7 +880,8 @@ public class IgniteProcessProxy implements IgniteEx {
}
/**
- *
+ * Executes {@link Ignition#stop(String, boolean)} with given arguments in a separated thread, doesn't wait up the
+ * fulfillment.
*/
private static class StopGridTask implements IgniteRunnable {
/** Ignite instance name. */
@@ -868,7 +901,7 @@ public class IgniteProcessProxy implements IgniteEx {
/** {@inheritDoc} */
@Override public void run() {
- G.stop(igniteInstanceName, cancel);
+ CompletableFuture.runAsync(() -> G.stop(igniteInstanceName, cancel));
}
}