Skip to content

Commit bb607d0

Browse files
mrunalinikankariyaDaanHoogland
authored andcommitted
CLOUDSTACK-10054:Volume download times out in 3600 seconds (apache#2244)
1 parent cdddecb commit bb607d0

22 files changed

Lines changed: 148 additions & 64 deletions

File tree

core/src/main/java/com/cloud/storage/template/IsoProcessor.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ public class IsoProcessor extends AdapterBase implements Processor {
3737

3838
@Override
3939
public FormatInfo process(String templatePath, ImageFormat format, String templateName) {
40+
return process(templatePath, format, templateName, 0);
41+
}
42+
43+
@Override
44+
public FormatInfo process(String templatePath, ImageFormat format, String templateName, long processTimeout) {
4045
if (format != null) {
4146
s_logger.debug("We don't handle conversion from " + format + " to ISO.");
4247
return null;

core/src/main/java/com/cloud/storage/template/OVAProcessor.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,15 @@
4242

4343
public class OVAProcessor extends AdapterBase implements Processor {
4444
private static final Logger s_logger = Logger.getLogger(OVAProcessor.class);
45-
4645
StorageLayer _storage;
4746

4847
@Override
4948
public FormatInfo process(String templatePath, ImageFormat format, String templateName) throws InternalErrorException {
49+
return process(templatePath, format, templateName, 0);
50+
}
51+
52+
@Override
53+
public FormatInfo process(String templatePath, ImageFormat format, String templateName, long processTimeout) throws InternalErrorException {
5054
if (format != null) {
5155
if (s_logger.isInfoEnabled()) {
5256
s_logger.info("We currently don't handle conversion from " + format + " to OVA.");
@@ -66,8 +70,7 @@ public FormatInfo process(String templatePath, ImageFormat format, String templa
6670
s_logger.info("Template processing - untar OVA package. templatePath: " + templatePath + ", templateName: " + templateName);
6771
String templateFileFullPath = templatePath + File.separator + templateName + "." + ImageFormat.OVA.getFileExtension();
6872
File templateFile = new File(templateFileFullPath);
69-
70-
Script command = new Script("tar", 0, s_logger);
73+
Script command = new Script("tar", processTimeout, s_logger);
7174
command.add("--no-same-owner");
7275
command.add("--no-same-permissions");
7376
command.add("-xf", templateFileFullPath);

core/src/main/java/com/cloud/storage/template/Processor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public interface Processor extends Adapter {
4444
*/
4545
FormatInfo process(String templatePath, ImageFormat format, String templateName) throws InternalErrorException;
4646

47+
FormatInfo process(String templatePath, ImageFormat format, String templateName, long processTimeout) throws InternalErrorException;
48+
4749
public static class FormatInfo {
4850
public ImageFormat format;
4951
public long size;

core/src/main/java/com/cloud/storage/template/QCOW2Processor.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,13 @@ public class QCOW2Processor extends AdapterBase implements Processor {
4040

4141
private StorageLayer _storage;
4242

43+
@Override
44+
public FormatInfo process(String templatePath, ImageFormat format, String templateName) throws InternalErrorException {
45+
return process(templatePath, format, templateName, 0);
46+
}
47+
4348
@Override
44-
public FormatInfo process(String templatePath, ImageFormat format, String templateName) throws InternalErrorException {
49+
public FormatInfo process(String templatePath, ImageFormat format, String templateName, long processTimeout) throws InternalErrorException {
4550
if (format != null) {
4651
s_logger.debug("We currently don't handle conversion from " + format + " to QCOW2.");
4752
return null;

core/src/main/java/com/cloud/storage/template/RawImageProcessor.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,13 @@ public boolean configure(String name, Map<String, Object> params) throws Configu
4545
return true;
4646
}
4747

48+
@Override
49+
public FormatInfo process(String templatePath, ImageFormat format, String templateName) throws InternalErrorException {
50+
return process(templatePath, format, templateName, 0);
51+
}
52+
4853
@Override
49-
public FormatInfo process(String templatePath, ImageFormat format, String templateName) throws InternalErrorException {
54+
public FormatInfo process(String templatePath, ImageFormat format, String templateName, long processTimeout) throws InternalErrorException {
5055
if (format != null) {
5156
s_logger.debug("We currently don't handle conversion from " + format + " to raw image.");
5257
return null;

core/src/main/java/com/cloud/storage/template/TARProcessor.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ public class TARProcessor extends AdapterBase implements Processor {
3535

3636
@Override
3737
public FormatInfo process(String templatePath, ImageFormat format, String templateName) {
38+
return process(templatePath, format, templateName, 0);
39+
}
40+
41+
@Override
42+
public FormatInfo process(String templatePath, ImageFormat format, String templateName, long processTimeout) {
3843
if (format != null) {
3944
s_logger.debug("We currently don't handle conversion from " + format + " to TAR.");
4045
return null;

core/src/main/java/com/cloud/storage/template/VhdProcessor.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ public class VhdProcessor extends AdapterBase implements Processor {
5858

5959
@Override
6060
public FormatInfo process(String templatePath, ImageFormat format, String templateName) throws InternalErrorException {
61+
return process(templatePath, format, templateName, 0);
62+
}
63+
64+
@Override
65+
public FormatInfo process(String templatePath, ImageFormat format, String templateName, long processTimeout) throws InternalErrorException {
6166
if (format != null) {
6267
s_logger.debug("We currently don't handle conversion from " + format + " to VHD.");
6368
return null;

core/src/main/java/com/cloud/storage/template/VmdkProcessor.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ public class VmdkProcessor extends AdapterBase implements Processor {
4444

4545
@Override
4646
public FormatInfo process(String templatePath, ImageFormat format, String templateName) throws InternalErrorException {
47+
return process(templatePath, format, templateName, 0);
48+
}
49+
50+
@Override
51+
public FormatInfo process(String templatePath, ImageFormat format, String templateName, long processTimeout) throws InternalErrorException {
4752
if (format != null) {
4853
if (s_logger.isInfoEnabled()) {
4954
s_logger.info("We currently don't handle conversion from " + format + " to VMDK.");

core/src/main/java/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommand.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ public class TemplateOrVolumePostUploadCommand {
5151

5252
private String defaultMaxAccountSecondaryStorage;
5353

54+
private long processTimeout;
55+
5456
private long accountId;
5557

5658
private Integer nfsVersion;
@@ -206,4 +208,12 @@ public Integer getNfsVersion() {
206208
public void setNfsVersion(Integer nfsVersion) {
207209
this.nfsVersion = nfsVersion;
208210
}
211+
212+
public void setProcessTimeout(long processTimeout) {
213+
this.processTimeout = processTimeout;
214+
}
215+
216+
public long getProcessTimeout() {
217+
return processTimeout;
218+
}
209219
}

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.cloudstack.framework.config.ConfigKey;
3333
import org.apache.cloudstack.framework.config.Configurable;
3434
import org.apache.cloudstack.storage.command.CopyCommand;
35+
import org.apache.cloudstack.storage.command.DownloadCommand;
3536
import org.apache.cloudstack.storage.command.DeleteCommand;
3637
import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
3738
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
@@ -434,13 +435,14 @@ public int compare(NicTO arg0, NicTO arg1) {
434435
@DB
435436
public Pair<Boolean, Long> getCommandHostDelegation(long hostId, Command cmd) {
436437
boolean needDelegation = false;
437-
438438
if (cmd instanceof StorageSubSystemCommand) {
439439
Boolean fullCloneEnabled = VmwareFullClone.value();
440440
StorageSubSystemCommand c = (StorageSubSystemCommand)cmd;
441441
c.setExecuteInSequence(fullCloneEnabled);
442442
}
443-
443+
if (cmd instanceof DownloadCommand) {
444+
cmd.setContextParam(VmwareManager.s_vmwareOVAPackageTimeout.key(), String.valueOf(VmwareManager.s_vmwareOVAPackageTimeout.value()));
445+
}
444446
//NOTE: the hostid can be a hypervisor host, or a ssvm agent. For copycommand, if it's for volume upload, the hypervisor
445447
//type is empty, so we need to check the format of volume at first.
446448
if (cmd instanceof CopyCommand) {
@@ -514,11 +516,11 @@ public Pair<Boolean, Long> getCommandHostDelegation(long hostId, Command cmd) {
514516
cmd.setContextParam("execid", String.valueOf(execLog.getId()));
515517
cmd.setContextParam("noderuninfo", String.format("%d-%d", _clusterMgr.getManagementNodeId(), _clusterMgr.getCurrentRunId()));
516518
cmd.setContextParam("vCenterSessionTimeout", String.valueOf(_vmwareMgr.getVcenterSessionTimeout()));
519+
cmd.setContextParam(VmwareManager.s_vmwareOVAPackageTimeout.key(), String.valueOf(VmwareManager.s_vmwareOVAPackageTimeout.value()));
517520

518521
if (cmd instanceof BackupSnapshotCommand || cmd instanceof CreatePrivateTemplateFromVolumeCommand ||
519522
cmd instanceof CreatePrivateTemplateFromSnapshotCommand || cmd instanceof CopyVolumeCommand || cmd instanceof CopyCommand ||
520523
cmd instanceof CreateVolumeOVACommand || cmd instanceof PrepareOVAPackingCommand || cmd instanceof CreateVolumeFromSnapshotCommand) {
521-
522524
String workerName = _vmwareMgr.composeWorkerName();
523525
long checkPointId = 1;
524526
// FIXME: Fix long checkPointId = _checkPointMgr.pushCheckPoint(new VmwareCleanupMaid(hostDetails.get("guid"), workerName));

0 commit comments

Comments
 (0)