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 format;
|
||||||
private String url;
|
private String url;
|
||||||
|
private Integer connectTimeout;
|
||||||
|
private Integer connectionRequestTimeout;
|
||||||
|
private Integer socketTimeout;
|
||||||
|
|
||||||
public String getFormat() {
|
public String getFormat() {
|
||||||
return format;
|
return format;
|
||||||
@ -34,12 +37,27 @@ public class CheckUrlCommand extends Command {
|
|||||||
return url;
|
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) {
|
public CheckUrlCommand(final String format,final String url) {
|
||||||
super();
|
super();
|
||||||
this.format = format;
|
this.format = format;
|
||||||
this.url = url;
|
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
|
@Override
|
||||||
public boolean executeInSequence() {
|
public boolean executeInSequence() {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -54,7 +54,7 @@ public class DirectDownloadHelper {
|
|||||||
|
|
||||||
public static boolean checkUrlExistence(String url) {
|
public static boolean checkUrlExistence(String url) {
|
||||||
try {
|
try {
|
||||||
DirectTemplateDownloader checker = getCheckerDownloader(url);
|
DirectTemplateDownloader checker = getCheckerDownloader(url, null, null, null);
|
||||||
return checker.checkUrl(url);
|
return checker.checkUrl(url);
|
||||||
} catch (CloudRuntimeException e) {
|
} catch (CloudRuntimeException e) {
|
||||||
LOGGER.error(String.format("Cannot check URL %s is reachable due to: %s", url, e.getMessage()), 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:")) {
|
if (url.toLowerCase().startsWith("https:")) {
|
||||||
return new HttpsDirectTemplateDownloader(url);
|
return new HttpsDirectTemplateDownloader(url, connectTimeout, connectionRequestTimeout, socketTimeout);
|
||||||
} else if (url.toLowerCase().startsWith("http:")) {
|
} else if (url.toLowerCase().startsWith("http:")) {
|
||||||
return new HttpDirectTemplateDownloader(url);
|
return new HttpDirectTemplateDownloader(url, connectTimeout, socketTimeout);
|
||||||
} else if (url.toLowerCase().startsWith("nfs:")) {
|
} else if (url.toLowerCase().startsWith("nfs:")) {
|
||||||
return new NfsDirectTemplateDownloader(url);
|
return new NfsDirectTemplateDownloader(url);
|
||||||
} else if (url.toLowerCase().endsWith(".metalink")) {
|
} else if (url.toLowerCase().endsWith(".metalink")) {
|
||||||
return new MetalinkDirectTemplateDownloader(url);
|
return new MetalinkDirectTemplateDownloader(url, connectTimeout, socketTimeout);
|
||||||
} else {
|
} else {
|
||||||
throw new CloudRuntimeException(String.format("Cannot find a download checker for url: %s", url));
|
throw new CloudRuntimeException(String.format("Cannot find a download checker for url: %s", url));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Long getFileSize(String url, String format) {
|
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);
|
return checker.getRemoteFileSize(url, format);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,8 +50,8 @@ public class HttpDirectTemplateDownloader extends DirectTemplateDownloaderImpl {
|
|||||||
protected GetMethod request;
|
protected GetMethod request;
|
||||||
protected Map<String, String> reqHeaders = new HashMap<>();
|
protected Map<String, String> reqHeaders = new HashMap<>();
|
||||||
|
|
||||||
protected HttpDirectTemplateDownloader(String url) {
|
protected HttpDirectTemplateDownloader(String url, Integer connectTimeout, Integer socketTimeout) {
|
||||||
this(url, null, null, null, null, null, null, null);
|
this(url, null, null, null, null, connectTimeout, socketTimeout, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public HttpDirectTemplateDownloader(String url, Long templateId, String destPoolPath, String checksum,
|
public HttpDirectTemplateDownloader(String url, Long templateId, String destPoolPath, String checksum,
|
||||||
|
|||||||
@ -65,8 +65,8 @@ public class HttpsDirectTemplateDownloader extends DirectTemplateDownloaderImpl
|
|||||||
protected CloseableHttpClient httpsClient;
|
protected CloseableHttpClient httpsClient;
|
||||||
private HttpUriRequest req;
|
private HttpUriRequest req;
|
||||||
|
|
||||||
protected HttpsDirectTemplateDownloader(String url) {
|
protected HttpsDirectTemplateDownloader(String url, Integer connectTimeout, Integer connectionRequestTimeout, Integer socketTimeout) {
|
||||||
this(url, null, null, null, null, null, null, null, null);
|
this(url, null, null, null, null, connectTimeout, socketTimeout, connectionRequestTimeout, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public HttpsDirectTemplateDownloader(String url, Long templateId, String destPoolPath, String checksum, Map<String, String> headers,
|
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) {
|
protected MetalinkDirectTemplateDownloader(String url, Integer connectTimeout, Integer socketTimeout) {
|
||||||
this(url, null, null, null, null, null, null, null);
|
this(url, null, null, null, null, connectTimeout, socketTimeout, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MetalinkDirectTemplateDownloader(String url, String destPoolPath, Long templateId, String checksum,
|
public MetalinkDirectTemplateDownloader(String url, String destPoolPath, Long templateId, String checksum,
|
||||||
|
|||||||
@ -56,7 +56,7 @@ public class BaseDirectTemplateDownloaderTest {
|
|||||||
private HttpEntity httpEntity;
|
private HttpEntity httpEntity;
|
||||||
|
|
||||||
@InjectMocks
|
@InjectMocks
|
||||||
protected HttpsDirectTemplateDownloader httpsDownloader = new HttpsDirectTemplateDownloader(httpUrl);
|
protected HttpsDirectTemplateDownloader httpsDownloader = new HttpsDirectTemplateDownloader(httpUrl, 1000, 1000, 1000);
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void init() throws IOException {
|
public void init() throws IOException {
|
||||||
|
|||||||
@ -25,7 +25,8 @@ import org.mockito.InjectMocks;
|
|||||||
public class MetalinkDirectTemplateDownloaderTest extends BaseDirectTemplateDownloaderTest {
|
public class MetalinkDirectTemplateDownloaderTest extends BaseDirectTemplateDownloaderTest {
|
||||||
|
|
||||||
@InjectMocks
|
@InjectMocks
|
||||||
protected MetalinkDirectTemplateDownloader metalinkDownloader = new MetalinkDirectTemplateDownloader(httpsUrl);
|
protected MetalinkDirectTemplateDownloader metalinkDownloader = new MetalinkDirectTemplateDownloader(httpsUrl, 1000, 1000);
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCheckUrlMetalink() {
|
public void testCheckUrlMetalink() {
|
||||||
metalinkDownloader.downloader = httpsDownloader;
|
metalinkDownloader.downloader = httpsDownloader;
|
||||||
|
|||||||
@ -35,11 +35,16 @@ public class LibvirtCheckUrlCommand extends CommandWrapper<CheckUrlCommand, Chec
|
|||||||
@Override
|
@Override
|
||||||
public CheckUrlAnswer execute(CheckUrlCommand cmd, LibvirtComputingResource serverResource) {
|
public CheckUrlAnswer execute(CheckUrlCommand cmd, LibvirtComputingResource serverResource) {
|
||||||
final String url = cmd.getUrl();
|
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;
|
Long remoteSize = null;
|
||||||
boolean checkResult = DirectDownloadHelper.checkUrlExistence(url);
|
|
||||||
|
boolean checkResult = DirectDownloadHelper.checkUrlExistence(url, connectTimeout, connectionRequestTimeout, socketTimeout);
|
||||||
if (checkResult) {
|
if (checkResult) {
|
||||||
remoteSize = DirectDownloadHelper.getFileSize(url, cmd.getFormat());
|
remoteSize = DirectDownloadHelper.getFileSize(url, cmd.getFormat(), connectTimeout, connectionRequestTimeout, socketTimeout);
|
||||||
if (remoteSize == null || remoteSize < 0) {
|
if (remoteSize == null || remoteSize < 0) {
|
||||||
s_logger.error(String.format("Couldn't properly retrieve the remote size of the template on " +
|
s_logger.error(String.format("Couldn't properly retrieve the remote size of the template on " +
|
||||||
"url %s, obtained size = %s", url, remoteSize));
|
"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.DeleteTemplateCmd;
|
||||||
import org.apache.cloudstack.api.command.user.template.GetUploadParamsForTemplateCmd;
|
import org.apache.cloudstack.api.command.user.template.GetUploadParamsForTemplateCmd;
|
||||||
import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd;
|
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.DataObject;
|
||||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
|
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
|
||||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
|
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
|
||||||
@ -168,7 +169,10 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
|
|||||||
if (host == null) {
|
if (host == null) {
|
||||||
throw new CloudRuntimeException("Couldn't find a host to validate URL " + url);
|
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());
|
s_logger.debug("Performing URL " + url + " validation on host " + host.getId());
|
||||||
Answer answer = _agentMgr.easySend(host.getId(), cmd);
|
Answer answer = _agentMgr.easySend(host.getId(), cmd);
|
||||||
if (answer == null || !answer.getResult()) {
|
if (answer == null || !answer.getResult()) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user