Populate system vm template to template_store_ref in adding an image store.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/3c6b7c2a Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/3c6b7c2a Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/3c6b7c2a Branch: refs/heads/object_store Commit: 3c6b7c2a016fc9cf25dfae2cd2e74fab33244423 Parents: 881165e Author: Min Chen <[email protected]> Authored: Wed May 1 12:10:24 2013 -0700 Committer: Min Chen <[email protected]> Committed: Wed May 1 12:10:24 2013 -0700 ---------------------------------------------------------------------- .../subsystem/api/storage/TemplateService.java | 1 + .../storage/datastore/db/ImageStoreVO.java | 4 +- .../storage/datastore/db/TemplateDataStoreVO.java | 20 ++++++ .../storage/image/TemplateServiceImpl.java | 18 +++++ .../storage/image/datastore/ImageStoreHelper.java | 1 + .../vmware/manager/VmwareManagerImpl.java | 10 ++- .../src/com/cloud/api/query/QueryManagerImpl.java | 4 +- .../src/com/cloud/storage/StorageManagerImpl.java | 21 ++++-- server/src/com/cloud/storage/s3/S3ManagerImpl.java | 16 +++-- .../secondary/SecondaryStorageManagerImpl.java | 49 ++------------ .../secondary/SecondaryStorageVmManager.java | 7 -- .../cloud/template/HypervisorTemplateAdapter.java | 39 ++++-------- 12 files changed, 94 insertions(+), 96 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3c6b7c2a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java ---------------------------------------------------------------------- diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java index dd017a1..b0f9f37 100644 --- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java @@ -50,4 +50,5 @@ public interface TemplateService { void handleSysTemplateDownload(HypervisorType hostHyper, Long dcId); void handleTemplateSync(DataStore store); void downloadBootstrapSysTemplate(DataStore store); + void addSystemVMTemplatesToSecondary(DataStore store); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3c6b7c2a/engine/api/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java ---------------------------------------------------------------------- diff --git a/engine/api/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java b/engine/api/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java index 676004b..8e6c6a8 100644 --- a/engine/api/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java +++ b/engine/api/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java @@ -60,7 +60,7 @@ public class ImageStoreVO implements ImageStore { private String providerName; @Column(name = "data_center_id") - private long dcId; + private Long dcId; @Column(name = "scope") @Enumerated(value = EnumType.STRING) @@ -117,7 +117,7 @@ public class ImageStoreVO implements ImageStore { return this.protocol; } - public void setDataCenterId(long dcId) { + public void setDataCenterId(Long dcId) { this.dcId = dcId; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3c6b7c2a/engine/api/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java ---------------------------------------------------------------------- diff --git a/engine/api/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java b/engine/api/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java index 7d64544..6347e61 100755 --- a/engine/api/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java +++ b/engine/api/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java @@ -190,6 +190,26 @@ public class TemplateDataStoreVO implements StateObject<ObjectInDataStoreStateMa this.jobId = jobId; this.installPath = installPath; this.setDownloadUrl(downloadUrl); + switch (downloadState) { + case DOWNLOADED: + this.state = ObjectInDataStoreStateMachine.State.Ready; + break; + case CREATING: + case DOWNLOAD_IN_PROGRESS: + case UPLOAD_IN_PROGRESS: + this.state = ObjectInDataStoreStateMachine.State.Creating2; + break; + case DOWNLOAD_ERROR: + case UPLOAD_ERROR: + this.state = ObjectInDataStoreStateMachine.State.Failed; + break; + case ABANDONED: + this.state = ObjectInDataStoreStateMachine.State.Destroyed; + break; + default: + this.state = ObjectInDataStoreStateMachine.State.Allocated; + break; + } } public TemplateDataStoreVO() { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3c6b7c2a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java ---------------------------------------------------------------------- diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java index cc9ad43..79555d4 100644 --- a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java +++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java @@ -18,8 +18,10 @@ */ package org.apache.cloudstack.storage.image; +import java.io.File; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -55,6 +57,7 @@ import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO; import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao; import org.apache.cloudstack.storage.image.store.TemplateObject; +import com.cloud.storage.template.TemplateConstants; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -549,4 +552,19 @@ public class TemplateServiceImpl implements TemplateService { return null; } + + @Override + public void addSystemVMTemplatesToSecondary(DataStore store){ + long storeId = store.getId(); + List<VMTemplateVO> rtngTmplts = _templateDao.listAllSystemVMTemplates(); + for ( VMTemplateVO tmplt : rtngTmplts ) { + TemplateDataStoreVO tmpltStore = this._vmTemplateStoreDao.findByStoreTemplate(storeId, tmplt.getId()); + if ( tmpltStore == null ) { + tmpltStore = new TemplateDataStoreVO(storeId, tmplt.getId(), new Date(), 100, Status.DOWNLOADED, null, null, null, TemplateConstants.DEFAULT_SYSTEM_VM_TEMPLATE_PATH + tmplt.getId() + File.separator, tmplt.getUrl()); + tmpltStore.setSize(0); + tmpltStore.setPhysicalSize(0); // no size information for pre-seeded system vm templates + _vmTemplateStoreDao.persist(tmpltStore); + } + } + } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3c6b7c2a/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreHelper.java ---------------------------------------------------------------------- diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreHelper.java b/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreHelper.java index 1d24f12..f43bc40 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreHelper.java +++ b/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreHelper.java @@ -68,6 +68,7 @@ public class ImageStoreHelper { store.setProtocol((String)params.get("protocol")); store.setProviderName((String)params.get("providerName")); store.setScope((ScopeType)params.get("scope")); + store.setDataCenterId((Long)params.get("zoneId")); store.setUuid((String)params.get("uuid")); store.setUrl((String)params.get("url")); store.setRole((DataStoreRole)params.get("role")); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3c6b7c2a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java index 4ae0d17..97f87b7 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java @@ -35,6 +35,8 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -97,6 +99,7 @@ import com.google.gson.Gson; import com.vmware.vim25.AboutInfo; import com.vmware.vim25.HostConnectSpec; import com.vmware.vim25.ManagedObjectReference; +import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;; @Local(value = {VmwareManager.class}) @@ -120,6 +123,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw @Inject CommandExecLogDao _cmdExecLogDao; @Inject ClusterManager _clusterMgr; @Inject SecondaryStorageVmManager _ssvmMgr; + @Inject DataStoreManager _dataStoreMgr; @Inject CiscoNexusVSMDeviceDao _nexusDao; @Inject ClusterVSMMapDao _vsmMapDao; @Inject ConfigurationDao _configDao; @@ -426,9 +430,9 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw @Override public String getSecondaryStorageStoreUrl(long dcId) { - List<HostVO> secStorageHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId); - if(secStorageHosts.size() > 0) - return secStorageHosts.get(0).getStorageUrl(); + DataStore secStore = this._dataStoreMgr.getImageStore(dcId); + if(secStore != null) + return secStore.getUri(); return null; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3c6b7c2a/server/src/com/cloud/api/query/QueryManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index 4328e2a..234d410 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -2665,7 +2665,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { } if (onlyReady){ - sc.addAnd("downlaadState", SearchCriteria.Op.EQ, Status.DOWNLOADED); + sc.addAnd("downloadState", SearchCriteria.Op.EQ, Status.DOWNLOADED); sc.addAnd("destroyed", SearchCriteria.Op.EQ, false); } @@ -2675,7 +2675,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { if (!showDomr){ // excluding system template - sc.addAnd("type", SearchCriteria.Op.NEQ, Storage.TemplateType.SYSTEM); + sc.addAnd("templateType", SearchCriteria.Op.NEQ, Storage.TemplateType.SYSTEM); } // search unique templates and find details by Ids http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3c6b7c2a/server/src/com/cloud/storage/StorageManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 2eb9370..798ee56 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -1521,18 +1521,22 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId); } - List<HostVO> hosts = new ArrayList<HostVO>(); + List<Long> hosts = new ArrayList<Long>(); if (hostId != null) { - hosts.add(ApiDBUtils.findHostById(hostId)); + hosts.add(hostId); } else { - hosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(zoneId); - } + List<DataStore> stores = this._dataStoreMgr.getImageStoresByScope(new ZoneScope(zoneId)); + if (stores != null){ + for (DataStore store : stores){ + hosts.add(store.getId()); + } + } + } CapacityVO capacity = new CapacityVO(hostId, zoneId, null, null, 0, 0, CapacityVO.CAPACITY_TYPE_SECONDARY_STORAGE); - for (HostVO host : hosts) { - StorageStats stats = ApiDBUtils.getSecondaryStorageStatistics(host - .getId()); + for (Long id : hosts) { + StorageStats stats = ApiDBUtils.getSecondaryStorageStatistics(id); if (stats == null) { continue; } @@ -1916,6 +1920,9 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C if (((ImageStoreProvider) storeProvider).needDownloadSysTemplate()) { // trigger system vm template download this._imageSrv.downloadBootstrapSysTemplate(store); + } else { + // populate template_store_ref table + this._imageSrv.addSystemVMTemplatesToSecondary(store); } return (ImageStore) _dataStoreMgr.getDataStore(store.getId(), DataStoreRole.Image); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3c6b7c2a/server/src/com/cloud/storage/s3/S3ManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/storage/s3/S3ManagerImpl.java b/server/src/com/cloud/storage/s3/S3ManagerImpl.java index cf236b8..1e8ad4f 100644 --- a/server/src/com/cloud/storage/s3/S3ManagerImpl.java +++ b/server/src/com/cloud/storage/s3/S3ManagerImpl.java @@ -48,6 +48,8 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.command.admin.storage.AddS3Cmd; import org.apache.cloudstack.api.command.admin.storage.ListS3sCmd; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -116,8 +118,9 @@ public class S3ManagerImpl extends ManagerBase implements S3Manager { @Inject private HostDao hostDao; + @Inject - private SecondaryStorageVmManager secondaryStorageVMManager; + private DataStoreManager dataStoreManager; public S3ManagerImpl() { } @@ -319,11 +322,10 @@ public class S3ManagerImpl extends ManagerBase implements S3Manager { return errorMessage; } - final HostVO secondaryStorageHost = secondaryStorageVMManager - .findSecondaryStorageHost(dataCenterId); - if (secondaryStorageHost == null) { + final DataStore secondaryStore = this.dataStoreManager.getImageStore(dataCenterId); + if (secondaryStore == null) { final String errorMessage = format( - "Unable to find secondary storage host for zone id %1$s.", + "Unable to find secondary storage for zone id %1$s.", dataCenterId); LOGGER.error(errorMessage); throw new CloudRuntimeException(errorMessage); @@ -331,7 +333,7 @@ public class S3ManagerImpl extends ManagerBase implements S3Manager { final long accountId = template.getAccountId(); final DownloadTemplateFromS3ToSecondaryStorageCommand cmd = new DownloadTemplateFromS3ToSecondaryStorageCommand( - s3, accountId, templateId, secondaryStorageHost.getName(), + s3, accountId, templateId, secondaryStore.getName(), primaryStorageDownloadWait); try { @@ -358,7 +360,7 @@ public class S3ManagerImpl extends ManagerBase implements S3Manager { asList("template", "tmpl", accountId, templateId), File.separator); final VMTemplateHostVO tmpltHost = new VMTemplateHostVO( - secondaryStorageHost.getId(), templateId, + secondaryStore.getId(), templateId, now(), 100, Status.DOWNLOADED, null, null, null, installPath, template.getUrl()); tmpltHost.setSize(templateS3VO.getSize()); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3c6b7c2a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index c4fd848..a751746 100755 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -508,8 +508,8 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar } protected Map<String, Object> createSecStorageVmInstance(long dataCenterId, SecondaryStorageVm.Role role) { - HostVO secHost = findSecondaryStorageHost(dataCenterId); - if (secHost == null) { + DataStore secStore = this._dataStoreMgr.getImageStore(dataCenterId); + if (secStore == null) { String msg = "No secondary storage available in zone " + dataCenterId + ", cannot create secondary storage vm"; s_logger.warn(msg); throw new CloudRuntimeException(msg); @@ -1019,8 +1019,8 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar Map<String, String> details = _vmDetailsDao.findDetails(vm.getId()); vm.setDetails(details); - HostVO secHost = _ssvmMgr.findSecondaryStorageHost(dest.getDataCenter().getId()); - assert (secHost != null); + DataStore secStore = this._dataStoreMgr.getImageStore(dest.getDataCenter().getId()); + assert (secStore != null); StringBuilder buf = profile.getBootArgsBuilder(); buf.append(" template=domP type=secstorage"); @@ -1265,9 +1265,9 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar List<SecondaryStorageVmVO> ssVms = _secStorageVmDao.getSecStorageVmListInStates(SecondaryStorageVm.Role.templateProcessor, dataCenterId, State.Running, State.Migrating, State.Starting, State.Stopped, State.Stopping ); int vmSize = (ssVms == null)? 0 : ssVms.size(); - List<HostVO> ssHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dataCenterId); - int hostSize = (ssHosts == null)? 0 : ssHosts.size(); - if ( hostSize > vmSize ) { + List<DataStore> ssStores = this._dataStoreMgr.getImageStoresByScope(new ZoneScope(dataCenterId)); + int storeSize = (ssStores == null)? 0 : ssStores.size(); + if ( storeSize > vmSize ) { s_logger.info("No secondary storage vms found in datacenter id=" + dataCenterId + ", starting a new one"); return new Pair<AfterScanAction, Object>(AfterScanAction.expand, SecondaryStorageVm.Role.templateProcessor); } @@ -1356,19 +1356,6 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar return null; } - @Override - public HostVO findSecondaryStorageHost(long dcId) { - SearchCriteriaService<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class); - sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.SecondaryStorage); - sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dcId); - List<HostVO> storageHosts = sc.list(); - if (storageHosts == null || storageHosts.size() < 1) { - return null; - } else { - Collections.shuffle(storageHosts); - return storageHosts.get(0); - } - } @Override public List<HostVO> listSecondaryStorageHostsInAllZones() { @@ -1377,29 +1364,7 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar return sc.list(); } - @Override - public List<HostVO> listSecondaryStorageHostsInOneZone(long dataCenterId) { - SearchCriteriaService<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class); - sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dataCenterId); - sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.SecondaryStorage); - return sc.list(); - } - - @Override - public List<HostVO> listLocalSecondaryStorageHostsInOneZone(long dataCenterId) { - SearchCriteriaService<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class); - sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dataCenterId); - sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.LocalSecondaryStorage); - return sc.list(); - } - @Override - public List<HostVO> listAllTypesSecondaryStorageHostsInOneZone(long dataCenterId) { - SearchCriteriaService<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class); - sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dataCenterId); - sc.addAnd(sc.getEntity().getType(), Op.IN, Host.Type.LocalSecondaryStorage, Host.Type.SecondaryStorage); - return sc.list(); - } @Override public List<HostVO> listUpAndConnectingSecondaryStorageVmHost(Long dcId) { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3c6b7c2a/server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java b/server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java index 0756c72..e4651df 100755 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java @@ -18,8 +18,6 @@ package com.cloud.storage.secondary; import java.util.List; -import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; - import com.cloud.agent.api.Command; import com.cloud.agent.api.StartupCommand; import com.cloud.host.HostVO; @@ -47,12 +45,7 @@ public interface SecondaryStorageVmManager extends Manager { public Pair<HostVO, SecondaryStorageVmVO> assignSecStorageVm(long zoneId, Command cmd); boolean generateSetupCommand(Long hostId); - //boolean deleteHost(Long hostId); - public HostVO findSecondaryStorageHost(long dcId); public List<HostVO> listSecondaryStorageHostsInAllZones(); - public List<HostVO> listSecondaryStorageHostsInOneZone(long dataCenterId); - public List<HostVO> listLocalSecondaryStorageHostsInOneZone(long dataCenterId); - public List<HostVO> listAllTypesSecondaryStorageHostsInOneZone(long dataCenterId); public List<HostVO> listUpAndConnectingSecondaryStorageVmHost(Long dcId); public HostVO pickSsvmHost(HostVO ssHost); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3c6b7c2a/server/src/com/cloud/template/HypervisorTemplateAdapter.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/com/cloud/template/HypervisorTemplateAdapter.java index cb0bee9..ae1e178 100755 --- a/server/src/com/cloud/template/HypervisorTemplateAdapter.java +++ b/server/src/com/cloud/template/HypervisorTemplateAdapter.java @@ -31,7 +31,6 @@ import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd; import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd; import org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd; import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd; -import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory; @@ -47,38 +46,24 @@ import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; -import com.cloud.agent.api.Answer; -import com.cloud.agent.api.storage.DeleteTemplateCommand; import com.cloud.alert.AlertManager; import com.cloud.configuration.Resource.ResourceType; -import com.cloud.dc.DataCenterVO; -import com.cloud.event.EventTypes; -import com.cloud.event.UsageEventUtils; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceAllocationException; -import com.cloud.host.HostVO; -import com.cloud.storage.ScopeType; -import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.TemplateType; -import com.cloud.storage.DataStoreRole; import com.cloud.storage.TemplateProfile; -import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.storage.VMTemplateVO; -import com.cloud.storage.VMTemplateZoneVO; import com.cloud.storage.download.DownloadMonitor; -import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.user.Account; import com.cloud.utils.UriUtils; import com.cloud.utils.db.DB; import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.vm.UserVmVO; @Local(value=TemplateAdapter.class) public class HypervisorTemplateAdapter extends TemplateAdapterBase implements TemplateAdapter { private final static Logger s_logger = Logger.getLogger(HypervisorTemplateAdapter.class); @Inject DownloadMonitor _downloadMonitor; - @Inject SecondaryStorageVmManager _ssvmMgr; @Inject AgentManager _agentMgr; @Inject DataStoreManager storeMgr; @@ -196,10 +181,10 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase implements Te .createTemplateAsync(tmpl, imageStore, caller); } _resourceLimitMgr.incrementResourceCount(profile.getAccountId(), ResourceType.template); - + return template; } - + private class CreateTemplateContext<T> extends AsyncRpcConext<T> { final TemplateInfo template; public CreateTemplateContext(AsyncCompletionCallback<T> callback, TemplateInfo template) { @@ -207,15 +192,15 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase implements Te this.template = template; } } - - protected Void createTemplateAsyncCallBack(AsyncCallbackDispatcher<HypervisorTemplateAdapter, + + protected Void createTemplateAsyncCallBack(AsyncCallbackDispatcher<HypervisorTemplateAdapter, TemplateApiResult> callback, CreateTemplateContext<TemplateApiResult> context) { TemplateInfo template = context.template; VMTemplateVO tmplt = this._tmpltDao.findById(template.getId()); long accountId = tmplt.getAccountId(); _resourceLimitMgr.incrementResourceCount(accountId, ResourceType.secondary_storage, template.getSize()); - + return null; } @@ -280,7 +265,8 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase implements Te } - public TemplateProfile prepareDelete(DeleteTemplateCmd cmd) { + @Override + public TemplateProfile prepareDelete(DeleteTemplateCmd cmd) { TemplateProfile profile = super.prepareDelete(cmd); VMTemplateVO template = (VMTemplateVO)profile.getTemplate(); Long zoneId = profile.getZoneId(); @@ -289,19 +275,20 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase implements Te throw new InvalidParameterValueException("The DomR template cannot be deleted."); } - if (zoneId != null && (_ssvmMgr.findSecondaryStorageHost(zoneId) == null)) { - throw new InvalidParameterValueException("Failed to find a secondary storage host in the specified zone."); + if (zoneId != null && (this.storeMgr.getImageStore(zoneId) == null)) { + throw new InvalidParameterValueException("Failed to find a secondary storage in the specified zone."); } return profile; } - public TemplateProfile prepareDelete(DeleteIsoCmd cmd) { + @Override + public TemplateProfile prepareDelete(DeleteIsoCmd cmd) { TemplateProfile profile = super.prepareDelete(cmd); Long zoneId = profile.getZoneId(); - if (zoneId != null && (_ssvmMgr.findSecondaryStorageHost(zoneId) == null)) { - throw new InvalidParameterValueException("Failed to find a secondary storage host in the specified zone."); + if (zoneId != null && (this.storeMgr.getImageStore(zoneId) == null)) { + throw new InvalidParameterValueException("Failed to find a secondary storage in the specified zone."); } return profile;
