diff --git a/core/src/com/cloud/agent/AgentManager.java b/core/src/com/cloud/agent/AgentManager.java index fac5b8be354..4893f78d920 100755 --- a/core/src/com/cloud/agent/AgentManager.java +++ b/core/src/com/cloud/agent/AgentManager.java @@ -210,4 +210,6 @@ public interface AgentManager extends Manager { public boolean reconnect(final long hostId) throws AgentUnavailableException; public List discoverHosts(long dcId, Long podId, Long clusterId, URI url, String username, String password) throws DiscoveryException; + + Answer easySend(Long hostId, Command cmd, int timeout); } diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index d79bfffc56c..2834711152b 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -3480,8 +3480,12 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR return false; return true; } - protected String callHostPlugin(String plugin, String cmd, String... params) { + //default time out is 300 s + return callHostPluginWithTimeOut(plugin, cmd, 300, params); + } + + protected String callHostPluginWithTimeOut(String plugin, String cmd, int timeout, String... params) { Map args = new HashMap(); Session slaveSession = null; Connection slaveConn = null; @@ -3493,7 +3497,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR // TODO Auto-generated catch block e.printStackTrace(); } - slaveConn = new Connection(slaveUrl, 1800); + slaveConn = new Connection(slaveUrl, timeout); slaveSession = Session.slaveLocalLoginWithPassword(slaveConn, _username, _password); if (s_logger.isDebugEnabled()) { @@ -6205,7 +6209,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR checksum = ""; } - String result = callHostPlugin("vmopsSnapshot", "post_create_private_template", "remoteTemplateMountPath", remoteTemplateMountPath, "templateDownloadFolder", templateDownloadFolder, + String result = callHostPluginWithTimeOut("vmopsSnapshot", "post_create_private_template", 110*60, "remoteTemplateMountPath", remoteTemplateMountPath, "templateDownloadFolder", templateDownloadFolder, "templateInstallFolder", templateInstallFolder, "templateFilename", templateFilename, "templateName", templateName, "templateDescription", templateDescription, "checksum", checksum, "virtualSize", String.valueOf(virtualSize), "templateId", String.valueOf(templateId)); @@ -6243,7 +6247,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR // Each argument is put in a separate line for readability. // Using more lines does not harm the environment. - String results = callHostPlugin("vmopsSnapshot", "backupSnapshot", "primaryStorageSRUuid", primaryStorageSRUuid, "dcId", dcId.toString(), "accountId", accountId.toString(), "volumeId", + String results = callHostPluginWithTimeOut("vmopsSnapshot", "backupSnapshot", 110*60, "primaryStorageSRUuid", primaryStorageSRUuid, "dcId", dcId.toString(), "accountId", accountId.toString(), "volumeId", volumeId.toString(), "secondaryStorageMountPath", secondaryStorageMountPath, "snapshotUuid", snapshotUuid, "prevSnapshotUuid", prevSnapshotUuid, "prevBackupUuid", prevBackupUuid, "isFirstSnapshotOfRootVolume", isFirstSnapshotOfRootVolume.toString(), "isISCSI", isISCSI.toString()); @@ -6346,7 +6350,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR String failureString = "Could not create volume from " + backedUpSnapshotUuid; templatePath = (templatePath == null) ? "" : templatePath; - String results = callHostPlugin("vmopsSnapshot", "createVolumeFromSnapshot", "dcId", dcId.toString(), "accountId", accountId.toString(), "volumeId", volumeId.toString(), + String results = callHostPluginWithTimeOut("vmopsSnapshot","createVolumeFromSnapshot", 110*60, "dcId", dcId.toString(), "accountId", accountId.toString(), "volumeId", volumeId.toString(), "secondaryStorageMountPath", secondaryStorageMountPath, "backedUpSnapshotUuid", backedUpSnapshotUuid, "templatePath", templatePath, "templateDownloadFolder", templateDownloadFolder, "isISCSI", isISCSI.toString()); diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index 3de6fdf5809..d23290ddd7d 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -1132,11 +1132,16 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory { } } } + + @Override + public Answer easySend(final Long hostId, final Command cmd) { + return easySend(hostId, cmd, _wait); + } @Override - public Answer easySend(final Long hostId, final Command cmd) { + public Answer easySend(final Long hostId, final Command cmd, int timeout) { try { - final Answer answer = send(hostId, cmd, _wait); + final Answer answer = send(hostId, cmd, timeout); if (answer == null) { s_logger.warn("send returns null answer"); return null; diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 552e13c1d44..1e8e3255050 100644 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -1797,7 +1797,8 @@ public class StorageManagerImpl implements StorageManager { } } s_logger.debug("Trying to execute Command: " + cmd + " on host: " + hostId + " try: " + tryCount); - answer = _agentMgr.send(hostId, cmd); + // set 120 min timeout for storage related command + answer = _agentMgr.send(hostId, cmd, 120*60*1000); if (answer != null && answer.getResult()) { return answer; diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index 71fe9be0052..04f4a110847 100644 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -236,7 +236,8 @@ public class TemplateManagerImpl implements TemplateManager { s_logger.debug("Downloading " + templateId + " via " + vo.getHostId()); } dcmd.setLocalPath(vo.getLocalPath()); - DownloadAnswer answer = (DownloadAnswer)_agentMgr.easySend(vo.getHostId(), dcmd); + // set 120 min timeout for this command + DownloadAnswer answer = (DownloadAnswer)_agentMgr.easySend(vo.getHostId(), dcmd, 120*60*1000); if (answer != null) { templateStoragePoolRef.setDownloadPercent(templateStoragePoolRef.getDownloadPercent()); templateStoragePoolRef.setDownloadState(answer.getDownloadStatus());