public void startService(SubmitServiceDuccEvent duccEvent) {
String methodName = "startService";
logger.trace(methodName, null, messages.fetch("enter"));
try {
OrchestratorHelper.assignDefaults(duccEvent);
JobRequestProperties properties = (JobRequestProperties) duccEvent.getProperties();
NodeIdentity nodeIdentity = hostManager.getNode();
if(!isSignatureValid(properties)) {
String error_message = messages.fetch(" type=authentication error, text=signature not valid.");
logger.error(methodName, null, error_message);
submitError(properties, error_message);
}
else if(nodeIdentity == null) {
String error_message = messages.fetch(" type=system error, text=job driver node unavailable.");
logger.error(methodName, null, error_message);
submitError(properties, error_message);
}
else if(!SystemState.getInstance().isAcceptJobs()) {
String error_message = messages.fetch(" type=system error, text=system is not accepting new work at this time.");
logger.error(methodName, null, error_message);
submitError(properties, error_message);
}
else {
logger.debug(methodName, null, messages.fetch("job driver host")+" "+messages.fetchLabel("IP")+nodeIdentity.getIp()+" "+messages.fetchLabel("name")+nodeIdentity.getName());
if(Validate.request(duccEvent)) {
DuccWorkJob duccWorkJob = jobFactory.create(common,properties);
long t0 = System.currentTimeMillis();
workMap.addDuccWork(duccWorkJob);
long t1 = System.currentTimeMillis();
long elapsed = t1 - t0;
if(elapsed > Constants.SYNC_LIMIT) {
logger.debug(methodName, null, "elapsed msecs: "+elapsed);
}
// state: Received
stateJobAccounting.stateChange(duccWorkJob, JobState.Received);
OrchestratorCheckpoint.getInstance().saveState();
// state: WaitingForServices
JobState nextState = JobState.WaitingForServices;
if(duccWorkJob.getServiceDependencies() == null) {
String message = messages.fetch("bypass")+" "+nextState;
logger.debug(methodName, duccWorkJob.getDuccId(), message);
nextState = JobState.WaitingForResources;
}
stateJobAccounting.stateChange(duccWorkJob, nextState);
OrchestratorCheckpoint.getInstance().saveState();
// prepare for reply to submitter
properties.put(JobRequestProperties.key_id, duccWorkJob.getId());
duccEvent.setProperties(properties);
}
else {
logger.info(methodName, null, messages.fetch("TODO")+" prepare error reply");
//TODO