You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2014/09/19 13:31:20 UTC
[04/16] git commit: Shutdown effector in BrooklynNode
Shutdown effector in BrooklynNode
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/3191665e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/3191665e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/3191665e
Branch: refs/heads/master
Commit: 3191665ea836fbb54337485257f3a93c8fdd1b12
Parents: df789d9
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Fri Sep 12 19:08:08 2014 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Wed Sep 17 15:40:47 2014 +0300
----------------------------------------------------------------------
.../entity/brooklynnode/BrooklynNode.java | 20 +++++++++-
.../entity/brooklynnode/BrooklynNodeImpl.java | 39 +++++++++++++++-----
2 files changed, 47 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3191665e/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 77e7214..035d5aa 100644
--- a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNode.java
+++ b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNode.java
@@ -41,6 +41,7 @@ import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
import brooklyn.util.collections.MutableMap;
import brooklyn.util.flags.SetFromFlag;
import brooklyn.util.ssh.BashCommands;
+import brooklyn.util.time.Duration;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
@@ -220,8 +221,23 @@ public interface BrooklynNode extends SoftwareProcess, UsesJava {
.parameter(BLUEPRINT_CAMP_PLAN)
.buildAbstract();
}
-
- public static Effector<String> DEPLOY_BLUEPRINT = DeployBlueprintEffector.DEPLOY_BLUEPRINT;
+
+ public static final Effector<String> DEPLOY_BLUEPRINT = DeployBlueprintEffector.DEPLOY_BLUEPRINT;
+
+ public interface ShutdownEffector {
+ ConfigKey<Boolean> STOP_APPS = ConfigKeys.newBooleanConfigKey("stop_apps", "Whether to stop apps before shutting down", true);
+ ConfigKey<Duration> DELAY = ConfigKeys.newConfigKey(Duration.class, "delay", "How long to wait before exiting the process", Duration.ZERO);
+ ConfigKey<Duration> HTTP_RETURN_TIMEOUT = ConfigKeys.newConfigKey(Duration.class, "httpReturnTimeout", "Maximum time to block the request for the shutdown to finish. 0 for infinity, positive to block");
+ Effector<Void> SHUTDOWN = Effectors.effector(Void.class, "shutdown")
+ .description("Shutdown the remote brooklyn instance")
+ .parameter(STOP_APPS)
+ .parameter(DELAY)
+ .parameter(HTTP_RETURN_TIMEOUT)
+ .buildAbstract();
+ }
+
+ public static final Effector<Void> SHUTDOWN = ShutdownEffector.SHUTDOWN;
+
public EntityHttpClient http();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3191665e/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
index 3475ef9..6cc6f34 100644
--- a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
+++ b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
@@ -22,8 +22,7 @@ import java.net.URI;
import java.util.List;
import java.util.Map;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.HttpClient;
+import org.apache.http.HttpStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -31,7 +30,6 @@ import brooklyn.config.ConfigKey;
import brooklyn.config.render.RendererHints;
import brooklyn.entity.Effector;
import brooklyn.entity.Entity;
-import brooklyn.entity.basic.BrooklynTaskTags;
import brooklyn.entity.basic.SoftwareProcessImpl;
import brooklyn.entity.effector.EffectorBody;
import brooklyn.entity.effector.Effectors;
@@ -42,18 +40,12 @@ import brooklyn.event.feed.http.HttpValueFunctions;
import brooklyn.util.collections.Jsonya;
import brooklyn.util.collections.MutableMap;
import brooklyn.util.config.ConfigBag;
-import brooklyn.util.exceptions.Exceptions;
-import brooklyn.util.http.HttpTool;
-import brooklyn.util.http.HttpTool.HttpClientBuilder;
import brooklyn.util.http.HttpToolResponse;
import brooklyn.util.javalang.JavaClassNames;
-import brooklyn.util.net.Urls;
-import brooklyn.util.stream.Streams;
-import brooklyn.util.task.Tasks;
import brooklyn.util.text.Strings;
+import brooklyn.util.time.Duration;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
import com.google.gson.Gson;
public class BrooklynNodeImpl extends SoftwareProcessImpl implements BrooklynNode {
@@ -83,6 +75,7 @@ public class BrooklynNodeImpl extends SoftwareProcessImpl implements BrooklynNod
public void init() {
super.init();
getMutableEntityType().addEffector(DeployBlueprintEffectorBody.DEPLOY_BLUEPRINT);
+ getMutableEntityType().addEffector(ShutdownEffectorBody.SHUTDOWN);
}
public static class DeployBlueprintEffectorBody extends EffectorBody<String> implements DeployBlueprintEffector {
@@ -152,6 +145,32 @@ public class BrooklynNodeImpl extends SoftwareProcessImpl implements BrooklynNod
}
}
+ public static class ShutdownEffectorBody extends EffectorBody<Void> implements ShutdownEffector {
+ public static final Effector<Void> SHUTDOWN = Effectors.effector(BrooklynNode.SHUTDOWN).impl(new ShutdownEffectorBody()).build();
+
+ @Override
+ public Void call(ConfigBag parameters) {
+ Map<String, String> formParams = MutableMap.<String, String>of(
+ "stopAppsFirst", parameters.get(STOP_APPS).toString(),
+ "delayMillis", getDelayMillis(parameters));
+ Duration httpReturnTimeout = parameters.get(HTTP_RETURN_TIMEOUT);
+ if (httpReturnTimeout != null) {
+ formParams.put("httpReturnTimeout", httpReturnTimeout.toString());
+ }
+ HttpToolResponse resp = ((BrooklynNode)entity()).http()
+ .post("/v1/server/shutdown", MutableMap.<String, String>of(), formParams);
+ if (resp.getResponseCode() != HttpStatus.SC_NO_CONTENT) {
+ throw new IllegalStateException("Remote node shutdown failed.");
+ }
+ return null;
+ }
+
+ private String getDelayMillis(ConfigBag parameters) {
+ return Long.toString(parameters.get(DELAY).toMilliseconds());
+ }
+
+ }
+
public List<String> getClasspath() {
List<String> classpath = getConfig(CLASSPATH);
if (classpath == null || classpath.isEmpty()) {