You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sj...@apache.org on 2015/10/26 13:31:24 UTC

[3/7] incubator-brooklyn git commit: Don't block infinitely if any of the customize steps fail.

Don't block infinitely if any of the customize steps fail.

When changePassword fails the stop task won't ever get executed, but the execution blocks on it, so it waits forever. The change will execute stop even if there was a failure (as long as launch was successful), propagating the initial error.


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

Branch: refs/heads/master
Commit: 15038ce2a85c83d7f7500b799f92484f80c37f0a
Parents: ad6ac1e
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Fri Oct 16 14:00:35 2015 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Mon Oct 19 16:49:06 2015 +0300

----------------------------------------------------------------------
 .../entity/database/mysql/MySqlSshDriver.java   | 28 +++++++++++++++-----
 1 file changed, 22 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/15038ce2/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlSshDriver.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlSshDriver.java b/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlSshDriver.java
index 01ee983..24b2d61 100644
--- a/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlSshDriver.java
+++ b/software/database/src/main/java/org/apache/brooklyn/entity/database/mysql/MySqlSshDriver.java
@@ -34,6 +34,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.brooklyn.api.location.OsDetails;
+import org.apache.brooklyn.api.mgmt.Task;
 import org.apache.brooklyn.core.effector.EffectorTasks;
 import org.apache.brooklyn.core.effector.ssh.SshEffectorTasks;
 import org.apache.brooklyn.core.entity.Attributes;
@@ -44,6 +45,7 @@ import org.apache.brooklyn.entity.software.base.AbstractSoftwareProcessSshDriver
 import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.core.task.DynamicTasks;
+import org.apache.brooklyn.util.core.task.Tasks;
 import org.apache.brooklyn.util.core.task.ssh.SshTasks;
 import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper;
 import org.apache.brooklyn.util.exceptions.Exceptions;
@@ -163,18 +165,32 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements
         // launch, then we will configure it
         launch();
 
-        CountdownTimer timer = Duration.seconds(20).countdownTimer();
-        boolean hasCreationScript = copyDatabaseCreationScript();
-        timer.waitForExpiryUnchecked();
+        // Wrap in inessential task to allow the stop step to execute even if any of the nested
+        // tasks fail - poor man's try-catch for tasks.
+        Task<Void> configTask = DynamicTasks.<Void>queue("execute scripts", new Runnable() {
+            @Override
+            public void run() {
+                Tasks.markInessential();
+                CountdownTimer timer = Duration.seconds(20).countdownTimer();
+                boolean hasCreationScript = copyDatabaseCreationScript();
+                timer.waitForExpiryUnchecked();
 
-        changePassword("", getPassword());
+                changePassword("", getPassword());
 
-        if (hasCreationScript)
-            executeScriptFromInstalledFileAsync("creation-script.sql").asTask().getUnchecked();
+                if (hasCreationScript)
+                    executeScriptFromInstalledFileAsync("creation-script.sql").asTask().getUnchecked();
+            }
+        });
 
         // not sure necessary to stop then subsequently launch, but seems safest
         // (if skipping, use a flag in launch to indicate we've just launched it)
         stop();
+
+        // Fail if any of the tasks above failed, they are marked inessential so the
+        // errors don't propagate automatically.
+        if (configTask.isError()) {
+            configTask.getUnchecked();
+        }
     }
 
     @Override