You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ah...@apache.org on 2012/09/18 00:32:02 UTC
[6/20] git commit: simulator managers commit to simulator db
simulator managers commit to simulator db
All the simulator related managers will persist to a seperate database
from `cloud`. Moving related transaction code. Transction responsibilty
will be at simulator agent's dao layer
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/efc58cde
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/efc58cde
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/efc58cde
Branch: refs/heads/javelin
Commit: efc58cdea3917b0b7e88240c03d51c2a2e64a62e
Parents: 4bf16f8
Author: Prasanna Santhanam <Pr...@citrix.com>
Authored: Thu Aug 23 21:14:13 2012 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Mon Sep 17 17:33:26 2012 +0530
----------------------------------------------------------------------
agent-simulator/db/create-schema-simulator.sql | 89 -
.../com/cloud/agent/manager/MockAgentManager.java | 40 +-
.../cloud/agent/manager/MockAgentManagerImpl.java | 703 ++++---
.../agent/manager/MockStorageManagerImpl.java | 1835 ++++++++++-----
.../com/cloud/agent/manager/MockVmManagerImpl.java | 307 ++-
.../cloud/agent/manager/SimulatorManagerImpl.java | 83 +-
.../cloud/simulator/SimulatorRuntimeException.java | 24 +
7 files changed, 1908 insertions(+), 1173 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/efc58cde/agent-simulator/db/create-schema-simulator.sql
----------------------------------------------------------------------
diff --git a/agent-simulator/db/create-schema-simulator.sql b/agent-simulator/db/create-schema-simulator.sql
deleted file mode 100644
index 09da344..0000000
--- a/agent-simulator/db/create-schema-simulator.sql
+++ /dev/null
@@ -1,89 +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.
-DROP TABLE IF EXISTS `cloud`.`mockhost`;
-DROP TABLE IF EXISTS `cloud`.`mocksecstorage`;
-DROP TABLE IF EXISTS `cloud`.`mockstoragepool`;
-DROP TABLE IF EXISTS `cloud`.`mockvm`;
-DROP TABLE IF EXISTS `cloud`.`mockvolume`;
-
-CREATE TABLE `cloud`.`mockhost` (
- `id` bigint unsigned NOT NULL auto_increment,
- `name` varchar(255) NOT NULL,
- `private_ip_address` char(40),
- `private_mac_address` varchar(17),
- `private_netmask` varchar(15),
- `storage_ip_address` char(40),
- `storage_netmask` varchar(15),
- `storage_mac_address` varchar(17),
- `public_ip_address` char(40),
- `public_netmask` varchar(15),
- `public_mac_address` varchar(17),
- `guid` varchar(255) UNIQUE,
- `version` varchar(40) NOT NULL,
- `data_center_id` bigint unsigned NOT NULL,
- `pod_id` bigint unsigned,
- `cluster_id` bigint unsigned COMMENT 'foreign key to cluster',
- `cpus` int(10) unsigned,
- `speed` int(10) unsigned,
- `ram` bigint unsigned,
- `capabilities` varchar(255) COMMENT 'host capabilities in comma separated list',
- `vm_id` bigint unsigned,
- `resource` varchar(255) DEFAULT NULL COMMENT 'If it is a local resource, this is the class name',
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `cloud`.`mocksecstorage` (
- `id` bigint unsigned NOT NULL auto_increment,
- `url` varchar(255),
- `capacity` bigint unsigned,
- `mount_point` varchar(255),
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `cloud`.`mockstoragepool` (
- `id` bigint unsigned NOT NULL auto_increment,
- `guid` varchar(255),
- `mount_point` varchar(255),
- `capacity` bigint,
- `pool_type` varchar(40),
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-
-CREATE TABLE `cloud`.`mockvm` (
- `id` bigint unsigned NOT NULL auto_increment,
- `name` varchar(255),
- `host_id` bigint unsigned,
- `type` varchar(40),
- `state` varchar(40),
- `vnc_port` bigint unsigned,
- `memory` bigint unsigned,
- `cpu` bigint unsigned,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-
-CREATE TABLE `cloud`.`mockvolume` (
- `id` bigint unsigned NOT NULL auto_increment,
- `name` varchar(255),
- `size` bigint unsigned,
- `path` varchar(255),
- `pool_id` bigint unsigned,
- `type` varchar(40),
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/efc58cde/agent-simulator/src/com/cloud/agent/manager/MockAgentManager.java
----------------------------------------------------------------------
diff --git a/agent-simulator/src/com/cloud/agent/manager/MockAgentManager.java b/agent-simulator/src/com/cloud/agent/manager/MockAgentManager.java
index 9932173..7db5b20 100644
--- a/agent-simulator/src/com/cloud/agent/manager/MockAgentManager.java
+++ b/agent-simulator/src/com/cloud/agent/manager/MockAgentManager.java
@@ -33,28 +33,34 @@ import com.cloud.simulator.MockHost;
import com.cloud.utils.component.Manager;
public interface MockAgentManager extends Manager {
- public static final long DEFAULT_HOST_MEM_SIZE = 8 * 1024 * 1024 * 1024L; // 8G, unit of
- // Mbytes
- public static final int DEFAULT_HOST_CPU_CORES = 4; // 2 dual core CPUs (2 x
- // 2)
- public static final int DEFAULT_HOST_SPEED_MHZ = 8000; // 1 GHz CPUs
- boolean configure(String name, Map<String, Object> params) throws ConfigurationException;
+ public static final long DEFAULT_HOST_MEM_SIZE = 8 * 1024 * 1024 * 1024L; // 8G,
+ // unit
+ // of
+ // Mbytes
+ public static final int DEFAULT_HOST_CPU_CORES = 4; // 2 dual core CPUs (2 x
+ // 2)
+ public static final int DEFAULT_HOST_SPEED_MHZ = 8000; // 1 GHz CPUs
- Map<AgentResourceBase, Map<String, String>> createServerResources(Map<String, Object> params);
+ boolean configure(String name, Map<String, Object> params) throws ConfigurationException;
- boolean handleSystemVMStart(long vmId, String privateIpAddress, String privateMacAddress, String privateNetMask, long dcId, long podId, String name, String vmType, String url);
+ Map<AgentResourceBase, Map<String, String>> createServerResources(Map<String, Object> params);
- boolean handleSystemVMStop(long vmId);
+ boolean handleSystemVMStart(long vmId, String privateIpAddress, String privateMacAddress, String privateNetMask,
+ long dcId, long podId, String name, String vmType, String url);
- GetHostStatsAnswer getHostStatistic(GetHostStatsCommand cmd);
- Answer checkHealth(CheckHealthCommand cmd);
- Answer pingTest(PingTestCommand cmd);
-
- Answer prepareForMigrate(PrepareForMigrationCommand cmd);
-
- MockHost getHost(String guid);
+ boolean handleSystemVMStop(long vmId);
- Answer maintain(MaintainCommand cmd);
+ GetHostStatsAnswer getHostStatistic(GetHostStatsCommand cmd);
+
+ Answer checkHealth(CheckHealthCommand cmd);
+
+ Answer pingTest(PingTestCommand cmd);
+
+ Answer prepareForMigrate(PrepareForMigrationCommand cmd);
+
+ MockHost getHost(String guid);
+
+ Answer maintain(MaintainCommand cmd);
Answer checkNetworkCommand(CheckNetworkCommand cmd);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/efc58cde/agent-simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java
----------------------------------------------------------------------
diff --git a/agent-simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java b/agent-simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java
index 0dd8f05..cb99297 100755
--- a/agent-simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java
+++ b/agent-simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java
@@ -61,321 +61,408 @@ import com.cloud.utils.Pair;
import com.cloud.utils.component.Inject;
import com.cloud.utils.concurrency.NamedThreadFactory;
import com.cloud.utils.db.DB;
+import com.cloud.utils.db.Transaction;
+import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.net.NetUtils;
@Local(value = { MockAgentManager.class })
public class MockAgentManagerImpl implements MockAgentManager {
- private static final Logger s_logger = Logger.getLogger(MockAgentManagerImpl.class);
- @Inject HostPodDao _podDao = null;
- @Inject MockHostDao _mockHostDao = null;
- @Inject MockVMDao _mockVmDao = null;
- @Inject SimulatorManager _simulatorMgr = null;
- @Inject AgentManager _agentMgr = null;
- @Inject MockStorageManager _storageMgr = null;
- @Inject ResourceManager _resourceMgr;
- private SecureRandom random;
- private Map<String, AgentResourceBase> _resources = new ConcurrentHashMap<String, AgentResourceBase>();
- private ThreadPoolExecutor _executor;
-
- private Pair<String, Long> getPodCidr(long podId, long dcId) {
- try {
-
- HashMap<Long, List<Object>> podMap = _podDao
- .getCurrentPodCidrSubnets(dcId, 0);
- List<Object> cidrPair = podMap.get(podId);
- String cidrAddress = (String) cidrPair.get(0);
- Long cidrSize = (Long)cidrPair.get(1);
- return new Pair<String, Long>(cidrAddress, cidrSize);
- } catch (PatternSyntaxException e) {
- s_logger.error("Exception while splitting pod cidr");
- return null;
- } catch(IndexOutOfBoundsException e) {
- s_logger.error("Invalid pod cidr. Please check");
- return null;
- }
- }
-
-
- private String getIpAddress(long instanceId, long dcId, long podId) {
- Pair<String, Long> cidr = this.getPodCidr(podId, dcId);
- return NetUtils.long2Ip(NetUtils.ip2Long(cidr.first()) + instanceId);
- }
-
- private String getMacAddress(long dcId, long podId, long clusterId, int instanceId) {
- return NetUtils.long2Mac((dcId << 40 + podId << 32 + clusterId << 24 + instanceId));
- }
- public synchronized int getNextAgentId(long cidrSize) {
- return random.nextInt((int)cidrSize);
- }
-
- @Override
- @DB
- public Map<AgentResourceBase, Map<String, String>> createServerResources(
- Map<String, Object> params) {
-
- Map<String, String> args = new HashMap<String, String>();
- Map<AgentResourceBase, Map<String,String>> newResources = new HashMap<AgentResourceBase, Map<String,String>>();
- AgentResourceBase agentResource;
- long cpuCore = Long.parseLong((String)params.get("cpucore"));
- long cpuSpeed = Long.parseLong((String)params.get("cpuspeed"));
- long memory = Long.parseLong((String)params.get("memory"));
- long localStorageSize = Long.parseLong((String)params.get("localstorage"));
- synchronized (this) {
- long dataCenterId = Long.parseLong((String)params.get("zone"));
- long podId = Long.parseLong((String)params.get("pod"));
- long clusterId = Long.parseLong((String)params.get("cluster"));
- long cidrSize = getPodCidr(podId, dataCenterId).second();
-
- int agentId = getNextAgentId(cidrSize);
- String ipAddress = getIpAddress(agentId, dataCenterId, podId);
- String macAddress = getMacAddress(dataCenterId, podId, clusterId, agentId);
- MockHostVO mockHost = new MockHostVO();
- mockHost.setDataCenterId(dataCenterId);
- mockHost.setPodId(podId);
- mockHost.setClusterId(clusterId);
- mockHost.setCapabilities("hvm");
- mockHost.setCpuCount(cpuCore);
- mockHost.setCpuSpeed(cpuSpeed);
- mockHost.setMemorySize(memory);
- String guid = UUID.randomUUID().toString();
- mockHost.setGuid(guid);
- mockHost.setName("SimulatedAgent." + guid);
- mockHost.setPrivateIpAddress(ipAddress);
- mockHost.setPublicIpAddress(ipAddress);
- mockHost.setStorageIpAddress(ipAddress);
- mockHost.setPrivateMacAddress(macAddress);
- mockHost.setPublicMacAddress(macAddress);
- mockHost.setStorageMacAddress(macAddress);
- mockHost.setVersion(this.getClass().getPackage().getImplementationVersion());
- mockHost.setResource("com.cloud.agent.AgentRoutingResource");
- mockHost = _mockHostDao.persist(mockHost);
-
- _storageMgr.getLocalStorage(guid, localStorageSize);
-
- agentResource = new AgentRoutingResource();
- if (agentResource != null) {
- try {
- params.put("guid", mockHost.getGuid());
- agentResource.start();
- agentResource.configure(mockHost.getName(),
- params);
-
- newResources.put(agentResource, args);
- } catch (ConfigurationException e) {
- s_logger
- .error("error while configuring server resource"
- + e.getMessage());
- }
- }
- }
- return newResources;
- }
-
-
- @Override
- public boolean configure(String name, Map<String, Object> params)
- throws ConfigurationException {
- try {
- random = SecureRandom.getInstance("SHA1PRNG");
- _executor = new ThreadPoolExecutor(1, 5, 1, TimeUnit.DAYS, new LinkedBlockingQueue<Runnable>(), new NamedThreadFactory("Simulator-Agent-Mgr"));
- //ComponentLocator locator = ComponentLocator.getCurrentLocator();
- //_simulatorMgr = (SimulatorManager) locator.getComponent(SimulatorManager.Name);
- } catch (NoSuchAlgorithmException e) {
- s_logger.debug("Failed to initialize random:" + e.toString());
- return false;
- }
- return true;
- }
-
- @Override
- public boolean handleSystemVMStart(long vmId, String privateIpAddress, String privateMacAddress, String privateNetMask, long dcId, long podId, String name, String vmType, String url) {
- _executor.execute(new SystemVMHandler(vmId, privateIpAddress, privateMacAddress, privateNetMask, dcId, podId, name, vmType, _simulatorMgr, url));
- return true;
- }
-
- @Override
- public boolean handleSystemVMStop(long vmId) {
- _executor.execute(new SystemVMHandler(vmId));
- return true;
- }
-
- private class SystemVMHandler implements Runnable {
- private long vmId;
- private String privateIpAddress;
- private String privateMacAddress;
- private String privateNetMask;
- private long dcId;
- private long podId;
- private String guid;
- private String name;
- private String vmType;
- private SimulatorManager mgr;
- private String mode;
- private String url;
- public SystemVMHandler(long vmId, String privateIpAddress, String privateMacAddress, String privateNetMask, long dcId, long podId, String name, String vmType,
- SimulatorManager mgr, String url) {
- this.vmId = vmId;
- this.privateIpAddress = privateIpAddress;
- this.privateMacAddress = privateMacAddress;
- this.privateNetMask = privateNetMask;
- this.dcId = dcId;
- this.guid = "SystemVM-" + UUID.randomUUID().toString();
- this.name = name;
- this.vmType = vmType;
- this.mgr = mgr;
- this.mode = "Start";
- this.url = url;
- this.podId = podId;
- }
-
- public SystemVMHandler(long vmId) {
- this.vmId = vmId;
- this.mode = "Stop";
- }
-
- @Override
- @DB
- public void run() {
- if (this.mode.equalsIgnoreCase("Stop")) {
- MockHost host = _mockHostDao.findByVmId(this.vmId);
- if (host != null) {
- String guid = host.getGuid();
- if (guid != null) {
- AgentResourceBase res = _resources.get(guid);
- if (res != null) {
- res.stop();
- _resources.remove(guid);
- }
- }
- }
- return;
- }
-
- String resource = null;
- if (vmType.equalsIgnoreCase("secstorage")) {
- resource = "com.cloud.agent.AgentStorageResource";
- }
- MockHostVO mockHost = new MockHostVO();
- mockHost.setDataCenterId(this.dcId);
- mockHost.setPodId(this.podId);
- mockHost.setCpuCount(DEFAULT_HOST_CPU_CORES);
- mockHost.setCpuSpeed(DEFAULT_HOST_SPEED_MHZ);
- mockHost.setMemorySize(DEFAULT_HOST_MEM_SIZE);
- mockHost.setGuid(this.guid);
- mockHost.setName(name);
- mockHost.setPrivateIpAddress(this.privateIpAddress);
- mockHost.setPublicIpAddress(this.privateIpAddress);
- mockHost.setStorageIpAddress(this.privateIpAddress);
- mockHost.setPrivateMacAddress(this.privateMacAddress);
- mockHost.setPublicMacAddress(this.privateMacAddress);
- mockHost.setStorageMacAddress(this.privateMacAddress);
- mockHost.setVersion(this.getClass().getPackage().getImplementationVersion());
- mockHost.setResource(resource);
- mockHost.setVmId(vmId);
- mockHost = _mockHostDao.persist(mockHost);
-
- if (vmType.equalsIgnoreCase("secstorage")) {
- AgentStorageResource storageResource = new AgentStorageResource();
- try {
- Map<String, Object> params = new HashMap<String, Object>();
- Map<String, String> details = new HashMap<String, String>();
- params.put("guid", this.guid);
- details.put("guid", this.guid);
- storageResource.configure("secondaryStorage", params);
- storageResource.start();
- //on the simulator the ssvm is as good as a direct agent
- _resourceMgr.addHost(mockHost.getDataCenterId(), storageResource, Host.Type.SecondaryStorageVM, details);
- _resources.put(this.guid, storageResource);
- } catch (ConfigurationException e) {
- s_logger.debug("Failed to load secondary storage resource: " + e.toString());
- return;
- }
- }
- }
- }
-
- @Override
- public MockHost getHost(String guid) {
- return _mockHostDao.findByGuid(guid);
- }
-
- @Override
- public GetHostStatsAnswer getHostStatistic(GetHostStatsCommand cmd) {
- String hostGuid = cmd.getHostGuid();
- MockHost host = _mockHostDao.findByGuid(hostGuid);
- if (host == null) {
- return null;
- }
- List<MockVMVO> vms = _mockVmDao.findByHostId(host.getId());
- double usedMem = 0.0;
- double usedCpu = 0.0;
- for (MockVMVO vm : vms) {
- usedMem += vm.getMemory();
- usedCpu += vm.getCpu();
- }
-
- HostStatsEntry hostStats = new HostStatsEntry();
- hostStats.setTotalMemoryKBs(host.getMemorySize());
- hostStats.setFreeMemoryKBs(host.getMemorySize() - usedMem);
- hostStats.setNetworkReadKBs(32768);
- hostStats.setNetworkWriteKBs(16384);
- hostStats.setCpuUtilization(usedCpu/(host.getCpuCount() * host.getCpuSpeed()));
- hostStats.setEntityType("simulator-host");
- hostStats.setHostId(cmd.getHostId());
- return new GetHostStatsAnswer(cmd, hostStats);
- }
-
-
- @Override
- public Answer checkHealth(CheckHealthCommand cmd) {
- return new Answer(cmd);
- }
-
-
- @Override
- public Answer pingTest(PingTestCommand cmd) {
- return new Answer(cmd);
- }
-
-
- @Override
- public PrepareForMigrationAnswer prepareForMigrate(PrepareForMigrationCommand cmd) {
- VirtualMachineTO vm = cmd.getVirtualMachine();
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Preparing host for migrating " + vm);
- }
- return new PrepareForMigrationAnswer(cmd);
- }
-
-
- @Override
- public boolean start() {
- return true;
- }
-
-
- @Override
- public boolean stop() {
- return true;
- }
-
-
- @Override
- public String getName() {
- return this.getClass().getSimpleName();
- }
-
-
- @Override
- public MaintainAnswer maintain(com.cloud.agent.api.MaintainCommand cmd) {
- return new MaintainAnswer(cmd);
- }
+ private static final Logger s_logger = Logger.getLogger(MockAgentManagerImpl.class);
+ @Inject
+ HostPodDao _podDao = null;
+ @Inject
+ MockHostDao _mockHostDao = null;
+ @Inject
+ MockVMDao _mockVmDao = null;
+ @Inject
+ SimulatorManager _simulatorMgr = null;
+ @Inject
+ AgentManager _agentMgr = null;
+ @Inject
+ MockStorageManager _storageMgr = null;
+ @Inject
+ ResourceManager _resourceMgr;
+ private SecureRandom random;
+ private Map<String, AgentResourceBase> _resources = new ConcurrentHashMap<String, AgentResourceBase>();
+ private ThreadPoolExecutor _executor;
+
+ private Pair<String, Long> getPodCidr(long podId, long dcId) {
+ try {
+
+ HashMap<Long, List<Object>> podMap = _podDao.getCurrentPodCidrSubnets(dcId, 0);
+ List<Object> cidrPair = podMap.get(podId);
+ String cidrAddress = (String) cidrPair.get(0);
+ Long cidrSize = (Long) cidrPair.get(1);
+ return new Pair<String, Long>(cidrAddress, cidrSize);
+ } catch (PatternSyntaxException e) {
+ s_logger.error("Exception while splitting pod cidr");
+ return null;
+ } catch (IndexOutOfBoundsException e) {
+ s_logger.error("Invalid pod cidr. Please check");
+ return null;
+ }
+ }
+
+ private String getIpAddress(long instanceId, long dcId, long podId) {
+ Pair<String, Long> cidr = this.getPodCidr(podId, dcId);
+ return NetUtils.long2Ip(NetUtils.ip2Long(cidr.first()) + instanceId);
+ }
+
+ private String getMacAddress(long dcId, long podId, long clusterId, int instanceId) {
+ return NetUtils.long2Mac((dcId << 40 + podId << 32 + clusterId << 24 + instanceId));
+ }
+
+ public synchronized int getNextAgentId(long cidrSize) {
+ return random.nextInt((int) cidrSize);
+ }
+
+ @Override
+ @DB
+ public Map<AgentResourceBase, Map<String, String>> createServerResources(Map<String, Object> params) {
+
+ Map<String, String> args = new HashMap<String, String>();
+ Map<AgentResourceBase, Map<String, String>> newResources = new HashMap<AgentResourceBase, Map<String, String>>();
+ AgentResourceBase agentResource;
+ long cpuCore = Long.parseLong((String) params.get("cpucore"));
+ long cpuSpeed = Long.parseLong((String) params.get("cpuspeed"));
+ long memory = Long.parseLong((String) params.get("memory"));
+ long localStorageSize = Long.parseLong((String) params.get("localstorage"));
+ synchronized (this) {
+ long dataCenterId = Long.parseLong((String) params.get("zone"));
+ long podId = Long.parseLong((String) params.get("pod"));
+ long clusterId = Long.parseLong((String) params.get("cluster"));
+ long cidrSize = getPodCidr(podId, dataCenterId).second();
+
+ int agentId = getNextAgentId(cidrSize);
+ String ipAddress = getIpAddress(agentId, dataCenterId, podId);
+ String macAddress = getMacAddress(dataCenterId, podId, clusterId, agentId);
+ MockHostVO mockHost = new MockHostVO();
+ mockHost.setDataCenterId(dataCenterId);
+ mockHost.setPodId(podId);
+ mockHost.setClusterId(clusterId);
+ mockHost.setCapabilities("hvm");
+ mockHost.setCpuCount(cpuCore);
+ mockHost.setCpuSpeed(cpuSpeed);
+ mockHost.setMemorySize(memory);
+ String guid = UUID.randomUUID().toString();
+ mockHost.setGuid(guid);
+ mockHost.setName("SimulatedAgent." + guid);
+ mockHost.setPrivateIpAddress(ipAddress);
+ mockHost.setPublicIpAddress(ipAddress);
+ mockHost.setStorageIpAddress(ipAddress);
+ mockHost.setPrivateMacAddress(macAddress);
+ mockHost.setPublicMacAddress(macAddress);
+ mockHost.setStorageMacAddress(macAddress);
+ mockHost.setVersion(this.getClass().getPackage().getImplementationVersion());
+ mockHost.setResource("com.cloud.agent.AgentRoutingResource");
+
+ Transaction txn = Transaction.open(Transaction.SIMULATOR_DB);
+ try {
+ txn.start();
+ mockHost = _mockHostDao.persist(mockHost);
+ txn.commit();
+ } catch (Exception ex) {
+ txn.rollback();
+ s_logger.error("Error while configuring mock agent " + ex.getMessage());
+ throw new CloudRuntimeException("Error configuring agent", ex);
+ } finally {
+ txn.close();
+ txn = Transaction.open(Transaction.CLOUD_DB);
+ txn.close();
+ }
+
+ _storageMgr.getLocalStorage(guid, localStorageSize);
+
+ agentResource = new AgentRoutingResource();
+ if (agentResource != null) {
+ try {
+ params.put("guid", mockHost.getGuid());
+ agentResource.start();
+ agentResource.configure(mockHost.getName(), params);
+
+ newResources.put(agentResource, args);
+ } catch (ConfigurationException e) {
+ s_logger.error("error while configuring server resource" + e.getMessage());
+ }
+ }
+ }
+ return newResources;
+ }
+
+ @Override
+ public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
+ try {
+ random = SecureRandom.getInstance("SHA1PRNG");
+ _executor = new ThreadPoolExecutor(1, 5, 1, TimeUnit.DAYS, new LinkedBlockingQueue<Runnable>(),
+ new NamedThreadFactory("Simulator-Agent-Mgr"));
+ // ComponentLocator locator = ComponentLocator.getCurrentLocator();
+ // _simulatorMgr = (SimulatorManager)
+ // locator.getComponent(SimulatorManager.Name);
+ } catch (NoSuchAlgorithmException e) {
+ s_logger.debug("Failed to initialize random:" + e.toString());
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public boolean handleSystemVMStart(long vmId, String privateIpAddress, String privateMacAddress,
+ String privateNetMask, long dcId, long podId, String name, String vmType, String url) {
+ _executor.execute(new SystemVMHandler(vmId, privateIpAddress, privateMacAddress, privateNetMask, dcId, podId,
+ name, vmType, _simulatorMgr, url));
+ return true;
+ }
+
+ @Override
+ public boolean handleSystemVMStop(long vmId) {
+ _executor.execute(new SystemVMHandler(vmId));
+ return true;
+ }
+
+ private class SystemVMHandler implements Runnable {
+ private long vmId;
+ private String privateIpAddress;
+ private String privateMacAddress;
+ private String privateNetMask;
+ private long dcId;
+ private long podId;
+ private String guid;
+ private String name;
+ private String vmType;
+ private SimulatorManager mgr;
+ private String mode;
+ private String url;
+
+ public SystemVMHandler(long vmId, String privateIpAddress, String privateMacAddress, String privateNetMask,
+ long dcId, long podId, String name, String vmType, SimulatorManager mgr, String url) {
+ this.vmId = vmId;
+ this.privateIpAddress = privateIpAddress;
+ this.privateMacAddress = privateMacAddress;
+ this.privateNetMask = privateNetMask;
+ this.dcId = dcId;
+ this.guid = "SystemVM-" + UUID.randomUUID().toString();
+ this.name = name;
+ this.vmType = vmType;
+ this.mgr = mgr;
+ this.mode = "Start";
+ this.url = url;
+ this.podId = podId;
+ }
+
+ public SystemVMHandler(long vmId) {
+ this.vmId = vmId;
+ this.mode = "Stop";
+ }
+
+ @Override
+ @DB
+ public void run() {
+
+ Transaction txn = Transaction.open(Transaction.SIMULATOR_DB);
+ try {
+ if (this.mode.equalsIgnoreCase("Stop")) {
+ txn.start();
+ MockHost host = _mockHostDao.findByVmId(this.vmId);
+ if (host != null) {
+ String guid = host.getGuid();
+ if (guid != null) {
+ AgentResourceBase res = _resources.get(guid);
+ if (res != null) {
+ res.stop();
+ _resources.remove(guid);
+ }
+ }
+ }
+ txn.commit();
+ return;
+ }
+ } catch (Exception ex) {
+ txn.rollback();
+ throw new CloudRuntimeException("Unable to get host " + guid + " due to " + ex.getMessage(), ex);
+ } finally {
+ txn.close();
+ txn = Transaction.open(Transaction.CLOUD_DB);
+ txn.close();
+ }
+
+ String resource = null;
+ if (vmType.equalsIgnoreCase("secstorage")) {
+ resource = "com.cloud.agent.AgentStorageResource";
+ }
+ MockHostVO mockHost = new MockHostVO();
+ mockHost.setDataCenterId(this.dcId);
+ mockHost.setPodId(this.podId);
+ mockHost.setCpuCount(DEFAULT_HOST_CPU_CORES);
+ mockHost.setCpuSpeed(DEFAULT_HOST_SPEED_MHZ);
+ mockHost.setMemorySize(DEFAULT_HOST_MEM_SIZE);
+ mockHost.setGuid(this.guid);
+ mockHost.setName(name);
+ mockHost.setPrivateIpAddress(this.privateIpAddress);
+ mockHost.setPublicIpAddress(this.privateIpAddress);
+ mockHost.setStorageIpAddress(this.privateIpAddress);
+ mockHost.setPrivateMacAddress(this.privateMacAddress);
+ mockHost.setPublicMacAddress(this.privateMacAddress);
+ mockHost.setStorageMacAddress(this.privateMacAddress);
+ mockHost.setVersion(this.getClass().getPackage().getImplementationVersion());
+ mockHost.setResource(resource);
+ mockHost.setVmId(vmId);
+ Transaction simtxn = Transaction.open(Transaction.SIMULATOR_DB);
+ try {
+ simtxn.start();
+ mockHost = _mockHostDao.persist(mockHost);
+ simtxn.commit();
+ } catch (Exception ex) {
+ simtxn.rollback();
+ throw new CloudRuntimeException("Unable to persist host " + mockHost.getGuid() + " due to "
+ + ex.getMessage(), ex);
+ } finally {
+ simtxn.close();
+ simtxn = Transaction.open(Transaction.CLOUD_DB);
+ simtxn.close();
+ }
+
+ if (vmType.equalsIgnoreCase("secstorage")) {
+ AgentStorageResource storageResource = new AgentStorageResource();
+ try {
+ Map<String, Object> params = new HashMap<String, Object>();
+ Map<String, String> details = new HashMap<String, String>();
+ params.put("guid", this.guid);
+ details.put("guid", this.guid);
+ storageResource.configure("secondaryStorage", params);
+ storageResource.start();
+ // on the simulator the ssvm is as good as a direct
+ // agent
+ _resourceMgr.addHost(mockHost.getDataCenterId(), storageResource, Host.Type.SecondaryStorageVM,
+ details);
+ _resources.put(this.guid, storageResource);
+ } catch (ConfigurationException e) {
+ s_logger.debug("Failed to load secondary storage resource: " + e.toString());
+ return;
+ }
+ }
+ }
+ }
+
+ @Override
+ public MockHost getHost(String guid) {
+ Transaction txn = Transaction.open(Transaction.SIMULATOR_DB);
+ try {
+ txn.start();
+ MockHost _host = _mockHostDao.findByGuid(guid);
+ txn.commit();
+ if (_host != null) {
+ return _host;
+ } else {
+ s_logger.error("Host with guid " + guid + " was not found");
+ return null;
+ }
+ } catch (Exception ex) {
+ txn.rollback();
+ throw new CloudRuntimeException("Unable to get host " + guid + " due to " + ex.getMessage(), ex);
+ } finally {
+ txn.close();
+ txn = Transaction.open(Transaction.CLOUD_DB);
+ txn.close();
+ }
+ }
+
+ @Override
+ public GetHostStatsAnswer getHostStatistic(GetHostStatsCommand cmd) {
+ String hostGuid = cmd.getHostGuid();
+ MockHost host = null;
+ Transaction txn = Transaction.open(Transaction.SIMULATOR_DB);
+ try {
+ txn.start();
+ host = _mockHostDao.findByGuid(hostGuid);
+ txn.commit();
+ if (host == null) {
+ return null;
+ }
+ } catch (Exception ex) {
+ txn.rollback();
+ throw new CloudRuntimeException("Unable to get host " + hostGuid + " due to " + ex.getMessage(), ex);
+ } finally {
+ txn.close();
+ txn = Transaction.open(Transaction.CLOUD_DB);
+ txn.close();
+ }
+
+ Transaction vmtxn = Transaction.open(Transaction.SIMULATOR_DB);
+ try {
+ vmtxn.start();
+ List<MockVMVO> vms = _mockVmDao.findByHostId(host.getId());
+ vmtxn.commit();
+ double usedMem = 0.0;
+ double usedCpu = 0.0;
+ for (MockVMVO vm : vms) {
+ usedMem += vm.getMemory();
+ usedCpu += vm.getCpu();
+ }
+
+ HostStatsEntry hostStats = new HostStatsEntry();
+ hostStats.setTotalMemoryKBs(host.getMemorySize());
+ hostStats.setFreeMemoryKBs(host.getMemorySize() - usedMem);
+ hostStats.setNetworkReadKBs(32768);
+ hostStats.setNetworkWriteKBs(16384);
+ hostStats.setCpuUtilization(usedCpu / (host.getCpuCount() * host.getCpuSpeed()));
+ hostStats.setEntityType("simulator-host");
+ hostStats.setHostId(cmd.getHostId());
+ return new GetHostStatsAnswer(cmd, hostStats);
+ } catch (Exception ex) {
+ vmtxn.rollback();
+ throw new CloudRuntimeException("Unable to get Vms on host " + host.getGuid() + " due to "
+ + ex.getMessage(), ex);
+ } finally {
+ vmtxn.close();
+ vmtxn = Transaction.open(Transaction.CLOUD_DB);
+ vmtxn.close();
+ }
+ }
+
+ @Override
+ public Answer checkHealth(CheckHealthCommand cmd) {
+ return new Answer(cmd);
+ }
+
+ @Override
+ public Answer pingTest(PingTestCommand cmd) {
+ return new Answer(cmd);
+ }
+
+ @Override
+ public PrepareForMigrationAnswer prepareForMigrate(PrepareForMigrationCommand cmd) {
+ VirtualMachineTO vm = cmd.getVirtualMachine();
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Preparing host for migrating " + vm);
+ }
+ return new PrepareForMigrationAnswer(cmd);
+ }
+
+ @Override
+ public boolean start() {
+ return true;
+ }
+
+ @Override
+ public boolean stop() {
+ return true;
+ }
+
+ @Override
+ public String getName() {
+ return this.getClass().getSimpleName();
+ }
+
+ @Override
+ public MaintainAnswer maintain(com.cloud.agent.api.MaintainCommand cmd) {
+ return new MaintainAnswer(cmd);
+ }
@Override
public Answer checkNetworkCommand(CheckNetworkCommand cmd) {
if (s_logger.isDebugEnabled()) {
- s_logger.debug("Checking if network name setup is done on the resource");
- }
- return new CheckNetworkAnswer(cmd, true , "Network Setup check by names is done");
+ s_logger.debug("Checking if network name setup is done on the resource");
+ }
+ return new CheckNetworkAnswer(cmd, true, "Network Setup check by names is done");
}
}