From e8e4cd70afc9c73c7e69528c4e4e68141581175d Mon Sep 17 00:00:00 2001 From: nvazquez Date: Tue, 27 Feb 2018 19:34:07 -0300 Subject: [PATCH] Fix metalink urls issue --- .../HttpDirectTemplateDownloader.java | 1 + .../HttpsDirectTemplateDownloader.java | 1 + .../kvm/storage/KVMStorageProcessor.java | 24 +++++++++++-------- utils/src/com/cloud/utils/UriUtils.java | 5 ++-- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/agent/src/com/cloud/agent/direct/download/HttpDirectTemplateDownloader.java b/agent/src/com/cloud/agent/direct/download/HttpDirectTemplateDownloader.java index 0ff8a600423..3a971f6d538 100644 --- a/agent/src/com/cloud/agent/direct/download/HttpDirectTemplateDownloader.java +++ b/agent/src/com/cloud/agent/direct/download/HttpDirectTemplateDownloader.java @@ -111,6 +111,7 @@ public class HttpDirectTemplateDownloader extends DirectTemplateDownloaderImpl { } protected boolean performDownload() { + s_logger.info("Downloading template " + getTemplateId() + " from " + getUrl() + " to: " + getDownloadedFilePath()); try ( InputStream in = request.getResponseBodyAsStream(); OutputStream out = new FileOutputStream(getDownloadedFilePath()); diff --git a/agent/src/com/cloud/agent/direct/download/HttpsDirectTemplateDownloader.java b/agent/src/com/cloud/agent/direct/download/HttpsDirectTemplateDownloader.java index b28547e069f..bbdf8ac5ffc 100644 --- a/agent/src/com/cloud/agent/direct/download/HttpsDirectTemplateDownloader.java +++ b/agent/src/com/cloud/agent/direct/download/HttpsDirectTemplateDownloader.java @@ -110,6 +110,7 @@ public class HttpsDirectTemplateDownloader extends HttpDirectTemplateDownloader * Consume response and persist it on getDownloadedFilePath() file */ protected boolean consumeResponse(CloseableHttpResponse response) { + s_logger.info("Downloading template " + getTemplateId() + " from " + getUrl() + " to: " + getDownloadedFilePath()); if (response.getStatusLine().getStatusCode() != 200) { throw new CloudRuntimeException("Error on HTTPS response"); } diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java index 3f37fd314f2..44bed069af6 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java @@ -1311,16 +1311,20 @@ public class KVMStorageProcessor implements StorageProcessor { KVMStoragePool destPool = storagePoolMgr.getStoragePool(pool.getPoolType(), pool.getUuid()); DirectTemplateDownloader downloader; - if (cmd instanceof HttpDirectDownloadCommand) { - downloader = new HttpDirectTemplateDownloader(cmd.getUrl(), cmd.getTemplateId(), destPool.getLocalPath(), cmd.getChecksum(), cmd.getHeaders()); - } else if (cmd instanceof HttpsDirectDownloadCommand) { - downloader = new HttpsDirectTemplateDownloader(cmd.getUrl(), cmd.getTemplateId(), destPool.getLocalPath(), cmd.getChecksum(), cmd.getHeaders()); - } else if (cmd instanceof NfsDirectDownloadCommand) { - downloader = new NfsDirectTemplateDownloader(cmd.getUrl(), destPool.getLocalPath(), cmd.getTemplateId(), cmd.getChecksum()); - } else if (cmd instanceof MetalinkDirectDownloadCommand) { - downloader = new MetalinkDirectTemplateDownloader(cmd.getUrl(), destPool.getLocalPath(), cmd.getTemplateId(), cmd.getChecksum(), cmd.getHeaders()); - } else { - return new DirectDownloadAnswer(false, "Unsupported protocol, please provide HTTP(S), NFS or a metalink"); + try { + if (cmd instanceof HttpDirectDownloadCommand) { + downloader = new HttpDirectTemplateDownloader(cmd.getUrl(), cmd.getTemplateId(), destPool.getLocalPath(), cmd.getChecksum(), cmd.getHeaders()); + } else if (cmd instanceof HttpsDirectDownloadCommand) { + downloader = new HttpsDirectTemplateDownloader(cmd.getUrl(), cmd.getTemplateId(), destPool.getLocalPath(), cmd.getChecksum(), cmd.getHeaders()); + } else if (cmd instanceof NfsDirectDownloadCommand) { + downloader = new NfsDirectTemplateDownloader(cmd.getUrl(), destPool.getLocalPath(), cmd.getTemplateId(), cmd.getChecksum()); + } else if (cmd instanceof MetalinkDirectDownloadCommand) { + downloader = new MetalinkDirectTemplateDownloader(cmd.getUrl(), destPool.getLocalPath(), cmd.getTemplateId(), cmd.getChecksum(), cmd.getHeaders()); + } else { + return new DirectDownloadAnswer(false, "Unsupported protocol, please provide HTTP(S), NFS or a metalink"); + } + } catch (CloudRuntimeException e) { + return new DirectDownloadAnswer(false, "Unable to create direct downloader: " + e.getMessage()); } if (!downloader.downloadTemplate()) { diff --git a/utils/src/com/cloud/utils/UriUtils.java b/utils/src/com/cloud/utils/UriUtils.java index ed4d52ef182..f15b1971602 100644 --- a/utils/src/com/cloud/utils/UriUtils.java +++ b/utils/src/com/cloud/utils/UriUtils.java @@ -435,9 +435,8 @@ public class UriUtils { HttpClient httpClient = getHttpClient(); GetMethod getMethod = new GetMethod(metalinkUrl); List urls = new ArrayList<>(); - try ( - InputStream is = getMethod.getResponseBodyAsStream() - ) { + try { + InputStream is = getMethod.getResponseBodyAsStream(); if (httpClient.executeMethod(getMethod) == HttpStatus.SC_OK) { Map> metalinkUrlsMap = getMultipleValuesFromXML(is, new String[] {"url"}); if (metalinkUrlsMap.containsKey("url")) {