From a443f31b782674ea3e46b0217ecc97f781297ff5 Mon Sep 17 00:00:00 2001 From: Spaceman1984 <49917670+Spaceman1984@users.noreply.github.com> Date: Wed, 12 Feb 2020 15:36:01 +0200 Subject: [PATCH] jobs: fixed duplicate id error when creating VM work jobs (#3871) This PR removes related VMWorkjob records when the async_job table is cleaned out. Fixes: #3829 --- .../cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java index 378e2f5bed9..6126b50101d 100644 --- a/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java +++ b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java @@ -49,6 +49,7 @@ import org.apache.cloudstack.framework.jobs.AsyncJobDispatcher; import org.apache.cloudstack.framework.jobs.AsyncJobExecutionContext; import org.apache.cloudstack.framework.jobs.AsyncJobManager; import org.apache.cloudstack.framework.jobs.dao.AsyncJobDao; +import org.apache.cloudstack.framework.jobs.dao.VmWorkJobDao; import org.apache.cloudstack.framework.jobs.dao.AsyncJobJoinMapDao; import org.apache.cloudstack.framework.jobs.dao.AsyncJobJournalDao; import org.apache.cloudstack.framework.jobs.dao.SyncQueueItemDao; @@ -131,6 +132,8 @@ public class AsyncJobManagerImpl extends ManagerBase implements AsyncJobManager, @Inject private VMInstanceDao _vmInstanceDao; @Inject + private VmWorkJobDao _vmWorkJobDao; + @Inject private VolumeDetailsDao _volumeDetailsDao; @Inject private VolumeDao _volsDao; @@ -898,6 +901,9 @@ public class AsyncJobManagerImpl extends ManagerBase implements AsyncJobManager, Transaction.execute(new TransactionCallbackNoReturn() { @Override public void doInTransactionWithoutResult(TransactionStatus status) { + if ("VmWork".equals(job.getType())) { + _vmWorkJobDao.expunge(job.getId()); + } _jobDao.expunge(job.getId()); // purge corresponding sync queue item _queueMgr.purgeAsyncJobQueueItemId(job.getId());