You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@storm.apache.org by bo...@apache.org on 2017/09/07 19:14:54 UTC
[13/18] storm git commit: Added in shutdown hook to kill topos on exit
Added in shutdown hook to kill topos on exit
Project: http://git-wip-us.apache.org/repos/asf/storm/repo
Commit: http://git-wip-us.apache.org/repos/asf/storm/commit/2f5cde87
Tree: http://git-wip-us.apache.org/repos/asf/storm/tree/2f5cde87
Diff: http://git-wip-us.apache.org/repos/asf/storm/diff/2f5cde87
Branch: refs/heads/master
Commit: 2f5cde873a4fc3733b72cafb9761e844340c88ff
Parents: 381387b
Author: Robert (Bobby) Evans <ev...@yahoo-inc.com>
Authored: Fri Sep 1 09:29:06 2017 -0500
Committer: Robert (Bobby) Evans <ev...@yahoo-inc.com>
Committed: Fri Sep 1 09:29:06 2017 -0500
----------------------------------------------------------------------
.../apache/storm/loadgen/ScopedTopologySet.java | 22 +++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/storm/blob/2f5cde87/examples/storm-loadgen/src/main/java/org/apache/storm/loadgen/ScopedTopologySet.java
----------------------------------------------------------------------
diff --git a/examples/storm-loadgen/src/main/java/org/apache/storm/loadgen/ScopedTopologySet.java b/examples/storm-loadgen/src/main/java/org/apache/storm/loadgen/ScopedTopologySet.java
index 1b6ed74..f7e7912 100644
--- a/examples/storm-loadgen/src/main/java/org/apache/storm/loadgen/ScopedTopologySet.java
+++ b/examples/storm-loadgen/src/main/java/org/apache/storm/loadgen/ScopedTopologySet.java
@@ -29,7 +29,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * A set of topology names that will be killed when this is closed.
+ * A set of topology names that will be killed when this is closed, or when the
+ * program exits.
*/
public class ScopedTopologySet extends HashSet<String> implements AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(ScopedTopologySet.class);
@@ -40,11 +41,21 @@ public class ScopedTopologySet extends HashSet<String> implements AutoCloseable
}
private final Nimbus.Iface client;
- private final Set<String> unmodWrapper;
+ private boolean closed = false;
+ /**
+ * Constructor.
+ * @param client the client used to kill the topologies when this exist.
+ */
public ScopedTopologySet(Nimbus.Iface client) {
this.client = client;
- unmodWrapper = Collections.unmodifiableSet(this);
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ try {
+ close();
+ } catch (Exception e) {
+ LOG.error("Error trying to shutdown topologies on exit", e);
+ }
+ }));
}
@Override
@@ -69,11 +80,15 @@ public class ScopedTopologySet extends HashSet<String> implements AutoCloseable
@Override
public void close() {
+ if (closed) {
+ return;
+ }
RuntimeException saved = null;
for (Iterator<String> it = super.iterator(); it.hasNext();) {
String name = it.next();
try {
client.killTopologyWithOpts(name, NO_WAIT_KILL);
+ it.remove();
} catch (Exception e) {
RuntimeException wrapped = new RuntimeException("Error trying to kill " + name, e);
if (saved != null) {
@@ -87,5 +102,6 @@ public class ScopedTopologySet extends HashSet<String> implements AutoCloseable
if (saved != null) {
throw saved;
}
+ closed = true;
}
}