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 2014/11/24 20:08:52 UTC
svn commit: r1641447 -
/uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/JobFactory.java
Author: degenaro
Date: Mon Nov 24 19:08:51 2014
New Revision: 1641447
URL: http://svn.apache.org/r1641447
Log:
UIMA-4069 Redesign of JD toward the main goal of classpath separation for container (system) code.
JobFactory creates launch for JD v1 or JD v2 based on ducc.jd.configuration.class.
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/JobFactory.java
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/JobFactory.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/JobFactory.java?rev=1641447&r1=1641446&r2=1641447&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/JobFactory.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/JobFactory.java Mon Nov 24 19:08:51 2014
@@ -27,6 +27,7 @@ import java.util.Map;
import org.apache.uima.ducc.common.IDuccEnv;
import org.apache.uima.ducc.common.NodeIdentity;
import org.apache.uima.ducc.common.config.CommonConfiguration;
+import org.apache.uima.ducc.common.container.FlagsHelper;
import org.apache.uima.ducc.common.utils.DuccLogger;
import org.apache.uima.ducc.common.utils.DuccLoggerComponents;
import org.apache.uima.ducc.common.utils.DuccProperties;
@@ -73,11 +74,20 @@ public class JobFactory {
private long driver_max_size_in_bytes = 0;
+ private enum JdVersion { V1, V2 };
+ private JdVersion jdVersion = JdVersion.V2;
+
public JobFactory() {
String ducc_jd_share_quantum = DuccPropertiesResolver.getInstance().getFileProperty(DuccPropertiesResolver.ducc_jd_share_quantum);
long oneKB = 1024;
long oneMB = 1024*oneKB;
driver_max_size_in_bytes = Long.parseLong(ducc_jd_share_quantum) * oneMB;
+ String jd_configuration_class = DuccPropertiesResolver.getInstance().getFileProperty(DuccPropertiesResolver.ducc_jd_configuration_class);
+ if(jd_configuration_class != null) {
+ if(jd_configuration_class.trim().equals("org.apache.uima.ducc.jd.config.JobDriverConfiguration")) {
+ jdVersion = JdVersion.V1;
+ }
+ }
}
private OrchestratorCommonArea orchestratorCommonArea = OrchestratorCommonArea.getInstance();
@@ -255,11 +265,113 @@ public class JobFactory {
}
}
+ private String buildJobDriverClasspath(JobRequestProperties jobRequestProperties, DuccId jobid) {
+ String methodName = "buildJobDriverClasspath";
+ String cp = null;
+ switch(jdVersion) {
+ case V2:
+ cp = getDuccClasspath(0);
+ logger.debug(methodName, jobid, "java CP:"+cp);
+ break;
+ default:
+ case V1:
+ String java_classpath = getDuccClasspath(0); // for driver
+ String driverClasspath = jobRequestProperties.getProperty(JobSpecificationProperties.key_classpath);
+ logger.debug(methodName, jobid, "driver CP (spec):"+driverClasspath);
+ logger.debug(methodName, jobid, "java CP:"+java_classpath);
+ if(driverClasspath != null) {
+ if(isClasspathOrderUserBeforeDucc(jobRequestProperties.getProperty(JobSpecificationProperties.key_classpath_order),jobid)) {
+ logger.info(methodName, jobid, "driver:OrderUserBeforeDucc");
+ driverClasspath=driverClasspath+File.pathSeparator+java_classpath;
+ }
+ else {
+ logger.info(methodName, jobid, "driver:OrderDuccBeforeUser");
+ driverClasspath=java_classpath+File.pathSeparator+driverClasspath;
+ }
+ }
+ else {
+ logger.info(methodName, jobid, "driver:OrderDefault");
+ driverClasspath=java_classpath;
+ }
+ logger.debug(methodName, jobid, "driver CP (combined):"+driverClasspath);
+ cp = driverClasspath;
+ break;
+ }
+ return cp;
+ }
+
+ private JavaCommandLine buildJobDriverCommandLine(JobRequestProperties jobRequestProperties, DuccId jobid) {
+ JavaCommandLine jcl = null;
+ // java command
+ String javaCmd = jobRequestProperties.getProperty(JobSpecificationProperties.key_jvm);
+ jcl = new JavaCommandLine(javaCmd);
+ jcl.setClassName(IDuccCommand.main);
+ jcl.addOption(IDuccCommand.arg_ducc_deploy_configruation);
+ jcl.addOption(IDuccCommand.arg_ducc_deploy_components);
+ jcl.addOption(IDuccCommand.arg_ducc_job_id+jobid.toString());
+ String cp = buildJobDriverClasspath(jobRequestProperties, jobid);
+ jcl.setClasspath(cp);
+ // Add the user-provided JVM args
+ boolean haveXmx = false;
+ String driver_jvm_args = jobRequestProperties.getProperty(JobSpecificationProperties.key_driver_jvm_args);
+ ArrayList<String> dTokens = QuotedOptions.tokenizeList(driver_jvm_args, true);
+ for(String token : dTokens) {
+ jcl.addOption(token);
+ if (!haveXmx) {
+ haveXmx = token.startsWith("-Xmx");
+ }
+ }
+ // Add any site-provided JVM args, but not -Xmx if the user has provided one
+ String siteJvmArgs = DuccPropertiesResolver.getInstance().getFileProperty(DuccPropertiesResolver.ducc_driver_jvm_args);
+ dTokens = QuotedOptions.tokenizeList(siteJvmArgs, true); // a null arg is acceptable
+ for (String token : dTokens) {
+ if (!haveXmx || !token.startsWith("-Xmx")) {
+ jcl.addOption(token);
+ }
+ }
+ // Add job JVM args
+ switch(jdVersion) {
+ case V2:
+ // add JobId
+ String opt;
+ opt = FlagsHelper.Name.JobId.dname()+"="+jobid.getFriendly();
+ jcl.addOption(opt);
+ // add CrXML
+ String crxml = jobRequestProperties.getProperty(JobSpecificationProperties.key_driver_descriptor_CR);
+ if(crxml != null) {
+ opt = FlagsHelper.Name.CollectionReaderXml.dname()+"="+crxml;
+ jcl.addOption(opt);
+ }
+ // add CrCfg
+ String crcfg = jobRequestProperties.getProperty(JobSpecificationProperties.key_driver_descriptor_CR_overrides);
+ if(crcfg != null) {
+ opt = FlagsHelper.Name.CollectionReaderCfg.dname()+"="+crcfg;
+ jcl.addOption(opt);
+ }
+ // add userCP
+ String userCP = jobRequestProperties.getProperty(JobSpecificationProperties.key_classpath);
+ if(userCP == null) {
+ userCP = "";
+ }
+ String augment = IDuccEnv.DUCC_HOME+File.separator+"lib"+File.separator+"uima-ducc"+File.separator+"*";
+ userCP = augment+File.pathSeparator+userCP;
+ opt = FlagsHelper.Name.UserClasspath.dname()+"="+userCP;
+ jcl.addOption(opt);
+ break;
+ default:
+ case V1:
+ break;
+ }
+ // Name the log config file explicitly - the default of searching the user-provided classpath is dangerous
+ jcl.addOption("-Dlog4j.configuration=file://" + Utils.findDuccHome() + "/resources/log4j.xml");
+ // Log directory
+ jcl.setLogDirectory(jobRequestProperties.getProperty(JobSpecificationProperties.key_log_directory));
+ return jcl;
+ }
+
private void createDriver(CommonConfiguration common, JobRequestProperties jobRequestProperties, DuccWorkJob job) {
String methodName = "createDriver";
DuccPropertiesResolver duccPropertiesResolver = DuccPropertiesResolver.getInstance();
- // java command
- String javaCmd = jobRequestProperties.getProperty(JobSpecificationProperties.key_jvm);
// broker & queue
job.setJobBroker(common.brokerUrl);
job.setJobQueue(common.jdQueuePrefix+job.getDuccId());
@@ -297,60 +409,12 @@ public class JobFactory {
}
// Command line
DuccWorkPopDriver driver = new DuccWorkPopDriver(job.getjobBroker(), job.getjobQueue(), crxml, crcfg, meta_time, lost_time, wi_time, processExceptionHandler, processStatusMaxWaitMillis);
- JavaCommandLine driverCommandLine = new JavaCommandLine(javaCmd);
- driverCommandLine.setClassName(IDuccCommand.main);
- driverCommandLine.addOption(IDuccCommand.arg_ducc_deploy_configruation);
- driverCommandLine.addOption(IDuccCommand.arg_ducc_deploy_components);
- driverCommandLine.addOption(IDuccCommand.arg_ducc_job_id+job.getDuccId().toString());
- // classpath
- String java_classpath = getDuccClasspath(0); // for driver
- String driverClasspath = jobRequestProperties.getProperty(JobSpecificationProperties.key_classpath);
- logger.debug(methodName, job.getDuccId(), "driver CP (spec):"+driverClasspath);
- logger.debug(methodName, job.getDuccId(), "java CP:"+java_classpath);
- if(driverClasspath != null) {
- if(isClasspathOrderUserBeforeDucc(jobRequestProperties.getProperty(JobSpecificationProperties.key_classpath_order),job.getDuccId())) {
- logger.info(methodName, job.getDuccId(), "driver:OrderUserBeforeDucc");
- driverClasspath=driverClasspath+File.pathSeparator+java_classpath;
- }
- else {
- logger.info(methodName, job.getDuccId(), "driver:OrderDuccBeforeUser");
- driverClasspath=java_classpath+File.pathSeparator+driverClasspath;
- }
- }
- else {
- logger.info(methodName, job.getDuccId(), "driver:OrderDefault");
- driverClasspath=java_classpath;
- }
- logger.debug(methodName, job.getDuccId(), "driver CP (combined):"+driverClasspath);
- driverCommandLine.setClasspath(driverClasspath);
- // Add the user-provided JVM args
- boolean haveXmx = false;
- String driver_jvm_args = jobRequestProperties.getProperty(JobSpecificationProperties.key_driver_jvm_args);
- ArrayList<String> dTokens = QuotedOptions.tokenizeList(driver_jvm_args, true);
- for(String token : dTokens) {
- driverCommandLine.addOption(token);
- if (!haveXmx) {
- haveXmx = token.startsWith("-Xmx");
- }
- }
- // Add any site-provided JVM args, but not -Xmx if the user has provided one
- String siteJvmArgs = DuccPropertiesResolver.getInstance().getFileProperty(DuccPropertiesResolver.ducc_driver_jvm_args);
- dTokens = QuotedOptions.tokenizeList(siteJvmArgs, true); // a null arg is acceptable
- for (String token : dTokens) {
- if (!haveXmx || !token.startsWith("-Xmx")) {
- driverCommandLine.addOption(token);
- }
- }
-
- // Name the log config file explicitly - the default of searching the user-provided classpath is dangerous
- driverCommandLine.addOption("-Dlog4j.configuration=file://" + Utils.findDuccHome() + "/resources/log4j.xml");
+ JavaCommandLine driverCommandLine = buildJobDriverCommandLine(jobRequestProperties, job.getDuccId());
// Environment
String driverEnvironmentVariables = jobRequestProperties.getProperty(JobSpecificationProperties.key_environment);
int envCountDriver = addEnvironment(job, "driver", driverCommandLine, driverEnvironmentVariables);
logger.info(methodName, job.getDuccId(), "driver env vars: "+envCountDriver);
logger.debug(methodName, job.getDuccId(), "driver: "+driverCommandLine.getCommand());
- // Log directory
- driverCommandLine.setLogDirectory(jobRequestProperties.getProperty(JobSpecificationProperties.key_log_directory));
driver.setCommandLine(driverCommandLine);
//
NodeIdentity nodeIdentity = hostManager.getNode();