You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by ab...@apache.org on 2020/04/02 21:54:05 UTC

[kudu] 04/04: [subprocess] Fix shutdown behavior

This is an automated email from the ASF dual-hosted git repository.

abukor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git

commit 243878d41a12c2b29a29c34c7c5f153610612a6f
Author: Attila Bukor <ab...@apache.org>
AuthorDate: Wed Apr 1 10:06:38 2020 +0200

    [subprocess] Fix shutdown behavior
    
    Prior to this commit the subprocess didn't actually shut down when its
    input stream was closed. This wasn't much of a problem on Linux where
    PDEATHSIG is set on the child process, but as it's not supported on Mac,
    whenever the master is shut down/crashes the subprocess stays alive.
    
    This commit changes the behavior to exit when the reader future exits
    (the loop is broken when EOF is received).
    
    Change-Id: Ia84bff891eaff667d7b22e89c66f24980ad76d70
    Reviewed-on: http://gerrit.cloudera.org:8080/15615
    Tested-by: Kudu Jenkins
    Reviewed-by: Hao Hao <ha...@cloudera.com>
    Reviewed-by: Adar Dembo <ad...@cloudera.com>
---
 java/config/spotbugs/excludeFilter.xml                            | 8 +++++++-
 .../main/java/org/apache/kudu/subprocess/SubprocessExecutor.java  | 5 +++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/java/config/spotbugs/excludeFilter.xml b/java/config/spotbugs/excludeFilter.xml
index 676b885..d570244 100644
--- a/java/config/spotbugs/excludeFilter.xml
+++ b/java/config/spotbugs/excludeFilter.xml
@@ -307,6 +307,12 @@
         <Bug pattern="MS_MUTABLE_ARRAY" />
     </Match>
     <Match>
+        <!-- We need to exit instead of throwing RuntimeException to make sure
+         all threads stop -->
+        <Class name="org.apache.kudu.subprocess.SubprocessExecutor"/>
+        <Bug pattern="DM_EXIT"/>
+    </Match>
+    <Match>
         <!-- This is done to simplify testing. -->
         <Class name="org.apache.kudu.subprocess.ranger.TestRangerSubprocess"/>
         <Method name="mockAuthorizer" />
@@ -329,4 +335,4 @@
         <Class name="org.apache.kudu.test.cluster.FakeDNS"/>
         <Bug pattern="DP_DO_INSIDE_DO_PRIVILEGED" />
     </Match>
-</FindBugsFilter>
\ No newline at end of file
+</FindBugsFilter>
diff --git a/java/kudu-subprocess/src/main/java/org/apache/kudu/subprocess/SubprocessExecutor.java b/java/kudu-subprocess/src/main/java/org/apache/kudu/subprocess/SubprocessExecutor.java
index 1363ea0..6d6cccc 100644
--- a/java/kudu-subprocess/src/main/java/org/apache/kudu/subprocess/SubprocessExecutor.java
+++ b/java/kudu-subprocess/src/main/java/org/apache/kudu/subprocess/SubprocessExecutor.java
@@ -111,6 +111,11 @@ public class SubprocessExecutor {
       MessageReader reader = new MessageReader(inboundQueue, messageIO, injectInterrupt);
       CompletableFuture<Void> readerFuture = CompletableFuture.runAsync(reader, readerService);
       readerFuture.exceptionally(errorHandler);
+      // Force the program to exit when reader future completes.
+      //
+      // TODO(abukor): Refactor code so the futures can be cancelled instead
+      //  of having to call System.exit()
+      readerFuture = readerFuture.thenRun(() -> System.exit(0));
 
       // Start multiple message parser threads and run the tasks asynchronously.
       MessageParser parser = new MessageParser(inboundQueue, outboundQueue, protocolHandler);