From 2a5bf65c783fe9770a43727cfff695422c4f873d Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Tue, 27 May 2014 11:54:34 -0600 Subject: [PATCH] CLOUDSTACK-6785: Allow async jobs to supply an injectedjobid --- api/src/org/apache/cloudstack/api/BaseAsyncCmd.java | 7 +++++++ .../apache/cloudstack/framework/jobs/impl/AsyncJobVO.java | 4 ++-- server/src/com/cloud/api/ApiServer.java | 3 ++- .../network/router/VirtualNetworkApplianceManagerImpl.java | 2 +- .../com/cloud/storage/snapshot/SnapshotSchedulerImpl.java | 2 +- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java index 6b83d39dc9e..1b2415dfb4e 100644 --- a/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java @@ -36,6 +36,13 @@ public abstract class BaseAsyncCmd extends BaseCmd { @Parameter(name = "starteventid", type = CommandType.LONG) private Long startEventId; + @Parameter(name= "injectedjobid", type = CommandType.STRING) + private String injectedJobId; + + public String getInjectedJobId() { + return this.injectedJobId; + } + /** * For proper tracking of async commands through the system, events must be generated when the command is * scheduled, started, and completed. Commands should specify the type of event so that when the scheduled, diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java b/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java index d1ee2df7598..0ca9ed51254 100644 --- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java +++ b/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java @@ -136,12 +136,12 @@ public class AsyncJobVO implements AsyncJob, JobInfo { status = Status.IN_PROGRESS; } - public AsyncJobVO(String related, long userId, long accountId, String cmd, String cmdInfo, Long instanceId, String instanceType) { + public AsyncJobVO(String related, long userId, long accountId, String cmd, String cmdInfo, Long instanceId, String instanceType, String injectedUuid) { this.userId = userId; this.accountId = accountId; this.cmd = cmd; this.cmdInfo = cmdInfo; - uuid = UUID.randomUUID().toString(); + uuid = ( injectedUuid == null ? UUID.randomUUID().toString() : injectedUuid ); this.related = related; this.instanceId = instanceId; this.instanceType = instanceType; diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 0b24087daa0..8c0b81fdb60 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -661,7 +661,8 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer Long instanceId = (objectId == null) ? asyncCmd.getInstanceId() : objectId; AsyncJobVO job = new AsyncJobVO("", callerUserId, caller.getId(), cmdObj.getClass().getName(), ApiGsonHelper.getBuilder().create().toJson(params), instanceId, - asyncCmd.getInstanceType() != null ? asyncCmd.getInstanceType().toString() : null); + asyncCmd.getInstanceType() != null ? asyncCmd.getInstanceType().toString() : null, + asyncCmd.getInjectedJobId()); job.setDispatcher(_asyncDispatcher.getName()); final long jobId = _asyncMgr.submitAsyncJob(job); diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 98db77837bc..7991d7e63b2 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -4360,7 +4360,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V params.put("ctxStartEventId", "1"); AsyncJobVO job = new AsyncJobVO("", User.UID_SYSTEM, router.getAccountId(), RebootRouterCmd.class.getName(), ApiGsonHelper.getBuilder().create().toJson(params), router.getId(), - cmd.getInstanceType() != null ? cmd.getInstanceType().toString() : null); + cmd.getInstanceType() != null ? cmd.getInstanceType().toString() : null, null); job.setDispatcher(_asyncDispatcher.getName()); long jobId = _asyncMgr.submitAsyncJob(job); jobIds.add(jobId); diff --git a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java index 447697f1005..3de1ed007b8 100644 --- a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java @@ -264,7 +264,7 @@ public class SnapshotSchedulerImpl extends ManagerBase implements SnapshotSchedu AsyncJobVO job = new AsyncJobVO("", User.UID_SYSTEM, volume.getAccountId(), CreateSnapshotCmd.class.getName(), ApiGsonHelper.getBuilder().create().toJson(params), cmd.getEntityId(), - cmd.getInstanceType() != null ? cmd.getInstanceType().toString() : null); + cmd.getInstanceType() != null ? cmd.getInstanceType().toString() : null, null); job.setDispatcher(_asyncDispatcher.getName()); final long jobId = _asyncMgr.submitAsyncJob(job);