You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sh...@apache.org on 2015/08/24 23:30:16 UTC
airavata git commit: Fixed process recovery,
fixed job status update and retrieval issues.
Repository: airavata
Updated Branches:
refs/heads/master b98f65997 -> 1de22283b
Fixed process recovery, fixed job status update and retrieval issues.
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/1de22283
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/1de22283
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/1de22283
Branch: refs/heads/master
Commit: 1de22283bce653c76f111125af429869fc05b60f
Parents: b98f659
Author: Shameera Rathanyaka <sh...@gmail.com>
Authored: Mon Aug 24 17:30:11 2015 -0400
Committer: Shameera Rathanyaka <sh...@gmail.com>
Committed: Mon Aug 24 17:30:11 2015 -0400
----------------------------------------------------------------------
.../airavata/gfac/impl/GFacEngineImpl.java | 160 ++++++++++++++-----
.../apache/airavata/gfac/impl/GFacWorker.java | 143 +++++------------
.../gfac/monitor/email/EmailBasedMonitor.java | 4 +-
.../catalog/impl/ExperimentRegistry.java | 19 ++-
.../experiment/catalog/resources/Utils.java | 5 +-
.../utils/ThriftDataModelConversion.java | 5 +-
6 files changed, 183 insertions(+), 153 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/1de22283/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
index 1f5526a..b97915c 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
@@ -133,27 +133,48 @@ public class GFacEngineImpl implements GFacEngine {
if (processContext.isHandOver()) {
return;
}
- TaskContext taskCtx = null;
- List<TaskContext> taskChain = new ArrayList<>();
- processContext.setProcessStatus(new ProcessStatus(ProcessState.CONFIGURING_WORKSPACE));
+// List<TaskContext> taskChain = new ArrayList<>();
+ if (configureWorkspace(processContext, false)) return;
+
+ // exit if process is handed over to another instance while input staging
+ if (inputDataStaging(processContext, false)) return;
+
+ // exit if process is handed orver to another instance while job submission.
+ if (executeJobSubmission(processContext)) return;
+// processContext.setTaskChain(taskChain);
+ if (processContext.isHandOver()) {
+ return;
+ }
+ }
+
+ private boolean executeJobSubmission(ProcessContext processContext) throws GFacException {
+ if (processContext.isHandOver()) {
+ return true;
+ }
+ TaskContext taskCtx;
+ TaskStatus taskStatus;
+ processContext.setProcessStatus(new ProcessStatus(ProcessState.EXECUTING));
+ JobSubmissionTask jobSubmissionTask = Factory.getJobSubmissionTask(processContext.getJobSubmissionProtocol());
+ if (processContext.isHandOver()) {
+ return true;
+ }
GFacUtils.saveAndPublishProcessStatus(processContext);
- // Run all environment setup tasks
- taskCtx = getEnvSetupTaskContext(processContext);
+ taskCtx = getJobSubmissionTaskContext(processContext);
saveTaskModel(taskCtx);
GFacUtils.saveAndPublishTaskStatus(taskCtx);
- SSHEnvironmentSetupTask envSetupTask = new SSHEnvironmentSetupTask();
- TaskStatus taskStatus = executeTask(taskCtx, envSetupTask);
+ taskStatus = executeTask(taskCtx, jobSubmissionTask, false);
if (taskStatus.getState() == TaskState.FAILED) {
- log.error("expId: {}, processId: {}, taskId: {} type: {},:- Input statging failed, " +
- "reason:" + " {}", taskCtx.getParentProcessContext().getExperimentId(), taskCtx
- .getParentProcessContext().getProcessId(), taskCtx.getTaskId(), envSetupTask.getType
- ().name(), taskStatus.getReason());
- throw new GFacException("Error while environment setup");
+ throw new GFacException("Job submission task failed");
}
+ return processContext.isHandOver();
+ }
+
+ private boolean inputDataStaging(ProcessContext processContext, boolean recover) throws GFacException {
if (processContext.isHandOver()) {
- return;
+ return true;
}
- // execute process inputs
+ TaskContext taskCtx;
+ TaskStatus taskStatus;// execute process inputs
processContext.setProcessStatus(new ProcessStatus(ProcessState.INPUT_DATA_STAGING));
GFacUtils.saveAndPublishProcessStatus(processContext);
List<InputDataObjectType> processInputs = processContext.getProcessModel().getProcessInputs();
@@ -161,7 +182,7 @@ public class GFacEngineImpl implements GFacEngine {
if (processInputs != null) {
for (InputDataObjectType processInput : processInputs) {
if (processContext.isHandOver()) {
- return;
+ return true;
}
DataType type = processInput.getType();
switch (type) {
@@ -178,7 +199,7 @@ public class GFacEngineImpl implements GFacEngine {
saveTaskModel(taskCtx);
GFacUtils.saveAndPublishTaskStatus(taskCtx);
Task dMoveTask = Factory.getDataMovementTask(processContext.getDataMovementProtocol());
- taskStatus = executeTask(taskCtx, dMoveTask);
+ taskStatus = executeTask(taskCtx, dMoveTask, false);
if (taskStatus.getState() == TaskState.FAILED) {
log.error("expId: {}, processId: {}, taskId: {} type: {},:- Input statging failed, " +
"reason:" + " {}", taskCtx.getParentProcessContext().getExperimentId(), taskCtx
@@ -193,32 +214,57 @@ public class GFacEngineImpl implements GFacEngine {
}
}
}
+ return processContext.isHandOver();
+ }
+
+ private boolean configureWorkspace(ProcessContext processContext, boolean recover) throws GFacException {
if (processContext.isHandOver()) {
- return;
+ return true;
}
- processContext.setProcessStatus(new ProcessStatus(ProcessState.EXECUTING));
+ TaskContext taskCtx;
+ processContext.setProcessStatus(new ProcessStatus(ProcessState.CONFIGURING_WORKSPACE));
GFacUtils.saveAndPublishProcessStatus(processContext);
- taskCtx = getJobSubmissionTaskContext(processContext);
+ // Run all environment setup tasks
+ taskCtx = getEnvSetupTaskContext(processContext);
saveTaskModel(taskCtx);
GFacUtils.saveAndPublishTaskStatus(taskCtx);
- JobSubmissionTask jobSubmissionTask = Factory.getJobSubmissionTask(processContext.getJobSubmissionProtocol());
- if (processContext.isHandOver()) {
- return;
- }
- taskStatus = executeTask(taskCtx, jobSubmissionTask);
+ SSHEnvironmentSetupTask envSetupTask = new SSHEnvironmentSetupTask();
+ TaskStatus taskStatus = executeTask(taskCtx, envSetupTask, recover);
if (taskStatus.getState() == TaskState.FAILED) {
- throw new GFacException("Job submission task failed");
- }
- processContext.setTaskChain(taskChain);
- if (processContext.isHandOver()) {
- return;
+ log.error("expId: {}, processId: {}, taskId: {} type: {},:- Input statging failed, " +
+ "reason:" + " {}", taskCtx.getParentProcessContext().getExperimentId(), taskCtx
+ .getParentProcessContext().getProcessId(), taskCtx.getTaskId(), envSetupTask.getType
+ ().name(), taskStatus.getReason());
+ throw new GFacException("Error while environment setup");
}
+ return processContext.isHandOver();
}
@Override
public void recoverProcess(ProcessContext processContext) throws GFacException {
-
+ ProcessState state = processContext.getProcessStatus().getState();
+ switch (state) {
+ case CREATED:
+ case VALIDATED:
+ executeProcess(processContext);
+ break;
+ case PRE_PROCESSING:
+ case CONFIGURING_WORKSPACE:
+ if (configureWorkspace(processContext, true)) return;
+ if (inputDataStaging(processContext, false)) return;
+ if (executeJobSubmission(processContext)) return;
+ break;
+ case INPUT_DATA_STAGING:
+ if (inputDataStaging(processContext, true)) return;
+ if (executeJobSubmission(processContext)) return;
+ break;
+ case EXECUTING:
+ if (executeJobSubmission(processContext)) return;
+ break;
+ default:
+ throw new GFacException("Invalid process recovery invocation");
+ }
}
@Override
@@ -226,13 +272,35 @@ public class GFacEngineImpl implements GFacEngine {
if (processContext.isHandOver()) {
return;
}
- TaskContext taskCtx = null;
+ // exit if process is handed over to another instance while output staging.
+ if (outpuDataStaging(processContext, false)) return;
+
+ if (processContext.isHandOver()) {
+ return;
+ }
+
+ postProcessing(processContext,false);
+
+ if (processContext.isHandOver()) {
+ return;
+ }
+ }
+
+ private boolean postProcessing(ProcessContext processContext, boolean recovery) throws GFacException {
+ processContext.setProcessStatus(new ProcessStatus(ProcessState.POST_PROCESSING));
+ GFacUtils.saveAndPublishProcessStatus(processContext);
+// taskCtx = getEnvCleanupTaskContext(processContext);
+ return processContext.isHandOver();
+ }
+
+ private boolean outpuDataStaging(ProcessContext processContext, boolean recovery) throws GFacException {
+ TaskContext taskCtx;
processContext.setProcessStatus(new ProcessStatus(ProcessState.OUTPUT_DATA_STAGING));
GFacUtils.saveAndPublishProcessStatus(processContext);
List<OutputDataObjectType> processOutputs = processContext.getProcessModel().getProcessOutputs();
for (OutputDataObjectType processOutput : processOutputs) {
if (processContext.isHandOver()) {
- return;
+ return true;
}
DataType type = processOutput.getType();
switch (type) {
@@ -251,7 +319,7 @@ public class GFacEngineImpl implements GFacEngine {
saveTaskModel(taskCtx);
GFacUtils.saveAndPublishTaskStatus(taskCtx);
Task dMoveTask = Factory.getDataMovementTask(processContext.getDataMovementProtocol());
- TaskStatus taskStatus = executeTask(taskCtx, dMoveTask);
+ TaskStatus taskStatus = executeTask(taskCtx, dMoveTask, recovery);
if (taskStatus.getState() == TaskState.FAILED) {
log.error("expId: {}, processId: {}, taskId: {} type: {},:- Input statging failed, " +
"reason:" + " {}", taskCtx.getParentProcessContext().getExperimentId(), taskCtx
@@ -265,17 +333,20 @@ public class GFacEngineImpl implements GFacEngine {
break;
}
}
- if (processContext.isHandOver()) {
- return;
- }
- processContext.setProcessStatus(new ProcessStatus(ProcessState.POST_PROCESSING));
- GFacUtils.saveAndPublishProcessStatus(processContext);
-// taskCtx = getEnvCleanupTaskContext(processContext);
-
+ return false;
}
@Override
public void recoverProcessOutflow(ProcessContext processContext) throws GFacException {
+ ProcessState processState = processContext.getProcessStatus().getState();
+ switch (processState) {
+ case OUTPUT_DATA_STAGING:
+ if (outpuDataStaging(processContext, true)) return;
+ if (postProcessing(processContext, false)) return;
+ case POST_PROCESSING:
+ postProcessing(processContext, true);
+ break;
+ }
runProcessOutflow(processContext); // TODO implement recover steps
}
@@ -284,10 +355,15 @@ public class GFacEngineImpl implements GFacEngine {
}
- private TaskStatus executeTask(TaskContext taskCtx, Task task) throws GFacException {
+ private TaskStatus executeTask(TaskContext taskCtx, Task task, boolean recover) throws GFacException {
taskCtx.setTaskStatus(new TaskStatus(TaskState.EXECUTING));
GFacUtils.saveAndPublishTaskStatus(taskCtx);
- TaskStatus taskStatus = task.execute(taskCtx);
+ TaskStatus taskStatus = null;
+ if (recover) {
+ taskStatus = task.recover(taskCtx);
+ } else {
+ taskStatus = task.execute(taskCtx);
+ }
taskCtx.setTaskStatus(taskStatus);
GFacUtils.saveAndPublishTaskStatus(taskCtx);
return taskCtx.getTaskStatus();
http://git-wip-us.apache.org/repos/asf/airavata/blob/1de22283/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacWorker.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacWorker.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacWorker.java
index 35b0ed6..8d3c5e0 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacWorker.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacWorker.java
@@ -78,68 +78,46 @@ public class GFacWorker implements Runnable {
return;
}
try {
- ProcessType type = getProcessType(processContext);
- try {
- switch (type) {
- case NEW:
- executeProcess();
- break;
- case RECOVER:
- recoverProcess();
- break;
- case RECOVER_MONITORING:
- monitorProcess();
- // TODO get monitor mode from process and get correct monitor service instead default service.
- break;
- case RUN_OUTFLOW:
- // run the outflow task
+ ProcessState processState = processContext.getProcessStatus().getState();
+ switch (processState) {
+ case CREATED:
+ case VALIDATED:
+ executeProcess();
+ break;
+ case PRE_PROCESSING:
+ case CONFIGURING_WORKSPACE:
+ case INPUT_DATA_STAGING:
+ case EXECUTING:
+ recoverProcess();
+ break;
+ case MONITORING:
+ if (runOutflow) {
runProcessOutflow();
- break;
- case RECOVER_OUTFLOW:
- // recover outflow task;
- recoverProcessOutflow();
- break;
- case COMPLETED:
- completeProcess();
- break;
- case CANCELED:
- // TODO - implement cancel scenario
- break;
- case FAILED:
- // TODO - implement failed scenario
- break;
- default:
- throw new GFacException("process Id : " + processId + " Couldn't identify process type");
- }
- } catch (GFacException e) {
- switch (type) {
- case NEW:
- log.error("Process execution error", e);
- break;
- case RECOVER:
- log.error("Process recover error ", e);
- break;
- case RECOVER_MONITORING:
- log.error("Process monitoring recovery error", e);
- break;
- case RUN_OUTFLOW:
- log.error("Process outflow execution error", e);
- break;
- case RECOVER_OUTFLOW:
- log.error("Process outflow recover error", e);
- break;
- case COMPLETED:
- log.error("Process completion error", e);
- break;
- case CANCELED: // TODO - implement cancel scenario
- case FAILED: // TODO - implement failed scenario
- break;
- }
- throw e;
+ } else {
+ monitorProcess();
+ }
+ break;
+ case OUTPUT_DATA_STAGING:
+ case POST_PROCESSING:
+ recoverProcessOutflow();
+ break;
+ case COMPLETED:
+ completeProcess();
+ break;
+ case CANCELED:
+ // TODO - implement cancel scenario
+ break;
+ case FAILED:
+ // TODO - implement failed scenario
+ break;
+ default:
+ throw new GFacException("process Id : " + processId + " Couldn't identify process type");
}
} catch (GFacException e) {
log.error("GFac Worker throws an exception", e);
- processContext.setProcessStatus(new ProcessStatus(ProcessState.FAILED));
+ ProcessStatus status = new ProcessStatus(ProcessState.FAILED);
+ status.setReason(e.getMessage());
+ processContext.setProcessStatus(status);
try {
GFacUtils.saveAndPublishProcessStatus(processContext);
} catch (GFacException e1) {
@@ -168,9 +146,8 @@ public class GFacWorker implements Runnable {
}
private void recoverProcess() throws GFacException {
- // recover the process
- // engine.recoverProcess(processContext);
- executeProcess(); // TODO - implement recover process.
+ engine.recoverProcess(processContext);
+ monitorProcess();
}
private void executeProcess() throws GFacException {
@@ -210,48 +187,4 @@ public class GFacWorker implements Runnable {
}
}
- private ProcessType getProcessType(ProcessContext processContext) {
- // check the status and return correct type of process.
- switch (processContext.getProcessState()) {
- case CREATED:
- case VALIDATED:
- return ProcessType.NEW;
- case PRE_PROCESSING:
- case CONFIGURING_WORKSPACE:
- case INPUT_DATA_STAGING:
- case EXECUTING:
- return ProcessType.RECOVER;
- case MONITORING:
- if (runOutflow) {
- return ProcessType.RUN_OUTFLOW; // execute outflow
- } else {
- return ProcessType.RECOVER_MONITORING; // hand over to monitor task
- }
- case OUTPUT_DATA_STAGING:
- case POST_PROCESSING:
- return ProcessType.RECOVER_OUTFLOW;
- case COMPLETED:
- return ProcessType.COMPLETED;
- case CANCELED:
- return ProcessType.CANCELED;
- case FAILED:
- return ProcessType.FAILED;
- //case CANCELLING: // TODO: handle this
- default:
- // this will never hit as we have handle all states in cases.
- return ProcessType.NEW;
- }
- }
-
-
- private enum ProcessType {
- NEW,
- RECOVER,
- RECOVER_MONITORING,
- RUN_OUTFLOW,
- RECOVER_OUTFLOW,
- CANCELED,
- FAILED,
- COMPLETED
- }
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/1de22283/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java
index efa0641..bd0b541 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java
@@ -274,8 +274,8 @@ public class EmailBasedMonitor implements JobMonitor, Runnable{
log.info("[EJM]: Job Queued email received, " + jobDetails);
}else if (resultState == JobState.ACTIVE) {
// nothing special thing to do, update the status change to rabbit mq at the end of this method.
- jobStatus.setJobState(JobState.QUEUED);
- jobStatus.setReason("Queued email received");
+ jobStatus.setJobState(JobState.ACTIVE);
+ jobStatus.setReason("Active email received");
log.info("[EJM]: Job Active email received, " + jobDetails);
}else if (resultState == JobState.FAILED) {
jobMonitorMap.remove(jobStatusResult.getJobId());
http://git-wip-us.apache.org/repos/asf/airavata/blob/1de22283/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
index ae3d73b..5030846 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
@@ -35,6 +35,7 @@ import org.apache.airavata.model.scheduling.ComputationalResourceSchedulingModel
import org.apache.airavata.model.status.*;
import org.apache.airavata.model.task.TaskModel;
import org.apache.airavata.registry.core.experiment.catalog.ExpCatResourceUtils;
+import org.apache.airavata.registry.core.experiment.catalog.ExperimentCatResource;
import org.apache.airavata.registry.core.experiment.catalog.ResourceType;
import org.apache.airavata.registry.core.experiment.catalog.resources.*;
import org.apache.airavata.registry.core.experiment.catalog.utils.ThriftDataModelConversion;
@@ -1175,7 +1176,23 @@ public class ExperimentRegistry {
List<JobResource> resources = processResource.getJobList();
for (JobResource jobResource : resources) {
JobModel jobModel = ThriftDataModelConversion.getJobModel(jobResource);
- jobs.add(jobModel);
+ List<ExperimentCatResource> jobStatuses = jobResource.get(ResourceType.JOB_STATUS);
+ JobStatusResource latestSR = null;
+ for (ExperimentCatResource jobStatuse : jobStatuses) {
+ JobStatusResource jobSR = (JobStatusResource) jobStatuse;
+ if (latestSR == null) {
+ latestSR = jobSR;
+ } else {
+ latestSR = (jobSR.getTimeOfStateChange().after(latestSR.getTimeOfStateChange()) ? jobSR :
+ latestSR);
+ }
+ }
+ if (latestSR != null) {
+ JobStatus jobStatus = new JobStatus(JobState.valueOf(latestSR.getState()));
+ jobStatus.setReason(latestSR.getReason());
+ jobModel.setJobStatus(jobStatus);
+ }
+ jobs.add(jobModel);
}
return jobs;
} else {
http://git-wip-us.apache.org/repos/asf/airavata/blob/1de22283/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/Utils.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/Utils.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/Utils.java
index d7def01..8fba449 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/Utils.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/Utils.java
@@ -648,6 +648,7 @@ public class Utils {
JobResource jobResource = new JobResource();
if (o != null){
jobResource.setJobId(o.getJobId());
+ jobResource.setProcessId(o.getProcessId());
jobResource.setTaskId(o.getTaskId());
jobResource.setCreationTime(o.getCreationTime());
jobResource.setJobDescription(o.getJobDescription());
@@ -662,7 +663,9 @@ public class Utils {
JobStatusResource jobStatusResource = new JobStatusResource();
if (o != null){
jobStatusResource.setJobId(o.getJobId());
- jobStatusResource.setState(o.getState());
+ jobStatusResource.setStatusId(o.getStatusId());
+ jobStatusResource.setProcessId(o.getProcessId());
+ jobStatusResource.setState(o.getState());
jobStatusResource.setTimeOfStateChange(o.getTimeOfStateChange());
jobStatusResource.setReason(o.getReason());
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/1de22283/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java
index e1ebdeb..0c954f7 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java
@@ -394,8 +394,9 @@ public class ThriftDataModelConversion {
public static JobModel getJobModel (JobResource jobResource) throws RegistryException {
JobModel model = new JobModel();
- model.setJobId(jobResource.getJobId());
- model.setTaskId(jobResource.getTaskId());
+ model.setJobId(jobResource.getJobId());
+ model.setProcessId(jobResource.getProcessId());
+ model.setTaskId(jobResource.getTaskId());
model.setJobDescription(jobResource.getJobDescription());
model.setCreationTime(jobResource.getCreationTime().getTime());
model.setComputeResourceConsumed(jobResource.getComputeResourceConsumed());