You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by ch...@apache.org on 2013/03/25 18:46:04 UTC

svn commit: r1460778 - /uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java

Author: challngr
Date: Mon Mar 25 17:46:02 2013
New Revision: 1460778

URL: http://svn.apache.org/r1460778
Log:
UIMA-2728
Update countImplementors to use friendly-ids instead of Implementors collection so it
is more current with respect to Orchestrator publications.

Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java?rev=1460778&r1=1460777&r2=1460778&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java Mon Mar 25 17:46:02 2013
@@ -429,7 +429,7 @@ public class ServiceSet
         if ( stopped     ) return;                   // doing auto, but we've been manually stopped
 
         // could have more implementors than instances if some were started dynamically but the count not persisted
-        int needed = Math.max(0, instances - friendly_ids.size());
+        int needed = Math.max(0, instances - countImplementors());
 
         logger.debug(methodName, null, "ENFORCE: ", needed);
         while ( (needed--) > 0 ) {
@@ -692,9 +692,16 @@ public class ServiceSet
         }
     }
 
-    public int countImplementors()
+    public synchronized int countImplementors()
     {
-        return implementors.size();
+        // The implementos and friendly_ids sets track each other carefully.  The former
+        // tracks process state via the remote process's DuccId.  The latter tracks
+        // what we've tried to start, but may not know the actual state for until we get
+        // Orchestrator publications.
+        //
+        // To avoid ugly races, we consider a process to be an implementor as soon as we
+        // get the "friendly" id from the Orchestrator.
+        return friendly_ids.size();
     }
 
     public synchronized int reference(DuccId id)