You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2018/01/04 18:32:54 UTC

svn commit: r1820175 - in /uima/uima-ducc/trunk: src/main/admin/ uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/ uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/config/ uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orches...

Author: degenaro
Date: Thu Jan  4 18:32:54 2018
New Revision: 1820175

URL: http://svn.apache.org/viewvc?rev=1820175&view=rev
Log:
UIMA-5693 DUCC Orchestrator (OR) system logger should track Agent BOOT and SHUTDOWN

Modified:
    uima/uima-ducc/trunk/src/main/admin/start_ducc
    uima/uima-ducc/trunk/src/main/admin/stop_ducc
    uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java
    uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/config/AgentConfiguration.java
    uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/OrchestratorComponent.java
    uima/uima-ducc/trunk/uima-ducc-pm/src/main/java/org/apache/uima/ducc/pm/ProcessManagerComponent.java
    uima/uima-ducc/trunk/uima-ducc-pm/src/main/java/org/apache/uima/ducc/pm/config/ProcessManagerConfiguration.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/config/WebServerConfiguration.java

Modified: uima/uima-ducc/trunk/src/main/admin/start_ducc
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/admin/start_ducc?rev=1820175&r1=1820174&r2=1820175&view=diff
==============================================================================
--- uima/uima-ducc/trunk/src/main/admin/start_ducc (original)
+++ uima/uima-ducc/trunk/src/main/admin/start_ducc Thu Jan  4 18:32:54 2018
@@ -359,6 +359,21 @@ class StartDucc(DuccUtil):
         print "Starting", n_nodes, "agents"        
         self.threadpool = ThreadPool(n_nodes + 5)      # a few more for the head processes
         self.pidlock = threading.Lock()
+        
+        #start 'or' first to field system log requests
+        if ( len(components) != 0 ):
+            for com in components:
+                if ( com in ('or') ):
+                    try:
+                        self.threadpool.invoke(self.start_component, ducc, com, or_parms)
+                        #self.start_component(ducc, com, or_parms)
+                    except:
+                        self.threadpool.quit()
+                        print sys.exc_info()[0], "DUCC may not be started correctly."
+                        sys.exit(1)
+                    # give 'or' a small head start
+                    time.sleep(2)
+                    
         for (nodefile, nodelist) in nodes.items():
             print '********** Starting agents from file', nodefile
             try:
@@ -373,7 +388,7 @@ class StartDucc(DuccUtil):
             print 'Starting', or_parms
 
             for com in components:
-                if ( com in ('broker', 'db') ):
+                if ( com in ('broker', 'db', 'or') ):
                     pass     # already started
                 else:
                     try:

Modified: uima/uima-ducc/trunk/src/main/admin/stop_ducc
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/admin/stop_ducc?rev=1820175&r1=1820174&r2=1820175&view=diff
==============================================================================
--- uima/uima-ducc/trunk/src/main/admin/stop_ducc (original)
+++ uima/uima-ducc/trunk/src/main/admin/stop_ducc Thu Jan  4 18:32:54 2018
@@ -311,17 +311,26 @@ class StopDucc(DuccUtil):
         if ( quiesce ):
             self.quiesce_agents(components, nodes)
         else:
+            for (nf, nl) in nodes.items():
+                for n in nl:
+                    self.stop_agents(n, force)       
             host = self.localhost.split('.')[0]
             for c in components:
                 c = c.strip()
-                if(c in ('or','pm','rm','sm','ws')):
+                if(c in ('pm','rm','sm','ws')):
+                    c = c+'@'+host
+                    self.stop_component(c, force) 
+            time.sleep(2)
+            for c in components:
+                c = c.strip()
+                if(c in ('or')):
                     c = c+'@'+host
+                    self.stop_component(c, force) 
+            time.sleep(2)
+            for c in components:
+                c = c.strip()
                 if(c in ('db','broker')):
-                    time.sleep(2)
-                self.stop_component(c, force)    
-            for (nf, nl) in nodes.items():
-                for n in nl:
-                    self.stop_agents(n, force)            
+                    self.stop_component(c, force)         
 
         if ( read_pids ):
             if ( len(self.pids) > 0 ):

Modified: uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java?rev=1820175&r1=1820174&r2=1820175&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java Thu Jan  4 18:32:54 2018
@@ -67,6 +67,7 @@ import org.apache.uima.ducc.common.node.
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.TimeStamp;
 import org.apache.uima.ducc.common.utils.Utils;
+import org.apache.uima.ducc.common.utils.IDuccLoggerComponents.Daemon;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 import org.apache.uima.ducc.common.utils.id.IDuccId;
 import org.apache.uima.ducc.transport.agent.IUimaPipelineAEComponent;
@@ -76,6 +77,8 @@ import org.apache.uima.ducc.transport.cm
 import org.apache.uima.ducc.transport.dispatcher.DuccEventDispatcher;
 import org.apache.uima.ducc.transport.event.AgentProcessLifecycleReportDuccEvent;
 import org.apache.uima.ducc.transport.event.AgentProcessLifecycleReportDuccEvent.LifecycleEvent;
+import org.apache.uima.ducc.transport.event.DuccEvent.EventType;
+import org.apache.uima.ducc.transport.event.DaemonDuccEvent;
 import org.apache.uima.ducc.transport.event.DuccEvent;
 import org.apache.uima.ducc.transport.event.NodeInventoryUpdateDuccEvent;
 import org.apache.uima.ducc.transport.event.ProcessStateUpdateDuccEvent;
@@ -131,7 +134,7 @@ public class NodeAgent extends AbstractD
 
   private DuccEventDispatcher commonProcessDispatcher;
 
-  private DuccEventDispatcher inventoryDispatcher;
+  private DuccEventDispatcher ORDispatcher;
 
   private Object monitor = new Object();
 
@@ -187,6 +190,13 @@ public class NodeAgent extends AbstractD
   //  from the PM. This flag is used to determine if the agent should use
   //  rogue process detector. The detector will be used if this flag is true.
   public volatile boolean receivedDuccState = false;
+  
+  private String stateChangeEndpoint;
+
+  public void setStateChangeEndpoint(String stateChangeEndpoint) {
+	this.stateChangeEndpoint = stateChangeEndpoint;
+  }
+  
   /**
    * Ctor used exclusively for black-box testing of this class.
    */
@@ -222,11 +232,28 @@ public class NodeAgent extends AbstractD
 	  return retVal;
   }
 
+  /**
+   * Tell Orchestrator about state change for recording into system-events.log
+   */
+  private void stateChange(EventType eventType) {
+  	String methodName = "stateChange";
+      try {
+  		Daemon daemon = Daemon.Agent;
+  		NodeIdentity nodeIdentity = new NodeIdentity();
+      	DaemonDuccEvent ev = new DaemonDuccEvent(daemon, eventType, nodeIdentity);
+          ORDispatcher.dispatch(stateChangeEndpoint, ev, "");
+          logger.info(methodName, null, stateChangeEndpoint, eventType.name(), nodeIdentity.getName());
+      }
+  	catch(Exception e) {
+  		logger.error(methodName, null, e);
+  	}
+  }
+  
   /*
    * Report process lifecycle events on same channel that inventory is reported
    */
   public DuccEventDispatcher getProcessLifecycleReportDispatcher() {
-	  return inventoryDispatcher;
+	  return ORDispatcher;
   }
   
   /*
@@ -321,7 +348,7 @@ public class NodeAgent extends AbstractD
     this.launcher = launcher;
     this.configurationFactory = factory;
     this.commonProcessDispatcher = factory.getCommonProcessDispatcher(context);
-    this.inventoryDispatcher = factory.getORDispatcher(context);
+    this.ORDispatcher = factory.getORDispatcher(context);
 
     // fetch Page Size from the OS and cache it
     pageSize = getOSPageSize();
@@ -600,6 +627,7 @@ public class NodeAgent extends AbstractD
     String key = "ducc.broker.url";
 	String value = System.getProperty(key);
 	logger.info(methodName, null, key+"="+value);
+	stateChange(EventType.BOOT);
   }
 
   public DuccEventDispatcher getEventDispatcherForRemoteProcess() {
@@ -1924,9 +1952,10 @@ public class NodeAgent extends AbstractD
 	    HashMap<DuccId, IDuccProcess> emptyMap =
 	    		new HashMap<DuccId, IDuccProcess>();
 	    DuccEvent duccEvent = new NodeInventoryUpdateDuccEvent(emptyMap,getLastORSequence(), getIdentity());
-	    inventoryDispatcher.dispatch(duccEvent);
+	    ORDispatcher.dispatch(duccEvent);
 	    logger.info("stop", null, "Agent published final inventory");
-
+	    stateChange(EventType.SHUTDOWN);
+	    
 	    configurationFactory.stopRoutes();
 
 	    logger.info("stop", null, "Agent stopping managed processes");

Modified: uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/config/AgentConfiguration.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/config/AgentConfiguration.java?rev=1820175&r1=1820174&r2=1820175&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/config/AgentConfiguration.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/config/AgentConfiguration.java Thu Jan  4 18:32:54 2018
@@ -454,6 +454,8 @@ public class AgentConfiguration {
       AgentEventListener delegateListener = agentDelegateListener(agent);
 
       agent.setAgentEventListener(delegateListener);
+      
+      agent.setStateChangeEndpoint(common.daemonsStateChangeEndpoint);
 
       // Create server to receive status update from APs. The JPs report their status
       // via a Camel Mina-based route. The APs report to a different port handled

Modified: uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/OrchestratorComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/OrchestratorComponent.java?rev=1820175&r1=1820174&r2=1820175&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/OrchestratorComponent.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/OrchestratorComponent.java Thu Jan  4 18:32:54 2018
@@ -150,7 +150,20 @@ implements Orchestrator {
 	}
 	
 	public void onDuccAdminKillEvent(DuccAdminEvent event) throws Exception {
+		String location = "onDuccAdminKillEvent";
 		OrchestratorCheckpoint.getInstance().saveState();
+		/*
+		 * OR sleeps a short while to allow other daemons to report
+		 * their shutdowns for recording into the system events log.
+		 */
+		try { 
+			long delay = 10*1000; // 10 seconds
+			logger.info(location, jobid, "delay:"+delay);
+		    Thread.sleep(delay);
+		} 
+		catch(InterruptedException e) {
+			logger.error(location, jobid, e);
+		}
 		SystemEventsLogger.warn(IDuccLoggerComponents.abbrv_orchestrator, EventType.SHUTDOWN.name(), "");
 		super.onDuccAdminKillEvent(event);
 	}

Modified: uima/uima-ducc/trunk/uima-ducc-pm/src/main/java/org/apache/uima/ducc/pm/ProcessManagerComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pm/src/main/java/org/apache/uima/ducc/pm/ProcessManagerComponent.java?rev=1820175&r1=1820174&r2=1820175&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pm/src/main/java/org/apache/uima/ducc/pm/ProcessManagerComponent.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pm/src/main/java/org/apache/uima/ducc/pm/ProcessManagerComponent.java Thu Jan  4 18:32:54 2018
@@ -74,7 +74,7 @@ implements ProcessManager {
   private int shareQuantum;
   private int fudgeFactor = 5; // default 5%
   
-  String stateChangeEndpoint;
+  private String stateChangeEndpoint;
   
 	public ProcessManagerComponent(CamelContext context, DuccEventDispatcher eventDispatcher) {
 		super("ProcessManager",context);
@@ -122,7 +122,7 @@ implements ProcessManager {
         super.stop();
 	}
 	
-	public void setstateChangeEndpoint(String stateChangeEndpoint) {
+	public void setStateChangeEndpoint(String stateChangeEndpoint) {
 		this.stateChangeEndpoint = stateChangeEndpoint;
 	}
 	

Modified: uima/uima-ducc/trunk/uima-ducc-pm/src/main/java/org/apache/uima/ducc/pm/config/ProcessManagerConfiguration.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pm/src/main/java/org/apache/uima/ducc/pm/config/ProcessManagerConfiguration.java?rev=1820175&r1=1820174&r2=1820175&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pm/src/main/java/org/apache/uima/ducc/pm/config/ProcessManagerConfiguration.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pm/src/main/java/org/apache/uima/ducc/pm/config/ProcessManagerConfiguration.java Thu Jan  4 18:32:54 2018
@@ -207,7 +207,7 @@ public class ProcessManagerConfiguration
 		DuccEventDispatcher eventDispatcher = processManagerTransport.duccEventDispatcher(common.agentRequestEndpoint, camelContext);
 		logger.info("processManager()",null, "PM publishes state update to Agents on endpoint:"+common.agentRequestEndpoint);
 		ProcessManagerComponent pm = new ProcessManagerComponent(camelContext, eventDispatcher);
-		pm.setstateChangeEndpoint(common.daemonsStateChangeEndpoint);
+		pm.setStateChangeEndpoint(common.daemonsStateChangeEndpoint);
         //	Instantiate delegate listener to receive incoming messages. 
         ProcessManagerEventListener delegateListener = this.processManagerDelegateListener(pm);
         //	Inject a dispatcher into the listener in case it needs to send

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java?rev=1820175&r1=1820174&r2=1820175&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java Thu Jan  4 18:32:54 2018
@@ -131,7 +131,7 @@ implements IWebServer {
 		this.eventDispatcher = eventDispatcher;
 	}
 	
-	public void setstateChangeEndpoint(String stateChangeEndpoint) {
+	public void setStateChangeEndpoint(String stateChangeEndpoint) {
 		this.stateChangeEndpoint = stateChangeEndpoint;
 	}
 	

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/config/WebServerConfiguration.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/config/WebServerConfiguration.java?rev=1820175&r1=1820174&r2=1820175&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/config/WebServerConfiguration.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/config/WebServerConfiguration.java Thu Jan  4 18:32:54 2018
@@ -153,7 +153,7 @@ public class WebServerConfiguration {
 				}
 			}
 			ws = new WebServerComponent(common.camelContext(), common);
-			ws.setstateChangeEndpoint(common.daemonsStateChangeEndpoint);
+			ws.setStateChangeEndpoint(common.daemonsStateChangeEndpoint);
 			DuccBoot.boot(common);
 			//	Instantiate delegate listener to receive incoming messages. 
 			WebServerEventListener delegateListener = this.webServerDelegateListener(ws);