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/07/23 05:06:18 UTC

[1/3] git commit: updated refs/heads/master to 51377c4

Updated Branches:
  refs/heads/master 9f15779f1 -> 51377c40f


Changed virtual machine stop to use uuid


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/5297a071
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/5297a071
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/5297a071

Branch: refs/heads/master
Commit: 5297a071d2c20040878950172b8d0211ac7cb436
Parents: 319d91e
Author: Alex Huang <al...@citrix.com>
Authored: Mon Jul 22 18:24:53 2013 -0700
Committer: Alex Huang <al...@citrix.com>
Committed: Mon Jul 22 20:06:04 2013 -0700

----------------------------------------------------------------------
 .../cloud/entity/api/VMEntityManagerImpl.java   |   9 +-
 .../lb/ElasticLoadBalancerManagerImpl.java      |   7 +-
 .../lb/InternalLoadBalancerVMManagerImpl.java   |   7 +-
 .../InternalLBVMServiceTest.java                |  17 ---
 .../consoleproxy/ConsoleProxyManagerImpl.java   |   8 +-
 .../cloud/ha/HighAvailabilityManagerImpl.java   |  37 +++----
 .../VirtualNetworkApplianceManagerImpl.java     |   7 +-
 .../com/cloud/resource/ResourceManagerImpl.java |  14 +--
 .../com/cloud/server/ManagementServerImpl.java  |  96 ++++++++++-------
 .../storage/StoragePoolAutomationImpl.java      |  66 ++++--------
 .../secondary/SecondaryStorageManagerImpl.java  |   7 +-
 .../src/com/cloud/user/AccountManagerImpl.java  |   6 +-
 server/src/com/cloud/vm/UserVmManagerImpl.java  |   2 +-
 .../src/com/cloud/vm/VirtualMachineManager.java |   6 +-
 .../com/cloud/vm/VirtualMachineManagerImpl.java | 105 +++++++++----------
 .../vm/snapshot/VMSnapshotManagerImpl.java      |   6 +-
 server/test/com/cloud/vm/UserVmManagerTest.java |   3 -
 17 files changed, 174 insertions(+), 229 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5297a071/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java
index aae0962..204b832 100755
--- a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java
@@ -245,17 +245,16 @@ public class VMEntityManagerImpl implements VMEntityManager {
 
     @Override
     public boolean stopvirtualmachine(VMEntityVO vmEntityVO, String caller) throws ResourceUnavailableException {
-
-        VMInstanceVO vm = _vmDao.findByUuid(vmEntityVO.getUuid());
-        return _itMgr.stop(vm, _userDao.findById(new Long(caller)), _accountDao.findById(vm.getAccountId()));
-
+        _itMgr.stop(vmEntityVO.getUuid());
+        return true;
     }
 
     @Override
     public boolean destroyVirtualMachine(VMEntityVO vmEntityVO, String caller) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException{
 
          VMInstanceVO vm = _vmDao.findByUuid(vmEntityVO.getUuid());
-         return _itMgr.destroy(vm, _userDao.findById(new Long(caller)), _accountDao.findById(vm.getAccountId()));
+        _itMgr.destroy(vm.getUuid());
+        return true;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5297a071/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 63663fe..7c0f87b 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
@@ -542,11 +542,8 @@ public class ElasticLoadBalancerManagerImpl extends ManagerBase implements Elast
     private DomainRouterVO stop(DomainRouterVO elbVm, boolean forced, User user, Account caller) throws ConcurrentOperationException, ResourceUnavailableException {
         s_logger.debug("Stopping ELB vm " + elbVm);
         try {
-            if (_itMgr.advanceStop( elbVm, forced, user, caller)) {
-                return _routerDao.findById(elbVm.getId());
-            } else {
-                return null;
-            }
+            _itMgr.advanceStop(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/5297a071/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 a731f56..1799e60 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
@@ -534,11 +534,8 @@ 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 {
-            if (_itMgr.advanceStop(internalLbVm, forced, _accountMgr.getActiveUser(callerUserId), caller)) {
-                return _internalLbVmDao.findById(internalLbVm.getId());
-            } else {
-                return null;
-            }
+            _itMgr.advanceStop(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/5297a071/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java b/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java
index a74f6b0..f6a92dd 100644
--- a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java
+++ b/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java
@@ -36,7 +36,6 @@ import org.apache.cloudstack.network.lb.InternalLoadBalancerVMService;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.OperationTimedoutException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.exception.StorageUnavailableException;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
@@ -44,10 +43,8 @@ import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.router.VirtualRouter.Role;
 import com.cloud.service.ServiceOfferingVO;
 import com.cloud.service.dao.ServiceOfferingDao;
-import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
-import com.cloud.user.User;
 import com.cloud.user.UserVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.component.ComponentContext;
@@ -110,20 +107,6 @@ public class InternalLBVMServiceTest extends TestCase {
         Mockito.when(_domainRouterDao.findById(validVmId)).thenReturn(validVm);
         Mockito.when(_domainRouterDao.findById(nonExistingVmId)).thenReturn(null);
         Mockito.when(_domainRouterDao.findById(nonInternalLbVmId)).thenReturn(nonInternalLbVm);
-        
-        try {
-            Mockito.when(_itMgr.advanceStop(Mockito.any(DomainRouterVO.class), Mockito.any(Boolean.class), Mockito.any(User.class), Mockito.any(Account.class))).thenReturn(true);
-        } catch (ResourceUnavailableException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } catch (OperationTimedoutException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } catch (ConcurrentOperationException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5297a071/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
index 1c31177..e172092 100755
--- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
+++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
@@ -1025,9 +1025,13 @@ public class ConsoleProxyManagerImpl extends ManagerBase implements ConsoleProxy
         }
 
         try {
-            return _itMgr.stop(proxy, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
+            _itMgr.stop(proxy.getUuid());
+            return true;
         } catch (ResourceUnavailableException e) {
-            s_logger.warn("Stopping console proxy " + proxy.getHostName() + " failed : exception " + e.toString());
+            s_logger.warn("Stopping console proxy " + proxy.getHostName() + " failed : exception ", e);
+            return false;
+        } catch (CloudRuntimeException e) {
+            s_logger.warn("Unable to stop proxy ", e);
             return false;
         }
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5297a071/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 896c418..a7e0bd9 100755
--- a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
+++ b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
@@ -286,7 +286,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, true, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
+                _itMgr.advanceStop(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);
@@ -330,7 +330,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
             }
 
             try {
-                _itMgr.advanceStop(vm, true, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
+                _itMgr.advanceStop(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);
@@ -475,7 +475,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
                 }
 
                 try {
-                    _itMgr.advanceStop(vm, true, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
+                    _itMgr.advanceStop(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);
@@ -492,7 +492,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, true, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
+                    _itMgr.advanceStop(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);
@@ -615,11 +615,9 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
             }
 
             if (vm.getHostId() != null) {
-                if (_itMgr.destroy(vm, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount())) {
-                    s_logger.info("Successfully destroy " + vm);
-                    return null;
-                }
-                s_logger.debug("Stop for " + vm + " was unsuccessful.");
+                _itMgr.destroy(vm.getUuid());
+                s_logger.info("Successfully destroy " + vm);
+                return null;
             } else {
                 if (s_logger.isDebugEnabled()) {
                     s_logger.debug(vm + " has already been stopped");
@@ -648,28 +646,25 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
         s_logger.info("Stopping " + vm);
         try {
             if (work.getWorkType() == WorkType.Stop) {
-                if (_itMgr.advanceStop(vm, false, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount())) {
-                    s_logger.info("Successfully stopped " + vm);
-                    return null;
-                }
+                _itMgr.advanceStop(vm.getUuid(), false);
+                s_logger.info("Successfully stopped " + vm);
+                return null;
             } else if (work.getWorkType() == WorkType.CheckStop) {
                 if ((vm.getState() != work.getPreviousState()) || vm.getUpdated() != work.getUpdateTime() || vm.getHostId() == null || vm.getHostId().longValue() != work.getHostId()) {
                     s_logger.info(vm + " is different now.  Scheduled Host: " + work.getHostId() + " Current Host: " + (vm.getHostId() != null ? vm.getHostId() : "none") + " State: " + vm.getState());
                     return null;
                 }
-                if (_itMgr.advanceStop(vm, false, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount())) {
-                    s_logger.info("Stop for " + vm + " was successful");
-                    return null;
-                }
+                _itMgr.advanceStop(vm.getUuid(), false);
+                s_logger.info("Stop for " + vm + " was successful");
+                return null;
             } else if (work.getWorkType() == WorkType.ForceStop) {
                 if ((vm.getState() != work.getPreviousState()) || vm.getUpdated() != work.getUpdateTime() || vm.getHostId() == null || vm.getHostId().longValue() != work.getHostId()) {
                     s_logger.info(vm + " is different now.  Scheduled Host: " + work.getHostId() + " Current Host: " + (vm.getHostId() != null ? vm.getHostId() : "none") + " State: " + vm.getState());
                     return null;
                 }
-                if (_itMgr.advanceStop(vm, true, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount())) {
-                    s_logger.info("Stop for " + vm + " was successful");
-                    return null;
-                }
+                _itMgr.advanceStop(vm.getUuid(), true);
+                s_logger.info("Stop for " + vm + " was successful");
+                return null;
             } else {
                 assert false : "Who decided there's other steps but didn't modify the guy who does the work?";
             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5297a071/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 89db3c2..4859f0d 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -2755,11 +2755,8 @@ 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 {
-            if (_itMgr.advanceStop((DomainRouterVO) router, forced, user, caller)) {
-                return _routerDao.findById(router.getId());
-            } else {
-                return null;
-            }
+            _itMgr.advanceStop(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/5297a071/server/src/com/cloud/resource/ResourceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java
index 830aaa1..342b9fd 100755
--- a/server/src/com/cloud/resource/ResourceManagerImpl.java
+++ b/server/src/com/cloud/resource/ResourceManagerImpl.java
@@ -2043,8 +2043,6 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
             s_logger.debug("Deleting Host: " + host.getId() + " Guid:" + host.getGuid());
         }
 
-        User caller = _accountMgr.getActiveUser(CallContext.current().getCallingUserId());
-
         if (forceDestroyStorage) {
             // put local storage into mainenance mode, will set all the VMs on
             // this local storage into stopped state
@@ -2067,11 +2065,7 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
                 List<VMInstanceVO> vmsOnLocalStorage = _storageMgr.listByStoragePool(storagePool.getId());
                 for (VMInstanceVO vm : vmsOnLocalStorage) {
                     try {
-                        if (!_vmMgr.destroy(vm, caller, _accountMgr.getAccount(vm.getAccountId()))) {
-                            String errorMsg = "There was an error Destory the vm: " + vm + " as a part of hostDelete id=" + host.getId();
-                            s_logger.warn(errorMsg);
-                            throw new UnableDeleteHostException(errorMsg);
-                        }
+                        _vmMgr.destroy(vm.getUuid());
                     } catch (Exception e) {
                         String errorMsg = "There was an error Destory the vm: " + vm + " as a part of hostDelete id=" + host.getId();
                         s_logger.debug(errorMsg, e);
@@ -2090,11 +2084,7 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
                         if (!vm.isHaEnabled() || vm.getState() == State.Stopping) {
                             s_logger.debug("Stopping vm: " + vm + " as a part of deleteHost id=" + host.getId());
                             try {
-                                if (!_vmMgr.advanceStop(vm, true, caller, _accountMgr.getAccount(vm.getAccountId()))) {
-                                    String errorMsg = "There was an error stopping the vm: " + vm + " as a part of hostDelete id=" + host.getId();
-                                    s_logger.warn(errorMsg);
-                                    throw new UnableDeleteHostException(errorMsg);
-                                }
+                                _vmMgr.advanceStop(vm.getUuid(), false);
                             } catch (Exception e) {
                                 String errorMsg = "There was an error stopping the vm: " + vm + " as a part of hostDelete id=" + host.getId();
                                 s_logger.debug(errorMsg, e);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5297a071/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 23e2ca1..7ac1254 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -39,23 +39,15 @@ import javax.crypto.spec.SecretKeySpec;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import com.cloud.exception.*;
-import com.cloud.vm.*;
-
-import org.apache.cloudstack.acl.ControlledEntity;
-import org.apache.cloudstack.acl.SecurityChecker.AccessType;
-import org.apache.cloudstack.api.ApiConstants;
-
-import com.cloud.event.ActionEventUtils;
-
-import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd;
-import org.apache.cloudstack.api.command.admin.region.*;
-
 import org.apache.commons.codec.binary.Base64;
 import org.apache.log4j.Logger;
 
+import org.apache.cloudstack.acl.ControlledEntity;
+import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 import org.apache.cloudstack.affinity.AffinityGroupProcessor;
 import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd;
 import org.apache.cloudstack.api.command.admin.account.CreateAccountCmd;
 import org.apache.cloudstack.api.command.admin.account.DeleteAccountCmd;
 import org.apache.cloudstack.api.command.admin.account.DisableAccountCmd;
@@ -69,6 +61,7 @@ import org.apache.cloudstack.api.command.admin.cluster.DeleteClusterCmd;
 import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd;
 import org.apache.cloudstack.api.command.admin.cluster.UpdateClusterCmd;
 import org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd;
+import org.apache.cloudstack.api.command.admin.config.ListDeploymentPlannersCmd;
 import org.apache.cloudstack.api.command.admin.config.ListHypervisorCapabilitiesCmd;
 import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd;
 import org.apache.cloudstack.api.command.admin.config.UpdateHypervisorCapabilitiesCmd;
@@ -129,6 +122,12 @@ import org.apache.cloudstack.api.command.admin.pod.CreatePodCmd;
 import org.apache.cloudstack.api.command.admin.pod.DeletePodCmd;
 import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd;
 import org.apache.cloudstack.api.command.admin.pod.UpdatePodCmd;
+import org.apache.cloudstack.api.command.admin.region.AddRegionCmd;
+import org.apache.cloudstack.api.command.admin.region.CreatePortableIpRangeCmd;
+import org.apache.cloudstack.api.command.admin.region.DeletePortableIpRangeCmd;
+import org.apache.cloudstack.api.command.admin.region.ListPortableIpRangesCmd;
+import org.apache.cloudstack.api.command.admin.region.RemoveRegionCmd;
+import org.apache.cloudstack.api.command.admin.region.UpdateRegionCmd;
 import org.apache.cloudstack.api.command.admin.resource.ArchiveAlertsCmd;
 import org.apache.cloudstack.api.command.admin.resource.CleanVMReservationsCmd;
 import org.apache.cloudstack.api.command.admin.resource.DeleteAlertsCmd;
@@ -159,7 +158,14 @@ import org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd;
 import org.apache.cloudstack.api.command.admin.storage.ListStorageProvidersCmd;
 import org.apache.cloudstack.api.command.admin.storage.PreparePrimaryStorageForMaintenanceCmd;
 import org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd;
-import org.apache.cloudstack.api.command.admin.systemvm.*;
+import org.apache.cloudstack.api.command.admin.systemvm.DestroySystemVmCmd;
+import org.apache.cloudstack.api.command.admin.systemvm.ListSystemVMsCmd;
+import org.apache.cloudstack.api.command.admin.systemvm.MigrateSystemVMCmd;
+import org.apache.cloudstack.api.command.admin.systemvm.RebootSystemVmCmd;
+import org.apache.cloudstack.api.command.admin.systemvm.ScaleSystemVMCmd;
+import org.apache.cloudstack.api.command.admin.systemvm.StartSystemVMCmd;
+import org.apache.cloudstack.api.command.admin.systemvm.StopSystemVmCmd;
+import org.apache.cloudstack.api.command.admin.systemvm.UpgradeSystemVMCmd;
 import org.apache.cloudstack.api.command.admin.template.PrepareTemplateCmd;
 import org.apache.cloudstack.api.command.admin.usage.AddTrafficMonitorCmd;
 import org.apache.cloudstack.api.command.admin.usage.AddTrafficTypeCmd;
@@ -309,8 +315,8 @@ import org.apache.cloudstack.api.command.user.region.ha.gslb.AssignToGlobalLoadB
 import org.apache.cloudstack.api.command.user.region.ha.gslb.CreateGlobalLoadBalancerRuleCmd;
 import org.apache.cloudstack.api.command.user.region.ha.gslb.DeleteGlobalLoadBalancerRuleCmd;
 import org.apache.cloudstack.api.command.user.region.ha.gslb.ListGlobalLoadBalancerRuleCmd;
-import org.apache.cloudstack.api.command.user.region.ha.gslb.UpdateGlobalLoadBalancerRuleCmd;
 import org.apache.cloudstack.api.command.user.region.ha.gslb.RemoveFromGlobalLoadBalancerRuleCmd;
+import org.apache.cloudstack.api.command.user.region.ha.gslb.UpdateGlobalLoadBalancerRuleCmd;
 import org.apache.cloudstack.api.command.user.resource.GetCloudIdentifierCmd;
 import org.apache.cloudstack.api.command.user.resource.ListHypervisorsCmd;
 import org.apache.cloudstack.api.command.user.resource.ListResourceLimitsCmd;
@@ -372,7 +378,19 @@ import org.apache.cloudstack.api.command.user.vmsnapshot.CreateVMSnapshotCmd;
 import org.apache.cloudstack.api.command.user.vmsnapshot.DeleteVMSnapshotCmd;
 import org.apache.cloudstack.api.command.user.vmsnapshot.ListVMSnapshotCmd;
 import org.apache.cloudstack.api.command.user.vmsnapshot.RevertToVMSnapshotCmd;
-import org.apache.cloudstack.api.command.user.volume.*;
+import org.apache.cloudstack.api.command.user.volume.AddResourceDetailCmd;
+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.DeleteVolumeCmd;
+import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd;
+import org.apache.cloudstack.api.command.user.volume.ExtractVolumeCmd;
+import org.apache.cloudstack.api.command.user.volume.ListResourceDetailsCmd;
+import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd;
+import org.apache.cloudstack.api.command.user.volume.MigrateVolumeCmd;
+import org.apache.cloudstack.api.command.user.volume.RemoveResourceDetailCmd;
+import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd;
+import org.apache.cloudstack.api.command.user.volume.UpdateVolumeCmd;
+import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd;
 import org.apache.cloudstack.api.command.user.vpc.CreateStaticRouteCmd;
 import org.apache.cloudstack.api.command.user.vpc.CreateVPCCmd;
 import org.apache.cloudstack.api.command.user.vpc.DeleteStaticRouteCmd;
@@ -401,6 +419,7 @@ import org.apache.cloudstack.api.command.user.vpn.RemoveVpnUserCmd;
 import org.apache.cloudstack.api.command.user.vpn.ResetVpnConnectionCmd;
 import org.apache.cloudstack.api.command.user.vpn.UpdateVpnCustomerGatewayCmd;
 import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
@@ -451,9 +470,17 @@ import com.cloud.deploy.DeploymentPlanningManager;
 import com.cloud.domain.DomainVO;
 import com.cloud.domain.dao.DomainDao;
 import com.cloud.event.ActionEvent;
+import com.cloud.event.ActionEventUtils;
 import com.cloud.event.EventTypes;
 import com.cloud.event.EventVO;
 import com.cloud.event.dao.EventDao;
+import com.cloud.exception.ConcurrentOperationException;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.exception.ManagementServerException;
+import com.cloud.exception.OperationTimedoutException;
+import com.cloud.exception.PermissionDeniedException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.exception.VirtualMachineMigrationException;
 import com.cloud.ha.HighAvailabilityManager;
 import com.cloud.host.DetailVO;
 import com.cloud.host.Host;
@@ -491,9 +518,9 @@ import com.cloud.storage.GuestOSCategoryVO;
 import com.cloud.storage.GuestOSVO;
 import com.cloud.storage.GuestOsCategory;
 import com.cloud.storage.Storage.ImageFormat;
+import com.cloud.storage.Storage.TemplateType;
 import com.cloud.storage.StorageManager;
 import com.cloud.storage.StoragePool;
-import com.cloud.storage.Storage.TemplateType;
 import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.Volume;
 import com.cloud.storage.VolumeManager;
@@ -542,7 +569,18 @@ import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.net.MacAddress;
 import com.cloud.utils.net.NetUtils;
 import com.cloud.utils.ssh.SSHKeysHelper;
+import com.cloud.vm.ConsoleProxyVO;
+import com.cloud.vm.DiskProfile;
+import com.cloud.vm.InstanceGroupVO;
+import com.cloud.vm.SecondaryStorageVmVO;
+import com.cloud.vm.UserVmManager;
+import com.cloud.vm.UserVmVO;
+import com.cloud.vm.VMInstanceVO;
+import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachine.State;
+import com.cloud.vm.VirtualMachineManager;
+import com.cloud.vm.VirtualMachineProfile;
+import com.cloud.vm.VirtualMachineProfileImpl;
 import com.cloud.vm.dao.ConsoleProxyDao;
 import com.cloud.vm.dao.DomainRouterDao;
 import com.cloud.vm.dao.InstanceGroupDao;
@@ -553,12 +591,6 @@ import com.cloud.vm.dao.VMInstanceDao;
 import edu.emory.mathcs.backport.java.util.Arrays;
 import edu.emory.mathcs.backport.java.util.Collections;
 
-import org.apache.cloudstack.api.command.admin.region.AddRegionCmd;
-import org.apache.cloudstack.api.command.admin.region.RemoveRegionCmd;
-import org.apache.cloudstack.api.command.admin.region.UpdateRegionCmd;
-import org.apache.cloudstack.api.command.admin.config.ListDeploymentPlannersCmd;
-import org.apache.cloudstack.context.CallContext;
-
 
 public class ManagementServerImpl extends ManagerBase implements ManagementServer {
     public static final Logger s_logger = Logger.getLogger(ManagementServerImpl.class.getName());
@@ -725,7 +757,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
         return _affinityProcessors;
     }
     public void setAffinityGroupProcessors(List<AffinityGroupProcessor> affinityProcessors) {
-        this._affinityProcessors = affinityProcessors;
+        _affinityProcessors = affinityProcessors;
     }
 
     public ManagementServerImpl() {
@@ -1272,7 +1304,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
             storagePools.remove(srcVolumePool);
             for (StoragePoolVO pool : storagePools) {
                 if (pool.isShared()) {
-                    allPools.add((StoragePool)this.dataStoreMgr.getPrimaryDataStore(pool.getId()));
+                    allPools.add((StoragePool)dataStoreMgr.getPrimaryDataStore(pool.getId()));
                 }
             }
 
@@ -2060,12 +2092,8 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     private ConsoleProxyVO stopConsoleProxy(VMInstanceVO systemVm, boolean isForced) throws ResourceUnavailableException, OperationTimedoutException,
     ConcurrentOperationException {
 
-        User caller = _userDao.findById(CallContext.current().getCallingUserId());
-
-        if (_itMgr.advanceStop(systemVm, isForced, caller, CallContext.current().getCallingAccount())) {
-            return _consoleProxyDao.findById(systemVm.getId());
-        }
-        return null;
+        _itMgr.advanceStop(systemVm.getUuid(), isForced);
+        return _consoleProxyDao.findById(systemVm.getId());
     }
 
     @ActionEvent(eventType = EventTypes.EVENT_PROXY_REBOOT, eventDescription = "rebooting console proxy Vm", async = true)
@@ -2949,12 +2977,8 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     private SecondaryStorageVmVO stopSecondaryStorageVm(VMInstanceVO systemVm, boolean isForced) throws ResourceUnavailableException,
     OperationTimedoutException, ConcurrentOperationException {
 
-        User caller = _userDao.findById(CallContext.current().getCallingUserId());
-
-        if (_itMgr.advanceStop(systemVm, isForced, caller, CallContext.current().getCallingAccount())) {
-            return _secStorageVmDao.findById(systemVm.getId());
-        }
-        return null;
+        _itMgr.advanceStop(systemVm.getUuid(), isForced);
+        return _secStorageVmDao.findById(systemVm.getId());
     }
 
     @ActionEvent(eventType = EventTypes.EVENT_SSVM_REBOOT, eventDescription = "rebooting secondary storage Vm", async = true)

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5297a071/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 7b93103..f0f6eaf 100644
--- a/server/src/com/cloud/storage/StoragePoolAutomationImpl.java
+++ b/server/src/com/cloud/storage/StoragePoolAutomationImpl.java
@@ -234,19 +234,11 @@ public class StoragePoolAutomationImpl implements StoragePoolAutomation {
                 if (vmInstance.getType().equals(
                         VirtualMachine.Type.ConsoleProxy)) {
                     // call the consoleproxymanager
-                    ConsoleProxyVO consoleProxy = _consoleProxyDao
-                            .findById(vmInstance.getId());
-                    if (!vmMgr.advanceStop(consoleProxy, true, user, account)) {
-                        String errorMsg = "There was an error stopping the console proxy id: "
-                                + vmInstance.getId()
-                                + " ,cannot enable storage maintenance";
-                        s_logger.warn(errorMsg);
-                        throw new CloudRuntimeException(errorMsg);
-                    } else {
-                        // update work status
-                        work.setStoppedForMaintenance(true);
-                        _storagePoolWorkDao.update(work.getId(), work);
-                    }
+                    ConsoleProxyVO consoleProxy = _consoleProxyDao.findById(vmInstance.getId());
+                    vmMgr.advanceStop(consoleProxy.getUuid(), false);
+                    // update work status
+                    work.setStoppedForMaintenance(true);
+                    _storagePoolWorkDao.update(work.getId(), work);
 
                     if (restart) {
 
@@ -260,36 +252,21 @@ public class StoragePoolAutomationImpl implements StoragePoolAutomation {
                 // if the instance is of type uservm, call the user vm manager
                 if (vmInstance.getType() == VirtualMachine.Type.User) {
                     UserVmVO userVm = userVmDao.findById(vmInstance.getId());
-                    if (!vmMgr.advanceStop(userVm, true, user, account)) {
-                        String errorMsg = "There was an error stopping the user vm id: "
-                                + vmInstance.getId()
-                                + " ,cannot enable storage maintenance";
-                        s_logger.warn(errorMsg);
-                        throw new CloudRuntimeException(errorMsg);
-                    } else {
-                        // update work status
-                        work.setStoppedForMaintenance(true);
-                        _storagePoolWorkDao.update(work.getId(), work);
-                    }
+                    vmMgr.advanceStop(userVm.getUuid(), false);
+                    // update work status
+                    work.setStoppedForMaintenance(true);
+                    _storagePoolWorkDao.update(work.getId(), work);
                 }
 
                 // if the instance is of type secondary storage vm, call the
                 // secondary storage vm manager
                 if (vmInstance.getType().equals(
                         VirtualMachine.Type.SecondaryStorageVm)) {
-                    SecondaryStorageVmVO secStrgVm = _secStrgDao
-                            .findById(vmInstance.getId());
-                    if (!vmMgr.advanceStop(secStrgVm, true, user, account)) {
-                        String errorMsg = "There was an error stopping the ssvm id: "
-                                + vmInstance.getId()
-                                + " ,cannot enable storage maintenance";
-                        s_logger.warn(errorMsg);
-                        throw new CloudRuntimeException(errorMsg);
-                    } else {
-                        // update work status
-                        work.setStoppedForMaintenance(true);
-                        _storagePoolWorkDao.update(work.getId(), work);
-                    }
+                    SecondaryStorageVmVO secStrgVm = _secStrgDao.findById(vmInstance.getId());
+                    vmMgr.advanceStop(secStrgVm.getUuid(), false);
+                    // update work status
+                    work.setStoppedForMaintenance(true);
+                    _storagePoolWorkDao.update(work.getId(), work);
 
                     if (restart) {
                         vmMgr.advanceStart(secStrgVm.getUuid(), null);
@@ -304,17 +281,10 @@ public class StoragePoolAutomationImpl implements StoragePoolAutomation {
                 if (vmInstance.getType().equals(
                         VirtualMachine.Type.DomainRouter)) {
                     DomainRouterVO domR = _domrDao.findById(vmInstance.getId());
-                    if (!vmMgr.advanceStop(domR, true, user, account)) {
-                        String errorMsg = "There was an error stopping the domain router id: "
-                                + vmInstance.getId()
-                                + " ,cannot enable primary storage maintenance";
-                        s_logger.warn(errorMsg);
-                        throw new CloudRuntimeException(errorMsg);
-                    } else {
-                        // update work status
-                        work.setStoppedForMaintenance(true);
-                        _storagePoolWorkDao.update(work.getId(), work);
-                    }
+                    vmMgr.advanceStop(domR.getUuid(), false);
+                    // update work status
+                    work.setStoppedForMaintenance(true);
+                    _storagePoolWorkDao.update(work.getId(), work);
 
                     if (restart) {
                         vmMgr.advanceStart(domR.getUuid(), null);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5297a071/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
index 127a824..56b8dba 100755
--- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
+++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
@@ -905,11 +905,8 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar
                 try {
                     if (secStorageVmLock.lock(ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_SYNC)) {
                         try {
-                            boolean result = _itMgr.stop(secStorageVm, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
-                            if (result) {
-                            }
-
-                            return result;
+                            _itMgr.stop(secStorageVm.getUuid());
+                            return true;
                         } finally {
                             secStorageVmLock.unlock();
                         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5297a071/server/src/com/cloud/user/AccountManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java
index 512f913..53e3f51 100755
--- a/server/src/com/cloud/user/AccountManagerImpl.java
+++ b/server/src/com/cloud/user/AccountManagerImpl.java
@@ -822,11 +822,11 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
             try {
                 try {
                     if (vm.getType() == Type.User) {
-                        success = (success && _itMgr.advanceStop(_userVmDao.findById(vm.getId()), false, getSystemUser(), getSystemAccount()));
+                        _itMgr.advanceStop(vm.getUuid(), false);
                     } else if (vm.getType() == Type.DomainRouter) {
-                        success = (success && _itMgr.advanceStop(_routerDao.findById(vm.getId()), false, getSystemUser(), getSystemAccount()));
+                        _itMgr.advanceStop(vm.getUuid(), false);
                     } else {
-                        success = (success && _itMgr.advanceStop(vm, false, getSystemUser(), getSystemAccount()));
+                        _itMgr.advanceStop(vm.getUuid(), false);
                     }
                 } catch (OperationTimedoutException ote) {
                     s_logger.warn("Operation for stopping vm timed out, unable to stop vm " + vm.getHostName(), ote);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5297a071/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index 0805e6c..ca1c232 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -4523,7 +4523,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
 
         if (needRestart) {
             try {
-                _itMgr.stop(vm, user, caller);
+                _itMgr.stop(vm.getUuid());
             } catch (ResourceUnavailableException e) {
                 s_logger.debug("Stop vm " + vm.getUuid() + " failed", e);
                 CloudRuntimeException ex = new CloudRuntimeException(

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5297a071/server/src/com/cloud/vm/VirtualMachineManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachineManager.java b/server/src/com/cloud/vm/VirtualMachineManager.java
index 6abb91b..cf0ede2 100644
--- a/server/src/com/cloud/vm/VirtualMachineManager.java
+++ b/server/src/com/cloud/vm/VirtualMachineManager.java
@@ -76,7 +76,7 @@ public interface VirtualMachineManager extends Manager {
 
     void start(String vmUuid, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlan planToDeploy);
 
-    <T extends VMInstanceVO> boolean stop(T vm, User caller, Account account) throws ResourceUnavailableException;
+    void stop(String vmUuid) throws ResourceUnavailableException;
 
     <T extends VMInstanceVO> boolean expunge(T vm, User caller, Account account) throws ResourceUnavailableException;
 
@@ -90,13 +90,13 @@ public interface VirtualMachineManager extends Manager {
     void advanceStart(String vmUuid, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlan planToDeploy) throws InsufficientCapacityException,
             ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException;
 
-    <T extends VMInstanceVO> boolean advanceStop(T vm, boolean forced, User caller, Account account) throws ResourceUnavailableException, OperationTimedoutException, ConcurrentOperationException;
+    void advanceStop(String vmUuid, boolean cleanupEvenIfUnableToStop) throws ResourceUnavailableException, OperationTimedoutException, ConcurrentOperationException;
 
     <T extends VMInstanceVO> boolean advanceExpunge(T vm, User caller, Account account) throws ResourceUnavailableException, OperationTimedoutException, ConcurrentOperationException;
 
     <T extends VMInstanceVO> boolean remove(T vm, User caller, Account account);
 
-    <T extends VMInstanceVO> boolean destroy(T vm, User caller, Account account) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException;
+    void destroy(String vmUuid) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException;
 
     boolean migrateAway(VirtualMachine.Type type, long vmid, long hostId) throws InsufficientServerCapacityException, VirtualMachineMigrationException;
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5297a071/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
index 413bcb0..88fb41d 100755
--- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -444,11 +444,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
             return true;
         }
 
-        if (!this.advanceStop(vm, false, caller, account)) {
-            if (s_logger.isDebugEnabled()) {
-                s_logger.debug("Unable to stop the VM so we can't expunge it.");
-            }
-        }
+        advanceStop(vm, false);
 
         try {
             if (!stateTransitTo(vm, VirtualMachine.Event.ExpungeOperation, vm.getHostId())) {
@@ -1014,10 +1010,10 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                         _workDao.updateStep(work, Step.Release);
                         // If previous step was started/ing && we got a valid answer
                         if((prevStep == Step.Started || prevStep == Step.Starting) && (startAnswer != null && startAnswer.getResult())){  //TODO check the response of cleanup and record it in DB for retry
-                            cleanup(vmGuru, vmProfile, work, Event.OperationFailed, false, caller, account);
+                            cleanup(vmGuru, vmProfile, work, Event.OperationFailed, false);
                         } else {
                             //if step is not starting/started, send cleanup command with force=true
-                            cleanup(vmGuru, vmProfile, work, Event.OperationFailed, true, caller, account);
+                            cleanup(vmGuru, vmProfile, work, Event.OperationFailed, true);
                         }
                     }
                 }
@@ -1045,11 +1041,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
     }
 
     @Override
-    public <T extends VMInstanceVO> boolean stop(T vm, User user, Account account) throws ResourceUnavailableException {
+    public void stop(String vmUuid) throws ResourceUnavailableException {
         try {
-            return advanceStop(vm, false, user, account);
+            advanceStop(vmUuid, false);
         } catch (OperationTimedoutException e) {
-            throw new AgentUnavailableException("Unable to stop vm because the operation to stop timed out", vm.getHostId(), e);
+            throw new AgentUnavailableException("Unable to stop vm because the operation to stop timed out", e.getAgentId(), e);
         } catch (ConcurrentOperationException e) {
             throw new CloudRuntimeException("Unable to stop vm because of a concurrent operation", e);
         }
@@ -1079,20 +1075,20 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         return true;
     }
 
-    protected boolean cleanup(VirtualMachineGuru guru, VirtualMachineProfile profile, ItWorkVO work, Event event, boolean force, User user, Account account) {
+    protected boolean cleanup(VirtualMachineGuru guru, VirtualMachineProfile profile, ItWorkVO work, Event event, boolean cleanUpEvenIfUnableToStop) {
         VirtualMachine vm = profile.getVirtualMachine();
         State state = vm.getState();
         s_logger.debug("Cleaning up resources for the vm " + vm + " in " + state + " state");
         if (state == State.Starting) {
             Step step = work.getStep();
-            if (step == Step.Starting && !force) {
+            if (step == Step.Starting && !cleanUpEvenIfUnableToStop) {
                 s_logger.warn("Unable to cleanup vm " + vm + "; work state is incorrect: " + step);
                 return false;
             }
 
             if (step == Step.Started || step == Step.Starting || step == Step.Release) {
                 if (vm.getHostId() != null) {
-                    if (!sendStop(guru, profile, force)) {
+                    if (!sendStop(guru, profile, cleanUpEvenIfUnableToStop)) {
                         s_logger.warn("Failed to stop vm " + vm + " in " + State.Starting + " state as a part of cleanup process");
                         return false;
                     }
@@ -1105,33 +1101,33 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
             }
         } else if (state == State.Stopping) {
             if (vm.getHostId() != null) {
-                if (!sendStop(guru, profile, force)) {
+                if (!sendStop(guru, profile, cleanUpEvenIfUnableToStop)) {
                     s_logger.warn("Failed to stop vm " + vm + " in " + State.Stopping + " state as a part of cleanup process");
                     return false;
                 }
             }
         } else if (state == State.Migrating) {
             if (vm.getHostId() != null) {
-                if (!sendStop(guru, profile, force)) {
+                if (!sendStop(guru, profile, cleanUpEvenIfUnableToStop)) {
                     s_logger.warn("Failed to stop vm " + vm + " in " + State.Migrating + " state as a part of cleanup process");
                     return false;
                 }
             }
             if (vm.getLastHostId() != null) {
-                if (!sendStop(guru, profile, force)) {
+                if (!sendStop(guru, profile, cleanUpEvenIfUnableToStop)) {
                     s_logger.warn("Failed to stop vm " + vm + " in " + State.Migrating + " state as a part of cleanup process");
                     return false;
                 }
             }
         } else if (state == State.Running) {
-            if (!sendStop(guru, profile, force)) {
+            if (!sendStop(guru, profile, cleanUpEvenIfUnableToStop)) {
                 s_logger.warn("Failed to stop vm " + vm + " in " + State.Running + " state as a part of cleanup process");
                 return false;
             }
         }
 
         try {
-            _networkMgr.release(profile, force);
+            _networkMgr.release(profile, cleanUpEvenIfUnableToStop);
             s_logger.debug("Successfully released network resources for the vm " + vm);
         } catch (Exception e) {
             s_logger.warn("Unable to release some network resources.", e);
@@ -1143,20 +1139,23 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
     }
 
     @Override
-    public <T extends VMInstanceVO> boolean advanceStop(T vm, boolean forced, User user, Account account) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException {
+    public void advanceStop(String vmUuid, boolean cleanUpEvenIfUnableToStop) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException {
+    }
+
+    private void advanceStop(VMInstanceVO vm, boolean cleanUpEvenIfUnableToStop) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException {
         State state = vm.getState();
         if (state == State.Stopped) {
             if (s_logger.isDebugEnabled()) {
                 s_logger.debug("VM is already stopped: " + vm);
             }
-            return true;
+            return;
         }
 
         if (state == State.Destroyed || state == State.Expunging || state == State.Error) {
             if (s_logger.isDebugEnabled()) {
                 s_logger.debug("Stopped called on " + vm + " but the state is " + state);
             }
-            return true;
+            return;
         }
         // grab outstanding work item if any
         ItWorkVO work = _workDao.findByOutstandingWork(vm.getId(), vm.getState());
@@ -1167,11 +1166,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         }
         Long hostId = vm.getHostId();
         if (hostId == null) {
-            if (!forced) {
+            if (!cleanUpEvenIfUnableToStop) {
                 if (s_logger.isDebugEnabled()) {
                     s_logger.debug("HostId is null but this is not a forced stop, cannot stop vm " + vm + " with state:" + vm.getState());
                 }
-                return false;
+                throw new CloudRuntimeException("Unable to stop " + vm);
             }
             try {
                 stateTransitTo(vm, Event.AgentReportStopped, null, null);
@@ -1186,7 +1185,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                 work.setStep(Step.Done);
                 _workDao.update(work.getId(), work);
             }
-            return true;
+            return;
         }
 
         VirtualMachineGuru vmGuru = getVmGuru(vm);
@@ -1197,7 +1196,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                 throw new ConcurrentOperationException("VM is being operated on.");
             }
         } catch (NoTransitionException e1) {
-            if (!forced) {
+            if (!cleanUpEvenIfUnableToStop) {
                 throw new CloudRuntimeException("We cannot stop " + vm + " when it is in state " + vm.getState());
             }
             boolean doCleanup = false;
@@ -1218,15 +1217,17 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
             }
 
             if (doCleanup) {
-                if (cleanup(vmGuru, new VirtualMachineProfileImpl(vm), work, Event.StopRequested, forced, user, account)) {
+                if (cleanup(vmGuru, new VirtualMachineProfileImpl(vm), work, Event.StopRequested, cleanUpEvenIfUnableToStop)) {
                     try {
                         if (s_logger.isDebugEnabled()) {
                             s_logger.debug("Updating work item to Done, id:" + work.getId());
                         }
-                        return changeState(vm, Event.AgentReportStopped, null, work, Step.Done);
+                        if (!changeState(vm, Event.AgentReportStopped, null, work, Step.Done)) {
+                            throw new CloudRuntimeException("Unable to stop " + vm);
+                        }
                     } catch (NoTransitionException e) {
                         s_logger.warn("Unable to cleanup " + vm);
-                        return false;
+                        throw new CloudRuntimeException("Unable to stop " + vm, e);
                     }
                 } else {
                     if (s_logger.isDebugEnabled()) {
@@ -1271,14 +1272,14 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
             throw e;
         } finally {
             if (!stopped) {
-                if (!forced) {
+                if (!cleanUpEvenIfUnableToStop) {
                     s_logger.warn("Unable to stop vm " + vm);
                     try {
                         stateTransitTo(vm, Event.OperationFailed, vm.getHostId());
                     } catch (NoTransitionException e) {
                         s_logger.warn("Unable to transition the state " + vm);
                     }
-                    return false;
+                    throw new CloudRuntimeException("Unable to stop " + vm);
                 } else {
                     s_logger.warn("Unable to actually stop " + vm + " but continue with release because it's a force stop");
                     vmGuru.finalizeStop(profile, answer);
@@ -1291,7 +1292,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         }
 
         try {
-            _networkMgr.release(profile, forced);
+            _networkMgr.release(profile, cleanUpEvenIfUnableToStop);
             s_logger.debug("Successfully released network resources for the vm " + vm);
         } catch (Exception e) {
             s_logger.warn("Unable to release some network resources.", e);
@@ -1315,10 +1316,12 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                 _workDao.update(work.getId(), work);
             }
 
-            return stateTransitTo(vm, Event.OperationSucceeded, null);
+            if (!stateTransitTo(vm, Event.OperationSucceeded, null)) {
+                throw new CloudRuntimeException("unable to stop " + vm);
+            }
         } catch (NoTransitionException e) {
             s_logger.warn(e.getMessage());
-            return false;
+            throw new CloudRuntimeException("Unable to stop " + vm);
         }
     }
 
@@ -1358,38 +1361,35 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
     }
 
     @Override
-    public <T extends VMInstanceVO> boolean destroy(T vm, User user, Account caller) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException {
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Destroying vm " + vm);
-        }
+    public void destroy(String vmUuid) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException {
+        VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
         if (vm == null || vm.getState() == State.Destroyed || vm.getState() == State.Expunging || vm.getRemoved() != null) {
             if (s_logger.isDebugEnabled()) {
                 s_logger.debug("Unable to find vm or vm is destroyed: " + vm);
             }
-            return true;
+            return;
         }
 
-        if (!advanceStop(vm, _forceStop, user, caller)) {
-            s_logger.debug("Unable to stop " + vm);
-            return false;
+        if (s_logger.isDebugEnabled()) {
+            s_logger.debug("Destroying vm " + vm);
         }
 
+        advanceStop(vm, _forceStop);
+
         if (!_vmSnapshotMgr.deleteAllVMSnapshots(vm.getId(),null)){
             s_logger.debug("Unable to delete all snapshots for " + vm);
-            return false;
+            throw new CloudRuntimeException("Unable to delete vm snapshots for " + vm);
         }
 
         try {
             if (!stateTransitTo(vm, VirtualMachine.Event.DestroyRequested, vm.getHostId())) {
                 s_logger.debug("Unable to destroy the vm because it is not in the correct state: " + vm);
-                return false;
+                throw new CloudRuntimeException("Unable to destroy " + vm);
             }
         } catch (NoTransitionException e) {
             s_logger.debug(e.getMessage());
-            return false;
+            throw new CloudRuntimeException("Unable to destroy " + vm, e);
         }
-
-        return true;
     }
 
     //list all the nics which belong to this vm and are the last nics  in the subnets.
@@ -1605,7 +1605,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                     } catch (AgentUnavailableException e) {
                         s_logger.error("AgentUnavailableException while cleanup on source host: " + srcHostId);
                     }
-                    cleanup(vmGuru, new VirtualMachineProfileImpl(vm), work, Event.AgentReportStopped, true, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
+                    cleanup(vmGuru, new VirtualMachineProfileImpl(vm), work, Event.AgentReportStopped, true);
                     return null;
                 }
             } catch (OperationTimedoutException e) {
@@ -1791,8 +1791,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                     } catch (AgentUnavailableException e) {
                         s_logger.error("AgentUnavailableException while cleanup on source host: " + srcHostId);
                     }
-                    cleanup(vmGuru, new VirtualMachineProfileImpl(vm), work, Event.AgentReportStopped, true,
-                            _accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
+                    cleanup(vmGuru, new VirtualMachineProfileImpl(vm), work, Event.AgentReportStopped, true);
                     return null;
                 }
             } catch (OperationTimedoutException e) {
@@ -1935,8 +1934,8 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                 return true;
             }
             try {
-                boolean result = advanceStop(vm, true, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
-                return result;
+                advanceStop(vm, true);
+                return true;
             } catch (ResourceUnavailableException e) {
                 s_logger.debug("Unable to stop VM due to " + e.getMessage());
             } catch (ConcurrentOperationException e) {
@@ -2461,7 +2460,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         if (agentState == State.Shutdowned) {
             if (serverState == State.Running || serverState == State.Starting || serverState == State.Stopping) {
                 try {
-                    advanceStop(vm, true, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
+                    advanceStop(vm, true);
                 } catch (AgentUnavailableException e) {
                     assert (false) : "How do we hit this with forced on?";
                     return null;
@@ -3241,7 +3240,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                     } catch (AgentUnavailableException e) {
                         s_logger.error("AgentUnavailableException while cleanup on source host: " + srcHostId);
                     }
-                    cleanup(vmGuru, new VirtualMachineProfileImpl(vm), work, Event.AgentReportStopped, true, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
+                    cleanup(vmGuru, new VirtualMachineProfileImpl(vm), work, Event.AgentReportStopped, true);
                     return null;
                 }
             } catch (OperationTimedoutException e) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5297a071/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 b072318..5fea480 100644
--- a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
+++ b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
@@ -74,7 +74,6 @@ import com.cloud.storage.dao.SnapshotDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
-import com.cloud.user.UserVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.UserDao;
 import com.cloud.uservm.UserVm;
@@ -664,11 +663,8 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
                     "VM Snapshot reverting failed due to vm snapshot is not in the state of Created.");
         }
 
-        UserVO callerUser = _userDao.findById(CallContext.current().getCallingUserId());
-        
         UserVmVO vm = null;
         Long hostId = null;
-        Account owner = _accountDao.findById(vmSnapshotVo.getAccountId());
         
         // start or stop VM first, if revert from stopped state to running state, or from running to stopped
         if(userVm.getState() == VirtualMachine.State.Stopped && vmSnapshotVo.getType() == VMSnapshot.Type.DiskAndMemory){
@@ -683,7 +679,7 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
         }else {
             if(userVm.getState() == VirtualMachine.State.Running && vmSnapshotVo.getType() == VMSnapshot.Type.Disk){
                 try {
-    			    _itMgr.advanceStop(userVm, true, callerUser, owner);
+                    _itMgr.advanceStop(userVm.getUuid(), true);
                 } 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/5297a071/server/test/com/cloud/vm/UserVmManagerTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vm/UserVmManagerTest.java b/server/test/com/cloud/vm/UserVmManagerTest.java
index 6b0f688..36ec935 100755
--- a/server/test/com/cloud/vm/UserVmManagerTest.java
+++ b/server/test/com/cloud/vm/UserVmManagerTest.java
@@ -197,7 +197,6 @@ public class UserVmManagerTest {
         when(_rootVols.get(eq(0))).thenReturn(_volumeMock);
         doReturn(3L).when(_volumeMock).getTemplateId();
         when(_templateDao.findById(anyLong())).thenReturn(_templateMock);
-        when(_itMgr.stop(_vmMock, _userMock, _account)).thenReturn(true);
         when(_storageMgr.allocateDuplicateVolume(_volumeMock, null)).thenReturn(_volumeMock);
         doNothing().when(_volsDao).attachVolume(anyLong(), anyLong(), anyLong());
         when(_volumeMock.getId()).thenReturn(3L);
@@ -230,7 +229,6 @@ public class UserVmManagerTest {
         doReturn(ImageFormat.VHD).when(_templateMock).getFormat();
         when(_templateDao.findById(anyLong())).thenReturn(_templateMock);
         doNothing().when(_accountMgr).checkAccess(_account, null, true, _templateMock);
-        when(_itMgr.stop(_vmMock, _userMock, _account)).thenReturn(true);
         when(_storageMgr.allocateDuplicateVolume(_volumeMock, 14L)).thenReturn(_volumeMock);
         when(_templateMock.getGuestOSId()).thenReturn(5L);
         doNothing().when(_vmMock).setGuestOSId(anyLong());
@@ -269,7 +267,6 @@ public class UserVmManagerTest {
         doReturn(ImageFormat.ISO).when(_templateMock).getFormat();
         when(_templateDao.findById(anyLong())).thenReturn(_templateMock);
         doNothing().when(_accountMgr).checkAccess(_account, null, true, _templateMock);
-        when(_itMgr.stop(_vmMock, _userMock, _account)).thenReturn(true);
         when(_storageMgr.allocateDuplicateVolume(_volumeMock, null)).thenReturn(_volumeMock);
         doNothing().when(_vmMock).setIsoId(14L);
         when(_templateMock.getGuestOSId()).thenReturn(5L);


[2/3] git commit: updated refs/heads/master to 51377c4

Posted by ah...@apache.org.
Removed the getByTypeAndId() method and replace it with getById method


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/319d91e1
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/319d91e1
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/319d91e1

Branch: refs/heads/master
Commit: 319d91e1c2c22b27adaed0eb65c7b95e3bbb0503
Parents: 9f15779
Author: Alex Huang <al...@citrix.com>
Authored: Mon Jul 22 17:25:48 2013 -0700
Committer: Alex Huang <al...@citrix.com>
Committed: Mon Jul 22 20:06:04 2013 -0700

----------------------------------------------------------------------
 api/src/com/cloud/ha/FenceBuilder.java          | 31 +++++++++
 api/src/com/cloud/ha/Investigator.java          | 33 +++++++++
 api/src/com/cloud/vm/VirtualMachine.java        | 71 ++++++++++----------
 .../src/com/cloud/ovm/hypervisor/OvmFencer.java |  7 +-
 .../vmware/src/com/cloud/ha/VmwareFencer.java   | 11 ++-
 .../src/com/cloud/ha/VmwareInvestigator.java    | 10 +--
 .../xen/src/com/cloud/ha/XenServerFencer.java   |  7 +-
 .../com/cloud/ha/CheckOnAgentInvestigator.java  |  8 +--
 server/src/com/cloud/ha/FenceBuilder.java       | 31 ---------
 .../cloud/ha/HighAvailabilityManagerImpl.java   | 10 +--
 server/src/com/cloud/ha/Investigator.java       | 33 ---------
 server/src/com/cloud/ha/KVMFencer.java          |  6 +-
 .../ha/ManagementIPSystemVMInvestigator.java    | 12 ++--
 server/src/com/cloud/ha/RecreatableFencer.java  |  8 +--
 .../com/cloud/ha/UserVmDomRInvestigator.java    |  9 ++-
 .../src/com/cloud/ha/XenServerInvestigator.java |  9 +--
 .../com/cloud/servlet/ConsoleProxyServlet.java  | 28 ++++----
 server/src/com/cloud/vm/UserVmManagerImpl.java  | 16 ++---
 .../src/com/cloud/vm/VirtualMachineManager.java |  4 +-
 .../com/cloud/vm/VirtualMachineManagerImpl.java |  5 --
 20 files changed, 172 insertions(+), 177 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/api/src/com/cloud/ha/FenceBuilder.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/ha/FenceBuilder.java b/api/src/com/cloud/ha/FenceBuilder.java
new file mode 100644
index 0000000..41bde71
--- /dev/null
+++ b/api/src/com/cloud/ha/FenceBuilder.java
@@ -0,0 +1,31 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.ha;
+
+import com.cloud.host.Host;
+import com.cloud.utils.component.Adapter;
+import com.cloud.vm.VirtualMachine;
+
+public interface FenceBuilder extends Adapter {
+	/**
+	 * Fence off the vm.
+	 * 
+	 * @param vm vm
+	 * @param host host where the vm was running on.
+	 */
+    public Boolean fenceOff(VirtualMachine vm, Host host);
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/api/src/com/cloud/ha/Investigator.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/ha/Investigator.java b/api/src/com/cloud/ha/Investigator.java
new file mode 100644
index 0000000..a5de1ba
--- /dev/null
+++ b/api/src/com/cloud/ha/Investigator.java
@@ -0,0 +1,33 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.ha;
+
+import com.cloud.host.Host;
+import com.cloud.host.Status;
+import com.cloud.utils.component.Adapter;
+import com.cloud.vm.VirtualMachine;
+
+public interface Investigator extends Adapter {
+    /**
+     * Returns if the vm is still alive.
+     * 
+     * @param vm to work on.
+     */
+    public Boolean isVmAlive(VirtualMachine vm, Host host);
+
+    public Status isAgentAlive(Host agent);
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/api/src/com/cloud/vm/VirtualMachine.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/vm/VirtualMachine.java b/api/src/com/cloud/vm/VirtualMachine.java
index c172fbf..0a968bc 100755
--- a/api/src/com/cloud/vm/VirtualMachine.java
+++ b/api/src/com/cloud/vm/VirtualMachine.java
@@ -158,7 +158,7 @@ public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, I
         }
     }
 
-    public static final String IsDynamicScalingEnabled = "enable.dynamic.scaling";
+    static final String IsDynamicScalingEnabled = "enable.dynamic.scaling";
 
     public enum Event {
         CreateRequested,
@@ -182,27 +182,28 @@ public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, I
     };
 
     public enum Type {
-        User,
-        DomainRouter,
-        ConsoleProxy,
-        SecondaryStorageVm,
-        ElasticIpVm,
-        ElasticLoadBalancerVm,
-        InternalLoadBalancerVm,
+        User(false),
+        DomainRouter(true),
+        ConsoleProxy(true),
+        SecondaryStorageVm(true),
+        ElasticIpVm(true),
+        ElasticLoadBalancerVm(true),
+        InternalLoadBalancerVm(true),
 
         /*
          * UserBareMetal is only used for selecting VirtualMachineGuru, there is no
          * VM with this type. UserBareMetal should treat exactly as User.
          */
-        UserBareMetal;
+        UserBareMetal(false);
 
-        public static boolean isSystemVM(VirtualMachine.Type vmtype) {
-            if (DomainRouter.equals(vmtype)
-                    || ConsoleProxy.equals(vmtype)
-                    || SecondaryStorageVm.equals(vmtype) || InternalLoadBalancerVm.equals(vmtype)) {
-                return true;
-            }
-            return false;
+        boolean _isUsedBySystem;
+
+        private Type(boolean isUsedBySystem) {
+            _isUsedBySystem = isUsedBySystem;
+        }
+
+        public boolean isUsedBySystem() {
+            return _isUsedBySystem;
         }
     }
 
@@ -211,39 +212,39 @@ public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, I
      *         reference this VM. You can build names that starts with this name and it
      *         guarantees uniqueness for things related to the VM.
      */
-    public String getInstanceName();
+    String getInstanceName();
 
     /**
      * @return the host name of the virtual machine. If the user did not
      *         specify the host name when creating the virtual machine then it is
      *         defaults to the instance name.
      */
-    public String getHostName();
+    String getHostName();
 
     /**
      * @return the ip address of the virtual machine.
      */
-    public String getPrivateIpAddress();
+    String getPrivateIpAddress();
 
     /**
      * @return mac address.
      */
-    public String getPrivateMacAddress();
+    String getPrivateMacAddress();
 
     /**
      * @return password of the host for vnc purposes.
      */
-    public String getVncPassword();
+    String getVncPassword();
 
     /**
      * @return the state of the virtual machine
      */
-    // public State getState();
+    // State getState();
 
     /**
      * @return template id.
      */
-    public long getTemplateId();
+    long getTemplateId();
 
 
 
@@ -252,49 +253,51 @@ public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, I
      * 
      * @return guestOSId
      */
-    public long getGuestOSId();
+    long getGuestOSId();
 
     /**
      * @return pod id.
      */
-    public Long getPodIdToDeployIn();
+    Long getPodIdToDeployIn();
 
     /**
      * @return data center id.
      */
-    public long getDataCenterId();
+    long getDataCenterId();
 
     /**
      * @return id of the host it was assigned last time.
      */
-    public Long getLastHostId();
+    Long getLastHostId();
 
     @Override
-    public Long getHostId();
+    Long getHostId();
 
     /**
      * @return should HA be enabled for this machine?
      */
-    public boolean isHaEnabled();
+    boolean isHaEnabled();
 
     /**
      * @return should limit CPU usage to the service offering?
      */
-    public boolean limitCpuUse();
+    boolean limitCpuUse();
 
     /**
      * @return date when machine was created
      */
-    public Date getCreated();
+    Date getCreated();
 
-    public long getServiceOfferingId();
+    long getServiceOfferingId();
     
-    public Long getDiskOfferingId();
+    Long getDiskOfferingId();
 
     Type getType();
 
     HypervisorType getHypervisorType();
 
-    public Map<String, String> getDetails();
+    Map<String, String> getDetails();
+
+    long getUpdated();
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java
index 7aefcaa..71d9d0b 100755
--- a/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java
+++ b/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java
@@ -31,12 +31,13 @@ import com.cloud.agent.api.FenceCommand;
 import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.OperationTimedoutException;
 import com.cloud.ha.FenceBuilder;
+import com.cloud.host.Host;
 import com.cloud.host.HostVO;
 import com.cloud.host.Status;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.utils.component.AdapterBase;
-import com.cloud.vm.VMInstanceVO;
 import com.cloud.resource.ResourceManager;
+import com.cloud.utils.component.AdapterBase;
+import com.cloud.vm.VirtualMachine;
 
 @Local(value=FenceBuilder.class)
 public class OvmFencer extends AdapterBase implements FenceBuilder {
@@ -66,7 +67,7 @@ public class OvmFencer extends AdapterBase implements FenceBuilder {
 	}
 
 	@Override
-	public Boolean fenceOff(VMInstanceVO vm, HostVO host) {
+    public Boolean fenceOff(VirtualMachine vm, Host host) {
 		if (host.getHypervisorType() != HypervisorType.Ovm) {
 			s_logger.debug("Don't know how to fence non Ovm hosts " + host.getHypervisorType());
 			return null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/plugins/hypervisors/vmware/src/com/cloud/ha/VmwareFencer.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/ha/VmwareFencer.java b/plugins/hypervisors/vmware/src/com/cloud/ha/VmwareFencer.java
index 2ed5caf..dab5064 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/ha/VmwareFencer.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/ha/VmwareFencer.java
@@ -11,25 +11,22 @@
 // Unless required by applicable law or agreed to in writing,
 // software distributed under the License is distributed on an
 // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the 
+// KIND, either express or implied.  See the License for the
 // specific language governing permissions and limitations
 // under the License.
 package com.cloud.ha;
 
-import java.util.Map;
-
 import javax.ejb.Local;
-import javax.naming.ConfigurationException;
 
-import com.cloud.host.HostVO;
+import com.cloud.host.Host;
 import com.cloud.utils.component.AdapterBase;
-import com.cloud.vm.VMInstanceVO;
+import com.cloud.vm.VirtualMachine;
 
 @Local(value=FenceBuilder.class)
 public class VmwareFencer extends AdapterBase implements FenceBuilder {
 
     @Override
-    public Boolean fenceOff(VMInstanceVO vm, HostVO host) {
+    public Boolean fenceOff(VirtualMachine vm, Host host) {
     	return null;
     }
 	

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/plugins/hypervisors/vmware/src/com/cloud/ha/VmwareInvestigator.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/ha/VmwareInvestigator.java b/plugins/hypervisors/vmware/src/com/cloud/ha/VmwareInvestigator.java
index a7e67e1..e5ef5b7 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/ha/VmwareInvestigator.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/ha/VmwareInvestigator.java
@@ -11,18 +11,18 @@
 // Unless required by applicable law or agreed to in writing,
 // software distributed under the License is distributed on an
 // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the 
+// KIND, either express or implied.  See the License for the
 // specific language governing permissions and limitations
 // under the License.
 package com.cloud.ha;
 
 import javax.ejb.Local;
 
-import com.cloud.host.HostVO;
+import com.cloud.host.Host;
 import com.cloud.host.Status;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.utils.component.AdapterBase;
-import com.cloud.vm.VMInstanceVO;
+import com.cloud.vm.VirtualMachine;
 
 @Local(value=Investigator.class)
 public class VmwareInvestigator extends AdapterBase implements Investigator {
@@ -30,7 +30,7 @@ public class VmwareInvestigator extends AdapterBase implements Investigator {
     }
     
     @Override
-    public Status isAgentAlive(HostVO agent) {
+    public Status isAgentAlive(Host agent) {
     	if(agent.getHypervisorType() == HypervisorType.VMware)
     		return Status.Disconnected;
     	
@@ -38,7 +38,7 @@ public class VmwareInvestigator extends AdapterBase implements Investigator {
     }
     
     @Override
-    public Boolean isVmAlive(VMInstanceVO vm, HostVO host) {
+    public Boolean isVmAlive(VirtualMachine vm, Host host) {
     	if(vm.getHypervisorType() == HypervisorType.VMware)
     		return true;
     	

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/plugins/hypervisors/xen/src/com/cloud/ha/XenServerFencer.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/ha/XenServerFencer.java b/plugins/hypervisors/xen/src/com/cloud/ha/XenServerFencer.java
index 737b3b2..4708ff3 100755
--- a/plugins/hypervisors/xen/src/com/cloud/ha/XenServerFencer.java
+++ b/plugins/hypervisors/xen/src/com/cloud/ha/XenServerFencer.java
@@ -11,7 +11,7 @@
 // Unless required by applicable law or agreed to in writing,
 // software distributed under the License is distributed on an
 // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the 
+// KIND, either express or implied.  See the License for the
 // specific language governing permissions and limitations
 // under the License.
 package com.cloud.ha;
@@ -31,13 +31,14 @@ import com.cloud.agent.api.FenceAnswer;
 import com.cloud.agent.api.FenceCommand;
 import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.OperationTimedoutException;
+import com.cloud.host.Host;
 import com.cloud.host.HostVO;
 import com.cloud.host.Status;
 import com.cloud.host.dao.HostDao;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.resource.ResourceManager;
 import com.cloud.utils.component.AdapterBase;
-import com.cloud.vm.VMInstanceVO;
+import com.cloud.vm.VirtualMachine;
 
 @Local(value=FenceBuilder.class)
 public class XenServerFencer extends AdapterBase implements FenceBuilder {
@@ -49,7 +50,7 @@ public class XenServerFencer extends AdapterBase implements FenceBuilder {
     @Inject ResourceManager _resourceMgr;
 
     @Override
-    public Boolean fenceOff(VMInstanceVO vm, HostVO host) {
+    public Boolean fenceOff(VirtualMachine vm, Host host) {
         if (host.getHypervisorType() != HypervisorType.XenServer) {
             s_logger.debug("Don't know how to fence non XenServer hosts " + host.getHypervisorType());
             return null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/server/src/com/cloud/ha/CheckOnAgentInvestigator.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/ha/CheckOnAgentInvestigator.java b/server/src/com/cloud/ha/CheckOnAgentInvestigator.java
index 2971910..0df324c 100644
--- a/server/src/com/cloud/ha/CheckOnAgentInvestigator.java
+++ b/server/src/com/cloud/ha/CheckOnAgentInvestigator.java
@@ -26,10 +26,10 @@ import com.cloud.agent.api.CheckVirtualMachineAnswer;
 import com.cloud.agent.api.CheckVirtualMachineCommand;
 import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.OperationTimedoutException;
-import com.cloud.host.HostVO;
+import com.cloud.host.Host;
 import com.cloud.host.Status;
 import com.cloud.utils.component.AdapterBase;
-import com.cloud.vm.VMInstanceVO;
+import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachine.State;
 
 @Local(value=Investigator.class)
@@ -42,12 +42,12 @@ public class CheckOnAgentInvestigator extends AdapterBase implements Investigato
 	}
 	
 	@Override
-	public Status isAgentAlive(HostVO agent) {
+    public Status isAgentAlive(Host agent) {
 		return null;
 	}
 
 	@Override
-	public Boolean isVmAlive(VMInstanceVO vm, HostVO host) {
+    public Boolean isVmAlive(VirtualMachine vm, Host host) {
 		CheckVirtualMachineCommand cmd = new CheckVirtualMachineCommand(vm.getInstanceName());
 		try {
 			CheckVirtualMachineAnswer answer = (CheckVirtualMachineAnswer)_agentMgr.send(vm.getHostId(), cmd);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/server/src/com/cloud/ha/FenceBuilder.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/ha/FenceBuilder.java b/server/src/com/cloud/ha/FenceBuilder.java
deleted file mode 100644
index 6f7413e..0000000
--- a/server/src/com/cloud/ha/FenceBuilder.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.ha;
-
-import com.cloud.host.HostVO;
-import com.cloud.utils.component.Adapter;
-import com.cloud.vm.VMInstanceVO;
-
-public interface FenceBuilder extends Adapter {
-	/**
-	 * Fence off the vm.
-	 * 
-	 * @param vm vm
-	 * @param host host where the vm was running on.
-	 */
-    public Boolean fenceOff(VMInstanceVO vm, HostVO host);
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/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 fcc4792..896c418 100755
--- a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
+++ b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
@@ -388,7 +388,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
 
         long vmId = work.getInstanceId();
 
-        VMInstanceVO vm = _itMgr.findByIdAndType(work.getType(), work.getInstanceId());
+        VirtualMachine vm = _itMgr.findById(work.getInstanceId());
         if (vm == null) {
             s_logger.info("Unable to find vm: " + vmId);
             return null;
@@ -506,7 +506,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
             }
         }
 
-        vm = _itMgr.findByIdAndType(vm.getType(), vm.getId());
+        vm = _itMgr.findById(vm.getId());
 
         if (!_forceHA && !vm.isHaEnabled()) {
             if (s_logger.isDebugEnabled()) {
@@ -560,7 +560,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
             _alertMgr.sendAlert(alertType, vm.getDataCenterId(), vm.getPodIdToDeployIn(), "Unable to restart " + vm.getHostName() + " which was running on host " + hostDesc,
                     "The Storage is unavailable for trying to restart VM, name: " + vm.getHostName() + ", id: " + vmId + " which was running on host " + hostDesc);
         }
-        vm = _itMgr.findByIdAndType(vm.getType(), vm.getId());
+        vm = _itMgr.findById(vm.getId());
         work.setUpdateTime(vm.getUpdated());
         work.setPreviousState(vm.getState());
         return (System.currentTimeMillis() >> 10) + _restartRetryInterval;
@@ -606,7 +606,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
     }
 
     protected Long destroyVM(HaWorkVO work) {
-        final VMInstanceVO vm = _itMgr.findByIdAndType(work.getType(), work.getInstanceId());
+        final VirtualMachine vm = _itMgr.findById(work.getInstanceId());
         s_logger.info("Destroying " + vm.toString());
         try {
             if (vm.getState() != State.Destroyed) {
@@ -639,7 +639,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
     }
 
     protected Long stopVM(final HaWorkVO work) throws ConcurrentOperationException {
-        VMInstanceVO vm = _itMgr.findByIdAndType(work.getType(), work.getInstanceId());
+        VirtualMachine vm = _itMgr.findById(work.getInstanceId());
         if (vm == null) {
             s_logger.info("No longer can find VM " + work.getInstanceId() + ". Throwing away " + work);
             work.setStep(Step.Done);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/server/src/com/cloud/ha/Investigator.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/ha/Investigator.java b/server/src/com/cloud/ha/Investigator.java
deleted file mode 100644
index a414156..0000000
--- a/server/src/com/cloud/ha/Investigator.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.ha;
-
-import com.cloud.host.HostVO;
-import com.cloud.host.Status;
-import com.cloud.utils.component.Adapter;
-import com.cloud.vm.VMInstanceVO;
-
-public interface Investigator extends Adapter {
-    /**
-     * Returns if the vm is still alive.
-     * 
-     * @param vm to work on.
-     */
-    public Boolean isVmAlive(VMInstanceVO vm, HostVO host);
-
-    public Status isAgentAlive(HostVO agent);
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/server/src/com/cloud/ha/KVMFencer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/ha/KVMFencer.java b/server/src/com/cloud/ha/KVMFencer.java
index 9fcacd7..517209e 100755
--- a/server/src/com/cloud/ha/KVMFencer.java
+++ b/server/src/com/cloud/ha/KVMFencer.java
@@ -17,7 +17,6 @@
 package com.cloud.ha;
 
 import java.util.List;
-
 import java.util.Map;
 
 import javax.ejb.Local;
@@ -31,13 +30,14 @@ import com.cloud.agent.api.FenceAnswer;
 import com.cloud.agent.api.FenceCommand;
 import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.OperationTimedoutException;
+import com.cloud.host.Host;
 import com.cloud.host.HostVO;
 import com.cloud.host.Status;
 import com.cloud.host.dao.HostDao;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.resource.ResourceManager;
 import com.cloud.utils.component.AdapterBase;
-import com.cloud.vm.VMInstanceVO;
+import com.cloud.vm.VirtualMachine;
 
 @Local(value=FenceBuilder.class)
 public class KVMFencer extends AdapterBase implements FenceBuilder {
@@ -70,7 +70,7 @@ public class KVMFencer extends AdapterBase implements FenceBuilder {
 	    }
 
 	@Override
-	public Boolean fenceOff(VMInstanceVO vm, HostVO host) {
+    public Boolean fenceOff(VirtualMachine vm, Host host) {
 		if (host.getHypervisorType() != HypervisorType.KVM) {
 			s_logger.debug("Don't know how to fence non kvm hosts " + host.getHypervisorType());
 			return null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java b/server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java
index 17f0355..2b6d261 100644
--- a/server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java
+++ b/server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java
@@ -25,13 +25,13 @@ import javax.naming.ConfigurationException;
 
 import org.apache.log4j.Logger;
 
+import com.cloud.host.Host;
 import com.cloud.host.HostVO;
 import com.cloud.host.Status;
 import com.cloud.host.dao.HostDao;
 import com.cloud.network.NetworkModel;
 import com.cloud.network.Networks.TrafficType;
 import com.cloud.vm.Nic;
-import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine;
 
 @Local(value={Investigator.class})
@@ -39,13 +39,13 @@ public class ManagementIPSystemVMInvestigator extends AbstractInvestigatorImpl {
     private static final Logger s_logger = Logger.getLogger(ManagementIPSystemVMInvestigator.class);
 
     private String _name = null;
-    @Inject private HostDao _hostDao = null;
-    @Inject private NetworkModel _networkMgr = null;
+    @Inject private final HostDao _hostDao = null;
+    @Inject private final NetworkModel _networkMgr = null;
 
 
     @Override
-    public Boolean isVmAlive(VMInstanceVO vm, HostVO host) {
-        if (!VirtualMachine.Type.isSystemVM(vm.getType())) {
+    public Boolean isVmAlive(VirtualMachine vm, Host host) {
+        if (!vm.getType().isUsedBySystem()) {
             s_logger.debug("Not a System Vm, unable to determine state of " + vm + " returning null");
         }
 
@@ -110,7 +110,7 @@ public class ManagementIPSystemVMInvestigator extends AbstractInvestigatorImpl {
     }
 
     @Override
-    public Status isAgentAlive(HostVO agent) {
+    public Status isAgentAlive(Host agent) {
     	return null;
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/server/src/com/cloud/ha/RecreatableFencer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/ha/RecreatableFencer.java b/server/src/com/cloud/ha/RecreatableFencer.java
index 50aa1b7..398bb03 100644
--- a/server/src/com/cloud/ha/RecreatableFencer.java
+++ b/server/src/com/cloud/ha/RecreatableFencer.java
@@ -21,15 +21,15 @@ import java.util.List;
 import javax.ejb.Local;
 import javax.inject.Inject;
 
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
-import com.cloud.host.HostVO;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+
+import com.cloud.host.Host;
 import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.utils.component.AdapterBase;
-import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine;
 
 @Component
@@ -44,7 +44,7 @@ public class RecreatableFencer extends AdapterBase implements FenceBuilder {
     }
 
     @Override
-    public Boolean fenceOff(VMInstanceVO vm, HostVO host) {
+    public Boolean fenceOff(VirtualMachine vm, Host host) {
         VirtualMachine.Type type = vm.getType();
         if (type != VirtualMachine.Type.ConsoleProxy && type != VirtualMachine.Type.DomainRouter && type != VirtualMachine.Type.SecondaryStorageVm) {
             if (s_logger.isDebugEnabled()) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/server/src/com/cloud/ha/UserVmDomRInvestigator.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/ha/UserVmDomRInvestigator.java b/server/src/com/cloud/ha/UserVmDomRInvestigator.java
index 8b48c09..195deff 100644
--- a/server/src/com/cloud/ha/UserVmDomRInvestigator.java
+++ b/server/src/com/cloud/ha/UserVmDomRInvestigator.java
@@ -29,7 +29,7 @@ import org.apache.log4j.Logger;
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.PingTestCommand;
-import com.cloud.host.HostVO;
+import com.cloud.host.Host;
 import com.cloud.host.Status;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.network.NetworkModel;
@@ -38,7 +38,6 @@ import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.router.VpcVirtualNetworkApplianceManager;
 import com.cloud.vm.Nic;
 import com.cloud.vm.UserVmVO;
-import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.dao.UserVmDao;
 
@@ -53,7 +52,7 @@ public class UserVmDomRInvestigator extends AbstractInvestigatorImpl {
     @Inject private final VpcVirtualNetworkApplianceManager _vnaMgr = null;
 
     @Override
-    public Boolean isVmAlive(VMInstanceVO vm, HostVO host) {
+    public Boolean isVmAlive(VirtualMachine vm, Host host) {
         if (vm.getType() != VirtualMachine.Type.User) {
             if (s_logger.isDebugEnabled()) {
                 s_logger.debug("Not a User Vm, unable to determine state of " + vm + " returning null");
@@ -104,7 +103,7 @@ public class UserVmDomRInvestigator extends AbstractInvestigatorImpl {
     }
 
     @Override
-    public Status isAgentAlive(HostVO agent) {
+    public Status isAgentAlive(Host agent) {
         if (s_logger.isDebugEnabled()) {
             s_logger.debug("checking if agent (" + agent.getId() + ") is alive");
         }
@@ -166,7 +165,7 @@ public class UserVmDomRInvestigator extends AbstractInvestigatorImpl {
         return true;
     }
 
-    private Boolean testUserVM(VMInstanceVO vm, Nic nic, VirtualRouter router) {
+    private Boolean testUserVM(VirtualMachine vm, Nic nic, VirtualRouter router) {
         String privateIp = nic.getIp4Address();
         String routerPrivateIp = router.getPrivateIpAddress();
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/server/src/com/cloud/ha/XenServerInvestigator.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/ha/XenServerInvestigator.java b/server/src/com/cloud/ha/XenServerInvestigator.java
index 6cbd22f..2b96007 100755
--- a/server/src/com/cloud/ha/XenServerInvestigator.java
+++ b/server/src/com/cloud/ha/XenServerInvestigator.java
@@ -23,17 +23,18 @@ import javax.inject.Inject;
 
 import org.apache.log4j.Logger;
 
+import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.CheckOnHostAnswer;
 import com.cloud.agent.api.CheckOnHostCommand;
-import com.cloud.agent.AgentManager;
+import com.cloud.host.Host;
 import com.cloud.host.HostVO;
 import com.cloud.host.Status;
 import com.cloud.host.dao.HostDao;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.resource.ResourceManager;
 import com.cloud.utils.component.AdapterBase;
-import com.cloud.vm.VMInstanceVO;
+import com.cloud.vm.VirtualMachine;
 
 @Local(value=Investigator.class)
 public class XenServerInvestigator extends AdapterBase implements Investigator {
@@ -46,7 +47,7 @@ public class XenServerInvestigator extends AdapterBase implements Investigator {
     }
     
     @Override
-    public Status isAgentAlive(HostVO agent) {
+    public Status isAgentAlive(Host agent) {
         if (agent.getHypervisorType() != HypervisorType.XenServer) {
             return null;
         }
@@ -72,7 +73,7 @@ public class XenServerInvestigator extends AdapterBase implements Investigator {
     }
 
     @Override
-    public Boolean isVmAlive(VMInstanceVO vm, HostVO host) {
+    public Boolean isVmAlive(VirtualMachine vm, Host host) {
         Status status = isAgentAlive(host);
         if (status == null) {
             return null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/server/src/com/cloud/servlet/ConsoleProxyServlet.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/servlet/ConsoleProxyServlet.java b/server/src/com/cloud/servlet/ConsoleProxyServlet.java
index 097986b..fe2052e 100644
--- a/server/src/com/cloud/servlet/ConsoleProxyServlet.java
+++ b/server/src/com/cloud/servlet/ConsoleProxyServlet.java
@@ -35,12 +35,16 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
-import org.apache.cloudstack.api.IdentityService;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 import org.springframework.web.context.support.SpringBeanAutowiringSupport;
 
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+import org.apache.cloudstack.api.IdentityService;
+
 import com.cloud.exception.PermissionDeniedException;
 import com.cloud.host.HostVO;
 import com.cloud.server.ManagementServer;
@@ -51,12 +55,10 @@ import com.cloud.user.User;
 import com.cloud.uservm.UserVm;
 import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
+import com.cloud.utils.db.EntityManager;
 import com.cloud.utils.db.Transaction;
-import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachineManager;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
 
 /**
  * Thumbnail access : /console?cmd=thumbnail&vm=xxx&w=xxx&h=xxx
@@ -74,10 +76,12 @@ public class ConsoleProxyServlet extends HttpServlet {
     @Inject VirtualMachineManager _vmMgr;
     @Inject ManagementServer _ms;
     @Inject IdentityService _identityService;
+    @Inject
+    EntityManager _entityMgr;
 
     static ManagementServer s_ms;
 
-    private Gson _gson = new GsonBuilder().create();
+    private final Gson _gson = new GsonBuilder().create();
 
     public ConsoleProxyServlet() {
     }
@@ -179,7 +183,7 @@ public class ConsoleProxyServlet extends HttpServlet {
     }
 
     private void handleThumbnailRequest(HttpServletRequest req, HttpServletResponse resp, long vmId) {
-        VMInstanceVO vm = _vmMgr.findById(vmId);
+        VirtualMachine vm = _vmMgr.findById(vmId);
         if(vm == null) {
             s_logger.warn("VM " + vmId + " does not exist, sending blank response for thumbnail request");
             sendResponse(resp, "");
@@ -230,7 +234,7 @@ public class ConsoleProxyServlet extends HttpServlet {
     }
 
     private void handleAccessRequest(HttpServletRequest req, HttpServletResponse resp, long vmId) {
-        VMInstanceVO vm = _vmMgr.findById(vmId);
+        VirtualMachine vm = _vmMgr.findById(vmId);
         if(vm == null) {
             s_logger.warn("VM " + vmId + " does not exist, sending blank response for console access request");
             sendResponse(resp, "");
@@ -258,7 +262,7 @@ public class ConsoleProxyServlet extends HttpServlet {
 
         String vmName = vm.getHostName();
         if(vm.getType() == VirtualMachine.Type.User) {
-            UserVm userVm = (UserVm)_vmMgr.findByIdAndType(VirtualMachine.Type.User, vmId);
+            UserVm userVm = _entityMgr.findById(UserVm.class, vmId);
             String displayName = userVm.getDisplayName();
             if(displayName != null && !displayName.isEmpty() && !displayName.equals(vmName)) {
                 vmName += "(" + displayName + ")";
@@ -276,7 +280,7 @@ public class ConsoleProxyServlet extends HttpServlet {
 
         // TODO authentication channel between console proxy VM and management server needs to be secured,
         // the data is now being sent through private network, but this is apparently not enough
-        VMInstanceVO vm = _vmMgr.findById(vmId);
+        VirtualMachine vm = _vmMgr.findById(vmId);
         if(vm == null) {
             s_logger.warn("VM " + vmId + " does not exist, sending failed response for authentication request from console proxy");
             sendResponse(resp, "failed");
@@ -339,7 +343,7 @@ public class ConsoleProxyServlet extends HttpServlet {
 		return _gson.toJson(keyIvPair);
     }
 
-    private String composeThumbnailUrl(String rootUrl, VMInstanceVO vm, HostVO hostVo, int w, int h) {
+    private String composeThumbnailUrl(String rootUrl, VirtualMachine vm, HostVO hostVo, int w, int h) {
         StringBuffer sb = new StringBuffer(rootUrl);
 
         String host = hostVo.getPrivateIpAddress();
@@ -374,7 +378,7 @@ public class ConsoleProxyServlet extends HttpServlet {
         return sb.toString();
     }
 
-    private String composeConsoleAccessUrl(String rootUrl, VMInstanceVO vm, HostVO hostVo) {
+    private String composeConsoleAccessUrl(String rootUrl, VirtualMachine vm, HostVO hostVo) {
         StringBuffer sb = new StringBuffer(rootUrl);
         String host = hostVo.getPrivateIpAddress();
 
@@ -454,7 +458,7 @@ public class ConsoleProxyServlet extends HttpServlet {
 
     private boolean checkSessionPermision(HttpServletRequest req, long vmId, Account accountObj) {
 
-        VMInstanceVO vm = _vmMgr.findById(vmId);
+        VirtualMachine vm = _vmMgr.findById(vmId);
         if(vm == null) {
             s_logger.debug("Console/thumbnail access denied. VM " + vmId + " does not exist in system any more");
             return false;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index a4508ee..0805e6c 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -4201,9 +4201,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
 
         txn.commit();
 
-        VMInstanceVO vmoi = _itMgr.findByIdAndType(vm.getType(), vm.getId());
-        VirtualMachineProfileImpl vmOldProfile = new VirtualMachineProfileImpl(
-                vmoi);
+        VirtualMachine vmoi = _itMgr.findById(vm.getId());
+        VirtualMachineProfileImpl vmOldProfile = new VirtualMachineProfileImpl(vmoi);
 
         // OS 3: update the network
         List<Long> networkIdList = cmd.getNetworkIds();
@@ -4279,9 +4278,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
             networks.add(new Pair<NetworkVO, NicProfile>(networkList.get(0),
                     profile));
 
-            VMInstanceVO vmi = _itMgr.findByIdAndType(vm.getType(), vm.getId());
-            VirtualMachineProfileImpl vmProfile = new VirtualMachineProfileImpl(
-                    vmi);
+            VirtualMachine vmi = _itMgr.findById(vm.getId());
+            VirtualMachineProfileImpl vmProfile = new VirtualMachineProfileImpl(vmi);
             _networkMgr.allocate(vmProfile, networks);
 
             _securityGroupMgr.addInstanceToGroups(vm.getId(),
@@ -4413,10 +4411,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
                     networks.add(new Pair<NetworkVO, NicProfile>(appNet,
                             defaultNic));
                 }
-                VMInstanceVO vmi = _itMgr.findByIdAndType(vm.getType(),
-                        vm.getId());
-                VirtualMachineProfileImpl vmProfile = new VirtualMachineProfileImpl(
-                        vmi);
+                VirtualMachine vmi = _itMgr.findById(vm.getId());
+                VirtualMachineProfileImpl vmProfile = new VirtualMachineProfileImpl(vmi);
                 _networkMgr.allocate(vmProfile, networks);
                 s_logger.debug("AssignVM: Advance virtual, adding networks no "
                         + networks.size() + " to " + vm.getInstanceName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/server/src/com/cloud/vm/VirtualMachineManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachineManager.java b/server/src/com/cloud/vm/VirtualMachineManager.java
index 4982bcb..6abb91b 100644
--- a/server/src/com/cloud/vm/VirtualMachineManager.java
+++ b/server/src/com/cloud/vm/VirtualMachineManager.java
@@ -108,8 +108,6 @@ public interface VirtualMachineManager extends Manager {
 
     <T extends VMInstanceVO> T advanceReboot(T vm, Map<VirtualMachineProfile.Param, Object> params, User caller, Account account) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException;
 
-    VMInstanceVO findByIdAndType(VirtualMachine.Type type, long vmId);
-
     /**
      * Check to see if a virtual machine can be upgraded to the given service offering
      * 
@@ -119,7 +117,7 @@ public interface VirtualMachineManager extends Manager {
      */
     boolean isVirtualMachineUpgradable(final VirtualMachine vm, final ServiceOffering offering);
     
-    VMInstanceVO findById(long vmId);
+    VirtualMachine findById(long vmId);
 
 	<T extends VMInstanceVO> T storageMigration(T vm, StoragePool storagePoolId);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/319d91e1/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
index fc55ee5..413bcb0 100755
--- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -2017,11 +2017,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         return rebootedVm;
     }
 
-    @Override
-    public VMInstanceVO findByIdAndType(VirtualMachine.Type type, long vmId) {
-        return _vmDao.findById(vmId);
-    }
-
     public Command cleanup(VirtualMachine vm) {
         return new StopCommand(vm, _mgmtServer.getExecuteInSequence());
     }


[3/3] git commit: updated refs/heads/master to 51377c4

Posted by ah...@apache.org.
Forgot to populate a method to called advanceStop


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/51377c40
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/51377c40
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/51377c40

Branch: refs/heads/master
Commit: 51377c40f291b94a18b55ffa2c86a626f9ee3fde
Parents: 5297a07
Author: Alex Huang <al...@citrix.com>
Authored: Mon Jul 22 20:05:50 2013 -0700
Committer: Alex Huang <al...@citrix.com>
Committed: Mon Jul 22 20:06:05 2013 -0700

----------------------------------------------------------------------
 server/src/com/cloud/vm/VirtualMachineManagerImpl.java | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51377c40/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
index 88fb41d..c8210b2 100755
--- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -1140,6 +1140,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 
     @Override
     public void advanceStop(String vmUuid, boolean cleanUpEvenIfUnableToStop) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException {
+        VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
+
+        advanceStop(vm, cleanUpEvenIfUnableToStop);
     }
 
     private void advanceStop(VMInstanceVO vm, boolean cleanUpEvenIfUnableToStop) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException {