From 4db0b7d1565b6f9f6cc48a0608196b731dd802b0 Mon Sep 17 00:00:00 2001 From: Alex Huang Date: Mon, 1 Nov 2010 10:39:36 -0700 Subject: [PATCH] Better integration between it and virtual machine gurus --- client/tomcatconf/commands.properties.in | 2 +- .../consoleproxy/ConsoleProxyManagerImpl.java | 8 +++++++- .../network/router/DomainRouterManagerImpl.java | 8 +++++++- server/src/com/cloud/vm/MauriceMoss.java | 16 +++++++++++++++- server/src/com/cloud/vm/UserVmManagerImpl.java | 9 +++++++-- server/src/com/cloud/vm/VirtualMachineGuru.java | 2 ++ server/src/com/cloud/vm/VmManager.java | 4 +++- 7 files changed, 42 insertions(+), 7 deletions(-) diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 4ba3b9cdab6..c565a03ffae 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -33,7 +33,7 @@ updateResourceLimit=com.cloud.api.commands.UpdateResourceLimitCmd;3 listResourceLimits=com.cloud.api.commands.ListResourceLimitsCmd;15 #### VM commands -deployVirtualMachine=com.cloud.api.commands.DeployVMCmd;11 +deployVirtualMachine=com.cloud.api.commands.DeployVm2Cmd;11 destroyVirtualMachine=com.cloud.api.commands.DestroyVMCmd;15 rebootVirtualMachine=com.cloud.api.commands.RebootVMCmd;15 startVirtualMachine=com.cloud.api.commands.StartVMCmd;15 diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index aa01af0cea1..4f7503c76d9 100644 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -552,7 +552,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach ConsoleProxyVO proxy = _consoleProxyDao.findById(proxyVmId); DeploymentPlan plan = new DataCenterDeployment(proxy.getDataCenterId(), 1); AccountVO systemAcct = _accountMgr.getSystemAccount(); - return _vmMgr.start(proxy, plan, systemAcct, this); + return _vmMgr.start(proxy, plan, systemAcct); } @Override @@ -2346,6 +2346,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach if (haMgr != null) { haMgr.registerHandler(VirtualMachine.Type.ConsoleProxy, this); } + _vmMgr.registerGuru(VirtualMachine.Type.ConsoleProxy, this); boolean useLocalStorage = Boolean.parseBoolean(configs.get(Config.SystemVMUseLocalStorage.key())); String networkRateStr = _configDao.getValue("network.throttling.rate"); @@ -2531,4 +2532,9 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach event = _eventDao.persist(event); return event.getId(); } + + @Override + public ConsoleProxyVO persist(ConsoleProxyVO proxy) { + return _consoleProxyDao.persist(proxy); + } } diff --git a/server/src/com/cloud/network/router/DomainRouterManagerImpl.java b/server/src/com/cloud/network/router/DomainRouterManagerImpl.java index 91b02fbdaa9..7f268635d50 100644 --- a/server/src/com/cloud/network/router/DomainRouterManagerImpl.java +++ b/server/src/com/cloud/network/router/DomainRouterManagerImpl.java @@ -1454,6 +1454,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, VirtualMach _agentMgr.registerForHostEvents(new SshKeysDistriMonitor(this, _hostDao, _configDao), true, false, false); _haMgr.registerHandler(VirtualMachine.Type.DomainRouter, this); + _vmMgr.registerGuru(VirtualMachine.Type.DomainRouter, this); boolean useLocalStorage = Boolean.parseBoolean(configs.get(Config.SystemVMUseLocalStorage.key())); String networkRateStr = _configDao.getValue("network.throttling.rate"); @@ -2056,7 +2057,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, VirtualMach } txn.commit(); - return _vmMgr.start(router, plan, owner, this); + return _vmMgr.start(router, plan, owner); } @Override @@ -2107,6 +2108,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, VirtualMach return true; } +<<<<<<< HEAD @Override public RemoteAccessVpnVO startRemoteAccessVpn(RemoteAccessVpnVO vpnVO) { DomainRouterVO router = getRouter(vpnVO.getAccountId(), vpnVO.getZoneId()); @@ -2163,4 +2165,8 @@ public class DomainRouterManagerImpl implements DomainRouterManager, VirtualMach } } + @Override + public DomainRouterVO persist(DomainRouterVO router) { + return _routerDao.persist(router); + } } diff --git a/server/src/com/cloud/vm/MauriceMoss.java b/server/src/com/cloud/vm/MauriceMoss.java index 25dd3afbf9a..86aa4ec0373 100644 --- a/server/src/com/cloud/vm/MauriceMoss.java +++ b/server/src/com/cloud/vm/MauriceMoss.java @@ -18,6 +18,7 @@ package com.cloud.vm; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -91,8 +92,17 @@ public class MauriceMoss implements VmManager { @Inject(adapter=DeploymentPlanner.class) private Adapters _planners; + Map> _vmGurus = new HashMap>(); + private int _retry; + @Override + public void registerGuru(VirtualMachine.Type type, VirtualMachineGuru guru) { + synchronized(_vmGurus) { + _vmGurus.put(type, guru); + } + } + @Override @DB public VirtualMachineProfile allocate(T vm, VMTemplateVO template, @@ -212,7 +222,7 @@ public class MauriceMoss implements VmManager { } @Override - public T start(T vm, DeploymentPlan plan, Account acct, VirtualMachineGuru guru) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException { + public T start(T vm, DeploymentPlan plan, Account acct) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException { State state = vm.getState(); if (state == State.Starting || state == State.Running) { s_logger.debug("VM is already started: " + vm); @@ -286,6 +296,10 @@ public class MauriceMoss implements VmManager { Commands cmds = new Commands(OnError.Revert); cmds.addCommand(new Start2Command(vmTO)); + + @SuppressWarnings("unchecked") + VirtualMachineGuru guru = (VirtualMachineGuru)_vmGurus.get(vm.getType()); + if (guru != null) { guru.finalizeDeployment(cmds, vm, vmProfile, dest); } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index ac4b9a34c1d..12361118836 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2214,6 +2214,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM _executor = Executors.newScheduledThreadPool(wrks, new NamedThreadFactory("UserVm-Scavenger")); _haMgr.registerHandler(Type.User, this); + _itMgr.registerGuru(Type.User, this); s_logger.info("User VM Manager is configured."); @@ -3897,7 +3898,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM AccountVO owner = _accountDao.findById(vm.getAccountId()); - return _itMgr.start(vm, plan, owner, this); + return _itMgr.start(vm, plan, owner); } @Override @@ -3909,5 +3910,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM public boolean processDeploymentResult(Commands cmds, UserVmVO vm, VirtualMachineProfile profile, DeployDestination dest) { return true; } - + + @Override + public UserVmVO persist(UserVmVO vm) { + return _vmDao.persist(vm); + } } diff --git a/server/src/com/cloud/vm/VirtualMachineGuru.java b/server/src/com/cloud/vm/VirtualMachineGuru.java index 2bda52a8838..73db19e8792 100644 --- a/server/src/com/cloud/vm/VirtualMachineGuru.java +++ b/server/src/com/cloud/vm/VirtualMachineGuru.java @@ -25,6 +25,8 @@ import com.cloud.deploy.DeployDestination; * */ public interface VirtualMachineGuru { + T persist(T vm); + /** * finalize the virtual machine deployment. * @param cmds commands that were created. diff --git a/server/src/com/cloud/vm/VmManager.java b/server/src/com/cloud/vm/VmManager.java index 71717d7f77d..639497493ce 100644 --- a/server/src/com/cloud/vm/VmManager.java +++ b/server/src/com/cloud/vm/VmManager.java @@ -63,10 +63,12 @@ public interface VmManager extends Manager { DeploymentPlan plan, Account owner) throws InsufficientCapacityException, StorageUnavailableException; - T start(T vm, DeploymentPlan plan, Account user, VirtualMachineGuru checker) throws InsufficientCapacityException, StorageUnavailableException, ConcurrentOperationException, ResourceUnavailableException; + T start(T vm, DeploymentPlan plan, Account user) throws InsufficientCapacityException, StorageUnavailableException, ConcurrentOperationException, ResourceUnavailableException; T stop(T vm) throws AgentUnavailableException, ConcurrentOperationException; void destroy(); + void registerGuru(VirtualMachine.Type type, VirtualMachineGuru guru); + }