Author: kwright
Date: Sun Nov 24 18:48:51 2013
New Revision: 1545030

URL: http://svn.apache.org/r1545030
Log:
Remove all registrations when we do a cluster init

Modified:
    
manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/system/ManifoldCF.java

Modified: 
manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/system/ManifoldCF.java
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/system/ManifoldCF.java?rev=1545030&r1=1545029&r2=1545030&view=diff
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/system/ManifoldCF.java
 (original)
+++ 
manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/system/ManifoldCF.java
 Sun Nov 24 18:48:51 2013
@@ -237,25 +237,33 @@ public class ManifoldCF extends org.apac
         {
           // Start this agent
           IAgent agent = AgentFactory.make(className);
+          agent.initialize(threadContext);
           try
           {
             // Throw a lock, so that cleanup processes and startup processes 
don't collide.
             String lockName = getAgentsClassLockName(className);
+            String serviceType = getAgentsClassServiceType(className);
             boolean firstTime;
             lockManager.enterWriteLock(lockName);
             try
             {
-              firstTime = 
lockManager.registerServiceBeginServiceActivity(getAgentsClassServiceType(className),
 processID);
+              firstTime = 
lockManager.registerServiceBeginServiceActivity(serviceType, processID);
+              if (firstTime)
+              {
+                agent.cleanUpAgentData(threadContext);
+                String[] deadAgents = 
lockManager.getInactiveServices(serviceType);
+                for (String deadAgent : deadAgents)
+                {
+                  lockManager.unregisterService(serviceType, deadAgent);
+                }
+              }
             }
             finally
             {
               lockManager.leaveWriteLock(lockName);
             }
             // Now initialize agent, being sure to clean up data from previous 
incarnations
-            agent.initialize(threadContext);
-            if (firstTime)
-              agent.cleanUpAgentData(threadContext);
-            else
+            if (!firstTime)
               agent.cleanUpAgentData(threadContext, processID);
             // There is a potential race condition where the agent has been 
started but hasn't yet appeared in runningHash.
             // But having runningHash be the synchronizer for this activity 
will prevent any problems.


Reply via email to