Riak - Support all bucket type actions
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/02efc293 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/02efc293 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/02efc293 Branch: refs/heads/master Commit: 02efc293b7641b79cc5928c06b75080361835c03 Parents: 6c1b517 Author: Valentin Aitken <[email protected]> Authored: Thu Apr 2 16:52:44 2015 +0300 Committer: Valentin Aitken <[email protected]> Committed: Thu Apr 2 16:55:09 2015 +0300 ---------------------------------------------------------------------- .../brooklyn/entity/nosql/riak/RiakNode.java | 19 ++- .../entity/nosql/riak/RiakNodeDriver.java | 12 +- .../entity/nosql/riak/RiakNodeImpl.java | 24 +++- .../entity/nosql/riak/RiakNodeSshDriver.java | 123 +++++++++++++------ 4 files changed, 136 insertions(+), 42 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/02efc293/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java ---------------------------------------------------------------------- diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java index 30391fb..ea12f8b 100644 --- a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java +++ b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java @@ -197,7 +197,20 @@ public interface RiakNode extends SoftwareProcess { @Effector(description = "Commit changes made to the Riak cluster") void commitCluster(); - @Effector(description = "Apply bucket type") - void applyBucketType(@EffectorParam(name = "bucketTypeName") String bucketTypeName, - @EffectorParam(name = "bucketTypeProperties") String bucketTypeProperties); + @Effector(description = "Create bucket type") + void bucketTypeCreate(@EffectorParam(name = "bucketTypeName") String bucketTypeName, + @EffectorParam(name = "bucketTypeProperties") String bucketTypeProperties); + + @Effector(description = "List bucket types") + List<String> bucketTypeList(); + + @Effector(description = "Status bucket type") + List<String> bucketTypeStatus(@EffectorParam(name = "bucketTypeName") String bucketTypeName); + + @Effector(description = "Update bucket type") + void bucketTypeUpdate(@EffectorParam(name = "bucketTypeName") String bucketTypeName, + @EffectorParam(name = "bucketTypeProperties") String bucketTypeProperties); + + @Effector(description = "Activate bucket type") + void bucketTypeActivate(@EffectorParam(name = "bucketTypeName") String bucketTypeName); } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/02efc293/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeDriver.java ---------------------------------------------------------------------- diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeDriver.java index a6c4805..13ce842 100644 --- a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeDriver.java +++ b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeDriver.java @@ -20,6 +20,8 @@ package brooklyn.entity.nosql.riak; import brooklyn.entity.basic.SoftwareProcessDriver; +import java.util.List; + public interface RiakNodeDriver extends SoftwareProcessDriver { String getRiakEtcDir(); @@ -36,5 +38,13 @@ public interface RiakNodeDriver extends SoftwareProcessDriver { String getOsMajorVersion(); - void applyBucketType(String bucketTypeName, String bucketTypeProperties); + void bucketTypeCreate(String bucketTypeName, String bucketTypeProperties); + + List<String> bucketTypeList(); + + List<String> bucketTypeStatus(String bucketTypeName); + + void bucketTypeUpdate(String bucketTypeName, String bucketTypeProperties); + + void bucketTypeActivate(String bucketTypeName); } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/02efc293/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeImpl.java ---------------------------------------------------------------------- diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeImpl.java index 7bb803c..e001989 100644 --- a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeImpl.java +++ b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeImpl.java @@ -208,8 +208,28 @@ public class RiakNodeImpl extends SoftwareProcessImpl implements RiakNode { } @Override - public void applyBucketType(String bucketTypeName, String bucketTypeProperties) { - getDriver().applyBucketType(bucketTypeName, bucketTypeProperties); + public void bucketTypeCreate(String bucketTypeName, String bucketTypeProperties) { + getDriver().bucketTypeCreate(bucketTypeName, bucketTypeProperties); + } + + @Override + public List<String> bucketTypeList() { + return getDriver().bucketTypeList(); + } + + @Override + public List<String> bucketTypeStatus(String bucketTypeName) { + return getDriver().bucketTypeStatus(bucketTypeName); + } + + @Override + public void bucketTypeUpdate(String bucketTypeName, String bucketTypeProperties) { + getDriver().bucketTypeUpdate(bucketTypeName, bucketTypeProperties); + } + + @Override + public void bucketTypeActivate(String bucketTypeName) { + getDriver().bucketTypeActivate(bucketTypeName); } @Override http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/02efc293/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java ---------------------------------------------------------------------- diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java index 1056198..da336db 100644 --- a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java +++ b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java @@ -32,6 +32,7 @@ import static brooklyn.util.text.StringEscapes.BashStringEscapes.escapeLiteralFo import static java.lang.String.format; import java.net.URI; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -59,6 +60,7 @@ import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; + // TODO: Alter -env ERL_CRASH_DUMP path in vm.args public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implements RiakNodeDriver { @@ -271,9 +273,7 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen .body.append(commands); if (!isRiakOnPath()) { - Map<String, String> newPathVariable = ImmutableMap.of("PATH", sbinPath); - log.warn("riak command not found on PATH. Altering future commands' environment variables from {} to {}", getShellEnvironment(), newPathVariable); - customizeScript.environmentVariablesReset(newPathVariable); + addRiakOnPath(customizeScript); } customizeScript.failOnNonZeroResultCode().execute(); @@ -320,9 +320,7 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen .body.append(commands); if (!isRiakOnPath()) { - Map<String, String> newPathVariable = ImmutableMap.of("PATH", sbinPath); - log.warn("riak command not found on PATH. Altering future commands' environment variables from {} to {}", getShellEnvironment(), newPathVariable); - launchScript.environmentVariablesReset(newPathVariable); + addRiakOnPath(launchScript); } launchScript.failOnNonZeroResultCode().execute(); @@ -341,9 +339,7 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen .body.append(command); if (!isRiakOnPath()) { - Map<String, String> newPathVariable = ImmutableMap.of("PATH", sbinPath); - log.warn("riak command not found on PATH. Altering future commands' environment variables from {} to {}", getShellEnvironment(), newPathVariable); - stopScript.environmentVariablesReset(newPathVariable); + addRiakOnPath(stopScript); } int result = stopScript.failOnNonZeroResultCode().execute(); @@ -359,9 +355,7 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen .body.append(sudo(format("%s ping", getRiakCmd()))); if (!isRiakOnPath()) { - Map<String, String> newPathVariable = ImmutableMap.of("PATH", sbinPath); - log.warn("riak command not found on PATH. Altering future commands' environment variables from {} to {}", getShellEnvironment(), newPathVariable); - checkRunningScript.environmentVariablesReset(newPathVariable); + addRiakOnPath(checkRunningScript); } return (checkRunningScript.execute() == 0); } @@ -399,9 +393,7 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen .failOnNonZeroResultCode(); if (!isRiakOnPath()) { - Map<String, String> newPathVariable = ImmutableMap.of("PATH", sbinPath); - log.warn("riak command not found on PATH. Altering future commands' environment variables from {} to {}", getShellEnvironment(), newPathVariable); - joinClusterScript.environmentVariablesReset(newPathVariable); + addRiakOnPath(joinClusterScript); } joinClusterScript.execute(); @@ -423,9 +415,7 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen .failOnNonZeroResultCode(); if (!isRiakOnPath()) { - Map<String, String> newPathVariable = ImmutableMap.of("PATH", sbinPath); - log.warn("riak command not found on PATH. Altering future commands' environment variables from {} to {}", getShellEnvironment(), newPathVariable); - leaveClusterScript.environmentVariablesReset(newPathVariable); + addRiakOnPath(leaveClusterScript); } leaveClusterScript.execute(); @@ -446,9 +436,7 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen .failOnNonZeroResultCode(); if (!isRiakOnPath()) { - Map<String, String> newPathVariable = ImmutableMap.of("PATH", sbinPath); - log.warn("riak command not found on PATH. Altering future commands' environment variables from {} to {}", getShellEnvironment(), newPathVariable); - removeNodeScript.environmentVariablesReset(newPathVariable); + addRiakOnPath(removeNodeScript); } removeNodeScript.execute(); @@ -463,9 +451,7 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen .failOnNonZeroResultCode(); if (!isRiakOnPath()) { - Map<String, String> newPathVariable = ImmutableMap.of("PATH", sbinPath); - log.warn("riak command not found on PATH. Altering future commands' environment variables from {} to {}", getShellEnvironment(), newPathVariable); - commitClusterScript.environmentVariablesReset(newPathVariable); + addRiakOnPath(commitClusterScript); } commitClusterScript.execute(); @@ -475,15 +461,76 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen } @Override - public void applyBucketType(String bucketTypeName, String bucketTypeProperties) { - newScript("bucket-type create " + bucketTypeName) - .body.append(sudo(format( - "%s bucket-type create %s %s", - getRiakAdminCmd(), - bucketTypeName, - escapeLiteralForDoubleQuotedBash(bucketTypeProperties)))) - .failOnNonZeroResultCode() - .execute(); + public void bucketTypeCreate(String bucketTypeName, String bucketTypeProperties) { + ScriptHelper bucketTypeCreateScript = newScript("bucket-type_create " + bucketTypeName) + .body.append(sudo(format("%s bucket-type create %s %s", + getRiakAdminCmd(), + bucketTypeName, + escapeLiteralForDoubleQuotedBash(bucketTypeProperties)))); + if(!isRiakOnPath()) { + addRiakOnPath(bucketTypeCreateScript); + } + bucketTypeCreateScript.body.append(sudo(format("%s bucket-type activate %s", getRiakAdminCmd(), bucketTypeName))) + .failOnNonZeroResultCode(); + + bucketTypeCreateScript.execute(); + } + + @Override + public List<String> bucketTypeList() { + ScriptHelper bucketTypeListScript = newScript("bucket-types_list") + .body.append(sudo(format("%s bucket-type list", getRiakAdminCmd()))) + .gatherOutput() + .noExtraOutput() + .failOnNonZeroResultCode(); + if (!isRiakOnPath()) { + addRiakOnPath(bucketTypeListScript); + } + bucketTypeListScript.execute(); + String stdout = bucketTypeListScript.getResultStdout(); + return Arrays.asList(stdout.split("[\\r\\n]+")); + } + + @Override + public List<String> bucketTypeStatus(String bucketTypeName) { + ScriptHelper bucketTypeStatusScript = newScript("bucket-type_status") + .body.append(sudo(format("%s bucket-type status %s", getRiakAdminCmd(), bucketTypeName))) + .gatherOutput() + .noExtraOutput() + .failOnNonZeroResultCode(); + if (!isRiakOnPath()) { + addRiakOnPath(bucketTypeStatusScript); + } + bucketTypeStatusScript.execute(); + String stdout = bucketTypeStatusScript.getResultStdout(); + return Arrays.asList(stdout.split("[\\r\\n]+")); + } + + @Override + public void bucketTypeUpdate(String bucketTypeName, String bucketTypeProperties) { + ScriptHelper bucketTypeStatusScript = newScript("bucket-type_update") + .body.append(sudo(format("%s bucket-type update %s %s", + getRiakAdminCmd(), + bucketTypeName, + escapeLiteralForDoubleQuotedBash(bucketTypeProperties)))) + .noExtraOutput() + .failOnNonZeroResultCode(); + if (!isRiakOnPath()) { + addRiakOnPath(bucketTypeStatusScript); + } + bucketTypeStatusScript.execute(); + } + + @Override + public void bucketTypeActivate(String bucketTypeName) { + ScriptHelper bucketTypeStatusScript = newScript("bucket-type_activate") + .body.append(sudo(format("%s bucket-type activate %s", getRiakAdminCmd(), bucketTypeName))) + .noExtraOutput() + .failOnNonZeroResultCode(); + if (!isRiakOnPath()) { + addRiakOnPath(bucketTypeStatusScript); + } + bucketTypeStatusScript.execute(); } @Override @@ -513,9 +560,7 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen .failOnNonZeroResultCode(); if (!isRiakOnPath()) { - Map<String, String> newPathVariable = ImmutableMap.of("PATH", sbinPath); - log.warn("riak command not found on PATH. Altering future commands' environment variables from {} to {}", getShellEnvironment(), newPathVariable); - recoverNodeScript.environmentVariablesReset(newPathVariable); + addRiakOnPath(recoverNodeScript); } recoverNodeScript.execute(); @@ -555,4 +600,10 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen String osVersion = osDetails.getVersion(); return osVersion.contains(".") ? osVersion.substring(0, osVersion.indexOf(".")) : osVersion; } + + private void addRiakOnPath(ScriptHelper scriptHelper) { + Map<String, String> newPathVariable = ImmutableMap.of("PATH", sbinPath); + log.warn("riak command not found on PATH. Altering future commands' environment variables from {} to {}", getShellEnvironment(), newPathVariable); + scriptHelper.environmentVariablesReset(newPathVariable); + } }
