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/11/03 16:51:55 UTC
[11/29] git commit: add support for extra CLI parameters to
BrooklynNode, use those to run in persistence mode,
and final fixes to the in-place upgrade effector
add support for extra CLI parameters to BrooklynNode, use those to run in persistence mode, and final fixes to the in-place upgrade effector
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/634b66b9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/634b66b9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/634b66b9
Branch: refs/heads/master
Commit: 634b66b9fe423a599146fc7d9c0e7bdb75cb5e9c
Parents: 6432a12
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Oct 24 23:52:37 2014 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Oct 31 09:38:19 2014 -0500
----------------------------------------------------------------------
.../entity/brooklynnode/BrooklynNode.java | 4 +++
.../brooklynnode/BrooklynNodeSshDriver.java | 3 ++
.../brooklynnode/BrooklynUpgradeEffector.java | 33 +++++++++++++++++---
.../entity/brooklynnode/brooklyn-node.yaml | 7 +++++
.../brooklyn/launcher/BrooklynLauncher.java | 6 ++--
5 files changed, 44 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/634b66b9/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNode.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNode.java b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNode.java
index 3d8683f..9bf385e 100644
--- a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNode.java
+++ b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNode.java
@@ -120,6 +120,10 @@ public interface BrooklynNode extends SoftwareProcess, UsesJava {
"Path to the script to launch Brooklyn / the app relative to the subpath in the archive, defaulting to 'bin/brooklyn'",
"bin/brooklyn");
+ @SetFromFlag("launchParameters")
+ ConfigKey<String> EXTRA_LAUNCH_PARAMETERS = ConfigKeys.newStringConfigKey("brooklynnode.launch.parameters.extra",
+ "Launch parameters passed on the CLI, in addition to 'launch' and parameters implied by other config keys (and placed afterwards on the command line)");
+
@SetFromFlag("launchCommandCreatesPidFile")
ConfigKey<Boolean> LAUNCH_COMMAND_CREATES_PID_FILE = ConfigKeys.newBooleanConfigKey("brooklynnode.launch.command.pid.updated",
"Whether the launch script creates/updates the PID file, if not the entity will do so, "
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/634b66b9/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeSshDriver.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeSshDriver.java b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeSshDriver.java
index cbe1535..d5d9c01 100644
--- a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeSshDriver.java
+++ b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeSshDriver.java
@@ -285,6 +285,9 @@ public class BrooklynNodeSshDriver extends JavaSoftwareProcessSshDriver implemen
if (getEntity().getConfig(BrooklynNode.NO_SHUTDOWN_ON_EXIT)) {
cmd += " --noShutdownOnExit ";
}
+ if (!Strings.isBlank(getEntity().getConfig(BrooklynNode.EXTRA_LAUNCH_PARAMETERS))) {
+ cmd += " "+getEntity().getConfig(BrooklynNode.EXTRA_LAUNCH_PARAMETERS);
+ }
cmd += format(" >> %s/console 2>&1 </dev/null &", getRunDir());
log.info("Starting brooklyn on {} using command {}", getMachine(), cmd);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/634b66b9/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynUpgradeEffector.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynUpgradeEffector.java b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynUpgradeEffector.java
index a55f077..3dc2015 100644
--- a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynUpgradeEffector.java
+++ b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynUpgradeEffector.java
@@ -49,6 +49,7 @@ import brooklyn.util.repeat.Repeater;
import brooklyn.util.task.DynamicTasks;
import brooklyn.util.task.Tasks;
import brooklyn.util.text.Identifiers;
+import brooklyn.util.text.Strings;
import brooklyn.util.time.Duration;
import com.google.common.base.Functions;
@@ -58,8 +59,10 @@ import com.google.common.base.Predicates;
import com.google.common.reflect.TypeToken;
@SuppressWarnings("serial")
-/** Upgrades a brooklyn node in-place on the box, by creating a child brooklyn node and ensuring it can rebind in HOT_STANDBY;
- * requires the target node to have persistence enabled
+/** Upgrades a brooklyn node in-place on the box,
+ * by creating a child brooklyn node and ensuring it can rebind in HOT_STANDBY
+ * <p>
+ * Requires the target node to have persistence enabled.
*/
public class BrooklynUpgradeEffector {
@@ -69,13 +72,21 @@ public class BrooklynUpgradeEffector {
public static final ConfigKey<Map<String,Object>> EXTRA_CONFIG = MapConfigKey.builder(new TypeToken<Map<String,Object>>() {}).name("extraConfig").description("Additional new config to set on this entity as part of upgrading").build();
public static final Effector<Void> UPGRADE = Effectors.effector(Void.class, "upgrade")
- .description("Changes the Brooklyn build used to run this node, by spawning a dry-run node then copying the installed files across")
+ .description("Changes the Brooklyn build used to run this node, by spawning a dry-run node then copying the installed files across. "
+ + "This node must be running for persistence for in-place upgrading to work.")
.parameter(BrooklynNode.SUGGESTED_VERSION).parameter(DOWNLOAD_URL).parameter(EXTRA_CONFIG)
.impl(new UpgradeImpl()).build();
public static class UpgradeImpl extends EffectorBody<Void> {
@Override
public Void call(ConfigBag parametersO) {
+ if (!isPersistenceModeEnabled(entity())) {
+ // would could try a `forcePersistNow`, but that's sloppy;
+ // for now, require HA/persistence for upgrading
+ DynamicTasks.queue( Tasks.warning("Persistence does not appear to be enabled at this node. "
+ + "In-place upgrade is unlikely to succeed.", null) );
+ }
+
ConfigBag parameters = ConfigBag.newInstanceCopying(parametersO);
/*
@@ -103,8 +114,11 @@ public class BrooklynUpgradeEffector {
.configure(parameters.getAllConfig()));
//force this to start as hot-standby
- String launchCommand = dryRunChild.getConfig(BrooklynNode.LAUNCH_COMMAND);
- ((EntityInternal)dryRunChild).setConfig(BrooklynNode.LAUNCH_COMMAND, launchCommand + " --highAvailability "+HighAvailabilityMode.HOT_STANDBY);
+ String launchParameters = dryRunChild.getConfig(BrooklynNode.EXTRA_LAUNCH_PARAMETERS);
+ if (Strings.isBlank(launchParameters)) launchParameters = "";
+ else launchParameters += " ";
+ launchParameters += "--highAvailability "+HighAvailabilityMode.HOT_STANDBY;
+ ((EntityInternal)dryRunChild).setConfig(BrooklynNode.EXTRA_LAUNCH_PARAMETERS, launchParameters);
Entities.manage(dryRunChild);
final String dryRunNodeUid = dryRunChild.getId();
@@ -152,6 +166,15 @@ public class BrooklynUpgradeEffector {
return null;
}
+ private boolean isPersistenceModeEnabled(EntityInternal entity) {
+ // TODO when there are PERSIST* options in BrooklynNode, look at them here!
+ // or, better, have a sensor for persistence
+ String params = entity.getConfig(BrooklynNode.EXTRA_LAUNCH_PARAMETERS);
+ if (params==null) return false;
+ if (params.indexOf("persist")==0) return false;
+ return true;
+ }
+
}
private static class WaitForRepeaterCallable implements Callable<Boolean> {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/634b66b9/software/base/src/test/resources/brooklyn/entity/brooklynnode/brooklyn-node.yaml
----------------------------------------------------------------------
diff --git a/software/base/src/test/resources/brooklyn/entity/brooklynnode/brooklyn-node.yaml b/software/base/src/test/resources/brooklyn/entity/brooklynnode/brooklyn-node.yaml
index 9e6300f..bd91f77 100644
--- a/software/base/src/test/resources/brooklyn/entity/brooklynnode/brooklyn-node.yaml
+++ b/software/base/src/test/resources/brooklyn/entity/brooklynnode/brooklyn-node.yaml
@@ -17,11 +17,18 @@
# under the License.
#
+name: Example Brooklyn Node
+
services:
- type: brooklyn.entity.brooklynnode.BrooklynNode
+
## to use a local file, specify something such as the following:
downloadUrl: file:///Users/alex/.m2/repository/org/apache/brooklyn/brooklyn-dist/0.7.0-SNAPSHOT/brooklyn-dist-0.7.0-SNAPSHOT-dist.tar.gz
# downloadUrl: file:///tmp/brooklyn-dist-0.7.0-SNAPSHOT-dist.tar.gz
+
+ ## to persist
+# launchParameters: --persist auto --persistenceDir /tmp/brooklyn-persistence-example/
+
## NB if deploying to a remote machine you must also supply management{Username,Password} and a brooklyn properties with those values set
location: localhost
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/634b66b9/usage/launcher/src/main/java/brooklyn/launcher/BrooklynLauncher.java
----------------------------------------------------------------------
diff --git a/usage/launcher/src/main/java/brooklyn/launcher/BrooklynLauncher.java b/usage/launcher/src/main/java/brooklyn/launcher/BrooklynLauncher.java
index 598d176..158c7c4 100644
--- a/usage/launcher/src/main/java/brooklyn/launcher/BrooklynLauncher.java
+++ b/usage/launcher/src/main/java/brooklyn/launcher/BrooklynLauncher.java
@@ -19,9 +19,6 @@
package brooklyn.launcher;
import static com.google.common.base.Preconditions.checkNotNull;
-
-import brooklyn.entity.rebind.transformer.CompoundTransformer;
-import brooklyn.management.ha.ManagementPlaneSyncRecord;
import io.brooklyn.camp.CampPlatform;
import io.brooklyn.camp.brooklyn.BrooklynCampPlatformLauncherNoServer;
import io.brooklyn.camp.brooklyn.spi.creation.BrooklynAssemblyTemplateInstantiator;
@@ -68,6 +65,7 @@ import brooklyn.entity.rebind.persister.FileBasedObjectStore;
import brooklyn.entity.rebind.persister.PersistMode;
import brooklyn.entity.rebind.persister.PersistenceObjectStore;
import brooklyn.entity.rebind.persister.jclouds.JcloudsBlobStoreBasedObjectStore;
+import brooklyn.entity.rebind.transformer.CompoundTransformer;
import brooklyn.entity.trait.Startable;
import brooklyn.internal.BrooklynFeatureEnablement;
import brooklyn.launcher.config.StopWhichAppsOnShutdown;
@@ -81,6 +79,7 @@ import brooklyn.management.ha.HighAvailabilityManager;
import brooklyn.management.ha.HighAvailabilityManagerImpl;
import brooklyn.management.ha.HighAvailabilityMode;
import brooklyn.management.ha.ManagementNodeState;
+import brooklyn.management.ha.ManagementPlaneSyncRecord;
import brooklyn.management.ha.ManagementPlaneSyncRecordPersister;
import brooklyn.management.ha.ManagementPlaneSyncRecordPersisterToObjectStore;
import brooklyn.management.internal.LocalManagementContext;
@@ -104,7 +103,6 @@ import brooklyn.util.time.Time;
import com.google.common.base.Splitter;
import com.google.common.base.Stopwatch;
-import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;