mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Merge remote-tracking branch 'origin/4.18'
This commit is contained in:
commit
8cd7147b25
@ -25,6 +25,9 @@ public class CheckUrlCommand extends Command {
|
||||
|
||||
private String format;
|
||||
private String url;
|
||||
private Integer connectTimeout;
|
||||
private Integer connectionRequestTimeout;
|
||||
private Integer socketTimeout;
|
||||
|
||||
public String getFormat() {
|
||||
return format;
|
||||
@ -34,12 +37,27 @@ public class CheckUrlCommand extends Command {
|
||||
return url;
|
||||
}
|
||||
|
||||
public Integer getConnectTimeout() { return connectTimeout; }
|
||||
|
||||
public Integer getConnectionRequestTimeout() { return connectionRequestTimeout; }
|
||||
|
||||
public Integer getSocketTimeout() { return socketTimeout; }
|
||||
|
||||
public CheckUrlCommand(final String format,final String url) {
|
||||
super();
|
||||
this.format = format;
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public CheckUrlCommand(final String format,final String url, Integer connectTimeout, Integer connectionRequestTimeout, Integer socketTimeout) {
|
||||
super();
|
||||
this.format = format;
|
||||
this.url = url;
|
||||
this.connectTimeout = connectTimeout;
|
||||
this.socketTimeout = socketTimeout;
|
||||
this.connectionRequestTimeout = connectionRequestTimeout;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean executeInSequence() {
|
||||
return false;
|
||||
|
||||
@ -54,7 +54,7 @@ public class DirectDownloadHelper {
|
||||
|
||||
public static boolean checkUrlExistence(String url) {
|
||||
try {
|
||||
DirectTemplateDownloader checker = getCheckerDownloader(url);
|
||||
DirectTemplateDownloader checker = getCheckerDownloader(url, null, null, null);
|
||||
return checker.checkUrl(url);
|
||||
} catch (CloudRuntimeException e) {
|
||||
LOGGER.error(String.format("Cannot check URL %s is reachable due to: %s", url, e.getMessage()), e);
|
||||
@ -62,22 +62,37 @@ public class DirectDownloadHelper {
|
||||
}
|
||||
}
|
||||
|
||||
private static DirectTemplateDownloader getCheckerDownloader(String url) {
|
||||
public static boolean checkUrlExistence(String url, Integer connectTimeout, Integer connectionRequestTimeout, Integer socketTimeout) {
|
||||
try {
|
||||
DirectTemplateDownloader checker = getCheckerDownloader(url, connectTimeout, connectionRequestTimeout, socketTimeout);
|
||||
return checker.checkUrl(url);
|
||||
} catch (CloudRuntimeException e) {
|
||||
LOGGER.error(String.format("Cannot check URL %s is reachable due to: %s", url, e.getMessage()), e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static DirectTemplateDownloader getCheckerDownloader(String url, Integer connectTimeout, Integer connectionRequestTimeout, Integer socketTimeout) {
|
||||
if (url.toLowerCase().startsWith("https:")) {
|
||||
return new HttpsDirectTemplateDownloader(url);
|
||||
return new HttpsDirectTemplateDownloader(url, connectTimeout, connectionRequestTimeout, socketTimeout);
|
||||
} else if (url.toLowerCase().startsWith("http:")) {
|
||||
return new HttpDirectTemplateDownloader(url);
|
||||
return new HttpDirectTemplateDownloader(url, connectTimeout, socketTimeout);
|
||||
} else if (url.toLowerCase().startsWith("nfs:")) {
|
||||
return new NfsDirectTemplateDownloader(url);
|
||||
} else if (url.toLowerCase().endsWith(".metalink")) {
|
||||
return new MetalinkDirectTemplateDownloader(url);
|
||||
return new MetalinkDirectTemplateDownloader(url, connectTimeout, socketTimeout);
|
||||
} else {
|
||||
throw new CloudRuntimeException(String.format("Cannot find a download checker for url: %s", url));
|
||||
}
|
||||
}
|
||||
|
||||
public static Long getFileSize(String url, String format) {
|
||||
DirectTemplateDownloader checker = getCheckerDownloader(url);
|
||||
DirectTemplateDownloader checker = getCheckerDownloader(url, null, null, null);
|
||||
return checker.getRemoteFileSize(url, format);
|
||||
}
|
||||
|
||||
public static Long getFileSize(String url, String format, Integer connectTimeout, Integer connectionRequestTimeout, Integer socketTimeout) {
|
||||
DirectTemplateDownloader checker = getCheckerDownloader(url, connectTimeout, connectionRequestTimeout, socketTimeout);
|
||||
return checker.getRemoteFileSize(url, format);
|
||||
}
|
||||
}
|
||||
|
||||
@ -50,8 +50,8 @@ public class HttpDirectTemplateDownloader extends DirectTemplateDownloaderImpl {
|
||||
protected GetMethod request;
|
||||
protected Map<String, String> reqHeaders = new HashMap<>();
|
||||
|
||||
protected HttpDirectTemplateDownloader(String url) {
|
||||
this(url, null, null, null, null, null, null, null);
|
||||
protected HttpDirectTemplateDownloader(String url, Integer connectTimeout, Integer socketTimeout) {
|
||||
this(url, null, null, null, null, connectTimeout, socketTimeout, null);
|
||||
}
|
||||
|
||||
public HttpDirectTemplateDownloader(String url, Long templateId, String destPoolPath, String checksum,
|
||||
|
||||
@ -65,8 +65,8 @@ public class HttpsDirectTemplateDownloader extends DirectTemplateDownloaderImpl
|
||||
protected CloseableHttpClient httpsClient;
|
||||
private HttpUriRequest req;
|
||||
|
||||
protected HttpsDirectTemplateDownloader(String url) {
|
||||
this(url, null, null, null, null, null, null, null, null);
|
||||
protected HttpsDirectTemplateDownloader(String url, Integer connectTimeout, Integer connectionRequestTimeout, Integer socketTimeout) {
|
||||
this(url, null, null, null, null, connectTimeout, socketTimeout, connectionRequestTimeout, null);
|
||||
}
|
||||
|
||||
public HttpsDirectTemplateDownloader(String url, Long templateId, String destPoolPath, String checksum, Map<String, String> headers,
|
||||
|
||||
@ -60,8 +60,8 @@ public class MetalinkDirectTemplateDownloader extends DirectTemplateDownloaderIm
|
||||
}
|
||||
}
|
||||
|
||||
protected MetalinkDirectTemplateDownloader(String url) {
|
||||
this(url, null, null, null, null, null, null, null);
|
||||
protected MetalinkDirectTemplateDownloader(String url, Integer connectTimeout, Integer socketTimeout) {
|
||||
this(url, null, null, null, null, connectTimeout, socketTimeout, null);
|
||||
}
|
||||
|
||||
public MetalinkDirectTemplateDownloader(String url, String destPoolPath, Long templateId, String checksum,
|
||||
|
||||
@ -56,7 +56,7 @@ public class BaseDirectTemplateDownloaderTest {
|
||||
private HttpEntity httpEntity;
|
||||
|
||||
@InjectMocks
|
||||
protected HttpsDirectTemplateDownloader httpsDownloader = new HttpsDirectTemplateDownloader(httpUrl);
|
||||
protected HttpsDirectTemplateDownloader httpsDownloader = new HttpsDirectTemplateDownloader(httpUrl, 1000, 1000, 1000);
|
||||
|
||||
@Before
|
||||
public void init() throws IOException {
|
||||
|
||||
@ -25,7 +25,8 @@ import org.mockito.InjectMocks;
|
||||
public class MetalinkDirectTemplateDownloaderTest extends BaseDirectTemplateDownloaderTest {
|
||||
|
||||
@InjectMocks
|
||||
protected MetalinkDirectTemplateDownloader metalinkDownloader = new MetalinkDirectTemplateDownloader(httpsUrl);
|
||||
protected MetalinkDirectTemplateDownloader metalinkDownloader = new MetalinkDirectTemplateDownloader(httpsUrl, 1000, 1000);
|
||||
|
||||
@Test
|
||||
public void testCheckUrlMetalink() {
|
||||
metalinkDownloader.downloader = httpsDownloader;
|
||||
|
||||
@ -35,11 +35,16 @@ public class LibvirtCheckUrlCommand extends CommandWrapper<CheckUrlCommand, Chec
|
||||
@Override
|
||||
public CheckUrlAnswer execute(CheckUrlCommand cmd, LibvirtComputingResource serverResource) {
|
||||
final String url = cmd.getUrl();
|
||||
s_logger.info("Checking URL: " + url);
|
||||
final Integer connectTimeout = cmd.getConnectTimeout();
|
||||
final Integer connectionRequestTimeout = cmd.getConnectionRequestTimeout();
|
||||
final Integer socketTimeout = cmd.getSocketTimeout();
|
||||
|
||||
s_logger.info(String.format("Checking URL: %s, with connect timeout: %d, connect request timeout: %d, socket timeout: %d", url, connectTimeout, connectionRequestTimeout, socketTimeout));
|
||||
Long remoteSize = null;
|
||||
boolean checkResult = DirectDownloadHelper.checkUrlExistence(url);
|
||||
|
||||
boolean checkResult = DirectDownloadHelper.checkUrlExistence(url, connectTimeout, connectionRequestTimeout, socketTimeout);
|
||||
if (checkResult) {
|
||||
remoteSize = DirectDownloadHelper.getFileSize(url, cmd.getFormat());
|
||||
remoteSize = DirectDownloadHelper.getFileSize(url, cmd.getFormat(), connectTimeout, connectionRequestTimeout, socketTimeout);
|
||||
if (remoteSize == null || remoteSize < 0) {
|
||||
s_logger.error(String.format("Couldn't properly retrieve the remote size of the template on " +
|
||||
"url %s, obtained size = %s", url, remoteSize));
|
||||
|
||||
@ -39,6 +39,7 @@ import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd;
|
||||
import org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd;
|
||||
import org.apache.cloudstack.api.command.user.template.GetUploadParamsForTemplateCmd;
|
||||
import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd;
|
||||
import org.apache.cloudstack.direct.download.DirectDownloadManager;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
|
||||
@ -168,7 +169,10 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
|
||||
if (host == null) {
|
||||
throw new CloudRuntimeException("Couldn't find a host to validate URL " + url);
|
||||
}
|
||||
CheckUrlCommand cmd = new CheckUrlCommand(format, url);
|
||||
Integer socketTimeout = DirectDownloadManager.DirectDownloadSocketTimeout.value();
|
||||
Integer connectRequestTimeout = DirectDownloadManager.DirectDownloadConnectionRequestTimeout.value();
|
||||
Integer connectTimeout = DirectDownloadManager.DirectDownloadConnectTimeout.value();
|
||||
CheckUrlCommand cmd = new CheckUrlCommand(format, url, connectTimeout, connectRequestTimeout, socketTimeout);
|
||||
s_logger.debug("Performing URL " + url + " validation on host " + host.getId());
|
||||
Answer answer = _agentMgr.easySend(host.getId(), cmd);
|
||||
if (answer == null || !answer.getResult()) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user