Skip to content

Commit a22b045

Browse files
author
Daan Hoogland
committed
add secondary key to job
1 parent cf7141c commit a22b045

File tree

1 file changed

+55
-20
lines changed

1 file changed

+55
-20
lines changed

Diff for: engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java

+55-20
Original file line numberDiff line numberDiff line change
@@ -5618,41 +5618,76 @@ public Outcome<VirtualMachine> addVmToNetworkThroughJobQueue(
56185618

56195619
final List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
56205620
VirtualMachine.Type.Instance, vm.getId(),
5621-
VmWorkAddVmToNetwork.class.getName(), String.valueOf(network.getId()));
5621+
VmWorkAddVmToNetwork.class.getName(), network.getUuid());
56225622

56235623
VmWorkJobVO workJob = null;
56245624
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
56255625
if (s_logger.isTraceEnabled()) {
56265626
s_logger.trace(String.format("number of add nic jobs for vm %s are %d", vm, pendingWorkJobs.size()));
56275627
}
5628-
assert pendingWorkJobs.size() == 1;
5629-
workJob = pendingWorkJobs.get(0);
5628+
workJob = fetchOrCreateVmWorkJobToAddNetwokr(vm, network, requested, context, user, account, pendingWorkJobs);
56305629
} else {
56315630
if (s_logger.isTraceEnabled()) {
5632-
s_logger.trace(String.format("no add nic jobs for vm %s yet", vm));
5631+
s_logger.trace(String.format("no add-nic jobs for vm %s yet", vm));
56335632
}
56345633

5635-
workJob = new VmWorkJobVO(context.getContextId());
5634+
workJob = createVmWorkJobToAddNetwork(vm, network, requested, context, user, account);
5635+
}
5636+
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(workJob.getId());
56365637

5637-
workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
5638-
workJob.setCmd(VmWorkAddVmToNetwork.class.getName());
5638+
return new VmJobVirtualMachineOutcome(workJob, vm.getId());
5639+
}
56395640

5640-
workJob.setAccountId(account.getId());
5641-
workJob.setUserId(user.getId());
5642-
workJob.setVmType(VirtualMachine.Type.Instance);
5643-
workJob.setVmInstanceId(vm.getId());
5644-
workJob.setRelated(AsyncJobExecutionContext.getOriginJobId());
5641+
private VmWorkJobVO fetchOrCreateVmWorkJobToAddNetwokr(
5642+
VirtualMachine vm,
5643+
Network network,
5644+
NicProfile requested,
5645+
CallContext context,
5646+
User user,
5647+
Account account,
5648+
List<VmWorkJobVO> pendingWorkJobs) {
5649+
VmWorkJobVO workJob = null;
5650+
for (VmWorkJobVO job : pendingWorkJobs) {
5651+
if (network.getUuid().equals(job.getSecondaryKey())) {
5652+
if (s_logger.isTraceEnabled()) {
5653+
s_logger.trace(String.format("a similar job found for vm %s", vm));
5654+
}
5655+
workJob = job;
5656+
}
5657+
}
5658+
if (workJob == null) {
5659+
workJob = createVmWorkJobToAddNetwork(vm, network, requested, context, user, account);
5660+
}
5661+
return workJob;
5662+
}
56455663

5646-
// save work context info (there are some duplications)
5647-
final VmWorkAddVmToNetwork workInfo = new VmWorkAddVmToNetwork(user.getId(), account.getId(), vm.getId(),
5648-
VirtualMachineManagerImpl.VM_WORK_JOB_HANDLER, network.getId(), requested);
5649-
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
5664+
private VmWorkJobVO createVmWorkJobToAddNetwork(
5665+
VirtualMachine vm,
5666+
Network network,
5667+
NicProfile requested,
5668+
CallContext context,
5669+
User user,
5670+
Account account) {
5671+
VmWorkJobVO workJob;
5672+
workJob = new VmWorkJobVO(context.getContextId());
56505673

5651-
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
5652-
}
5653-
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(workJob.getId());
5674+
workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
5675+
workJob.setCmd(VmWorkAddVmToNetwork.class.getName());
56545676

5655-
return new VmJobVirtualMachineOutcome(workJob, vm.getId());
5677+
workJob.setAccountId(account.getId());
5678+
workJob.setUserId(user.getId());
5679+
workJob.setVmType(VirtualMachine.Type.Instance);
5680+
workJob.setVmInstanceId(vm.getId());
5681+
workJob.setRelated(AsyncJobExecutionContext.getOriginJobId());
5682+
workJob.setSecondaryKey(network.getUuid());
5683+
5684+
// save work context info (there are some duplications)
5685+
final VmWorkAddVmToNetwork workInfo = new VmWorkAddVmToNetwork(user.getId(), account.getId(), vm.getId(),
5686+
VirtualMachineManagerImpl.VM_WORK_JOB_HANDLER, network.getId(), requested);
5687+
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
5688+
5689+
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
5690+
return workJob;
56565691
}
56575692

56585693
public Outcome<VirtualMachine> removeNicFromVmThroughJobQueue(

0 commit comments

Comments
 (0)