You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by al...@apache.org on 2012/07/31 22:40:02 UTC
[20/50] [abbrv] git commit: Move KVM related code into
plugins/hypervisor/kvm, a new jar file is created: cloud-kvm.jar
Move KVM related code into plugins/hypervisor/kvm, a new jar file is
created: cloud-kvm.jar
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/7a0a9231
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/7a0a9231
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/7a0a9231
Branch: refs/heads/vpc
Commit: 7a0a9231c355fee42c67799abe111edcd79998bb
Parents: 1fbf595
Author: Edison Su <su...@gmail.com>
Authored: Mon Jul 30 14:54:46 2012 -0700
Committer: Edison Su <su...@gmail.com>
Committed: Mon Jul 30 14:55:47 2012 -0700
----------------------------------------------------------------------
agent/conf/agent.properties | 2 +-
agent/scripts/run.sh | 2 +-
.../resource/computing/FakeComputingResource.java | 642 ---
.../agent/resource/computing/KVMGuestOsMapper.java | 169 -
.../cloud/agent/resource/computing/KVMHABase.java | 220 -
.../agent/resource/computing/KVMHAChecker.java | 85 -
.../agent/resource/computing/KVMHAMonitor.java | 119 -
.../resource/computing/LibvirtCapXMLParser.java | 194 -
.../computing/LibvirtComputingResource.java | 4118 ---------------
.../resource/computing/LibvirtConnection.java | 48 -
.../resource/computing/LibvirtDomainXMLParser.java | 253 -
.../resource/computing/LibvirtNetworkDef.java | 193 -
.../agent/resource/computing/LibvirtSecretDef.java | 106 -
.../resource/computing/LibvirtStoragePoolDef.java | 162 -
.../computing/LibvirtStoragePoolXMLParser.java | 128 -
.../computing/LibvirtStorageVolumeDef.java | 91 -
.../computing/LibvirtStorageVolumeXMLParser.java | 104 -
.../agent/resource/computing/LibvirtVMDef.java | 964 ----
.../agent/resource/computing/LibvirtXMLParser.java | 72 -
.../com/cloud/agent/storage/KVMPhysicalDisk.java | 98 -
.../com/cloud/agent/storage/KVMStoragePool.java | 65 -
.../cloud/agent/storage/KVMStoragePoolManager.java | 109 -
.../com/cloud/agent/storage/KVMVirtualDisk.java | 21 -
.../cloud/agent/storage/LibvirtStorageAdaptor.java | 901 ----
.../cloud/agent/storage/LibvirtStoragePool.java | 208 -
.../com/cloud/agent/storage/StorageAdaptor.java | 70 -
build/build-cloud-plugins.xml | 9 +-
build/package.xml | 15 +-
cloud.spec | 1 +
.../kvm/resource/KvmDummyResourceBase.java | 89 -
debian/cloud-agent-libs.install | 1 +
plugins/hypervisors/kvm/.classpath | 11 +
plugins/hypervisors/kvm/.project | 23 +
plugins/hypervisors/kvm/.pydevproject | 7 +
plugins/hypervisors/kvm/build.xml | 137 +
.../kvm/resource/FakeComputingResource.java | 641 +++
.../hypervisor/kvm/resource/KVMGuestOsMapper.java | 169 +
.../cloud/hypervisor/kvm/resource/KVMHABase.java | 219 +
.../hypervisor/kvm/resource/KVMHAChecker.java | 84 +
.../hypervisor/kvm/resource/KVMHAMonitor.java | 119 +
.../kvm/resource/LibvirtCapXMLParser.java | 194 +
.../kvm/resource/LibvirtComputingResource.java | 4118 +++++++++++++++
.../hypervisor/kvm/resource/LibvirtConnection.java | 48 +
.../kvm/resource/LibvirtDomainXMLParser.java | 250 +
.../hypervisor/kvm/resource/LibvirtNetworkDef.java | 193 +
.../hypervisor/kvm/resource/LibvirtSecretDef.java | 106 +
.../kvm/resource/LibvirtStoragePoolDef.java | 162 +
.../kvm/resource/LibvirtStoragePoolXMLParser.java | 128 +
.../kvm/resource/LibvirtStorageVolumeDef.java | 91 +
.../resource/LibvirtStorageVolumeXMLParser.java | 104 +
.../hypervisor/kvm/resource/LibvirtVMDef.java | 963 ++++
.../hypervisor/kvm/resource/LibvirtXMLParser.java | 72 +
.../hypervisor/kvm/storage/KVMPhysicalDisk.java | 98 +
.../hypervisor/kvm/storage/KVMStoragePool.java | 65 +
.../kvm/storage/KVMStoragePoolManager.java | 109 +
.../hypervisor/kvm/storage/KVMVirtualDisk.java | 21 +
.../kvm/storage/LibvirtStorageAdaptor.java | 901 ++++
.../hypervisor/kvm/storage/LibvirtStoragePool.java | 208 +
.../hypervisor/kvm/storage/StorageAdaptor.java | 68 +
.../com/cloud/agent/manager/AgentManagerImpl.java | 2 +-
.../com/cloud/baremetal/BareMetalResourceBase.java | 1 -
.../kvm/discoverer/KvmServerDiscoverer.java | 400 --
.../com/cloud/resource/ResourceManagerImpl.java | 2 +-
63 files changed, 9335 insertions(+), 9638 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7a0a9231/agent/conf/agent.properties
----------------------------------------------------------------------
diff --git a/agent/conf/agent.properties b/agent/conf/agent.properties
index 9b5d36e..5e3c8db 100644
--- a/agent/conf/agent.properties
+++ b/agent/conf/agent.properties
@@ -18,7 +18,7 @@
# Sample configuration file for CloudStack agent
#resource= the java class, which agent load to execute
-resource=com.cloud.agent.resource.computing.LibvirtComputingResource
+resource=com.cloud.hypervisor.kvm.resource.LibvirtComputingResource
#workers= number of threads running in agent
workers=5
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7a0a9231/agent/scripts/run.sh
----------------------------------------------------------------------
diff --git a/agent/scripts/run.sh b/agent/scripts/run.sh
index 55543fe..1fa4275 100755
--- a/agent/scripts/run.sh
+++ b/agent/scripts/run.sh
@@ -17,4 +17,4 @@
# under the License.
#run.sh runs the agent client.
-java $1 -Xms128M -Xmx384M -cp cglib-nodep-2.2.jar:trilead-ssh2-build213.jar:cloud-api.jar:cloud-core-extras.jar:cloud-utils.jar:cloud-agent.jar:cloud-console-proxy.jar:cloud-console-common.jar:freemarker.jar:log4j-1.2.15.jar:ws-commons-util-1.0.2.jar:xmlrpc-client-3.1.3.jar:cloud-core.jar:xmlrpc-common-3.1.3.jar:javaee-api-5.0-1.jar:gson-1.3.jar:commons-httpclient-3.1.jar:commons-logging-1.1.1.jar:commons-codec-1.4.jar:commons-collections-3.2.1.jar:commons-pool-1.4.jar:apache-log4j-extras-1.0.jar:libvirt-0.4.5.jar:jna.jar:.:/etc/cloud:./conf com.cloud.agent.AgentShell
+java $1 -Xms128M -Xmx384M -cp cglib-nodep-2.2.jar:trilead-ssh2-build213.jar:cloud-api.jar:cloud-core-extras.jar:cloud-utils.jar:cloud-agent.jar:cloud-console-proxy.jar:cloud-console-common.jar:freemarker.jar:log4j-1.2.15.jar:ws-commons-util-1.0.2.jar:xmlrpc-client-3.1.3.jar:cloud-core.jar:xmlrpc-common-3.1.3.jar:javaee-api-5.0-1.jar:gson-1.3.jar:commons-httpclient-3.1.jar:commons-logging-1.1.1.jar:commons-codec-1.4.jar:commons-collections-3.2.1.jar:commons-pool-1.4.jar:apache-log4j-extras-1.0.jar:libvirt-0.4.5.jar:jna.jar:.:/etc/cloud:./*:/usr/share/java/*:./conf com.cloud.agent.AgentShell
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7a0a9231/agent/src/com/cloud/agent/resource/computing/FakeComputingResource.java
----------------------------------------------------------------------
diff --git a/agent/src/com/cloud/agent/resource/computing/FakeComputingResource.java b/agent/src/com/cloud/agent/resource/computing/FakeComputingResource.java
deleted file mode 100644
index abfa478..0000000
--- a/agent/src/com/cloud/agent/resource/computing/FakeComputingResource.java
+++ /dev/null
@@ -1,642 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.agent.resource.computing;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.UUID;
-
-import javax.ejb.Local;
-import javax.naming.ConfigurationException;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.AttachIsoCommand;
-import com.cloud.agent.api.AttachVolumeCommand;
-import com.cloud.agent.api.CheckHealthAnswer;
-import com.cloud.agent.api.CheckHealthCommand;
-import com.cloud.agent.api.CheckStateAnswer;
-import com.cloud.agent.api.CheckStateCommand;
-import com.cloud.agent.api.CheckVirtualMachineAnswer;
-import com.cloud.agent.api.CheckVirtualMachineCommand;
-import com.cloud.agent.api.CleanupNetworkRulesCmd;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.GetHostStatsAnswer;
-import com.cloud.agent.api.GetHostStatsCommand;
-import com.cloud.agent.api.GetStorageStatsAnswer;
-import com.cloud.agent.api.GetStorageStatsCommand;
-import com.cloud.agent.api.GetVmStatsAnswer;
-import com.cloud.agent.api.GetVmStatsCommand;
-import com.cloud.agent.api.ModifySshKeysCommand;
-import com.cloud.agent.api.ModifyStoragePoolAnswer;
-import com.cloud.agent.api.ModifyStoragePoolCommand;
-import com.cloud.agent.api.PingCommand;
-import com.cloud.agent.api.PingRoutingCommand;
-import com.cloud.agent.api.PingTestCommand;
-import com.cloud.agent.api.ReadyAnswer;
-import com.cloud.agent.api.ReadyCommand;
-import com.cloud.agent.api.RebootAnswer;
-import com.cloud.agent.api.RebootCommand;
-import com.cloud.agent.api.SecurityGroupRuleAnswer;
-import com.cloud.agent.api.SecurityGroupRulesCmd;
-import com.cloud.agent.api.StartAnswer;
-import com.cloud.agent.api.StartCommand;
-import com.cloud.agent.api.StartupCommand;
-import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.agent.api.StartupRoutingCommand.VmState;
-import com.cloud.agent.api.StartupStorageCommand;
-import com.cloud.agent.api.StopAnswer;
-import com.cloud.agent.api.StopCommand;
-import com.cloud.agent.api.StoragePoolInfo;
-import com.cloud.agent.api.routing.SavePasswordCommand;
-import com.cloud.agent.api.routing.VmDataCommand;
-import com.cloud.agent.api.storage.CreateAnswer;
-import com.cloud.agent.api.storage.CreateCommand;
-import com.cloud.agent.api.storage.DestroyCommand;
-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.VirtualMachineTO;
-import com.cloud.agent.api.to.VolumeTO;
-import com.cloud.agent.dhcp.DhcpSnooper;
-import com.cloud.agent.dhcp.FakeDhcpSnooper;
-import com.cloud.agent.mockvm.MockVm;
-import com.cloud.agent.mockvm.MockVmMgr;
-import com.cloud.agent.mockvm.VmMgr;
-import com.cloud.agent.vmdata.JettyVmDataServer;
-import com.cloud.agent.vmdata.VmDataServer;
-import com.cloud.host.Host.Type;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.network.Networks.RouterPrivateIpStrategy;
-import com.cloud.network.Networks.TrafficType;
-import com.cloud.resource.ServerResource;
-import com.cloud.resource.ServerResourceBase;
-import com.cloud.storage.Storage;
-import com.cloud.storage.Storage.StoragePoolType;
-import com.cloud.storage.Volume;
-import com.cloud.storage.VolumeVO;
-import com.cloud.storage.template.TemplateInfo;
-import com.cloud.utils.PropertiesUtil;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-import com.cloud.vm.VirtualMachine.State;
-
-/**
- * Pretends to be a computing resource
- *
- */
-@Local(value = { ServerResource.class })
-public class FakeComputingResource extends ServerResourceBase implements
- ServerResource {
- private static final Logger s_logger = Logger
- .getLogger(FakeComputingResource.class);
- private Map<String, Object> _params;
- private VmMgr _vmManager = new MockVmMgr();
- protected HashMap<String, State> _vms = new HashMap<String, State>(20);
- protected DhcpSnooper _dhcpSnooper = new FakeDhcpSnooper();
- protected VmDataServer _vmDataServer = new JettyVmDataServer();
-
- @Override
- public Type getType() {
- return Type.Routing;
- }
-
- @Override
- public StartupCommand[] initialize() {
- Map<String, VmState> changes = null;
-
- final List<Object> info = getHostInfo();
-
- final StartupRoutingCommand cmd = new StartupRoutingCommand(
- (Integer) info.get(0), (Long) info.get(1), (Long) info.get(2),
- (Long) info.get(4), (String) info.get(3), HypervisorType.KVM,
- RouterPrivateIpStrategy.HostLocal, changes);
- fillNetworkInformation(cmd);
- cmd.getHostDetails().putAll(getVersionStrings());
- cmd.setCluster(getConfiguredProperty("cluster", "1"));
- StoragePoolInfo pi = initializeLocalStorage();
- StartupStorageCommand sscmd = new StartupStorageCommand();
- sscmd.setPoolInfo(pi);
- sscmd.setGuid(pi.getUuid());
- sscmd.setDataCenter((String) _params.get("zone"));
- sscmd.setResourceType(Storage.StorageResourceType.STORAGE_POOL);
-
- return new StartupCommand[] { cmd, sscmd };
-
- }
-
- private Map<String, String> getVersionStrings() {
- Map<String, String> result = new HashMap<String, String>();
- String hostOs = (String) _params.get("Host.OS");
- String hostOsVer = (String) _params.get("Host.OS.Version");
- String hostOsKernVer = (String) _params.get("Host.OS.Kernel.Version");
- result.put("Host.OS", hostOs == null ? "Fedora" : hostOs);
- result.put("Host.OS.Version", hostOsVer == null ? "14" : hostOsVer);
- result.put("Host.OS.Kernel.Version",
- hostOsKernVer == null ? "2.6.35.6-45.fc14.x86_64"
- : hostOsKernVer);
- return result;
- }
-
- protected void fillNetworkInformation(final StartupCommand cmd) {
-
- cmd.setPrivateIpAddress((String) _params.get("private.ip.address"));
- cmd.setPrivateMacAddress((String) _params.get("private.mac.address"));
- cmd.setPrivateNetmask((String) _params.get("private.ip.netmask"));
-
- cmd.setStorageIpAddress((String) _params.get("private.ip.address"));
- cmd.setStorageMacAddress((String) _params.get("private.mac.address"));
- cmd.setStorageNetmask((String) _params.get("private.ip.netmask"));
- cmd.setGatewayIpAddress((String) _params.get("gateway.ip.address"));
-
- }
-
- protected StoragePoolInfo initializeLocalStorage() {
- String hostIp = (String) _params.get("private.ip.address");
- String localStoragePath = (String) _params.get("local.storage.path");
- String lh = hostIp + localStoragePath;
- String uuid = UUID.nameUUIDFromBytes(lh.getBytes()).toString();
-
- String capacity = (String) _params.get("local.storage.capacity");
- String available = (String) _params.get("local.storage.avail");
-
- return new StoragePoolInfo(uuid, hostIp, localStoragePath,
- localStoragePath, StoragePoolType.Filesystem,
- Long.parseLong(capacity), Long.parseLong(available));
-
- }
-
- @Override
- public PingCommand getCurrentStatus(long id) {
- final HashMap<String, State> newStates = new HashMap<String, State>();
- _dhcpSnooper.syncIpAddr();
- return new PingRoutingCommand(com.cloud.host.Host.Type.Routing, id,
- newStates);
- }
-
- @Override
- public Answer executeRequest(Command cmd) {
- try {
- if (cmd instanceof ReadyCommand) {
- return execute((ReadyCommand) cmd);
- } else if (cmd instanceof ModifySshKeysCommand) {
- return execute((ModifySshKeysCommand) cmd);// TODO: remove
- } else if (cmd instanceof GetHostStatsCommand) {
- return execute((GetHostStatsCommand) cmd);
- } else if (cmd instanceof PrimaryStorageDownloadCommand) {
- return execute((PrimaryStorageDownloadCommand) cmd);
-
- } else if (cmd instanceof StopCommand) {
- return execute((StopCommand) cmd);
- } else if (cmd instanceof GetVmStatsCommand) {
- return execute((GetVmStatsCommand) cmd);
- } else if (cmd instanceof RebootCommand) {
- return execute((RebootCommand) cmd);
- } else if (cmd instanceof CheckStateCommand) {
- return executeRequest(cmd);
- } else if (cmd instanceof CheckHealthCommand) {
- return execute((CheckHealthCommand) cmd);
- } else if (cmd instanceof PingTestCommand) {
- return execute((PingTestCommand) cmd);
- } else if (cmd instanceof CheckVirtualMachineCommand) {
- return execute((CheckVirtualMachineCommand) cmd);
- } else if (cmd instanceof ReadyCommand) {
- return execute((ReadyCommand) cmd);
- } else if (cmd instanceof StopCommand) {
- return execute((StopCommand) cmd);
- } else if (cmd instanceof CreateCommand) {
- return execute((CreateCommand) cmd);
- } else if (cmd instanceof DestroyCommand) {
- return execute((DestroyCommand) cmd);
- } else if (cmd instanceof PrimaryStorageDownloadCommand) {
- return execute((PrimaryStorageDownloadCommand) cmd);
- } else if (cmd instanceof GetStorageStatsCommand) {
- return execute((GetStorageStatsCommand) cmd);
- } else if (cmd instanceof ModifyStoragePoolCommand) {
- return execute((ModifyStoragePoolCommand) cmd);
- } else if (cmd instanceof SecurityGroupRulesCmd) {
- return execute((SecurityGroupRulesCmd) cmd);
- } else if (cmd instanceof StartCommand) {
- return execute((StartCommand) cmd);
- } else if (cmd instanceof CleanupNetworkRulesCmd) {
- return execute((CleanupNetworkRulesCmd) cmd);
- } else if (cmd instanceof SavePasswordCommand) {
- return execute((SavePasswordCommand) cmd);
- } else if (cmd instanceof VmDataCommand) {
- return execute((VmDataCommand) cmd);
- } else {
- s_logger.warn("Unsupported command ");
- return Answer.createUnsupportedCommandAnswer(cmd);
- }
- } catch (final IllegalArgumentException e) {
- return new Answer(cmd, false, e.getMessage());
- }
- }
-
- private Answer execute(CleanupNetworkRulesCmd cmd) {
- return new Answer(cmd);
- }
-
- private Answer execute(SecurityGroupRulesCmd cmd) {
- s_logger.info("Programmed network rules for vm " + cmd.getVmName()
- + " guestIp=" + cmd.getGuestIp() + ",ingress numrules="
- + cmd.getIngressRuleSet().length + ",egress numrules="
- + cmd.getEgressRuleSet().length);
- return new SecurityGroupRuleAnswer(cmd);
- }
-
- private Answer execute(ModifyStoragePoolCommand cmd) {
- long capacity = getConfiguredProperty("local.storage.capacity",
- 10000000000L);
- long used = 10000000L;
- long available = capacity - used;
- if (cmd.getAdd()) {
-
- ModifyStoragePoolAnswer answer = new ModifyStoragePoolAnswer(cmd,
- capacity, used, new HashMap<String, TemplateInfo>());
-
- if (s_logger.isInfoEnabled())
- s_logger.info("Sending ModifyStoragePoolCommand answer with capacity: "
- + capacity
- + ", used: "
- + used
- + ", available: "
- + available);
- return answer;
- } else {
- if (s_logger.isInfoEnabled())
- s_logger.info("ModifyNetfsStoragePoolCmd is not add command, cmd: "
- + cmd.toString());
- return new Answer(cmd);
- }
- }
-
- private Answer execute(GetStorageStatsCommand cmd) {
- return new GetStorageStatsAnswer(cmd, getConfiguredProperty(
- "local.storage.capacity", 100000000000L), 0L);
- }
-
- protected synchronized ReadyAnswer execute(ReadyCommand cmd) {
- return new ReadyAnswer(cmd);
- }
-
- private Answer execute(PrimaryStorageDownloadCommand cmd) {
- return new PrimaryStorageDownloadAnswer(cmd.getLocalPath(), 16000000L);
- }
-
- private Answer execute(ModifySshKeysCommand cmd) {
- return new Answer(cmd, true, null);
- }
-
- @Override
- protected String getDefaultScriptsDir() {
- return null;
- }
-
- protected String getConfiguredProperty(String key, String defaultValue) {
- String val = (String) _params.get(key);
- return val == null ? defaultValue : val;
- }
-
- protected Long getConfiguredProperty(String key, Long defaultValue) {
- String val = (String) _params.get(key);
-
- if (val != null) {
- Long result = Long.parseLong(val);
- return result;
- }
- return defaultValue;
- }
-
- protected List<Object> getHostInfo() {
- final ArrayList<Object> info = new ArrayList<Object>();
- long speed = getConfiguredProperty("cpuspeed", 4000L);
- long cpus = getConfiguredProperty("cpus", 4L);
- long ram = getConfiguredProperty("memory", 16000L * 1024L * 1024L);
- long dom0ram = Math.min(ram / 10, 768 * 1024 * 1024L);
-
- String cap = getConfiguredProperty("capabilities", "hvm");
- info.add((int) cpus);
- info.add(speed);
- info.add(ram);
- info.add(cap);
- info.add(dom0ram);
- return info;
-
- }
-
- private Map<String, Object> getSimulatorProperties()
- throws ConfigurationException {
- final File file = PropertiesUtil.findConfigFile("simulator.properties");
- if (file == null) {
- throw new ConfigurationException(
- "Unable to find simulator.properties.");
- }
-
- s_logger.info("simulator.properties found at " + file.getAbsolutePath());
- Properties properties = new Properties();
- try {
- properties.load(new FileInputStream(file));
-
- final Map<String, Object> params = PropertiesUtil.toMap(properties);
-
- return params;
- } catch (final FileNotFoundException ex) {
- throw new CloudRuntimeException("Cannot find the file: "
- + file.getAbsolutePath(), ex);
- } catch (final IOException ex) {
- throw new CloudRuntimeException("IOException in reading "
- + file.getAbsolutePath(), ex);
- }
- }
-
- @Override
- public boolean configure(String name, Map<String, Object> params)
- throws ConfigurationException {
- Map<String, Object> simProps = getSimulatorProperties();
- params.putAll(simProps);
- setParams(params);
- _vmManager.configure(params);
- _dhcpSnooper.configure(name, params);
- _vmDataServer.configure(name, params);
- return true;
- }
-
- public void setParams(Map<String, Object> _params) {
- this._params = _params;
- }
-
- public Map<String, Object> getParams() {
- return _params;
- }
-
- protected synchronized StartAnswer execute(StartCommand cmd) {
- VmMgr vmMgr = getVmManager();
-
- VirtualMachineTO vmSpec = cmd.getVirtualMachine();
- String vmName = vmSpec.getName();
- State state = State.Stopped;
-
- try {
- if (!_vms.containsKey(vmName)) {
- synchronized (_vms) {
- _vms.put(vmName, State.Starting);
- }
-
- MockVm vm = vmMgr.createVmFromSpec(vmSpec);
- vmMgr.createVbd(vmSpec, vmName, vm);
- vmMgr.createVif(vmSpec, vmName, vm);
-
- state = State.Running;
- for (NicTO nic : cmd.getVirtualMachine().getNics()) {
- if (nic.getType() == TrafficType.Guest) {
- InetAddress addr = _dhcpSnooper.getIPAddr(nic.getMac(),
- vmName);
- nic.setIp(addr.getHostAddress());
- }
- }
- _vmDataServer.handleVmStarted(cmd.getVirtualMachine());
- return new StartAnswer(cmd);
- } else {
- String msg = "There is already a VM having the same name "
- + vmName;
- s_logger.warn(msg);
- return new StartAnswer(cmd, msg);
- }
- } catch (Exception ex) {
-
- } finally {
- synchronized (_vms) {
- _vms.put(vmName, state);
- }
- }
- return new StartAnswer(cmd);
- }
-
- protected synchronized StopAnswer execute(StopCommand cmd) {
- VmMgr vmMgr = getVmManager();
-
- StopAnswer answer = null;
- String vmName = cmd.getVmName();
-
- Integer port = vmMgr.getVncPort(vmName);
-
- State state = null;
- synchronized (_vms) {
- state = _vms.get(vmName);
- _vms.put(vmName, State.Stopping);
- }
- try {
- String result = vmMgr.stopVM(vmName, false);
- if (result != null) {
- s_logger.info("Trying destroy on " + vmName);
- if (result == Script.ERR_TIMEOUT) {
- result = vmMgr.stopVM(vmName, true);
- }
-
- s_logger.warn("Couldn't stop " + vmName);
-
- if (result != null) {
- return new StopAnswer(cmd, result, false);
- }
- }
-
- answer = new StopAnswer(cmd, null, port, true);
-
- String result2 = vmMgr.cleanupVnet(cmd.getVnet());
- if (result2 != null) {
- result = result2 + (result != null ? ("\n" + result) : "");
- answer = new StopAnswer(cmd, result, port, true);
- }
-
- _dhcpSnooper.cleanup(vmName, null);
-
- return answer;
- } finally {
- if (answer == null || !answer.getResult()) {
- synchronized (_vms) {
- _vms.put(vmName, state);
- }
- }
- }
- }
-
- protected Answer execute(final VmDataCommand cmd) {
- return _vmDataServer.handleVmDataCommand(cmd);
- }
-
- protected Answer execute(final SavePasswordCommand cmd) {
- return new Answer(cmd);
- }
-
- protected Answer execute(RebootCommand cmd) {
- VmMgr vmMgr = getVmManager();
- vmMgr.rebootVM(cmd.getVmName());
- return new RebootAnswer(cmd, "success", true);
- }
-
- private Answer execute(PingTestCommand cmd) {
- return new Answer(cmd);
- }
-
- protected GetVmStatsAnswer execute(GetVmStatsCommand cmd) {
- return null;
- }
-
- private VmMgr getVmManager() {
- return _vmManager;
- }
-
- protected Answer execute(GetHostStatsCommand cmd) {
- VmMgr vmMgr = getVmManager();
- return new GetHostStatsAnswer(cmd, vmMgr.getHostCpuUtilization(),
- vmMgr.getHostFreeMemory(), vmMgr.getHostTotalMemory(), 0, 0,
- "SimulatedHost");
- }
-
- protected CheckStateAnswer execute(CheckStateCommand cmd) {
- State state = getVmManager().checkVmState(cmd.getVmName());
- return new CheckStateAnswer(cmd, state);
- }
-
- protected CheckHealthAnswer execute(CheckHealthCommand cmd) {
- return new CheckHealthAnswer(cmd, true);
- }
-
- protected CheckVirtualMachineAnswer execute(
- final CheckVirtualMachineCommand cmd) {
- VmMgr vmMgr = getVmManager();
- final String vmName = cmd.getVmName();
-
- final State state = vmMgr.checkVmState(vmName);
- Integer vncPort = null;
- if (state == State.Running) {
- vncPort = vmMgr.getVncPort(vmName);
- synchronized (_vms) {
- _vms.put(vmName, State.Running);
- }
- }
- return new CheckVirtualMachineAnswer(cmd, state, vncPort);
- }
-
- protected Answer execute(final AttachVolumeCommand cmd) {
- return new Answer(cmd);
- }
-
- protected Answer execute(final AttachIsoCommand cmd) {
- return new Answer(cmd);
- }
-
- protected CreateAnswer execute(final CreateCommand cmd) {
- try {
-
- VolumeTO vol = new VolumeTO(cmd.getVolumeId(), Volume.Type.ROOT,
- com.cloud.storage.Storage.StoragePoolType.LVM, cmd
- .getPool().getUuid(), "dummy", "/mountpoint",
- "dummyPath", 1000L, null);
- return new CreateAnswer(cmd, vol);
- } catch (Throwable th) {
- return new CreateAnswer(cmd, new Exception("Unexpected exception"));
- }
- }
-
- protected HashMap<String, State> sync() {
- Map<String, State> newStates;
- Map<String, State> oldStates = null;
-
- HashMap<String, State> changes = new HashMap<String, State>();
-
- synchronized (_vms) {
- newStates = getVmManager().getVmStates();
- oldStates = new HashMap<String, State>(_vms.size());
- oldStates.putAll(_vms);
-
- for (Map.Entry<String, State> entry : newStates.entrySet()) {
- String vm = entry.getKey();
-
- State newState = entry.getValue();
- State oldState = oldStates.remove(vm);
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + vm + ": xen has state " + newState
- + " and we have state "
- + (oldState != null ? oldState.toString() : "null"));
- }
-
- if (oldState == null) {
- _vms.put(vm, newState);
- changes.put(vm, newState);
- } else if (oldState == State.Starting) {
- if (newState == State.Running) {
- _vms.put(vm, newState);
- } else if (newState == State.Stopped) {
- s_logger.debug("Ignoring vm " + vm
- + " because of a lag in starting the vm.");
- }
- } else if (oldState == State.Stopping) {
- if (newState == State.Stopped) {
- _vms.put(vm, newState);
- } else if (newState == State.Running) {
- s_logger.debug("Ignoring vm " + vm
- + " because of a lag in stopping the vm. ");
- }
- } else if (oldState != newState) {
- _vms.put(vm, newState);
- changes.put(vm, newState);
- }
- }
-
- for (Map.Entry<String, State> entry : oldStates.entrySet()) {
- String vm = entry.getKey();
- State oldState = entry.getValue();
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + vm
- + " is now missing from xen so reporting stopped");
- }
-
- if (oldState == State.Stopping) {
- s_logger.debug("Ignoring VM " + vm
- + " in transition state stopping.");
- _vms.remove(vm);
- } else if (oldState == State.Starting) {
- s_logger.debug("Ignoring VM " + vm
- + " in transition state starting.");
- } else if (oldState == State.Stopped) {
- _vms.remove(vm);
- } else {
- changes.put(entry.getKey(), State.Stopped);
- }
- }
- }
-
- return changes;
- }
-
- protected Answer execute(DestroyCommand cmd) {
- return new Answer(cmd, true, null);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7a0a9231/agent/src/com/cloud/agent/resource/computing/KVMGuestOsMapper.java
----------------------------------------------------------------------
diff --git a/agent/src/com/cloud/agent/resource/computing/KVMGuestOsMapper.java b/agent/src/com/cloud/agent/resource/computing/KVMGuestOsMapper.java
deleted file mode 100644
index 22f3935..0000000
--- a/agent/src/com/cloud/agent/resource/computing/KVMGuestOsMapper.java
+++ /dev/null
@@ -1,169 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.agent.resource.computing;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-
-public class KVMGuestOsMapper {
- private static final Logger s_logger = Logger
- .getLogger(KVMGuestOsMapper.class);
- private static Map<String, String> s_mapper = new HashMap<String, String>();
- static {
- s_mapper.put("CentOS 4.5 (32-bit)", "CentOS 4.5");
- s_mapper.put("CentOS 4.6 (32-bit)", "CentOS 4.6");
- s_mapper.put("CentOS 4.7 (32-bit)", "CentOS 4.7");
- s_mapper.put("CentOS 4.8 (32-bit)", "CentOS 4.8");
- s_mapper.put("CentOS 5.0 (32-bit)", "CentOS 5.0");
- s_mapper.put("CentOS 5.0 (64-bit)", "CentOS 5.0");
- s_mapper.put("CentOS 5.1 (32-bit)", "CentOS 5.1");
- s_mapper.put("CentOS 5.1 (64-bit)", "CentOS 5.1");
- s_mapper.put("CentOS 5.2 (32-bit)", "CentOS 5.2");
- s_mapper.put("CentOS 5.2 (64-bit)", "CentOS 5.2");
- s_mapper.put("CentOS 5.3 (32-bit)", "CentOS 5.3");
- s_mapper.put("CentOS 5.3 (64-bit)", "CentOS 5.3");
- s_mapper.put("CentOS 5.4 (32-bit)", "CentOS 5.4");
- s_mapper.put("CentOS 5.4 (64-bit)", "CentOS 5.4");
- s_mapper.put("CentOS 5.5 (32-bit)", "CentOS 5.5");
- s_mapper.put("CentOS 5.5 (64-bit)", "CentOS 5.5");
- s_mapper.put("Red Hat Enterprise Linux 2", "Red Hat Enterprise Linux 2");
- s_mapper.put("Red Hat Enterprise Linux 3 (32-bit)",
- "Red Hat Enterprise Linux 3");
- s_mapper.put("Red Hat Enterprise Linux 3 (64-bit)",
- "Red Hat Enterprise Linux 3");
- s_mapper.put("Red Hat Enterprise Linux 4(64-bit)",
- "Red Hat Enterprise Linux 4");
- s_mapper.put("Red Hat Enterprise Linux 4.5 (32-bit)",
- "Red Hat Enterprise Linux 4.5");
- s_mapper.put("Red Hat Enterprise Linux 4.6 (32-bit)",
- "Red Hat Enterprise Linux 4.6");
- s_mapper.put("Red Hat Enterprise Linux 4.7 (32-bit)",
- "Red Hat Enterprise Linux 4.7");
- s_mapper.put("Red Hat Enterprise Linux 4.8 (32-bit)",
- "Red Hat Enterprise Linux 4.8");
- s_mapper.put("Red Hat Enterprise Linux 5.0 (32-bit)",
- "Red Hat Enterprise Linux 5.0");
- s_mapper.put("Red Hat Enterprise Linux 5.0 (64-bit)",
- "Red Hat Enterprise Linux 5.0");
- s_mapper.put("Red Hat Enterprise Linux 5.1 (32-bit)",
- "Red Hat Enterprise Linux 5.1");
- s_mapper.put("Red Hat Enterprise Linux 5.1 (32-bit)",
- "Red Hat Enterprise Linux 5.1");
- s_mapper.put("Red Hat Enterprise Linux 5.2 (32-bit)",
- "Red Hat Enterprise Linux 5.2");
- s_mapper.put("Red Hat Enterprise Linux 5.2 (64-bit)",
- "Red Hat Enterprise Linux 5.2");
- s_mapper.put("Red Hat Enterprise Linux 5.3 (32-bit)",
- "Red Hat Enterprise Linux 5.3");
- s_mapper.put("Red Hat Enterprise Linux 5.3 (64-bit)",
- "Red Hat Enterprise Linux 5.3");
- s_mapper.put("Red Hat Enterprise Linux 5.4 (32-bit)",
- "Red Hat Enterprise Linux 5.4");
- s_mapper.put("Red Hat Enterprise Linux 5.4 (64-bit)",
- "Red Hat Enterprise Linux 5.4");
- s_mapper.put("Red Hat Enterprise Linux 5.5 (32-bit)",
- "Red Hat Enterprise Linux 5.5");
- s_mapper.put("Red Hat Enterprise Linux 5.5 (64-bit)",
- "Red Hat Enterprise Linux 5.5");
- s_mapper.put("Red Hat Enterprise Linux 6.0 (32-bit)",
- "Red Hat Enterprise Linux 6.0");
- s_mapper.put("Red Hat Enterprise Linux 6.0 (64-bit)",
- "Red Hat Enterprise Linux 6.0");
- s_mapper.put("Fedora 13", "Fedora 13");
- s_mapper.put("Fedora 12", "Fedora 12");
- s_mapper.put("Fedora 11", "Fedora 11");
- s_mapper.put("Fedora 10", "Fedora 10");
- s_mapper.put("Fedora 9", "Fedora 9");
- s_mapper.put("Fedora 8", "Fedora 8");
- s_mapper.put("Ubuntu 10.04 (32-bit)", "Ubuntu 10.04");
- s_mapper.put("Ubuntu 10.04 (64-bit)", "Ubuntu 10.04");
- s_mapper.put("Ubuntu 10.10 (32-bit)", "Ubuntu 10.10");
- s_mapper.put("Ubuntu 10.10 (64-bit)", "Ubuntu 10.10");
- s_mapper.put("Ubuntu 9.10 (32-bit)", "Ubuntu 9.10");
- s_mapper.put("Ubuntu 9.10 (64-bit)", "Ubuntu 9.10");
- s_mapper.put("Ubuntu 9.04 (32-bit)", "Ubuntu 9.04");
- s_mapper.put("Ubuntu 9.04 (64-bit)", "Ubuntu 9.04");
- s_mapper.put("Ubuntu 8.10 (32-bit)", "Ubuntu 8.10");
- s_mapper.put("Ubuntu 8.10 (64-bit)", "Ubuntu 8.10");
- s_mapper.put("Ubuntu 8.04 (32-bit)", "Other Linux");
- s_mapper.put("Ubuntu 8.04 (64-bit)", "Other Linux");
- s_mapper.put("Debian GNU/Linux 5(32-bit)", "Debian GNU/Linux 5");
- s_mapper.put("Debian GNU/Linux 5(64-bit)", "Debian GNU/Linux 5");
- s_mapper.put("Debian GNU/Linux 4(32-bit)", "Debian GNU/Linux 4");
- s_mapper.put("Debian GNU/Linux 4(64-bit)", "Debian GNU/Linux 4");
- s_mapper.put("Debian GNU/Linux 6(64-bit)", "Debian GNU/Linux 6");
- s_mapper.put("Debian GNU/Linux 6(32-bit)", "Debian GNU/Linux 6");
- s_mapper.put("Other 2.6x Linux (32-bit)", "Other 2.6x Linux");
- s_mapper.put("Other 2.6x Linux (64-bit)", "Other 2.6x Linux");
- s_mapper.put("Other Linux (32-bit)", "Other Linux");
- s_mapper.put("Other Linux (64-bit)", "Other Linux");
- s_mapper.put("Other Ubuntu (32-bit)", "Other Linux");
- s_mapper.put("Other Ubuntu (64-bit)", "Other Linux");
- s_mapper.put("Asianux 3(32-bit)", "Other Linux");
- s_mapper.put("Asianux 3(64-bit)", "Other Linux");
- s_mapper.put("Windows 7 (32-bit)", "Windows 7");
- s_mapper.put("Windows 7 (64-bit)", "Windows 7");
- s_mapper.put("Windows Server 2003 Enterprise Edition(32-bit)",
- "Windows Server 2003");
- s_mapper.put("Windows Server 2003 Enterprise Edition(64-bit)",
- "Windows Server 2003");
- s_mapper.put("Windows Server 2003 DataCenter Edition(32-bit)",
- "Windows Server 2003");
- s_mapper.put("Windows Server 2003 DataCenter Edition(64-bit)",
- "Windows Server 2003");
- s_mapper.put("Windows Server 2003 Standard Edition(32-bit)",
- "Windows Server 2003");
- s_mapper.put("Windows Server 2003 Standard Edition(64-bit)",
- "Windows Server 2003");
- s_mapper.put("Windows Server 2003 Web Edition", "Windows Server 2003");
- s_mapper.put("Microsoft Small Bussiness Server 2003",
- "Windows Server 2003");
- s_mapper.put("Windows Server 2008 (32-bit)", "Windows Server 2008");
- s_mapper.put("Windows Server 2008 (64-bit)", "Windows Server 2008");
- s_mapper.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008");
- s_mapper.put("Windows 2000 Server SP4 (32-bit)", "Windows 2000");
- s_mapper.put("Windows 2000 Server", "Windows 2000");
- s_mapper.put("Windows 2000 Advanced Server", "Windows 2000");
- s_mapper.put("Windows 2000 Professional", "Windows 2000");
- s_mapper.put("Windows Vista (32-bit)", "Windows Vista");
- s_mapper.put("Windows Vista (64-bit)", "Windows Vista");
- s_mapper.put("Windows XP SP2 (32-bit)", "Windows XP");
- s_mapper.put("Windows XP SP3 (32-bit)", "Windows XP");
- s_mapper.put("Windows XP (32-bit)", "Windows XP");
- s_mapper.put("Windows XP (64-bit)", "Windows XP");
- s_mapper.put("Windows 98", "Windows 98");
- s_mapper.put("Windows 95", "Windows 95");
- s_mapper.put("Windows NT 4", "Windows NT");
- s_mapper.put("Windows 3.1", "Windows 3.1");
- s_mapper.put("Windows PV", "Other PV");
- s_mapper.put("Other PV (32-bit)", "Other PV");
- s_mapper.put("Other PV (64-bit)", "Other PV");
-
- }
-
- public static String getGuestOsName(String guestOsName) {
- String guestOS = s_mapper.get(guestOsName);
- if (guestOS == null) {
- s_logger.debug("Can't find the mapping of guest os: " + guestOsName);
- return "Other";
- } else {
- return guestOS;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7a0a9231/agent/src/com/cloud/agent/resource/computing/KVMHABase.java
----------------------------------------------------------------------
diff --git a/agent/src/com/cloud/agent/resource/computing/KVMHABase.java b/agent/src/com/cloud/agent/resource/computing/KVMHABase.java
deleted file mode 100644
index ed29a62..0000000
--- a/agent/src/com/cloud/agent/resource/computing/KVMHABase.java
+++ /dev/null
@@ -1,220 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.agent.resource.computing;
-
-import java.io.File;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-
-import org.libvirt.Connect;
-import org.libvirt.LibvirtException;
-import org.libvirt.StoragePool;
-import org.libvirt.StoragePoolInfo;
-import org.libvirt.StoragePoolInfo.StoragePoolState;
-
-import com.cloud.utils.script.OutputInterpreter;
-import com.cloud.utils.script.OutputInterpreter.AllLinesParser;
-import com.cloud.utils.script.Script;
-
-public class KVMHABase {
- private long _timeout = 60000; /* 1 minutes */
- protected static String _heartBeatPath;
- protected long _heartBeatUpdateTimeout = 60000;
- protected long _heartBeatUpdateFreq = 60000;
- protected long _heartBeatUpdateMaxRetry = 3;
-
- public static enum PoolType {
- PrimaryStorage, SecondaryStorage
- }
-
- public static class NfsStoragePool {
- String _poolUUID;
- String _poolIp;
- String _poolMountSourcePath;
- String _mountDestPath;
- PoolType _type;
-
- public NfsStoragePool(String poolUUID, String poolIp,
- String poolSourcePath, String mountDestPath, PoolType type) {
- this._poolUUID = poolUUID;
- this._poolIp = poolIp;
- this._poolMountSourcePath = poolSourcePath;
- this._mountDestPath = mountDestPath;
- this._type = type;
- }
- }
-
- protected String checkingMountPoint(NfsStoragePool pool, String poolName) {
- String mountSource = pool._poolIp + ":" + pool._poolMountSourcePath;
- String mountPaths = Script
- .runSimpleBashScript("cat /proc/mounts | grep " + mountSource);
- String destPath = pool._mountDestPath;
-
- if (mountPaths != null) {
- String token[] = mountPaths.split(" ");
- String mountType = token[2];
- String mountDestPath = token[1];
- if (mountType.equalsIgnoreCase("nfs")) {
- if (poolName != null && !mountDestPath.startsWith(destPath)) {
- /* we need to mount it under poolName */
- Script mount = new Script("/bin/bash", 60000);
- mount.add("-c");
- mount.add("mount " + mountSource + " " + destPath);
- String result = mount.execute();
- if (result != null) {
- destPath = null;
- }
- destroyVMs(destPath);
- } else if (poolName == null) {
- destPath = mountDestPath;
- }
- }
- } else {
- /* Can't find the mount point? */
- /* we need to mount it under poolName */
- if (poolName != null) {
- Script mount = new Script("/bin/bash", 60000);
- mount.add("-c");
- mount.add("mount " + mountSource + " " + destPath);
- String result = mount.execute();
- if (result != null) {
- destPath = null;
- }
-
- destroyVMs(destPath);
- }
- }
-
- return destPath;
- }
-
- protected String getMountPoint(NfsStoragePool storagePool) {
-
- StoragePool pool = null;
- String poolName = null;
- try {
- pool = LibvirtConnection.getConnection()
- .storagePoolLookupByUUIDString(storagePool._poolUUID);
- if (pool != null) {
- StoragePoolInfo spi = pool.getInfo();
- if (spi.state != StoragePoolState.VIR_STORAGE_POOL_RUNNING) {
- pool.create(0);
- } else {
- /*
- * Sometimes, the mount point is lost, even libvirt thinks
- * the storage pool still running
- */
- }
- }
- poolName = pool.getName();
- } catch (LibvirtException e) {
-
- } finally {
- try {
- if (pool != null) {
- pool.free();
- }
- } catch (LibvirtException e) {
-
- }
- }
-
- return checkingMountPoint(storagePool, poolName);
- }
-
- protected void destroyVMs(String mountPath) {
- /* if there are VMs using disks under this mount path, destroy them */
- Script cmd = new Script("/bin/bash", _timeout);
- cmd.add("-c");
- cmd.add("ps axu|grep qemu|grep " + mountPath + "* |awk '{print $2}'");
- AllLinesParser parser = new OutputInterpreter.AllLinesParser();
- String result = cmd.execute(parser);
-
- if (result != null) {
- return;
- }
-
- String pids[] = parser.getLines().split("\n");
- for (String pid : pids) {
- Script.runSimpleBashScript("kill -9 " + pid);
- }
- }
-
- protected String getHBFile(String mountPoint, String hostIP) {
- return mountPoint + File.separator + "KVMHA" + File.separator + "hb-"
- + hostIP;
- }
-
- protected String getHBFolder(String mountPoint) {
- return mountPoint + File.separator + "KVMHA" + File.separator;
- }
-
- protected String runScriptRetry(String cmdString,
- OutputInterpreter interpreter) {
- String result = null;
- for (int i = 0; i < 3; i++) {
- Script cmd = new Script("/bin/bash", _timeout);
- cmd.add("-c");
- cmd.add(cmdString);
- if (interpreter != null)
- result = cmd.execute(interpreter);
- else {
- result = cmd.execute();
- }
- if (result == Script.ERR_TIMEOUT) {
- continue;
- } else if (result == null) {
- break;
- }
- }
-
- return result;
- }
-
- public static void main(String[] args) {
-
- NfsStoragePool pool = new KVMHAMonitor.NfsStoragePool(null, null, null,
- null, PoolType.PrimaryStorage);
-
- KVMHAMonitor haWritter = new KVMHAMonitor(pool, "192.168.1.163", null);
- Thread ha = new Thread(haWritter);
- ha.start();
-
- KVMHAChecker haChecker = new KVMHAChecker(haWritter.getStoragePools(),
- "192.168.1.163");
-
- ExecutorService exe = Executors.newFixedThreadPool(1);
- Future<Boolean> future = exe.submit((Callable<Boolean>) haChecker);
- try {
- for (int i = 0; i < 10; i++) {
- System.out.println(future.get());
- future = exe.submit((Callable<Boolean>) haChecker);
- }
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (ExecutionException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7a0a9231/agent/src/com/cloud/agent/resource/computing/KVMHAChecker.java
----------------------------------------------------------------------
diff --git a/agent/src/com/cloud/agent/resource/computing/KVMHAChecker.java b/agent/src/com/cloud/agent/resource/computing/KVMHAChecker.java
deleted file mode 100644
index f5b8a32..0000000
--- a/agent/src/com/cloud/agent/resource/computing/KVMHAChecker.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.agent.resource.computing;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Callable;
-
-import org.apache.log4j.Logger;
-import org.libvirt.Connect;
-
-import com.cloud.utils.script.OutputInterpreter;
-import com.cloud.utils.script.Script;
-
-public class KVMHAChecker extends KVMHABase implements Callable<Boolean> {
- private static final Logger s_logger = Logger.getLogger(KVMHAChecker.class);
- private List<NfsStoragePool> _pools;
- private String _hostIP;
- private long _heartBeatCheckerTimeout = 360000; /* 6 minutes */
-
- public KVMHAChecker(List<NfsStoragePool> pools, String host) {
- this._pools = pools;
- this._hostIP = host;
- }
-
- /*
- * True means heartbeaing is on going, or we can't get it's status. False
- * means heartbeating is stopped definitely
- */
- private Boolean checkingHB() {
- List<Boolean> results = new ArrayList<Boolean>();
- for (NfsStoragePool pool : _pools) {
-
- Script cmd = new Script(_heartBeatPath, _heartBeatCheckerTimeout,
- s_logger);
- cmd.add("-i", pool._poolIp);
- cmd.add("-p", pool._poolMountSourcePath);
- cmd.add("-m", pool._mountDestPath);
- cmd.add("-h", _hostIP);
- cmd.add("-r");
- cmd.add("-t",
- String.valueOf(_heartBeatUpdateFreq/1000));
- OutputInterpreter.OneLineParser parser = new OutputInterpreter.OneLineParser();
- String result = cmd.execute(parser);
- s_logger.debug("pool: " + pool._poolIp);
- s_logger.debug("reture: " + result);
- s_logger.debug("parser: " + parser.getLine());
- if (result == null && parser.getLine().contains("> DEAD <")) {
- s_logger.debug("read heartbeat failed: " + result);
- results.add(false);
- } else {
- results.add(true);
- }
- }
-
- for (Boolean r : results) {
- if (r) {
- return true;
- }
- }
-
- return false;
- }
-
- @Override
- public Boolean call() throws Exception {
- // s_logger.addAppender(new org.apache.log4j.ConsoleAppender(new
- // org.apache.log4j.PatternLayout(), "System.out"));
- return checkingHB();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7a0a9231/agent/src/com/cloud/agent/resource/computing/KVMHAMonitor.java
----------------------------------------------------------------------
diff --git a/agent/src/com/cloud/agent/resource/computing/KVMHAMonitor.java b/agent/src/com/cloud/agent/resource/computing/KVMHAMonitor.java
deleted file mode 100644
index 09d5c83..0000000
--- a/agent/src/com/cloud/agent/resource/computing/KVMHAMonitor.java
+++ /dev/null
@@ -1,119 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.agent.resource.computing;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import org.apache.log4j.Logger;
-import com.cloud.utils.script.Script;
-
-public class KVMHAMonitor extends KVMHABase implements Runnable {
- private static final Logger s_logger = Logger.getLogger(KVMHAMonitor.class);
- private Map<String, NfsStoragePool> _storagePool = new ConcurrentHashMap<String, NfsStoragePool>();
-
- private String _hostIP; /* private ip address */
-
- public KVMHAMonitor(NfsStoragePool pool, String host, String scriptPath) {
- if (pool != null) {
- this._storagePool.put(pool._poolUUID, pool);
- }
- this._hostIP = host;
- this._heartBeatPath = scriptPath;
- }
-
- public void addStoragePool(NfsStoragePool pool) {
- synchronized (_storagePool) {
- this._storagePool.put(pool._poolUUID, pool);
- }
- }
-
- public void removeStoragePool(String uuid) {
- synchronized (_storagePool) {
- this._storagePool.remove(uuid);
- }
- }
-
- public List<NfsStoragePool> getStoragePools() {
- synchronized (_storagePool) {
- return new ArrayList<NfsStoragePool>(_storagePool.values());
- }
- }
-
- private class Monitor implements Runnable {
-
- @Override
- public void run() {
- synchronized (_storagePool) {
- for (NfsStoragePool primaryStoragePool : _storagePool.values()) {
- String result = null;
- for (int i = 0; i < 5; i++) {
- Script cmd = new Script(_heartBeatPath,
- _heartBeatUpdateTimeout, s_logger);
- cmd.add("-i", primaryStoragePool._poolIp);
- cmd.add("-p", primaryStoragePool._poolMountSourcePath);
- cmd.add("-m", primaryStoragePool._mountDestPath);
- cmd.add("-h", _hostIP);
- result = cmd.execute();
- if (result != null) {
- s_logger.warn("write heartbeat failed: " + result
- + ", retry: " + i);
- } else {
- break;
- }
- }
-
- if (result != null) {
- s_logger.warn("write heartbeat failed: " + result
- + "; reboot the host");
- Script cmd = new Script(_heartBeatPath,
- _heartBeatUpdateTimeout, s_logger);
- cmd.add("-i", primaryStoragePool._poolIp);
- cmd.add("-p", primaryStoragePool._poolMountSourcePath);
- cmd.add("-m", primaryStoragePool._mountDestPath);
- cmd.add("-c");
- result = cmd.execute();
- }
- }
- }
-
- }
- }
-
- @Override
- public void run() {
- // s_logger.addAppender(new org.apache.log4j.ConsoleAppender(new
- // org.apache.log4j.PatternLayout(), "System.out"));
- while (true) {
- Thread monitorThread = new Thread(new Monitor());
- monitorThread.start();
- try {
- monitorThread.join();
- } catch (InterruptedException e) {
-
- }
-
- try {
- Thread.sleep(_heartBeatUpdateFreq);
- } catch (InterruptedException e) {
-
- }
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7a0a9231/agent/src/com/cloud/agent/resource/computing/LibvirtCapXMLParser.java
----------------------------------------------------------------------
diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtCapXMLParser.java b/agent/src/com/cloud/agent/resource/computing/LibvirtCapXMLParser.java
deleted file mode 100644
index 4c5fa29..0000000
--- a/agent/src/com/cloud/agent/resource/computing/LibvirtCapXMLParser.java
+++ /dev/null
@@ -1,194 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.agent.resource.computing;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.ArrayList;
-
-import org.apache.log4j.Logger;
-import org.xml.sax.Attributes;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * @author chiradeep
- *
- */
-public class LibvirtCapXMLParser extends LibvirtXMLParser {
- private boolean _host = false;
- private boolean _guest = false;
- private boolean _osType = false;
- private boolean _domainTypeKVM = false;
- private boolean _emulatorFlag = false;
- private final StringBuffer _emulator = new StringBuffer();
- private final StringBuffer _capXML = new StringBuffer();
- private static final Logger s_logger = Logger
- .getLogger(LibvirtCapXMLParser.class);
- private final ArrayList<String> guestOsTypes = new ArrayList<String>();
-
- @Override
- public void endElement(String uri, String localName, String qName)
- throws SAXException {
- if (qName.equalsIgnoreCase("host")) {
- _host = false;
- } else if (qName.equalsIgnoreCase("os_type")) {
- _osType = false;
- } else if (qName.equalsIgnoreCase("guest")) {
- _guest = false;
- } else if (qName.equalsIgnoreCase("domain")) {
- _domainTypeKVM = false;
- } else if (qName.equalsIgnoreCase("emulator")) {
- _emulatorFlag = false;
-
- } else if (_host) {
- _capXML.append("<").append("/").append(qName).append(">");
- }
- }
-
- @Override
- public void characters(char[] ch, int start, int length)
- throws SAXException {
- if (_host) {
- _capXML.append(ch, start, length);
- } else if (_osType) {
- guestOsTypes.add(new String(ch, start, length));
- } else if (_emulatorFlag) {
- _emulator.append(ch, start, length);
- }
- }
-
- @Override
- public void startElement(String uri, String localName, String qName,
- Attributes attributes) throws SAXException {
- if (qName.equalsIgnoreCase("host")) {
- _host = true;
- } else if (qName.equalsIgnoreCase("guest")) {
- _guest = true;
- } else if (qName.equalsIgnoreCase("os_type")) {
- if (_guest) {
- _osType = true;
- }
- } else if (qName.equalsIgnoreCase("domain")) {
- for (int i = 0; i < attributes.getLength(); i++) {
- if (attributes.getQName(i).equalsIgnoreCase("type")
- && attributes.getValue(i).equalsIgnoreCase("kvm")) {
- _domainTypeKVM = true;
- }
- }
- } else if (qName.equalsIgnoreCase("emulator") && _domainTypeKVM) {
- _emulatorFlag = true;
- _emulator.delete(0, _emulator.length());
- } else if (_host) {
- _capXML.append("<").append(qName);
- for (int i = 0; i < attributes.getLength(); i++) {
- _capXML.append(" ").append(attributes.getQName(i)).append("=")
- .append(attributes.getValue(i));
- }
- _capXML.append(">");
- }
-
- }
-
- public String parseCapabilitiesXML(String capXML) {
- if (!_initialized) {
- return null;
- }
- try {
- _sp.parse(new InputSource(new StringReader(capXML)), this);
- return _capXML.toString();
- } catch (SAXException se) {
- s_logger.warn(se.getMessage());
- } catch (IOException ie) {
- s_logger.error(ie.getMessage());
- }
- return null;
- }
-
- public ArrayList<String> getGuestOsType() {
- return guestOsTypes;
- }
-
- public String getEmulator() {
- return _emulator.toString();
- }
-
- public static void main(String[] args) {
- String capXML = "<capabilities>" + " <host>" + " <cpu>"
- + " <arch>x86_64</arch>" + " <model>core2duo</model>"
- + " <topology sockets='1' cores='2' threads='1'/>"
- + " <feature name='lahf_lm'/>"
- + " <feature name='xtpr'/>"
- + " <feature name='cx16'/>"
- + " <feature name='tm2'/>" + " <feature name='est'/>"
- + " <feature name='vmx'/>"
- + " <feature name='ds_cpl'/>"
- + " <feature name='pbe'/>" + " <feature name='tm'/>"
- + " <feature name='ht'/>" + " <feature name='ss'/>"
- + " <feature name='acpi'/>" + " <feature name='ds'/>"
- + " </cpu>" + " <migration_features>" + " <live/>"
- + " <uri_transports>"
- + " <uri_transport>tcp</uri_transport>"
- + " </uri_transports>" + " </migration_features>"
- + " <topology>" + " <cells num='1'>"
- + " <cell id='0'>" + " <cpus num='2'>"
- + " <cpu id='0'/>" + " <cpu id='1'/>"
- + " </cpus>" + " </cell>" + " </cells>"
- + " </topology>" + " </host>" + "" + " <guest>"
- + " <os_type>hvm</os_type>" + " <arch name='i686'>"
- + " <wordsize>32</wordsize>"
- + " <emulator>/usr/bin/qemu</emulator>"
- + " <machine>pc-0.11</machine>"
- + " <machine canonical='pc-0.11'>pc</machine>"
- + " <machine>pc-0.10</machine>"
- + " <machine>isapc</machine>"
- + " <domain type='qemu'>" + " </domain>"
- + " <domain type='kvm'>"
- + " <emulator>/usr/bin/qemu-kvm</emulator>"
- + " <machine>pc-0.11</machine>"
- + " <machine canonical='pc-0.11'>pc</machine>"
- + " <machine>pc-0.10</machine>"
- + " <machine>isapc</machine>" + " </domain>"
- + " </arch>" + " <features>" + " <cpuselection/>"
- + " <pae/>" + " <nonpae/>"
- + " <acpi default='on' toggle='yes'/>"
- + " <apic default='on' toggle='no'/>" + " </features>"
- + " </guest>" + " <guest>" + " <os_type>hvm</os_type>"
- + " <arch name='x86_64'>" + " <wordsize>64</wordsize>"
- + " <emulator>/usr/bin/qemu-system-x86_64</emulator>"
- + " <machine>pc-0.11</machine>"
- + " <machine canonical='pc-0.11'>pc</machine>"
- + " <machine>pc-0.10</machine>"
- + " <machine>isapc</machine>"
- + " <domain type='qemu'>" + " </domain>"
- + " <domain type='kvm'>"
- + " <emulator>/usr/bin/qemu-kvm</emulator>"
- + " <machine>pc-0.11</machine>"
- + " <machine canonical='pc-0.11'>pc</machine>"
- + " <machine>pc-0.10</machine>"
- + " <machine>isapc</machine>" + " </domain>"
- + " </arch>" + " <features>" + " <cpuselection/>"
- + " <acpi default='on' toggle='yes'/>"
- + " <apic default='on' toggle='no'/>" + " </features>"
- + " </guest>" + "</capabilities>";
-
- LibvirtCapXMLParser parser = new LibvirtCapXMLParser();
- String cap = parser.parseCapabilitiesXML(capXML);
- System.out.println(parser.getGuestOsType());
- System.out.println(parser.getEmulator());
- }
-}