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 2013/07/01 23:24:57 UTC
[13/50] [abbrv] git commit: updated refs/heads/vmsync to f737019
CLOUDSTACK-3144: [Automation] Deletion of templates failing. Fails to
find image store housing template.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/87c401aa
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/87c401aa
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/87c401aa
Branch: refs/heads/vmsync
Commit: 87c401aaafbe786bd699091779a5f2741ab03889
Parents: 2c31f38
Author: Min Chen <mi...@citrix.com>
Authored: Fri Jun 28 17:35:19 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Fri Jun 28 17:57:42 2013 -0700
----------------------------------------------------------------------
.../cloud/storage/dao/VMTemplateDaoImpl.java | 17 +-
.../template/HypervisorTemplateAdapter.java | 318 ++++++++++---------
2 files changed, 169 insertions(+), 166 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/87c401aa/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
index ad33e7a..9e75990 100755
--- a/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
+++ b/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
@@ -28,8 +28,6 @@ import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
-import org.apache.cloudstack.engine.subsystem.api.storage.TemplateEvent;
-import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
@@ -56,9 +54,7 @@ import com.cloud.utils.db.JoinBuilder;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.SearchCriteria.Func;
-import com.cloud.utils.db.SearchCriteria.Op;
import com.cloud.utils.db.Transaction;
-import com.cloud.utils.db.UpdateBuilder;
import com.cloud.utils.exception.CloudRuntimeException;
@Component
@@ -102,7 +98,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
private SearchBuilder<VMTemplateVO> PublicIsoSearch;
private SearchBuilder<VMTemplateVO> UserIsoSearch;
private GenericSearchBuilder<VMTemplateVO, Long> CountTemplatesByAccount;
- // private SearchBuilder<VMTemplateVO> updateStateSearch;
+ // private SearchBuilder<VMTemplateVO> updateStateSearch;
@Inject
ResourceTagDao _tagsDao;
@@ -344,6 +340,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
AccountIdSearch = createSearchBuilder();
AccountIdSearch.and("accountId", AccountIdSearch.entity().getAccountId(), SearchCriteria.Op.EQ);
AccountIdSearch.and("publicTemplate", AccountIdSearch.entity().isPublicTemplate(), SearchCriteria.Op.EQ);
+ AccountIdSearch.and("removed", AccountIdSearch.entity().getRemoved(), SearchCriteria.Op.NULL); // only list not removed templates for this account
AccountIdSearch.done();
SearchBuilder<VMTemplateZoneVO> tmpltZoneSearch = _templateZoneDao.createSearchBuilder();
@@ -369,11 +366,11 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
CountTemplatesByAccount.and("removed", CountTemplatesByAccount.entity().getRemoved(), SearchCriteria.Op.NULL);
CountTemplatesByAccount.done();
-// updateStateSearch = this.createSearchBuilder();
-// updateStateSearch.and("id", updateStateSearch.entity().getId(), Op.EQ);
-// updateStateSearch.and("state", updateStateSearch.entity().getState(), Op.EQ);
-// updateStateSearch.and("updatedCount", updateStateSearch.entity().getUpdatedCount(), Op.EQ);
-// updateStateSearch.done();
+ // updateStateSearch = this.createSearchBuilder();
+ // updateStateSearch.and("id", updateStateSearch.entity().getId(), Op.EQ);
+ // updateStateSearch.and("state", updateStateSearch.entity().getState(), Op.EQ);
+ // updateStateSearch.and("updatedCount", updateStateSearch.entity().getUpdatedCount(), Op.EQ);
+ // updateStateSearch.done();
return result;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/87c401aa/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 569d947..da8c1c4 100755
--- a/server/src/com/cloud/template/HypervisorTemplateAdapter.java
+++ b/server/src/com/cloud/template/HypervisorTemplateAdapter.java
@@ -41,8 +41,8 @@ import org.apache.cloudstack.framework.async.AsyncCallbackDispatcher;
import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
import org.apache.cloudstack.framework.async.AsyncRpcConext;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
-import org.apache.log4j.Logger;
import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity;
+import org.apache.log4j.Logger;
import com.cloud.agent.AgentManager;
import com.cloud.agent.api.Answer;
@@ -54,14 +54,13 @@ 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.hypervisor.Hypervisor.HypervisorType;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.Storage.TemplateType;
import com.cloud.storage.TemplateProfile;
-import com.cloud.storage.VMTemplateZoneVO;
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.VMTemplateZoneVO;
import com.cloud.storage.dao.VMTemplateZoneDao;
import com.cloud.storage.download.DownloadMonitor;
import com.cloud.user.Account;
@@ -71,9 +70,9 @@ import com.cloud.utils.exception.CloudRuntimeException;
@Local(value=TemplateAdapter.class)
public class HypervisorTemplateAdapter extends TemplateAdapterBase {
- private final static Logger s_logger = Logger.getLogger(HypervisorTemplateAdapter.class);
- @Inject DownloadMonitor _downloadMonitor;
- @Inject AgentManager _agentMgr;
+ private final static Logger s_logger = Logger.getLogger(HypervisorTemplateAdapter.class);
+ @Inject DownloadMonitor _downloadMonitor;
+ @Inject AgentManager _agentMgr;
@Inject DataStoreManager storeMgr;
@Inject TemplateService imageService;
@@ -90,92 +89,92 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
}
- @Override
- public TemplateProfile prepare(RegisterIsoCmd cmd) throws ResourceAllocationException {
- TemplateProfile profile = super.prepare(cmd);
- String url = profile.getUrl();
+ @Override
+ public TemplateProfile prepare(RegisterIsoCmd cmd) throws ResourceAllocationException {
+ TemplateProfile profile = super.prepare(cmd);
+ String url = profile.getUrl();
+
+ if((!url.toLowerCase().endsWith("iso"))&&(!url.toLowerCase().endsWith("iso.zip"))&&(!url.toLowerCase().endsWith("iso.bz2"))
+ &&(!url.toLowerCase().endsWith("iso.gz"))){
+ throw new InvalidParameterValueException("Please specify a valid iso");
+ }
+
+ UriUtils.validateUrl(url);
+ profile.setUrl(url);
+ // Check that the resource limit for secondary storage won't be exceeded
+ _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(cmd.getEntityOwnerId()),
+ ResourceType.secondary_storage, UriUtils.getRemoteSize(url));
+ return profile;
+ }
+
+ @Override
+ public TemplateProfile prepare(RegisterTemplateCmd cmd) throws ResourceAllocationException {
+ TemplateProfile profile = super.prepare(cmd);
+ String url = profile.getUrl();
+
+ if((!url.toLowerCase().endsWith("vhd"))&&(!url.toLowerCase().endsWith("vhd.zip"))
+ &&(!url.toLowerCase().endsWith("vhd.bz2"))&&(!url.toLowerCase().endsWith("vhd.gz"))
+ &&(!url.toLowerCase().endsWith("qcow2"))&&(!url.toLowerCase().endsWith("qcow2.zip"))
+ &&(!url.toLowerCase().endsWith("qcow2.bz2"))&&(!url.toLowerCase().endsWith("qcow2.gz"))
+ &&(!url.toLowerCase().endsWith("ova"))&&(!url.toLowerCase().endsWith("ova.zip"))
+ &&(!url.toLowerCase().endsWith("ova.bz2"))&&(!url.toLowerCase().endsWith("ova.gz"))
+ &&(!url.toLowerCase().endsWith("tar"))&&(!url.toLowerCase().endsWith("tar.zip"))
+ &&(!url.toLowerCase().endsWith("tar.bz2"))&&(!url.toLowerCase().endsWith("tar.gz"))
+ &&(!url.toLowerCase().endsWith("img"))&&(!url.toLowerCase().endsWith("raw"))){
+ throw new InvalidParameterValueException("Please specify a valid "+ cmd.getFormat().toLowerCase());
+ }
+
+ if ((cmd.getFormat().equalsIgnoreCase("vhd") && (!url.toLowerCase().endsWith("vhd") && !url.toLowerCase().endsWith("vhd.zip") && !url.toLowerCase().endsWith("vhd.bz2") && !url.toLowerCase().endsWith("vhd.gz") ))
+ || (cmd.getFormat().equalsIgnoreCase("qcow2") && (!url.toLowerCase().endsWith("qcow2") && !url.toLowerCase().endsWith("qcow2.zip") && !url.toLowerCase().endsWith("qcow2.bz2") && !url.toLowerCase().endsWith("qcow2.gz") ))
+ || (cmd.getFormat().equalsIgnoreCase("ova") && (!url.toLowerCase().endsWith("ova") && !url.toLowerCase().endsWith("ova.zip") && !url.toLowerCase().endsWith("ova.bz2") && !url.toLowerCase().endsWith("ova.gz")))
+ || (cmd.getFormat().equalsIgnoreCase("tar") && (!url.toLowerCase().endsWith("tar") && !url.toLowerCase().endsWith("tar.zip") && !url.toLowerCase().endsWith("tar.bz2") && !url.toLowerCase().endsWith("tar.gz")))
+ || (cmd.getFormat().equalsIgnoreCase("raw") && (!url.toLowerCase().endsWith("img") && !url.toLowerCase().endsWith("raw")))) {
+ throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is an invalid for the format " + cmd.getFormat().toLowerCase());
+ }
+
+ UriUtils.validateUrl(url);
+ profile.setUrl(url);
+ // Check that the resource limit for secondary storage won't be exceeded
+ _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(cmd.getEntityOwnerId()),
+ ResourceType.secondary_storage, UriUtils.getRemoteSize(url));
+ return profile;
+ }
+
+ @Override
+ public VMTemplateVO create(TemplateProfile profile) {
+ // persist entry in vm_template, vm_template_details and template_zone_ref tables, not that entry at template_store_ref is not created here, and created in createTemplateAsync.
+ VMTemplateVO template = persistTemplate(profile);
- if((!url.toLowerCase().endsWith("iso"))&&(!url.toLowerCase().endsWith("iso.zip"))&&(!url.toLowerCase().endsWith("iso.bz2"))
- &&(!url.toLowerCase().endsWith("iso.gz"))){
- throw new InvalidParameterValueException("Please specify a valid iso");
+ if (template == null) {
+ throw new CloudRuntimeException("Unable to persist the template " + profile.getTemplate());
}
- UriUtils.validateUrl(url);
- profile.setUrl(url);
- // Check that the resource limit for secondary storage won't be exceeded
- _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(cmd.getEntityOwnerId()),
- ResourceType.secondary_storage, UriUtils.getRemoteSize(url));
- return profile;
- }
-
- @Override
- public TemplateProfile prepare(RegisterTemplateCmd cmd) throws ResourceAllocationException {
- TemplateProfile profile = super.prepare(cmd);
- String url = profile.getUrl();
-
- if((!url.toLowerCase().endsWith("vhd"))&&(!url.toLowerCase().endsWith("vhd.zip"))
- &&(!url.toLowerCase().endsWith("vhd.bz2"))&&(!url.toLowerCase().endsWith("vhd.gz"))
- &&(!url.toLowerCase().endsWith("qcow2"))&&(!url.toLowerCase().endsWith("qcow2.zip"))
- &&(!url.toLowerCase().endsWith("qcow2.bz2"))&&(!url.toLowerCase().endsWith("qcow2.gz"))
- &&(!url.toLowerCase().endsWith("ova"))&&(!url.toLowerCase().endsWith("ova.zip"))
- &&(!url.toLowerCase().endsWith("ova.bz2"))&&(!url.toLowerCase().endsWith("ova.gz"))
- &&(!url.toLowerCase().endsWith("tar"))&&(!url.toLowerCase().endsWith("tar.zip"))
- &&(!url.toLowerCase().endsWith("tar.bz2"))&&(!url.toLowerCase().endsWith("tar.gz"))
- &&(!url.toLowerCase().endsWith("img"))&&(!url.toLowerCase().endsWith("raw"))){
- throw new InvalidParameterValueException("Please specify a valid "+ cmd.getFormat().toLowerCase());
- }
-
- if ((cmd.getFormat().equalsIgnoreCase("vhd") && (!url.toLowerCase().endsWith("vhd") && !url.toLowerCase().endsWith("vhd.zip") && !url.toLowerCase().endsWith("vhd.bz2") && !url.toLowerCase().endsWith("vhd.gz") ))
- || (cmd.getFormat().equalsIgnoreCase("qcow2") && (!url.toLowerCase().endsWith("qcow2") && !url.toLowerCase().endsWith("qcow2.zip") && !url.toLowerCase().endsWith("qcow2.bz2") && !url.toLowerCase().endsWith("qcow2.gz") ))
- || (cmd.getFormat().equalsIgnoreCase("ova") && (!url.toLowerCase().endsWith("ova") && !url.toLowerCase().endsWith("ova.zip") && !url.toLowerCase().endsWith("ova.bz2") && !url.toLowerCase().endsWith("ova.gz")))
- || (cmd.getFormat().equalsIgnoreCase("tar") && (!url.toLowerCase().endsWith("tar") && !url.toLowerCase().endsWith("tar.zip") && !url.toLowerCase().endsWith("tar.bz2") && !url.toLowerCase().endsWith("tar.gz")))
- || (cmd.getFormat().equalsIgnoreCase("raw") && (!url.toLowerCase().endsWith("img") && !url.toLowerCase().endsWith("raw")))) {
- throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is an invalid for the format " + cmd.getFormat().toLowerCase());
- }
-
- UriUtils.validateUrl(url);
- profile.setUrl(url);
- // Check that the resource limit for secondary storage won't be exceeded
- _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(cmd.getEntityOwnerId()),
- ResourceType.secondary_storage, UriUtils.getRemoteSize(url));
- return profile;
- }
-
- @Override
- public VMTemplateVO create(TemplateProfile profile) {
- // persist entry in vm_template, vm_template_details and template_zone_ref tables, not that entry at template_store_ref is not created here, and created in createTemplateAsync.
- VMTemplateVO template = persistTemplate(profile);
-
- if (template == null) {
- throw new CloudRuntimeException("Unable to persist the template " + profile.getTemplate());
- }
-
- // find all eligible image stores for this zone scope
- List<DataStore> imageStores = this.storeMgr.getImageStoresByScope(new ZoneScope(profile.getZoneId()));
- if ( imageStores == null || imageStores.size() == 0 ){
- throw new CloudRuntimeException("Unable to find image store to download template "+ profile.getTemplate());
- }
+ // find all eligible image stores for this zone scope
+ List<DataStore> imageStores = this.storeMgr.getImageStoresByScope(new ZoneScope(profile.getZoneId()));
+ if ( imageStores == null || imageStores.size() == 0 ){
+ throw new CloudRuntimeException("Unable to find image store to download template "+ profile.getTemplate());
+ }
for (DataStore imageStore : imageStores) {
- TemplateInfo tmpl = this.imageFactory.getTemplate(template.getId(), imageStore);
- CreateTemplateContext<TemplateApiResult> context = new CreateTemplateContext<TemplateApiResult>(null, tmpl);
- AsyncCallbackDispatcher<HypervisorTemplateAdapter, TemplateApiResult> caller = AsyncCallbackDispatcher.create(this);
- caller.setCallback(caller.getTarget().createTemplateAsyncCallBack(null, null));
- caller.setContext(context);
- this.imageService
- .createTemplateAsync(tmpl, imageStore, caller);
+ TemplateInfo tmpl = this.imageFactory.getTemplate(template.getId(), imageStore);
+ CreateTemplateContext<TemplateApiResult> context = new CreateTemplateContext<TemplateApiResult>(null, tmpl);
+ AsyncCallbackDispatcher<HypervisorTemplateAdapter, TemplateApiResult> caller = AsyncCallbackDispatcher.create(this);
+ caller.setCallback(caller.getTarget().createTemplateAsyncCallBack(null, null));
+ caller.setContext(context);
+ this.imageService
+ .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) {
- super(callback);
- this.template = template;
- }
- }
+ private class CreateTemplateContext<T> extends AsyncRpcConext<T> {
+ final TemplateInfo template;
+ public CreateTemplateContext(AsyncCompletionCallback<T> callback, TemplateInfo template) {
+ super(callback);
+ this.template = template;
+ }
+ }
protected Void createTemplateAsyncCallBack(AsyncCallbackDispatcher<HypervisorTemplateAdapter, TemplateApiResult> callback,
CreateTemplateContext<TemplateApiResult> context) {
@@ -193,73 +192,80 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
}
}
- return null;
- }
+ return null;
+ }
- @Override @DB
- public boolean delete(TemplateProfile profile) {
- boolean success = true;
+ @Override @DB
+ public boolean delete(TemplateProfile profile) {
+ boolean success = true;
- VMTemplateVO template = profile.getTemplate();
+ VMTemplateVO template = profile.getTemplate();
// find all eligible image stores for this template
List<DataStore> imageStores = this.templateMgr.getImageStoreByTemplate(template.getId(), profile.getZoneId());
- if ( imageStores == null || imageStores.size() == 0 ){
- throw new CloudRuntimeException("Unable to find image store to delete template "+ profile.getTemplate());
- }
-
- // Make sure the template is downloaded to all found image stores
- for (DataStore store : imageStores) {
- long storeId = store.getId();
- List<TemplateDataStoreVO> templateStores = _tmpltStoreDao.listByTemplateStore(template.getId(), storeId);
- for (TemplateDataStoreVO templateStore : templateStores) {
- if (templateStore.getDownloadState() == Status.DOWNLOAD_IN_PROGRESS) {
- String errorMsg = "Please specify a template that is not currently being downloaded.";
- s_logger.debug("Template: " + template.getName() + " is currently being downloaded to secondary storage host: " + store.getName() + "; cant' delete it.");
- throw new CloudRuntimeException(errorMsg);
+ if (imageStores == null || imageStores.size() == 0) {
+ // already destroyed on image stores
+ s_logger.info("Unable to find image store still having template: " + template.getName()
+ + ", so just mark the template removed");
+ } else {
+ // Make sure the template is downloaded to all found image stores
+ for (DataStore store : imageStores) {
+ long storeId = store.getId();
+ List<TemplateDataStoreVO> templateStores = _tmpltStoreDao
+ .listByTemplateStore(template.getId(), storeId);
+ for (TemplateDataStoreVO templateStore : templateStores) {
+ if (templateStore.getDownloadState() == Status.DOWNLOAD_IN_PROGRESS) {
+ String errorMsg = "Please specify a template that is not currently being downloaded.";
+ s_logger.debug("Template: " + template.getName()
+ + " is currently being downloaded to secondary storage host: " + store.getName()
+ + "; cant' delete it.");
+ throw new CloudRuntimeException(errorMsg);
+ }
}
}
- }
- String eventType = "";
- if (template.getFormat().equals(ImageFormat.ISO)) {
- eventType = EventTypes.EVENT_ISO_DELETE;
- } else {
- eventType = EventTypes.EVENT_TEMPLATE_DELETE;
- }
-
- for (DataStore imageStore : imageStores) {
- // publish zone-wide usage event
- Long sZoneId = ((ImageStoreEntity)imageStore).getDataCenterId();
- if (sZoneId != null) {
- UsageEventUtils.publishUsageEvent(eventType, template.getAccountId(), sZoneId, template.getId(), null, null, null);
+ String eventType = "";
+ if (template.getFormat().equals(ImageFormat.ISO)) {
+ eventType = EventTypes.EVENT_ISO_DELETE;
+ } else {
+ eventType = EventTypes.EVENT_TEMPLATE_DELETE;
}
- s_logger.info("Delete template from image store: " + imageStore.getName());
- AsyncCallFuture<TemplateApiResult> future = this.imageService
- .deleteTemplateAsync(this.imageFactory.getTemplate(template.getId(), imageStore));
- try {
- TemplateApiResult result = future.get();
- success = result.isSuccess();
- if ( !success )
- break;
-
- // remove from template_zone_ref
- List<VMTemplateZoneVO> templateZones = templateZoneDao.listByZoneTemplate(sZoneId, template.getId());
- if (templateZones != null) {
- for (VMTemplateZoneVO templateZone : templateZones) {
- templateZoneDao.remove(templateZone.getId());
+ for (DataStore imageStore : imageStores) {
+ // publish zone-wide usage event
+ Long sZoneId = ((ImageStoreEntity) imageStore).getDataCenterId();
+ if (sZoneId != null) {
+ UsageEventUtils.publishUsageEvent(eventType, template.getAccountId(), sZoneId, template.getId(),
+ null, null, null);
+ }
+
+ s_logger.info("Delete template from image store: " + imageStore.getName());
+ AsyncCallFuture<TemplateApiResult> future = this.imageService.deleteTemplateAsync(this.imageFactory
+ .getTemplate(template.getId(), imageStore));
+ try {
+ TemplateApiResult result = future.get();
+ success = result.isSuccess();
+ if (!success) {
+ break;
+ }
+
+ // remove from template_zone_ref
+ List<VMTemplateZoneVO> templateZones = templateZoneDao
+ .listByZoneTemplate(sZoneId, template.getId());
+ if (templateZones != null) {
+ for (VMTemplateZoneVO templateZone : templateZones) {
+ templateZoneDao.remove(templateZone.getId());
+ }
}
+ } catch (InterruptedException e) {
+ s_logger.debug("delete template Failed", e);
+ throw new CloudRuntimeException("delete template Failed", e);
+ } catch (ExecutionException e) {
+ s_logger.debug("delete template Failed", e);
+ throw new CloudRuntimeException("delete template Failed", e);
}
- } catch (InterruptedException e) {
- s_logger.debug("delete template Failed", e);
- throw new CloudRuntimeException("delete template Failed", e);
- } catch (ExecutionException e) {
- s_logger.debug("delete template Failed", e);
- throw new CloudRuntimeException("delete template Failed", e);
}
}
-
if (success) {
s_logger.info("Delete template from template table");
// remove template from vm_templates table
@@ -275,36 +281,36 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
return success;
- }
+ }
- @Override
+ @Override
public TemplateProfile prepareDelete(DeleteTemplateCmd cmd) {
- TemplateProfile profile = super.prepareDelete(cmd);
- VMTemplateVO template = profile.getTemplate();
- Long zoneId = profile.getZoneId();
+ TemplateProfile profile = super.prepareDelete(cmd);
+ VMTemplateVO template = profile.getTemplate();
+ Long zoneId = profile.getZoneId();
- if (template.getTemplateType() == TemplateType.SYSTEM) {
- throw new InvalidParameterValueException("The DomR template cannot be deleted.");
- }
+ if (template.getTemplateType() == TemplateType.SYSTEM) {
+ throw new InvalidParameterValueException("The DomR template cannot be deleted.");
+ }
- if (zoneId != null && (this.storeMgr.getImageStore(zoneId) == null)) {
- throw new InvalidParameterValueException("Failed to find a secondary storage 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;
- }
+ return profile;
+ }
- @Override
+ @Override
public TemplateProfile prepareDelete(DeleteIsoCmd cmd) {
- TemplateProfile profile = super.prepareDelete(cmd);
- Long zoneId = profile.getZoneId();
+ TemplateProfile profile = super.prepareDelete(cmd);
+ Long zoneId = profile.getZoneId();
- if (zoneId != null && (this.storeMgr.getImageStore(zoneId) == null)) {
- throw new InvalidParameterValueException("Failed to find a secondary storage 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;
- }
+ return profile;
+ }
@Override
public TemplateProfile prepareExtractTemplate(ExtractTemplateCmd extractcmd) {