Skip to content

Commit 8cd7147

Browse files
committed
Merge remote-tracking branch 'origin/4.18'
2 parents 2853871 + 221f863 commit 8cd7147

9 files changed

Lines changed: 61 additions & 18 deletions

File tree

core/src/main/java/org/apache/cloudstack/agent/directdownload/CheckUrlCommand.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ public class CheckUrlCommand extends Command {
2525

2626
private String format;
2727
private String url;
28+
private Integer connectTimeout;
29+
private Integer connectionRequestTimeout;
30+
private Integer socketTimeout;
2831

2932
public String getFormat() {
3033
return format;
@@ -34,12 +37,27 @@ public String getUrl() {
3437
return url;
3538
}
3639

40+
public Integer getConnectTimeout() { return connectTimeout; }
41+
42+
public Integer getConnectionRequestTimeout() { return connectionRequestTimeout; }
43+
44+
public Integer getSocketTimeout() { return socketTimeout; }
45+
3746
public CheckUrlCommand(final String format,final String url) {
3847
super();
3948
this.format = format;
4049
this.url = url;
4150
}
4251

52+
public CheckUrlCommand(final String format,final String url, Integer connectTimeout, Integer connectionRequestTimeout, Integer socketTimeout) {
53+
super();
54+
this.format = format;
55+
this.url = url;
56+
this.connectTimeout = connectTimeout;
57+
this.socketTimeout = socketTimeout;
58+
this.connectionRequestTimeout = connectionRequestTimeout;
59+
}
60+
4361
@Override
4462
public boolean executeInSequence() {
4563
return false;

core/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadHelper.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,30 +54,45 @@ public static DirectTemplateDownloader getDirectTemplateDownloaderFromCommand(Di
5454

5555
public static boolean checkUrlExistence(String url) {
5656
try {
57-
DirectTemplateDownloader checker = getCheckerDownloader(url);
57+
DirectTemplateDownloader checker = getCheckerDownloader(url, null, null, null);
5858
return checker.checkUrl(url);
5959
} catch (CloudRuntimeException e) {
6060
LOGGER.error(String.format("Cannot check URL %s is reachable due to: %s", url, e.getMessage()), e);
6161
return false;
6262
}
6363
}
6464

65-
private static DirectTemplateDownloader getCheckerDownloader(String url) {
65+
public static boolean checkUrlExistence(String url, Integer connectTimeout, Integer connectionRequestTimeout, Integer socketTimeout) {
66+
try {
67+
DirectTemplateDownloader checker = getCheckerDownloader(url, connectTimeout, connectionRequestTimeout, socketTimeout);
68+
return checker.checkUrl(url);
69+
} catch (CloudRuntimeException e) {
70+
LOGGER.error(String.format("Cannot check URL %s is reachable due to: %s", url, e.getMessage()), e);
71+
return false;
72+
}
73+
}
74+
75+
private static DirectTemplateDownloader getCheckerDownloader(String url, Integer connectTimeout, Integer connectionRequestTimeout, Integer socketTimeout) {
6676
if (url.toLowerCase().startsWith("https:")) {
67-
return new HttpsDirectTemplateDownloader(url);
77+
return new HttpsDirectTemplateDownloader(url, connectTimeout, connectionRequestTimeout, socketTimeout);
6878
} else if (url.toLowerCase().startsWith("http:")) {
69-
return new HttpDirectTemplateDownloader(url);
79+
return new HttpDirectTemplateDownloader(url, connectTimeout, socketTimeout);
7080
} else if (url.toLowerCase().startsWith("nfs:")) {
7181
return new NfsDirectTemplateDownloader(url);
7282
} else if (url.toLowerCase().endsWith(".metalink")) {
73-
return new MetalinkDirectTemplateDownloader(url);
83+
return new MetalinkDirectTemplateDownloader(url, connectTimeout, socketTimeout);
7484
} else {
7585
throw new CloudRuntimeException(String.format("Cannot find a download checker for url: %s", url));
7686
}
7787
}
7888

7989
public static Long getFileSize(String url, String format) {
80-
DirectTemplateDownloader checker = getCheckerDownloader(url);
90+
DirectTemplateDownloader checker = getCheckerDownloader(url, null, null, null);
91+
return checker.getRemoteFileSize(url, format);
92+
}
93+
94+
public static Long getFileSize(String url, String format, Integer connectTimeout, Integer connectionRequestTimeout, Integer socketTimeout) {
95+
DirectTemplateDownloader checker = getCheckerDownloader(url, connectTimeout, connectionRequestTimeout, socketTimeout);
8196
return checker.getRemoteFileSize(url, format);
8297
}
8398
}

core/src/main/java/org/apache/cloudstack/direct/download/HttpDirectTemplateDownloader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ public class HttpDirectTemplateDownloader extends DirectTemplateDownloaderImpl {
5050
protected GetMethod request;
5151
protected Map<String, String> reqHeaders = new HashMap<>();
5252

53-
protected HttpDirectTemplateDownloader(String url) {
54-
this(url, null, null, null, null, null, null, null);
53+
protected HttpDirectTemplateDownloader(String url, Integer connectTimeout, Integer socketTimeout) {
54+
this(url, null, null, null, null, connectTimeout, socketTimeout, null);
5555
}
5656

5757
public HttpDirectTemplateDownloader(String url, Long templateId, String destPoolPath, String checksum,

core/src/main/java/org/apache/cloudstack/direct/download/HttpsDirectTemplateDownloader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ public class HttpsDirectTemplateDownloader extends DirectTemplateDownloaderImpl
6565
protected CloseableHttpClient httpsClient;
6666
private HttpUriRequest req;
6767

68-
protected HttpsDirectTemplateDownloader(String url) {
69-
this(url, null, null, null, null, null, null, null, null);
68+
protected HttpsDirectTemplateDownloader(String url, Integer connectTimeout, Integer connectionRequestTimeout, Integer socketTimeout) {
69+
this(url, null, null, null, null, connectTimeout, socketTimeout, connectionRequestTimeout, null);
7070
}
7171

7272
public HttpsDirectTemplateDownloader(String url, Long templateId, String destPoolPath, String checksum, Map<String, String> headers,

core/src/main/java/org/apache/cloudstack/direct/download/MetalinkDirectTemplateDownloader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ protected DirectTemplateDownloader createDownloaderForMetalinks(String url, Long
6060
}
6161
}
6262

63-
protected MetalinkDirectTemplateDownloader(String url) {
64-
this(url, null, null, null, null, null, null, null);
63+
protected MetalinkDirectTemplateDownloader(String url, Integer connectTimeout, Integer socketTimeout) {
64+
this(url, null, null, null, null, connectTimeout, socketTimeout, null);
6565
}
6666

6767
public MetalinkDirectTemplateDownloader(String url, String destPoolPath, Long templateId, String checksum,

core/src/test/java/org/apache/cloudstack/direct/download/BaseDirectTemplateDownloaderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public class BaseDirectTemplateDownloaderTest {
5656
private HttpEntity httpEntity;
5757

5858
@InjectMocks
59-
protected HttpsDirectTemplateDownloader httpsDownloader = new HttpsDirectTemplateDownloader(httpUrl);
59+
protected HttpsDirectTemplateDownloader httpsDownloader = new HttpsDirectTemplateDownloader(httpUrl, 1000, 1000, 1000);
6060

6161
@Before
6262
public void init() throws IOException {

core/src/test/java/org/apache/cloudstack/direct/download/MetalinkDirectTemplateDownloaderTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
public class MetalinkDirectTemplateDownloaderTest extends BaseDirectTemplateDownloaderTest {
2626

2727
@InjectMocks
28-
protected MetalinkDirectTemplateDownloader metalinkDownloader = new MetalinkDirectTemplateDownloader(httpsUrl);
28+
protected MetalinkDirectTemplateDownloader metalinkDownloader = new MetalinkDirectTemplateDownloader(httpsUrl, 1000, 1000);
29+
2930
@Test
3031
public void testCheckUrlMetalink() {
3132
metalinkDownloader.downloader = httpsDownloader;

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckUrlCommand.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,16 @@ public class LibvirtCheckUrlCommand extends CommandWrapper<CheckUrlCommand, Chec
3535
@Override
3636
public CheckUrlAnswer execute(CheckUrlCommand cmd, LibvirtComputingResource serverResource) {
3737
final String url = cmd.getUrl();
38-
s_logger.info("Checking URL: " + url);
38+
final Integer connectTimeout = cmd.getConnectTimeout();
39+
final Integer connectionRequestTimeout = cmd.getConnectionRequestTimeout();
40+
final Integer socketTimeout = cmd.getSocketTimeout();
41+
42+
s_logger.info(String.format("Checking URL: %s, with connect timeout: %d, connect request timeout: %d, socket timeout: %d", url, connectTimeout, connectionRequestTimeout, socketTimeout));
3943
Long remoteSize = null;
40-
boolean checkResult = DirectDownloadHelper.checkUrlExistence(url);
44+
45+
boolean checkResult = DirectDownloadHelper.checkUrlExistence(url, connectTimeout, connectionRequestTimeout, socketTimeout);
4146
if (checkResult) {
42-
remoteSize = DirectDownloadHelper.getFileSize(url, cmd.getFormat());
47+
remoteSize = DirectDownloadHelper.getFileSize(url, cmd.getFormat(), connectTimeout, connectionRequestTimeout, socketTimeout);
4348
if (remoteSize == null || remoteSize < 0) {
4449
s_logger.error(String.format("Couldn't properly retrieve the remote size of the template on " +
4550
"url %s, obtained size = %s", url, remoteSize));

server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd;
4040
import org.apache.cloudstack.api.command.user.template.GetUploadParamsForTemplateCmd;
4141
import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd;
42+
import org.apache.cloudstack.direct.download.DirectDownloadManager;
4243
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
4344
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
4445
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
@@ -168,7 +169,10 @@ private Long performDirectDownloadUrlValidation(final String format, final Hyper
168169
if (host == null) {
169170
throw new CloudRuntimeException("Couldn't find a host to validate URL " + url);
170171
}
171-
CheckUrlCommand cmd = new CheckUrlCommand(format, url);
172+
Integer socketTimeout = DirectDownloadManager.DirectDownloadSocketTimeout.value();
173+
Integer connectRequestTimeout = DirectDownloadManager.DirectDownloadConnectionRequestTimeout.value();
174+
Integer connectTimeout = DirectDownloadManager.DirectDownloadConnectTimeout.value();
175+
CheckUrlCommand cmd = new CheckUrlCommand(format, url, connectTimeout, connectRequestTimeout, socketTimeout);
172176
s_logger.debug("Performing URL " + url + " validation on host " + host.getId());
173177
Answer answer = _agentMgr.easySend(host.getId(), cmd);
174178
if (answer == null || !answer.getResult()) {

0 commit comments

Comments
 (0)