From f1d13729afde0051383462e43ae1cfd8e717f5bc Mon Sep 17 00:00:00 2001 From: Nitin Date: Fri, 12 Aug 2011 12:21:02 +0530 Subject: [PATCH] bug 11096: ExtractTemplate - For private template choose the correct sec storage host id since its not present in all the sec storage now. --- .../DeleteEntityDownloadURLCommand.java | 12 ++++++- .../storage/template/UploadManagerImpl.java | 2 +- .../storage/upload/UploadMonitorImpl.java | 34 ++++++------------- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java b/api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java index 05066b06549..24e1f074072 100755 --- a/api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java +++ b/api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java @@ -25,12 +25,14 @@ public class DeleteEntityDownloadURLCommand extends AbstractDownloadCommand { private String path; private String extractUrl; private Upload.Type type; + private String parentPath; - public DeleteEntityDownloadURLCommand(String path, Upload.Type type, String url) { + public DeleteEntityDownloadURLCommand(String path, Upload.Type type, String url, String parentPath) { super(); this.path = path; this.type = type; this.extractUrl = url; + this.parentPath = parentPath; } public DeleteEntityDownloadURLCommand() { @@ -61,4 +63,12 @@ public class DeleteEntityDownloadURLCommand extends AbstractDownloadCommand { this.extractUrl = extractUrl; } + public String getParentPath() { + return parentPath; + } + + public void setParentPath(String parentPath) { + this.parentPath = parentPath; + } + } diff --git a/core/src/com/cloud/storage/template/UploadManagerImpl.java b/core/src/com/cloud/storage/template/UploadManagerImpl.java index da88da86868..583f6f0af4d 100755 --- a/core/src/com/cloud/storage/template/UploadManagerImpl.java +++ b/core/src/com/cloud/storage/template/UploadManagerImpl.java @@ -411,7 +411,7 @@ public class UploadManagerImpl implements UploadManager { if(cmd.getType() == Upload.Type.VOLUME){ command = new Script("/bin/bash", s_logger); command.add("-c"); - command.add("rm -f " + parentDir +File.separator+ path); + command.add("rm -f /mnt/SecStorage/" + cmd.getParentPath() +File.separator+ path); s_logger.warn(" " +parentDir +File.separator+ path); result = command.execute(); if (result != null) { diff --git a/server/src/com/cloud/storage/upload/UploadMonitorImpl.java b/server/src/com/cloud/storage/upload/UploadMonitorImpl.java index 320954a460e..5eabeced5e8 100755 --- a/server/src/com/cloud/storage/upload/UploadMonitorImpl.java +++ b/server/src/com/cloud/storage/upload/UploadMonitorImpl.java @@ -194,26 +194,13 @@ public class UploadMonitorImpl implements UploadMonitor { String errorString = ""; boolean success = false; - List storageServers = _serverDao.listByTypeDataCenter(Host.Type.SecondaryStorage, dataCenterId); - if(storageServers == null || storageServers.size() == 0) { - throw new CloudRuntimeException("No Storage Server found at the datacenter - " +dataCenterId); - } - + Host secStorage = ApiDBUtils.findHostById(vmTemplateHost.getHostId()); Type type = (template.getFormat() == ImageFormat.ISO) ? Type.ISO : Type.TEMPLATE ; - List storageServerVMs = _serverDao.listByTypeDataCenter(Host.Type.SecondaryStorageVM, dataCenterId); - //Check if one ssvm is up - boolean no_vm_up = true; - HostVO use_ssvm = null; - for (HostVO ssvm: storageServerVMs){ - if(ssvm.getStatus() == com.cloud.host.Status.Up){ - no_vm_up = false; - use_ssvm = ssvm; - break; - } - } - if(no_vm_up){ - throw new CloudRuntimeException("Couldnt create extract link - Secondary Storage Vm is not up"); + //Check if ssvm is up + HostVO ssvm = _agentMgr.getSSAgent(ApiDBUtils.findHostById(vmTemplateHost.getHostId())); + if( ssvm == null ) { + throw new CloudRuntimeException("There is no secondary storage VM for secondary storage host " + secStorage.getId()); } //Check if it already exists. @@ -223,7 +210,7 @@ public class UploadMonitorImpl implements UploadMonitor { } // It doesn't exist so create a DB entry. - UploadVO uploadTemplateObj = new UploadVO(use_ssvm.getId(), template.getId(), new Date(), + UploadVO uploadTemplateObj = new UploadVO(vmTemplateHost.getHostId(), template.getId(), new Date(), Status.DOWNLOAD_URL_NOT_CREATED, 0, type, Mode.HTTP_DOWNLOAD); uploadTemplateObj.setInstallPath(vmTemplateHost.getInstallPath()); _uploadDao.persist(uploadTemplateObj); @@ -231,8 +218,8 @@ public class UploadMonitorImpl implements UploadMonitor { // Create Symlink at ssvm String path = vmTemplateHost.getInstallPath(); String uuid = UUID.randomUUID().toString() + path.substring(path.length() - 4) ; // last 4 characters of the path specify the format like .vhd - CreateEntityDownloadURLCommand cmd = new CreateEntityDownloadURLCommand(storageServers.get(0).getParent(), path, uuid); - long result = send(use_ssvm.getId(), cmd, null); + CreateEntityDownloadURLCommand cmd = new CreateEntityDownloadURLCommand(secStorage.getParent(), path, uuid); + long result = send(ssvm.getId(), cmd, null); if (result == -1){ errorString = "Unable to create a link for " +type+ " id:"+template.getId(); s_logger.error(errorString); @@ -474,10 +461,11 @@ public class UploadMonitorImpl implements UploadMonitor { for (UploadVO extractJob : extractJobs){ if( getTimeDiff(extractJob.getLastUpdated()) > EXTRACT_URL_LIFE_LIMIT_IN_SECONDS ){ String path = extractJob.getInstallPath(); + HostVO secStorage = ApiDBUtils.findHostById(extractJob.getHostId()); s_logger.debug("Sending deletion of extract URL "+extractJob.getUploadUrl()); // Would delete the symlink for the Type and if Type == VOLUME then also the volume - DeleteEntityDownloadURLCommand cmd = new DeleteEntityDownloadURLCommand(path, extractJob.getType(),extractJob.getUploadUrl()); - HostVO ssvm = _agentMgr.getSSAgent(ApiDBUtils.findHostById(extractJob.getHostId())); + DeleteEntityDownloadURLCommand cmd = new DeleteEntityDownloadURLCommand(path, extractJob.getType(),extractJob.getUploadUrl(), secStorage.getParent()); + HostVO ssvm = _agentMgr.getSSAgent(secStorage); if( ssvm == null ) { s_logger.warn("There is no secondary storage VM for secondary storage host " + extractJob.getHostId()); continue;