Updated Branches:
  refs/heads/4.2 d61e60b71 -> fa88fb146

CLOUDSTACK-4911 - [Mixed Hypervisor] VM Status is marked as alive when exit 
status of ping command is not available within command timeout

Currently during ssh execution of remote command, if no response is received 
within timeout, Cloudstack is returning success result.
This is resulting in false positives. Fix is to check if exit status of remote 
command is available or not. If not, return failure result.

Signed-off-by: Sateesh Chodapuneedi <[email protected]>

CLOUDSTACK-4911 [Mixed Hypervisor] VM Status is marked as alive when exit 
status of ping command is not available within command timeout

Supplementing the fix/commit 748315620bbbc472652e38df960d136beee4882e
While remote executing commands through ssh, wait for channel condition of 
EXIT_STATUS.

Signed-off-by: Sateesh Chodapuneedi <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/fa88fb14
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/fa88fb14
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/fa88fb14

Branch: refs/heads/4.2
Commit: fa88fb14697b33388e705d0e4dcdbfdd98196eae
Parents: d61e60b
Author: Sateesh Chodapuneedi <[email protected]>
Authored: Mon Oct 21 16:31:45 2013 +0530
Committer: Sateesh Chodapuneedi <[email protected]>
Committed: Wed Oct 23 09:09:24 2013 +0530

----------------------------------------------------------------------
 utils/src/com/cloud/utils/ssh/SshHelper.java | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fa88fb14/utils/src/com/cloud/utils/ssh/SshHelper.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/ssh/SshHelper.java 
b/utils/src/com/cloud/utils/ssh/SshHelper.java
index fb81e50..84d8bc8 100755
--- a/utils/src/com/cloud/utils/ssh/SshHelper.java
+++ b/utils/src/com/cloud/utils/ssh/SshHelper.java
@@ -157,7 +157,7 @@ public class SshHelper {
             int currentReadBytes = 0;
             while (true) {
                 if ((stdout.available() == 0) && (stderr.available() == 0)) {
-                    int conditions = 
sess.waitForCondition(ChannelCondition.STDOUT_DATA | 
ChannelCondition.STDERR_DATA | ChannelCondition.EOF, 
+                    int conditions = 
sess.waitForCondition(ChannelCondition.STDOUT_DATA | 
ChannelCondition.STDERR_DATA | ChannelCondition.EOF | 
ChannelCondition.EXIT_STATUS,
                         waitResultTimeoutInMs);
                     
                     if ((conditions & ChannelCondition.TIMEOUT) != 0) {
@@ -166,7 +166,7 @@ public class SshHelper {
                         throw new Exception(msg);
                     }
 
-                    if ((conditions & ChannelCondition.EOF) != 0) {
+                    if ((conditions & ChannelCondition.EXIT_STATUS) != 0) {
                         if ((conditions & (ChannelCondition.STDOUT_DATA | 
ChannelCondition.STDERR_DATA)) == 0) {                            
                             break;
                         }
@@ -185,6 +185,12 @@ public class SshHelper {
             }
             
             String result = sbResult.toString();
+
+            if (sess.getExitStatus() == null) {
+                //Exit status is NOT available. Returning failure result.
+                return new Pair<Boolean, String>(false, result);
+            }
+
             if (sess.getExitStatus() != null && 
sess.getExitStatus().intValue() != 0) {
                 s_logger.error("SSH execution of command " + command + " has 
an error status code in return. result output: " + result);
                 return new Pair<Boolean, String>(false, result);

Reply via email to