You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ah...@apache.org on 2013/06/25 01:52:08 UTC
[32/50] [abbrv] git commit: updated refs/heads/vmsync to 049dd72
finished up the conversion to using outcome
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c0febea9
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c0febea9
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c0febea9
Branch: refs/heads/vmsync
Commit: c0febea950e52acbba9035a85b8641da83416c43
Parents: 4254cb8
Author: Alex Huang <al...@gmail.com>
Authored: Mon Jun 17 20:32:19 2013 -0700
Committer: Alex Huang <al...@gmail.com>
Committed: Mon Jun 24 10:16:35 2013 -0700
----------------------------------------------------------------------
.../src/com/cloud/vm/VirtualMachineManager.java | 2 +-
.../com/cloud/vm/VirtualMachineManagerImpl.java | 134 ++++++++-----------
.../lb/ElasticLoadBalancerManagerImpl.java | 2 +-
.../lb/InternalLoadBalancerVMManagerImpl.java | 2 +-
.../cloud/ha/HighAvailabilityManagerImpl.java | 14 +-
.../VirtualNetworkApplianceManagerImpl.java | 2 +-
.../com/cloud/server/ManagementServerImpl.java | 4 +-
.../storage/StoragePoolAutomationImpl.java | 2 +-
.../vm/snapshot/VMSnapshotManagerImpl.java | 2 +-
.../vm/VmWorkMockVirtualMachineManagerImpl.java | 5 +-
10 files changed, 71 insertions(+), 98 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0febea9/engine/components-api/src/com/cloud/vm/VirtualMachineManager.java
----------------------------------------------------------------------
diff --git a/engine/components-api/src/com/cloud/vm/VirtualMachineManager.java b/engine/components-api/src/com/cloud/vm/VirtualMachineManager.java
index e1365e2..92f05f0 100644
--- a/engine/components-api/src/com/cloud/vm/VirtualMachineManager.java
+++ b/engine/components-api/src/com/cloud/vm/VirtualMachineManager.java
@@ -126,7 +126,7 @@ public interface VirtualMachineManager extends Manager {
*/
Outcome<VirtualMachine> start(String vmUuid, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlan planToDeploy);
- void advanceStop(String vmUuid, boolean cleanup) throws ResourceUnavailableException, OperationTimedoutException,
+ Outcome<VirtualMachine> stop(String vmUuid, boolean cleanup) throws ResourceUnavailableException, OperationTimedoutException,
ConcurrentOperationException;
void advanceExpunge(String vmUuid) throws ResourceUnavailableException, OperationTimedoutException,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0febea9/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
index 141fcb4..3a308a9 100755
--- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -401,7 +401,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
return;
}
- advanceStop(vmUuid, false);
+ stop(vmUuid, false);
vm = _vmDao.findByUuid(vmUuid);
try {
@@ -995,14 +995,15 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
@Override
public void easyStop(String vmUuid) {
+ Outcome<VirtualMachine> outcome = stop(vmUuid, false);
try {
- advanceStop(vmUuid, false);
- } catch (OperationTimedoutException e) {
- throw new CloudRuntimeException(e).add(VirtualMachine.class, vmUuid);
- } catch (ConcurrentOperationException e) {
- throw new CloudRuntimeException(e).add(VirtualMachine.class, vmUuid);
- } catch (ResourceUnavailableException e) {
- throw new CloudRuntimeException(e).add(VirtualMachine.class, vmUuid);
+ outcome.get(_jobTimeout.value(), TimeUnit.MILLISECONDS);
+ } catch (InterruptedException e) {
+ throw new CloudRuntimeException("Interrupted while stopping vm " + vmUuid, e);
+ } catch (java.util.concurrent.ExecutionException e) {
+ throw new CloudRuntimeException("Unable to stop the VM", e);
+ } catch (TimeoutException e) {
+ throw new CloudRuntimeException("Unable to stop the VM due to timeout", e);
}
}
@@ -1094,8 +1095,8 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
}
@Override
- public void advanceStop(final String vmUuid, boolean forced) throws ResourceUnavailableException,
- OperationTimedoutException, ConcurrentOperationException {
+ @DB
+ public Outcome<VirtualMachine> stop(final String vmUuid, boolean forced) {
CallContext cc = CallContext.current();
Account account = cc.getCallingAccount();
User user = cc.getCallingUser();
@@ -1103,73 +1104,44 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
VmWorkJobVO workJob = null;
Transaction txn = Transaction.currentTxn();
- try {
- txn.start();
-
- _vmDao.lockRow(vm.getId(), true);
-
- List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
- VirtualMachine.Type.Instance, vm.getId(), VmWorkJobDispatcher.Start);
-
- if(pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
- assert(pendingWorkJobs.size() == 1);
- workJob = pendingWorkJobs.get(0);
- } else {
- workJob = new VmWorkJobVO(cc.getContextId());
-
- workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
- workJob.setCmd(VmWorkJobDispatcher.Stop);
-
- 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();
- workInfo.setAccountId(account.getId());
- workInfo.setUserId(user.getId());
- workInfo.setVmId(vm.getId());
- workInfo.setForceStop(forced);
- workJob.setCmdInfo(VmWorkJobDispatcher.serialize(workInfo));
-
- _jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
- }
-
- txn.commit();
- } catch(Throwable e) {
- s_logger.error("Unexpected exception", e);
- txn.rollback();
- throw new ConcurrentOperationException("Unhandled exception, converted to ConcurrentOperationException");
+ txn.start();
+
+ _vmDao.lockRow(vm.getId(), true);
+
+ List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(VirtualMachine.Type.Instance, vm.getId(), VmWorkJobDispatcher.Start);
+
+ if (pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
+ assert (pendingWorkJobs.size() == 1);
+ workJob = pendingWorkJobs.get(0);
+ } else {
+ workJob = new VmWorkJobVO(cc.getContextId());
+
+ workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
+ workJob.setCmd(VmWorkJobDispatcher.Stop);
+
+ 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();
+ workInfo.setAccountId(account.getId());
+ workInfo.setUserId(user.getId());
+ workInfo.setVmId(vm.getId());
+ workInfo.setForceStop(forced);
+ workJob.setCmdInfo(VmWorkJobDispatcher.serialize(workInfo));
+
+ _jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
}
+ txn.commit();
+
final long jobId = workJob.getId();
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(jobId);
- _jobMgr.waitAndCheck(
- new String[] {Topics.VM_POWER_STATE, AsyncJob.Topics.JOB_STATE},
- 3000L, 600000L, new Predicate() {
-
- @Override
- public boolean checkCondition() {
- VMInstanceVO instance = _vmDao.findById(vm.getId());
- if(instance.getPowerState() == VirtualMachine.PowerState.PowerOff)
- return true;
-
- VmWorkJobVO workJob = _workJobDao.findById(jobId);
- if(workJob.getStatus() != JobInfo.Status.IN_PROGRESS)
- return true;
-
- return false;
- }
- });
-
- try {
- AsyncJobExecutionContext.getCurrentExecutionContext().disjoinJob(jobId);
- } catch (InsufficientCapacityException e) {
- throw new CloudRuntimeException("Should never ever happen on a stop. Who threw this?", e);
- }
+ return new VmOutcome(workJob, VirtualMachine.PowerState.PowerOff, vm.getId());
}
public void orchestrateStop(String vmUuid, boolean forced) throws AgentUnavailableException,
@@ -1358,7 +1330,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
return true;
}
- advanceStop(vmUuid, _forceStop.value());
+ stop(vmUuid, _forceStop.value());
vm = _vmDao.findById(vm.getId());
@@ -1907,16 +1879,18 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
if (vmInstance != null) {
return true;
}
+ Outcome<VirtualMachine> outcome = stop(vm.getUuid(), true);
try {
- advanceStop(vm.getUuid(), true);
+ outcome.get(_jobTimeout.value(), TimeUnit.MILLISECONDS);
return true;
- } catch (ResourceUnavailableException e) {
- s_logger.debug("Unable to stop VM due to " + e.getMessage());
- } catch (ConcurrentOperationException e) {
- s_logger.debug("Unable to stop VM due to " + e.getMessage());
- } catch (OperationTimedoutException e) {
- s_logger.debug("Unable to stop VM due to " + e.getMessage());
+ } catch (InterruptedException e) {
+ s_logger.warn("Unable to migrate the VM", e);
+ } catch (java.util.concurrent.ExecutionException e) {
+ s_logger.warn("Unable to migrate the VM", e);
+ } catch (TimeoutException e) {
+ s_logger.warn("Unable to migrate the VM", e);
}
+
return false;
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0febea9/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
index 2bb3ba3..297eea0 100644
--- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
+++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
@@ -557,7 +557,7 @@ public class ElasticLoadBalancerManagerImpl extends ManagerBase implements
private DomainRouterVO stop(DomainRouterVO elbVm, boolean forced, User user, Account caller) throws ConcurrentOperationException, ResourceUnavailableException {
s_logger.debug("Stopping ELB vm " + elbVm);
try {
- _itMgr.advanceStop(elbVm.getUuid(), forced);
+ _itMgr.stop(elbVm.getUuid(), forced);
return _routerDao.findById(elbVm.getId());
} catch (OperationTimedoutException e) {
throw new CloudRuntimeException("Unable to stop " + elbVm, e);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0febea9/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java b/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
index 2a91c95..b0ac526 100644
--- a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
+++ b/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
@@ -552,7 +552,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
protected VirtualRouter stopInternalLbVm(DomainRouterVO internalLbVm, boolean forced, Account caller, long callerUserId) throws ResourceUnavailableException, ConcurrentOperationException {
s_logger.debug("Stopping internal lb vm " + internalLbVm);
try {
- _itMgr.advanceStop(internalLbVm.getUuid(), forced);
+ _itMgr.stop(internalLbVm.getUuid(), forced);
return _internalLbVmDao.findById(internalLbVm.getId());
} catch (OperationTimedoutException e) {
throw new CloudRuntimeException("Unable to stop " + internalLbVm, e);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0febea9/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
index fb20711..da61257 100755
--- a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
+++ b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
@@ -292,7 +292,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
if (hostId == null) {
try {
s_logger.debug("Found a vm that is scheduled to be restarted but has no host id: " + vm);
- _itMgr.advanceStop(vm.getUuid(), true);
+ _itMgr.stop(vm.getUuid(), true);
} catch (ResourceUnavailableException e) {
assert false : "How do we hit this when force is true?";
throw new CloudRuntimeException("Caught exception even though it should be handled.", e);
@@ -337,7 +337,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
}
try {
- _itMgr.advanceStop(vm.getUuid(), true);
+ _itMgr.stop(vm.getUuid(), true);
} catch (ResourceUnavailableException e) {
assert false : "How do we hit this when force is true?";
throw new CloudRuntimeException("Caught exception even though it should be handled.", e);
@@ -485,7 +485,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
}
try {
- _itMgr.advanceStop(vm.getUuid(), true);
+ _itMgr.stop(vm.getUuid(), true);
} catch (ResourceUnavailableException e) {
assert false : "How do we hit this when force is true?";
throw new CloudRuntimeException("Caught exception even though it should be handled.", e);
@@ -502,7 +502,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
} else {
s_logger.debug("How come that HA step is Investigating and the host is removed? Calling forced Stop on Vm anyways");
try {
- _itMgr.advanceStop(vm.getUuid(), true);
+ _itMgr.stop(vm.getUuid(), true);
} catch (ResourceUnavailableException e) {
assert false : "How do we hit this when force is true?";
throw new CloudRuntimeException("Caught exception even though it should be handled.", e);
@@ -671,7 +671,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
s_logger.info("Stopping " + vm);
try {
if (work.getWorkType() == WorkType.Stop) {
- _itMgr.advanceStop(vm.getUuid(), false);
+ _itMgr.stop(vm.getUuid(), false);
s_logger.info("Successfully stopped " + vm);
return null;
} else if (work.getWorkType() == WorkType.CheckStop) {
@@ -681,7 +681,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
+ " State: " + vm.getState());
return null;
}
- _itMgr.advanceStop(vm.getUuid(), false);
+ _itMgr.stop(vm.getUuid(), false);
s_logger.info("Stop for " + vm + " was successful");
return null;
} else if (work.getWorkType() == WorkType.ForceStop) {
@@ -691,7 +691,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
+ " State: " + vm.getState());
return null;
}
- _itMgr.advanceStop(vm.getUuid(), true);
+ _itMgr.stop(vm.getUuid(), true);
s_logger.info("Stop for " + vm + " was successful");
return null;
} else {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0febea9/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index 81eebe4..efd247b 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -2741,7 +2741,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
public DomainRouterVO stop(VirtualRouter router, boolean forced, User user, Account caller) throws ConcurrentOperationException, ResourceUnavailableException {
s_logger.debug("Stopping router " + router);
try {
- _itMgr.advanceStop(router.getUuid(), forced);
+ _itMgr.stop(router.getUuid(), forced);
return _routerDao.findById(router.getId());
} catch (OperationTimedoutException e) {
throw new CloudRuntimeException("Unable to stop " + router, e);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0febea9/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index 2c20bc6..362b8e0 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -2131,7 +2131,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
User caller = _userDao.findById(CallContext.current().getCallingUserId());
- _itMgr.advanceStop(systemVm.getUuid(), isForced);
+ _itMgr.stop(systemVm.getUuid(), isForced);
return _consoleProxyDao.findById(systemVm.getId());
}
@@ -3013,7 +3013,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
User caller = _userDao.findById(CallContext.current().getCallingUserId());
- _itMgr.advanceStop(systemVm.getUuid(), isForced);
+ _itMgr.stop(systemVm.getUuid(), isForced);
return _secStorageVmDao.findById(systemVm.getId());
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0febea9/server/src/com/cloud/storage/StoragePoolAutomationImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/StoragePoolAutomationImpl.java b/server/src/com/cloud/storage/StoragePoolAutomationImpl.java
index e1550b8..cb085cc 100644
--- a/server/src/com/cloud/storage/StoragePoolAutomationImpl.java
+++ b/server/src/com/cloud/storage/StoragePoolAutomationImpl.java
@@ -234,7 +234,7 @@ public class StoragePoolAutomationImpl implements StoragePoolAutomation {
}
} else if (vmInstance.getType().equals(VirtualMachine.Type.DomainRouter)) {
DomainRouterVO domR = _domrDao.findById(vmInstance.getId());
- vmMgr.advanceStop(domR.getUuid(), false);
+ vmMgr.stop(domR.getUuid(), false);
work.setStoppedForMaintenance(true);
_storagePoolWorkDao.update(work.getId(), work);
if (restart) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0febea9/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
index 64adc92..fd2d06f 100644
--- a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
+++ b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
@@ -683,7 +683,7 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
}else {
if(userVm.getState() == VirtualMachine.State.Running && vmSnapshotVo.getType() == VMSnapshot.Type.Disk){
try {
- _itMgr.advanceStop(userVm.getUuid(), false);
+ _itMgr.stop(userVm.getUuid(), false);
} catch (Exception e) {
s_logger.error("Stop VM " + userVm.getInstanceName() + " before reverting failed due to " + e.getMessage());
throw new CloudRuntimeException(e.getMessage());
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0febea9/server/test/com/cloud/vm/VmWorkMockVirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vm/VmWorkMockVirtualMachineManagerImpl.java b/server/test/com/cloud/vm/VmWorkMockVirtualMachineManagerImpl.java
index 0c23220..d4ded07 100644
--- a/server/test/com/cloud/vm/VmWorkMockVirtualMachineManagerImpl.java
+++ b/server/test/com/cloud/vm/VmWorkMockVirtualMachineManagerImpl.java
@@ -179,9 +179,8 @@ public class VmWorkMockVirtualMachineManagerImpl implements VirtualMachineManage
}
@Override
- public void advanceStop(String vmUuid, boolean forced) throws ResourceUnavailableException,
- OperationTimedoutException, ConcurrentOperationException {
- // TODO Auto-generated method stub
+ public Outcome<VirtualMachine> stop(String vmUuid, boolean forced) {
+ return null;
}
@Override