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:46 UTC
[02/50] [abbrv] git commit: updated refs/heads/vmsync to f737019
CLOUDSTACK-2385: template download fails with Unexpected failure in Vmware.
Description:
Putting in fix to allow download of guest VM templates that are available
across zones.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/78922589
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/78922589
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/78922589
Branch: refs/heads/vmsync
Commit: 78922589bbdc7914b9d4ce3b97a9fcf03d4b7b57
Parents: 1c924e5
Author: Vijayendra Bhamidipati <vi...@citrix.com>
Authored: Thu Jun 27 12:37:20 2013 -0700
Committer: Devdeep Singh <de...@gmail.com>
Committed: Fri Jun 28 23:08:36 2013 +0530
----------------------------------------------------------------------
.../template/HypervisorTemplateAdapter.java | 104 ++++++++++---------
1 file changed, 55 insertions(+), 49 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/78922589/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 92148c3..569d947 100755
--- a/server/src/com/cloud/template/HypervisorTemplateAdapter.java
+++ b/server/src/com/cloud/template/HypervisorTemplateAdapter.java
@@ -308,60 +308,66 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
@Override
public TemplateProfile prepareExtractTemplate(ExtractTemplateCmd extractcmd) {
- TemplateProfile profile = super.prepareExtractTemplate(extractcmd);
- VMTemplateVO template = profile.getTemplate();
- Long zoneId = profile.getZoneId();
- Long templateId = template.getId();
-
- if (template.getHypervisorType() == HypervisorType.VMware) {
- PrepareOVAPackingCommand cmd = null;
- String zoneName="";
- List<HostVO> secondaryStorageHosts;
- if (!template.isCrossZones() && zoneId != null) {
- DataCenterVO zone = _dcDao.findById(zoneId);
- zoneName = zone.getName();
- 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());
+ TemplateProfile profile = super.prepareExtractTemplate(extractcmd);
+ VMTemplateVO template = profile.getTemplate();
+ Long zoneId = profile.getZoneId();
+ Long templateId = template.getId();
+
+ // Simply return profile if non-ESX hypervisor.
+ if (template.getHypervisorType() == HypervisorType.VMware) {
+ PrepareOVAPackingCommand cmd = null;
+ String zoneName="";
+ List<DataStore> imageStores = null;
+
+ if (!template.isCrossZones()) {
+ if (zoneId == null) {
+ throw new CloudRuntimeException("ZoneId cannot be null for a template that is not available across zones");
}
+ // Else get the list of image stores in this zone's scope.
+ DataCenterVO zone = _dcDao.findById(zoneId);
+ zoneName = zone.getName();
+ imageStores = this.storeMgr.getImageStoresByScope(new ZoneScope(profile.getZoneId()));
+ } else {
+ // template is available across zones. Get a list of all image stores.
+ imageStores = this.storeMgr.listImageStores();
+ }
+
+ if (imageStores == null || imageStores.size() == 0) {
+ throw new CloudRuntimeException("Unable to find an image store zone when trying to download template " + profile.getTemplate());
+ }
- s_logger.debug("Attempting to mark template host refs for template: " + template.getName() + " as destroyed in zone: " + zoneName);
+ s_logger.debug("Attempting to mark template host refs for template: " + template.getName() + " as destroyed in zone: " + zoneName);
- // Make sure the template is downloaded to all the necessary secondary storage hosts
+ // Make sure the template is downloaded to all the necessary secondary storage hosts
+
+ for (DataStore store : imageStores) {
+ long storeId = store.getId();
+ List<TemplateDataStoreVO> templateStoreVOs = _tmpltStoreDao.listByTemplateStore(templateId, storeId);
+ for (TemplateDataStoreVO templateStoreVO : templateStoreVOs) {
+ if (templateStoreVO.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() + ".");
+ throw new CloudRuntimeException(errorMsg);
+ }
+ String installPath = templateStoreVO.getInstallPath();
+ if (installPath != null) {
+ EndPoint ep = _epSelector.select(store);
+ if (ep == null) {
+ s_logger.warn("prepareOVAPacking (hyervisorTemplateAdapter): There is no secondary storage VM for secondary storage host " + store.getName());
+ throw new CloudRuntimeException("PrepareExtractTemplate: can't locate ssvm for SecStorage Host.");
+ }
+ cmd = new PrepareOVAPackingCommand(store.getUri(), installPath);
+ cmd.setContextParam("hypervisor", HypervisorType.VMware.toString());
+ Answer answer = ep.sendMessage(cmd);
- for (DataStore store : imageStores) {
- long storeId = store.getId();
- List<TemplateDataStoreVO> templateStoreVOs = _tmpltStoreDao.listByTemplateStore(templateId, storeId);
- for (TemplateDataStoreVO templateStoreVO : templateStoreVOs) {
- if (templateStoreVO.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() + ".");
- throw new CloudRuntimeException(errorMsg);
+ if (answer == null || !answer.getResult()) {
+ s_logger.debug("Failed to create OVA for template " + templateStoreVO + " due to " + ((answer == null) ? "answer is null" : answer.getDetails()));
+ throw new CloudRuntimeException("PrepareExtractTemplate: Failed to create OVA for template extraction. ");
}
- String installPath = templateStoreVO.getInstallPath();
- if (installPath != null) {
- EndPoint ep = _epSelector.select(store);
- if (ep == null) {
- s_logger.warn("prepareOVAPacking (hyervisorTemplateAdapter): There is no secondary storage VM for secondary storage host " + store.getName());
- throw new CloudRuntimeException("PrepareExtractTemplate: can't locate ssvm for SecStorage Host.");
- }
- //Answer answer = _agentMgr.sendToSecStorage(secondaryStorageHost, new PrepareOVAPackingCommand(secondaryStorageHost.getStorageUrl(), installPath));
- cmd = new PrepareOVAPackingCommand(store.getUri(), installPath);
- cmd.setContextParam("hypervisor", HypervisorType.VMware.toString());
- Answer answer = ep.sendMessage(cmd);
-
- if (answer == null || !answer.getResult()) {
- s_logger.debug("Failed to create OVA for template " + templateStoreVO + " due to " + ((answer == null) ? "answer is null" : answer.getDetails()));
- throw new CloudRuntimeException("PrepareExtractTemplate: Failed to create OVA for template extraction. ");
- }
- }
- }
- }
- } else {
- s_logger.debug("Failed to create OVA for template " + template + " due to zone non-existing.");
- throw new CloudRuntimeException("PrepareExtractTemplate: Failed to create OVA for template extraction. ");
+ }
+ }
+ }
}
- }
return profile;
- }
+ }
}