You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bigtop.apache.org by rv...@apache.org on 2013/05/01 02:18:06 UTC

[3/3] git commit: BIGTOP-950. race condition for output consumption in Shell code

BIGTOP-950. race condition for output consumption in Shell code


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

Branch: refs/heads/master
Commit: bc49df0bf3ed71dbe7a8ded7857b6087d4df8fd0
Parents: bb2b739
Author: Roman Shaposhnik <rv...@cloudera.com>
Authored: Tue Apr 30 17:08:26 2013 -0700
Committer: Roman Shaposhnik <rv...@cloudera.com>
Committed: Tue Apr 30 17:16:44 2013 -0700

----------------------------------------------------------------------
 .../org/apache/bigtop/itest/shell/Shell.groovy     |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bigtop/blob/bc49df0b/bigtop-test-framework/src/main/groovy/org/apache/bigtop/itest/shell/Shell.groovy
----------------------------------------------------------------------
diff --git a/bigtop-test-framework/src/main/groovy/org/apache/bigtop/itest/shell/Shell.groovy b/bigtop-test-framework/src/main/groovy/org/apache/bigtop/itest/shell/Shell.groovy
index 4df3642..fbd85e3 100644
--- a/bigtop-test-framework/src/main/groovy/org/apache/bigtop/itest/shell/Shell.groovy
+++ b/bigtop-test-framework/src/main/groovy/org/apache/bigtop/itest/shell/Shell.groovy
@@ -83,13 +83,14 @@ class Shell {
     }
     ByteArrayOutputStream outStream = new ByteArrayOutputStream(4096)
     ByteArrayOutputStream errStream = new ByteArrayOutputStream(4096)
-    Thread.start {
-      proc.consumeProcessOutput(outStream, errStream)
-    }
     if (timeout >= 0) {
+      // WARNING: there's a potential race condition bellow
+      //          essentially what we really need here is
+      //          proc.waitForOrKillProcessOutput(outStream, errStream)
+      proc.consumeProcessOutput(outStream, errStream)
       proc.waitForOrKill(timeout)
     } else {
-      proc.waitFor()
+      proc.waitForProcessOutput(outStream, errStream)
     }
 
     // Possibly a bug in String.split as it generates a 1-element array on an