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
This commit is contained in:
Spaceman1984 2020-02-12 15:36:01 +02:00 committed by GitHub
parent 5ae65bfab0
commit a443f31b78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -49,6 +49,7 @@ import org.apache.cloudstack.framework.jobs.AsyncJobDispatcher;
import org.apache.cloudstack.framework.jobs.AsyncJobExecutionContext; import org.apache.cloudstack.framework.jobs.AsyncJobExecutionContext;
import org.apache.cloudstack.framework.jobs.AsyncJobManager; import org.apache.cloudstack.framework.jobs.AsyncJobManager;
import org.apache.cloudstack.framework.jobs.dao.AsyncJobDao; 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.AsyncJobJoinMapDao;
import org.apache.cloudstack.framework.jobs.dao.AsyncJobJournalDao; import org.apache.cloudstack.framework.jobs.dao.AsyncJobJournalDao;
import org.apache.cloudstack.framework.jobs.dao.SyncQueueItemDao; import org.apache.cloudstack.framework.jobs.dao.SyncQueueItemDao;
@ -131,6 +132,8 @@ public class AsyncJobManagerImpl extends ManagerBase implements AsyncJobManager,
@Inject @Inject
private VMInstanceDao _vmInstanceDao; private VMInstanceDao _vmInstanceDao;
@Inject @Inject
private VmWorkJobDao _vmWorkJobDao;
@Inject
private VolumeDetailsDao _volumeDetailsDao; private VolumeDetailsDao _volumeDetailsDao;
@Inject @Inject
private VolumeDao _volsDao; private VolumeDao _volsDao;
@ -898,6 +901,9 @@ public class AsyncJobManagerImpl extends ManagerBase implements AsyncJobManager,
Transaction.execute(new TransactionCallbackNoReturn() { Transaction.execute(new TransactionCallbackNoReturn() {
@Override @Override
public void doInTransactionWithoutResult(TransactionStatus status) { public void doInTransactionWithoutResult(TransactionStatus status) {
if ("VmWork".equals(job.getType())) {
_vmWorkJobDao.expunge(job.getId());
}
_jobDao.expunge(job.getId()); _jobDao.expunge(job.getId());
// purge corresponding sync queue item // purge corresponding sync queue item
_queueMgr.purgeAsyncJobQueueItemId(job.getId()); _queueMgr.purgeAsyncJobQueueItemId(job.getId());