From 65d0b32182264d48d8552d2629c5535bc8a78dfb Mon Sep 17 00:00:00 2001 From: Alex Huang Date: Thu, 16 Dec 2010 01:15:27 -0800 Subject: [PATCH] removed a bunch of old code --- .../computing/LibvirtComputingResource.java | 661 ++------- core/src/com/cloud/agent/api/StartAnswer.java | 37 - .../src/com/cloud/agent/api/StartCommand.java | 195 --- .../agent/api/StartConsoleProxyAnswer.java | 49 - .../agent/api/StartConsoleProxyCommand.java | 122 -- .../cloud/agent/api/StartRouterAnswer.java | 54 - .../cloud/agent/api/StartRouterCommand.java | 112 -- .../agent/api/StartSecStorageVmAnswer.java | 48 - .../agent/api/StartSecStorageVmCommand.java | 121 -- .../xen/resource/CitrixResourceBase.java | 422 +----- .../com/cloud/agent/manager/AgentAttache.java | 5 +- .../cloud/async/executor/StartVMExecutor.java | 57 - .../consoleproxy/ConsoleProxyManagerImpl.java | 505 +------ .../network/router/DomainRouterManager.java | 60 +- .../router/DomainRouterManagerImpl.java | 852 +----------- .../com/cloud/storage/StorageManagerImpl.java | 16 +- .../SecondaryStorageManagerImpl.java | 652 +-------- server/src/com/cloud/vm/UserVmManager.java | 61 - .../src/com/cloud/vm/UserVmManagerImpl.java | 1212 +---------------- 19 files changed, 224 insertions(+), 5017 deletions(-) delete mode 100755 core/src/com/cloud/agent/api/StartAnswer.java delete mode 100755 core/src/com/cloud/agent/api/StartCommand.java delete mode 100644 core/src/com/cloud/agent/api/StartConsoleProxyAnswer.java delete mode 100644 core/src/com/cloud/agent/api/StartConsoleProxyCommand.java delete mode 100644 core/src/com/cloud/agent/api/StartRouterAnswer.java delete mode 100755 core/src/com/cloud/agent/api/StartRouterCommand.java delete mode 100644 core/src/com/cloud/agent/api/StartSecStorageVmAnswer.java delete mode 100644 core/src/com/cloud/agent/api/StartSecStorageVmCommand.java delete mode 100644 server/src/com/cloud/async/executor/StartVMExecutor.java diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java index 17a79e27ef4..f5fcc568dd1 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java @@ -123,14 +123,6 @@ import com.cloud.agent.api.RebootCommand; import com.cloud.agent.api.RebootRouterCommand; import com.cloud.agent.api.Start2Answer; import com.cloud.agent.api.Start2Command; -import com.cloud.agent.api.StartAnswer; -import com.cloud.agent.api.StartCommand; -import com.cloud.agent.api.StartConsoleProxyAnswer; -import com.cloud.agent.api.StartConsoleProxyCommand; -import com.cloud.agent.api.StartRouterAnswer; -import com.cloud.agent.api.StartRouterCommand; -import com.cloud.agent.api.StartSecStorageVmAnswer; -import com.cloud.agent.api.StartSecStorageVmCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; import com.cloud.agent.api.StopAnswer; @@ -145,16 +137,15 @@ import com.cloud.agent.api.routing.RoutingCommand; import com.cloud.agent.api.storage.CreateAnswer; import com.cloud.agent.api.storage.CreateCommand; import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; -import com.cloud.agent.api.storage.CreatePrivateTemplateCommand; import com.cloud.agent.api.storage.DestroyCommand; -import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; +import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.StorageFilerTO; import com.cloud.agent.api.to.VirtualMachineTO; -import com.cloud.agent.api.to.VolumeTO; import com.cloud.agent.api.to.VirtualMachineTO.Monitor; import com.cloud.agent.api.to.VirtualMachineTO.SshMonitor; +import com.cloud.agent.api.to.VolumeTO; import com.cloud.agent.resource.computing.KVMHABase.NfsStoragePool; import com.cloud.agent.resource.computing.KVMHABase.PoolType; import com.cloud.agent.resource.computing.LibvirtStoragePoolDef.poolType; @@ -175,10 +166,9 @@ import com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource; import com.cloud.exception.InternalErrorException; import com.cloud.host.Host.Type; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.NetworkEnums.RouterPrivateIpStrategy; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.TrafficType; -import com.cloud.network.NetworkEnums.RouterPrivateIpStrategy; -import com.cloud.network.router.VirtualRouter; import com.cloud.resource.ServerResource; import com.cloud.resource.ServerResourceBase; import com.cloud.storage.Storage; @@ -202,9 +192,7 @@ import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; import com.cloud.utils.script.OutputInterpreter; import com.cloud.utils.script.Script; -import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.DiskProfile; -import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.State; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineName; @@ -261,8 +249,11 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv int numLines=0; while ((line = reader.readLine()) != null) { String [] toks = line.trim().split("="); - if (toks.length < 2) s_logger.warn("Failed to parse Script output: " + line); - else map.put(toks[0].trim(), toks[1].trim()); + if (toks.length < 2) { + s_logger.warn("Failed to parse Script output: " + line); + } else { + map.put(toks[0].trim(), toks[1].trim()); + } numLines++; } if (numLines == 0) { @@ -544,8 +535,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv public boolean configure(String name, Map params) throws ConfigurationException { boolean success = super.configure(name, params); - if (! success) - return false; + if (! success) { + return false; + } _virtRouterResource = new VirtualRoutingResource(); // Set the domr scripts directory @@ -857,9 +849,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } boolean isDirectAttachedNetwork(String type) { - if ("untagged".equalsIgnoreCase(type)) - return true; - else { + if ("untagged".equalsIgnoreCase(type)) { + return true; + } else { try { Long vnetId = Long.valueOf(type); } catch (NumberFormatException e) { @@ -869,132 +861,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } } - protected synchronized String startDomainRouter(StartRouterCommand cmd) { - VirtualRouter router = cmd.getRouter(); - List nics = null; - try { - nics = createRouterVMNetworks(cmd); - - List disks = createSystemVMDisk(cmd.getVolumes()); - - String dataDiskPath = null; - for (DiskDef disk : disks) { - if (disk.getDiskLabel().equalsIgnoreCase("vdb")) { - dataDiskPath = disk.getDiskPath(); - } - } - - String vmName = cmd.getVmName(); - patchSystemVm(cmd.getBootArgs(), dataDiskPath, vmName); - - String uuid = UUID.nameUUIDFromBytes(vmName.getBytes()).toString(); - String domXML = defineVMXML(cmd.getVmName(), uuid, router.getRamSize(), 1, _domrArch, nics, disks, router.getVncPassword(), cmd.getGuestOSDescription()); - - s_logger.debug(domXML); - - startDomain(vmName, domXML); - - for (InterfaceDef nic : nics) { - if (nic.getHostNetType() == hostNicType.VNET) { - disableBridgeForwardding(nic.getBrName()); - } - } - - /*if (isDirectAttachedNetwork(router.getVlanId())) - default_network_rules_for_systemvm(vmName);*/ - } catch (LibvirtException e) { - if (nics != null) { - cleanupVMNetworks(nics); - } - s_logger.debug("Failed to start domr: " + e.toString()); - return e.toString(); - }catch (InternalErrorException e) { - if (nics != null) { - cleanupVMNetworks(nics); - } - s_logger.debug("Failed to start domr: " + e.toString()); - return e.toString(); - } - return null; - } - - protected synchronized String startConsoleProxy(StartConsoleProxyCommand cmd) { - ConsoleProxyVO console = cmd.getProxy(); - List nics = null; - try { - nics = createSysVMNetworks(console.getGuestMacAddress(), console.getPrivateMacAddress(), console.getPublicMacAddress(), console.getVlanId()); - - List disks = createSystemVMDisk(cmd.getVolumes()); - - String dataDiskPath = null; - for (DiskDef disk : disks) { - if (disk.getDiskLabel().equalsIgnoreCase("vdb")) { - dataDiskPath = disk.getDiskPath(); - } - } - - String bootArgs = cmd.getBootArgs() + " zone=" + _dcId; - bootArgs += " pod=" + _pod; - bootArgs += " guid=Proxy." + console.getId(); - bootArgs += " proxy_vm=" + console.getId(); - bootArgs += " localgw=" + _localGateway; - String vmName = cmd.getVmName(); - patchSystemVm(bootArgs, dataDiskPath, vmName); - - String uuid = UUID.nameUUIDFromBytes(vmName.getBytes()).toString(); - String domXML = defineVMXML(cmd.getVmName(), uuid, console.getRamSize(), 1, _domrArch, nics, disks, console.getVncPassword(), "Fedora 12"); - - s_logger.debug(domXML); - - startDomain(vmName, domXML); - } catch (LibvirtException e) { - s_logger.debug("Failed to start domr: " + e.toString()); - return e.toString(); - }catch (InternalErrorException e) { - s_logger.debug("Failed to start domr: " + e.toString()); - return e.toString(); - } - return null; - } - - protected String startSecStorageVM(StartSecStorageVmCommand cmd) { - SecondaryStorageVmVO secVm = cmd.getSecondaryStorageVmVO(); - List nics = null; - try { - nics = createSysVMNetworks(secVm.getGuestMacAddress(), secVm.getPrivateMacAddress(), secVm.getPublicMacAddress(), secVm.getVlanId()); - - List disks = createSystemVMDisk(cmd.getVolumes()); - - String dataDiskPath = null; - for (DiskDef disk : disks) { - if (disk.getDiskLabel().equalsIgnoreCase("vdb")) { - dataDiskPath = disk.getDiskPath(); - } - } - - String vmName = cmd.getVmName(); - String bootArgs = cmd.getBootArgs(); - bootArgs += " zone=" + _dcId; - bootArgs += " pod=" + _pod; - bootArgs += " localgw=" + _localGateway; - patchSystemVm(bootArgs, dataDiskPath, vmName); - - String uuid = UUID.nameUUIDFromBytes(vmName.getBytes()).toString(); - String domXML = defineVMXML(cmd.getVmName(), uuid, secVm.getRamSize(), 1, _domrArch, nics, disks, secVm.getVncPassword(), cmd.getGuestOSDescription()); - - s_logger.debug(domXML); - - startDomain(vmName, domXML); - } catch (LibvirtException e) { - s_logger.debug("Failed to start domr: " + e.toString()); - return e.toString(); - }catch (InternalErrorException e) { - s_logger.debug("Failed to start domr: " + e.toString()); - return e.toString(); - } - return null; - } - private String defineVMXML(String vmName, String uuid, int memSize, int cpus, String arch, List nics, List disks, String vncPaswd, String guestOSType) { LibvirtVMDef vm = new LibvirtVMDef(); vm.setHvsType(_hypervisorType); @@ -1036,8 +902,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } for (DiskDef disk : disks) { - if (!disk.isAttachDeferred()) - devices.addDevice(disk); + if (!disk.isAttachDeferred()) { + devices.addDevice(disk); + } } SerialDef serial = new SerialDef("pty", null, (short)0); @@ -1071,8 +938,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv failed = true; } finally { try { - if (dm != null) - dm.free(); + if (dm != null) { + dm.free(); + } } catch (final LibvirtException e) { } @@ -1095,10 +963,12 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv throw new InternalErrorException(e.toString()); } finally { try { - if (dmOld != null) - dmOld.free(); - if (dmNew != null) - dmNew.free(); + if (dmOld != null) { + dmOld.free(); + } + if (dmNew != null) { + dmNew.free(); + } } catch (final LibvirtException e) { } @@ -1113,8 +983,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv throw e; } finally { try { - if (dm != null) - dm.free(); + if (dm != null) { + dm.free(); + } } catch (final LibvirtException e) { } @@ -1157,9 +1028,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv public Answer executeRequest(Command cmd) { try { - if (cmd instanceof StartCommand) { - return execute((StartCommand)cmd); - } else if (cmd instanceof StopCommand) { + if (cmd instanceof StopCommand) { return execute((StopCommand)cmd); } else if (cmd instanceof GetVmStatsCommand) { return execute((GetVmStatsCommand)cmd); @@ -1185,12 +1054,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv return execute((CheckVirtualMachineCommand)cmd); } else if (cmd instanceof ReadyCommand) { return execute((ReadyCommand)cmd); - } else if (cmd instanceof StartRouterCommand) { - return execute((StartRouterCommand)cmd); - } else if(cmd instanceof StartConsoleProxyCommand) { - return execute((StartConsoleProxyCommand)cmd); - } else if(cmd instanceof StartSecStorageVmCommand) { - return execute((StartSecStorageVmCommand)cmd); } else if (cmd instanceof AttachIsoCommand) { return execute((AttachIsoCommand) cmd); } else if (cmd instanceof AttachVolumeCommand) { @@ -1737,8 +1600,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv int index = tmplturl.lastIndexOf("/"); String mountpoint = tmplturl.substring(0, index); String tmpltname = null; - if (index < tmplturl.length() - 1) - tmpltname = tmplturl.substring(index + 1); + if (index < tmplturl.length() - 1) { + tmpltname = tmplturl.substring(index + 1); + } StoragePool secondaryPool = null; StoragePool primaryPool = null; @@ -1954,8 +1818,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv final StringBuilder sb2 = new StringBuilder(); String line = null; try { - while ((line = reader.readLine()) != null) - sb2.append(line + "\n"); + while ((line = reader.readLine()) != null) { + sb2.append(line + "\n"); + } result = sb2.toString(); } catch (final IOException e) { success = false; @@ -1975,73 +1840,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv return new ConsoleProxyLoadAnswer(cmd, proxyVmId, proxyVmName, success, result); } - private Answer execute(StartConsoleProxyCommand cmd) { - final ConsoleProxyVO router = cmd.getProxy(); - String result = null; - - State state = State.Stopped; - synchronized(_vms) { - _vms.put(cmd.getVmName(), State.Starting); - } - try { - - result = startConsoleProxy(cmd); - if (result != null) { - throw new ExecutionException(result, null); - } - - result = _virtRouterResource.connect(router.getGuestIpAddress(), cmd.getProxyCmdPort()); - if (result != null) { - throw new ExecutionException(result, null); - } - - state = State.Running; - return new StartConsoleProxyAnswer(cmd); - } catch (final ExecutionException e) { - return new Answer(cmd, false, e.getMessage()); - } catch (final Throwable th) { - s_logger.warn("Exception while starting router.", th); - return createErrorAnswer(cmd, "Unable to start router", th); - } finally { - synchronized(_vms) { - _vms.put(cmd.getVmName(), state); - } - } - } - - private Answer execute(StartSecStorageVmCommand cmd) { - final SecondaryStorageVmVO secVm = cmd.getSecondaryStorageVmVO(); - String result = null; - - State state = State.Stopped; - synchronized(_vms) { - _vms.put(cmd.getVmName(), State.Starting); - } - try { - result = startSecStorageVM(cmd); - if (result != null) { - throw new ExecutionException(result, null); - } - - result = _virtRouterResource.connect(secVm.getGuestIpAddress(), cmd.getProxyCmdPort()); - if (result != null) { - throw new ExecutionException(result, null); - } - - state = State.Running; - return new StartSecStorageVmAnswer(cmd); - } catch (final ExecutionException e) { - return new Answer(cmd, false, e.getMessage()); - } catch (final Throwable th) { - s_logger.warn("Exception while starting router.", th); - return createErrorAnswer(cmd, "Unable to start router", th); - } finally { - synchronized(_vms) { - _vms.put(cmd.getVmName(), state); - } - } - } - private Answer execute(AttachIsoCommand cmd) { try { attachOrDetachISO(cmd.getVmName(), cmd.getIsoPath(), cmd.isAttach()); @@ -2071,55 +1869,23 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv protected static List findVolumes(final List volumes, final Volume.VolumeType vType, boolean singleVolume) { List filteredVolumes = new ArrayList(); - if (volumes == null) - return filteredVolumes; + if (volumes == null) { + return filteredVolumes; + } for (final VolumeVO v: volumes) { if (v.getVolumeType() == vType) { filteredVolumes.add(v); - if(singleVolume) - return filteredVolumes; + if(singleVolume) { + return filteredVolumes; + } } } return filteredVolumes; } - private Answer execute(StartRouterCommand cmd) { - - final VirtualRouter router = cmd.getRouter(); - - String result = null; - - State state = State.Stopped; - synchronized(_vms) { - _vms.put(cmd.getVmName(), State.Starting); - } - try { - result = startDomainRouter(cmd); - if (result != null) { - throw new ExecutionException(result, null); - } - - result = _virtRouterResource.connect(router.getPrivateIpAddress()); - if (result != null) { - throw new ExecutionException(result, null); - } - - state = State.Running; - return new StartRouterAnswer(cmd); - } catch (final ExecutionException e) { - return new Answer(cmd, false, e.getMessage()); - } catch (final Throwable th) { - return createErrorAnswer(cmd, "Unable to start router", th); - } finally { - synchronized(_vms) { - _vms.put(cmd.getVmName(), state); - } - } - } - private Answer execute(ReadyCommand cmd) { return new ReadyAnswer(cmd); } @@ -2228,12 +1994,15 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv result = e.getMessage(); } finally { try { - if (dm != null) - dm.free(); - if (dconn != null) - dconn.close(); - if (destDomain != null) - destDomain.free(); + if (dm != null) { + dm.free(); + } + if (dconn != null) { + dconn.close(); + } + if (destDomain != null) { + destDomain.free(); + } } catch (final LibvirtException e) { } @@ -2398,8 +2167,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv for (String vmName : vmNames) { VmStatsEntry statEntry = getVmStat(vmName); - if( statEntry == null ) - continue; + if( statEntry == null ) { + continue; + } vmStatsNameMap.put(vmName, statEntry); } @@ -2516,33 +2286,10 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv script.execute(); } - if (result != null) - return new Answer(cmd, false, result); - else - return new Answer(cmd, true, null); - } - - protected StartAnswer execute(StartCommand cmd) { - final String vmName = cmd.getVmName(); - String result = null; - - State state = State.Stopped; - synchronized(_vms) { - _vms.put(vmName, State.Starting); - } - - try { - result = startVM(cmd); - if (result != null) { - return new StartAnswer(cmd, result); - } - - state = State.Running; - return new StartAnswer(cmd); - } finally { - synchronized(_vms) { - _vms.put(vmName, state); - } + if (result != null) { + return new Answer(cmd, false, result); + } else { + return new Answer(cmd, true, null); } } @@ -2562,68 +2309,19 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv throw e; } finally { try { - if (sp != null) - sp.free(); + if (sp != null) { + sp.free(); + } } catch (LibvirtException e) { } } } - protected synchronized String startVM(StartCommand cmd) { - List nics = null; - try { - - String uuid = UUID.nameUUIDFromBytes(cmd.getVmName().getBytes()).toString(); - - nics = createUserVMNetworks(cmd); - - List disks = createVMDisk(cmd.getVolumes(), cmd.getGuestOSDescription(), cmd.getISOPath()); - - - - String vmDomainXML = defineVMXML(cmd.getVmName(), uuid, cmd.getRamSize(), cmd.getCpu(), cmd.getArch(), - nics, disks, cmd.getVncPassword(), - cmd.getGuestOSDescription()); - - s_logger.debug(vmDomainXML); - - // Start the domain - startDomain(cmd.getVmName(), vmDomainXML); - - // Attach each data volume to the VM, if there is a deferred attached disk - for (DiskDef disk : disks) { - if (disk.isAttachDeferred()) { - attachOrDetachDisk(true, cmd.getVmName(), disk.getDiskPath()); - } - } - - /*if (isDirectAttachedNetwork(cmd.getGuestNetworkId())) - default_network_rules(cmd.getVmName(), cmd.getGuestIpAddress());*/ - - return null; - } catch(LibvirtException e) { - if (nics != null) - cleanupVMNetworks(nics); - s_logger.error("Unable to start VM: ", e); - return "Unable to start VM due to: " + e.getMessage(); - } catch (InternalErrorException e) { - if (nics != null) - cleanupVMNetworks(nics); - s_logger.error("Unable to start VM: ", e); - return "Unable to start VM due to: " + e.getMessage(); - } catch (URISyntaxException e) { - if (nics != null) - cleanupVMNetworks(nics); - s_logger.error("Unable to start VM: ", e); - return "Unable to start VM due to: " + e.getMessage(); - } - } - - private void handleVmStartFailure(String vmName, LibvirtVMDef vm) { - if (vm != null && vm.getDevices() != null) - cleanupVMNetworks(vm.getDevices().getInterfaces()); + if (vm != null && vm.getDevices() != null) { + cleanupVMNetworks(vm.getDevices().getInterfaces()); + } } private LibvirtVMDef createVMFromSpec(VirtualMachineTO vmTO) { @@ -2684,8 +2382,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv NicTO[] nics = vmSpec.getNics(); for (int i = 0; i < nics.length; i++) { for (NicTO nic : vmSpec.getNics()) { - if (nic.getDeviceId() == i) - createVif(vm, nic); + if (nic.getDeviceId() == i) { + createVif(vm, nic); + } } } } @@ -2979,10 +2678,11 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv dm.detachDevice(xml); } } catch (LibvirtException e) { - if (attach) - s_logger.warn("Failed to attach device to " + vmName + ": " + e.getMessage()); - else - s_logger.warn("Failed to detach device from " + vmName + ": " + e.getMessage()); + if (attach) { + s_logger.warn("Failed to attach device to " + vmName + ": " + e.getMessage()); + } else { + s_logger.warn("Failed to detach device from " + vmName + ": " + e.getMessage()); + } throw e; } catch (Exception e) { throw new InternalErrorException(e.toString()); @@ -3157,8 +2857,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv s_logger.trace(e.getMessage()); } finally { try { - if (dm != null) - dm.free(); + if (dm != null) { + dm.free(); + } } catch (final LibvirtException e) { } @@ -3200,8 +2901,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv s_logger.warn("Unable to get vms", e); } finally { try { - if (dm != null) - dm.free(); + if (dm != null) { + dm.free(); + } } catch (final LibvirtException e) { } @@ -3247,8 +2949,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv s_logger.warn("Unable to get vms", e); } finally { try { - if (dm != null) - dm.free(); + if (dm != null) { + dm.free(); + } } catch (LibvirtException e) { } @@ -3272,8 +2975,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv s_logger.warn("Unable to get vms", e); } finally { try { - if (dm != null) - dm.free(); + if (dm != null) { + dm.free(); + } } catch (LibvirtException e) { } @@ -3298,10 +3002,12 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv LibvirtCapXMLParser parser = new LibvirtCapXMLParser(); parser.parseCapabilitiesXML(_conn.getCapabilities()); ArrayList oss = parser.getGuestOsType(); - for(String s : oss) - /*Even host supports guest os type more than hvm, we only report hvm to management server*/ - if (s.equalsIgnoreCase("hvm")) - osType = "hvm"; + for(String s : oss) { + /*Even host supports guest os type more than hvm, we only report hvm to management server*/ + if (s.equalsIgnoreCase("hvm")) { + osType = "hvm"; + } + } } catch (LibvirtException e) { } @@ -3320,8 +3026,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv protected void cleanupVM(final String vmName, final String vnet) { s_logger.debug("Trying to cleanup the vnet: " + vnet); - if (vnet != null) - cleanupVnet(vnet); + if (vnet != null) { + cleanupVnet(vnet); + } _vmStats.remove(vmName); } @@ -3344,8 +3051,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv msg = e.getMessage(); } finally { try { - if (dm != null) - dm.free(); + if (dm != null) { + dm.free(); + } } catch (LibvirtException e) { } @@ -3378,8 +3086,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv s_logger.debug("Failed to get vm status:" + e.getMessage()); } finally { try { - if (dm != null) - dm.free(); + if (dm != null) { + dm.free(); + } } catch (LibvirtException l) { } @@ -3408,8 +3117,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } finally { try { - if (dm != null) - dm.free(); + if (dm != null) { + dm.free(); + } } catch (LibvirtException l) { } @@ -3452,8 +3162,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv return e.getMessage(); } finally { try { - if (dm != null) - dm.free(); + if (dm != null) { + dm.free(); + } } catch (LibvirtException e) { } } @@ -3463,8 +3174,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv public synchronized String cleanupVnet(final String vnetId) { // VNC proxy VMs do not have vnet - if(vnetId == null || vnetId.isEmpty() || isDirectAttachedNetwork(vnetId)) - return null; + if(vnetId == null || vnetId.isEmpty() || isDirectAttachedNetwork(vnetId)) { + return null; + } final List names = getAllVmNames(); @@ -3494,8 +3206,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv throw new InternalErrorException("Can't get vnc port: " + e); } finally { try { - if (dm != null) - dm.free(); + if (dm != null) { + dm.free(); + } } catch (LibvirtException l) { } @@ -3531,8 +3244,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv parser.parseCapabilitiesXML(_conn.getCapabilities()); ArrayList osTypes = parser.getGuestOsType(); for (String o : osTypes) { - if (o.equalsIgnoreCase("hvm")) - return true; + if (o.equalsIgnoreCase("hvm")) { + return true; + } } } catch (LibvirtException e) { @@ -3545,8 +3259,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv if (f.exists()) { return "/usr/bin/cloud-qemu-system-x86_64"; } else { - if (_conn == null) - return null; + if (_conn == null) { + return null; + } LibvirtCapXMLParser parser = new LibvirtCapXMLParser(); try { @@ -3572,8 +3287,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv return null; } finally { try { - if (dm != null) - dm.free(); + if (dm != null) { + dm.free(); + } } catch (LibvirtException l) { } @@ -3581,8 +3297,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } private boolean isGuestPVEnabled(String guestOS) { - if (guestOS == null) - return false; + if (guestOS == null) { + return false; + } String guestOSName = KVMGuestOsMapper.getGuestOsName(guestOS); if (guestOSName.startsWith("Ubuntu 10.04") || guestOSName.startsWith("Ubuntu 9") || @@ -3600,17 +3317,19 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv guestOSName.startsWith("Red Hat Enterprise Linux 5.5") || guestOSName.startsWith("Red Hat Enterprise Linux 6") || guestOSName.startsWith("Debian GNU/Linux") - ) - return true; - else - return false; + ) { + return true; + } else { + return false; + } } private boolean isCentosHost() { if (_hvVersion <=9 ) { return true; - } else - return false; + } else { + return false; + } } private StorageVol createTmplDataDisk(String rootkPath, long size) throws LibvirtException, InternalErrorException { @@ -3653,105 +3372,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv private String getVnetIdFromBrName(String vnetBrName) { return vnetBrName.replaceAll("cloudVirBr", ""); } - private List createUserVMNetworks(StartCommand cmd) throws InternalErrorException { - List nics = new ArrayList(); - InterfaceDef.nicModel nicModel = getGuestNicModel(cmd.getGuestOSDescription()); - String guestMac = cmd.getGuestMacAddress(); - String brName; - InterfaceDef pubNic = new InterfaceDef(); - if (cmd.getGuestIpAddress() == null) { - /*guest network is direct attached without external DHCP server*/ - brName = _privBridgeName; - pubNic.setHostNetType(hostNicType.DIRECT_ATTACHED_WITHOUT_DHCP); - } else if ("untagged".equalsIgnoreCase(cmd.getGuestNetworkId())){ - /*guest network is direct attached with domr DHCP server*/ - brName = _privBridgeName; - pubNic.setHostNetType(hostNicType.DIRECT_ATTACHED_WITH_DHCP); - } else { - /*guest network is vnet*/ - String vnetId = getVnetId(cmd.getGuestNetworkId()); - brName = setVnetBrName(vnetId); - createVnet(vnetId, _pifs.first()); - pubNic.setHostNetType(hostNicType.VLAN); - } - pubNic.defBridgeNet(brName, null, guestMac, nicModel); - nics.add(pubNic); - return nics; - } - - private List createRouterVMNetworks(StartRouterCommand cmd) throws InternalErrorException { - List nics = new ArrayList(); - VirtualRouter router = cmd.getRouter(); - String guestMac = router.getGuestMacAddress(); - String privateMac = router.getPrivateMacAddress(); - String pubMac = router.getPublicMacAddress(); - String brName; - InterfaceDef pubNic = new InterfaceDef(); - InterfaceDef privNic = new InterfaceDef(); - InterfaceDef vnetNic = new InterfaceDef(); - - /*nic 0, guest network*/ - if ("untagged".equalsIgnoreCase(router.getVnet())){ - vnetNic.defBridgeNet(_privBridgeName, null, guestMac, InterfaceDef.nicModel.VIRTIO); - - } else { - String vnetId = getVnetId(router.getVnet()); - brName = setVnetBrName(vnetId); - String vnetDev = "vtap" + vnetId; - createVnet(vnetId, _pifs.first()); - vnetNic.defBridgeNet(brName, null, guestMac, InterfaceDef.nicModel.VIRTIO); - } - nics.add(vnetNic); - - /*nic 1: link local*/ - privNic.defPrivateNet(_privNwName, null, privateMac, InterfaceDef.nicModel.VIRTIO); - nics.add(privNic); - - /*nic 2: public */ - if ("untagged".equalsIgnoreCase(router.getVlanId())) { - pubNic.defBridgeNet(_publicBridgeName, null, pubMac, InterfaceDef.nicModel.VIRTIO); - } else { - String vnetId = getVnetId(router.getVlanId()); - brName = setVnetBrName(vnetId); - String vnetDev = "vtap" + vnetId; - createVnet(vnetId, _pifs.second()); - pubNic.defBridgeNet(brName, null, pubMac, InterfaceDef.nicModel.VIRTIO); - } - nics.add(pubNic); - return nics; - } - - private List createSysVMNetworks(String guestMac, String privMac, String pubMac, String vlanId) throws InternalErrorException { - List nics = new ArrayList(); - String brName; - InterfaceDef pubNic = new InterfaceDef(); - InterfaceDef privNic = new InterfaceDef(); - InterfaceDef vnetNic = new InterfaceDef(); - - /*nic 0: link local*/ - privNic.defPrivateNet(_privNwName, null, guestMac, InterfaceDef.nicModel.VIRTIO); - nics.add(privNic); - - /*nic 1, priv network*/ - - vnetNic.defBridgeNet(_privBridgeName, null, privMac, InterfaceDef.nicModel.VIRTIO); - nics.add(vnetNic); - - /*nic 2: public */ - if ("untagged".equalsIgnoreCase(vlanId)) { - pubNic.defBridgeNet(_publicBridgeName, null, pubMac, InterfaceDef.nicModel.VIRTIO); - } else { - String vnetId = getVnetId(vlanId); - brName = setVnetBrName(vnetId); - String vnetDev = "vtap" + vnetId; - createVnet(vnetId, _pifs.second()); - pubNic.defBridgeNet(brName, null, pubMac, InterfaceDef.nicModel.VIRTIO); - } - nics.add(pubNic); - - return nics; - } - private void cleanupVMNetworks(List nics) { for (InterfaceDef nic : nics) { if (nic.getHostNetType() == hostNicType.VNET) { @@ -3807,14 +3427,16 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv StorageVol isoVol = getVolume(_conn, isoURI); if (isoVol != null) { isoPath = isoVol.getPath(); - } else - throw new InternalErrorException("Can't find iso volume"); + } else { + throw new InternalErrorException("Can't find iso volume"); + } } List dataVolumes = findVolumes(vols, VolumeType.DATADISK, false); VolumeVO dataVolume = null; - if (dataVolumes.size() > 0) - dataVolume = dataVolumes.get(0); + if (dataVolumes.size() > 0) { + dataVolume = dataVolumes.get(0); + } DiskDef.diskBus diskBusType = getGuestDiskModel(guestOSType); @@ -4030,10 +3652,11 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv String[] lines = parser.getLines().split("\\n"); for (String line : lines) { String[] tokens = line.split(" "); - if (!tokens[2].equalsIgnoreCase(linkLocalBr)) - Script.runSimpleBashScript("ip route del " + NetUtils.getLinkLocalCIDR()); - else - foundLinkLocalBr = true; + if (!tokens[2].equalsIgnoreCase(linkLocalBr)) { + Script.runSimpleBashScript("ip route del " + NetUtils.getLinkLocalCIDR()); + } else { + foundLinkLocalBr = true; + } } } if (!foundLinkLocalBr) { diff --git a/core/src/com/cloud/agent/api/StartAnswer.java b/core/src/com/cloud/agent/api/StartAnswer.java deleted file mode 100755 index bec39b15237..00000000000 --- a/core/src/com/cloud/agent/api/StartAnswer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -package com.cloud.agent.api; - - -/** - * @author ahuang - * - */ -public class StartAnswer extends Answer { - - protected StartAnswer() { - } - - public StartAnswer(StartCommand cmd) { - super(cmd); - } - - public StartAnswer(StartCommand cmd, String details) { - super(cmd, false, details); - } -} diff --git a/core/src/com/cloud/agent/api/StartCommand.java b/core/src/com/cloud/agent/api/StartCommand.java deleted file mode 100755 index 7960d1ec571..00000000000 --- a/core/src/com/cloud/agent/api/StartCommand.java +++ /dev/null @@ -1,195 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -package com.cloud.agent.api; - -import java.util.List; - -import com.cloud.network.router.VirtualRouter; -import com.cloud.offering.ServiceOffering; -import com.cloud.storage.VolumeVO; -import com.cloud.uservm.UserVm; -import com.cloud.vm.UserVmVO; - -public class StartCommand extends AbstractStartCommand { - long id; - String guestIpAddress; - String gateway; - int ramSize; - String imagePath; - String guestNetworkId; - String guestMacAddress; - String vncPassword; - String externalVlan; - String externalMacAddress; - int utilization; - int cpuWeight; - int cpu; - int networkRateMbps; - int networkRateMulticastMbps; - String hostName; - String arch; - String isoPath; - boolean bootFromISO; - String guestOSDescription; - - public StartCommand(UserVm vm, String vmName, ServiceOffering offering, int networkRate, int multicastRate, VirtualRouter router, String storageHost, String imagePath, String guestNetworkId, int utilization, int cpuWeight, List vols, int bits, String isoPath, boolean bootFromISO, String guestOSDescription) { - super(vmName, storageHost, vols); - initialize(vm, offering, networkRate, multicastRate, router, imagePath, guestNetworkId, utilization, cpuWeight, bits, isoPath, bootFromISO, guestOSDescription); - } - - private void initialize(UserVm vm, - ServiceOffering offering, int networkRate, int multicastRate, VirtualRouter router, String imagePath, - String guestNetworkId, int utilization, int cpuWeight, int bits, String isoPath, boolean bootFromISO, String guestOSDescription) { - id = vm.getId(); - guestIpAddress = vm.getGuestIpAddress(); - if (router != null) - gateway = router.getPrivateIpAddress(); - ramSize = offering.getRamSize(); - cpu = offering.getCpu(); - this.utilization= utilization; - this.cpuWeight = cpuWeight; - this.imagePath = imagePath; - this.guestNetworkId = guestNetworkId; - guestMacAddress = vm.getGuestMacAddress(); - vncPassword = vm.getVncPassword(); - hostName = vm.getName(); - networkRateMbps = networkRate; - networkRateMulticastMbps = multicastRate; - if (bits == 32) { - arch = "i686"; - } else { - arch = "x86_64"; - } - this.isoPath = isoPath; - this.bootFromISO = bootFromISO; - this.guestOSDescription = guestOSDescription; - } - - public String getArch() { - return arch; - } - - public String getHostName() { - return hostName; - } - - protected StartCommand() { - super(); - } - - public StartCommand(UserVmVO vm, String vmName, ServiceOffering offering, int networkRate, int multicastRate, - VirtualRouter router, String[] storageIps, String imagePath, - String guestNetworkId, int utilization, int cpuWeight, List vols, - boolean mirroredVols, int bits, String isoPath, boolean bootFromISO, String guestOSDescription) { - super(vmName, storageIps, vols, mirroredVols); - initialize(vm, offering, networkRate, multicastRate, router, imagePath, guestNetworkId, utilization, cpuWeight, bits, isoPath, bootFromISO, guestOSDescription); - - } - - @Override - public boolean executeInSequence() { - return true; - } - - public int getCpu() { - return cpu; - } - - public int getUtilization() { - return utilization; - } - - public int getCpuWeight() { - return cpuWeight; - } - - public long getId() { - return id; - } - - public String getGuestIpAddress() { - return guestIpAddress; - } - - public String getGuestMacAddress() { - return guestMacAddress; - } - - public String getVncPassword() { - return vncPassword; - } - - public String getGateway() { - return gateway; - } - - public String getGuestNetworkId() { - return guestNetworkId; - } - - - public int getRamSize() { - return ramSize; - } - - public String getImagePath() { - return imagePath; - } - - public int getNetworkRateMbps() { - return networkRateMbps; - } - - public int getNetworkRateMulticastMbps() { - return networkRateMulticastMbps; - } - - public String getISOPath() { - return isoPath; - } - - public boolean getBootFromISO() { - return bootFromISO; - } - - public void setExternalVlan(String vlanId) { - this.externalVlan = vlanId; - - } - - public String getExternalVlan() { - return externalVlan; - } - - public String getExternalMacAddress() { - return externalMacAddress; - } - - public void setExternalMacAddress(String externalMacAddress) { - this.externalMacAddress = externalMacAddress; - } - - public String getGuestOSDescription() { - return this.guestOSDescription; - } - - public void setGuestOSDescription(String guestOSDescription) { - this.guestOSDescription = guestOSDescription; - } - -} diff --git a/core/src/com/cloud/agent/api/StartConsoleProxyAnswer.java b/core/src/com/cloud/agent/api/StartConsoleProxyAnswer.java deleted file mode 100644 index 5c484633d28..00000000000 --- a/core/src/com/cloud/agent/api/StartConsoleProxyAnswer.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -package com.cloud.agent.api; - -public class StartConsoleProxyAnswer extends Answer { - String privateIpAddress; - String privateMacAddress; - - protected StartConsoleProxyAnswer() { - } - - public StartConsoleProxyAnswer(StartConsoleProxyCommand cmd) { - super(cmd); - } - - public StartConsoleProxyAnswer(StartConsoleProxyCommand cmd, String privateIp, String privateMac) { - super(cmd); - this.privateIpAddress = privateIp; - this.privateMacAddress = privateMac; - } - - public String getPrivateIpAddress() { - return privateIpAddress; - } - - public String getPrivateMacAddress() { - return privateMacAddress; - } - - public StartConsoleProxyAnswer(StartConsoleProxyCommand cmd, String details) { - super(cmd, false, details); - } -} diff --git a/core/src/com/cloud/agent/api/StartConsoleProxyCommand.java b/core/src/com/cloud/agent/api/StartConsoleProxyCommand.java deleted file mode 100644 index 93db6751518..00000000000 --- a/core/src/com/cloud/agent/api/StartConsoleProxyCommand.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -package com.cloud.agent.api; - -import java.util.List; - -import com.cloud.storage.VolumeVO; -import com.cloud.vm.ConsoleProxyVO; - -public class StartConsoleProxyCommand extends AbstractStartCommand { - - private ConsoleProxyVO proxy; - int networkRateMbps; - int networkRateMulticastMbps; - private int proxyCmdPort; - private String vncPort; - private String urlPort; - private String mgmt_host; - private int mgmt_port; - private boolean sslEnabled; - private String guestOSDescription; - - protected StartConsoleProxyCommand() { - } - - public StartConsoleProxyCommand(int networkRateMbps, int networkRateMulticastMbps, int proxyCmdPort, - ConsoleProxyVO proxy, String vmName, String storageHost, - List vols, String vncPort, String urlPort, String mgmtHost, int mgmtPort, - boolean sslEnabled, String guestOSDescription) { - super(vmName, storageHost, vols); - this.networkRateMbps = networkRateMbps; - this.networkRateMulticastMbps = networkRateMulticastMbps; - this.proxyCmdPort = proxyCmdPort; - this.proxy = new ConsoleProxyVO(proxy); - this.vncPort = vncPort; - this.urlPort = urlPort; - this.mgmt_host = mgmtHost; - this.mgmt_port = mgmtPort; - this.sslEnabled = sslEnabled; - this.guestOSDescription = guestOSDescription; - } - - @Override - public boolean executeInSequence() { - return true; - } - - public ConsoleProxyVO getProxy() { - return proxy; - } - - public int getNetworkRateMbps() { - return networkRateMbps; - } - - public String getGuestOSDescription() { - return guestOSDescription; - } - - public int getNetworkRateMulticastMbps() { - return networkRateMulticastMbps; - } - - public int getProxyCmdPort() { - return proxyCmdPort; - } - - public String getVNCPort() { - return this.vncPort; - } - - public String getURLPort() { - return this.urlPort; - } - - public String getManagementHost() { - return mgmt_host; - } - - public int getManagementPort() { - return mgmt_port; - } - - public String getBootArgs() { - String eth1Ip = (proxy.getPrivateIpAddress() == null)? "0.0.0.0":proxy.getPrivateIpAddress(); - String eth1NetMask = (proxy.getPrivateNetmask() == null) ? "0.0.0.0":proxy.getPrivateNetmask(); - String eth2Ip = (proxy.getPublicIpAddress() == null)?"0.0.0.0" : proxy.getPublicIpAddress(); - String eth2NetMask = (proxy.getPublicNetmask() == null) ? "0.0.0.0":proxy.getPublicNetmask(); - String gateWay = (proxy.getGateway() == null) ? "0.0.0.0" : proxy.getGateway(); - - String basic = " eth0ip=" + proxy.getGuestIpAddress() + " eth0mask=" + proxy.getGuestNetmask() + " eth1ip=" - + eth1Ip + " eth1mask=" + eth1NetMask + " eth2ip=" - + eth2Ip + " eth2mask=" + eth2NetMask + " gateway=" + gateWay - + " dns1=" + proxy.getDns1() + " type=consoleproxy"+ " name=" + proxy.getName() + " template=domP"; - if (proxy.getDns2() != null) { - basic = basic + " dns2=" + proxy.getDns2(); - } - basic = basic + " host=" + mgmt_host + " port=" + mgmt_port; - if(sslEnabled) - basic = basic + " premium=true"; - if (proxy.getPrivateIpAddress() == null || proxy.getPublicIpAddress() == null) { - basic = basic + " bootproto=dhcp"; - } - return basic; - } -} diff --git a/core/src/com/cloud/agent/api/StartRouterAnswer.java b/core/src/com/cloud/agent/api/StartRouterAnswer.java deleted file mode 100644 index b8b4f2ec603..00000000000 --- a/core/src/com/cloud/agent/api/StartRouterAnswer.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -package com.cloud.agent.api; - - -/** - * @author chiradeep - * - */ -public class StartRouterAnswer extends Answer { - String privateIpAddress; - String privateMacAddress; - - protected StartRouterAnswer() { - } - - public StartRouterAnswer(StartRouterCommand cmd) { - super(cmd); - } - - public StartRouterAnswer(StartRouterCommand cmd, String privateIp, String privateMac) { - super(cmd); - this.privateIpAddress = privateIp; - this.privateMacAddress = privateMac; - } - - public String getPrivateIpAddress() { - return privateIpAddress; - } - - public String getPrivateMacAddress() { - return privateMacAddress; - } - - public StartRouterAnswer(StartRouterCommand cmd, String details) { - super(cmd, false, details); - } - -} diff --git a/core/src/com/cloud/agent/api/StartRouterCommand.java b/core/src/com/cloud/agent/api/StartRouterCommand.java deleted file mode 100755 index 9ffa97fe570..00000000000 --- a/core/src/com/cloud/agent/api/StartRouterCommand.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -package com.cloud.agent.api; - -import java.util.List; - -import com.cloud.network.router.VirtualRouter; -import com.cloud.network.router.VirtualRouter.Role; -import com.cloud.storage.VolumeVO; -import com.cloud.vm.DomainRouterVO; - - -public class StartRouterCommand extends AbstractStartCommand { - - DomainRouterVO router; - int networkRateMbps; - int networkRateMulticastMbps; - private String guestOSDescription; - private String mgmt_host; - - protected StartRouterCommand() { - super(); - } - - @Override - public boolean executeInSequence() { - return true; - } - - public StartRouterCommand(DomainRouterVO router, int networkRateMbps, int networkRateMulticastMbps, - String routerName, String[] storageIps, List vols, boolean mirroredVols, - String guestOSDescription, String mgmtHost) { - super(routerName, storageIps, vols, mirroredVols); - this.router = new DomainRouterVO(router); - this.networkRateMbps = networkRateMbps; - this.networkRateMulticastMbps = networkRateMulticastMbps; - this.guestOSDescription = guestOSDescription; - this.mgmt_host = mgmtHost; - } - - public VirtualRouter getRouter() { - return router; - } - - public int getNetworkRateMbps() { - return networkRateMbps; - } - - public String getGuestOSDescription() { - return guestOSDescription; - } - - public int getNetworkRateMulticastMbps() { - return networkRateMulticastMbps; - } - - public String getManagementHost() { - return mgmt_host; - } - - - public String getBootArgs() { - String eth2Ip = router.getPublicIpAddress()==null?"0.0.0.0":router.getPublicIpAddress(); - String basic = " eth0ip=" + router.getGuestIpAddress() + " eth0mask=" + router.getGuestNetmask() + " eth1ip=" - + router.getPrivateIpAddress() + " eth1mask=" + router.getPrivateNetmask() + " gateway=" + router.getGateway() - + " dns1=" + router.getDns1() + " name=" + router.getName() + " mgmtcidr=" + mgmt_host; - if (!router.getPublicMacAddress().equalsIgnoreCase("FE:FF:FF:FF:FF:FF")) { - basic = basic + " eth2ip=" + eth2Ip + " eth2mask=" + router.getPublicNetmask(); - } - if (router.getDns2() != null) { - basic = basic + " dns2=" + router.getDns2(); - } - if (getDhcpRange() != null) { - basic = basic + " dhcprange=" + getDhcpRange(); - } - if (router.getRole() == Role.DHCP_FIREWALL_LB_PASSWD_USERDATA) { - basic = basic + " type=router"; - } else if (router.getRole() == Role.DHCP_USERDATA) { - basic = basic + " type=dhcpsrvr"; - } - if(router.getDomain() != null){ - basic += " domain="+router.getDomain(); - } - return basic; - } - - public String getDhcpRange() { - String [] range = router.getDhcpRange(); - String result = null; - if (range[0] != null) { - result = range[0]; - } - return result; - } - - -} diff --git a/core/src/com/cloud/agent/api/StartSecStorageVmAnswer.java b/core/src/com/cloud/agent/api/StartSecStorageVmAnswer.java deleted file mode 100644 index 6e2296a63b1..00000000000 --- a/core/src/com/cloud/agent/api/StartSecStorageVmAnswer.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -package com.cloud.agent.api; - -public class StartSecStorageVmAnswer extends Answer { - String privateIpAddress; - String privateMacAddress; - - protected StartSecStorageVmAnswer() { - } - - public StartSecStorageVmAnswer(StartSecStorageVmCommand cmd) { - super(cmd); - } - - public StartSecStorageVmAnswer(StartSecStorageVmCommand cmd, String privateIp, String privateMac) { - super(cmd); - this.privateIpAddress = privateIp; - this.privateMacAddress = privateMac; - } - - public String getPrivateIpAddress() { - return privateIpAddress; - } - - public String getPrivateMacAddress() { - return privateMacAddress; - } - - public StartSecStorageVmAnswer(StartSecStorageVmCommand cmd, String details) { - super(cmd, false, details); - } -} diff --git a/core/src/com/cloud/agent/api/StartSecStorageVmCommand.java b/core/src/com/cloud/agent/api/StartSecStorageVmCommand.java deleted file mode 100644 index 1268c9b4dfc..00000000000 --- a/core/src/com/cloud/agent/api/StartSecStorageVmCommand.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -package com.cloud.agent.api; - -import java.net.URISyntaxException; -import java.util.List; - -import com.cloud.storage.VolumeVO; -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.net.NfsUtils; -import com.cloud.vm.SecondaryStorageVmVO; - -public class StartSecStorageVmCommand extends AbstractStartCommand { - - private SecondaryStorageVmVO secStorageVm; - int networkRateMbps; - int networkRateMulticastMbps; - private int proxyCmdPort; - private String mgmt_host; - private int mgmt_port; - private boolean sslCopy; - private String guestOSDescription; - - protected StartSecStorageVmCommand() { - } - - public StartSecStorageVmCommand(int networkRateMbps, int networkRateMulticastMbps, int proxyCmdPort, - SecondaryStorageVmVO secStorageVm, String vmName, String storageHost, - List vols, String mgmtHost, int mgmtPort, boolean sslCopy, String guestOSDescription) { - super(vmName, storageHost, vols); - this.networkRateMbps = networkRateMbps; - this.networkRateMulticastMbps = networkRateMulticastMbps; - this.proxyCmdPort = proxyCmdPort; - this.secStorageVm = new SecondaryStorageVmVO(secStorageVm); - - this.mgmt_host = mgmtHost; - this.mgmt_port = mgmtPort; - this.sslCopy = sslCopy; - this.guestOSDescription = guestOSDescription; - } - - @Override - public boolean executeInSequence() { - return true; - } - - public SecondaryStorageVmVO getSecondaryStorageVmVO() { - return secStorageVm; - } - - public int getNetworkRateMbps() { - return networkRateMbps; - } - - public String getGuestOSDescription() { - return guestOSDescription; - } - - public int getNetworkRateMulticastMbps() { - return networkRateMulticastMbps; - } - - public int getProxyCmdPort() { - return proxyCmdPort; - } - - - public String getManagementHost() { - return mgmt_host; - } - - public int getManagementPort() { - return mgmt_port; - } - - public String getBootArgs() { - String eth1Ip = (secStorageVm.getPrivateIpAddress() == null)? "0.0.0.0":secStorageVm.getPrivateIpAddress(); - String eth1NetMask = (secStorageVm.getPrivateNetmask() == null) ? "0.0.0.0":secStorageVm.getPrivateNetmask(); - String eth2Ip = (secStorageVm.getPublicIpAddress() == null)?"0.0.0.0" : secStorageVm.getPublicIpAddress(); - String eth2NetMask = (secStorageVm.getPublicNetmask() == null) ? "0.0.0.0":secStorageVm.getPublicNetmask(); - String gateWay = (secStorageVm.getGateway() == null) ? "0.0.0.0" : secStorageVm.getGateway(); - - String basic = " eth0ip=" + secStorageVm.getGuestIpAddress() + " eth0mask=" + secStorageVm.getGuestNetmask() + " eth1ip=" - + eth1Ip + " eth1mask=" + eth1NetMask + " eth2ip=" - + eth2Ip + " eth2mask=" + eth2NetMask + " gateway=" + gateWay - + " dns1=" + secStorageVm.getDns1() + " type=secstorage" + " name=" + secStorageVm.getName() + " template=domP"; - if (secStorageVm.getDns2() != null) { - basic = basic + " dns2=" + secStorageVm.getDns2(); - } - basic = basic + " host=" + mgmt_host + " port=" + mgmt_port; - String mountStr = null; - try { - mountStr = NfsUtils.url2Mount(secStorageVm.getNfsShare()); - } catch (URISyntaxException e1) { - throw new CloudRuntimeException("NFS url malformed in database? url=" + secStorageVm.getNfsShare()); - } - basic = basic + " mount.path=" + mountStr + " guid=" + secStorageVm.getGuid(); - basic = basic + " resource=com.cloud.storage.resource.NfsSecondaryStorageResource"; - basic = basic + " instance=SecStorage"; - basic = basic + " sslcopy=" + Boolean.toString(sslCopy); - if (secStorageVm.getPrivateIpAddress() == null || secStorageVm.getPublicIpAddress() == null) { - basic = basic + " bootproto=dhcp"; - } - return basic; - } -} diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index c2a25fc873e..29415425c71 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -108,14 +108,6 @@ import com.cloud.agent.api.SetupAnswer; import com.cloud.agent.api.SetupCommand; import com.cloud.agent.api.Start2Answer; import com.cloud.agent.api.Start2Command; -import com.cloud.agent.api.StartAnswer; -import com.cloud.agent.api.StartCommand; -import com.cloud.agent.api.StartConsoleProxyAnswer; -import com.cloud.agent.api.StartConsoleProxyCommand; -import com.cloud.agent.api.StartRouterAnswer; -import com.cloud.agent.api.StartRouterCommand; -import com.cloud.agent.api.StartSecStorageVmAnswer; -import com.cloud.agent.api.StartSecStorageVmCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; import com.cloud.agent.api.StartupStorageCommand; @@ -159,7 +151,6 @@ import com.cloud.host.Host.Type; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.TrafficType; -import com.cloud.network.router.VirtualRouter; import com.cloud.resource.ServerResource; import com.cloud.storage.Storage; import com.cloud.storage.Storage.ImageFormat; @@ -178,9 +169,7 @@ import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; import com.cloud.utils.script.Script; -import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.DiskProfile; -import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.State; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineName; @@ -374,10 +363,6 @@ public abstract class CitrixResourceBase implements ServerResource { return execute((DhcpEntryCommand) cmd); } else if (cmd instanceof VmDataCommand) { return execute((VmDataCommand) cmd); - } else if (cmd instanceof StartCommand) { - return execute((StartCommand) cmd); - } else if (cmd instanceof StartRouterCommand) { - return execute((StartRouterCommand) cmd); } else if (cmd instanceof ReadyCommand) { return execute((ReadyCommand) cmd); } else if (cmd instanceof GetHostStatsCommand) { @@ -430,10 +415,6 @@ public abstract class CitrixResourceBase implements ServerResource { return execute((GetStorageStatsCommand) cmd); } else if (cmd instanceof PrimaryStorageDownloadCommand) { return execute((PrimaryStorageDownloadCommand) cmd); - } else if (cmd instanceof StartConsoleProxyCommand) { - return execute((StartConsoleProxyCommand) cmd); - } else if (cmd instanceof StartSecStorageVmCommand) { - return execute((StartSecStorageVmCommand) cmd); } else if (cmd instanceof GetVncPortCommand) { return execute((GetVncPortCommand) cmd); } else if (cmd instanceof SetupCommand) { @@ -554,9 +535,9 @@ public abstract class CitrixResourceBase implements ServerResource { VBD.Record vbdr = new VBD.Record(); vbdr.VM = vm; - if (vdi != null) - vbdr.VDI = vdi; - else { + if (vdi != null) { + vbdr.VDI = vdi; + } else { vbdr.empty = true; } if (type == VolumeType.ROOT && bootLoaderType == BootloaderType.PyGrub) { @@ -962,31 +943,6 @@ public abstract class CitrixResourceBase implements ServerResource { return new SetupAnswer(cmd); } - protected Answer execute(StartSecStorageVmCommand cmd) { - Connection conn = getConnection(); - final String vmName = cmd.getVmName(); - SecondaryStorageVmVO storage = cmd.getSecondaryStorageVmVO(); - try { - Network network = Network.getByUuid(conn, _host.privateNetwork); - - String bootArgs = cmd.getBootArgs(); - bootArgs += " zone=" + _dcId; - bootArgs += " pod=" + _pod; - bootArgs += " localgw=" + _localGateway; - String result = startSystemVM(conn, vmName, storage.getVlanId(), network, cmd.getVolumes(), bootArgs, storage.getGuestMacAddress(), storage.getGuestIpAddress(), storage - .getPrivateMacAddress(), storage.getPublicMacAddress(), cmd.getProxyCmdPort(), storage.getRamSize(), cmd.getGuestOSDescription(), cmd.getNetworkRateMbps()); - if (result == null) { - return new StartSecStorageVmAnswer(cmd); - } - return new StartSecStorageVmAnswer(cmd, result); - - } catch (Exception e) { - String msg = "Exception caught while starting router vm " + vmName + " due to " + e.getMessage(); - s_logger.warn(msg, e); - return new StartSecStorageVmAnswer(cmd, msg); - } - } - protected SetPortForwardingRulesAnswer execute(SetPortForwardingRulesCommand cmd) { Connection conn = getConnection(); String args; @@ -2430,32 +2386,6 @@ public abstract class CitrixResourceBase implements ServerResource { return answer; } - protected VM createVmFromTemplate(Connection conn, StartCommand cmd) throws XenAPIException, XmlRpcException { - Set templates; - VM vm = null; - String stdType = cmd.getGuestOSDescription(); - String guestOsTypeName = getGuestOsType(stdType, cmd.getBootFromISO()); - templates = VM.getByNameLabel(conn, guestOsTypeName); - assert templates.size() == 1 : "Should only have 1 template but found " + templates.size(); - VM template = templates.iterator().next(); - vm = template.createClone(conn, cmd.getVmName()); - vm.removeFromOtherConfig(conn, "disks"); - - if (!(guestOsTypeName.startsWith("Windows") || guestOsTypeName.startsWith("Citrix") || guestOsTypeName.startsWith("Other"))) { - if (cmd.getBootFromISO()) { - vm.setPVBootloader(conn, "eliloader"); - Map otherConfig = vm.getOtherConfig(conn); - otherConfig.put( "install-repository", "cdrom"); - vm.setOtherConfig(conn, otherConfig); - } else { - vm.setPVBootloader(conn, "pygrub"); - } - } - return vm; - } - - - public boolean joinPool(String masterIp, String username, String password) { Connection hostConn = null; Connection poolConn = null; @@ -2617,142 +2547,6 @@ public abstract class CitrixResourceBase implements ServerResource { vm.setMemoryStaticMax(conn, memsize); } - protected StartAnswer execute(StartCommand cmd) { - Connection conn = getConnection(); - State state = State.Stopped; - VM vm = null; - SR isosr = null; - List> mounts = null; - try { - synchronized (_vms) { - _vms.put(cmd.getVmName(), State.Starting); - } - - List vols = cmd.getVolumes(); - - mounts = mount(conn, vols); - vm = createVmFromTemplate(conn, cmd); - - long memsize = cmd.getRamSize() * 1024L * 1024L; - setMemory(conn, vm, memsize); - - vm.setIsATemplate(conn, false); - - vm.setVCPUsMax(conn, (long) cmd.getCpu()); - vm.setVCPUsAtStartup(conn, (long) cmd.getCpu()); - - Host host = Host.getByUuid(conn, _host.uuid); - vm.setAffinity(conn, host); - - Map vcpuparam = new HashMap(); - - vcpuparam.put("weight", Integer.toString(cmd.getCpuWeight())); - vcpuparam.put("cap", Integer.toString(cmd.getUtilization())); - vm.setVCPUsParams(conn, vcpuparam); - - boolean bootFromISO = cmd.getBootFromISO(); - - /* create root VBD */ - VBD.Record vbdr = new VBD.Record(); - Ternary mount = mounts.get(0); - vbdr.VM = vm; - vbdr.VDI = mount.second(); - vbdr.bootable = !bootFromISO; - vbdr.userdevice = "0"; - vbdr.mode = Types.VbdMode.RW; - vbdr.type = Types.VbdType.DISK; - VBD.create(conn, vbdr); - - /* create data VBDs */ - for (int i = 1; i < mounts.size(); i++) { - mount = mounts.get(i); - // vdi.setNameLabel(conn, cmd.getVmName() + "-DATA"); - vbdr.VM = vm; - vbdr.VDI = mount.second(); - vbdr.bootable = false; - vbdr.userdevice = Long.toString(mount.third().getDeviceId()); - vbdr.mode = Types.VbdMode.RW; - vbdr.type = Types.VbdType.DISK; - vbdr.unpluggable = true; - VBD.create(conn, vbdr); - - } - - /* create CD-ROM VBD */ - VBD.Record cdromVBDR = new VBD.Record(); - cdromVBDR.VM = vm; - cdromVBDR.empty = true; - cdromVBDR.bootable = bootFromISO; - cdromVBDR.userdevice = "3"; - cdromVBDR.mode = Types.VbdMode.RO; - cdromVBDR.type = Types.VbdType.CD; - VBD cdromVBD = VBD.create(conn, cdromVBDR); - - /* insert the ISO VDI if isoPath is not null */ - String isopath = cmd.getISOPath(); - if (isopath != null) { - int index = isopath.lastIndexOf("/"); - - String mountpoint = isopath.substring(0, index); - URI uri = new URI(mountpoint); - isosr = createIsoSRbyURI(conn, uri, cmd.getVmName(), false); - - String isoname = isopath.substring(index + 1); - - VDI isovdi = getVDIbyLocationandSR(conn, isoname, isosr); - - if (isovdi == null) { - String msg = " can not find ISO " + cmd.getISOPath(); - s_logger.warn(msg); - return new StartAnswer(cmd, msg); - } else { - cdromVBD.insert(conn, isovdi); - } - - } - - createVIF(conn, vm, cmd.getGuestMacAddress(), cmd.getGuestNetworkId(), cmd.getNetworkRateMbps(), "0", false); - - if (cmd.getExternalMacAddress() != null && cmd.getExternalVlan() != null) { - createVIF(conn, vm, cmd.getExternalMacAddress(), cmd.getExternalVlan(), 0, "1", true); - } - - /* set action after crash as destroy */ - vm.setActionsAfterCrash(conn, Types.OnCrashBehaviour.DESTROY); - - vm.start(conn, false, true); - - if (_canBridgeFirewall) { - String result = callHostPlugin(conn, "vmops", "default_network_rules", - "vmName", cmd.getVmName(), - "vmIP", cmd.getGuestIpAddress(), - "vmMAC", cmd.getGuestMacAddress(), - "vmID", Long.toString(cmd.getId())); - if (result == null || result.isEmpty() || !Boolean.parseBoolean(result)) { - s_logger.warn("Failed to program default network rules for vm " + cmd.getVmName()); - } else { - s_logger.info("Programmed default network rules for vm " + cmd.getVmName()); - } - } - - state = State.Running; - return new StartAnswer(cmd); - } catch (Exception e) { - String msg = "Catch Exception: " + e.getClass().getName() + " due to " + e.toString(); - s_logger.warn(msg, e); - startvmfailhandle(conn, vm, mounts); - removeSR(conn, isosr); - state = State.Stopped; - return new StartAnswer(cmd, msg); - } finally { - synchronized (_vms) { - _vms.put(cmd.getVmName(), state); - } - - } - - } - protected VIF createVIF(Connection conn, VM vm, String mac, int rate, String devNum, Network network) throws XenAPIException, XmlRpcException, InternalErrorException { VIF.Record vifr = new VIF.Record(); @@ -2985,216 +2779,6 @@ public abstract class CitrixResourceBase implements ServerResource { return connect(conn, vmname, ipAddress, 3922); } - protected StartRouterAnswer execute(StartRouterCommand cmd) { - Connection conn = getConnection(); - final String vmName = cmd.getVmName(); - final VirtualRouter router = cmd.getRouter(); - try { - String tag = router.getVnet(); - Network network = null; - if ("untagged".equalsIgnoreCase(tag)) { - network = Network.getByUuid(conn, _host.guestNetwork); - } else { - network = enableVlanNetwork(conn, Long.parseLong(tag), _host.guestPif); - } - - if (network == null) { - throw new InternalErrorException("Failed to enable VLAN network with tag: " + tag); - } - - String bootArgs = cmd.getBootArgs(); - - String result = startSystemVM(conn, vmName, router.getVlanId(), network, cmd.getVolumes(), bootArgs, router.getGuestMacAddress(), router.getPrivateIpAddress(), router - .getPrivateMacAddress(), router.getPublicMacAddress(), 3922, router.getRamSize(), cmd.getGuestOSDescription(), cmd.getNetworkRateMbps()); - if (result == null) { - networkUsage(conn, router.getPrivateIpAddress(), "create", null); - return new StartRouterAnswer(cmd); - } - return new StartRouterAnswer(cmd, result); - - } catch (Exception e) { - String msg = "Exception caught while starting router vm " + vmName + " due to " + e.getMessage(); - s_logger.warn(msg, e); - return new StartRouterAnswer(cmd, msg); - } - } - - protected String startSystemVM(Connection conn, String vmName, String vlanId, Network nw0, List vols, String bootArgs, String guestMacAddr, String privateIp, String privateMacAddr, - String publicMacAddr, int cmdPort, long ramSize, String getGuestOSDescription, int networkRateMbps) { - - setupLinkLocalNetwork(conn); - VM vm = null; - List> mounts = null; - State state = State.Stopped; - try { - synchronized (_vms) { - _vms.put(vmName, State.Starting); - } - - mounts = mount(conn, vols); - - assert mounts.size() == 1 : "System VMs should have only 1 partition but we actually have " + mounts.size(); - - Ternary mount = mounts.get(0); - - Set templates = VM.getByNameLabel(conn, getGuestOsType(getGuestOSDescription, false)); - if (templates.size() == 0) { - String msg = " can not find systemvm template " + getGuestOsType(getGuestOSDescription, false) ; - s_logger.warn(msg); - return msg; - - } - - VM template = templates.iterator().next(); - - vm = template.createClone(conn, vmName); - - vm.removeFromOtherConfig(conn, "disks"); - - vm.setPVBootloader(conn, "pygrub"); - - long memsize = ramSize * 1024L * 1024L; - setMemory(conn, vm, memsize); - vm.setIsATemplate(conn, false); - - vm.setVCPUsAtStartup(conn, 1L); - - Host host = Host.getByUuid(conn, _host.uuid); - vm.setAffinity(conn, host); - - /* create VBD */ - VBD.Record vbdr = new VBD.Record(); - - vbdr.VM = vm; - vbdr.VDI = mount.second(); - vbdr.bootable = true; - vbdr.userdevice = "0"; - vbdr.mode = Types.VbdMode.RW; - vbdr.type = Types.VbdType.DISK; - VBD.create(conn, vbdr); - - - /* create CD-ROM VBD */ - createPatchVbd(conn, vmName, vm); - - /* create VIF0 */ - Network network = null; - if (VirtualMachineName.isValidConsoleProxyName(vmName) || VirtualMachineName.isValidSecStorageVmName(vmName, null)) { - network = Network.getByUuid(conn, _host.linkLocalNetwork); - } else { - network = nw0; - } - createVIF(conn, vm, guestMacAddr, networkRateMbps, "0", network); - - /* create VIF1 */ - /* For routing vm, set its network as link local bridge */ - if (VirtualMachineName.isValidRouterName(vmName) && privateIp.startsWith("169.254")) { - network = Network.getByUuid(conn, _host.linkLocalNetwork); - } else { - network = Network.getByUuid(conn, _host.privateNetwork); - } - createVIF(conn, vm, privateMacAddr, networkRateMbps, "1", network); - - /* create VIF2 */ - if( !publicMacAddr.equalsIgnoreCase("FE:FF:FF:FF:FF:FF") ) { - network = null; - if ("untagged".equalsIgnoreCase(vlanId)) { - network = Network.getByUuid(conn, _host.publicNetwork); - } else { - network = enableVlanNetwork(conn, Long.valueOf(vlanId), _host.publicPif); - if (network == null) { - throw new InternalErrorException("Failed to enable VLAN network with tag: " + vlanId); - } - } - createVIF(conn, vm, publicMacAddr, networkRateMbps, "2", network); - } - /* set up PV dom argument */ - String pvargs = vm.getPVArgs(conn); - pvargs = pvargs + bootArgs; - - if (s_logger.isInfoEnabled()) { - s_logger.info("PV args for system vm are " + pvargs); - } - vm.setPVArgs(conn, pvargs); - - /* destroy console */ - Set consoles = vm.getRecord(conn).consoles; - - for (Console console : consoles) { - console.destroy(conn); - } - - /* set action after crash as destroy */ - vm.setActionsAfterCrash(conn, Types.OnCrashBehaviour.DESTROY); - - vm.start(conn, false, true); - - if (_canBridgeFirewall) { - String result = callHostPlugin(conn, "vmops", "default_network_rules_systemvm", "vmName", vmName); - if (result == null || result.isEmpty() || !Boolean.parseBoolean(result)) { - s_logger.warn("Failed to program default system vm network rules for " + vmName); - } else { - s_logger.info("Programmed default system vm network rules for " + vmName); - } - } - - if (s_logger.isInfoEnabled()) { - s_logger.info("Ping system vm command port, " + privateIp + ":" + cmdPort); - } - - state = State.Running; - String result = connect(conn, vmName, privateIp, cmdPort); - if (result != null) { - String msg = "Can not ping System vm " + vmName + "due to:" + result; - s_logger.warn(msg); - throw new CloudRuntimeException(msg); - } else { - if (s_logger.isInfoEnabled()) { - s_logger.info("Ping system vm command port succeeded for vm " + vmName); - } - } - return null; - } catch (Exception e) { - String msg = "Catch Exception: " + e.getClass().getName() + " while starting System vm " + vmName + " due to " + e.toString(); - s_logger.warn(msg, e); - startvmfailhandle(conn, vm, mounts); - state = State.Stopped; - return msg; - } finally { - synchronized (_vms) { - _vms.put(vmName, state); - } - } - } - - // TODO : need to refactor it to reuse code with StartRouter - protected Answer execute(final StartConsoleProxyCommand cmd) { - Connection conn = getConnection(); - final String vmName = cmd.getVmName(); - final ConsoleProxyVO proxy = cmd.getProxy(); - try { - Network network = Network.getByUuid(conn, _host.privateNetwork); - String bootArgs = cmd.getBootArgs(); - bootArgs += " zone=" + _dcId; - bootArgs += " pod=" + _pod; - bootArgs += " guid=Proxy." + proxy.getId(); - bootArgs += " proxy_vm=" + proxy.getId(); - bootArgs += " localgw=" + _localGateway; - - String result = startSystemVM(conn, vmName, proxy.getVlanId(), network, cmd.getVolumes(), bootArgs, proxy.getGuestMacAddress(), proxy.getGuestIpAddress(), proxy - .getPrivateMacAddress(), proxy.getPublicMacAddress(), cmd.getProxyCmdPort(), proxy.getRamSize(), cmd.getGuestOSDescription(), cmd.getNetworkRateMbps()); - if (result == null) { - return new StartConsoleProxyAnswer(cmd); - } - return new StartConsoleProxyAnswer(cmd, result); - - } catch (Exception e) { - String msg = "Exception caught while starting router vm " + vmName + " due to " + e.getMessage(); - s_logger.warn(msg, e); - return new StartConsoleProxyAnswer(cmd, msg); - } - } - protected boolean isDeviceUsed(Connection conn, VM vm, Long deviceId) { // Figure out the disk number to attach the VM to diff --git a/server/src/com/cloud/agent/manager/AgentAttache.java b/server/src/com/cloud/agent/manager/AgentAttache.java index 9f68758f351..c06464e5b25 100644 --- a/server/src/com/cloud/agent/manager/AgentAttache.java +++ b/server/src/com/cloud/agent/manager/AgentAttache.java @@ -40,8 +40,7 @@ import com.cloud.agent.api.MaintainCommand; import com.cloud.agent.api.MigrateCommand; import com.cloud.agent.api.PingTestCommand; import com.cloud.agent.api.ReadyCommand; -import com.cloud.agent.api.StartCommand; -import com.cloud.agent.api.StartRouterCommand; +import com.cloud.agent.api.Start2Command; import com.cloud.agent.api.StopCommand; import com.cloud.agent.api.storage.CreateCommand; import com.cloud.agent.transport.Request; @@ -101,7 +100,7 @@ public abstract class AgentAttache { public final static String[] s_commandsAllowedInMaintenanceMode = new String[] { MaintainCommand.class.toString(), MigrateCommand.class.toString(), StopCommand.class.toString(), CheckVirtualMachineCommand.class.toString(), PingTestCommand.class.toString(), CheckHealthCommand.class.toString(), ReadyCommand.class.toString() }; protected final static String[] s_commandsNotAllowedInConnectingMode = - new String[] { StartCommand.class.toString(), StartRouterCommand.class.toString(), CreateCommand.class.toString() }; + new String[] { Start2Command.class.toString(), CreateCommand.class.toString() }; static { Arrays.sort(s_commandsAllowedInMaintenanceMode); Arrays.sort(s_commandsNotAllowedInConnectingMode); diff --git a/server/src/com/cloud/async/executor/StartVMExecutor.java b/server/src/com/cloud/async/executor/StartVMExecutor.java deleted file mode 100644 index 940579b9993..00000000000 --- a/server/src/com/cloud/async/executor/StartVMExecutor.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -package com.cloud.async.executor; - -import org.apache.log4j.Logger; - -import com.cloud.agent.api.Answer; -import com.cloud.async.AsyncJobManager; -import com.cloud.async.AsyncJobVO; -import com.cloud.serializer.GsonHelper; -import com.google.gson.Gson; - -public class StartVMExecutor extends VMOperationExecutor { - public static final Logger s_logger = Logger.getLogger(StartVMExecutor.class.getName()); - - public boolean execute() { - Gson gson = GsonHelper.getBuilder().create(); - AsyncJobManager asyncMgr = getAsyncJobMgr(); - AsyncJobVO job = getJob(); - - if(getSyncSource() == null) { - VMOperationParam param = gson.fromJson(job.getCmdInfo(), VMOperationParam.class); - asyncMgr.syncAsyncJobExecution(job, "UserVM", param.getVmId()); - - // always true if it does not have sync-source - return true; - } else { - VMOperationParam param = gson.fromJson(job.getCmdInfo(), VMOperationParam.class); - return asyncMgr.getExecutorContext().getVmMgr().executeStartVM(this, param); - } - } - - public void processAnswer(VMOperationListener listener, long agentId, long seq, Answer answer) { - } - - public void processDisconnect(VMOperationListener listener, long agentId) { - } - - public void processTimeout(VMOperationListener listener, long agentId, long seq) { - } -} diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 87af95d70a1..dd0657cedb2 100644 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -29,7 +29,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -52,8 +51,6 @@ import com.cloud.agent.api.ConsoleProxyLoadReportCommand; import com.cloud.agent.api.MigrateCommand; import com.cloud.agent.api.PrepareForMigrationCommand; import com.cloud.agent.api.RebootCommand; -import com.cloud.agent.api.StartConsoleProxyAnswer; -import com.cloud.agent.api.StartConsoleProxyCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupProxyCommand; import com.cloud.agent.api.StopAnswer; @@ -79,7 +76,6 @@ import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.HostPodDao; -import com.cloud.dc.dao.VlanDao; import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.event.Event; @@ -107,11 +103,9 @@ import com.cloud.info.RunningHostInfoAgregator; import com.cloud.info.RunningHostInfoAgregator.ZoneHostInfo; import com.cloud.maid.StackMaid; import com.cloud.network.IpAddrAllocator; -import com.cloud.network.IpAddrAllocator.networkInfo; import com.cloud.network.NetworkManager; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; -import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.NetworkDao; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; @@ -119,7 +113,6 @@ import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.servlet.ConsoleProxyServlet; -import com.cloud.storage.GuestOSVO; import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.VMTemplateHostVO; @@ -149,7 +142,6 @@ import com.cloud.utils.db.Transaction; import com.cloud.utils.events.SubscriptionMgr; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.exception.ExecutionException; -import com.cloud.utils.net.NetUtils; import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.NicProfile; import com.cloud.vm.NicVO; @@ -189,7 +181,6 @@ import com.google.gson.GsonBuilder; public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProxyService, Manager, AgentHook, VirtualMachineGuru { private static final Logger s_logger = Logger.getLogger(ConsoleProxyManagerImpl.class); - private static final int DEFAULT_FIND_HOST_RETRY_COUNT = 2; private static final int DEFAULT_CAPACITY_SCAN_INTERVAL = 30000; // 30 // seconds private static final int EXECUTOR_SHUTDOWN_TIMEOUT = 1000; // 1 second @@ -217,12 +208,8 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx @Inject private DataCenterDao _dcDao; @Inject - private VlanDao _vlanDao; - @Inject private VMTemplateDao _templateDao; @Inject - private IPAddressDao _ipAddressDao; - @Inject private VolumeDao _volsDao; @Inject private HostPodDao _podDao; @@ -239,7 +226,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx @Inject private VMTemplateHostDao _vmTemplateHostDao; @Inject private AgentManager _agentMgr; @Inject private StorageManager _storageMgr; - @Inject private HighAvailabilityManager _haMgr; @Inject NetworkManager _networkMgr; @Inject AccountService _accountMgr; @Inject private EventDao _eventDao; @@ -253,8 +239,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx private ConsoleProxyListener _listener; private ServiceOfferingVO _serviceOffering; - private int _networkRate; - private int _multicastRate; private VMTemplateVO _template; NetworkOfferingVO _publicNetworkOffering; @@ -267,9 +251,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx @Inject private VirtualMachineManager _itMgr; - @Inject - private ClusterManager _clMgr; - private final ScheduledExecutorService _capacityScanScheduler = Executors.newScheduledThreadPool(1, new NamedThreadFactory("CP-Scan")); private final ExecutorService _requestHandlerScheduler = Executors.newCachedThreadPool(new NamedThreadFactory("Request-handler")); @@ -278,7 +259,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx private int _standbyCapacity = ConsoleProxyManager.DEFAULT_STANDBY_CAPACITY; private int _proxyRamSize; - private int _find_host_retry = DEFAULT_FIND_HOST_RETRY_COUNT; private int _ssh_retry; private int _ssh_sleep; private boolean _use_lvm; @@ -287,8 +267,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx private String _domain; private String _instance; - private boolean _useNewNetworking = false; - // private String _privateNetmask; private int _proxyCmdPort = DEFAULT_PROXY_CMD_PORT; private int _proxySessionTimeoutValue = DEFAULT_PROXY_SESSION_TIMEOUT; @@ -556,7 +534,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx @Override public ConsoleProxyVO startProxy(long proxyVmId, long startEventId) { try { - return start2(proxyVmId, startEventId); + return start(proxyVmId, startEventId); } catch (StorageUnavailableException e) { s_logger.warn("Exception while trying to start console proxy", e); return null; @@ -569,301 +547,14 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx } } - public ConsoleProxyVO start2(long proxyVmId, long startEventId) throws ResourceUnavailableException, InsufficientCapacityException { - if (!_useNewNetworking) { - return start(proxyVmId, startEventId); - } + @Override + public ConsoleProxyVO start(long proxyVmId, long startEventId) throws ResourceUnavailableException, InsufficientCapacityException { ConsoleProxyVO proxy = _consoleProxyDao.findById(proxyVmId); Account systemAcct = _accountMgr.getSystemAccount(); User systemUser = _accountMgr.getSystemUser(); return _itMgr.start(proxy, null, systemUser, systemAcct, null); } - @Override - @DB - public ConsoleProxyVO start(long proxyId, long startEventId) throws InsufficientCapacityException, - StorageUnavailableException { - - AsyncJobExecutor asyncExecutor = BaseAsyncJobExecutor.getCurrentExecutor(); - if (asyncExecutor != null) { - AsyncJobVO job = asyncExecutor.getJob(); - - if (s_logger.isInfoEnabled()) { - s_logger.info("Start console proxy " + proxyId + ", update async job-" + job.getId()); - } - _asyncMgr.updateAsyncJobAttachment(job.getId(), "console_proxy", proxyId); - } - - ConsoleProxyVO proxy = _consoleProxyDao.findById(proxyId); - if (proxy == null || proxy.getRemoved() != null) { - s_logger.debug("proxy is not found: " + proxyId); - return null; - } - /* - * // don't insert event here, it may be called multiple times! - * saveStartedEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, - * EventTypes.EVENT_PROXY_START, "Starting console proxy with Id: " + - * proxyId, startEventId); - */ - - if (s_logger.isTraceEnabled()) { - s_logger.trace("Starting console proxy if it is not started, proxy vm id : " + proxyId); - } - - for (int i = 0; i < 2; i++) { - - State state = proxy.getState(); - - if (state == State.Starting /* || state == State.Migrating */) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Waiting console proxy to be ready, proxy vm id : " + proxyId + " proxy VM state : " + state.toString()); - } - - if (proxy.getPrivateIpAddress() == null || connect(proxy.getPrivateIpAddress(), _proxyCmdPort) != null) { - if (proxy.getPrivateIpAddress() == null) { - s_logger.warn("Retruning a proxy that is being started but private IP has not been allocated yet, proxy vm id : " + proxyId); - } else { - s_logger.warn("Waiting console proxy to be ready timed out, proxy vm id : " + proxyId); - } - - // TODO, it is very tricky here, if the startup process - // takes too long and it timed out here, - // we may give back a proxy that is not fully ready for - // functioning - } - return proxy; - } - - if (state == State.Running) { - if (s_logger.isTraceEnabled()) { - s_logger.trace("Console proxy is already started: " + proxy.getName()); - } - return proxy; - } - - DataCenterVO dc = _dcDao.findById(proxy.getDataCenterId()); - HostPodVO pod = _podDao.findById(proxy.getPodId()); - StoragePoolVO sp = _storageMgr.getStoragePoolForVm(proxy.getId()); - - HashSet avoid = new HashSet(); - HostVO routingHost = (HostVO) _agentMgr.findHost(Host.Type.Routing, dc, pod, sp, _serviceOffering, _template, proxy, null, avoid); - - if (routingHost == null) { - if (s_logger.isDebugEnabled()) { - String msg = "Unable to find a routing host for " + proxy.toString() + " in pod " + pod.getId(); - s_logger.debug(msg); - throw new CloudRuntimeException(msg); - } - } - // to ensure atomic state transition to Starting state - if (!_itMgr.stateTransitTo(proxy, com.cloud.vm.VirtualMachine.Event.StartRequested, routingHost.getId())) { - if (s_logger.isDebugEnabled()) { - ConsoleProxyVO temp = _consoleProxyDao.findById(proxyId); - s_logger.debug("Unable to start console proxy " + proxy.getName() + " because it is not in a startable state : " - + ((temp != null) ? temp.getState().toString() : "null")); - } - continue; - } - - try { - Answer answer = null; - int retry = _find_host_retry; - - // Console proxy VM will be running at routing hosts as routing - // hosts have public access to outside network - do { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Trying to start console proxy on host " + routingHost.getName()); - } - - String privateIpAddress = allocPrivateIpAddress(proxy.getDataCenterId(), routingHost.getPodId(), proxy.getId(), - proxy.getPrivateMacAddress()); - if (privateIpAddress == null && (_IpAllocator != null && !_IpAllocator.exteralIpAddressAllocatorEnabled())) { - String msg = "Unable to allocate private ip addresses for " + proxy.getName() + " in pod " + pod.getId(); - s_logger.debug(msg); - throw new CloudRuntimeException(msg); - } - - proxy.setPrivateIpAddress(privateIpAddress); - String guestIpAddress = _dcDao.allocateLinkLocalIpAddress(proxy.getDataCenterId(), routingHost.getPodId(), proxy.getId(), null); - proxy.setGuestIpAddress(guestIpAddress); - - _itMgr.stateTransitTo(proxy, VirtualMachine.Event.OperationRetry, routingHost.getId()); - proxy = _consoleProxyDao.findById(proxy.getId()); - - List vols = _storageMgr.prepare(proxy, routingHost); - if (vols == null || vols.size() == 0) { - String msg = "Unable to prepare storage for " + proxy.getName() + " in pod " + pod.getId(); - s_logger.debug(msg); - throw new CloudRuntimeException(msg); - } - - // Determine the VM's OS description - String guestOSDescription; - GuestOSVO guestOS = _guestOSDao.findById(proxy.getGuestOSId()); - if (guestOS == null) { - String msg = "Could not find guest OS description for OSId " - + proxy.getGuestOSId() + " for vm: " + proxy.getName(); - s_logger.debug(msg); - throw new CloudRuntimeException(msg); - } else { - guestOSDescription = guestOS.getDisplayName(); - } - // _storageMgr.share(proxy, vols, null, true); - - // carry the console proxy port info over so that we don't - // need to configure agent on this - StartConsoleProxyCommand cmdStart = new StartConsoleProxyCommand(_networkRate, _multicastRate, - _proxyCmdPort, proxy, proxy.getName(), "", vols, Integer.toString(_consoleProxyPort), - Integer.toString(_consoleProxyUrlPort), _mgmt_host, _mgmt_port, _sslEnabled, guestOSDescription); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Sending start command for console proxy " + proxy.getName() + " to " + routingHost.getName()); - } - try { - answer = _agentMgr.send(routingHost.getId(), cmdStart); - - s_logger.debug("StartConsoleProxy Answer: " + (answer != null ? answer : "null")); - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Received answer on starting console proxy " + proxy.getName() + " on " + routingHost.getName()); - } - - if (answer != null && answer.getResult()) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Console proxy " + proxy.getName() + " started on " + routingHost.getName()); - } - - if (answer instanceof StartConsoleProxyAnswer) { - StartConsoleProxyAnswer rAnswer = (StartConsoleProxyAnswer) answer; - if (rAnswer.getPrivateIpAddress() != null) { - proxy.setPrivateIpAddress(rAnswer.getPrivateIpAddress()); - } - if (rAnswer.getPrivateMacAddress() != null) { - proxy.setPrivateMacAddress(rAnswer.getPrivateMacAddress()); - } - } - - final EventVO event = new EventVO(); - event.setUserId(User.UID_SYSTEM); - event.setAccountId(Account.ACCOUNT_ID_SYSTEM); - event.setType(EventTypes.EVENT_PROXY_START); - event.setLevel(EventVO.LEVEL_INFO); - event.setStartId(startEventId); - event.setDescription("Console proxy started - " + proxy.getName()); - _eventDao.persist(event); - break; - } - s_logger.debug("Unable to start " + proxy.toString() + " on host " + routingHost.toString() + " due to " - + answer.getDetails()); - } catch (OperationTimedoutException e) { - if (e.isActive()) { - s_logger.debug("Unable to start vm " + proxy.getName() - + " due to operation timed out and it is active so scheduling a restart."); - _haMgr.scheduleRestart(proxy, true); - return null; - } - } catch (AgentUnavailableException e) { - s_logger.debug("Agent " + routingHost.toString() + " was unavailable to start VM " + proxy.getName()); - } - - avoid.add(routingHost); - proxy.setPrivateIpAddress(null); - freePrivateIpAddress(privateIpAddress, proxy.getDataCenterId(), proxy.getId()); - proxy.setGuestIpAddress(null); - _dcDao.releaseLinkLocalIpAddress(guestIpAddress, proxy.getDataCenterId(), proxy.getId()); - _storageMgr.unshare(proxy, vols, routingHost); - } while (--retry > 0 - && (routingHost = (HostVO) _agentMgr - .findHost(Host.Type.Routing, dc, pod, sp, _serviceOffering, _template, proxy, null, avoid)) != null); - if (routingHost == null || retry <= 0) { - - SubscriptionMgr.getInstance().notifySubscribers( - ConsoleProxyManager.ALERT_SUBJECT, - this, - new ConsoleProxyAlertEventArgs(ConsoleProxyAlertEventArgs.PROXY_START_FAILURE, proxy.getDataCenterId(), proxy.getId(), - proxy, "Unable to find a routing host to run")); - - final EventVO event = new EventVO(); - event.setUserId(User.UID_SYSTEM); - event.setAccountId(Account.ACCOUNT_ID_SYSTEM); - event.setType(EventTypes.EVENT_PROXY_START); - event.setLevel(EventVO.LEVEL_ERROR); - event.setStartId(startEventId); - event.setDescription("Starting console proxy failed due to unable to find a host - " + proxy.getName()); - _eventDao.persist(event); - throw new ExecutionException("Couldn't find a routingHost to run console proxy"); - } - - _itMgr.stateTransitTo(proxy, VirtualMachine.Event.OperationSucceeded, routingHost.getId()); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Console proxy is now started, vm id : " + proxy.getId()); - } - - // If starting the console proxy failed due to the external - // firewall not being reachable, send an alert. - if (answer != null && answer.getDetails() != null && answer.getDetails().equals("firewall")) { - - SubscriptionMgr.getInstance().notifySubscribers( - ConsoleProxyManager.ALERT_SUBJECT, - this, - new ConsoleProxyAlertEventArgs(ConsoleProxyAlertEventArgs.PROXY_FIREWALL_ALERT, proxy.getDataCenterId(), proxy.getId(), - proxy, null)); - } - - SubscriptionMgr.getInstance().notifySubscribers(ConsoleProxyManager.ALERT_SUBJECT, this, - new ConsoleProxyAlertEventArgs(ConsoleProxyAlertEventArgs.PROXY_UP, proxy.getDataCenterId(), proxy.getId(), proxy, null)); - - return proxy; - } catch (Throwable thr) { - s_logger.warn("Unexpected exception: ", thr); - - SubscriptionMgr.getInstance().notifySubscribers( - ConsoleProxyManager.ALERT_SUBJECT, - this, - new ConsoleProxyAlertEventArgs(ConsoleProxyAlertEventArgs.PROXY_START_FAILURE, proxy.getDataCenterId(), proxy.getId(), proxy, - "Unexpected exception: " + thr.getMessage())); - - /* - * final EventVO event = new EventVO(); - * event.setUserId(User.UID_SYSTEM); - * event.setAccountId(Account.ACCOUNT_ID_SYSTEM); - * event.setType(EventTypes.EVENT_PROXY_START); - * event.setLevel(EventVO.LEVEL_ERROR); - * event.setStartId(startEventId); event.setDescription( - * "Starting console proxy failed due to unhandled exception - " - * + proxy.getName()); _eventDao.persist(event); - */ - - Transaction txn = Transaction.currentTxn(); - try { - txn.start(); - String privateIpAddress = proxy.getPrivateIpAddress(); - if (privateIpAddress != null) { - proxy.setPrivateIpAddress(null); - freePrivateIpAddress(privateIpAddress, proxy.getDataCenterId(), proxy.getId()); - } - - _itMgr.stateTransitTo(proxy, VirtualMachine.Event.OperationFailed, null); - txn.commit(); - } catch (Exception e) { - s_logger.error("Caught exception during error recovery"); - } - - if (thr instanceof StorageUnavailableException) { - throw (StorageUnavailableException) thr; - } else if (thr instanceof ExecutionException) { - s_logger.error("Error while starting console proxy due to " + thr.getMessage()); - } else { - s_logger.error("Error while starting console proxy ", thr); - } - return null; - } - } - - s_logger.warn("Starting console proxy encounters non-startable situation"); - return null; - } - public ConsoleProxyVO assignProxyFromRunningPool(long dataCenterId) { if (s_logger.isTraceEnabled()) { @@ -915,7 +606,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx s_logger.debug("Assign console proxy from a newly started instance for request from data center : " + dataCenterId); } - Map context = _useNewNetworking ? createProxyInstance2(dataCenterId) : createProxyInstance(dataCenterId); + Map context = createProxyInstance(dataCenterId); long proxyVmId = (Long) context.get("proxyVmId"); if (proxyVmId == 0) { @@ -923,11 +614,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx s_logger.trace("Creating proxy instance failed, data center id : " + dataCenterId); } - // release critical system resource on failure - if (context.get("publicIpAddress") != null) { - freePublicIpAddress((String) context.get("publicIpAddress"), dataCenterId, 0); - } - return null; } @@ -959,7 +645,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx s_logger.debug("Assign console proxy from a newly started instance for request from data center : " + dataCenterId); } - Map context = _useNewNetworking ? createProxyInstance2(dataCenterId) : createProxyInstance(dataCenterId); + Map context = createProxyInstance(dataCenterId); long proxyVmId = (Long) context.get("proxyVmId"); if (proxyVmId == 0) { @@ -967,11 +653,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx s_logger.trace("Creating proxy instance failed, data center id : " + dataCenterId); } - // release critical system resource on failure - if (context.get("publicIpAddress") != null) { - freePublicIpAddress((String) context.get("publicIpAddress"), dataCenterId, 0); - } - return null; } @@ -997,102 +678,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx return null; } - @DB - protected Map createProxyInstance(long dataCenterId) { - - Map context = new HashMap(); - String publicIpAddress = null; - - Transaction txn = Transaction.currentTxn(); - try { - DataCenterVO dc = _dcDao.findById(dataCenterId); - assert (dc != null); - context.put("dc", dc); - - // this will basically allocate the pod based on data center id as - // we use system user id here - Set avoidPods = new HashSet(); - Pair pod = null; - networkInfo publicIpAndVlan = null; - - // About MAC address allocation - // MAC address used by User VM is inherited from DomR MAC address, - // with the least 16 bits overrided. to avoid - // potential conflicts, domP will mask bit 31 - // - String[] macAddresses = _dcDao.getNextAvailableMacAddressPair(dataCenterId, (1L << 31)); - String privateMacAddress = macAddresses[0]; - String publicMacAddress = macAddresses[1]; - macAddresses = _dcDao.getNextAvailableMacAddressPair(dataCenterId, (1L << 31)); - String guestMacAddress = macAddresses[0]; - while ((pod = _agentMgr.findPod(_template, _serviceOffering, dc, Account.ACCOUNT_ID_SYSTEM, avoidPods)) != null) { - publicIpAndVlan = allocPublicIpAddress(dataCenterId, pod.first().getId(), publicMacAddress); - if (publicIpAndVlan == null) { - s_logger.warn("Unable to allocate public IP address for console proxy vm in data center : " + dataCenterId + ", pod=" - + pod.first().getId()); - avoidPods.add(pod.first().getId()); - } else { - break; - } - } - - if (pod == null || publicIpAndVlan == null) { - String msg = "Unable to allocate pod for console proxy vm in data center : " + dataCenterId; - s_logger.warn(msg); - throw new CloudRuntimeException(msg); - } - - long id = _consoleProxyDao.getNextInSequence(Long.class, "id"); - - context.put("publicIpAddress", publicIpAndVlan._ipAddr); - context.put("pod", pod); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Pod allocated " + pod.first().getName()); - } - - String cidrNetmask = NetUtils.getCidrNetmask(pod.first().getCidrSize()); - - // Find the VLAN ID, VLAN gateway, and VLAN netmask for - // publicIpAddress - publicIpAddress = publicIpAndVlan._ipAddr; - - String vlanGateway = publicIpAndVlan._gateWay; - String vlanNetmask = publicIpAndVlan._netMask; - - Account systemAccount = _accountMgr.getSystemAccount(); - - txn.start(); - ConsoleProxyVO proxy; - String name = VirtualMachineName.getConsoleProxyName(id, _instance).intern(); - proxy = new ConsoleProxyVO(id, _serviceOffering.getId(), name, guestMacAddress, null, NetUtils.getLinkLocalNetMask(), privateMacAddress, null, cidrNetmask, - _template.getId(), _template.getGuestOSId(), publicMacAddress, publicIpAddress, vlanNetmask, publicIpAndVlan._vlanDbId, - publicIpAndVlan._vlanid, pod.first().getId(), dataCenterId, systemAccount.getDomainId(), systemAccount.getId(), vlanGateway, null, dc.getDns1(), dc.getDns2(), _domain, - _proxyRamSize, 0); - - proxy.setLastHostId(pod.second()); - proxy = _consoleProxyDao.persist(proxy); - long proxyVmId = proxy.getId(); - - final EventVO event = new EventVO(); - event.setUserId(User.UID_SYSTEM); - event.setAccountId(Account.ACCOUNT_ID_SYSTEM); - event.setType(EventTypes.EVENT_PROXY_CREATE); - event.setLevel(EventVO.LEVEL_INFO); - event.setDescription("New console proxy created - " + proxy.getName()); - _eventDao.persist(event); - txn.commit(); - - context.put("proxyVmId", proxyVmId); - return context; - } catch (Throwable e) { - s_logger.error("Unexpected exception : ", e); - - context.put("proxyVmId", (long) 0); - return context; - } - } - - protected Map createProxyInstance2(long dataCenterId) throws ConcurrentOperationException { + protected Map createProxyInstance(long dataCenterId) throws ConcurrentOperationException { long id = _consoleProxyDao.getNextInSequence(Long.class, "id"); String name = VirtualMachineName.getConsoleProxyName(id, _instance); @@ -1172,56 +758,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx } } - private networkInfo allocPublicIpAddress(long dcId, long podId, String macAddr) { - - if (_IpAllocator != null && _IpAllocator.exteralIpAddressAllocatorEnabled()) { - IpAddrAllocator.IpAddr ip = _IpAllocator.getPublicIpAddress(macAddr, dcId, podId); - networkInfo net = new networkInfo(ip.ipaddr, ip.netMask, ip.gateway, null, "untagged"); - return net; - } - -// Pair ipAndVlan = _vlanDao.assignIpAddress(dcId, Account.ACCOUNT_ID_SYSTEM, DomainVO.ROOT_DOMAIN, VlanType.VirtualNetwork, -// true); -// -// if (ipAndVlan == null) { -// s_logger.debug("Unable to get public ip address (type=Virtual) for console proxy vm for data center : " + dcId); -// ipAndVlan = _vlanDao.assignPodDirectAttachIpAddress(dcId, podId, Account.ACCOUNT_ID_SYSTEM, DomainVO.ROOT_DOMAIN); -// if (ipAndVlan == null) { -// s_logger.debug("Unable to get public ip address (type=DirectAttach) for console proxy vm for data center : " + dcId); -// } -// } -// if (ipAndVlan != null) { -// VlanVO vlan = ipAndVlan.second(); -// networkInfo net = new networkInfo(ipAndVlan.first(), vlan.getVlanNetmask(), vlan.getVlanGateway(), vlan.getId(), vlan.getVlanId()); -// return net; -// } - return null; - } - - private String allocPrivateIpAddress(Long dcId, Long podId, Long proxyId, String macAddr) { - if (_IpAllocator != null && _IpAllocator.exteralIpAddressAllocatorEnabled()) { - return _IpAllocator.getPrivateIpAddress(macAddr, dcId, podId).ipaddr; - } else { - return _dcDao.allocatePrivateIpAddress(dcId, podId, proxyId, null).first(); - } - } - - private void freePrivateIpAddress(String ipAddress, Long dcId, Long podId) { - if (_IpAllocator != null && _IpAllocator.exteralIpAddressAllocatorEnabled()) { - _IpAllocator.releasePrivateIpAddress(ipAddress, dcId, podId); - } else { - _dcDao.releasePrivateIpAddress(ipAddress, dcId, podId); - } - } - - private void freePublicIpAddress(String ipAddress, long dcId, long podId) { - if (_IpAllocator != null && _IpAllocator.exteralIpAddressAllocatorEnabled()) { - _IpAllocator.releasePublicIpAddress(ipAddress, dcId, podId); - } else { - _ipAddressDao.unassignIpAddress(ipAddress); - } - } - private ConsoleProxyAllocator getCurrentAllocator() { // for now, only one adapter is supported Enumeration it = _consoleProxyAllocators.enumeration(); @@ -1526,7 +1062,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx try { if (proxyLock.lock(ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_SYNC)) { try { - readyProxy = start2(readyProxy.getId(), 0); + readyProxy = start(readyProxy.getId(), 0); } finally { proxyLock.unlock(); } @@ -1888,7 +1424,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx String privateIpAddress = proxy.getPrivateIpAddress(); if (privateIpAddress != null) { proxy.setPrivateIpAddress(null); - freePrivateIpAddress(privateIpAddress, proxy.getDataCenterId(), proxy.getId()); +// freePrivateIpAddress(privateIpAddress, proxy.getDataCenterId(), proxy.getId()); } String guestIpAddress = proxy.getGuestIpAddress(); if (guestIpAddress != null) { @@ -2080,7 +1616,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx // release critical system resources used by the VM before we // delete them if (vm.getPublicIpAddress() != null) { - freePublicIpAddress(vm.getPublicIpAddress(), vm.getDataCenterId(), vm.getPodId()); +// freePublicIpAddress(vm.getPublicIpAddress(), vm.getDataCenterId(), vm.getPodId()); } vm.setPublicIpAddress(null); @@ -2116,7 +1652,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx ConsoleProxyVO proxy = _consoleProxyDao.findById(vmId); if (proxy != null) { if (proxy.getPublicIpAddress() != null) { - freePublicIpAddress(proxy.getPublicIpAddress(), proxy.getDataCenterId(), proxy.getPodId()); +// freePublicIpAddress(proxy.getPublicIpAddress(), proxy.getDataCenterId(), proxy.getPodId()); } _consoleProxyDao.remove(vmId); @@ -2362,10 +1898,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx _proxyRamSize = NumbersUtil.parseInt(configs.get("consoleproxy.ram.size"), DEFAULT_PROXY_VM_RAMSIZE); - String value = configs.get("start.retry"); - _find_host_retry = NumbersUtil.parseInt(value, DEFAULT_FIND_HOST_RETRY_COUNT); - - value = configs.get("consoleproxy.cmd.port"); + String value = configs.get("consoleproxy.cmd.port"); _proxyCmdPort = NumbersUtil.parseInt(value, DEFAULT_PROXY_CMD_PORT); value = configs.get("consoleproxy.sslEnabled"); @@ -2400,8 +1933,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx _use_storage_vm = true; } - _useNewNetworking = Boolean.parseBoolean(configs.get("use.new.networking")); - if (s_logger.isInfoEnabled()) { s_logger.info("Console proxy max session soft limit : " + _capacityPerProxy); s_logger.info("Console proxy standby capacity : " + _standbyCapacity); @@ -2440,12 +1971,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx _listener = new ConsoleProxyListener(this); _agentMgr.registerForHostEvents(_listener, true, true, false); - Adapters ipAllocators = locator.getAdapters(IpAddrAllocator.class); - if (ipAllocators != null && ipAllocators.isSet()) { - Enumeration it = ipAllocators.enumeration(); - _IpAllocator = it.nextElement(); - } - HighAvailabilityManager haMgr = locator.getManager(HighAvailabilityManager.class); if (haMgr != null) { haMgr.registerHandler(VirtualMachine.Type.ConsoleProxy, this); @@ -2453,10 +1978,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx _itMgr.registerGuru(VirtualMachine.Type.ConsoleProxy, this); boolean useLocalStorage = Boolean.parseBoolean(configs.get(Config.SystemVMUseLocalStorage.key())); - String networkRateStr = _configDao.getValue("network.throttling.rate"); - String multicastRateStr = _configDao.getValue("multicast.throttling.rate"); - _networkRate = ((networkRateStr == null) ? 200 : Integer.parseInt(networkRateStr)); - _multicastRate = ((multicastRateStr == null) ? 10 : Integer.parseInt(multicastRateStr)); _serviceOffering = new ServiceOfferingVO("System Offering For Console Proxy", 1, _proxyRamSize, 0, 0, 0, false, null, NetworkOffering.GuestIpType.Virtual, useLocalStorage, true, null, true); _serviceOffering.setUniqueName("Cloud.com-ConsoleProxy"); @@ -2559,10 +2080,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx s_logger.debug("Boot Args for " + profile + ": " + bootArgs); } - if (controlNic == null) { - throw new CloudRuntimeException("Didn't start a control port"); - } - profile.setParameter("control.nic", controlNic); return true; diff --git a/server/src/com/cloud/network/router/DomainRouterManager.java b/server/src/com/cloud/network/router/DomainRouterManager.java index 8fd298f81a1..8a7f6464d7a 100644 --- a/server/src/com/cloud/network/router/DomainRouterManager.java +++ b/server/src/com/cloud/network/router/DomainRouterManager.java @@ -21,9 +21,6 @@ import java.util.List; import java.util.Map; import com.cloud.api.commands.UpgradeRouterCmd; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.HostPodVO; -import com.cloud.dc.VlanVO; import com.cloud.deploy.DeployDestination; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -36,14 +33,12 @@ import com.cloud.network.Network; import com.cloud.network.RemoteAccessVpnVO; import com.cloud.network.VpnUserVO; import com.cloud.network.rules.FirewallRule; -import com.cloud.service.ServiceOfferingVO; import com.cloud.user.Account; import com.cloud.uservm.UserVm; import com.cloud.utils.component.Manager; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; -import com.cloud.vm.UserVmVO; import com.cloud.vm.VirtualMachineProfile; /** @@ -53,28 +48,6 @@ import com.cloud.vm.VirtualMachineProfile; public interface DomainRouterManager extends Manager { public static final int DEFAULT_ROUTER_VM_RAMSIZE = 128; // 128M public static final boolean USE_POD_VLAN = false; - /** - * create the router. - * - * @param accountId account Id the router belongs to. - * @param ipAddress public ip address the router should use to access the internet. - * @param dcId data center id the router should live in. - * @param domain domain name of this network. - * @param offering service offering associated with this request - * @return DomainRouterVO if created. null if not. - */ - DomainRouterVO createRouter(long accountId, String ipAddress, long dcId, String domain, ServiceOfferingVO offering, long startEventId) throws ConcurrentOperationException; - - /** - * create a DHCP server/user data server for directly connected VMs - * @param userId the user id of the user creating the router. - * @param accountId the account id of the user creating the router. - * @param dcId data center id the router should live in. - * @param domain domain name of this network. - * @return DomainRouterVO if created. null if not. - */ - DomainRouterVO createDhcpServerForDirectlyAttachedGuests(long userId, long accountId, DataCenterVO dc, HostPodVO pod, Long candidateHost, VlanVO vlan) throws ConcurrentOperationException; - /** /* * Send ssh public/private key pair to specified host @@ -93,10 +66,6 @@ public interface DomainRouterManager extends Manager { */ boolean savePasswordToRouter(long routerId, String vmIpAddress, String password); - DomainRouterVO startRouter(long routerId, long eventId); - - boolean releaseRouter(long routerId); - boolean destroyRouter(long routerId); boolean stopRouter(long routerId, long eventId); @@ -117,34 +86,7 @@ public interface DomainRouterManager extends Manager { */ DomainRouterVO getRouter(long routerId); - /** - * Add a DHCP entry on the domr dhcp server - * @param routerHostId - the host id of the domr - * @param routerIp - the private ip address of the domr - * @param vmName - the name of the VM (e.g., i-10-TEST) - * @param vmMac - the mac address of the eth0 interface of the VM - * @param vmIp - the ip address to hand out. - * @return success or failure - */ - public boolean addDhcpEntry(long routerHostId, String routerIp, String vmName, String vmMac, String vmIp); - - /** - * Adds a virtual machine into the guest network. - * 1. Starts the domR - * 2. Sets the dhcp Entry on the domR - * 3. Sets the domR - * - * @param vm user vm to add to the guest network - * @param password password for this vm. Can be null - * @return DomainRouterVO if everything is successful. null if not. - * - * @throws ConcurrentOperationException if multiple starts are being attempted. - */ - public DomainRouterVO addVirtualMachineToGuestNetwork(UserVmVO vm, String password, long startEventId) throws ConcurrentOperationException; - - String createZoneVlan(DomainRouterVO router); - - VirtualRouter upgradeRouter(UpgradeRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; + VirtualRouter upgradeRouter(UpgradeRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; DomainRouterVO getRouter(long accountId, long zoneId); DomainRouterVO getRouter(String publicIpAddress); diff --git a/server/src/com/cloud/network/router/DomainRouterManagerImpl.java b/server/src/com/cloud/network/router/DomainRouterManagerImpl.java index 2fe582deea7..8561281ddff 100644 --- a/server/src/com/cloud/network/router/DomainRouterManagerImpl.java +++ b/server/src/com/cloud/network/router/DomainRouterManagerImpl.java @@ -24,7 +24,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -40,17 +39,12 @@ import com.cloud.agent.api.Answer; import com.cloud.agent.api.CheckVirtualMachineAnswer; import com.cloud.agent.api.CheckVirtualMachineCommand; import com.cloud.agent.api.Command; -import com.cloud.agent.api.CreateZoneVlanAnswer; -import com.cloud.agent.api.CreateZoneVlanCommand; import com.cloud.agent.api.MigrateCommand; import com.cloud.agent.api.ModifySshKeysCommand; import com.cloud.agent.api.NetworkUsageAnswer; import com.cloud.agent.api.NetworkUsageCommand; import com.cloud.agent.api.PrepareForMigrationCommand; import com.cloud.agent.api.RebootAnswer; -import com.cloud.agent.api.RebootRouterCommand; -import com.cloud.agent.api.StartRouterAnswer; -import com.cloud.agent.api.StartRouterCommand; import com.cloud.agent.api.StopCommand; import com.cloud.agent.api.check.CheckSshAnswer; import com.cloud.agent.api.check.CheckSshCommand; @@ -78,8 +72,6 @@ import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.configuration.dao.ResourceLimitDao; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; -import com.cloud.dc.Vlan; -import com.cloud.dc.Vlan.VlanType; import com.cloud.dc.VlanVO; import com.cloud.dc.dao.AccountVlanMapDao; import com.cloud.dc.dao.DataCenterDao; @@ -87,7 +79,6 @@ import com.cloud.dc.dao.HostPodDao; import com.cloud.dc.dao.VlanDao; import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; -import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; import com.cloud.event.Event; import com.cloud.event.EventTypes; @@ -142,7 +133,6 @@ import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; -import com.cloud.storage.GuestOSVO; import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.VMTemplateVO; @@ -155,7 +145,6 @@ import com.cloud.storage.dao.VolumeDao; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.AccountService; -import com.cloud.user.AccountVO; import com.cloud.user.User; import com.cloud.user.UserContext; import com.cloud.user.UserStatisticsVO; @@ -294,323 +283,6 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute } } - @Override - @DB - public DomainRouterVO createDhcpServerForDirectlyAttachedGuests(long userId, long accountId, DataCenterVO dc, HostPodVO pod, Long candidateHost, VlanVO guestVlan) throws ConcurrentOperationException{ - - final AccountVO account = _accountDao.findById(accountId); - boolean podVlan = guestVlan.getVlanType().equals(VlanType.DirectAttached) && guestVlan.getVlanId().equals(Vlan.UNTAGGED); - long accountIdForDHCPServer = podVlan ? Account.ACCOUNT_ID_SYSTEM : accountId; - long domainIdForDHCPServer = podVlan ? DomainVO.ROOT_DOMAIN : account.getDomainId(); - String domainNameForDHCPServer = podVlan ? "root" : _domainDao.findById(account.getDomainId()).getName(); - - final VMTemplateVO rtrTemplate = _templateDao.findRoutingTemplate(); - - final Transaction txn = Transaction.currentTxn(); - DomainRouterVO router = null; - Long podId = pod.getId(); - pod = _podDao.acquireInLockTable(podId, 20*60); - if (pod == null) { - throw new ConcurrentOperationException("Unable to acquire lock on pod " + podId ); - } - if(s_logger.isDebugEnabled()) { - s_logger.debug("Lock on pod " + podId + " is acquired"); - } - - final long id = _routerDao.getNextInSequence(Long.class, "id"); - final String[] macAddresses = _dcDao.getNextAvailableMacAddressPair(dc.getId()); - final String mgmtMacAddress = macAddresses[0]; - final String guestMacAddress = macAddresses[1]; - final String name = VirtualMachineName.getRouterName(id, _instance).intern(); - - boolean routerLockAcquired = false; - try { - List rtrs = _routerDao.listByVlanDbId(guestVlan.getId()); - assert rtrs.size() < 2 : "How did we get more than one router per vlan?"; - if (rtrs.size() == 1) { - return rtrs.get(0); - } - String mgmtNetmask = NetUtils.getCidrNetmask(pod.getCidrSize()); - final String guestIp = null;//_ipAddressDao.assignIpAddress(accountIdForDHCPServer, domainIdForDHCPServer, guestVlan.getId(), false).getAddress(); - - router = - new DomainRouterVO(id, - _offering.getId(), - name, - mgmtMacAddress, - null, - mgmtNetmask, - _routerTemplateId, - rtrTemplate.getGuestOSId(), - guestMacAddress, - guestIp, - guestVlan.getVlanNetmask(), - accountIdForDHCPServer, - domainIdForDHCPServer, - "FE:FF:FF:FF:FF:FF", - null, - "255.255.255.255", - guestVlan.getId(), - guestVlan.getVlanId(), - pod.getId(), - dc.getId(), - _routerRamSize, - guestVlan.getVlanGateway(), - domainNameForDHCPServer, - dc.getDns1(), - dc.getDns2()); - router.setRole(Role.DHCP_USERDATA); - router.setVnet(guestVlan.getVlanId()); - - router.setLastHostId(candidateHost); - - txn.start(); - router = _routerDao.persist(router); - router = _routerDao.acquireInLockTable(router.getId()); - if (router == null) { - s_logger.debug("Unable to acquire lock on router " + id); - throw new CloudRuntimeException("Unable to acquire lock on router " + id); - } - - routerLockAcquired = true; - - txn.commit(); - - List vols = _storageMgr.create(account, router, rtrTemplate, dc, pod, _offering, null,0); - if (vols == null){ - _ipAddressDao.unassignIpAddress(guestIp); - _routerDao.expunge(router.getId()); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Unable to create dhcp server in storage host or pool in pod " + pod.getName() + " (id:" + pod.getId() + ")"); - } - } - - final EventVO event = new EventVO(); - event.setUserId(userId); - event.setAccountId(accountIdForDHCPServer); - event.setType(EventTypes.EVENT_ROUTER_CREATE); - - if (vols == null) { - event.setDescription("failed to create DHCP Server : " + router.getName()); - event.setLevel(EventVO.LEVEL_ERROR); - _eventDao.persist(event); - throw new ExecutionException("Unable to create DHCP Server"); - } - _itMgr.stateTransitTo(router, VirtualMachine.Event.OperationSucceeded, null); - - s_logger.info("DHCP server created: id=" + router.getId() + "; name=" + router.getName() + "; vlan=" + guestVlan.getVlanId() + "; pod=" + pod.getName()); - - event.setDescription("successfully created DHCP Server : " + router.getName() + " with ip : " + router.getGuestIpAddress()); - _eventDao.persist(event); - - return router; - } catch (final Throwable th) { - if (th instanceof ExecutionException) { - s_logger.error("Error while starting router due to " + th.getMessage()); - } else { - s_logger.error("Unable to create router", th); - } - txn.rollback(); - - if (router.getState() == State.Creating) { - _routerDao.expunge(router.getId()); - } - return null; - } finally { - if (routerLockAcquired) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Releasing lock on router " + id); - } - _routerDao.releaseFromLockTable(id); - } - if (pod != null) { - if(s_logger.isDebugEnabled()) { - s_logger.debug("Releasing lock on pod " + podId); - } - _podDao.releaseFromLockTable(pod.getId()); - } - } - } - - @Override - public boolean releaseRouter(final long routerId) { - return destroyRouter(routerId); - } - - @Override @DB - public DomainRouterVO createRouter(final long accountId, final String publicIpAddress, final long dataCenterId, - String domain, final ServiceOfferingVO offering, long startEventId) - throws ConcurrentOperationException { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Creating a router for account=" + accountId + "; publicIpAddress=" + publicIpAddress + "; dc=" + dataCenterId + "domain=" + domain); - } - - final AccountVO account = _accountDao.acquireInLockTable(accountId); - if (account == null) { - throw new ConcurrentOperationException("Unable to acquire account " + accountId); - } - - if(s_logger.isDebugEnabled()) { - s_logger.debug("lock on account " + accountId + " for createRouter is acquired"); - } - - final Transaction txn = Transaction.currentTxn(); - DomainRouterVO router = null; - boolean success = false; - try { - router = _routerDao.findBy(accountId, dataCenterId); - if (router != null && router.getState() != State.Creating) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Router " + router.toString() + " found for account " + accountId + " in data center " + dataCenterId); - } - success = true; - return router; - } - EventVO event = new EventVO(); - event.setUserId(1L); - event.setAccountId(accountId); - event.setType(EventTypes.EVENT_ROUTER_CREATE); - event.setState(Event.State.Started); - event.setStartId(startEventId); - event.setDescription("Creating Router for account with Id: "+accountId); - event = _eventDao.persist(event); - - final DataCenterVO dc = _dcDao.findById(dataCenterId); - final VMTemplateVO template = _templateDao.findRoutingTemplate(); - - String[] macAddresses = getMacAddressPair(dataCenterId); - String privateMacAddress = macAddresses[0]; - String publicMacAddress = macAddresses[1]; - - final long id = _routerDao.getNextInSequence(Long.class, "id"); - - if (domain == null) { - domain = "v" + Long.toHexString(accountId) + "." + _domain; - } - - final String name = VirtualMachineName.getRouterName(id, _instance).intern(); - long routerMacAddress = NetUtils.mac2Long(dc.getRouterMacAddress()) | ((dc.getId() & 0xff) << 32); - - //set the guestNetworkCidr from the dc obj - String guestNetworkCidr = dc.getGuestNetworkCidr(); - String[] cidrTuple = guestNetworkCidr.split("\\/"); - String guestIpAddress = NetUtils.getIpRangeStartIpFromCidr(cidrTuple[0], Long.parseLong(cidrTuple[1])); - String guestNetmask = NetUtils.getCidrNetmask(Long.parseLong(cidrTuple[1])); - -// String path = null; -// final int numVolumes = offering.isMirroredVolumes()?2:1; -// long routerId = 0; - - // Find the VLAN ID, VLAN gateway, and VLAN netmask for publicIpAddress - IPAddressVO ipVO = _ipAddressDao.findById(publicIpAddress); - VlanVO vlan = _vlanDao.findById(ipVO.getVlanId()); - String vlanId = vlan.getVlanId(); - String vlanGateway = vlan.getVlanGateway(); - String vlanNetmask = vlan.getVlanNetmask(); - - Pair pod = null; - Set avoids = new HashSet(); - boolean found = false; - while ((pod = _agentMgr.findPod(template, offering, dc, accountId, avoids)) != null) { - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Attempting to create in pod " + pod.first().getName()); - } - - router = new DomainRouterVO(id, - _offering.getId(), - name, - privateMacAddress, - null, - null, - _routerTemplateId, - template.getGuestOSId(), - NetUtils.long2Mac(routerMacAddress), - guestIpAddress, - guestNetmask, - accountId, - account.getDomainId(), - publicMacAddress, - publicIpAddress, - vlanNetmask, - vlan.getId(), - vlanId, - pod.first().getId(), - dataCenterId, - _routerRamSize, - vlanGateway, - domain, - dc.getDns1(), - dc.getDns2()); - router.setMirroredVols(offering.isMirrored()); - - router.setLastHostId(pod.second()); - router = _routerDao.persist(router); - - List vols = _storageMgr.create(account, router, template, dc, pod.first(), _offering, null,0); - if(vols != null) { - found = true; - break; - } - - _routerDao.expunge(router.getId()); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Unable to find storage host or pool in pod " + pod.first().getName() + " (id:" + pod.first().getId() + "), checking other pods"); - } - avoids.add(pod.first().getId()); - } - - if (!found) { - event.setDescription("failed to create Domain Router : " + name); - event.setLevel(EventVO.LEVEL_ERROR); - _eventDao.persist(event); - throw new ExecutionException("Unable to create DomainRouter"); - } - _itMgr.stateTransitTo(router, VirtualMachine.Event.OperationSucceeded, null); - - s_logger.debug("Router created: id=" + router.getId() + "; name=" + router.getName()); - - event = new EventVO(); - event.setUserId(1L); // system user performed the action - event.setAccountId(accountId); - event.setType(EventTypes.EVENT_ROUTER_CREATE); - event.setStartId(startEventId); - event.setDescription("successfully created Domain Router : " + router.getName() + " with ip : " + publicIpAddress); - _eventDao.persist(event); - success = true; - return router; - } catch (final Throwable th) { - if (th instanceof ExecutionException) { - s_logger.error("Error while starting router due to " + th.getMessage()); - } else { - s_logger.error("Unable to create router", th); - } - txn.rollback(); - - if (router != null && router.getState() == State.Creating) { - _routerDao.expunge(router.getId()); - } - return null; - } finally { - if (account != null) { - if(s_logger.isDebugEnabled()) { - s_logger.debug("Releasing lock on account " + account.getId() + " for createRouter"); - } - _accountDao.releaseFromLockTable(account.getId()); - } - if(!success){ - EventVO event = new EventVO(); - event.setUserId(1L); // system user performed the action - event.setAccountId(accountId); - event.setType(EventTypes.EVENT_ROUTER_CREATE); - event.setStartId(startEventId); - event.setLevel(EventVO.LEVEL_ERROR); - event.setDescription("Failed to create router for account " + accountId + " in data center " + dataCenterId); - _eventDao.persist(event); - } - } - } - @Override public boolean destroyRouter(final long routerId) { @@ -764,386 +436,11 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute } } - @Override - public DomainRouterVO startRouter(final long routerId, long eventId) { - try { - return start(routerId, eventId); - } catch (final StorageUnavailableException e) { - s_logger.debug(e.getMessage()); - return null; - } catch (final ConcurrentOperationException e) { - s_logger.debug(e.getMessage()); - return null; - } - } - @Override public VirtualRouter startRouter(StartRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException, ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException{ - if (_useNewNetworking) { - return startRouter(cmd.getId()); - } - Long routerId = cmd.getId(); - Account account = UserContext.current().getAccount(); - - //verify parameters - DomainRouterVO router = _routerDao.findById(routerId); - if (router == null) { - throw new InvalidParameterValueException ("Unable to find router with id " + routerId); - } - if ((account != null) && !_domainDao.isChildDomain(account.getDomainId(), router.getDomainId())) { - throw new PermissionDeniedException ("Unable to start router with id " + routerId + ". Permission denied."); - } - - long eventId = EventUtils.saveScheduledEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_ROUTER_START, "starting Router with Id: "+routerId); - return startRouter(routerId, eventId); + return startRouter(cmd.getId()); } - @Override @DB - public DomainRouterVO start(long routerId, long startEventId) throws StorageUnavailableException, ConcurrentOperationException { - AsyncJobExecutor asyncExecutor = BaseAsyncJobExecutor.getCurrentExecutor(); - if (asyncExecutor != null) { - AsyncJobVO job = asyncExecutor.getJob(); - if (s_logger.isInfoEnabled()) { - s_logger.info("Start router " + routerId + ", update async job-" + job.getId()); - } - _asyncMgr.updateAsyncJobAttachment(job.getId(), "domain_router", routerId); - } - - DomainRouterVO router = _routerDao.acquireInLockTable(routerId); - if (router == null) { - s_logger.debug("Unable to lock the router " + routerId); - return router; - } - - if(s_logger.isDebugEnabled()) { - s_logger.debug("Lock on router " + routerId + " is acquired"); - } - - boolean started = false; - String vnet = null; - boolean vnetAllocated = false; - try { - final State state = router.getState(); - if (state == State.Running) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Router is already started: " + router.toString()); - } - started = true; - return router; - } - - EventVO event = new EventVO(); - event.setUserId(1L); - event.setAccountId(router.getAccountId()); - event.setType(EventTypes.EVENT_ROUTER_START); - event.setState(Event.State.Started); - event.setDescription("Starting Router with Id: "+routerId); - event.setStartId(startEventId); - event = _eventDao.persist(event); - - if(startEventId == 0){ - // When route start is not asynchronous, use id of the Started event instead of Scheduled event - startEventId = event.getId(); - } - - - if (state == State.Destroyed || state == State.Expunging || router.getRemoved() != null) { - s_logger.debug("Starting a router that's can not be started: " + router.toString()); - return null; - } - - if (state.isTransitional()) { - throw new ConcurrentOperationException("Someone else is starting the router: " + router.toString()); - } - - final HostPodVO pod = _podDao.findById(router.getPodId()); - final HashSet avoid = new HashSet(); - final VMTemplateVO template = _templateDao.findById(router.getTemplateId()); - final DataCenterVO dc = _dcDao.findById(router.getDataCenterId()); - ServiceOfferingVO offering = _serviceOfferingDao.findById(router.getServiceOfferingId()); - StoragePoolVO sp = _storageMgr.getStoragePoolForVm(router.getId()); - - HostVO routingHost = (HostVO)_agentMgr.findHost(Host.Type.Routing, dc, pod, sp, offering, template, router, null, avoid); - - if (routingHost == null) { - s_logger.error("Unable to find a host to start " + router.toString()); - return null; - } - - if (! _itMgr.stateTransitTo(router, VirtualMachine.Event.StartRequested, routingHost.getId())) { - s_logger.debug("Unable to start router " + router.toString() + " because it is not in a startable state"); - throw new ConcurrentOperationException("Someone else is starting the router: " + router.toString()); - } - - final boolean mirroredVols = router.isMirroredVols(); - try { - event = new EventVO(); - event.setUserId(1L); - event.setAccountId(router.getAccountId()); - event.setType(EventTypes.EVENT_ROUTER_START); - event.setStartId(startEventId); - - final List vms = _vmDao.listBy(routerId, State.Starting, State.Running, State.Stopped, State.Stopping); - if (vms.size() != 0) { // Find it in the existing network. - for (final UserVmVO vm : vms) { - if (vm.getVnet() != null) { - vnet = vm.getVnet(); - break; - } - } - } - - if (vnet != null) { - s_logger.debug("Router: " + router.getName() + " discovered vnet: " + vnet + " from existing VMs."); - } else { - s_logger.debug("Router: " + router.getName() + " was unable to discover vnet from existing VMs. Acquiring new vnet."); - } - - String routerMacAddress = null; - if (vnet == null && router.getRole() == Role.DHCP_FIREWALL_LB_PASSWD_USERDATA) { // If not found, then get another one. - if(USE_POD_VLAN){ - vnet = _dcDao.allocatePodVlan(router.getPodId(), router.getAccountId()); - } else { - vnet = _dcDao.allocateVnet(router.getDataCenterId(), router.getAccountId(), null); - } - vnetAllocated = true; - if(vnet != null){ - routerMacAddress = getRouterMacForVnet(dc, vnet); - } - } else if (router.getRole() == Role.DHCP_USERDATA) { - if (!Vlan.UNTAGGED.equals(router.getVlanId())) { - vnet = router.getVlanId().trim(); - } else { - vnet = Vlan.UNTAGGED; - } - routerMacAddress = router.getGuestMacAddress(); - } else if (vnet != null && router.getRole() == Role.DHCP_FIREWALL_LB_PASSWD_USERDATA) { - routerMacAddress = getRouterMacForVnet(dc, vnet); - } - - if (vnet == null) { - s_logger.error("Unable to get another vnet while starting router " + router.getName()); - return null; - } else { - s_logger.debug("Router: " + router.getName() + " is using vnet: " + vnet); - } - - Answer answer = null; - int retry = _retry; - - do { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Trying to start router on host " + routingHost.getName()); - } - - String privateIpAddress = null; - String privateNetMask = null; - - if(_defaultHypervisorType == null || !_defaultHypervisorType.equalsIgnoreCase(Hypervisor.HypervisorType.VmWare.toString())) { - privateIpAddress = _dcDao.allocateLinkLocalIpAddress(router.getDataCenterId(), routingHost.getPodId(), router.getId(), null); - privateNetMask = NetUtils.getLinkLocalNetMask(); - } else { - privateIpAddress = _dcDao.allocatePrivateIpAddress(router.getDataCenterId(), routingHost.getPodId(), router.getId(), null).first(); - privateNetMask = NetUtils.getCidrNetmask(pod.getCidrSize()); - } - - if (privateIpAddress == null) { - s_logger.error("Unable to allocate a private ip address while creating router for pod " + routingHost.getPodId()); - avoid.add(routingHost); - continue; - } - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Private Ip Address allocated: " + privateIpAddress); - } - - router.setPrivateIpAddress(privateIpAddress); - router.setPrivateNetmask(privateNetMask); - router.setGuestMacAddress(routerMacAddress); - router.setVnet(vnet); - /*Ram size can be changed by upgradeRouterCmd*/ - router.setRamSize(offering.getRamSize()); - - final String name = VirtualMachineName.attachVnet(router.getName(), vnet); - router.setInstanceName(name); - long accountId = router.getAccountId(); - // Use account level network domain if available - String networkDomain = _accountDao.findById(accountId).getNetworkDomain(); - if(networkDomain == null){ - // Use zone level network domain, if account level domain is not available - networkDomain = dc.getDomain(); - if(networkDomain == null){ - // Use system wide default network domain, if zone wide network domain is also not available - networkDomain = _networkDomain; - } - - } - router.setDomain(networkDomain); - _itMgr.stateTransitTo(router, VirtualMachine.Event.OperationRetry, routingHost.getId()); - - List vols = _storageMgr.prepare(router, routingHost); - if (vols == null || vols.size() == 0) { - s_logger.debug("Couldn't get storage working for " + routingHost); - continue; - } - /* - if( !_storageMgr.share(router, vols, routingHost, true) ) { - s_logger.debug("Unable to share volumes to host " + routingHost.getId()); - continue; - } - */ - - try { - String[] storageIps = new String[2]; - - // Determine the VM's OS description - String guestOSDescription; - GuestOSVO guestOS = _guestOSDao.findById(router.getGuestOSId()); - if (guestOS == null) { - String msg = "Could not find guest OS description for OSId " - + router.getGuestOSId() + " for vm: " + router.getName(); - s_logger.debug(msg); - throw new CloudRuntimeException(msg); - } else { - guestOSDescription = guestOS.getDisplayName(); - } - - final StartRouterCommand cmdStartRouter = new StartRouterCommand(router, _networkRate, - _multicastRate, name, storageIps, vols, mirroredVols, guestOSDescription, _mgmt_host); - answer = _agentMgr.send(routingHost.getId(), cmdStartRouter); - if (answer != null && answer.getResult()) { - if (answer instanceof StartRouterAnswer){ - StartRouterAnswer rAnswer = (StartRouterAnswer)answer; - if (rAnswer.getPrivateIpAddress() != null) { - router.setPrivateIpAddress(rAnswer.getPrivateIpAddress()); - } - if (rAnswer.getPrivateMacAddress() != null) { - router.setPrivateMacAddress(rAnswer.getPrivateMacAddress()); - } - } - if (resendRouterState(router)) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Router " + router.getName() + " started on " + routingHost.getName()); - } - started = true; - break; - } else { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Router " + router.getName() + " started on " + routingHost.getName() + " but failed to program rules"); - } - sendStopCommand(router); - } - } - s_logger.debug("Unable to start " + router.toString() + " on host " + routingHost.toString() + " due to " + answer.getDetails()); - } catch (OperationTimedoutException e) { - if (e.isActive()) { - s_logger.debug("Unable to start vm " + router.getName() + " due to operation timed out and it is active so scheduling a restart."); - _haMgr.scheduleRestart(router, true); - return null; - } - } catch (AgentUnavailableException e) { - s_logger.debug("Agent " + routingHost.toString() + " was unavailable to start VM " + router.getName()); - } - avoid.add(routingHost); - - router.setPrivateIpAddress(null); - - if(_defaultHypervisorType == null || !_defaultHypervisorType.equalsIgnoreCase(Hypervisor.HypervisorType.VmWare.toString())) { - _dcDao.releaseLinkLocalIpAddress(privateIpAddress, router.getDataCenterId(), router.getId()); - } else { - _dcDao.releasePrivateIpAddress(privateIpAddress, router.getDataCenterId(), router.getId()); - } - - _storageMgr.unshare(router, vols, routingHost); - } while (--retry > 0 && (routingHost = (HostVO)_agentMgr.findHost(Host.Type.Routing, dc, pod, sp, offering, template, router, null, avoid)) != null); - - - if (routingHost == null || retry <= 0) { - throw new ExecutionException("Couldn't find a routingHost"); - } - - _itMgr.stateTransitTo(router, VirtualMachine.Event.OperationSucceeded, routingHost.getId()); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Router " + router.toString() + " is now started on " + routingHost.toString()); - } - - event.setDescription("successfully started Domain Router: " + router.getName()); - _eventDao.persist(event); - - return _routerDao.findById(routerId); - } catch (final Throwable th) { - - if (th instanceof ExecutionException) { - s_logger.error("Error while starting router due to " + th.getMessage()); - } else if (th instanceof ConcurrentOperationException) { - throw (ConcurrentOperationException)th; - } else if (th instanceof StorageUnavailableException) { - throw (StorageUnavailableException)th; - } else { - s_logger.error("Error while starting router", th); - } - return null; - } - } finally { - - if (!started){ - Transaction txn = Transaction.currentTxn(); - txn.start(); - if (vnetAllocated == true && vnet != null) { - _dcDao.releaseVnet(vnet, router.getDataCenterId(), router.getAccountId(), null); - } - - router.setVnet(null); - String privateIpAddress = router.getPrivateIpAddress(); - - router.setPrivateIpAddress(null); - - if (privateIpAddress != null) { - _dcDao.releasePrivateIpAddress(privateIpAddress, router.getDataCenterId(), router.getId()); - } - - - if ( _itMgr.stateTransitTo(router, VirtualMachine.Event.OperationFailed, null)) { - txn.commit(); - } - - EventVO event = new EventVO(); - event.setUserId(1L); - event.setAccountId(router.getAccountId()); - event.setType(EventTypes.EVENT_ROUTER_START); - event.setDescription("Failed to start Router with Id: "+routerId); - event.setLevel(EventVO.LEVEL_ERROR); - event.setStartId(startEventId); - _eventDao.persist(event); - } - - if (router != null) { - if(s_logger.isDebugEnabled()) { - s_logger.debug("Releasing lock on router " + routerId); - } - _routerDao.releaseFromLockTable(routerId); - } - - } - } - - private String getRouterMacForVnet(final DataCenterVO dc, final String vnet) { - final long vnetId = Long.parseLong(vnet); - //ToDo: There could be 2 DomR in 2 diff pods of the zone with same vnet. Add podId to the mix to make them unique - final long routerMac = (NetUtils.mac2Long(dc.getRouterMacAddress()) & (0x00ffff0000ffffl)) | ((vnetId & 0xffff) << 16); - return NetUtils.long2Mac(routerMac); - } - - private String getRouterMacForZoneVlan(final DataCenterVO dc, final String vlan) { - final long vnetId = Long.parseLong(vlan); - final long routerMac = (NetUtils.mac2Long(dc.getRouterMacAddress()) & (0x00ffff0000ffffl)) | ((vnetId & 0xffff) << 16); - return NetUtils.long2Mac(routerMac); - } - - private String[] getMacAddressPair(long dataCenterId) { - return _dcDao.getNextAvailableMacAddressPair(dataCenterId); - } - private boolean resendRouterState(final DomainRouterVO router) { if (router.getRole() == Role.DHCP_FIREWALL_LB_PASSWD_USERDATA) { //source NAT address is stored in /proc/cmdline of the domR and gets @@ -1420,25 +717,27 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute event.setAccountId(router.getAccountId()); event.setType(EventTypes.EVENT_ROUTER_REBOOT); event.setStartId(startEventId); + + return false; - if (router.getState() == State.Running && router.getHostId() != null) { - final RebootRouterCommand cmd = new RebootRouterCommand(router.getInstanceName(), router.getPrivateIpAddress()); - final RebootAnswer answer = (RebootAnswer)_agentMgr.easySend(router.getHostId(), cmd); - - if (answer != null && resendRouterState(router)) { - processStopOrRebootAnswer(router, answer); - event.setDescription("successfully rebooted Domain Router : " + router.getName()); - _eventDao.persist(event); - return true; - } else { - event.setDescription("failed to reboot Domain Router : " + router.getName()); - event.setLevel(EventVO.LEVEL_ERROR); - _eventDao.persist(event); - return false; - } - } else { - return startRouter(routerId, 0) != null; - } +//FIXME Alena if (router.getState() == State.Running && router.getHostId() != null) { +// final RebootRouterCommand cmd = new RebootRouterCommand(router.getInstanceName(), router.getPrivateIpAddress()); +// final RebootAnswer answer = (RebootAnswer)_agentMgr.easySend(router.getHostId(), cmd); +// +// if (answer != null && resendRouterState(router)) { +// processStopOrRebootAnswer(router, answer); +// event.setDescription("successfully rebooted Domain Router : " + router.getName()); +// _eventDao.persist(event); +// return true; +// } else { +// event.setDescription("failed to reboot Domain Router : " + router.getName()); +// event.setLevel(EventVO.LEVEL_ERROR); +// _eventDao.persist(event); +// return false; +// } +// } else { +// return startRouter(routerId, 0) != null; +// } } @Override @@ -1890,89 +1189,6 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute } } - @Override - public boolean addDhcpEntry(final long routerHostId, final String routerIp, String vmName, String vmMac, String vmIp) { - final DhcpEntryCommand dhcpEntry = new DhcpEntryCommand(vmMac, vmIp, routerIp, vmName); - - - final Answer answer = _agentMgr.easySend(routerHostId, dhcpEntry); - return (answer != null && answer.getResult()); - } - - @Override - public DomainRouterVO addVirtualMachineToGuestNetwork(UserVmVO vm, String password, long startEventId) throws ConcurrentOperationException { - try { - DomainRouterVO router = start(vm.getDomainRouterId(), 0); - if (router == null) { - s_logger.error("Can't find a domain router to start VM: " + vm.getName()); - return null; - } - - if (vm.getGuestMacAddress() == null){ - String routerGuestMacAddress = null; - if(USE_POD_VLAN){ - if((vm.getPodId() == router.getPodId())){ - routerGuestMacAddress = router.getGuestMacAddress(); - } else { - //Not in the same pod use guest zone mac address - routerGuestMacAddress = router.getGuestZoneMacAddress(); - } - String vmMacAddress = NetUtils.long2Mac((NetUtils.mac2Long(routerGuestMacAddress) & 0xffffffff0000L) | (NetUtils.ip2Long(vm.getGuestIpAddress()) & 0xffff)); - vm.setGuestMacAddress(vmMacAddress); - } - else { - String vmMacAddress = NetUtils.long2Mac((NetUtils.mac2Long(router.getGuestMacAddress()) & 0xffffffff0000L) | (NetUtils.ip2Long(vm.getGuestIpAddress()) & 0xffff)); - vm.setGuestMacAddress(vmMacAddress); - } - } - String userData = vm.getUserData(); - Commands cmds = new Commands(OnError.Stop); - int cmdIndex = 0; - int passwordIndex = -1; - int vmDataIndex = -1; - cmds.addCommand(new DhcpEntryCommand(vm.getGuestMacAddress(), vm.getGuestIpAddress(), router.getPrivateIpAddress(), vm.getName())); - if (password != null) { - final String encodedPassword = rot13(password); - cmds.addCommand(new SavePasswordCommand(encodedPassword, vm.getPrivateIpAddress(), router.getPrivateIpAddress(), vm.getName())); - passwordIndex = cmdIndex; - } - - - String serviceOffering = _serviceOfferingDao.findById(vm.getServiceOfferingId()).getDisplayText(); - String zoneName = _dcDao.findById(vm.getDataCenterId()).getName(); - String routerPublicIpAddress = (router.getPublicIpAddress() != null) ? router.getPublicIpAddress() : vm.getGuestIpAddress(); - - cmds.addCommand(generateVmDataCommand(router.getPrivateIpAddress(), routerPublicIpAddress, vm.getPrivateIpAddress(), userData, serviceOffering, zoneName, vm.getGuestIpAddress(), vm.getName(), vm.getInstanceName(), vm.getId())); - vmDataIndex = cmdIndex; - - Answer[] answers = _agentMgr.send(router.getHostId(), cmds); - if (!answers[0].getResult()) { - s_logger.error("Unable to set dhcp entry for " + vm.getId() + " - " + vm.getName() +" on domR: " + router.getName() + " due to " + answers[0].getDetails()); - return null; - } - - if (password != null && !answers[passwordIndex].getResult()) { - s_logger.error("Unable to set password for " + vm.getId() + " - " + vm.getName() + " due to " + answers[passwordIndex].getDetails()); - return null; - } - - if (vmDataIndex > 0 && !answers[vmDataIndex].getResult()) { - s_logger.error("Unable to set VM data for " + vm.getId() + " - " + vm.getName() + " due to " + answers[vmDataIndex].getDetails()); - return null; - } - return router; - } catch (StorageUnavailableException e) { - s_logger.error("Unable to start router " + vm.getDomainRouterId() + " because storage is unavailable."); - return null; - } catch (AgentUnavailableException e) { - s_logger.error("Unable to setup the router " + vm.getDomainRouterId() + " for vm " + vm.getId() + " - " + vm.getName() + " because agent is unavailable"); - return null; - } catch (OperationTimedoutException e) { - s_logger.error("Unable to setup the router " + vm.getDomainRouterId() + " for vm " + vm.getId() + " - " + vm.getName() + " because agent is too busy"); - return null; - } - } - private VmDataCommand generateVmDataCommand(String routerPrivateIpAddress, String routerPublicIpAddress, String vmPrivateIpAddress, String userData, String serviceOffering, String zoneName, String guestIpAddress, String vmName, String vmInstanceName, long vmId) { @@ -1991,25 +1207,6 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute return cmd; } - public void releaseVirtualMachineFromGuestNetwork(UserVmVO vm) { - } - - @Override - public String createZoneVlan(DomainRouterVO router) { - String zoneVlan = _dcDao.allocateVnet(router.getDataCenterId(), router.getAccountId(), null); - final DataCenterVO dc = _dcDao.findById(router.getDataCenterId()); - router.setZoneVlan(zoneVlan); - router.setGuestZoneMacAddress(getRouterMacForZoneVlan(dc, zoneVlan)); - _routerDao.update(router.getId(), router); - final CreateZoneVlanCommand cmdCreateZoneVlan = new CreateZoneVlanCommand(router); - CreateZoneVlanAnswer answer = (CreateZoneVlanAnswer) _agentMgr.easySend(router.getHostId(), cmdCreateZoneVlan); - if(!answer.getResult()){ - s_logger.error("Unable to create zone vlan for router: "+router.getName()+ " zoneVlan: "+zoneVlan); - return null; - } - return zoneVlan; - } - protected class NetworkUsageTask implements Runnable { public NetworkUsageTask() { @@ -2784,4 +1981,11 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute //TODO - apply port forwarding rules here return true; } + + @Override + public DomainRouterVO start(long vmId, long startEventId) throws InsufficientCapacityException, StorageUnavailableException, + ConcurrentOperationException, ExecutionException { + // TODO Auto-generated method stub + return null; + } } diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 1aaf26a494d..6bcae3785cb 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -2376,14 +2376,14 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag { //create a dummy event and restart the domr immediately long eventId = saveScheduledEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_PROXY_START, "starting domr with Id: "+vmInstance.getId()); - if(_routerMgr.startRouter(vmInstance.getId(), eventId)==null) - { - String errorMsg = "There was an error starting the domain router id: "+vmInstance.getId()+" on another storage pool, cannot enable primary storage maintenance"; - s_logger.warn(errorMsg); - primaryStorage.setStatus(Status.ErrorInMaintenance); - _storagePoolDao.persist(primaryStorage); - throw new CloudRuntimeException(errorMsg); - } +// FIXME if(_routerMgr.startRouter(vmInstance.getId(), eventId)==null) +// { +// String errorMsg = "There was an error starting the domain router id: "+vmInstance.getId()+" on another storage pool, cannot enable primary storage maintenance"; +// s_logger.warn(errorMsg); +// primaryStorage.setStatus(Status.ErrorInMaintenance); +// _storagePoolDao.persist(primaryStorage); +// throw new CloudRuntimeException(errorMsg); +// } } } } diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index 17a4558a9f3..0bc1a41b9d3 100644 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -24,7 +24,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -44,8 +43,6 @@ import com.cloud.agent.api.PrepareForMigrationCommand; import com.cloud.agent.api.RebootCommand; import com.cloud.agent.api.SecStorageFirewallCfgCommand; import com.cloud.agent.api.SecStorageSetupCommand; -import com.cloud.agent.api.StartSecStorageVmAnswer; -import com.cloud.agent.api.StartSecStorageVmCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StopAnswer; import com.cloud.agent.api.StopCommand; @@ -56,7 +53,6 @@ import com.cloud.async.AsyncJobExecutor; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; import com.cloud.async.BaseAsyncJobExecutor; -import com.cloud.capacity.dao.CapacityDao; import com.cloud.cluster.ClusterManager; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; @@ -64,7 +60,6 @@ import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.HostPodDao; -import com.cloud.dc.dao.VlanDao; import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.event.Event; @@ -78,7 +73,6 @@ import com.cloud.exception.OperationTimedoutException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.exception.StorageUnavailableException; import com.cloud.ha.HighAvailabilityManager; -import com.cloud.ha.dao.HighAvailabilityDao; import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; @@ -86,7 +80,6 @@ import com.cloud.info.RunningHostCountInfo; import com.cloud.info.RunningHostInfoAgregator; import com.cloud.info.RunningHostInfoAgregator.ZoneHostInfo; import com.cloud.network.IpAddrAllocator; -import com.cloud.network.IpAddrAllocator.networkInfo; import com.cloud.network.NetworkManager; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; @@ -96,15 +89,12 @@ import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; -import com.cloud.storage.GuestOSVO; import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VolumeVO; -import com.cloud.storage.dao.GuestOSDao; -import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.StoragePoolHostDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateHostDao; @@ -142,8 +132,6 @@ import com.cloud.vm.VirtualMachineName; import com.cloud.vm.VirtualMachineProfile; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.SecondaryStorageVmDao; -import com.cloud.vm.dao.UserVmDao; -import com.cloud.vm.dao.VMInstanceDao; // // Possible secondary storage vm state transition cases @@ -167,7 +155,6 @@ import com.cloud.vm.dao.VMInstanceDao; public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, VirtualMachineGuru { private static final Logger s_logger = Logger.getLogger(SecondaryStorageManagerImpl.class); - private static final int DEFAULT_FIND_HOST_RETRY_COUNT = 2; private static final int DEFAULT_CAPACITY_SCAN_INTERVAL = 30000; // 30 seconds private static final int EXECUTOR_SHUTDOWN_TIMEOUT = 1000; // 1 second @@ -175,52 +162,41 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V private static final int ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_SYNC = 180; // 3 minutes private static final int STARTUP_DELAY = 60000; // 60 seconds - - private String _mgmt_host; private int _mgmt_port = 8250; private int _secStorageVmCmdPort = 3; private String _name; + @Inject(adapter=SecondaryStorageVmAllocator.class) private Adapters _ssVmAllocators; - private SecondaryStorageVmDao _secStorageVmDao; - private DataCenterDao _dcDao; - private VlanDao _vlanDao; - private VMTemplateDao _templateDao; - private IPAddressDao _ipAddressDao; - private VolumeDao _volsDao; - private HostPodDao _podDao; - private HostDao _hostDao; - private StoragePoolDao _storagePoolDao; - private StoragePoolHostDao _storagePoolHostDao; - private UserVmDao _userVmDao; - private VMInstanceDao _instanceDao; - private AccountDao _accountDao; + @Inject private SecondaryStorageVmDao _secStorageVmDao; + @Inject private DataCenterDao _dcDao; + @Inject private VMTemplateDao _templateDao; + @Inject private IPAddressDao _ipAddressDao; + @Inject private VolumeDao _volsDao; + @Inject private HostPodDao _podDao; + @Inject private HostDao _hostDao; + @Inject private StoragePoolHostDao _storagePoolHostDao; + @Inject private AccountDao _accountDao; - private VMTemplateHostDao _vmTemplateHostDao; - private CapacityDao _capacityDao; - private HighAvailabilityDao _haDao; + @Inject private VMTemplateHostDao _vmTemplateHostDao; - private AgentManager _agentMgr; - private NetworkManager _networkMgr; - private StorageManager _storageMgr; - private HighAvailabilityManager _haMgr; + @Inject private AgentManager _agentMgr; + @Inject private NetworkManager _networkMgr; + @Inject private StorageManager _storageMgr; - private ClusterManager _clusterMgr; + @Inject private ClusterManager _clusterMgr; private SecondaryStorageListener _listener; private ServiceOfferingVO _serviceOffering; - private int _networkRate; - private int _multicastRate; private VMTemplateVO _template; @Inject private ConfigurationDao _configDao; @Inject private EventDao _eventDao; @Inject private ServiceOfferingDao _offeringDao; @Inject private AccountService _accountMgr; - @Inject GuestOSDao _guestOSDao = null; @Inject private VirtualMachineManager _itMgr; @Inject private NicDao _nicDao; @Inject private NetworkDao _networkDao; @@ -237,7 +213,6 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V private int _secStorageVmRamSize; - private int _find_host_retry = DEFAULT_FIND_HOST_RETRY_COUNT; private String _domain; private String _instance; @@ -246,20 +221,14 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V private String _secHostUuid; private String _nfsShare; private String _allowedInternalSites; - private boolean _useNewNetworking; - - - private final GlobalLock _capacityScanLock = GlobalLock.getInternLock(getCapacityScanLockName()); private final GlobalLock _allocLock = GlobalLock.getInternLock(getAllocLockName()); - - @Override public SecondaryStorageVmVO startSecStorageVm(long secStorageVmId, long startEventId) { try { - return start2(secStorageVmId, startEventId); + return start(secStorageVmId, startEventId); } catch (StorageUnavailableException e) { s_logger.warn("Exception while trying to start secondary storage vm", e); return null; @@ -274,308 +243,14 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V } } - public SecondaryStorageVmVO start2(long secStorageVmId, long startEventId) throws ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException { - if (!_useNewNetworking) { - return start(secStorageVmId, startEventId); - } + @Override + public SecondaryStorageVmVO start(long secStorageVmId, long startEventId) throws ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException { SecondaryStorageVmVO secStorageVm = _secStorageVmDao.findById(secStorageVmId); Account systemAcct = _accountMgr.getSystemAccount(); User systemUser = _accountMgr.getSystemUser(); return _itMgr.start(secStorageVm, null, systemUser, systemAcct, null); } - @Override @DB - public SecondaryStorageVmVO start(long secStorageVmId, long startEventId) throws StorageUnavailableException, InsufficientCapacityException, ConcurrentOperationException { - long eventId = saveStartedEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_SSVM_START, "Starting secondary storage Vm Id: "+secStorageVmId, startEventId); - if(startEventId == 0){ - startEventId = eventId; - } - AsyncJobExecutor asyncExecutor = BaseAsyncJobExecutor.getCurrentExecutor(); - if (asyncExecutor != null) { - AsyncJobVO job = asyncExecutor.getJob(); - - if (s_logger.isInfoEnabled()) { - s_logger.info("Start secondary storage vm " + secStorageVmId + ", update async job-" + job.getId()); - } - _asyncMgr.updateAsyncJobAttachment(job.getId(), "sec_storage_vm", secStorageVmId); - } - - SecondaryStorageVmVO secStorageVm = _secStorageVmDao.findById(secStorageVmId); - if (secStorageVm == null || secStorageVm.getRemoved() != null) { - s_logger.debug("secondary storage vm is not found: " + secStorageVmId); - saveFailedEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_SSVM_START, "secondary storage vm is not found", startEventId); - return null; - } - - if (s_logger.isTraceEnabled()) { - s_logger.trace("Starting secondary storage vm if it is not started, secondary storage vm vm id : " + secStorageVmId); - } - - for (int i = 0; i < 2; i++) { - - State state = secStorageVm.getState(); - - if (state == State.Starting /* || state == State.Migrating */) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Waiting secondary storage vm to be ready, secondary storage vm id : " - + secStorageVmId - + " secStorageVm VM state : " - + state.toString()); - } - - if (secStorageVm.getPrivateIpAddress() == null || connect(secStorageVm.getPrivateIpAddress(), _secStorageVmCmdPort) != null) { - if (secStorageVm.getPrivateIpAddress() == null) { - s_logger.warn("Retruning a secondary storage vm that is being started but private IP has not been allocated yet, secondary storage vm id : " - + secStorageVmId); - } else { - s_logger.warn("Waiting secondary storage vm to be ready timed out, secondary storage vm id : " - + secStorageVmId); - } - - // TODO, it is very tricky here, if the startup process - // takes too long and it timed out here, - // we may give back a secondary storage vm that is not fully ready for - // functioning - } - return secStorageVm; - } - - if (state == State.Running) { - if (s_logger.isTraceEnabled()) { - s_logger.trace("Secondary storage vm is already started: " - + secStorageVm.getName()); - } - saveFailedEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_SSVM_START, "Secondary storage vm is already started", startEventId); - return secStorageVm; - } - - DataCenterVO dc = _dcDao.findById(secStorageVm.getDataCenterId()); - HostPodVO pod = _podDao.findById(secStorageVm.getPodId()); - StoragePoolVO sp = _storageMgr.getStoragePoolForVm(secStorageVm.getId()); - - HashSet avoid = new HashSet(); - HostVO routingHost = (HostVO) _agentMgr.findHost(Host.Type.Routing, dc, pod, sp, _serviceOffering, _template, secStorageVm, null, avoid); - - if (routingHost == null) { - if (s_logger.isDebugEnabled()) { - String msg = "Unable to find a routing host for " + secStorageVm.toString() + " in pod " + pod.getId(); - s_logger.debug(msg); - throw new CloudRuntimeException(msg); - } - } - // to ensure atomic state transition to Starting state - if (! _itMgr.stateTransitTo(secStorageVm, VirtualMachine.Event.StartRequested, routingHost.getId())) { - if (s_logger.isDebugEnabled()) { - SecondaryStorageVmVO temp = _secStorageVmDao.findById(secStorageVmId); - s_logger.debug("Unable to start secondary storage vm " - + secStorageVm.getName() - + " because it is not in a startable state : " - + ((temp != null) ? temp.getState().toString() : "null")); - } - continue; - } - - try { - Answer answer = null; - int retry = _find_host_retry; - - // Secondary storage vm VM will be running at routing hosts as routing - // hosts have public access to outside network - do { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Trying to start secondary storage vm on host " - + routingHost.getName()); - } - - String privateIpAddress = allocPrivateIpAddress( - secStorageVm.getDataCenterId(), routingHost.getPodId(), - secStorageVm.getId(), secStorageVm.getPrivateMacAddress()); - if (privateIpAddress == null && (_IpAllocator != null && !_IpAllocator.exteralIpAddressAllocatorEnabled())) { - String msg = "Unable to allocate private ip addresses for " + secStorageVm.getName() + " in pod " + pod.getId(); - s_logger.debug(msg); - throw new CloudRuntimeException(msg); - } - - secStorageVm.setPrivateIpAddress(privateIpAddress); - String guestIpAddress = _dcDao.allocateLinkLocalIpAddress(secStorageVm.getDataCenterId(), routingHost.getPodId(), secStorageVm.getId(), null); - secStorageVm.setGuestIpAddress(guestIpAddress); - _itMgr.stateTransitTo(secStorageVm, VirtualMachine.Event.OperationRetry, routingHost.getId()); - secStorageVm = _secStorageVmDao.findById(secStorageVm.getId()); - - List vols = _storageMgr.prepare(secStorageVm, routingHost); - if (vols == null || vols.size() == 0) { - String msg = "Unable to prepare storage for " + secStorageVm.getName() + " in pod " + pod.getId(); - s_logger.debug(msg); - throw new CloudRuntimeException(msg); - } - VolumeVO vol = vols.get(0); - - // Determine the VM's OS description - String guestOSDescription; - GuestOSVO guestOS = _guestOSDao.findById(secStorageVm.getGuestOSId()); - if (guestOS == null) { - String msg = "Could not find guest OS description for OSId " - + secStorageVm.getGuestOSId() + " for vm: " + secStorageVm.getName(); - s_logger.debug(msg); - throw new CloudRuntimeException(msg); - } else { - guestOSDescription = guestOS.getDisplayName(); - } - - // carry the secondary storage vm port info over so that we don't - // need to configure agent on this - StartSecStorageVmCommand cmdStart = new StartSecStorageVmCommand(_networkRate, - _multicastRate, _secStorageVmCmdPort, secStorageVm, - secStorageVm.getName(), "", vols, _mgmt_host, _mgmt_port, _useSSlCopy, guestOSDescription); - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Sending start command for secondary storage vm " - + secStorageVm.getName() - + " to " - + routingHost.getName()); - } - - try { - answer = _agentMgr.send(routingHost.getId(), cmdStart); - s_logger.debug("StartSecStorageVmCommand Answer: " + (answer != null ? answer : "null")); - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Received answer on starting secondary storage vm " - + secStorageVm.getName() - + " on " - + routingHost.getName()); - } - - if ( answer != null && answer.getResult() ) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Secondary storage vm " + secStorageVm.getName() - + " started on " + routingHost.getName()); - } - - if (answer instanceof StartSecStorageVmAnswer){ - StartSecStorageVmAnswer rAnswer = (StartSecStorageVmAnswer)answer; - if (rAnswer.getPrivateIpAddress() != null) { - secStorageVm.setPrivateIpAddress(rAnswer.getPrivateIpAddress()); - } - if (rAnswer.getPrivateMacAddress() != null) { - secStorageVm.setPrivateMacAddress(rAnswer.getPrivateMacAddress()); - } - final EventVO event = new EventVO(); - event.setUserId(User.UID_SYSTEM); - event.setAccountId(Account.ACCOUNT_ID_SYSTEM); - event.setType(EventTypes.EVENT_SSVM_START); - event.setLevel(EventVO.LEVEL_INFO); - event.setStartId(startEventId); - event.setDescription("Secondary Storage VM started - " + secStorageVm.getName()); - _eventDao.persist(event); - } - break; - } - s_logger.debug("Unable to start " + secStorageVm.toString() + " on host " + routingHost.toString() + " due to " + answer.getDetails()); - } catch (OperationTimedoutException e) { - if (e.isActive()) { - s_logger.debug("Unable to start vm " + secStorageVm.getName() + " due to operation timed out and it is active so scheduling a restart."); - saveFailedEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_SSVM_START, "Unable to start vm due to operation timed out", startEventId); - _haMgr.scheduleRestart(secStorageVm, true); - return null; - } - } catch (AgentUnavailableException e) { - s_logger.debug("Agent " + routingHost.toString() + " was unavailable to start VM " + secStorageVm.getName()); - } - - avoid.add(routingHost); - secStorageVm.setPrivateIpAddress(null); - freePrivateIpAddress(privateIpAddress, secStorageVm - .getDataCenterId(), secStorageVm.getId()); - secStorageVm.setGuestIpAddress(null); - _dcDao.releaseLinkLocalIpAddress(guestIpAddress, secStorageVm.getDataCenterId(), secStorageVm.getId()); - _storageMgr.unshare(secStorageVm, vols, routingHost); - } while (--retry > 0 && (routingHost = (HostVO) _agentMgr.findHost( - Host.Type.Routing, dc, pod, sp, _serviceOffering, _template, - secStorageVm, null, avoid)) != null); - if (routingHost == null || retry <= 0) { - - SubscriptionMgr.getInstance().notifySubscribers( - ALERT_SUBJECT, this, - new SecStorageVmAlertEventArgs( - SecStorageVmAlertEventArgs.SSVM_START_FAILURE, - secStorageVm.getDataCenterId(), secStorageVm.getId(), secStorageVm, "Unable to find a routing host to run") - ); - - final EventVO event = new EventVO(); - event.setUserId(User.UID_SYSTEM); - event.setAccountId(Account.ACCOUNT_ID_SYSTEM); - event.setType(EventTypes.EVENT_SSVM_START); - event.setLevel(EventVO.LEVEL_ERROR); - event.setStartId(startEventId); - event.setDescription("Starting secondary storage vm failed due to unable to find a host - " + secStorageVm.getName()); - _eventDao.persist(event); - throw new ExecutionException( - "Couldn't find a routingHost to run secondary storage vm"); - } - - _itMgr.stateTransitTo(secStorageVm, VirtualMachine.Event.OperationSucceeded, routingHost.getId()); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Secondary storage vm is now started, vm id : " + secStorageVm.getId()); - } - - SubscriptionMgr.getInstance().notifySubscribers( - ALERT_SUBJECT, this, - new SecStorageVmAlertEventArgs( - SecStorageVmAlertEventArgs.SSVM_UP, - secStorageVm.getDataCenterId(), secStorageVm.getId(), secStorageVm, null) - ); - - return secStorageVm; - } catch (Throwable thr) { - s_logger.warn("Unexpected exception: ", thr); - - SubscriptionMgr.getInstance().notifySubscribers( - ALERT_SUBJECT, this, - new SecStorageVmAlertEventArgs( - SecStorageVmAlertEventArgs.SSVM_START_FAILURE, - secStorageVm.getDataCenterId(), secStorageVm.getId(), secStorageVm, "Unexpected exception: " + thr.getMessage()) - ); - - final EventVO event = new EventVO(); - event.setUserId(User.UID_SYSTEM); - event.setAccountId(Account.ACCOUNT_ID_SYSTEM); - event.setType(EventTypes.EVENT_SSVM_START); - event.setLevel(EventVO.LEVEL_ERROR); - event.setStartId(startEventId); - event.setDescription("Starting secondary storage vm failed due to unhandled exception - " + secStorageVm.getName()); - _eventDao.persist(event); - - Transaction txn = Transaction.currentTxn(); - try { - txn.start(); - String privateIpAddress = secStorageVm.getPrivateIpAddress(); - if (privateIpAddress != null) { - secStorageVm.setPrivateIpAddress(null); - freePrivateIpAddress(privateIpAddress, secStorageVm.getDataCenterId(), secStorageVm.getId()); - } - _itMgr.stateTransitTo(secStorageVm, VirtualMachine.Event.OperationFailed, null); - txn.commit(); - } catch (Exception e) { - s_logger.error("Caught exception during error recovery"); - } - - if (thr instanceof StorageUnavailableException) { - throw (StorageUnavailableException) thr; - } else if (thr instanceof ConcurrentOperationException) { - throw (ConcurrentOperationException) thr; - } else if (thr instanceof ExecutionException) { - s_logger.error("Error while starting secondary storage vm due to " + thr.getMessage()); - } else { - s_logger.error("Error while starting secondary storage vm ", thr); - } - return null; - } - } - - s_logger.warn("Starting secondary storage vm encounters non-startable situation"); - return null; - } @Override public boolean generateFirewallConfiguration(Long hostId){ @@ -694,7 +369,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V s_logger.debug("Assign secondary storage vm from a newly started instance for request from data center : " + dataCenterId); } - Map context = _useNewNetworking ? createSecStorageVmInstance2(dataCenterId) : createSecStorageVmInstance(dataCenterId); + Map context = createSecStorageVmInstance(dataCenterId); long secStorageVmId = (Long) context.get("secStorageVmId"); if (secStorageVmId == 0) { @@ -735,7 +410,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V return null; } - protected Map createSecStorageVmInstance2(long dataCenterId) { + protected Map createSecStorageVmInstance(long dataCenterId) { long startEventId = saveStartedEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_SSVM_CREATE, "Creating secondary storage Vm in zone : "+dataCenterId, 0); HostVO secHost = _hostDao.findSecondaryStorageHost(dataCenterId); if (secHost == null) { @@ -786,112 +461,6 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V return context; } - @DB - protected Map createSecStorageVmInstance(long dataCenterId) { - long startEventId = saveStartedEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_SSVM_CREATE, "Creating secondary storage Vm in zone : "+dataCenterId, 0); - Map context = new HashMap(); - String publicIpAddress = null; - HostVO secHost = _hostDao.findSecondaryStorageHost(dataCenterId); - if (secHost == null) { - String msg = "No secondary storage available in zone " + dataCenterId + ", cannot create secondary storage vm"; - s_logger.warn(msg); - saveFailedEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_SSVM_CREATE, msg, startEventId); - throw new CloudRuntimeException(msg); - } - boolean success = false; - Transaction txn = Transaction.currentTxn(); - try { - DataCenterVO dc = _dcDao.findById(dataCenterId); - assert (dc != null); - context.put("dc", dc); - - // this will basically allocate the pod based on data center id as - // we use system user id here - Set avoidPods = new HashSet(); - Pair pod = null; - networkInfo publicIpAndVlan = null; - // About MAC address allocation - // MAC address used by User VM is inherited from DomR MAC address, - // with the least 16 bits overrided. to avoid - // potential conflicts, domP will mask bit 31 - // - String[] macAddresses = _dcDao.getNextAvailableMacAddressPair( - dataCenterId, (1L << 31)); - String privateMacAddress = macAddresses[0]; - String publicMacAddress = macAddresses[1]; - macAddresses = _dcDao.getNextAvailableMacAddressPair( - dataCenterId, (1L << 31)); - String guestMacAddress = macAddresses[0]; - while ((pod = _agentMgr.findPod(_template, _serviceOffering, dc, Account.ACCOUNT_ID_SYSTEM, avoidPods)) != null){ - publicIpAndVlan = allocPublicIpAddress(dataCenterId, pod.first().getId(), publicMacAddress); - if (publicIpAndVlan == null) { - s_logger.warn("Unable to allocate public IP address for secondary storage vm in data center : " + dataCenterId + ", pod="+ pod.first().getId()); - avoidPods.add(pod.first().getId()); - } else { - break; - } - } - - if (pod == null || publicIpAndVlan == null) { - String msg = "Unable to allocate pod for secondary storage vm in data center : " + dataCenterId; - s_logger.warn(msg); - throw new CloudRuntimeException(msg); - } - - long id = _secStorageVmDao.getNextInSequence(Long.class, "id"); - - context.put("publicIpAddress", publicIpAndVlan._ipAddr); - context.put("pod", pod); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Pod allocated " + pod.first().getName()); - } - - String cidrNetmask = NetUtils.getCidrNetmask(pod.first().getCidrSize()); - - // Find the VLAN ID, VLAN gateway, and VLAN netmask for publicIpAddress - publicIpAddress = publicIpAndVlan._ipAddr; - - String vlanGateway = publicIpAndVlan._gateWay; - String vlanNetmask = publicIpAndVlan._netMask; - - Account systemAcct = _accountMgr.getSystemAccount(); - txn.start(); - SecondaryStorageVmVO secStorageVm; - String name = VirtualMachineName.getSystemVmName(id, _instance, "s").intern(); - - secStorageVm = new SecondaryStorageVmVO(id, _serviceOffering.getId(), name, guestMacAddress, null, NetUtils.getLinkLocalNetMask(), - privateMacAddress, null, cidrNetmask, _template.getId(), _template.getGuestOSId(), - publicMacAddress, publicIpAddress, vlanNetmask, publicIpAndVlan._vlanDbId, publicIpAndVlan._vlanid, - pod.first().getId(), dataCenterId, systemAcct.getDomainId(), systemAcct.getId(), vlanGateway, null, - dc.getInternalDns1(), dc.getInternalDns2(), _domain, _secStorageVmRamSize, secHost.getGuid(), secHost.getStorageUrl()); - - secStorageVm.setLastHostId(pod.second()); - secStorageVm = _secStorageVmDao.persist(secStorageVm); - long secStorageVmId = secStorageVm.getId(); - final EventVO event = new EventVO(); - event.setUserId(User.UID_SYSTEM); - event.setAccountId(Account.ACCOUNT_ID_SYSTEM); - event.setType(EventTypes.EVENT_SSVM_CREATE); - event.setLevel(EventVO.LEVEL_INFO); - event.setStartId(startEventId); - event.setDescription("New Secondary Storage VM created - " + secStorageVm.getName()); - _eventDao.persist(event); - txn.commit(); - success = true; - context.put("secStorageVmId", secStorageVmId); - return context; - } catch (Throwable e) { - s_logger.error("Unexpected exception : ", e); - - context.put("secStorageVmId", (long) 0); - return context; - } finally { - if(!success){ - saveFailedEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_SSVM_CREATE, "Failed to create secondary storage Vm", startEventId); - } - } - } - protected SecondaryStorageVmVO allocSecStorageVmStorage(long dataCenterId, long secStorageVmId) { SecondaryStorageVmVO secStorageVm = _secStorageVmDao.findById(secStorageVmId); assert (secStorageVm != null); @@ -920,31 +489,6 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V } } - private networkInfo allocPublicIpAddress(long dcId, long podId, String macAddr) { - if (_IpAllocator != null && _IpAllocator.exteralIpAddressAllocatorEnabled()) { - IpAddrAllocator.IpAddr ip = _IpAllocator.getPublicIpAddress(macAddr, dcId, podId); - networkInfo net = new networkInfo(ip.ipaddr, ip.netMask, ip.gateway, null, "untagged"); - return net; - } - -//FIXME am I even needed any more? Pair ipAndVlan = _vlanDao.assignIpAddress(dcId, Account.ACCOUNT_ID_SYSTEM, DomainVO.ROOT_DOMAIN, VlanType.VirtualNetwork, true); -// -// if (ipAndVlan == null) { -// s_logger.debug("Unable to get public ip address (type=Virtual) for secondary storage vm for data center : " + dcId); -// ipAndVlan = _vlanDao.assignPodDirectAttachIpAddress(dcId, podId, Account.ACCOUNT_ID_SYSTEM, DomainVO.ROOT_DOMAIN); -// if (ipAndVlan == null) { -// s_logger.debug("Unable to get public ip address (type=DirectAttach) for secondary storage vm for data center : " + dcId); -// } -// -// } -// if (ipAndVlan != null) { -// VlanVO vlan = ipAndVlan.second(); -// networkInfo net = new networkInfo(ipAndVlan.first(), vlan.getVlanNetmask(), vlan.getVlanGateway(), vlan.getId(), vlan.getVlanId()); -// return net; -// } - return null; - } - private void freePublicIpAddress(String ipAddress, long dcId, long podId) { if (_IpAllocator != null && _IpAllocator.exteralIpAddressAllocatorEnabled()) { _IpAllocator.releasePublicIpAddress(ipAddress, dcId, podId); @@ -953,22 +497,6 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V } } - private String allocPrivateIpAddress(Long dcId, Long podId, Long proxyId, String macAddr) { - if (_IpAllocator != null && _IpAllocator.exteralIpAddressAllocatorEnabled()) { - return _IpAllocator.getPrivateIpAddress(macAddr, dcId, podId).ipaddr; - } else { - return _dcDao.allocatePrivateIpAddress(dcId, podId, proxyId, null).first(); - } - } - - private void freePrivateIpAddress(String ipAddress, Long dcId, Long podId) { - if (_IpAllocator != null && _IpAllocator.exteralIpAddressAllocatorEnabled()) { - _IpAllocator.releasePrivateIpAddress(ipAddress, dcId, podId); - } else { - _dcDao.releasePrivateIpAddress(ipAddress, dcId, podId); - } - } - private SecondaryStorageVmAllocator getCurrentAllocator() { // for now, only one adapter is supported @@ -1008,7 +536,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V try { if (secStorageVmLock.lock(ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_SYNC)) { try { - readysecStorageVm = start2(readysecStorageVm.getId(), 0); + readysecStorageVm = start(readysecStorageVm.getId(), 0); } finally { secStorageVmLock.unlock(); } @@ -1360,10 +888,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V _allowedInternalSites = configDao.getValue("secstorage.allowed.internal.sites"); - String value = configs.get("start.retry"); - _find_host_retry = NumbersUtil.parseInt(value, DEFAULT_FIND_HOST_RETRY_COUNT); - - value = configs.get("secstorage.vm.cmd.port"); + String value = configs.get("secstorage.vm.cmd.port"); _secStorageVmCmdPort = NumbersUtil.parseInt(value, 3922); @@ -1390,145 +915,18 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V value = agentMgrConfigs.get("port"); _mgmt_port = NumbersUtil.parseInt(value, 8250); - _secStorageVmDao = locator.getDao(SecondaryStorageVmDao.class); - if (_secStorageVmDao == null) { - throw new ConfigurationException("Unable to get " + SecondaryStorageVmDao.class.getName()); - } - - _ssVmAllocators = locator.getAdapters(SecondaryStorageVmAllocator.class); - if (_ssVmAllocators == null || !_ssVmAllocators.isSet()) { - throw new ConfigurationException("Unable to get secStorageVm allocators"); - } - - _dcDao = locator.getDao(DataCenterDao.class); - if (_dcDao == null) { - throw new ConfigurationException("Unable to get " + DataCenterDao.class.getName()); - } - - _templateDao = locator.getDao(VMTemplateDao.class); - if (_templateDao == null) { - throw new ConfigurationException("Unable to get " + VMTemplateDao.class.getName()); - } - - _ipAddressDao = locator.getDao(IPAddressDao.class); - if (_ipAddressDao == null) { - throw new ConfigurationException("Unable to get " + IPAddressDao.class.getName()); - } - - _volsDao = locator.getDao(VolumeDao.class); - if (_volsDao == null) { - throw new ConfigurationException("Unable to get " + VolumeDao.class.getName()); - } - - _podDao = locator.getDao(HostPodDao.class); - if (_podDao == null) { - throw new ConfigurationException("Unable to get " + HostPodDao.class.getName()); - } - - _hostDao = locator.getDao(HostDao.class); - if (_hostDao == null) { - throw new ConfigurationException("Unable to get " + HostDao.class.getName()); - } - - _storagePoolDao = locator.getDao(StoragePoolDao.class); - if (_storagePoolDao == null) { - throw new ConfigurationException("Unable to find " + StoragePoolDao.class); - } - - _storagePoolHostDao = locator.getDao(StoragePoolHostDao.class); - if (_storagePoolHostDao == null) { - throw new ConfigurationException("Unable to find " + StoragePoolHostDao.class); - } - - _vmTemplateHostDao = locator.getDao(VMTemplateHostDao.class); - if (_vmTemplateHostDao == null) { - throw new ConfigurationException("Unable to get " + VMTemplateHostDao.class.getName()); - } - - _userVmDao = locator.getDao(UserVmDao.class); - if (_userVmDao == null) { - throw new ConfigurationException("Unable to get " + UserVmDao.class.getName()); - } - - _instanceDao = locator.getDao(VMInstanceDao.class); - if (_instanceDao == null) { - throw new ConfigurationException("Unable to get " + VMInstanceDao.class.getName()); - } - - _capacityDao = locator.getDao(CapacityDao.class); - if (_capacityDao == null) { - throw new ConfigurationException("Unable to get " + CapacityDao.class.getName()); - } - - _haDao = locator.getDao(HighAvailabilityDao.class); - if (_haDao == null) { - throw new ConfigurationException("Unable to get " + HighAvailabilityDao.class.getName()); - } - - _accountDao = locator.getDao(AccountDao.class); - if (_accountDao == null) { - throw new ConfigurationException("Unable to get " + AccountDao.class.getName()); - } - - _vlanDao = locator.getDao(VlanDao.class); - if (_vlanDao == null) { - throw new ConfigurationException("Unable to get " + VlanDao.class.getName()); - } - - _agentMgr = locator.getManager(AgentManager.class); - if (_agentMgr == null) { - throw new ConfigurationException("Unable to get " + AgentManager.class.getName()); - } - - _networkMgr = locator.getManager(NetworkManager.class); - if (_networkMgr == null) { - throw new ConfigurationException("Unable to get " + NetworkManager.class.getName()); - } - _listener = new SecondaryStorageListener(this); _agentMgr.registerForHostEvents(_listener, true, true, false); - _storageMgr = locator.getManager(StorageManager.class); - if (_storageMgr == null) { - throw new ConfigurationException("Unable to get " + StorageManager.class.getName()); - } - - _haMgr = locator.getManager(HighAvailabilityManager.class); - if (_haMgr == null) { - throw new ConfigurationException("Unable to get " + HighAvailabilityManager.class.getName()); - } - - _clusterMgr = locator.getManager(ClusterManager.class); - if (_clusterMgr == null) { - throw new ConfigurationException("Unable to get " + ClusterManager.class.getName()); - } - - _asyncMgr = locator.getManager(AsyncJobManager.class); - if (_asyncMgr == null) { - throw new ConfigurationException("Unable to get " + AsyncJobManager.class.getName()); - } - HighAvailabilityManager haMgr = locator.getManager(HighAvailabilityManager.class); if (haMgr != null) { haMgr.registerHandler(VirtualMachine.Type.SecondaryStorageVm, this); } - _itMgr.registerGuru(VirtualMachine.Type.SecondaryStorageVm, this); + _itMgr.registerGuru(VirtualMachine.Type.SecondaryStorageVm, this); - _useNewNetworking = Boolean.parseBoolean(configs.get("use.new.networking")); - - Adapters ipAllocators = locator.getAdapters(IpAddrAllocator.class); - if (ipAllocators != null && ipAllocators.isSet()) { - Enumeration it = ipAllocators.enumeration(); - _IpAllocator = it.nextElement(); - } - - boolean useLocalStorage = Boolean.parseBoolean(configs.get(Config.SystemVMUseLocalStorage.key())); - String networkRateStr = _configDao.getValue("network.throttling.rate"); - String multicastRateStr = _configDao.getValue("multicast.throttling.rate"); - _networkRate = ((networkRateStr == null) ? 200 : Integer.parseInt(networkRateStr)); - _multicastRate = ((multicastRateStr == null) ? 10 : Integer.parseInt(multicastRateStr)); + boolean useLocalStorage = Boolean.parseBoolean(configs.get(Config.SystemVMUseLocalStorage.key())); _serviceOffering = new ServiceOfferingVO("System Offering For Secondary Storage VM", 1, _secStorageVmRamSize, 0, 0, 0, false, null, NetworkOffering.GuestIpType.Virtual, useLocalStorage, true, null, true); _serviceOffering.setUniqueName("Cloud.com-SecondaryStorage"); _serviceOffering = _offeringDao.persistSystemServiceOffering(_serviceOffering); @@ -1582,7 +980,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V String privateIpAddress = secStorageVm.getPrivateIpAddress(); if (privateIpAddress != null) { secStorageVm.setPrivateIpAddress(null); - freePrivateIpAddress(privateIpAddress, secStorageVm.getDataCenterId(), secStorageVm.getId()); + // FIXME: freePrivateIpAddress(privateIpAddress, secStorageVm.getDataCenterId(), secStorageVm.getId()); } String guestIpAddress = secStorageVm.getGuestIpAddress(); if (guestIpAddress != null) { diff --git a/server/src/com/cloud/vm/UserVmManager.java b/server/src/com/cloud/vm/UserVmManager.java index 19f529cf2be..2536c99f84e 100644 --- a/server/src/com/cloud/vm/UserVmManager.java +++ b/server/src/com/cloud/vm/UserVmManager.java @@ -21,23 +21,7 @@ import java.util.HashMap; import java.util.List; import com.cloud.agent.api.VmStatsEntry; -import com.cloud.async.executor.OperationResponse; -import com.cloud.async.executor.StartVMExecutor; -import com.cloud.async.executor.StopVMExecutor; -import com.cloud.async.executor.VMOperationParam; -import com.cloud.dc.DataCenterVO; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientStorageCapacityException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.StorageUnavailableException; -import com.cloud.network.security.NetworkGroupVO; -import com.cloud.service.ServiceOfferingVO; -import com.cloud.storage.DiskOfferingVO; -import com.cloud.storage.StoragePoolVO; -import com.cloud.storage.VMTemplateVO; -import com.cloud.user.AccountVO; import com.cloud.uservm.UserVm; -import com.cloud.utils.exception.ExecutionException; import com.cloud.vm.VirtualMachine.Event; /** @@ -60,24 +44,7 @@ public interface UserVmManager extends VirtualMachineGuru{ */ UserVmVO getVirtualMachine(long vmId); - /** - * creates a virtual machine. - * @param userId the id of the user performing the action - * @param account account creating the virtual machine. - * @param dc data center to deploy it in. - * @param offering the service offering that comes with it. - * @param template template to base the virtual machine on. Can either represent an ISO, or a normal template. - * @param diskOffering the disk offering for the root disk (deploying from ISO) or the data disk (deploying from a normal template) - * @return UserVmVO if created; null if not. - */ - UserVmVO createVirtualMachine(Long vmId, long userId, AccountVO account, DataCenterVO dc, ServiceOfferingVO offering, VMTemplateVO template, DiskOfferingVO diskOffering, String displayName, String userData, List avoids, long startEventId, long size) throws InsufficientStorageCapacityException, ResourceAllocationException; - - UserVmVO createDirectlyAttachedVM(Long vmId, long userId, AccountVO account, DataCenterVO dc, ServiceOfferingVO offering, VMTemplateVO template, DiskOfferingVO diskOffering, String displayName, String userData, List a, List networkGroupVO, long startEventId, long size) throws ResourceAllocationException; - - UserVmVO createDirectlyAttachedVMExternal(Long vmId, long userId, AccountVO account, DataCenterVO dc, ServiceOfferingVO offering, VMTemplateVO template, DiskOfferingVO diskOffering, String displayName, String userData, List a, List networkGroupVO, long startEventId, long size) throws ResourceAllocationException; - boolean destroyVirtualMachine(long userId, long vmId); -// OperationResponse executeDestroyVM(DestroyVMExecutor executor, VMOperationParam param); /** @@ -89,30 +56,6 @@ public interface UserVmManager extends VirtualMachineGuru{ */ boolean attachISOToVM(long vmId, long isoId, boolean attach); - /** - * Start the virtual machine. - * @param userId the id of the user performing the action - * @param vmId the id of the virtual machine. - * @param isoPath path of the ISO from which the VM should be booted (optional) - * @throws ExecutionException - * @throws StorageUnavailableException - * @throws ConcurrentOperationException - */ - UserVmVO startVirtualMachine(long userId, long vmId, String isoPath, long startEventId) throws ExecutionException, StorageUnavailableException, ConcurrentOperationException; - boolean executeStartVM(StartVMExecutor executor, VMOperationParam param); - - /** - * Start the virtual machine. - * @param userId the id of the user performing the action - * @param vmId the id of the virtual machine. - * @param password the password that the user wants to use to access the virtual machine - * @param isoPath path of the ISO from which the VM should be booted (optional) - * @throws ExecutionException - * @throws StorageUnavailableException - * @throws ConcurrentOperationException - */ - UserVmVO startVirtualMachine(long userId, long vmId, String password, String isoPath, long startEventId) throws ExecutionException, StorageUnavailableException, ConcurrentOperationException; - /** * Stops the virtual machine * @param userId the id of the user performing the action @@ -153,8 +96,4 @@ public interface UserVmManager extends VirtualMachineGuru{ InstanceGroupVO getGroupForVm(long vmId); void removeInstanceFromGroup(long vmId); - - @Deprecated - OperationResponse executeStopVM(StopVMExecutor executor, VMOperationParam param); - } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 9285a14fe5f..7ac5cdfdf4c 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -56,7 +56,6 @@ import com.cloud.agent.api.PrepareForMigrationCommand; import com.cloud.agent.api.RebootAnswer; import com.cloud.agent.api.RebootCommand; import com.cloud.agent.api.SnapshotCommand; -import com.cloud.agent.api.StartCommand; import com.cloud.agent.api.StopCommand; import com.cloud.agent.api.VmStatsEntry; import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; @@ -82,15 +81,8 @@ import com.cloud.api.commands.UpdateVMCmd; import com.cloud.api.commands.UpgradeVMCmd; import com.cloud.async.AsyncJobExecutor; import com.cloud.async.AsyncJobManager; -import com.cloud.async.AsyncJobResult; import com.cloud.async.AsyncJobVO; import com.cloud.async.BaseAsyncJobExecutor; -import com.cloud.async.executor.OperationResponse; -import com.cloud.async.executor.StartVMExecutor; -import com.cloud.async.executor.StopVMExecutor; -import com.cloud.async.executor.VMExecutorHelper; -import com.cloud.async.executor.VMOperationListener; -import com.cloud.async.executor.VMOperationParam; import com.cloud.capacity.dao.CapacityDao; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.ResourceCount.ResourceType; @@ -99,8 +91,6 @@ import com.cloud.configuration.dao.ResourceLimitDao; import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; -import com.cloud.dc.Vlan.VlanType; -import com.cloud.dc.VlanVO; import com.cloud.dc.dao.AccountVlanMapDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.HostPodDao; @@ -141,10 +131,8 @@ import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.LoadBalancerVMMapDao; import com.cloud.network.dao.NetworkDao; import com.cloud.network.router.DomainRouterManager; -import com.cloud.network.router.VirtualRouter.Role; import com.cloud.network.rules.RulesManager; import com.cloud.network.security.NetworkGroupManager; -import com.cloud.network.security.NetworkGroupVO; import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; import com.cloud.offerings.dao.NetworkOfferingDao; @@ -275,7 +263,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager String _instance; String _zone; String _defaultNetworkDomain; - boolean _useNewNetworking = false; Random _rand = new Random(System.currentTimeMillis()); @@ -797,421 +784,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager return (a != null); } - @Override - public UserVmVO startVirtualMachine(long userId, long vmId, String isoPath, long startEventId) throws ExecutionException, StorageUnavailableException, ConcurrentOperationException { - return startVirtualMachine(userId, vmId, null, isoPath, startEventId); - } - - @Override - public boolean executeStartVM(StartVMExecutor executor, VMOperationParam param) { - // TODO following implementation only do asynchronized operation at API level - try { - UserVmVO vm = start(param.getUserId(), param.getVmId(), null, param.getIsoPath(), param.getEventId()); - if(vm != null) { - executor.getAsyncJobMgr().completeAsyncJob(executor.getJob().getId(), - AsyncJobResult.STATUS_SUCCEEDED, 0, VMExecutorHelper.composeResultObject( - executor.getAsyncJobMgr().getExecutorContext().getManagementServer(), vm, null)); - } else { - executor.getAsyncJobMgr().completeAsyncJob(executor.getJob().getId(), - AsyncJobResult.STATUS_FAILED, BaseCmd.INTERNAL_ERROR, "Unable to start vm"); - } - } catch (StorageUnavailableException e) { - s_logger.debug("Unable to start vm because storage is unavailable: " + e.getMessage()); - - executor.getAsyncJobMgr().completeAsyncJob(executor.getJob().getId(), - AsyncJobResult.STATUS_FAILED, BaseCmd.RESOURCE_UNAVAILABLE_ERROR, "Unable to start vm because storage is unavailable"); - } catch (ConcurrentOperationException e) { - s_logger.debug(e.getMessage()); - - executor.getAsyncJobMgr().completeAsyncJob(executor.getJob().getId(), - AsyncJobResult.STATUS_FAILED, BaseCmd.INTERNAL_ERROR, e.getMessage()); - } catch (ExecutionException e) { - s_logger.debug(e.getMessage()); - - executor.getAsyncJobMgr().completeAsyncJob(executor.getJob().getId(), - AsyncJobResult.STATUS_FAILED, BaseCmd.INTERNAL_ERROR, e.getMessage()); - } - return true; - } - - @Override - public UserVmVO startVirtualMachine(long userId, long vmId, String password, String isoPath, long startEventId) throws ExecutionException, StorageUnavailableException, ConcurrentOperationException { - try { - return start(userId, vmId, password, isoPath, startEventId); - } catch (StorageUnavailableException e) { - s_logger.debug("Unable to start vm because storage is unavailable: " + e.getMessage()); - throw e; - } catch (ConcurrentOperationException e) { - s_logger.debug(e.getMessage()); - throw e; - } catch (ExecutionException e) { - // TODO Auto-generated catch block - s_logger.debug(e.getMessage()); - throw e; - } - } - - @DB - protected UserVmVO start(long userId, long vmId, String password, String isoPath, long startEventId) throws StorageUnavailableException, ConcurrentOperationException, ExecutionException { - - UserVmVO vm = _vmDao.findById(vmId); - if (vm == null || vm.getRemoved() != null) { - s_logger.debug("Unable to find " + vmId); - return null; - } - - checkIfPoolAvailable(vmId);//throws StorageUnavailableException if pool is not UP - - EventVO event = new EventVO(); - event.setType(EventTypes.EVENT_VM_START); - event.setUserId(userId); - event.setAccountId(vm.getAccountId()); - event.setState(Event.State.Started); - event.setDescription("Starting Vm with Id: "+vmId); - event.setStartId(startEventId); - event = _eventDao.persist(event); - - //if there was no schedule event before, set start event as startEventId - if(startEventId == 0 && event != null){ - startEventId = event.getId(); - } - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Starting VM: " + vmId); - } - - State state = vm.getState(); - if (state == State.Running) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Starting an already started VM: " + vm.getId() + " - " + vm.getName() + "; state = " + vm.getState().toString()); - } - return vm; - } - String eventParams = "id=" + vm.getId() + "\nvmName=" + vm.getName() + "\nsoId=" + vm.getServiceOfferingId() + "\ntId=" + vm.getTemplateId() + "\ndcId=" + vm.getDataCenterId(); - event = new EventVO(); - event.setType(EventTypes.EVENT_VM_START); - event.setUserId(userId); - event.setAccountId(vm.getAccountId()); - event.setParameters(eventParams); - event.setState(Event.State.Completed); - event.setStartId(startEventId); - if (state.isTransitional()) { - String description = "Concurrent operations on the vm " + vm.getId() + " - " + vm.getName() + "; state = " + state.toString(); - event.setDescription(description); - event.setLevel(EventVO.LEVEL_ERROR); - _eventDao.persist(event); - throw new ConcurrentOperationException(description); - } - - DataCenterVO dc = _dcDao.findById(vm.getDataCenterId()); - HostPodVO pod = _podDao.findById(vm.getPodId()); - StoragePoolVO sp = _storageMgr.getStoragePoolForVm(vm.getId()); - - VMTemplateVO template = _templateDao.findById(vm.getTemplateId()); - ServiceOfferingVO offering = _offeringDao.findById(vm.getServiceOfferingId()); - - // If an ISO path is passed in, boot from that ISO - // Else, check if the VM already has an ISO attached to it. If so, start the VM with that ISO inserted, but don't boot from it. - boolean bootFromISO = false; - if (isoPath != null) { - bootFromISO = true; - } else { - Long isoId = vm.getIsoId(); - if (isoId != null) { - isoPath = _storageMgr.getAbsoluteIsoPath(isoId, vm.getDataCenterId()).first(); - } - } - - // Determine the VM's OS description - String guestOSDescription; - GuestOSVO guestOS = _guestOSDao.findById(vm.getGuestOSId()); - if (guestOS == null) { - String msg = "Could not find guest OS description for OSId " - + vm.getGuestOSId() + " for vm: " + vm.getName(); - s_logger.debug(msg); - throw new CloudRuntimeException(msg); - } else { - guestOSDescription = guestOS.getDisplayName(); - } - - HashSet avoid = new HashSet(); - - HostVO host = null; - if(vm.getLastHostId() != null) { - host = _hostDao.findById(vm.getLastHostId()); - if(host == null || host.getStatus() != com.cloud.host.Status.Up || host.getHypervisorType() != HypervisorType.VmWare) { - host = null; - } - } - - if(host == null) { - host = (HostVO) _agentMgr.findHost(Host.Type.Routing, dc, pod, sp, offering, template, vm, null, avoid); - } - - if (host == null) { - String description = "Unable to find any host for " + vm.toString(); - s_logger.error(description); - event.setDescription(description); - event.setLevel(EventVO.LEVEL_ERROR); - _eventDao.persist(event); - return null; - } - - if (!_itMgr.stateTransitTo(vm, VirtualMachine.Event.StartRequested, host.getId())) { - String description = "Unable to start VM " + vm.toString() + " because the state is not correct."; - s_logger.error(description); - event.setDescription(description); - event.setLevel(EventVO.LEVEL_ERROR); - _eventDao.persist(event); - return null; - } - - boolean started = false; - - Transaction txn = Transaction.currentTxn(); - try { - - String vnet = null; - DomainRouterVO router = null; - if (vm.getDomainRouterId() != null) { - router = _routerMgr.addVirtualMachineToGuestNetwork(vm, password, startEventId); - if (router == null) { - s_logger.error("Unable to add vm " + vm.getId() + " - " + vm.getName()); - _itMgr.stateTransitTo(vm, VirtualMachine.Event.OperationFailed, null); - if(!vm.getName().equals(vm.getDisplayName())) { - event.setDescription("Unable to start VM: " + vm.getName()+"("+vm.getDisplayName()+")" + "; Unable to add VM to guest network"); - } else { - event.setDescription("Unable to start VM: " + vm.getName() + "; Unable to add VM to guest network"); - } - - event.setLevel(EventVO.LEVEL_ERROR); - _eventDao.persist(event); - return null; - } - - vnet = router.getVnet(); - s_logger.debug("VM: " + vm.getName() + " discovered vnet: " + vnet + " from router: " + router.getName()); - - if(NetworkManager.USE_POD_VLAN){ - if(vm.getPodId() != router.getPodId()){ - //VM is in a different Pod - if(router.getZoneVlan() == null){ - //Create Zone Vlan if not created already - vnet = _routerMgr.createZoneVlan(router); - if (vnet == null) { - s_logger.error("Vlan creation failed. Unable to add vm " + vm.getId() + " - " + vm.getName()); - return null; - } - } else { - //Use existing zoneVlan - vnet = router.getZoneVlan(); - } - } - } - } - - boolean mirroredVols = vm.isMirroredVols(); - - List rootVols = _volsDao.findByInstanceAndType(vm.getId(), VolumeType.ROOT); - assert rootVols.size() == 1 : "How can we get " + rootVols.size() + " root volume for " + vm.getId(); - - String [] storageIps = new String[2]; - VolumeVO vol = rootVols.get(0); - - List vols = _volsDao.findCreatedByInstance(vm.getId()); - List vos = new ArrayList(); - /*compete with take snapshot*/ - for (VolumeVO userVmVol : vols) { - vos.add(_volsDao.lockRow(userVmVol.getId(), true)); - } - - Answer answer = null; - int retry = _retry; - - do { - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Trying to start vm " + vm.getName() + " on host " + host.toString()); - } - txn.start(); - - - if (vm.getDomainRouterId() != null) { - vm.setVnet(vnet); - //vm.setInstanceName(VirtualMachineName.attachVnet(vm.getName(), vm.getVnet())); - } else { - vm.setVnet("untagged"); - } - - - if( retry < _retry ) { - if (!_itMgr.stateTransitTo(vm, VirtualMachine.Event.OperationRetry, host.getId())) { - String description = "Unable to start VM " + vm.toString() + " because the state is not correct."; - s_logger.debug(description); - event.setDescription(description); - event.setLevel(EventVO.LEVEL_ERROR); - _eventDao.persist(event); - return null; - } - } - - txn.commit(); - - if( !_storageMgr.share(vm, vols, host, true) ) { - s_logger.debug("Unable to share volumes to host " + host.toString()); - continue; - } - - int utilization = _userVMCap; //cpu_cap - //Configuration cpu.uservm.cap is not available in default installation. Using this parameter is not encouraged - - int cpuWeight = _maxWeight; //cpu_weight - - // weight based allocation - cpuWeight = (int)((offering.getSpeed()*0.99) / (float)host.getSpeed() * _maxWeight); - if (cpuWeight > _maxWeight) { - cpuWeight = _maxWeight; - } - - int bits; - if (template == null) { - bits = 64; - } else { - bits = template.getBits(); - } - -// NetworkVO vmNetwork = _networkDao.findById(Long.valueOf(vm.getVnet())); -// NetworkOfferingVO vmNetworkOffering = _networkOfferingDao.findById(vmNetwork.getNetworkOfferingId()); - - StartCommand cmdStart = new StartCommand(vm, vm.getInstanceName(), offering, offering.getRateMbps(), offering.getMulticastRateMbps(), router, storageIps, vol.getFolder(), vm.getVnet(), utilization, cpuWeight, vols, mirroredVols, bits, isoPath, bootFromISO, guestOSDescription); - if (Storage.ImageFormat.ISO.equals(template.getFormat()) || template.isRequiresHvm()) { - cmdStart.setBootloader(BootloaderType.HVM); - } - - if (vm.getExternalVlanDbId() != null) { - final VlanVO externalVlan = _vlanDao.findById(vm.getExternalVlanDbId()); - cmdStart.setExternalVlan(externalVlan.getVlanId()); - cmdStart.setExternalMacAddress(vm.getExternalMacAddress()); - } - - try { - answer = _agentMgr.send(host.getId(), cmdStart); - if (answer.getResult()) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Started vm " + vm.getName() + " on host " + host.toString()); - } - started = true; - break; - } - - s_logger.debug("Unable to start " + vm.toString() + " on host " + host.toString() + " due to " + answer.getDetails()); - } catch (OperationTimedoutException e) { - if (e.isActive()) { - String description = "Unable to start vm " + vm.getName() + " due to operation timed out and it is active so scheduling a restart."; - _haMgr.scheduleRestart(vm, true); - host = null; - s_logger.debug(description); - event.setDescription(description); - event.setLevel(EventVO.LEVEL_ERROR); - _eventDao.persist(event); - return null; - } - } catch (AgentUnavailableException e) { - s_logger.debug("Agent " + host.toString() + " was unavailable to start VM " + vm.getName()); - } - - avoid.add(host); - - _storageMgr.unshare(vm, vols, host); - } while (--retry > 0 && (host = (HostVO)_agentMgr.findHost(Host.Type.Routing, dc, pod, sp, offering, template, vm, null, avoid)) != null); - - if (host == null || retry <= 0) { - if(!vm.getName().equals(vm.getDisplayName())) { - event.setDescription("Unable to start VM: " + vm.getName()+"("+vm.getDisplayName()+")"+ " Reason: "+answer.getDetails()); - } else { - event.setDescription("Unable to start VM: " + vm.getName()+ " Reason: "+answer.getDetails()); - } - - event.setLevel(EventVO.LEVEL_ERROR); - _eventDao.persist(event); - throw new ExecutionException("Unable to start VM: " + vm.getName()+ " Reason: "+answer.getDetails()); - } - - if (!_itMgr.stateTransitTo(vm, VirtualMachine.Event.OperationSucceeded, host.getId())) { - if(!vm.getName().equals(vm.getDisplayName())) { - event.setDescription("unable to start VM: " + vm.getName()+"("+vm.getDisplayName()+")"); - } else { - event.setDescription("unable to start VM: " + vm.getName()); - } - event.setLevel(EventVO.LEVEL_ERROR); - _eventDao.persist(event); - throw new ConcurrentOperationException("Starting vm " + vm.getName() + " didn't work."); - } - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Started vm " + vm.getName()); - } - - if(!vm.getName().equals(vm.getDisplayName())) { - event.setDescription("successfully started VM: " + vm.getName()+"("+vm.getDisplayName()+")"); - } else { - event.setDescription("successfully started VM: " + vm.getName()); - } - - _eventDao.persist(event); - _networkGroupMgr.handleVmStateTransition(vm, State.Running); - - return _vmDao.findById(vm.getId()); - } catch (Throwable th) { - txn.rollback(); - s_logger.error("While starting vm " + vm.getName() + ", caught throwable: ", th); - - if (!started) { - vm.setVnet(null); - - txn.start(); - if (_itMgr.stateTransitTo(vm, VirtualMachine.Event.OperationFailed, null)) { - txn.commit(); - } - } - - if (th instanceof StorageUnavailableException) { - throw (StorageUnavailableException)th; - } - if (th instanceof ConcurrentOperationException) { - throw (ConcurrentOperationException)th; - } - if (th instanceof ExecutionException) { - s_logger.warn(th.getMessage()); - throw (ExecutionException)th; - } - String description = "Unable to start VM " + vm.getName() + " because of an unknown exception"; - event.setDescription(description); - event.setLevel(EventVO.LEVEL_ERROR); - _eventDao.persist(event); - return null; - } - } - - private void checkIfPoolAvailable(long vmId) throws StorageUnavailableException { - //check if the sp is up before starting - List rootVolList = _volsDao.findByInstanceAndType(vmId, VolumeType.ROOT); - if(rootVolList == null || rootVolList.size() == 0){ - throw new StorageUnavailableException("Could not find the root disk for this vm to verify if the pool on which it exists is Up or not"); - }else{ - Long poolId = rootVolList.get(0).getPoolId();//each vm has 1 root vol - StoragePoolVO sp = _storagePoolDao.findById(poolId); - if(sp == null){ - throw new StorageUnavailableException("Could not find the pool for the root disk of vm"+vmId+", to confirm if it is Up or not"); - }else{ - //found pool - if(!sp.getStatus().equals(com.cloud.host.Status.Up) && !sp.getStatus().equals(com.cloud.host.Status.CancelMaintenance)){ - throw new StorageUnavailableException("Could not start the vm; the associated storage pool is in:"+sp.getStatus().toString()+" state"); - } - } - } - } - @Override public boolean stopVirtualMachine(long userId, long vmId, long eventId) { boolean status = false; @@ -1243,98 +815,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } } - @Override - public OperationResponse executeStopVM(final StopVMExecutor executor, final VMOperationParam param) { - final UserVmVO vm = _vmDao.findById(param.getVmId()); - OperationResponse response; - String resultDescription = "Success"; - - if (vm == null || vm.getRemoved() != null) { - resultDescription = "VM is either removed or deleted"; - executor.getAsyncJobMgr().completeAsyncJob(executor.getJob().getId(), - AsyncJobResult.STATUS_SUCCEEDED, 0, resultDescription); - if(s_logger.isDebugEnabled()) { - s_logger.debug("Execute asynchronize stop VM command: " +resultDescription); - } - response = new OperationResponse(OperationResponse.STATUS_SUCCEEDED, resultDescription); - return response; - } - - State state = vm.getState(); - if (state == State.Stopped) { - resultDescription = "VM is already stopped"; - executor.getAsyncJobMgr().completeAsyncJob(executor.getJob().getId(), - AsyncJobResult.STATUS_SUCCEEDED, 0, resultDescription); - - if(s_logger.isDebugEnabled()) { - s_logger.debug("Execute asynchronize stop VM command: " +resultDescription); - } - response = new OperationResponse(OperationResponse.STATUS_SUCCEEDED, resultDescription); - return response; - } - - if (state == State.Creating || state == State.Destroyed || state == State.Expunging) { - resultDescription = "VM is not in a stoppable state"; - executor.getAsyncJobMgr().completeAsyncJob(executor.getJob().getId(), - AsyncJobResult.STATUS_SUCCEEDED, 0, resultDescription); - - if(s_logger.isDebugEnabled()) { - s_logger.debug("Execute asynchronize stop VM command: " +resultDescription); - } - response = new OperationResponse(OperationResponse.STATUS_SUCCEEDED, resultDescription); - return response; - } - - if (!_itMgr.stateTransitTo(vm, VirtualMachine.Event.StopRequested, vm.getHostId())) { - resultDescription = "VM is not in a state to stop"; - executor.getAsyncJobMgr().completeAsyncJob(executor.getJob().getId(), - AsyncJobResult.STATUS_FAILED, 0, resultDescription); - - if(s_logger.isDebugEnabled()) { - s_logger.debug("Execute asynchronize stop VM command: " +resultDescription); - } - response = new OperationResponse(OperationResponse.STATUS_FAILED, resultDescription); - return response; - } - - if (vm.getHostId() == null) { - resultDescription = "VM host is null (invalid VM)"; - executor.getAsyncJobMgr().completeAsyncJob(executor.getJob().getId(), - AsyncJobResult.STATUS_FAILED, 0, resultDescription); - - if(s_logger.isDebugEnabled()) { - s_logger.debug("Execute asynchronize stop VM command: " +resultDescription); - } - response = new OperationResponse(OperationResponse.STATUS_FAILED, resultDescription); - return response; - } - - AsyncJobExecutor asyncExecutor = BaseAsyncJobExecutor.getCurrentExecutor(); - if(asyncExecutor != null) { - AsyncJobVO job = asyncExecutor.getJob(); - _asyncMgr.updateAsyncJobAttachment(job.getId(), "vm_instance", vm.getId()); - } - - StopCommand cmd = new StopCommand(vm, vm.getInstanceName(), vm.getVnet()); - try { - long seq = _agentMgr.send(vm.getHostId(), new Commands(cmd), new VMOperationListener(executor, param, vm, 0)); - resultDescription = "Execute asynchronize stop VM command: sending command to agent, seq - " + seq; - if(s_logger.isDebugEnabled()) { - s_logger.debug(resultDescription); - } - response = new OperationResponse(OperationResponse.STATUS_IN_PROGRESS, resultDescription); - return response; - } catch (AgentUnavailableException e) { - resultDescription = "Agent is not available"; - executor.getAsyncJobMgr().completeAsyncJob(executor.getJob().getId(), - AsyncJobResult.STATUS_FAILED, 0, resultDescription); - _itMgr.stateTransitTo(vm, VirtualMachine.Event.OperationFailed, vm.getHostId()); - response = new OperationResponse(OperationResponse.STATUS_FAILED, resultDescription); - - return response; - } - } - private boolean rebootVirtualMachine(long userId, long vmId) { UserVmVO vm = _vmDao.findById(vmId); @@ -1589,179 +1069,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager _vmDao.update(userVm.getId(), userVm); } - @Override @DB - public UserVmVO createVirtualMachine(Long vmId, long userId, AccountVO account, DataCenterVO dc, ServiceOfferingVO offering, VMTemplateVO template, DiskOfferingVO diskOffering, String displayName, String userData, List avoids, long startEventId, long size) throws CloudRuntimeException, ResourceAllocationException { - long accountId = account.getId(); - long dataCenterId = dc.getId(); - long serviceOfferingId = offering.getId(); - UserVmVO vm = null; - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Creating vm for account id=" + account.getId() + - ", name="+ account.getAccountName() + "; dc=" + dc.getName() + - "; offering=" + offering.getId() + "; diskOffering=" + ((diskOffering != null) ? diskOffering.getName() : "none") + - "; template=" + template.getId()); - } - - DomainRouterVO router = _routerDao.findBy(accountId, dataCenterId, Role.DHCP_FIREWALL_LB_PASSWD_USERDATA); - if (router == null) { - throw new CloudRuntimeException("Cannot find a router for account (" + accountId + "/" + - account.getAccountName() + ") in " + dataCenterId); - } - - // Determine the Guest OS Id - long guestOSId; - if (template != null) { - guestOSId = template.getGuestOSId(); - } else { - throw new CloudRuntimeException("No template or ISO was specified for the VM."); - } - long numVolumes = -1; - Transaction txn = Transaction.currentTxn(); - long routerId = router.getId(); - - String name; - txn.start(); - - account = _accountDao.lockRow(accountId, true); - if (account == null) { - throw new CloudRuntimeException("Unable to lock up the account: " + accountId); - } - - // First check that the maximum number of UserVMs for the given accountId will not be exceeded - if (_accountMgr.resourceLimitExceeded(account, ResourceType.user_vm)) { - ResourceAllocationException rae = new ResourceAllocationException("Maximum number of virtual machines for account: " + account.getAccountName() + " has been exceeded."); - rae.setResourceType("vm"); - throw rae; - } - - boolean isIso = Storage.ImageFormat.ISO.equals(template.getFormat()); - numVolumes = (isIso || (diskOffering == null)) ? 1 : 2; - _accountMgr.incrementResourceCount(account.getId(), ResourceType.user_vm); - _accountMgr.incrementResourceCount(account.getId(), ResourceType.volume, numVolumes); - txn.commit(); - - name = VirtualMachineName.getVmName(vmId, accountId, _instance); - - String diskOfferingIdentifier = (diskOffering != null) ? String.valueOf(diskOffering.getId()) : "-1"; - String eventParams = "id=" + vmId + "\nvmName=" + name + "\nsoId=" + serviceOfferingId + "\ndoId=" + diskOfferingIdentifier + "\ntId=" + template.getId() + "\ndcId=" + dataCenterId; - EventVO event = new EventVO(); - event.setUserId(userId); - event.setAccountId(accountId); - event.setStartId(startEventId); - event.setState(Event.State.Completed); - event.setType(EventTypes.EVENT_VM_CREATE); - event.setParameters(eventParams); - - try { - Pair pod = null; - long poolid = 0; - Set podsToAvoid = new HashSet(); - - while ((pod = _agentMgr.findPod(template, offering, dc, account.getId(), podsToAvoid)) != null) { - if (vm == null) { - vm = new UserVmVO(vmId, name, template.getId(), guestOSId, accountId, account.getDomainId(), - serviceOfferingId, null, null, router.getGuestNetmask(), - null,null,null, - routerId, pod.first().getId(), dataCenterId, - offering.getOfferHA(), displayName, userData); - - if (diskOffering != null) { - vm.setMirroredVols(diskOffering.isMirrored()); - } - - vm.setLastHostId(pod.second()); - - vm = _vmDao.persist(vm); - } else { - vm.setPodId(pod.first().getId()); - _itMgr.stateTransitTo(vm, VirtualMachine.Event.OperationRetry, null); - } - - String ipAddressStr = acquireGuestIpAddress(dataCenterId, accountId, vm); - if (ipAddressStr == null) { - s_logger.warn("Failed user vm creation : no guest ip address available"); - releaseGuestIpAddress(vm); - ResourceAllocationException rae = new ResourceAllocationException("No guest ip addresses available for " + account.getAccountName() + " (try destroying some instances)"); - rae.setResourceType("vm"); - throw rae; - } - - poolid = _storageMgr.createUserVM(account, vm, template, dc, pod.first(), offering, diskOffering, avoids, size); - if ( poolid != 0) { - break; - } - if (s_logger.isDebugEnabled()) { - s_logger.debug("Unable to find storage host in pod " + pod.first().getName() + " (id:" + pod.first().getId() + ") while creating " + vm.toString() + ", checking other pods"); - } - - // if it fails at storage allocation round, reset lastHostId to "release" - // the CPU/memory allocation on the candidate host - vm.setLastHostId(null); - _vmDao.update(vm.getId(), vm); - - podsToAvoid.add(pod.first().getId()); - } - - if(pod == null){ - throw new ResourceAllocationException("Create VM " + ((vm == null) ? vmId : vm.toString()) + " failed. There are no pods with enough CPU/memory"); - } - - if ((vm == null) || (poolid == 0)) { - throw new ResourceAllocationException("Create VM " + ((vm == null) ? vmId : vm.toString()) + " failed due to no Storage Pool is available"); - } - - txn.start(); - if(vm != null && vm.getName() != null && vm.getDisplayName() != null) - { - if(!vm.getName().equals(vm.getDisplayName())) { - event.setDescription("successfully created VM instance : " + vm.getName()+"("+vm.getDisplayName()+")"); - } else { - event.setDescription("successfully created VM instance : " + vm.getName()); - } - } - else - { - event.setDescription("successfully created VM instance :"+name); - } - - _eventDao.persist(event); - - _itMgr.stateTransitTo(vm, VirtualMachine.Event.OperationSucceeded, null); - if (s_logger.isDebugEnabled()) { - s_logger.debug("vm created " + vmId); - } - txn.commit(); - - return _vmDao.findById(vmId); - } catch (Throwable th) { - s_logger.error("Unable to create vm", th); - if (vm != null) { - _vmDao.expunge(vmId); - } - _accountMgr.decrementResourceCount(account.getId(), ResourceType.user_vm); - _accountMgr.decrementResourceCount(account.getId(), ResourceType.volume, numVolumes); - - String eventDescription = "Failed to create VM: "; - if (vm == null) { - eventDescription += "new instance"; - } else { - eventDescription += vm.getName(); - if (!vm.getName().equals(vm.getDisplayName())) { - eventDescription += " (" + vm.getDisplayName() + ")"; - } - } - - if (th instanceof ResourceAllocationException) { - throw (ResourceAllocationException)th; - } - throw new CloudRuntimeException("Unable to create vm", th); - }finally{ - updateVmStateForFailedVmCreation(vmId); - } - } - - @Override @DB public boolean destroyVirtualMachine(long userId, long vmId) { UserVmVO vm = _vmDao.findById(vmId); @@ -1973,7 +1280,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager String maxCap = configs.get("cpu.uservm.cap"); _userVMCap = NumbersUtil.parseInt(maxCap, 0); - _useNewNetworking = Boolean.parseBoolean(configs.get("use.new.networking")); _executor = Executors.newScheduledThreadPool(wrks, new NamedThreadFactory("UserVm-Scavenger")); @@ -2103,7 +1409,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager @Override public UserVmVO start(long vmId, long startEventId) throws StorageUnavailableException, ConcurrentOperationException, ExecutionException { - return start(1L, vmId, null, null, startEventId); + return null; // FIXME start(1L, vmId, null, null, startEventId); } @Override @@ -2668,267 +1974,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager return privateTemplate; } - @DB - @Override - public UserVmVO createDirectlyAttachedVM(Long vmId, long userId, AccountVO account, DataCenterVO dc, ServiceOfferingVO offering, VMTemplateVO template, DiskOfferingVO diskOffering, String displayName, String userData, List a, List networkGroups, long startEventId, long size) throws CloudRuntimeException, ResourceAllocationException { - - long accountId = account.getId(); - long dataCenterId = dc.getId(); - long serviceOfferingId = offering.getId(); - long templateId = -1; - if (template != null) { - templateId = template.getId(); - } - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Creating directly attached vm for account id=" + account.getId() + - ", name="+ account.getAccountName() + "; dc=" + dc.getName() + - "; offering=" + offering.getId() + "; diskOffering=" + ((diskOffering != null) ? diskOffering.getName() : "none") + - "; template=" + templateId); - } - - // Determine the Guest OS Id - long guestOSId; - if (template != null) { - guestOSId = template.getGuestOSId(); - } else { - throw new CloudRuntimeException("No template or ISO was specified for the VM."); - } - - Transaction txn = Transaction.currentTxn(); - txn.start(); - - account = _accountDao.lockRow(accountId, true); - if (account == null) { - throw new CloudRuntimeException("Unable to lock up the account: " + accountId); - } - - // First check that the maximum number of UserVMs for the given accountId will not be exceeded - if (_accountMgr.resourceLimitExceeded(account, ResourceType.user_vm)) { - ResourceAllocationException rae = new ResourceAllocationException("Maximum number of virtual machines for account: " + account.getAccountName() + " has been exceeded."); - rae.setResourceType("vm"); - throw rae; - } - _accountMgr.incrementResourceCount(account.getId(), ResourceType.user_vm); - boolean isIso = Storage.ImageFormat.ISO.equals(template.getFormat()); - long numVolumes = (isIso || (diskOffering == null)) ? 1 : 2; - _accountMgr.incrementResourceCount(account.getId(), ResourceType.volume, numVolumes); - txn.commit(); - - try { - UserVmVO vm = null; - - final String name = VirtualMachineName.getVmName(vmId, accountId, _instance); - - final String[] macAddresses = _dcDao.getNextAvailableMacAddressPair(dc.getId()); - long routerId = -1; - long poolId = 0; - Pair pod = null; - DomainRouterVO router = null; - Set avoids = new HashSet(); - VlanVO guestVlan = null; - List vlansForAccount = _vlanDao.listVlansForAccountByType(dc.getId(), account.getId(), VlanType.DirectAttached); - List vlansForPod = null; - List zoneWideVlans = null; - - boolean forAccount = false; - boolean forZone = false; - if (vlansForAccount.size() > 0) { - forAccount = true; - guestVlan = vlansForAccount.get(0);//FIXME: iterate over all vlans - } - else - { - //list zone wide vlans that are direct attached and tagged - //if exists pick random one - //set forZone = true - - //note the dao method below does a NEQ on vlan id, hence passing untagged - zoneWideVlans = _vlanDao.searchForZoneWideVlans(dc.getId(),VlanType.DirectAttached.toString(),"untagged"); - - if(zoneWideVlans!=null && zoneWideVlans.size()>0){ - forZone = true; - guestVlan = zoneWideVlans.get(0);//FIXME: iterate over all vlans - } - } - - while ((pod = _agentMgr.findPod(template, offering, dc, account.getId(), avoids)) != null) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Attempting to create direct attached vm in pod " + pod.first().getName()); - } - if (!forAccount && !forZone) { - vlansForPod = _vlanDao.listVlansForPodByType(pod.first().getId(), VlanType.DirectAttached); - if (vlansForPod.size() < 1) { - avoids.add(pod.first().getId()); - if (s_logger.isDebugEnabled()) { - s_logger.debug("No direct attached vlans available in pod " + pod.first().getName() + " (id:" + pod.first().getId() + "), checking other pods"); - } - continue; - } - guestVlan = vlansForPod.get(0);//FIXME: iterate over all vlans - } - - List rtrs = _routerDao.listByVlanDbId(guestVlan.getId()); - assert rtrs.size() < 2 : "How did we get more than one router per vlan?"; - if (rtrs.size() > 0) { - router = rtrs.get(0); - routerId = router.getId(); - } else if (rtrs.size() == 0) { - router = _routerMgr.createDhcpServerForDirectlyAttachedGuests(userId, accountId, dc, pod.first(), pod.second(), guestVlan); - if (router == null) { - avoids.add(pod.first().getId()); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Unable to create DHCP server in vlan " + guestVlan.getVlanId() + ", pod=" + pod.first().getName() + " (podid:" + pod.first().getId() + "), checking other pods"); - } - continue; - } - routerId = router.getId(); - } - String guestIp = null; - - if(forAccount) - { - for(VlanVO vlanForAcc : vlansForAccount) - { - guestIp = null;//_ipAddressDao.assignIpAddress(accountId, account.getDomainId(), vlanForAcc.getId(), false).getAddress(); - if(guestIp!=null) { - break; //got an ip - } - } - } - else if(!forAccount && !forZone) - { - //i.e. for pod - for(VlanVO vlanForPod : vlansForPod) - { - guestIp = null; // _ipAddressDao.assignIpAddress(accountId, account.getDomainId(), vlanForPod.getId(), false).getAddress(); - if(guestIp!=null) { - break;//got an ip - } - } - } - else - { - //for zone - for(VlanVO vlanForZone : zoneWideVlans) - { - guestIp = null;// _ipAddressDao.assignIpAddress(accountId, account.getDomainId(), vlanForZone.getId(), false).getAddress(); - if(guestIp!=null) { - break;//found an ip - } - } - } - - if (guestIp == null) { - s_logger.debug("No guest IP available in pod id=" + pod.first().getId()); - avoids.add(pod.first().getId()); - continue; - } - s_logger.debug("Acquired a guest IP, ip=" + guestIp); - String guestMacAddress = macAddresses[0]; - String externalMacAddress = macAddresses[1]; - Long externalVlanDbId = null; - - vm = new UserVmVO(vmId, name, templateId, guestOSId, accountId, account.getDomainId(), - serviceOfferingId, guestMacAddress, guestIp, guestVlan.getVlanNetmask(), - null, externalMacAddress, externalVlanDbId, - routerId, pod.first().getId(), dataCenterId, - offering.getOfferHA(), displayName, userData); - - if (diskOffering != null) { - vm.setMirroredVols(diskOffering.isMirrored()); - } - - vm.setLastHostId(pod.second()); - vm = _vmDao.persist(vm); - boolean addedToGroups = _networkGroupMgr.addInstanceToGroups(vmId, networkGroups); - if (!addedToGroups) { - s_logger.warn("Not all specified network groups can be found"); - _vmDao.expunge(vm.getId()); - throw new InvalidParameterValueException("Not all specified network groups can be found"); - } - - vm = _vmDao.findById(vmId); - try { - poolId = _storageMgr.createUserVM(account, vm, template, dc, pod.first(), offering, diskOffering, a,size); - } catch (CloudRuntimeException e) { - _vmDao.expunge(vmId); - _ipAddressDao.unassignIpAddress(guestIp); - s_logger.debug("Released a guest ip address because we could not find storage: ip=" + guestIp); - guestIp = null; - if (s_logger.isDebugEnabled()) { - s_logger.debug("Unable to find storage host in pod " + pod.first().getName() + " (id:" + pod.first().getId() + "), checking other pods"); - } - avoids.add(pod.first().getId()); - continue; // didn't find a storage host in pod, go to the next pod - } - - EventVO event = new EventVO(); - event.setUserId(userId); - event.setAccountId(accountId); - event.setType(EventTypes.EVENT_NET_IP_ASSIGN); - event.setParameters("guestIPaddress=" + guestIp + "\nvmName=" + vm.getName() + "\ndcId=" + vm.getDataCenterId()); - event.setDescription("acquired a public ip: " + guestIp); - _eventDao.persist(event); - - break; // if we got here, we found a host and can stop searching the pods - } - - if (poolId == 0) { - if(vm != null && vm.getName()!=null && vm.getDisplayName() != null) - { - if(!vm.getName().equals(vm.getDisplayName())) { - s_logger.debug("failed to create VM instance : " + name+"("+vm.getInstanceName()+")"); - } else { - s_logger.debug("failed to create VM instance : " + name); - } - } - else - { - s_logger.debug("failed to create VM instance : " + name); - throw new CloudRuntimeException("We could not find a suitable pool for creating this directly attached vm"); - - } - _accountMgr.decrementResourceCount(account.getId(), ResourceType.user_vm); - _accountMgr.decrementResourceCount(account.getId(), ResourceType.volume, numVolumes); - return null; - } - - txn.start(); - EventVO event = new EventVO(); - event.setUserId(userId); - event.setAccountId(accountId); - event.setType(EventTypes.EVENT_VM_CREATE); - event.setStartId(startEventId); - event.setState(Event.State.Completed); - String diskOfferingIdentifier = (diskOffering != null) ? String.valueOf(diskOffering.getId()) : "-1"; - String eventParams = "id=" + vm.getId() + "\nvmName=" + vm.getName() + "\nsoId=" + vm.getServiceOfferingId() + "\ndoId=" + diskOfferingIdentifier + "\ntId=" + vm.getTemplateId() + "\ndcId=" + vm.getDataCenterId(); - event.setParameters(eventParams); - if(!vm.getName().equals(vm.getDisplayName())) { - event.setDescription("successfully created VM instance : " + vm.getName()+"("+vm.getInstanceName()+")"); - } else { - event.setDescription("successfully created VM instance : " + vm.getName()); - } - _eventDao.persist(event); - - _itMgr.stateTransitTo(vm, VirtualMachine.Event.OperationSucceeded, null); - if (s_logger.isDebugEnabled()) { - s_logger.debug("vm created " + vmId); - } - txn.commit(); - - return _vmDao.findById(vmId); - } catch (Throwable th) { - _accountMgr.decrementResourceCount(account.getId(), ResourceType.user_vm); - _accountMgr.decrementResourceCount(account.getId(), ResourceType.volume, numVolumes); - - s_logger.error("Unable to create vm", th); - throw new CloudRuntimeException("Unable to create vm: "+th.getMessage(), th); - } finally{ - updateVmStateForFailedVmCreation(vmId); - } - } - //used for vm transitioning to error state private void updateVmStateForFailedVmCreation(Long vmId) { UserVmVO vm = _vmDao.findById(vmId); @@ -2939,171 +1984,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } } - @DB - @Override - public UserVmVO createDirectlyAttachedVMExternal(Long vmId, long userId, AccountVO account, DataCenterVO dc, ServiceOfferingVO offering, VMTemplateVO template, DiskOfferingVO diskOffering, String displayName, String userData, List a, List networkGroups, long startEventId, long size) throws CloudRuntimeException, ResourceAllocationException { - long accountId = account.getId(); - long dataCenterId = dc.getId(); - long serviceOfferingId = offering.getId(); - long templateId = -1; - if (template != null) { - templateId = template.getId(); - } - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Creating directly attached vm for account id=" + account.getId() + - ", name="+ account.getAccountName() + "; dc=" + dc.getName() + - "; offering=" + offering.getId() + "; diskOffering=" + ((diskOffering != null) ? diskOffering.getName() : "none") + - "; template=" + templateId); - } - - // Determine the Guest OS Id - long guestOSId; - if (template != null) { - guestOSId = template.getGuestOSId(); - } else { - throw new CloudRuntimeException("No template or ISO was specified for the VM."); - } - - boolean isIso = Storage.ImageFormat.ISO.equals(template.getFormat()); - long numVolumes = (isIso || (diskOffering == null)) ? 1 : 2; - - Transaction txn = Transaction.currentTxn(); - try { - UserVmVO vm = null; - txn.start(); - - account = _accountDao.lockRow(accountId, true); - if (account == null) { - throw new CloudRuntimeException("Unable to lock up the account: " + accountId); - } - - // First check that the maximum number of UserVMs for the given accountId will not be exceeded - if (_accountMgr.resourceLimitExceeded(account, ResourceType.user_vm)) { - ResourceAllocationException rae = new ResourceAllocationException("Maximum number of virtual machines for account: " + account.getAccountName() + " has been exceeded."); - rae.setResourceType("vm"); - throw rae; - } - - final String name = VirtualMachineName.getVmName(vmId, accountId, _instance); - - final String[] macAddresses = _dcDao.getNextAvailableMacAddressPair(dc.getId()); - Long routerId = null; - long poolId = 0; - Pair pod = null; - Set avoids = new HashSet(); - while ((pod = _agentMgr.findPod(template, offering, dc, account.getId(), avoids)) != null) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Attempting to create direct attached vm in pod " + pod.first().getName()); - } - - String guestMacAddress = macAddresses[0]; - String externalMacAddress = macAddresses[1]; - - IpAddrAllocator.IpAddr publicIp = _IpAllocator.getPrivateIpAddress(guestMacAddress, dc.getId(), pod.first().getId()); - String publicIpAddr = null; - String publicIpNetMask = null; - if (publicIp == null) { - s_logger.debug("Failed to get public ip address from external dhcp server"); - } else { - publicIpAddr = publicIp.ipaddr; - publicIpNetMask = publicIp.netMask; - } - vm = new UserVmVO(vmId, name, templateId, guestOSId, accountId, account.getDomainId(), - serviceOfferingId, guestMacAddress, publicIpAddr, publicIpNetMask, - null, externalMacAddress, null, - routerId, pod.first().getId(), dataCenterId, - offering.getOfferHA(), displayName, userData); - - if (diskOffering != null) { - vm.setMirroredVols(diskOffering.isMirrored()); - } - - vm.setLastHostId(pod.second()); - _vmDao.persist(vm); - _networkGroupMgr.addInstanceToGroups(vmId, networkGroups); - - _accountMgr.incrementResourceCount(account.getId(), ResourceType.user_vm); - _accountMgr.incrementResourceCount(account.getId(), ResourceType.volume, numVolumes); - txn.commit(); - - vm = _vmDao.findById(vmId); - try { - poolId = _storageMgr.createUserVM(account, vm, template, dc, pod.first(), offering, diskOffering,a,size); - } catch (CloudRuntimeException e) { - _vmDao.expunge(vmId); - _accountMgr.decrementResourceCount(account.getId(), ResourceType.user_vm); - _accountMgr.decrementResourceCount(account.getId(), ResourceType.volume, numVolumes); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Unable to find storage host in pod " + pod.first().getName() + " (id:" + pod.first().getId() + "), checking other pods"); - } - avoids.add(pod.first().getId()); - continue; // didn't find a storage host in pod, go to the next pod - } - break; // if we got here, we found a host and can stop searching the pods - } - - if (poolId == 0) { - if(vm != null && vm.getName()!=null && vm.getDisplayName() != null) - { - if(!vm.getName().equals(vm.getDisplayName())) { - s_logger.debug("failed to create VM instance : " + name+"("+vm.getDisplayName()+")"); - } else { - s_logger.debug("failed to create VM instance : " + name); - } - } - else - { - s_logger.debug("failed to create VM instance : " + name); - } - - _accountMgr.decrementResourceCount(account.getId(), ResourceType.user_vm); - _accountMgr.decrementResourceCount(account.getId(), ResourceType.volume, numVolumes); - txn.commit(); - return null; - } - txn.start(); - - EventVO event = new EventVO(); - event.setUserId(userId); - event.setAccountId(accountId); - event.setType(EventTypes.EVENT_VM_CREATE); - event.setStartId(startEventId); - event.setState(Event.State.Completed); - String diskOfferingIdentifier = (diskOffering != null) ? String.valueOf(diskOffering.getId()) : "-1"; - String eventParams = "id=" + vm.getId() + "\nvmName=" + vm.getName() + "\nsoId=" + vm.getServiceOfferingId() + "\ndoId=" + diskOfferingIdentifier + "\ntId=" + vm.getTemplateId() + "\ndcId=" + vm.getDataCenterId(); - event.setParameters(eventParams); - if(!vm.getName().equals(vm.getDisplayName())) { - event.setDescription("successfully created VM instance : " + vm.getName()+"("+vm.getDisplayName()+")"); - } else { - event.setDescription("successfully created VM instance : " + vm.getName()); - } - _eventDao.persist(event); - - _itMgr.stateTransitTo(vm, VirtualMachine.Event.OperationSucceeded, null); - if (s_logger.isDebugEnabled()) { - s_logger.debug("vm created " + vmId); - } - txn.commit(); - - return _vmDao.findById(vmId); - } catch (ResourceAllocationException rae) { - _accountMgr.decrementResourceCount(account.getId(), ResourceType.user_vm); - _accountMgr.decrementResourceCount(account.getId(), ResourceType.volume, numVolumes); - if (s_logger.isInfoEnabled()) { - s_logger.info("Failed to create VM for account " + accountId + " due to maximum number of virtual machines exceeded."); - } - throw rae; - } catch (Throwable th) { - _accountMgr.decrementResourceCount(account.getId(), ResourceType.user_vm); - _accountMgr.decrementResourceCount(account.getId(), ResourceType.volume, numVolumes); - s_logger.error("Unable to create vm", th); - throw new CloudRuntimeException("Unable to create vm", th); - }finally{ - updateVmStateForFailedVmCreation(vmId); - } - } - protected class ExpungeTask implements Runnable { UserVmManagerImpl _vmMgr; public ExpungeTask(UserVmManagerImpl vmMgr) { @@ -3211,68 +2091,12 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager @Override public UserVm stopVirtualMachine(StopVMCmd cmd) throws ServerApiException, ConcurrentOperationException{ - if (_useNewNetworking) { - return stopVirtualMachine(cmd.getId()); - } - //Input validation - Account account = UserContext.current().getAccount(); - Long userId = UserContext.current().getUserId(); - Long id = cmd.getId(); - - //if account is removed, return error - if(account!=null && account.getRemoved() != null) { - throw new ServerApiException(BaseCmd.ACCOUNT_ERROR, "The account " + account.getId()+" is removed"); - } - - UserVmVO vmInstance = _vmDao.findById(id); - if (vmInstance == null) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "unable to find a virtual machine with id " + id); - } - - long eventId = EventUtils.saveScheduledEvent(userId, vmInstance.getAccountId(), EventTypes.EVENT_VM_STOP, "stopping Vm with Id: "+id); - - userId = accountAndUserValidation(id, account, userId, vmInstance); - - boolean success = stopVirtualMachine(userId, id, eventId); - if (!success) { - throw new CloudRuntimeException("Unable to stop virtual machine with id " + id + ", internal error."); - } - return _vmDao.findById(id); + return stopVirtualMachine(cmd.getId()); } @Override public UserVm startVirtualMachine(StartVMCmd cmd) throws ExecutionException, ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { - if (_useNewNetworking) { - return startVirtualMachine(cmd.getId()); - } - //Input validation - Account account = UserContext.current().getAccount(); - Long userId = UserContext.current().getUserId(); - Long id = cmd.getId(); - - //if account is removed, return error - if(account!=null && account.getRemoved() != null) { - throw new ServerApiException(BaseCmd.ACCOUNT_ERROR, "The account " + account.getId()+" is removed"); - } - - UserVmVO vmInstance = _vmDao.findById(id.longValue()); - if (vmInstance == null) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "unable to find a virtual machine with id " + id); - } - - long eventId = EventUtils.saveScheduledEvent(userId, vmInstance.getAccountId(), EventTypes.EVENT_VM_START, "Starting Vm with Id: "+id); - - userId = accountAndUserValidation(id, account, userId, vmInstance); - - UserVmVO vm = startVirtualMachine(userId, id, null, null, eventId);; - - if (vm != null) { - return vm; - } - else { - throw new CloudRuntimeException("Internal error starting virtual machine id " + cmd.getId()); - } - + return startVirtualMachine(cmd.getId()); } @Override @@ -3304,35 +2128,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager @Override public UserVm destroyVm(DestroyVMCmd cmd) throws ResourceUnavailableException, ConcurrentOperationException { - if (_useNewNetworking) { - return destroyVm(cmd.getId()); - } - Account account = UserContext.current().getAccount(); - Long userId = UserContext.current().getUserId(); - Long vmId = cmd.getId(); - - //Verify input parameters - UserVmVO vmInstance = _vmDao.findById(vmId.longValue()); - if (vmInstance == null) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "unable to find a virtual machine with id " + vmId); - } - - userId = accountAndUserValidation(vmId, account, userId, vmInstance); - - EventUtils.saveScheduledEvent(userId, vmInstance.getAccountId(), EventTypes.EVENT_VM_DESTROY, "Destroying Vm with Id: "+vmId); - - boolean status = destroyVirtualMachine(userId, vmId); - - if(status) - { - EventUtils.saveEvent(userId, vmInstance.getAccountId(), EventTypes.EVENT_VM_DESTROY, "Successfully destroyed vm with id:"+vmId); - return _vmDao.findById(vmId); - } - else - { - EventUtils.saveEvent(userId, vmInstance.getAccountId(), EventTypes.EVENT_VM_DESTROY, "Failed to destroy vm with id:"+vmId); - throw new CloudRuntimeException("Failed to destroy vm with id " + vmId); - } + return destroyVm(cmd.getId()); } @Override @DB