KUDU-1669. Java client tests leak orphan processes (part 2)

In some cases we weren't waiting for the processes to actually finish.

Change-Id: I61d33ca2339048a51acfbb35f5b71e827d3a47f7
Reviewed-on: http://gerrit.cloudera.org:8080/4636
Reviewed-by: Adar Dembo <[email protected]>
Tested-by: Kudu Jenkins


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/bce1dd77
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/bce1dd77
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/bce1dd77

Branch: refs/heads/master
Commit: bce1dd7772c28a5521d97ffbcf02ee17216174a3
Parents: 3c33847
Author: Jean-Daniel Cryans <[email protected]>
Authored: Wed Oct 5 14:55:13 2016 -0700
Committer: Jean-Daniel Cryans <[email protected]>
Committed: Wed Oct 5 23:46:16 2016 +0000

----------------------------------------------------------------------
 .../org/apache/kudu/client/MiniKuduCluster.java | 36 +++++++++++++++-----
 1 file changed, 27 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/bce1dd77/java/kudu-client/src/test/java/org/apache/kudu/client/MiniKuduCluster.java
----------------------------------------------------------------------
diff --git 
a/java/kudu-client/src/test/java/org/apache/kudu/client/MiniKuduCluster.java 
b/java/kudu-client/src/test/java/org/apache/kudu/client/MiniKuduCluster.java
index 386ce9e..22e4bfc 100644
--- a/java/kudu-client/src/test/java/org/apache/kudu/client/MiniKuduCluster.java
+++ b/java/kudu-client/src/test/java/org/apache/kudu/client/MiniKuduCluster.java
@@ -294,8 +294,7 @@ public class MiniKuduCluster implements AutoCloseable {
       return;
     }
     LOG.info("Killing server at port " + port);
-    ts.destroy();
-    ts.waitFor();
+    destroyAndWaitForProcess(ts);
   }
 
   /**
@@ -304,8 +303,7 @@ public class MiniKuduCluster implements AutoCloseable {
    */
   public void killTabletServers() throws InterruptedException {
     for (Process tserver : tserverProcesses.values()) {
-      tserver.destroy();
-      tserver.waitFor();
+      destroyAndWaitForProcess(tserver);
     }
     tserverProcesses.clear();
   }
@@ -333,8 +331,7 @@ public class MiniKuduCluster implements AutoCloseable {
       return;
     }
     LOG.info("Killing master at port " + port);
-    master.destroy();
-    master.waitFor();
+    destroyAndWaitForProcess(master);
   }
 
   /**
@@ -351,15 +348,31 @@ public class MiniKuduCluster implements AutoCloseable {
    */
   public void shutdown() {
     for (Iterator<Process> masterIter = masterProcesses.values().iterator(); 
masterIter.hasNext(); ) {
-      masterIter.next().destroy();
+      try {
+        destroyAndWaitForProcess(masterIter.next());
+      } catch (InterruptedException e) {
+        // Need to continue cleaning up.
+      }
       masterIter.remove();
     }
+
     for (Iterator<Process> tsIter = tserverProcesses.values().iterator(); 
tsIter.hasNext(); ) {
-      tsIter.next().destroy();
+      try {
+        destroyAndWaitForProcess(tsIter.next());
+      } catch (InterruptedException e) {
+        // Need to continue cleaning up.
+      }
       tsIter.remove();
     }
+
+    // Whether we were interrupted or not above we still destroyed all the 
processes, so the input
+    // printers will hit EOFs and stop.
     for (Thread thread : PROCESS_INPUT_PRINTERS) {
-      thread.interrupt();
+      try {
+        thread.join();
+      } catch (InterruptedException e) {
+        // Need to continue cleaning up.
+      }
     }
 
     for (String path : pathsToDelete) {
@@ -376,6 +389,11 @@ public class MiniKuduCluster implements AutoCloseable {
     }
   }
 
+  private void destroyAndWaitForProcess(Process process) throws 
InterruptedException {
+    process.destroy();
+    process.waitFor();
+  }
+
   /**
    * Returns the comma-separated list of master addresses.
    * @return master addresses

Reply via email to