CLOUDSTACK-5767: Remove the logic of using underlying job related fields for volume specific logic.

This commit is contained in:
Kelven Yang 2014-01-03 13:10:17 -08:00
parent 69f49839d3
commit ad6454d2bf
3 changed files with 109 additions and 142 deletions

View File

@ -183,7 +183,7 @@ import com.cloud.utils.db.DB;
import com.cloud.utils.db.EntityManager;
import com.cloud.utils.db.GlobalLock;
import com.cloud.utils.db.Transaction;
import com.cloud.utils.db.TransactionCallbackNoReturn;
import com.cloud.utils.db.TransactionCallback;
import com.cloud.utils.db.TransactionCallbackWithException;
import com.cloud.utils.db.TransactionCallbackWithExceptionNoReturn;
import com.cloud.utils.db.TransactionLegacy;
@ -4138,9 +4138,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
_vmDao.lockRow(vm.getId(), true);
@ -4171,16 +4171,14 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
}
// Transaction syntax sugar has a cost here
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmStateSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
return new VmStateSyncOutcome((VmWorkJobVO)result[0],
VirtualMachine.PowerState.PowerOn, vm.getId(), null);
}
@ -4191,9 +4189,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
public Object[] doInTransaction(TransactionStatus status) {
_vmDao.lockRow(vm.getId(), true);
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
@ -4223,15 +4221,14 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
}
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmStateSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
return new VmStateSyncOutcome((VmWorkJobVO)result[0],
VirtualMachine.PowerState.PowerOff, vm.getId(), null);
}
@ -4244,9 +4241,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
public Object[] doInTransaction(TransactionStatus status) {
_vmDao.lockRow(vm.getId(), true);
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
@ -4276,15 +4273,14 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
}
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVirtualMachineOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
return new VmJobVirtualMachineOutcome((VmWorkJobVO)result[0],
vm.getId());
}
@ -4295,10 +4291,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
_vmDao.lockRow(vm.getId(), true);
public Object[] doInTransaction(TransactionStatus status) {
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
VirtualMachine.Type.Instance, vm.getId(),
@ -4326,15 +4321,14 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
}
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmStateSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
return new VmStateSyncOutcome((VmWorkJobVO)result[0],
VirtualMachine.PowerState.PowerOn, vm.getId(), vm.getPowerHostId());
}
@ -4348,9 +4342,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
public Object[] doInTransaction(TransactionStatus status) {
_vmDao.lockRow(vm.getId(), true);
@ -4381,15 +4375,14 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
}
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmStateSyncOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
return new VmStateSyncOutcome((VmWorkJobVO)result[0],
VirtualMachine.PowerState.PowerOn, vm.getId(), destHostId);
}
@ -4402,10 +4395,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
_vmDao.lockRow(vm.getId(), true);
public Object[] doInTransaction(TransactionStatus status) {
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
VirtualMachine.Type.Instance, vm.getId(),
@ -4434,15 +4426,15 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
}
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVirtualMachineOutcome((VmWorkJobVO)context.getContextParameter("workJob"), vm.getId());
return new VmJobVirtualMachineOutcome((VmWorkJobVO)result[0], vm.getId());
}
public Outcome<VirtualMachine> migrateVmStorageThroughJobQueue(
@ -4454,10 +4446,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
_vmDao.lockRow(vm.getId(), true);
public Object[] doInTransaction(TransactionStatus status) {
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
VirtualMachine.Type.Instance, vm.getId(),
@ -4486,15 +4477,15 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
}
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVirtualMachineOutcome((VmWorkJobVO)context.getContextParameter("workJob"), vm.getId());
return new VmJobVirtualMachineOutcome((VmWorkJobVO)result[0], vm.getId());
}
public Outcome<VirtualMachine> addVmToNetworkThroughJobQueue(
@ -4504,10 +4495,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
final User user = context.getCallingUser();
final Account account = context.getCallingAccount();
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
_vmDao.lockRow(vm.getId(), true);
public Object[] doInTransaction(TransactionStatus status) {
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
VirtualMachine.Type.Instance, vm.getId(),
@ -4536,15 +4526,14 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
}
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVirtualMachineOutcome((VmWorkJobVO)context.getContextParameter("workJob"), vm.getId());
return new VmJobVirtualMachineOutcome((VmWorkJobVO)result[0], vm.getId());
}
public Outcome<VirtualMachine> removeNicFromVmThroughJobQueue(
@ -4554,10 +4543,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
final User user = context.getCallingUser();
final Account account = context.getCallingAccount();
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
_vmDao.lockRow(vm.getId(), true);
public Object[] doInTransaction(TransactionStatus status) {
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
VirtualMachine.Type.Instance, vm.getId(),
@ -4586,15 +4574,14 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
}
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVirtualMachineOutcome((VmWorkJobVO)context.getContextParameter("workJob"), vm.getId());
return new VmJobVirtualMachineOutcome((VmWorkJobVO)result[0], vm.getId());
}
public Outcome<VirtualMachine> removeVmFromNetworkThroughJobQueue(
@ -4604,10 +4591,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
final User user = context.getCallingUser();
final Account account = context.getCallingAccount();
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
_vmDao.lockRow(vm.getId(), true);
public Object[] doInTransaction(TransactionStatus status) {
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
VirtualMachine.Type.Instance, vm.getId(),
@ -4636,15 +4622,14 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
}
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVirtualMachineOutcome((VmWorkJobVO)context.getContextParameter("workJob"), vm.getId());
return new VmJobVirtualMachineOutcome((VmWorkJobVO)result[0], vm.getId());
}
public Outcome<VirtualMachine> reconfigureVmThroughJobQueue(
@ -4656,10 +4641,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
_vmDao.lockRow(vm.getId(), true);
public Object[] doInTransaction(TransactionStatus status) {
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
VirtualMachine.Type.Instance, vm.getId(),
@ -4688,12 +4672,14 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
}
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
return new VmJobVirtualMachineOutcome((VmWorkJobVO)context.getContextParameter("workJob"), vm.getId());
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVirtualMachineOutcome((VmWorkJobVO)result[0], vm.getId());
}
private Pair<JobInfo.Status, String> orchestrateStart(VmWorkStart work) throws Exception {

View File

@ -28,7 +28,6 @@ import javax.inject.Inject;
import org.apache.log4j.Logger;
import org.apache.cloudstack.api.BaseCmd;
import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd;
import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd;
import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd;
@ -150,7 +149,6 @@ import com.cloud.utils.db.DB;
import com.cloud.utils.db.EntityManager;
import com.cloud.utils.db.Transaction;
import com.cloud.utils.db.TransactionCallback;
import com.cloud.utils.db.TransactionCallbackNoReturn;
import com.cloud.utils.db.TransactionStatus;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.fsm.NoTransitionException;
@ -1282,7 +1280,6 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
}
_asyncMgr.updateAsyncJobAttachment(job.getId(), "volume", volumeId);
_asyncMgr.updateAsyncJobStatus(job.getId(), BaseCmd.PROGRESS_INSTANCE_CREATED, Long.toString(volumeId));
}
VolumeVO newVol = _volumeDao.findById(volumeOnPrimaryStorage.getId());
@ -1403,7 +1400,6 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
}
_asyncMgr.updateAsyncJobAttachment(job.getId(), "volume", volumeId);
_asyncMgr.updateAsyncJobStatus(job.getId(), BaseCmd.PROGRESS_INSTANCE_CREATED, volumeId.toString());
}
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
@ -2135,9 +2131,9 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
final VMInstanceVO vm = _vmInstanceDao.findById(vmId);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
_vmInstanceDao.lockRow(vm.getId(), true);
@ -2159,16 +2155,17 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
// Transaction syntax sugar has a cost here
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
AsyncJobVO jobVo = _jobMgr.getAsyncJob(workJob.getId());
s_logger.debug("New job " + workJob.getId() + ", result field: " + jobVo.getResult());
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVolumeOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
return new VmJobVolumeOutcome((VmWorkJobVO)result[0],
volumeId);
}
@ -2180,9 +2177,9 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
final VMInstanceVO vm = _vmInstanceDao.findById(vmId);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
_vmInstanceDao.lockRow(vm.getId(), true);
@ -2203,16 +2200,14 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
// Transaction syntax sugar has a cost here
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVolumeOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
return new VmJobVolumeOutcome((VmWorkJobVO)result[0],
volumeId);
}
@ -2225,9 +2220,9 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
final VMInstanceVO vm = _vmInstanceDao.findById(vmId);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
_vmInstanceDao.lockRow(vm.getId(), true);
@ -2249,16 +2244,14 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
// Transaction syntax sugar has a cost here
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVolumeOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
return new VmJobVolumeOutcome((VmWorkJobVO)result[0],
volumeId);
}
@ -2271,9 +2264,9 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
final VMInstanceVO vm = _vmInstanceDao.findById(vmId);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
_vmInstanceDao.lockRow(vm.getId(), true);
@ -2295,16 +2288,14 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
// Transaction syntax sugar has a cost here
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVolumeOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
return new VmJobVolumeOutcome((VmWorkJobVO)result[0],
volumeId);
}
@ -2317,9 +2308,9 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
final VMInstanceVO vm = _vmInstanceDao.findById(vmId);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
_vmInstanceDao.lockRow(vm.getId(), true);
@ -2342,16 +2333,14 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
// Transaction syntax sugar has a cost here
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobSnapshotOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
return new VmJobSnapshotOutcome((VmWorkJobVO)result[0],
snapshotId);
}

View File

@ -78,7 +78,7 @@ import com.cloud.utils.db.Filter;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.Transaction;
import com.cloud.utils.db.TransactionCallbackNoReturn;
import com.cloud.utils.db.TransactionCallback;
import com.cloud.utils.db.TransactionStatus;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.vm.UserVmVO;
@ -814,9 +814,9 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
final VMInstanceVO vm = _vmInstanceDao.findById(vmId);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
_vmInstanceDao.lockRow(vm.getId(), true);
@ -838,16 +838,14 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
// Transaction syntax sugar has a cost here
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVMSnapshotOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
return new VmJobVMSnapshotOutcome((VmWorkJobVO)result[0],
vmSnapshotId);
}
@ -859,9 +857,9 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
final VMInstanceVO vm = _vmInstanceDao.findById(vmId);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
_vmInstanceDao.lockRow(vm.getId(), true);
@ -883,16 +881,14 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
// Transaction syntax sugar has a cost here
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVMSnapshotOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
return new VmJobVMSnapshotOutcome((VmWorkJobVO)result[0],
vmSnapshotId);
}
@ -904,9 +900,9 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
final VMInstanceVO vm = _vmInstanceDao.findById(vmId);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
_vmInstanceDao.lockRow(vm.getId(), true);
@ -928,16 +924,14 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
// Transaction syntax sugar has a cost here
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVMSnapshotOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
return new VmJobVMSnapshotOutcome((VmWorkJobVO)result[0],
vmSnapshotId);
}
@ -949,9 +943,9 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
final VMInstanceVO vm = _vmInstanceDao.findById(vmId);
Transaction.execute(new TransactionCallbackNoReturn() {
Object[] result = Transaction.execute(new TransactionCallback<Object[]>() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
_vmInstanceDao.lockRow(vm.getId(), true);
@ -973,16 +967,14 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
_jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
// Transaction syntax sugar has a cost here
context.putContextParameter("workJob", workJob);
context.putContextParameter("jobId", new Long(workJob.getId()));
return new Object[] {workJob, new Long(workJob.getId())};
}
});
final long jobId = (Long)context.getContextParameter("jobId");
final long jobId = (Long)result[1];
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
return new VmJobVirtualMachineOutcome((VmWorkJobVO)context.getContextParameter("workJob"),
return new VmJobVirtualMachineOutcome((VmWorkJobVO)result[0],
vmId);
}