mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-669: put system vm work under new vmsync model
This commit is contained in:
parent
96eeceba8b
commit
aa72b76aec
@ -20,11 +20,16 @@
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xmlns:aop="http://www.springframework.org/schema/aop"
|
||||
xmlns:util="http://www.springframework.org/schema/util"
|
||||
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
|
||||
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
|
||||
http://www.springframework.org/schema/aop
|
||||
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
|
||||
http://www.springframework.org/schema/context
|
||||
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
|
||||
http://www.springframework.org/schema/context/spring-context-3.0.xsd
|
||||
http://www.springframework.org/schema/util
|
||||
http://www.springframework.org/schema/util/spring-util-3.0.xsd"
|
||||
>
|
||||
|
||||
<bean id="clusterBasedAgentLoadBalancerPlanner"
|
||||
@ -68,5 +73,10 @@
|
||||
<bean id="virtualMachineEntityImpl" class="org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl" />
|
||||
|
||||
<bean id="virtualMachinePowerStateSyncImpl" class="com.cloud.vm.VirtualMachinePowerStateSyncImpl" />
|
||||
<bean id= "vmWorkJobDispatcher" class="com.cloud.vm.VmWorkJobDispatcher">
|
||||
<property name="name">
|
||||
<util:constant static-field="com.cloud.vm.VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER"/>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
|
||||
@ -4137,60 +4137,63 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
||||
return null;
|
||||
}
|
||||
|
||||
//
|
||||
// TODO build a common pattern to reduce code duplication in following methods
|
||||
// no time for this at current iteration
|
||||
//
|
||||
public Outcome<VirtualMachine> startVmThroughJobQueue(final String vmUuid,
|
||||
final Map<VirtualMachineProfile.Param, Object> params,
|
||||
final DeploymentPlan planToDeploy) {
|
||||
final Map<VirtualMachineProfile.Param, Object> params,
|
||||
final DeploymentPlan planToDeploy) {
|
||||
|
||||
final CallContext context = CallContext.current();
|
||||
final CallContext context = CallContext.current();
|
||||
final User callingUser = context.getCallingUser();
|
||||
final Account callingAccount = context.getCallingAccount();
|
||||
|
||||
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
|
||||
|
||||
Transaction.execute(new TransactionCallbackNoReturn() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
VmWorkJobVO workJob = null;
|
||||
Transaction.execute(new TransactionCallbackNoReturn () {
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
VmWorkJobVO workJob = null;
|
||||
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(VirtualMachine.Type.Instance,
|
||||
vm.getId(), VmWorkStart.class.getName());
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(VirtualMachine.Type.Instance,
|
||||
vm.getId(), VmWorkStart.class.getName());
|
||||
|
||||
if (pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
if (pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkStart.class.getName());
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkStart.class.getName());
|
||||
|
||||
workJob.setAccountId(callingAccount.getId());
|
||||
workJob.setUserId(callingUser.getId());
|
||||
workJob.setStep(VmWorkJobVO.Step.Starting);
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
workJob.setAccountId(callingAccount.getId());
|
||||
workJob.setUserId(callingUser.getId());
|
||||
workJob.setStep(VmWorkJobVO.Step.Starting);
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkStart workInfo = new VmWorkStart(callingUser.getId(), callingAccount.getId(), vm.getId());
|
||||
workInfo.setPlan(planToDeploy);
|
||||
workInfo.setParams(params);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkStart workInfo = new VmWorkStart(callingUser.getId(), callingAccount.getId(), vm.getId());
|
||||
workInfo.setPlan(planToDeploy);
|
||||
workInfo.setParams(params);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
|
||||
// Transaction syntax sugar has a cost here
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(vm.getId()));
|
||||
}
|
||||
});
|
||||
// Transaction syntax sugar has a cost here
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(workJob.getId()));
|
||||
}
|
||||
});
|
||||
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
|
||||
return new VmStateSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
|
||||
VirtualMachine.PowerState.PowerOn, vm.getId(), null);
|
||||
VirtualMachine.PowerState.PowerOn, vm.getId(), null);
|
||||
}
|
||||
|
||||
public Outcome<VirtualMachine> stopVmThroughJobQueue(final String vmUuid, final boolean cleanup) {
|
||||
@ -4200,48 +4203,47 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
||||
|
||||
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
|
||||
|
||||
Transaction.execute(new TransactionCallbackNoReturn() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
Transaction.execute(new TransactionCallbackNoReturn () {
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkStop.class.getName());
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkStop.class.getName());
|
||||
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkStop.class.getName());
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkStop.class.getName());
|
||||
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setStep(VmWorkJobVO.Step.Prepare);
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setStep(VmWorkJobVO.Step.Prepare);
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkStop workInfo = new VmWorkStop(user.getId(), account.getId(), vm.getId(), cleanup);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkStop workInfo = new VmWorkStop(user.getId(), account.getId(), vm.getId(), cleanup);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(vm.getId()));
|
||||
}
|
||||
});
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(workJob.getId()));
|
||||
}
|
||||
});
|
||||
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
|
||||
return new VmStateSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
|
||||
VirtualMachine.PowerState.PowerOff, vm.getId(), null);
|
||||
VirtualMachine.PowerState.PowerOff, vm.getId(), null);
|
||||
}
|
||||
|
||||
public Outcome<VirtualMachine> rebootVmThroughJobQueue(final String vmUuid,
|
||||
@ -4253,48 +4255,47 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
||||
|
||||
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
|
||||
|
||||
Transaction.execute(new TransactionCallbackNoReturn() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
Transaction.execute(new TransactionCallbackNoReturn () {
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkReboot.class.getName());
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkReboot.class.getName());
|
||||
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkReboot.class.getName());
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkReboot.class.getName());
|
||||
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setStep(VmWorkJobVO.Step.Prepare);
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setStep(VmWorkJobVO.Step.Prepare);
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkReboot workInfo = new VmWorkReboot(user.getId(), account.getId(), vm.getId(), params);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkReboot workInfo = new VmWorkReboot(user.getId(), account.getId(), vm.getId(), params);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(vm.getId()));
|
||||
}
|
||||
});
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(workJob.getId()));
|
||||
}
|
||||
});
|
||||
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
|
||||
return new VmJobSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
|
||||
vm.getId());
|
||||
vm.getId());
|
||||
}
|
||||
|
||||
public Outcome<VirtualMachine> migrateVmThroughJobQueue(final String vmUuid, final long srcHostId, final DeployDestination dest) {
|
||||
@ -4304,48 +4305,47 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
||||
|
||||
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
|
||||
|
||||
Transaction.execute(new TransactionCallbackNoReturn() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
Transaction.execute(new TransactionCallbackNoReturn () {
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkMigrate.class.getName());
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkMigrate.class.getName());
|
||||
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkMigrate.class.getName());
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkMigrate.class.getName());
|
||||
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkMigrate workInfo = new VmWorkMigrate(user.getId(), account.getId(), vm.getId(), srcHostId, dest);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkMigrate workInfo = new VmWorkMigrate(user.getId(), account.getId(), vm.getId(), srcHostId, dest);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(vm.getId()));
|
||||
}
|
||||
});
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(workJob.getId()));
|
||||
}
|
||||
});
|
||||
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
|
||||
return new VmStateSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
|
||||
VirtualMachine.PowerState.PowerOn, vm.getId(), vm.getPowerHostId());
|
||||
VirtualMachine.PowerState.PowerOn, vm.getId(), vm.getPowerHostId());
|
||||
}
|
||||
|
||||
public Outcome<VirtualMachine> migrateVmWithStorageThroughJobQueue(
|
||||
@ -4358,55 +4358,50 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
||||
|
||||
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
|
||||
|
||||
Transaction.execute(new TransactionCallbackNoReturn() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
Transaction.execute(new TransactionCallbackNoReturn () {
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkMigrateWithStorage.class.getName());
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkMigrateWithStorage.class.getName());
|
||||
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkMigrate.class.getName());
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkMigrate.class.getName());
|
||||
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkMigrateWithStorage workInfo = new VmWorkMigrateWithStorage(user.getId(), account.getId(), vm.getId(),
|
||||
srcHostId, destHostId, volumeToPool);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkMigrateWithStorage workInfo = new VmWorkMigrateWithStorage(user.getId(), account.getId(), vm.getId(),
|
||||
srcHostId, destHostId, volumeToPool);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(vm.getId()));
|
||||
}
|
||||
});
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(workJob.getId()));
|
||||
}
|
||||
});
|
||||
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
|
||||
return new VmStateSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
|
||||
VirtualMachine.PowerState.PowerOn, vm.getId(), destHostId);
|
||||
VirtualMachine.PowerState.PowerOn, vm.getId(), destHostId);
|
||||
}
|
||||
|
||||
//
|
||||
// TODO build a common pattern to reduce code duplication in following methods
|
||||
// no time for this at current iteration
|
||||
//
|
||||
public Outcome<VirtualMachine> migrateVmForScaleThroughJobQueue(
|
||||
final String vmUuid, final long srcHostId, final DeployDestination dest, final Long newSvcOfferingId) {
|
||||
|
||||
@ -4416,46 +4411,45 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
||||
|
||||
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
|
||||
|
||||
Transaction.execute(new TransactionCallbackNoReturn() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
Transaction.execute(new TransactionCallbackNoReturn () {
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkMigrateForScale.class.getName());
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkMigrateForScale.class.getName());
|
||||
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkMigrate.class.getName());
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkMigrate.class.getName());
|
||||
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkMigrateForScale workInfo = new VmWorkMigrateForScale(user.getId(), account.getId(), vm.getId(),
|
||||
srcHostId, dest, newSvcOfferingId);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkMigrateForScale workInfo = new VmWorkMigrateForScale(user.getId(), account.getId(), vm.getId(),
|
||||
srcHostId, dest, newSvcOfferingId);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(vm.getId()));
|
||||
}
|
||||
});
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(workJob.getId()));
|
||||
}
|
||||
});
|
||||
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
|
||||
return new VmJobSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"), vm.getId());
|
||||
}
|
||||
@ -4469,46 +4463,45 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
||||
|
||||
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
|
||||
|
||||
Transaction.execute(new TransactionCallbackNoReturn() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
Transaction.execute(new TransactionCallbackNoReturn () {
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkStorageMigration.class.getName());
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkStorageMigration.class.getName());
|
||||
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkStorageMigration.class.getName());
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkStorageMigration.class.getName());
|
||||
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkStorageMigration workInfo = new VmWorkStorageMigration(user.getId(), account.getId(), vm.getId(),
|
||||
destPool);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkStorageMigration workInfo = new VmWorkStorageMigration(user.getId(), account.getId(), vm.getId(),
|
||||
destPool);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(vm.getId()));
|
||||
}
|
||||
});
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(workJob.getId()));
|
||||
}
|
||||
});
|
||||
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
|
||||
return new VmJobSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"), vm.getId());
|
||||
}
|
||||
@ -4520,46 +4513,45 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
||||
final User user = context.getCallingUser();
|
||||
final Account account = context.getCallingAccount();
|
||||
|
||||
Transaction.execute(new TransactionCallbackNoReturn() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
Transaction.execute(new TransactionCallbackNoReturn () {
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkAddVmToNetwork.class.getName());
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkAddVmToNetwork.class.getName());
|
||||
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkAddVmToNetwork.class.getName());
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkAddVmToNetwork.class.getName());
|
||||
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkAddVmToNetwork workInfo = new VmWorkAddVmToNetwork(user.getId(), account.getId(), vm.getId(),
|
||||
network, requested);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkAddVmToNetwork workInfo = new VmWorkAddVmToNetwork(user.getId(), account.getId(), vm.getId(),
|
||||
network, requested);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(vm.getId()));
|
||||
}
|
||||
});
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(workJob.getId()));
|
||||
}
|
||||
});
|
||||
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
|
||||
return new VmJobSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"), vm.getId());
|
||||
}
|
||||
@ -4571,46 +4563,45 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
||||
final User user = context.getCallingUser();
|
||||
final Account account = context.getCallingAccount();
|
||||
|
||||
Transaction.execute(new TransactionCallbackNoReturn() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
Transaction.execute(new TransactionCallbackNoReturn () {
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkRemoveNicFromVm.class.getName());
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkRemoveNicFromVm.class.getName());
|
||||
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkRemoveNicFromVm.class.getName());
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkRemoveNicFromVm.class.getName());
|
||||
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkRemoveNicFromVm workInfo = new VmWorkRemoveNicFromVm(user.getId(), account.getId(), vm.getId(),
|
||||
nic);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkRemoveNicFromVm workInfo = new VmWorkRemoveNicFromVm(user.getId(), account.getId(), vm.getId(),
|
||||
nic);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(vm.getId()));
|
||||
}
|
||||
});
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(workJob.getId()));
|
||||
}
|
||||
});
|
||||
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
|
||||
return new VmJobSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"), vm.getId());
|
||||
}
|
||||
@ -4622,46 +4613,45 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
||||
final User user = context.getCallingUser();
|
||||
final Account account = context.getCallingAccount();
|
||||
|
||||
Transaction.execute(new TransactionCallbackNoReturn() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
Transaction.execute(new TransactionCallbackNoReturn () {
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkRemoveVmFromNetwork.class.getName());
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkRemoveVmFromNetwork.class.getName());
|
||||
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkRemoveVmFromNetwork.class.getName());
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkRemoveVmFromNetwork.class.getName());
|
||||
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkRemoveVmFromNetwork workInfo = new VmWorkRemoveVmFromNetwork(user.getId(), account.getId(), vm.getId(),
|
||||
network, broadcastUri);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkRemoveVmFromNetwork workInfo = new VmWorkRemoveVmFromNetwork(user.getId(), account.getId(), vm.getId(),
|
||||
network, broadcastUri);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(vm.getId()));
|
||||
}
|
||||
});
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(workJob.getId()));
|
||||
}
|
||||
});
|
||||
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
|
||||
return new VmJobSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"), vm.getId());
|
||||
}
|
||||
@ -4675,46 +4665,45 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
||||
|
||||
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
|
||||
|
||||
Transaction.execute(new TransactionCallbackNoReturn() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
Transaction.execute(new TransactionCallbackNoReturn () {
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
_vmDao.lockRow(vm.getId(), true);
|
||||
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkReconfigure.class.getName());
|
||||
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
|
||||
VirtualMachine.Type.Instance, vm.getId(),
|
||||
VmWorkReconfigure.class.getName());
|
||||
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
VmWorkJobVO workJob = null;
|
||||
if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
|
||||
assert (pendingWorkJobs.size() == 1);
|
||||
workJob = pendingWorkJobs.get(0);
|
||||
} else {
|
||||
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
workJob = new VmWorkJobVO(context.getContextId());
|
||||
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkReconfigure.class.getName());
|
||||
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
|
||||
workJob.setCmd(VmWorkReconfigure.class.getName());
|
||||
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
workJob.setAccountId(account.getId());
|
||||
workJob.setUserId(user.getId());
|
||||
workJob.setVmType(vm.getType());
|
||||
workJob.setVmInstanceId(vm.getId());
|
||||
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkReconfigure workInfo = new VmWorkReconfigure(user.getId(), account.getId(), vm.getId(),
|
||||
oldServiceOffering, reconfiguringOnExistingHost);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
// save work context info (there are some duplications)
|
||||
VmWorkReconfigure workInfo = new VmWorkReconfigure(user.getId(), account.getId(), vm.getId(),
|
||||
oldServiceOffering, reconfiguringOnExistingHost);
|
||||
workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
|
||||
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(vm.getId()));
|
||||
}
|
||||
});
|
||||
_jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
|
||||
}
|
||||
context.putContextParameter("workJob", workJob);
|
||||
context.putContextParameter("jobId", new Long(workJob.getId()));
|
||||
}
|
||||
});
|
||||
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
final long jobId = (Long)context.getContextParameter("jobId");
|
||||
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
|
||||
|
||||
return new VmJobSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"), vm.getId());
|
||||
}
|
||||
|
||||
@ -160,7 +160,9 @@
|
||||
|
||||
<bean id="snapshotManagerImpl" class="com.cloud.storage.snapshot.SnapshotManagerImpl" />
|
||||
|
||||
<bean id="snapshotSchedulerImpl" class="com.cloud.storage.snapshot.SnapshotSchedulerImpl" />
|
||||
<bean id="snapshotSchedulerImpl" class="com.cloud.storage.snapshot.SnapshotSchedulerImpl" >
|
||||
<property name="asyncJobDispatcher" ref="ApiAsyncJobDispatcher" />
|
||||
</bean>
|
||||
<bean id="storageNetworkManagerImpl" class="com.cloud.network.StorageNetworkManagerImpl" />
|
||||
<bean id="taggedResourceManagerImpl" class="com.cloud.tags.TaggedResourceManagerImpl" />
|
||||
<bean id="resourceMetaDataManagerImpl" class="com.cloud.metadata.ResourceMetaDataManagerImpl" />
|
||||
|
||||
@ -83,7 +83,7 @@ public class SnapshotSchedulerImpl extends ManagerBase implements SnapshotSchedu
|
||||
protected VolumeDao _volsDao;
|
||||
@Inject
|
||||
protected ConfigurationDao _configDao;
|
||||
@Inject
|
||||
|
||||
protected AsyncJobDispatcher _asyncDispatcher;
|
||||
|
||||
private static final int ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION = 5; // 5 seconds
|
||||
@ -92,6 +92,14 @@ public class SnapshotSchedulerImpl extends ManagerBase implements SnapshotSchedu
|
||||
private Date _currentTimestamp;
|
||||
private TestClock _testTimerTask;
|
||||
|
||||
public AsyncJobDispatcher getAsyncJobDispatcher() {
|
||||
return _asyncDispatcher;
|
||||
}
|
||||
|
||||
public void setAsyncJobDispatcher(AsyncJobDispatcher dispatcher) {
|
||||
_asyncDispatcher = dispatcher;
|
||||
}
|
||||
|
||||
private Date getNextScheduledTime(long policyId, Date currentTimestamp) {
|
||||
SnapshotPolicyVO policy = _snapshotPolicyDao.findById(policyId);
|
||||
Date nextTimestamp = null;
|
||||
|
||||
@ -21,7 +21,8 @@ import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.apache.cloudstack.framework.jobs.AsyncJobExecutionContext;
|
||||
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
|
||||
|
||||
import com.cloud.utils.Pair;
|
||||
@ -70,8 +71,16 @@ public class SystemVmLoadScanner<T> {
|
||||
|
||||
@Override
|
||||
protected void runInContext() {
|
||||
try {
|
||||
try {
|
||||
CallContext callContext = CallContext.current();
|
||||
assert(callContext != null);
|
||||
|
||||
AsyncJobExecutionContext.registerPseudoExecutionContext(
|
||||
callContext.getCallingAccountId(), callContext.getCallingUserId());
|
||||
|
||||
reallyRun();
|
||||
|
||||
AsyncJobExecutionContext.unregister();
|
||||
} catch (Throwable e) {
|
||||
s_logger.warn("Unexpected exception " + e.getMessage(), e);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user