Improve MySqlNode - executeScript effector, fail on invalid creation script
* executeScript must be called as an effector to have the correct execution context when creating the ssh task in the driver. If called as a method the ssh task is executed against the calling entity which has the wrong machine. * Fail on creation script execution 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/0c6248fb Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/0c6248fb Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/0c6248fb Branch: refs/heads/master Commit: 0c6248fbae3266f5e4a0636e404ea89cbf05b2bf Parents: 93993f1 Author: Svetoslav Neykov <svetoslav.ney...@cloudsoftcorp.com> Authored: Wed Jul 29 15:37:50 2015 +0300 Committer: Svetoslav Neykov <svetoslav.ney...@cloudsoftcorp.com> Committed: Wed Aug 5 15:23:06 2015 +0300 ---------------------------------------------------------------------- .../main/java/brooklyn/entity/database/mysql/MySqlNode.java | 8 +++++++- .../java/brooklyn/entity/database/mysql/MySqlSshDriver.java | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0c6248fb/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.java ---------------------------------------------------------------------- diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.java b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.java index 0268520..36b4812 100644 --- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.java +++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlNode.java @@ -20,8 +20,11 @@ package brooklyn.entity.database.mysql; import org.apache.brooklyn.catalog.Catalog; import brooklyn.config.ConfigKey; +import brooklyn.entity.annotation.Effector; +import brooklyn.entity.annotation.EffectorParam; import brooklyn.entity.basic.Attributes; import brooklyn.entity.basic.ConfigKeys; +import brooklyn.entity.basic.MethodEffector; import brooklyn.entity.basic.SoftwareProcess; import brooklyn.entity.database.DatastoreMixins.DatastoreCommon; import brooklyn.entity.proxying.ImplementedBy; @@ -80,6 +83,9 @@ public interface MySqlNode extends SoftwareProcess, HasShortName, DatastoreCommo public static final AttributeSensor<Double> QUERIES_PER_SECOND_FROM_MYSQL = Sensors.newDoubleSensor("mysql.queries.perSec.fromMysql"); - public String executeScript(String commands); + MethodEffector<String> EXECUTE_SCRIPT = new MethodEffector<String>(MySqlNode.class, "executeScript"); + + @Effector(description = "Execute SQL script on the node as the root user") + public String executeScript(@EffectorParam(name="commands") String commands); } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0c6248fb/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java ---------------------------------------------------------------------- diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java index c51c7d7..d4fd396 100644 --- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java +++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java @@ -173,7 +173,7 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements ).summary("setting password")); if (hasCreationScript) - executeScriptFromInstalledFileAsync("creation-script.sql"); + 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) @@ -270,6 +270,7 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements SshEffectorTasks.ssh( "cd "+getRunDir(), getBaseDir()+"/bin/mysql --defaults-file="+getConfigFile()+" < "+filenameAlreadyInstalledAtServer) + .requiringExitCodeZero() .summary("executing datastore script "+filenameAlreadyInstalledAtServer)); }