You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by cw...@apache.org on 2019/05/21 15:43:07 UTC

svn commit: r1859656 - in /uima/uima-ducc/trunk/uima-ducc-pullservice/src: main/java/org/apache/uima/ducc/ps/service/main/ main/java/org/apache/uima/ducc/ps/service/protocol/builtin/ test/java/org/apache/uima/ducc/ps/ test/java/org/apache/uima/ducc/ps/...

Author: cwiklik
Date: Tue May 21 15:43:07 2019
New Revision: 1859656

URL: http://svn.apache.org/viewvc?rev=1859656&view=rev
Log:
UIMA-6046 modified to prevent a hang

Modified:
    uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/PullService.java
    uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java
    uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/Client.java
    uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/JunitPullServiceTestCase.java

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/PullService.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/PullService.java?rev=1859656&r1=1859655&r2=1859656&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/PullService.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/PullService.java Tue May 21 15:43:07 2019
@@ -273,14 +273,14 @@ public class PullService implements ISer
 		threadPool.shutdownNow();
 		// close connection to remote client and cleanup
 		stopTransport();
-		System.out.println(">>>>>>>> "+Utils.getTimestamp()+" "+Utils.getShortClassname(this.getClass())+" .quiesceAndStop()-transport stopped");
+		System.out.println(">>>>>>>> "+Utils.getTimestamp()+" "+Utils.getShortClassname(this.getClass())+" .stop()-transport stopped");
 		stopProtocolHandler(false);
-		System.out.println(">>>>>>>> "+Utils.getTimestamp()+" "+Utils.getShortClassname(this.getClass())+" .quiesceAndStop()-protocol handler stopped");
+		System.out.println(">>>>>>>> "+Utils.getTimestamp()+" "+Utils.getShortClassname(this.getClass())+" .stop()-protocol handler stopped");
 		stopServiceProcessor();
 		System.out.println(">>>>>>>> "+Utils.getTimestamp()+" "+Utils.getShortClassname(this.getClass())+" .stop()-processor stopped");
 	    // monitor should be stopped last to keep posting updates to observer
 		stopMonitor();
-		System.out.println(">>>>>>>> "+Utils.getTimestamp()+" "+Utils.getShortClassname(this.getClass())+" .dtop()-monitor stopped");
+		System.out.println(">>>>>>>> "+Utils.getTimestamp()+" "+Utils.getShortClassname(this.getClass())+" .stop()-monitor stopped");
 	}
     public void quiesceAndStop() {
 		// when quiescing, let the process threads finish processing
@@ -328,7 +328,6 @@ public class PullService implements ISer
 	}
 
 	private void stopProcessThreadPool() {
-//		if (threadPool != null && !threadPool.isShutdown() && !threadPool.isTerminating() && !threadPool.isTerminated()) {
 		if (threadPool != null ) {
 
 			try {

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java?rev=1859656&r1=1859655&r2=1859656&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java Tue May 21 15:43:07 2019
@@ -290,7 +290,7 @@ public class DefaultServiceProtocolHandl
     // this thread's tasks
     if (threadLocalXStream.get().get(Thread.currentThread().getId()) == null) {
       threadLocalXStream.get().put(Thread.currentThread().getId(),
-              XStreamUtils.getXStreamInstance());// new XStream(new DomDriver()));
+              XStreamUtils.getXStreamInstance());
     }
     // all threads intialized, enter running state
 
@@ -444,7 +444,8 @@ public class DefaultServiceProtocolHandl
         retryThread.interrupt();
       }
     } catch (Exception ee) {
-    } // noTaskStrategy.interrupt();
+    } 
+    waitForWorkerThreadsToComplete();
     if (logger.isLoggable(Level.INFO)) {
       logger.log(Level.INFO, this.getClass().getName() + " stop() called");
     }
@@ -473,19 +474,21 @@ public class DefaultServiceProtocolHandl
       }
     } catch (Exception ee) {
     }
-    try {
-      // wait for process threads to terminate
-      stopLatch.await();
-      transport.stop(true);
-    } catch (Exception e) {
-
-    }
+    waitForWorkerThreadsToComplete();
     // Use System.out since the logger's ShutdownHook may have closed streams
     System.out.println(Utils.getTimestamp() + ">>>>>>> " + Utils.getShortClassname(this.getClass())
             + ".queisceAndStop() All process threads completed quiesce");
     logger.log(Level.INFO, this.getClass().getName() + " All process threads completed quiesce");
   }
 
+  private void waitForWorkerThreadsToComplete() {
+	  try {
+		  // wait for process threads to terminate
+		  stopLatch.await();
+	  } catch (Exception e) {
+		  e.printStackTrace();
+	  }
+  }
   @Override
   public void start() {
     running = true;

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/Client.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/Client.java?rev=1859656&r1=1859655&r2=1859656&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/Client.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/Client.java Tue May 21 15:43:07 2019
@@ -73,6 +73,8 @@ public class Client {
 
   private int maxThreads = 50;
 
+  private long howLongToBlock=60000;
+  
   private volatile boolean print = true;
 
   private static UimaSerializer uimaSerializer = new UimaSerializer();
@@ -129,37 +131,39 @@ public class Client {
 
     return httpPort;
   }
+  public void startJetty(boolean block, long howLong2Block) throws Exception {
+	    this.block = block;
+	    this.howLongToBlock = howLong2Block;
+	    QueuedThreadPool threadPool = new QueuedThreadPool();
+	    if (maxThreads < threadPool.getMinThreads()) {
+	      System.out.println("Invalid value for jetty MaxThreads(" + maxThreads
+	              + ") - it should be greater or equal to " + threadPool.getMinThreads()
+	              + ". Defaulting to jettyMaxThreads=" + threadPool.getMaxThreads());
+	      threadPool.setMaxThreads(threadPool.getMinThreads());
+	    } else {
+	      threadPool.setMaxThreads(maxThreads);
+	    }
+
+	    server = new Server(threadPool);
+
+	    // Server connector
+	    ServerConnector connector = new ServerConnector(server);
+	    System.out.println(">>>> Jetty Acceptors:" + connector.getAcceptors());
+
+	    connector.setPort(getJettyPort());
+	    server.setConnectors(new Connector[] { connector });
+	    System.out.println("launching Jetty on Port:" + connector.getPort());
+	    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
+	    context.setContextPath("/");
+	    server.setHandler(context);
 
-  public void startJetty(boolean block) throws Exception {
-    this.block = block;
-
-    QueuedThreadPool threadPool = new QueuedThreadPool();
-    if (maxThreads < threadPool.getMinThreads()) {
-      System.out.println("Invalid value for jetty MaxThreads(" + maxThreads
-              + ") - it should be greater or equal to " + threadPool.getMinThreads()
-              + ". Defaulting to jettyMaxThreads=" + threadPool.getMaxThreads());
-      threadPool.setMaxThreads(threadPool.getMinThreads());
-    } else {
-      threadPool.setMaxThreads(maxThreads);
-    }
-
-    server = new Server(threadPool);
+	    context.addServlet(new ServletHolder(new TaskHandlerServlet()), "/" + app);
 
-    // Server connector
-    ServerConnector connector = new ServerConnector(server);
-    System.out.println(">>>> Jetty Acceptors:" + connector.getAcceptors());
-
-    connector.setPort(getJettyPort());
-    server.setConnectors(new Connector[] { connector });
-    System.out.println("launching Jetty on Port:" + connector.getPort());
-    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
-    context.setContextPath("/");
-    server.setHandler(context);
-
-    context.addServlet(new ServletHolder(new TaskHandlerServlet()), "/" + app);
-
-    server.start();
-    System.out.println("Jetty Started - Waiting for Messages ...");
+	    server.start();
+	    System.out.println("Jetty Started - Waiting for Messages ...");
+  }
+  public void startJetty(boolean block) throws Exception {
+	  startJetty(block, 30000);
   }
 
   @After
@@ -244,8 +248,7 @@ public class Client {
         String nodeName = request.getHeader("Hostname");
         String threadID = request.getHeader("ThreadID");
         String pid = request.getHeader("PID");
-        // System.out.println( "Sender ID:::Node IP"+nodeIP+" Node Name:"+nodeName+" PID:"+pid+"
-        // ThreadID:"+threadID);
+      //   System.out.println( "Sender ID:::Node IP"+nodeIP+" Node Name:"+nodeName+" PID:"+pid+" ThreadID:"+threadID);
 
         IMetaTaskTransaction imt = null;
         long t1 = System.currentTimeMillis();
@@ -346,8 +349,9 @@ public class Client {
         // String body = XStreamUtils.marshall(imt);
         String body = localXStream.get().get(Thread.currentThread().getId()).toXML(imt);
         if (block) {
+        	System.out.println("............. Client Blocking for "+howLongToBlock+" ms - Forcing Timeout");
           synchronized (this) {
-            this.wait(0);
+            this.wait(howLongToBlock);
           }
 
         }

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/JunitPullServiceTestCase.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/JunitPullServiceTestCase.java?rev=1859656&r1=1859655&r2=1859656&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/JunitPullServiceTestCase.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/JunitPullServiceTestCase.java Tue May 21 15:43:07 2019
@@ -281,7 +281,7 @@ public class JunitPullServiceTestCase ex
       this.cancel();
       fTimer.purge();
       fTimer.cancel();
-      System.out.println("Timmer popped - stopping service");
+      System.out.println("Timer popped - stopping service");
       if (quiesce) {
         service.quiesceAndStop();
       } else {