From 5e13327339305cd81993952abbd8c19409a48537 Mon Sep 17 00:00:00 2001 From: Edison Su Date: Mon, 8 Jul 2013 18:43:00 -0700 Subject: [PATCH] fix simulator --- .../agent/manager/MockAgentManagerImpl.java | 27 +++- .../agent/manager/MockStorageManagerImpl.java | 153 +++++++----------- .../cloud/resource/AgentStorageResource.java | 2 +- .../SimulatorSecondaryDiscoverer.java | 17 +- 4 files changed, 94 insertions(+), 105 deletions(-) diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java index 9654b74ca1a..fcc1b4f2209 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java @@ -29,6 +29,8 @@ import com.cloud.agent.api.PingTestCommand; import com.cloud.api.commands.SimulatorAddSecondaryAgent; import com.cloud.dc.dao.HostPodDao; import com.cloud.exception.DiscoveryException; +import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; import com.cloud.resource.*; import com.cloud.simulator.MockHost; import com.cloud.simulator.MockHostVO; @@ -81,6 +83,8 @@ public class MockAgentManagerImpl extends ManagerBase implements MockAgentManage ResourceManager _resourceMgr; @Inject SimulatorSecondaryDiscoverer discoverer; + @Inject + HostDao hostDao; private SecureRandom random; private final Map _resources = new ConcurrentHashMap(); private ThreadPoolExecutor _executor; @@ -250,10 +254,8 @@ public class MockAgentManagerImpl extends ManagerBase implements MockAgentManage this.mode = "Stop"; } - @Override - @DB - public void run() { + private void handleSystemVMStop() { Transaction txn = Transaction.open(Transaction.SIMULATOR_DB); try { if (this.mode.equalsIgnoreCase("Stop")) { @@ -281,6 +283,25 @@ public class MockAgentManagerImpl extends ManagerBase implements MockAgentManage txn.close(); } + //stop ssvm agent + HostVO host = hostDao.findByGuid(this.guid); + if (host != null) { + try { + _resourceMgr.deleteHost(host.getId(), true, true); + } catch (Exception e) { + s_logger.debug("Failed to delete host: ", e); + } + } + } + + @Override + @DB + public void run() { + if (this.mode.equalsIgnoreCase("Stop")) { + handleSystemVMStop(); + return; + } + String resource = null; if (vmType.equalsIgnoreCase("secstorage")) { resource = "com.cloud.agent.AgentStorageResource"; diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java index c81f0797014..d23575bfee3 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java @@ -71,7 +71,10 @@ import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.VMTemplateStorageResourceAssoc; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; +import com.cloud.storage.VMTemplateVO; +import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.template.TemplateProp; +import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.ManagerBase; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; @@ -113,6 +116,8 @@ public class MockStorageManagerImpl extends ManagerBase implements MockStorageMa MockVMDao _mockVMDao = null; @Inject MockHostDao _mockHostDao = null; + @Inject + VMTemplateDao templateDao; private MockVolumeVO findVolumeFromSecondary(String path, String ssUrl, MockVolumeType type) { Transaction txn = Transaction.open(Transaction.SIMULATOR_DB); @@ -474,26 +479,12 @@ public class MockStorageManagerImpl extends ManagerBase implements MockStorageMa if ( !(store instanceof NfsTO )){ return new Answer(cmd, false, "Unsupported image data store: " + store); } - Transaction txn = Transaction.open(Transaction.SIMULATOR_DB); + MockSecStorageVO storage = null; String nfsUrl = ((NfsTO) store).getUrl(); - try { - txn.start(); - storage = _mockSecStorageDao.findByUrl(nfsUrl); - if (storage == null) { - return new Answer(cmd, false, "Failed to get secondary storage"); - } - txn.commit(); - } catch (Exception ex) { - txn.rollback(); - throw new CloudRuntimeException("Error when finding sec storage " + nfsUrl, ex); - } finally { - txn.close(); - txn = Transaction.open(Transaction.CLOUD_DB); - txn.close(); - } - txn = Transaction.open(Transaction.SIMULATOR_DB); + Transaction txn = Transaction.open(Transaction.SIMULATOR_DB); + storage = _mockSecStorageDao.findByUrl(nfsUrl); try { txn.start(); List templates = _mockVolumeDao.findByStorageIdAndType(storage.getId(), @@ -504,7 +495,6 @@ public class MockStorageManagerImpl extends ManagerBase implements MockStorageMa templateInfos.put(template.getName(), new TemplateProp(template.getName(), template.getPath() .replaceAll(storage.getMountPoint(), ""), template.getSize(), template.getSize(), true, false)); } - txn.commit(); return new ListTemplateAnswer(nfsUrl, templateInfos); } catch (Exception ex) { txn.rollback(); @@ -889,90 +879,63 @@ public class MockStorageManagerImpl extends ManagerBase implements MockStorageMa @Override public void preinstallTemplates(String url, long zoneId) { MockSecStorageVO storage = null; + Transaction txn = Transaction.open(Transaction.SIMULATOR_DB); try { + txn.start(); storage = _mockSecStorageDao.findByUrl(url); + + if (storage == null) { + storage = new MockSecStorageVO(); + URI uri; + try { + uri = new URI(url); + } catch (URISyntaxException e) { + return; + } + + String nfsHost = uri.getHost(); + String nfsPath = uri.getPath(); + String path = nfsHost + ":" + nfsPath; + String dir = "/mnt/" + UUID.nameUUIDFromBytes(path.getBytes()).toString() + File.separator; + + storage.setUrl(url); + storage.setCapacity(DEFAULT_HOST_STORAGE_SIZE); + + storage.setMountPoint(dir); + + + storage = _mockSecStorageDao.persist(storage); + + // preinstall default templates into secondary storage + long defaultTemplateSize = 2 * 1024 * 1024 * 1024L; + MockVolumeVO template = new MockVolumeVO(); + template.setName("simulator-domR"); + template.setPath(storage.getMountPoint() + "template/tmpl/1/100/" + UUID.randomUUID().toString()); + template.setPoolId(storage.getId()); + template.setSize(defaultTemplateSize); + template.setType(MockVolumeType.TEMPLATE); + template.setStatus(Status.DOWNLOADED); + template = _mockVolumeDao.persist(template); + + + template = new MockVolumeVO(); + template.setName("simulator-Centos"); + template.setPath(storage.getMountPoint() + "template/tmpl/1/111/" + UUID.randomUUID().toString()); + template.setPoolId(storage.getId()); + template.setSize(defaultTemplateSize); + template.setType(MockVolumeType.TEMPLATE); + template.setStatus(Status.DOWNLOADED); + + template = _mockVolumeDao.persist(template); + + txn.commit(); + } } catch (Exception ex) { throw new CloudRuntimeException("Unable to find sec storage at " + url, ex); } finally { - Transaction txn = Transaction.open(Transaction.CLOUD_DB); + txn = Transaction.open(Transaction.CLOUD_DB); txn.close(); } - if (storage == null) { - storage = new MockSecStorageVO(); - URI uri; - try { - uri = new URI(url); - } catch (URISyntaxException e) { - return; - } - - String nfsHost = uri.getHost(); - String nfsPath = uri.getPath(); - String path = nfsHost + ":" + nfsPath; - String dir = "/mnt/" + UUID.nameUUIDFromBytes(path.getBytes()).toString() + File.separator; - - storage.setUrl(url); - storage.setCapacity(DEFAULT_HOST_STORAGE_SIZE); - - storage.setMountPoint(dir); - Transaction txn = Transaction.open(Transaction.SIMULATOR_DB); - try { - txn.start(); - storage = _mockSecStorageDao.persist(storage); - txn.commit(); - } catch (Exception ex) { - txn.rollback(); - throw new CloudRuntimeException("Error when saving storage " + storage, ex); - } finally { - txn.close(); - txn = Transaction.open(Transaction.CLOUD_DB); - txn.close(); - } - - // preinstall default templates into secondary storage - long defaultTemplateSize = 2 * 1024 * 1024 * 1024L; - MockVolumeVO template = new MockVolumeVO(); - template.setName("simulator-domR"); - template.setPath(storage.getMountPoint() + "template/tmpl/1/100/" + UUID.randomUUID().toString()); - template.setPoolId(storage.getId()); - template.setSize(defaultTemplateSize); - template.setType(MockVolumeType.TEMPLATE); - template.setStatus(Status.DOWNLOADED); - txn = Transaction.open(Transaction.SIMULATOR_DB); - try { - txn.start(); - template = _mockVolumeDao.persist(template); - txn.commit(); - } catch (Exception ex) { - txn.rollback(); - throw new CloudRuntimeException("Error when saving template " + template, ex); - } finally { - txn.close(); - txn = Transaction.open(Transaction.CLOUD_DB); - txn.close(); - } - - template = new MockVolumeVO(); - template.setName("simulator-Centos"); - template.setPath(storage.getMountPoint() + "template/tmpl/1/111/" + UUID.randomUUID().toString()); - template.setPoolId(storage.getId()); - template.setSize(defaultTemplateSize); - template.setType(MockVolumeType.TEMPLATE); - template.setStatus(Status.DOWNLOADED); - txn = Transaction.open(Transaction.SIMULATOR_DB); - try { - txn.start(); - template = _mockVolumeDao.persist(template); - txn.commit(); - } catch (Exception ex) { - txn.rollback(); - throw new CloudRuntimeException("Error when saving template " + template, ex); - } finally { - txn.close(); - txn = Transaction.open(Transaction.CLOUD_DB); - txn.close(); - } - } } @Override diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/AgentStorageResource.java b/plugins/hypervisors/simulator/src/com/cloud/resource/AgentStorageResource.java index 3e479aef49a..d93b20d3221 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/resource/AgentStorageResource.java +++ b/plugins/hypervisors/simulator/src/com/cloud/resource/AgentStorageResource.java @@ -50,7 +50,7 @@ public class AgentStorageResource extends AgentResourceBase implements Secondary } public AgentStorageResource() { - setType(Host.Type.SecondaryStorage); + setType(Type.SecondaryStorageVM); } @Override diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java index 30926e39d0b..e9052ebee40 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java +++ b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java @@ -25,6 +25,10 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import com.cloud.storage.VMTemplateVO; +import com.cloud.storage.dao.VMTemplateDao; +import org.apache.cloudstack.storage.datastore.db.ImageStoreDao; +import org.apache.cloudstack.storage.datastore.db.ImageStoreVO; import org.apache.cloudstack.storage.resource.SecondaryStorageDiscoverer; import org.apache.cloudstack.storage.resource.SecondaryStorageResource; import org.apache.log4j.Logger; @@ -54,6 +58,8 @@ public class SimulatorSecondaryDiscoverer extends SecondaryStorageDiscoverer imp @Inject AgentManager _agentMgr; @Inject ResourceManager _resourceMgr; @Inject SnapshotDao _snapshotDao; + @Inject + ImageStoreDao imageStoreDao; protected SecondaryStorageResource resource; public void setResource(SecondaryStorageResource resource) { @@ -73,6 +79,10 @@ public class SimulatorSecondaryDiscoverer extends SecondaryStorageDiscoverer imp s_logger.debug("It's not NFS or file or ISO, so not a secondary storage server: " + uri.toString()); return null; } + List stores = imageStoreDao.listImageStores(); + for (ImageStoreVO store : stores) { + _mockStorageMgr.preinstallTemplates(store.getUrl(), dcId); + } Map> resources = new HashMap>(); resources.put(this.resource, new HashMap()); return resources; @@ -81,12 +91,7 @@ public class SimulatorSecondaryDiscoverer extends SecondaryStorageDiscoverer imp @Override public void postDiscovery(List hosts, long msId) { - for (HostVO host: hosts) { - if(s_logger.isDebugEnabled()) { - s_logger.debug("Preinstalling simulator templates"); - } - _mockStorageMgr.preinstallTemplates(host.getStorageUrl(), host.getDataCenterId()); - } + } @Override