From 41f7820709f8856a93473818f13093c6dd6dd7ca Mon Sep 17 00:00:00 2001 From: Devdeep Singh Date: Tue, 6 Aug 2013 16:19:35 +0530 Subject: [PATCH] CLOUDSTACK-3774: NPE while creating template from snapshot on a upgraded setup. After upgrade the SSVM was staying in connecting/alert state. This was because while handling the processConnect command for ssvm the management server was trying to template sync. For resource limit calculation it was trying to get the remote size of the template. If the template was no longer available a number format exception was thrown. The process connect wasn't getting completed and the ssvm used to stay in connecting/alert state. While creating template from snapshot cloudstack looks for up and enabled ssvms and because there wasn't any available (as the ssvm was in coonecting/alert state) it used to pick the wrong resource (LocalNfs*Resource) instead of the NfsSecondaryStorageResource. Fixed the issue by making sure number format exceptions are avoided so that SSVM moves to the right state. --- utils/src/com/cloud/utils/UriUtils.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/utils/src/com/cloud/utils/UriUtils.java b/utils/src/com/cloud/utils/UriUtils.java index 6618e441afd..1ff4d729cbf 100644 --- a/utils/src/com/cloud/utils/UriUtils.java +++ b/utils/src/com/cloud/utils/UriUtils.java @@ -108,17 +108,22 @@ public class UriUtils { HttpsURLConnection httpsConn = null; try { URI uri = new URI(url); - if(uri.getScheme().equalsIgnoreCase("http")) { + if (uri.getScheme().equalsIgnoreCase("http")) { httpConn = (HttpURLConnection) uri.toURL().openConnection(); if (httpConn != null) { - remoteSize = Long.parseLong(httpConn.getHeaderField("content-length")); + String contentLength = httpConn.getHeaderField("content-length"); + if (contentLength != null) { + remoteSize = Long.parseLong(contentLength); + } httpConn.disconnect(); } - } - else if(uri.getScheme().equalsIgnoreCase("https")) { + } else if (uri.getScheme().equalsIgnoreCase("https")) { httpsConn = (HttpsURLConnection) uri.toURL().openConnection(); if (httpsConn != null) { - remoteSize = Long.parseLong(httpsConn.getHeaderField("content-length")); + String contentLength = httpsConn.getHeaderField("content-length"); + if (contentLength != null) { + remoteSize = Long.parseLong(contentLength); + } httpsConn.disconnect(); } }