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/20 17:12:02 UTC

svn commit: r1859570 - in /uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service: protocol/builtin/DefaultServiceProtocolHandler.java transport/http/HttpServiceTransport.java

Author: cwiklik
Date: Mon May 20 17:12:02 2019
New Revision: 1859570

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

Modified:
    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/main/java/org/apache/uima/ducc/ps/service/transport/http/HttpServiceTransport.java

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=1859570&r1=1859569&r2=1859570&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 Mon May 20 17:12:02 2019
@@ -220,40 +220,45 @@ public class DefaultServiceProtocolHandl
     }
     IMetaTaskTransaction metaTransaction = null;
 
-    while (running) {
-      metaTransaction = sendAndReceive(transaction);
-      if (metaTransaction.getMetaTask() != null
-              && metaTransaction.getMetaTask().getUserSpaceTask() != null) {
-        return metaTransaction;
-      }
+    try {
+        while (running) {
+            metaTransaction = sendAndReceive(transaction);
+            if (metaTransaction.getMetaTask() != null
+                    && metaTransaction.getMetaTask().getUserSpaceTask() != null) {
+              return metaTransaction;
+            }
 
-      // If the first thread to get the lock poll for work and unlock when work found
-      // If don't immediately get the lock then wait for the lock to be released when
-      // work becomes available,
-      // and immediately release the lock and loop back to retry
-      boolean firstLocker = noWorkLock.tryLock();
-      if (!firstLocker) {
-        noWorkLock.lock();
-        noWorkLock.unlock();
-        continue;
-      }
+            // If the first thread to get the lock poll for work and unlock when work found
+            // If don't immediately get the lock then wait for the lock to be released when
+            // work becomes available,
+            // and immediately release the lock and loop back to retry
+            boolean firstLocker = noWorkLock.tryLock();
+            if (!firstLocker) {
+              noWorkLock.lock();
+              noWorkLock.unlock();
+              continue;
+            }
 
-      // If the first one here hold the lock and sleep before retrying
-      if (logger.isLoggable(Level.INFO)) {
-        logger.log(Level.INFO, "Driver is out of tasks - waiting for "
-                + noTaskStrategy.getWaitTimeInMillis() + "ms before trying again ");
-      }
-      while (running) {
-        noTaskStrategy.handleNoTaskSupplied();
-        metaTransaction = sendAndReceive(transaction);
-        if (metaTransaction.getMetaTask() != null
-                && metaTransaction.getMetaTask().getUserSpaceTask() != null) {
-          noWorkLock.unlock();
-          return metaTransaction;
-        }
-      }
+            // If the first one here hold the lock and sleep before retrying
+            if (logger.isLoggable(Level.INFO)) {
+              logger.log(Level.INFO, "Driver is out of tasks - waiting for "
+                      + noTaskStrategy.getWaitTimeInMillis() + "ms before trying again ");
+            }
+            while (running) {
+              noTaskStrategy.handleNoTaskSupplied();
+              metaTransaction = sendAndReceive(transaction);
+              if (metaTransaction.getMetaTask() != null
+                      && metaTransaction.getMetaTask().getUserSpaceTask() != null) {
+                noWorkLock.unlock();
+                return metaTransaction;
+              }
+            }
+          } 
+    } finally {
+    	if ( noWorkLock.isHeldByCurrentThread() ) {
+    		noWorkLock.unlock();
+    	}
     }
-    ;
 
     return metaTransaction; // When shutting down
   }
@@ -374,7 +379,8 @@ public class DefaultServiceProtocolHandl
 
             @Override
             public void run() {
-              delegateStop();
+              //delegateStop();
+            	stop();
             }
           }).start();
           running = false;
@@ -454,7 +460,7 @@ public class DefaultServiceProtocolHandl
     logger.log(Level.INFO, this.getClass().getName() + " quiesceAndStop() called");
     // change state of transport to not running but keep connection open
     // so that other threads can quiesce (send results)
-    transport.stop(true);
+//    transport.stop(true);
 
     quiescing = true;
     running = false;
@@ -471,6 +477,7 @@ public class DefaultServiceProtocolHandl
     try {
       // wait for process threads to terminate
       stopLatch.await();
+      transport.stop(true);
     } catch (Exception e) {
 
     }

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/transport/http/HttpServiceTransport.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/transport/http/HttpServiceTransport.java?rev=1859570&r1=1859569&r2=1859570&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/transport/http/HttpServiceTransport.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/transport/http/HttpServiceTransport.java Mon May 20 17:12:02 2019
@@ -55,7 +55,6 @@ import org.apache.uima.ducc.ps.service.t
 import org.apache.uima.ducc.ps.service.transport.ITargetURI;
 import org.apache.uima.ducc.ps.service.transport.TransportException;
 import org.apache.uima.ducc.ps.service.transport.TransportStats;
-import org.apache.uima.ducc.ps.service.transport.XStreamUtils;
 import org.apache.uima.ducc.ps.service.transport.target.NoOpTargetURI;
 import org.apache.uima.ducc.ps.service.transport.target.TargetURIFactory;
 import org.apache.uima.ducc.ps.service.utils.Utils;
@@ -63,7 +62,6 @@ import org.apache.uima.util.Level;
 import org.apache.uima.util.Logger;
 
 import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.io.xml.DomDriver;
 
 public class HttpServiceTransport implements IServiceTransport {
   private Logger logger = UIMAFramework.getLogger(HttpServiceTransport.class);
@@ -106,14 +104,7 @@ public class HttpServiceTransport implem
   private volatile boolean log = true;
 
   private AtomicLong xstreamTime = new AtomicLong();
-  // private ThreadLocal<HashMap<Long, XStream>> localXStream = new ThreadLocal<HashMap<Long,
-  // XStream>>() {
-  // @Override
-  // protected HashMap<Long, XStream> initialValue() {
-  // return new HashMap<Long, XStream>();
-  // }
-  // };
-
+ 
   public HttpServiceTransport(IRegistryClient registryClient, int scaleout)
           throws ServiceException {
     this.registryClient = registryClient;
@@ -227,15 +218,10 @@ public class HttpServiceTransport implem
   }
 
   private void addCommonHeaders(HttpPost method) {
-    // synchronized( HttpServiceTransport.class ) {
-
     method.setHeader("IP", nodeIP);
     method.setHeader("Hostname", nodeName);
     method.setHeader("ThreadID", String.valueOf(Thread.currentThread().getId()));
     method.setHeader("PID", pid);
-
-    // }
-
   }
 
   private HttpEntity wrapRequest(String serializedRequest) {
@@ -356,6 +342,9 @@ public class HttpServiceTransport implem
                 simulatedException);
         mockExceptionGenerator.throwSimulatedException();
       } else {
+//    	  if ( stopping ) {
+//    		  throw new TransportException("Service is Stopping ");
+//    	  }
         transaction = doPost(postMethod, localXStream);
       }
     } catch (IOException | URISyntaxException ex) {
@@ -397,9 +386,10 @@ public class HttpServiceTransport implem
     System.out.println(Utils.getTimestamp() + ">>>>>>> " + Utils.getShortClassname(this.getClass())
             + " stop() called - mode:" + (quiesce == true ? "quiesce" : "stop"));
     logger.log(Level.INFO, this.getClass().getName() + " stop() called");
-    System.out.println(" ########################################3 Total time in XStream:"
-            + (xstreamTime.get() / 1000) + " secs");
     if (!quiesce && cMgr != null) {
+        System.out.println(Utils.getTimestamp() + ">>>>>>> "
+                + Utils.getShortClassname(this.getClass()) + " stopping connection mgr");
+
       cMgr.shutdown();
       System.out.println(Utils.getTimestamp() + ">>>>>>> "
               + Utils.getShortClassname(this.getClass()) + " stopped connection mgr");