Updated Branches: refs/heads/vmsync 56bc25535 -> c51fae0b6
Add async job discriminator to allow merging of HA/ItWork jobs Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c51fae0b Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c51fae0b Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c51fae0b Branch: refs/heads/vmsync Commit: c51fae0b6c7302bfd3d96cb138b16d6ae87a00f0 Parents: 56bc255 Author: Kelven Yang <[email protected]> Authored: Thu Apr 18 18:12:27 2013 -0700 Committer: Kelven Yang <[email protected]> Committed: Thu Apr 18 18:12:27 2013 -0700 ---------------------------------------------------------------------- api/src/com/cloud/async/AsyncJob.java | 19 +- api/src/com/cloud/async/SyncQueueItem.java | 19 ++- core/src/com/cloud/async/AsyncJobVO.java | 117 +++++----- core/src/com/cloud/async/SyncQueueItemVO.java | 1 + .../src/com/cloud/api/ApiAsyncJobDispatcher.java | 4 +- server/src/com/cloud/async/AsyncJobDispatcher.java | 2 +- .../com/cloud/async/AsyncJobExecutionContext.java | 10 +- server/src/com/cloud/async/AsyncJobMBeanImpl.java | 47 ++-- server/src/com/cloud/async/AsyncJobManager.java | 4 +- .../src/com/cloud/async/AsyncJobManagerImpl.java | 18 +- .../src/com/cloud/async/SyncQueueManagerImpl.java | 9 +- .../src/com/cloud/async/dao/AsyncJobDaoImpl.java | 5 - .../src/com/cloud/async/dao/SyncQueueDaoImpl.java | 20 +- .../com/cloud/async/dao/SyncQueueItemDaoImpl.java | 9 - .../async/executor/ExtractJobResultObject.java | 183 --------------- .../src/com/cloud/server/ManagementServerImpl.java | 2 +- .../src/com/cloud/storage/VolumeManagerImpl.java | 6 +- setup/db/db/schema-410to420.sql | 6 + utils/src/com/cloud/utils/EnumUtils.java | 13 + 19 files changed, 171 insertions(+), 323 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/api/src/com/cloud/async/AsyncJob.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/async/AsyncJob.java b/api/src/com/cloud/async/AsyncJob.java index faba92c..3edc0df 100644 --- a/api/src/com/cloud/async/AsyncJob.java +++ b/api/src/com/cloud/async/AsyncJob.java @@ -51,7 +51,13 @@ public interface AsyncJob extends Identity, InternalIdentity { AutoScaleVmGroup, GlobalLoadBalancerRule } - + + Long getParentId(); + + String getType(); + + String getDispatcher(); + long getUserId(); long getAccountId(); @@ -62,12 +68,6 @@ public interface AsyncJob extends Identity, InternalIdentity { String getCmdInfo(); - String getDispatcher(); - - int getCallbackType(); - - String getCallbackAddress(); - int getStatus(); int getProcessStatus(); @@ -77,8 +77,12 @@ public interface AsyncJob extends Identity, InternalIdentity { String getResult(); Long getInitMsid(); + void setInitMsid(Long msid); + Long getExecutingMsid(); + Long getCompleteMsid(); + void setCompleteMsid(Long msid); Date getCreated(); @@ -95,4 +99,5 @@ public interface AsyncJob extends Identity, InternalIdentity { boolean isFromPreviousSession(); SyncQueueItem getSyncSource(); + void setSyncSource(SyncQueueItem item); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/api/src/com/cloud/async/SyncQueueItem.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/async/SyncQueueItem.java b/api/src/com/cloud/async/SyncQueueItem.java index 9f9c379..b8232f4 100644 --- a/api/src/com/cloud/async/SyncQueueItem.java +++ b/api/src/com/cloud/async/SyncQueueItem.java @@ -16,11 +16,26 @@ // under the License. package com.cloud.async; - public interface SyncQueueItem { public final String AsyncJobContentType = "AsyncJob"; - String getContentType(); + /** + * @return queue item id + */ + long getId(); + /** + * @return queue id + */ + Long getQueueId(); + + /** + * @return subject object type pointed by the queue item + */ + String getContentType(); + + /** + * @return subject object id pointed by the queue item + */ Long getContentId(); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/core/src/com/cloud/async/AsyncJobVO.java ---------------------------------------------------------------------- diff --git a/core/src/com/cloud/async/AsyncJobVO.java b/core/src/com/cloud/async/AsyncJobVO.java index 83ddb0c..73d48cd 100644 --- a/core/src/com/cloud/async/AsyncJobVO.java +++ b/core/src/com/cloud/async/AsyncJobVO.java @@ -20,12 +20,16 @@ import java.util.Date; import java.util.UUID; import javax.persistence.Column; +import javax.persistence.DiscriminatorColumn; +import javax.persistence.DiscriminatorType; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @@ -35,15 +39,24 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name="async_job") +@Inheritance(strategy=InheritanceType.JOINED) +@DiscriminatorColumn(name="job_type", discriminatorType=DiscriminatorType.STRING, length=32) public class AsyncJobVO implements AsyncJob { - public static final int CALLBACK_POLLING = 0; - public static final int CALLBACK_EMAIL = 1; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") private Long id = null; + + @Column(name="parent_id") + private Long parentId; + @Column(name="job_type", length=32) + protected String type; + + @Column(name="job_dispatcher", length=64) + protected String dispatcher; + @Column(name="user_id") private long userId; @@ -56,18 +69,9 @@ public class AsyncJobVO implements AsyncJob { @Column(name="job_cmd_ver") private int cmdVersion; - @Column(name="job_dispatcher") - private String jobDispatcher; - @Column(name="job_cmd_info", length=65535) private String cmdInfo; - @Column(name="callback_type") - private int callbackType; - - @Column(name="callback_address") - private String callbackAddress; - @Column(name="job_status") private int status; @@ -93,6 +97,9 @@ public class AsyncJobVO implements AsyncJob { @Column(name="job_complete_msid") private Long completeMsid; + @Column(name="job_executing_msid") + private Long executingMsid; + @Column(name=GenericDao.CREATED_COLUMN) private Date created; @@ -111,7 +118,7 @@ public class AsyncJobVO implements AsyncJob { private String uuid; @Transient - private SyncQueueItemVO syncSource = null; + private SyncQueueItem syncSource = null; @Transient private boolean fromPreviousSession = false; @@ -125,21 +132,13 @@ public class AsyncJobVO implements AsyncJob { this.accountId = accountId; this.cmd = cmd; this.cmdInfo = cmdInfo; - this.callbackType = CALLBACK_POLLING; this.uuid = UUID.randomUUID().toString(); this.instanceId = instanceId; + this.instanceType = instanceType; + + this.type ="AsyncJobVO"; } - public AsyncJobVO(long userId, long accountId, String cmd, String cmdInfo, - int callbackType, String callbackAddress, Long instanceId, Type instanceType) { - - this(userId, accountId, cmd, cmdInfo, instanceId, instanceType); - this.callbackType = callbackType; - this.callbackAddress = callbackAddress; - this.uuid = UUID.randomUUID().toString(); - } - - @Override public long getId() { return id; @@ -148,6 +147,33 @@ public class AsyncJobVO implements AsyncJob { public void setId(Long id) { this.id = id; } + + @Override + public Long getParentId() { + return this.parentId; + } + + public void setParentId(Long parentId) { + this.parentId = parentId; + } + + @Override + public String getType() { + return this.type; + } + + public void setType(String type) { + this.type = type; + } + + @Override + public String getDispatcher() { + return this.dispatcher; + } + + public void setDispatcher(String dispatcher) { + this.dispatcher = dispatcher; + } @Override public long getUserId() { @@ -195,33 +221,6 @@ public class AsyncJobVO implements AsyncJob { } @Override - public String getDispatcher() { - return this.jobDispatcher; - } - - public void setDispatcher(String dispatcher) { - this.jobDispatcher = dispatcher; - } - - @Override - public int getCallbackType() { - return callbackType; - } - - public void setCallbackType(int callbackType) { - this.callbackType = callbackType; - } - - @Override - public String getCallbackAddress() { - return callbackAddress; - } - - public void setCallbackAddress(String callbackAddress) { - this.callbackAddress = callbackAddress; - } - - @Override public int getStatus() { return status; } @@ -262,15 +261,26 @@ public class AsyncJobVO implements AsyncJob { return initMsid; } + @Override public void setInitMsid(Long initMsid) { this.initMsid = initMsid; } + + @Override + public Long getExecutingMsid() { + return this.executingMsid; + } + + public void setExecutingMsid(Long executingMsid) { + this.executingMsid = executingMsid; + } @Override public Long getCompleteMsid() { return completeMsid; } + @Override public void setCompleteMsid(Long completeMsid) { this.completeMsid = completeMsid; } @@ -330,11 +340,12 @@ public class AsyncJobVO implements AsyncJob { } @Override - public SyncQueueItemVO getSyncSource() { + public SyncQueueItem getSyncSource() { return syncSource; } - public void setSyncSource(SyncQueueItemVO syncSource) { + @Override + public void setSyncSource(SyncQueueItem syncSource) { this.syncSource = syncSource; } @@ -367,8 +378,6 @@ public class AsyncJobVO implements AsyncJob { sb.append(", cmd: ").append(getCmd()); sb.append(", cmdInfo: ").append(getCmdInfo()); sb.append(", cmdVersion: ").append(getCmdVersion()); - sb.append(", callbackType: ").append(getCallbackType()); - sb.append(", callbackAddress: ").append(getCallbackAddress()); sb.append(", status: ").append(getStatus()); sb.append(", processStatus: ").append(getProcessStatus()); sb.append(", resultCode: ").append(getResultCode()); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/core/src/com/cloud/async/SyncQueueItemVO.java ---------------------------------------------------------------------- diff --git a/core/src/com/cloud/async/SyncQueueItemVO.java b/core/src/com/cloud/async/SyncQueueItemVO.java index b0546a7..21fbb91 100644 --- a/core/src/com/cloud/async/SyncQueueItemVO.java +++ b/core/src/com/cloud/async/SyncQueueItemVO.java @@ -68,6 +68,7 @@ public class SyncQueueItemVO implements SyncQueueItem, InternalIdentity { this.id = id; } + @Override public Long getQueueId() { return queueId; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/server/src/com/cloud/api/ApiAsyncJobDispatcher.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/ApiAsyncJobDispatcher.java b/server/src/com/cloud/api/ApiAsyncJobDispatcher.java index 98a7747..9c87378 100644 --- a/server/src/com/cloud/api/ApiAsyncJobDispatcher.java +++ b/server/src/com/cloud/api/ApiAsyncJobDispatcher.java @@ -27,10 +27,10 @@ import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ExceptionResponse; import org.apache.log4j.Logger; +import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJobDispatcher; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobResult; -import com.cloud.async.AsyncJobVO; import com.cloud.async.SyncQueueManager; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -53,7 +53,7 @@ public class ApiAsyncJobDispatcher extends AdapterBase implements AsyncJobDispat } @Override - public void RunJob(AsyncJobVO job) { + public void RunJob(AsyncJob job) { BaseAsyncCmd cmdObj = null; try { Class<?> cmdClass = Class.forName(job.getCmd()); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/server/src/com/cloud/async/AsyncJobDispatcher.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/async/AsyncJobDispatcher.java b/server/src/com/cloud/async/AsyncJobDispatcher.java index 80e6254..44b8603 100644 --- a/server/src/com/cloud/async/AsyncJobDispatcher.java +++ b/server/src/com/cloud/async/AsyncJobDispatcher.java @@ -19,5 +19,5 @@ package com.cloud.async; import com.cloud.utils.component.Adapter; public interface AsyncJobDispatcher extends Adapter { - void RunJob(AsyncJobVO job); + void RunJob(AsyncJob job); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/server/src/com/cloud/async/AsyncJobExecutionContext.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/async/AsyncJobExecutionContext.java b/server/src/com/cloud/async/AsyncJobExecutionContext.java index a09604b..f71a391 100644 --- a/server/src/com/cloud/async/AsyncJobExecutionContext.java +++ b/server/src/com/cloud/async/AsyncJobExecutionContext.java @@ -17,26 +17,26 @@ package com.cloud.async; public class AsyncJobExecutionContext { - private AsyncJobVO _job; + private AsyncJob _job; private static ThreadLocal<AsyncJobExecutionContext> s_currentExectionContext = new ThreadLocal<AsyncJobExecutionContext>(); public AsyncJobExecutionContext() { } - public AsyncJobExecutionContext(AsyncJobVO job) { + public AsyncJobExecutionContext(AsyncJob job) { _job = job; } - public SyncQueueItemVO getSyncSource() { + public SyncQueueItem getSyncSource() { return _job.getSyncSource(); } - public AsyncJobVO getJob() { + public AsyncJob getJob() { return _job; } - public void setJob(AsyncJobVO job) { + public void setJob(AsyncJob job) { _job = job; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/server/src/com/cloud/async/AsyncJobMBeanImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/async/AsyncJobMBeanImpl.java b/server/src/com/cloud/async/AsyncJobMBeanImpl.java index 282dace..fa579f3 100644 --- a/server/src/com/cloud/async/AsyncJobMBeanImpl.java +++ b/server/src/com/cloud/async/AsyncJobMBeanImpl.java @@ -24,32 +24,32 @@ import javax.management.StandardMBean; import com.cloud.utils.DateUtil; public class AsyncJobMBeanImpl extends StandardMBean implements AsyncJobMBean { - private AsyncJobVO _jobVo; + private AsyncJob _job; - public AsyncJobMBeanImpl(AsyncJobVO jobVo) { + public AsyncJobMBeanImpl(AsyncJob job) { super(AsyncJobMBean.class, false); - _jobVo = jobVo; + _job = job; } public long getAccountId() { - return _jobVo.getAccountId(); + return _job.getAccountId(); } public long getUserId() { - return _jobVo.getUserId(); + return _job.getUserId(); } public String getCmd() { - return _jobVo.getCmd(); + return _job.getCmd(); } public String getCmdInfo() { - return _jobVo.getCmdInfo(); + return _job.getCmdInfo(); } public String getStatus() { - int jobStatus = _jobVo.getStatus(); + int jobStatus = _job.getStatus(); switch(jobStatus) { case AsyncJobResult.STATUS_SUCCEEDED : return "Completed"; @@ -65,52 +65,52 @@ public class AsyncJobMBeanImpl extends StandardMBean implements AsyncJobMBean { } public int getProcessStatus() { - return _jobVo.getProcessStatus(); + return _job.getProcessStatus(); } public int getResultCode() { - return _jobVo.getResultCode(); + return _job.getResultCode(); } public String getResult() { - return _jobVo.getResult(); + return _job.getResult(); } public String getInstanceType() { - if(_jobVo.getInstanceType() != null) - return _jobVo.getInstanceType().toString(); + if(_job.getInstanceType() != null) + return _job.getInstanceType().toString(); return "N/A"; } public String getInstanceId() { - if(_jobVo.getInstanceId() != null) - return String.valueOf(_jobVo.getInstanceId()); + if(_job.getInstanceId() != null) + return String.valueOf(_job.getInstanceId()); return "N/A"; } public String getInitMsid() { - if(_jobVo.getInitMsid() != null) { - return String.valueOf(_jobVo.getInitMsid()); + if(_job.getInitMsid() != null) { + return String.valueOf(_job.getInitMsid()); } return "N/A"; } public String getCreateTime() { - Date time = _jobVo.getCreated(); + Date time = _job.getCreated(); if(time != null) return DateUtil.getDateDisplayString(TimeZone.getDefault(), time); return "N/A"; } public String getLastUpdateTime() { - Date time = _jobVo.getLastUpdated(); + Date time = _job.getLastUpdated(); if(time != null) return DateUtil.getDateDisplayString(TimeZone.getDefault(), time); return "N/A"; } public String getLastPollTime() { - Date time = _jobVo.getLastPolled(); + Date time = _job.getLastPolled(); if(time != null) return DateUtil.getDateDisplayString(TimeZone.getDefault(), time); @@ -118,7 +118,7 @@ public class AsyncJobMBeanImpl extends StandardMBean implements AsyncJobMBean { } public String getSyncQueueId() { - SyncQueueItemVO item = _jobVo.getSyncSource(); + SyncQueueItem item = _job.getSyncSource(); if(item != null && item.getQueueId() != null) { return String.valueOf(item.getQueueId()); } @@ -126,7 +126,7 @@ public class AsyncJobMBeanImpl extends StandardMBean implements AsyncJobMBean { } public String getSyncQueueContentType() { - SyncQueueItemVO item = _jobVo.getSyncSource(); + SyncQueueItem item = _job.getSyncSource(); if(item != null) { return item.getContentType(); } @@ -134,11 +134,10 @@ public class AsyncJobMBeanImpl extends StandardMBean implements AsyncJobMBean { } public String getSyncQueueContentId() { - SyncQueueItemVO item = _jobVo.getSyncSource(); + SyncQueueItem item = _job.getSyncSource(); if(item != null && item.getContentId() != null) { return String.valueOf(item.getContentId()); } return "N/A"; } - } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/server/src/com/cloud/async/AsyncJobManager.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/async/AsyncJobManager.java b/server/src/com/cloud/async/AsyncJobManager.java index f7ffc5a..95f7157 100644 --- a/server/src/com/cloud/async/AsyncJobManager.java +++ b/server/src/com/cloud/async/AsyncJobManager.java @@ -28,8 +28,8 @@ public interface AsyncJobManager extends Manager { public List<? extends AsyncJob> findInstancePendingAsyncJobs(AsyncJob.Type instanceType, Long accountId); - public long submitAsyncJob(AsyncJobVO job); - public long submitAsyncJob(AsyncJobVO job, boolean scheduleJobExecutionInContext); + public long submitAsyncJob(AsyncJob job); + public long submitAsyncJob(AsyncJob job, boolean scheduleJobExecutionInContext); public AsyncJobResult queryAsyncJobResult(long jobId); public void completeAsyncJob(long jobId, int jobStatus, int resultCode, Object resultObject); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/server/src/com/cloud/async/AsyncJobManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/async/AsyncJobManagerImpl.java b/server/src/com/cloud/async/AsyncJobManagerImpl.java index 586f40e..d2f4912 100644 --- a/server/src/com/cloud/async/AsyncJobManagerImpl.java +++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java @@ -59,6 +59,8 @@ import com.cloud.utils.PropertiesUtil; import com.cloud.utils.component.ManagerBase; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; +import com.cloud.utils.db.GenericDao; +import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GlobalLock; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; @@ -114,17 +116,21 @@ public class AsyncJobManagerImpl extends ManagerBase implements AsyncJobManager, } @Override - public long submitAsyncJob(AsyncJobVO job) { + public long submitAsyncJob(AsyncJob job) { return submitAsyncJob(job, false); } - @Override @DB - public long submitAsyncJob(AsyncJobVO job, boolean scheduleJobExecutionInContext) { + @SuppressWarnings("unchecked") + @Override @DB + public long submitAsyncJob(AsyncJob job, boolean scheduleJobExecutionInContext) { Transaction txt = Transaction.currentTxn(); try { + @SuppressWarnings("rawtypes") + GenericDao dao = GenericDaoBase.getDao(job.getClass()); + txt.start(); job.setInitMsid(getMsid()); - _jobDao.persist(job); + dao.persist(job); txt.commit(); // no sync source originally @@ -353,7 +359,7 @@ public class AsyncJobManagerImpl extends ManagerBase implements AsyncJobManager, scheduleExecution(job, false); } - private void scheduleExecution(final AsyncJobVO job, boolean executeInContext) { + private void scheduleExecution(final AsyncJob job, boolean executeInContext) { Runnable runnable = getExecutorRunnable(this, job); if (executeInContext) { runnable.run(); @@ -375,7 +381,7 @@ public class AsyncJobManagerImpl extends ManagerBase implements AsyncJobManager, return null; } - private Runnable getExecutorRunnable(final AsyncJobManager mgr, final AsyncJobVO job) { + private Runnable getExecutorRunnable(final AsyncJobManager mgr, final AsyncJob job) { return new Runnable() { @Override public void run() { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/server/src/com/cloud/async/SyncQueueManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/async/SyncQueueManagerImpl.java b/server/src/com/cloud/async/SyncQueueManagerImpl.java index bde77a0..eaa97af 100644 --- a/server/src/com/cloud/async/SyncQueueManagerImpl.java +++ b/server/src/com/cloud/async/SyncQueueManagerImpl.java @@ -20,11 +20,8 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import javax.ejb.Local; import javax.inject.Inject; - import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; import com.cloud.async.dao.SyncQueueDao; import com.cloud.async.dao.SyncQueueItemDao; @@ -34,8 +31,6 @@ import com.cloud.utils.db.DB; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; -@Component -@Local(value={SyncQueueManager.class}) public class SyncQueueManagerImpl extends ManagerBase implements SyncQueueManager { public static final Logger s_logger = Logger.getLogger(SyncQueueManagerImpl.class.getName()); @@ -185,10 +180,10 @@ public class SyncQueueManagerImpl extends ManagerBase implements SyncQueueManage _syncQueueItemDao.expunge(itemVO.getId()); - //if item is active, reset queue information + // if item is active, reset queue information if (itemVO.getLastProcessMsid() != null) { queueVO.setLastUpdated(DateUtil.currentGMTTime()); - //decrement the count + // decrement the count assert (queueVO.getQueueSize() > 0) : "Count reduce happens when it's already <= 0!"; queueVO.setQueueSize(queueVO.getQueueSize() - 1); _syncQueueDao.update(queueVO.getId(), queueVO); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/server/src/com/cloud/async/dao/AsyncJobDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/async/dao/AsyncJobDaoImpl.java b/server/src/com/cloud/async/dao/AsyncJobDaoImpl.java index 4793a6e..0eee76b 100644 --- a/server/src/com/cloud/async/dao/AsyncJobDaoImpl.java +++ b/server/src/com/cloud/async/dao/AsyncJobDaoImpl.java @@ -21,10 +21,7 @@ import java.sql.SQLException; import java.util.Date; import java.util.List; -import javax.ejb.Local; - import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJobResult; @@ -36,8 +33,6 @@ import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; -@Component -@Local(value = { AsyncJobDao.class }) public class AsyncJobDaoImpl extends GenericDaoBase<AsyncJobVO, Long> implements AsyncJobDao { private static final Logger s_logger = Logger.getLogger(AsyncJobDaoImpl.class.getName()); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/server/src/com/cloud/async/dao/SyncQueueDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/async/dao/SyncQueueDaoImpl.java b/server/src/com/cloud/async/dao/SyncQueueDaoImpl.java index 7b4c182..a1dc90a 100644 --- a/server/src/com/cloud/async/dao/SyncQueueDaoImpl.java +++ b/server/src/com/cloud/async/dao/SyncQueueDaoImpl.java @@ -22,10 +22,7 @@ import java.sql.SQLException; import java.util.Date; import java.util.TimeZone; -import javax.ejb.Local; - import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; import com.cloud.async.SyncQueueVO; import com.cloud.utils.DateUtil; @@ -34,12 +31,18 @@ import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; -@Component -@Local(value = { SyncQueueDao.class }) public class SyncQueueDaoImpl extends GenericDaoBase<SyncQueueVO, Long> implements SyncQueueDao { private static final Logger s_logger = Logger.getLogger(SyncQueueDaoImpl.class.getName()); SearchBuilder<SyncQueueVO> TypeIdSearch = createSearchBuilder(); + + public SyncQueueDaoImpl() { + super(); + TypeIdSearch = createSearchBuilder(); + TypeIdSearch.and("syncObjType", TypeIdSearch.entity().getSyncObjType(), SearchCriteria.Op.EQ); + TypeIdSearch.and("syncObjId", TypeIdSearch.entity().getSyncObjId(), SearchCriteria.Op.EQ); + TypeIdSearch.done(); + } @Override public void ensureQueue(String syncObjType, long syncObjId) { @@ -71,11 +74,4 @@ public class SyncQueueDaoImpl extends GenericDaoBase<SyncQueueVO, Long> implemen return findOneBy(sc); } - protected SyncQueueDaoImpl() { - super(); - TypeIdSearch = createSearchBuilder(); - TypeIdSearch.and("syncObjType", TypeIdSearch.entity().getSyncObjType(), SearchCriteria.Op.EQ); - TypeIdSearch.and("syncObjId", TypeIdSearch.entity().getSyncObjId(), SearchCriteria.Op.EQ); - TypeIdSearch.done(); - } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/server/src/com/cloud/async/dao/SyncQueueItemDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/async/dao/SyncQueueItemDaoImpl.java b/server/src/com/cloud/async/dao/SyncQueueItemDaoImpl.java index d2d2929..829b3bb 100644 --- a/server/src/com/cloud/async/dao/SyncQueueItemDaoImpl.java +++ b/server/src/com/cloud/async/dao/SyncQueueItemDaoImpl.java @@ -25,11 +25,7 @@ import java.util.Date; import java.util.List; import java.util.TimeZone; -import javax.ejb.Local; -import javax.inject.Inject; - import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; import com.cloud.async.SyncQueueItemVO; import com.cloud.utils.DateUtil; @@ -42,8 +38,6 @@ import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.db.Transaction; -@Component -@Local(value = { SyncQueueItemDao.class }) @DB public class SyncQueueItemDaoImpl extends GenericDaoBase<SyncQueueItemVO, Long> implements SyncQueueItemDao { private static final Logger s_logger = Logger.getLogger(SyncQueueItemDaoImpl.class); @@ -57,7 +51,6 @@ public class SyncQueueItemDaoImpl extends GenericDaoBase<SyncQueueItemVO, Long> queueIdSearch.selectField(queueIdSearch.entity().getId()); queueIdSearch.done(); } - @Override public SyncQueueItemVO getNextQueueItem(long queueId) { @@ -128,7 +121,6 @@ public class SyncQueueItemDaoImpl extends GenericDaoBase<SyncQueueItemVO, Long> return lockRows(sc, filter, true); return listBy(sc, filter); } - @Override public List<SyncQueueItemVO> getBlockedQueueItems(long thresholdMs, boolean exclusive) { @@ -150,7 +142,6 @@ public class SyncQueueItemDaoImpl extends GenericDaoBase<SyncQueueItemVO, Long> return listBy(sc, null); } - @Override public Long getQueueItemIdByContentIdAndType(long contentId, String contentType) { SearchCriteria<Long> sc = queueIdSearch.create(); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/server/src/com/cloud/async/executor/ExtractJobResultObject.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/async/executor/ExtractJobResultObject.java b/server/src/com/cloud/async/executor/ExtractJobResultObject.java deleted file mode 100644 index 772f074..0000000 --- a/server/src/com/cloud/async/executor/ExtractJobResultObject.java +++ /dev/null @@ -1,183 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.async.executor; - -import java.util.Date; - -import com.cloud.async.AsyncInstanceCreateStatus; -import com.cloud.serializer.Param; -import com.cloud.storage.Volume.Type; -import com.cloud.storage.upload.UploadState; - -public class ExtractJobResultObject { - - public ExtractJobResultObject(Long accountId, String typeName, String currState, int uploadPercent, Long uploadId){ - this.accountId = accountId; - this.name = typeName; - this.state = currState; - this.id = uploadId; - this.uploadPercent = uploadPercent; - } - - public ExtractJobResultObject(Long accountId, String typeName, String currState, Long uploadId, String url){ - this.accountId = accountId; - this.name = typeName; - this.state = currState; - this.id = uploadId; - this.url = url; - } - - public ExtractJobResultObject(){ - } - - @Param(name="id") - private long id; - - @Param(name="name") - private String name; - - @Param(name="uploadPercentage") - private int uploadPercent; - - @Param(name="uploadStatus") - private String uploadStatus; - - @Param(name="accountid") - long accountId; - - @Param(name="result_string") - String result_string; - - @Param(name="created") - private Date createdDate; - - @Param(name="state") - private String state; - - @Param(name="storagetype") - String storageType; - - @Param(name="storage") - private String storage; - - @Param(name="zoneid") - private Long zoneId; - - @Param(name="zonename") - private String zoneName; - - @Param(name="url") - private String url; - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public int getUploadPercent() { - return uploadPercent; - } - - public void setUploadPercent(int i) { - this.uploadPercent = i; - } - - public String getUploadStatus() { - return uploadStatus; - } - - public void setUploadStatus(String uploadStatus) { - this.uploadStatus = uploadStatus; - } - - public String getResult_string() { - return result_string; - } - - public void setResult_string(String resultString) { - result_string = resultString; - } - - - public Long getZoneId() { - return zoneId; - } - - public void setZoneId(Long zoneId) { - this.zoneId = zoneId; - } - - public String getZoneName() { - return zoneName; - } - - public void setZoneName(String zoneName) { - this.zoneName = zoneName; - } - - public String getStorage() { - return storage; - } - - public void setStorage(String storage) { - this.storage = storage; - } - - public void setId(long id) { - this.id = id; - } - - public long getId() { - return id; - } - - public void setName(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public void setCreatedDate(Date createdDate) { - this.createdDate = createdDate; - } - - public Date getCreatedDate() { - return createdDate; - } - - public void setState(String status) { - this.state = status; - } - - public String getState() { - return state; - } - - public void setStorageType (String storageType) { - this.storageType = storageType; - } - - public String getStorageType() { - return storageType; - } - -} http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/server/src/com/cloud/server/ManagementServerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index f030ac6..163bbca 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -2732,7 +2732,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe Long volumeId = cmd.getId(); String url = cmd.getUrl(); Long zoneId = cmd.getZoneId(); - AsyncJobVO job = null; // FIXME: cmd.getJob(); + AsyncJob job = null; // FIXME: cmd.getJob(); String mode = cmd.getMode(); Account account = UserContext.current().getCaller(); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/server/src/com/cloud/storage/VolumeManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/storage/VolumeManagerImpl.java b/server/src/com/cloud/storage/VolumeManagerImpl.java index 24d568b..5160c26 100644 --- a/server/src/com/cloud/storage/VolumeManagerImpl.java +++ b/server/src/com/cloud/storage/VolumeManagerImpl.java @@ -71,8 +71,8 @@ import com.cloud.agent.api.AttachVolumeCommand; import com.cloud.agent.api.to.VolumeTO; import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; +import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJobManager; -import com.cloud.async.AsyncJobVO; import com.cloud.async.AsyncJobExecutionContext; import com.cloud.capacity.CapacityManager; import com.cloud.capacity.dao.CapacityDao; @@ -1756,7 +1756,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager { AsyncJobExecutionContext asyncExecutionContext = AsyncJobExecutionContext.getCurrentExecutionContext(); if (asyncExecutionContext != null) { - AsyncJobVO job = asyncExecutionContext.getJob(); + AsyncJob job = asyncExecutionContext.getJob(); if (s_logger.isInfoEnabled()) { s_logger.info("Trying to attaching volume " + volumeId @@ -1838,7 +1838,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager { AsyncJobExecutionContext asyncExecutionContext = AsyncJobExecutionContext.getCurrentExecutionContext(); if (asyncExecutionContext != null) { - AsyncJobVO job = asyncExecutionContext.getJob(); + AsyncJob job = asyncExecutionContext.getJob(); if (s_logger.isInfoEnabled()) { s_logger.info("Trying to attaching volume " + volumeId http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/setup/db/db/schema-410to420.sql ---------------------------------------------------------------------- diff --git a/setup/db/db/schema-410to420.sql b/setup/db/db/schema-410to420.sql index c4e91eb..ea31b78 100644 --- a/setup/db/db/schema-410to420.sql +++ b/setup/db/db/schema-410to420.sql @@ -408,7 +408,13 @@ INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, ALTER TABLE `cloud`.`async_job` DROP COLUMN `session_key`; ALTER TABLE `cloud`.`async_job` DROP COLUMN `job_cmd_originator`; +ALTER TABLE `cloud`.`async_job` DROP COLUMN `callback_type`; +ALTER TABLE `cloud`.`async_job` DROP COLUMN `callback_address`; + +ALTER TABLE `cloud`.`async_job` ADD COLUMN `parent_id` bigint; +ALTER TABLE `cloud`.`async_job` ADD COLUMN `job_type` VARCHAR(32); ALTER TABLE `cloud`.`async_job` ADD COLUMN `job_dispatcher` VARCHAR(64); +ALTER TABLE `cloud`.`async_job` ADD COLUMN `job_executing_msid` bigint; ALTER TABLE `cloud`.`vm_instance` ADD COLUMN `last_event` VARCHAR(64) DEFAULT 'OperationNop'; ALTER TABLE `cloud`.`vm_instance` ADD COLUMN `last_event_args` VARCHAR(256); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c51fae0b/utils/src/com/cloud/utils/EnumUtils.java ---------------------------------------------------------------------- diff --git a/utils/src/com/cloud/utils/EnumUtils.java b/utils/src/com/cloud/utils/EnumUtils.java index 807964b..ecde7e7 100644 --- a/utils/src/com/cloud/utils/EnumUtils.java +++ b/utils/src/com/cloud/utils/EnumUtils.java @@ -26,4 +26,17 @@ public class EnumUtils { b.append("]"); return b.toString(); } + + public static <T extends Enum<T>> T fromString(Class<T> clz, String value, T defaultVal) { + assert(clz != null); + + if(value != null) { + try { + return Enum.valueOf(clz, value.trim()); + } catch(IllegalArgumentException ex) { + assert(false); + } + } + return defaultVal; + } }
