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;
     }
 }