You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by bu...@apache.org on 2015/11/20 14:36:35 UTC

svn commit: r1715360 - /uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/ConsoleListener.java

Author: burn
Date: Fri Nov 20 13:36:34 2015
New Revision: 1715360

URL: http://svn.apache.org/viewvc?rev=1715360&view=rev
Log:
UIMA-4695 Use ID#s 0,1 for the separate AP stdout/stderr streams and start others from 2 for jd & JPs

Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/ConsoleListener.java

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/ConsoleListener.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/ConsoleListener.java?rev=1715360&r1=1715359&r2=1715360&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/ConsoleListener.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/ConsoleListener.java Fri Nov 20 13:36:34 2015
@@ -44,7 +44,8 @@ class ConsoleListener
 
     private boolean      in_shutdown = false;
     private boolean      start_stdin = false;
-    private int          numConnected = 0;
+    private int          nextIdNum = 2;     // id# for JD ... JPs get 3,4,...  0&1 reserved for an AP
+    private volatile PrintWriter shared_logout = null;    // Shared by ids 0 & 1 (stdout & stderr)
     
     private IDuccCallback consoleCb;
     // private int          callers;   // number of remote processes we expect to listen for
@@ -134,7 +135,7 @@ class ConsoleListener
                 int p = s.getPort();
                 synchronized(this) {
                     listeners.put(p, new Pair<StdioReader, StdioWriter>(sr, sw));
-                    sr.idNum = ++numConnected;
+                    sr.idNum = nextIdNum++;
                 }
 
                 Thread t = new Thread(sr, "STDOUT");
@@ -164,9 +165,11 @@ class ConsoleListener
         String remote_host;
         private PrintWriter logout = null;
 
+        static final String stream_tag = "1500 Stream: ";
         static final String console_tag = "1002 CONSOLE_REDIRECT ";
         int tag_len = 0;
         private int idNum;
+        private boolean is_stderr = false;
 
         StdioReader(Socket sock)
         {
@@ -186,6 +189,7 @@ class ConsoleListener
             if ( debug ) System.out.println("===== Listener completing: " + remote_host + ":" + sock.getPort());
             shutdown = true;
             is.close();
+            // It's OK to close the shared logout twice
             if (logout != null) {
               logout.close();
             }
@@ -198,15 +202,35 @@ class ConsoleListener
 
         void doWrite(String line)
         {
+            // Check for the initial stream identifier
+            // Only APs have split streams, and only stdout carries the logfile name
+            if (line.startsWith(stream_tag)) {
+              String name = line.substring(stream_tag.length());
+              is_stderr = name.startsWith("STDERR");
+              if (is_stderr) {
+                do_console_out = true;  // Don't wait for the magic 1001 message
+                idNum = 1;
+              } else {
+                idNum = 0;
+              }
+              return;
+            }
+            // The stderr stream shares the stdout stream's logfile
             if ( line.startsWith(console_tag) && !suppress_log) {
                 String logfile = line.substring(tag_len);
                 try {
                   logout = new PrintWriter(logfile);
-                  return;
+                  if (idNum == 0) {
+                    shared_logout = logout;
+                  }
                 } catch (FileNotFoundException e) {
                   consoleCb.status("Failed to create log file: " + logfile);
                   e.printStackTrace();
                 }
+                return;
+            }
+            if (logout == null && idNum == 1) {
+              logout = shared_logout;
             }
             if (logout != null) {
               logout.println(line);
@@ -285,7 +309,12 @@ class ConsoleListener
                 }
                 if ( debug ) System.out.println(remote_host + ": EOF:  exiting");
             } catch ( Throwable t ) {
-                t.printStackTrace();
+                if (shutdown) {
+                  if (debug) System.out.println(remote_host + ":" + sock.getPort() + " ignore read error after shutdoen - id# " + idNum);
+                } else {
+                  System.out.println(remote_host + ":" + sock.getPort() + " read error - id# " + idNum);
+                  t.printStackTrace();
+                }
             } finally {
                 try {
                     shutdown();