You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by bu...@apache.org on 2016/05/18 22:04:18 UTC

svn commit: r1744461 - in /uima/sandbox/uima-ducc/trunk: uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/ uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/cmdline/

Author: burn
Date: Wed May 18 22:04:18 2016
New Revision: 1744461

URL: http://svn.apache.org/viewvc?rev=1744461&view=rev
Log:
UIMA-4935 Avoid duplicate JpUniqueId entries by launching each JP from a copy of the cmdLine

Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CommandExecutor.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/cmdline/JavaCommandLine.java

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CommandExecutor.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CommandExecutor.java?rev=1744461&r1=1744460&r2=1744461&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CommandExecutor.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CommandExecutor.java Wed May 18 22:04:18 2016
@@ -126,7 +126,7 @@ public abstract class CommandExecutor im
 			// managedProcess).getCommandLine();
 			Map<String, String> env = new HashMap<String, String>();
 			if (!isKillCommand(cmdLine)) {
-				cmdLine.addOption(IDuccUser.DashD.DUCC_ID_PROCESS_UNIQUE.dvalue()+"="+((ManagedProcess) managedProcess).getDuccId().getUnique());
+			  // UIMA-4935 Moved setting of JpUniqueId to DuccComamndExecutor where the cmdLine is not shared
 				// Enrich environment for the new process. Via these settings
 				// the UIMA AS
 				// service wrapper can notify the agent of its state.

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java?rev=1744461&r1=1744460&r2=1744461&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java Wed May 18 22:04:18 2016
@@ -21,10 +21,7 @@ package org.apache.uima.ducc.agent.launc
 import java.io.File;
 import java.io.PrintWriter;
 import java.io.StringWriter;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -663,8 +660,13 @@ public class DuccCommandExecutor extends
 							new String[] { cmdLine.getExecutable() },
 							cmdLine.getCommandLine());
 				}
+				
 			} else {
 				String processType = "-UIMA-";
+				// If Java then may run many JPs from the same cmdLine so make a local copy that we can modify
+				if (cmdLine instanceof JavaCommandLine) {
+				  cmdLine = ((JavaCommandLine)cmdLine).copy();
+				}
 				switch (((ManagedProcess) super.managedProcess)
 						.getDuccProcess().getProcessType()) {
 				case Pop:
@@ -672,9 +674,7 @@ public class DuccCommandExecutor extends
 					// is an arbitrary process
 					processType = "-POP-";
 					if (cmdLine instanceof JavaCommandLine) {
-						int size = ((JavaCommandLine) cmdLine).getOptions().size();
-						String[] options = ((JavaCommandLine) cmdLine).getOptions().toArray(new String[size]);
-						for( String option : options ) {
+						for (String option : cmdLine.getOptions()) {
 							// Both services and JD have processType=POP.
 							// However, only the JD
 							// will have -Dducc.deploy.components option set.
@@ -692,10 +692,10 @@ public class DuccCommandExecutor extends
 					break;
 				case Job_Uima_AS_Process:
 					processType = "-UIMA-";
-					int size = ((JavaCommandLine) cmdLine).getOptions().size();
-					String[] options = ((JavaCommandLine) cmdLine).getOptions().toArray(new String[size]);
 					boolean isDucc20JpProcess = false;
 					boolean isDucc20ServiceProcess = false;
+					// determine if we are launching Ducc2.0 or Ducc1.+ JP
+					List<String> options = cmdLine.getOptions();
 					for( String option : options ) {
 						if (option.indexOf(FlagsHelper.Name.JpType.pname()) > -1) {
 							isDucc20JpProcess = true;
@@ -708,21 +708,12 @@ public class DuccCommandExecutor extends
 					// Add main class and component type to the command line
 					if (isDucc20JpProcess) {
 						if (!isDucc20ServiceProcess) {
-							synchronized(options) {
-								((JavaCommandLine) cmdLine)
-								.addOption("-Dducc.deploy.components=job-process");
-							}
+						  cmdLine.addOption("-Dducc.deploy.components=job-process");
 						}
-
-						((JavaCommandLine) cmdLine)
-								.setClassName("org.apache.uima.ducc.user.common.main.DuccJobService");
+						((JavaCommandLine)cmdLine).setClassName("org.apache.uima.ducc.user.common.main.DuccJobService");
 					} else {
-						synchronized(options) {
-							((JavaCommandLine) cmdLine)
-							.addOption("-Dducc.deploy.components=uima-as");
-						}
-						((JavaCommandLine) cmdLine)
-								.setClassName("org.apache.uima.ducc.common.main.DuccService");
+					  cmdLine.addOption("-Dducc.deploy.components=uima-as");
+					  ((JavaCommandLine)cmdLine).setClassName("org.apache.uima.ducc.common.main.DuccService");
 					}
 					break;
 				}
@@ -757,38 +748,26 @@ public class DuccCommandExecutor extends
 				}
 
 				if (cmdLine instanceof JavaCommandLine) {
-					List<String> options = Collections.synchronizedList(((JavaCommandLine) cmdLine)
-							.getOptions());
-					JavaCommandLine jcl = ((JavaCommandLine) cmdLine);
 					String duccHomePath = Utils.findDuccHome();
-					synchronized(options) {
-						jcl.addOption("-DDUCC_HOME=" + duccHomePath);
-						jcl.addOption("-Dducc.deploy.configuration="
+					cmdLine.addOption("-DDUCC_HOME=" + duccHomePath);
+					cmdLine.addOption("-Dducc.deploy.configuration="
 								+ System.getProperty("ducc.deploy.configuration"));
-						if (System
-								.getProperties()
-								.containsKey(
-										"ducc.agent.managed.process.state.update.endpoint.type")) {
-							String type = System
-									.getProperty("ducc.agent.managed.process.state.update.endpoint.type");
-							if (type != null && type.equalsIgnoreCase("socket")) {
-									jcl.addOption("-D"
-												+ NodeAgent.ProcessStateUpdatePort
-												+ "="
-												+ System.getProperty(NodeAgent.ProcessStateUpdatePort));
-							}
-						}
-						// NOTE - These are redundant since the information is also
-						// in the environment for both Java and non-Java processes
-						jcl.addOption("-Dducc.process.log.dir="
-									+ processLogDir);
-						jcl.addOption("-Dducc.process.log.basename="
-									+ processLogFile); // ((ManagedProcess)super.managedProcess).getWorkDuccId()+
-														// processType+host);
-						jcl.addOption("-Dducc.job.id="
-									+ ((ManagedProcess) super.managedProcess)
-											.getWorkDuccId());
-					}
+					// UIMA-4935 Following moved from CommandExecutor to avoid duplications in the shared cmdLine
+					cmdLine.addOption("-Dducc.deploy.JpUniqueId="
+					        + ((ManagedProcess) managedProcess).getDuccId().getUnique());
+					
+          if (System.getProperties().containsKey("ducc.agent.managed.process.state.update.endpoint.type")) {
+            String type = System.getProperty("ducc.agent.managed.process.state.update.endpoint.type");
+            if (type != null && type.equalsIgnoreCase("socket")) {
+              cmdLine.addOption("-D" + NodeAgent.ProcessStateUpdatePort + "="
+                      + System.getProperty(NodeAgent.ProcessStateUpdatePort));
+            }
+          }
+					// NOTE - These are redundant since the information is also
+					// in the environment for both Java and non-Java processes
+					cmdLine.addOption("-Dducc.process.log.dir="	+ processLogDir);
+					cmdLine.addOption("-Dducc.process.log.basename=" + processLogFile); 
+					cmdLine.addOption("-Dducc.job.id=" + ((ManagedProcess) super.managedProcess).getWorkDuccId());
 				}
 				
 				if (useDuccSpawn()) {

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/cmdline/JavaCommandLine.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/cmdline/JavaCommandLine.java?rev=1744461&r1=1744460&r2=1744461&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/cmdline/JavaCommandLine.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/cmdline/JavaCommandLine.java Wed May 18 22:04:18 2016
@@ -33,6 +33,22 @@ public class JavaCommandLine extends ACo
 	public JavaCommandLine(String executable) {
 		super(executable);
 	}
+	
+	/*
+	 * Make a shallow copy of everything except the options as they are modified by DuccCommandExecutor
+	 */
+	public JavaCommandLine copy() {
+	  JavaCommandLine jcl = new JavaCommandLine(executable);
+	  jcl.className = className;
+	  jcl.classpath = classpath;
+	  jcl.logDirectory = logDirectory;
+	  jcl.workingDirectory = workingDirectory;
+	  jcl.args = args;
+	  jcl.environment = environment;
+	  jcl.options = new ArrayList<String>(getOptions());
+	  return jcl;
+	}
+	
     public void addOption(String option ) {
         if (!options.contains(option)) {
             options.add(option);
@@ -75,7 +91,7 @@ public class JavaCommandLine extends ACo
 	}
 
 	/**
-	 * @param className
+	 * @param classNameoptions
 	 *            the className to set
 	 */
 	public void setClassName(String className) {