You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2014/12/23 16:13:11 UTC

[5/6] incubator-brooklyn git commit: ssh async-exec: incorporate comments + logging

ssh async-exec: incorporate comments + logging

Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/63483f8e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/63483f8e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/63483f8e

Branch: refs/heads/master
Commit: 63483f8ea3611d6534ee27bea4debe085f488e4d
Parents: ee8d521
Author: Aled Sage <al...@gmail.com>
Authored: Tue Dec 23 14:10:02 2014 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Dec 23 14:10:02 2014 +0000

----------------------------------------------------------------------
 .../java/brooklyn/internal/BrooklynFeatureEnablement.java |  9 ++++++++-
 .../brooklyn/util/internal/ssh/ShellAbstractTool.java     |  1 -
 .../java/brooklyn/util/internal/ssh/sshj/SshjTool.java    | 10 ++++++++++
 3 files changed, 18 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/63483f8e/core/src/main/java/brooklyn/internal/BrooklynFeatureEnablement.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/internal/BrooklynFeatureEnablement.java b/core/src/main/java/brooklyn/internal/BrooklynFeatureEnablement.java
index d8aa66e..9946ac7 100644
--- a/core/src/main/java/brooklyn/internal/BrooklynFeatureEnablement.java
+++ b/core/src/main/java/brooklyn/internal/BrooklynFeatureEnablement.java
@@ -25,6 +25,7 @@ import org.slf4j.LoggerFactory;
 
 import brooklyn.internal.storage.BrooklynStorage;
 import brooklyn.management.ha.HighAvailabilityMode;
+import brooklyn.util.internal.ssh.ShellTool;
 
 import com.google.common.annotations.Beta;
 import com.google.common.collect.Maps;
@@ -84,6 +85,12 @@ public class BrooklynFeatureEnablement {
      */
     public static final String FEATURE_INFER_CATALOG_ITEM_ON_REBIND = "brooklyn.backwardCompatibility.feature.inferCatalogItemOnRebind";
     
+    /**
+     * When executing over ssh, whether to support the "async exec" approach, or only the classic approach.
+     * 
+     * If this feature is disabled, then even if the {@link ShellTool#PROP_EXEC_ASYNC} is configured it
+     * will still use the classic ssh approach.
+     */
     public static final String FEATURE_SSH_ASYNC_EXEC = "brooklyn.experimental.feature.ssh.asyncExec";
 
     private static final Map<String, Boolean> FEATURE_ENABLEMENTS = Maps.newLinkedHashMap();
@@ -104,7 +111,7 @@ public class BrooklynFeatureEnablement {
         setDefault(FEATURE_USE_BROOKLYN_LIVE_OBJECTS_DATAGRID_STORAGE, false);
         setDefault(FEATURE_RENAME_THREADS, false);
         setDefault(FEATURE_INFER_CATALOG_ITEM_ON_REBIND, true);
-        setDefault(FEATURE_SSH_ASYNC_EXEC, true);
+        setDefault(FEATURE_SSH_ASYNC_EXEC, false);
     }
     
     static {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/63483f8e/core/src/main/java/brooklyn/util/internal/ssh/ShellAbstractTool.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/internal/ssh/ShellAbstractTool.java b/core/src/main/java/brooklyn/util/internal/ssh/ShellAbstractTool.java
index 41dc886..82624d7 100644
--- a/core/src/main/java/brooklyn/util/internal/ssh/ShellAbstractTool.java
+++ b/core/src/main/java/brooklyn/util/internal/ssh/ShellAbstractTool.java
@@ -297,7 +297,6 @@ public abstract class ShellAbstractTool implements ShellTool {
          * will continue to be written 
          * note that some modes require \$RESULT passed in order to access a variable, whereas most just need $ */
         protected List<String> buildRunScriptCommand() {
-            // TODO 
             String touchCmd = String.format("touch %s %s %s %s", stdoutPath, stderrPath, exitStatusPath, pidPath);
             String cmd = String.format("( %s > %s 2> %s < /dev/null ; echo $? > %s ) & disown", scriptPath, stdoutPath, stderrPath, exitStatusPath);
             MutableList.Builder<String> cmds = MutableList.<String>builder()

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/63483f8e/core/src/main/java/brooklyn/util/internal/ssh/sshj/SshjTool.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/internal/ssh/sshj/SshjTool.java b/core/src/main/java/brooklyn/util/internal/ssh/sshj/SshjTool.java
index 154c433..e7ecd0c 100644
--- a/core/src/main/java/brooklyn/util/internal/ssh/sshj/SshjTool.java
+++ b/core/src/main/java/brooklyn/util/internal/ssh/sshj/SshjTool.java
@@ -319,6 +319,9 @@ public class SshjTool extends SshAbstractTool implements SshTool {
         if (Boolean.TRUE.equals(execAsync) && BrooklynFeatureEnablement.isEnabled(BrooklynFeatureEnablement.FEATURE_SSH_ASYNC_EXEC)) {
             return execScriptAsyncAndPoll(props, commands, env);
         } else {
+            if (Boolean.TRUE.equals(execAsync)) {
+                if (LOG.isDebugEnabled()) LOG.debug("Ignoring ssh exec-async configuration, because feature is disabled");
+            }
             return new ToolAbstractExecScript(props) {
                 public int run() {
                     String scriptContents = toScript(props, commands, env);
@@ -397,15 +400,18 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                 stderrCount += (countingErr == null) ? 0 : countingErr.getCount();
                 
                 if (longPollResult == 0) {
+                    if (LOG.isDebugEnabled()) LOG.debug("Long-poll succeeded (exit status 0) on "+SshjTool.this.toString()+" (for "+getSummary()+")");
                     return longPollResult; // success
                     
                 } else if (longPollResult == -1) {
                     // probably a connection failure; try again
+                    if (LOG.isDebugEnabled()) LOG.debug("Long-poll received exit status -1; will retry on "+SshjTool.this.toString()+" (for "+getSummary()+")");
                     return null;
                     
                 } else {
                     // want to double-check whether this is the exit-code from the async process, or
                     // some unexpected failure in our long-poll command.
+                    if (LOG.isDebugEnabled()) LOG.debug("Long-poll received exit status "+longPollResult+"; retrieving actual status on "+SshjTool.this.toString()+" (for "+getSummary()+")");
                     Integer result = retrieveStatusCommand();
                     if (result != null) {
                         return result;
@@ -434,14 +440,17 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                     String statusOutStr = new String(statusOut.toByteArray()).trim();
                     if (Strings.isEmpty(statusOutStr)) {
                         // suggests not yet completed; will retry with long-poll
+                        if (LOG.isDebugEnabled()) LOG.debug("Long-poll retrieved status directly; command successful but no result available on "+SshjTool.this.toString()+" (for "+getSummary()+")");
                         return null;
                     } else {
+                        if (LOG.isDebugEnabled()) LOG.debug("Long-poll retrieved status directly; returning '"+statusOutStr+"' on "+SshjTool.this.toString()+" (for "+getSummary()+")");
                         int result = Integer.parseInt(statusOutStr);
                         return result;
                     }
 
                 } else if (statusResult == -1) {
                     // probably a connection failure; try again with long-poll
+                    if (LOG.isDebugEnabled()) LOG.debug("Long-poll retrieving status directly received exit status -1; will retry on "+SshjTool.this.toString()+" (for "+getSummary()+")");
                     return null;
                     
                 } else {
@@ -454,6 +463,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                         err.write(statusErr.toByteArray());
                     }
                     
+                    if (LOG.isDebugEnabled()) LOG.debug("Long-poll retrieving status failed; returning "+statusResult+" on "+SshjTool.this.toString()+" (for "+getSummary()+")");
                     return statusResult;
                 }
             }