Adds SoftwareProcessDriver.kill - To be used primarily for testing, where server dies
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/191fa837 Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/191fa837 Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/191fa837 Branch: refs/heads/0.4.0 Commit: 191fa837e0d927659cc4e8f098e614f01de37a6b Parents: b92ed6f Author: Aled Sage <[email protected]> Authored: Sat Oct 6 15:29:17 2012 +0100 Committer: Aled Sage <[email protected]> Committed: Sat Oct 6 15:29:17 2012 +0100 ---------------------------------------------------------------------- .../entity/basic/AbstractSoftwareProcessDriver.java | 5 +++++ .../entity/basic/AbstractSoftwareProcessSshDriver.java | 13 +++++++++++-- .../brooklyn/entity/basic/SoftwareProcessDriver.java | 9 ++++++++- .../basic/lifecycle/legacy/SshBasedAppSetup.groovy | 6 ++++++ .../brooklyn/entity/java/VanillaJavaAppSshDriver.java | 6 ++++++ .../entity/basic/SoftwareProcessEntityTest.groovy | 6 ++++++ .../JavaSoftwareProcessSshDriverIntegrationTest.groovy | 6 ++++++ .../basic/lifecycle/StartStopSshDriverTest.groovy | 1 + .../java/brooklyn/entity/java/EntityPollingTest.groovy | 3 +++ 9 files changed, 52 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/191fa837/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java b/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java index ca40957..42dd195 100644 --- a/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java +++ b/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java @@ -59,6 +59,11 @@ public abstract class AbstractSoftwareProcessDriver implements SoftwareProcessDr public abstract void customize(); public abstract void launch(); + @Override + public void kill() { + stop(); + } + /** * Implement this method in child classes to add some post-launch behavior */ http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/191fa837/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessSshDriver.java ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessSshDriver.java b/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessSshDriver.java index 0ec6340..aff0db9 100644 --- a/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessSshDriver.java +++ b/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessSshDriver.java @@ -107,6 +107,7 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP protected final static String LAUNCHING = "launching"; protected final static String CHECK_RUNNING = "check-running"; protected final static String STOPPING = "stopping"; + protected final static String KILLING = "killing"; protected final static String RESTARTING = "restarting"; public final static String PID_FILENAME = "pid.txt"; @@ -136,7 +137,7 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP "date > $INSTALL_DIR/BROOKLYN" ); } - if (ImmutableSet.of(CUSTOMIZING, LAUNCHING, CHECK_RUNNING, STOPPING, RESTARTING).contains(phase)) { + if (ImmutableSet.of(CUSTOMIZING, LAUNCHING, CHECK_RUNNING, STOPPING, KILLING, RESTARTING).contains(phase)) { s.header.append( "export RUN_DIR=\""+getRunDir()+"\"", "mkdir -p $RUN_DIR", @@ -147,7 +148,7 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP if (ImmutableSet.of(CUSTOMIZING).contains(phase)) s.skipIfBodyEmpty(); - if (ImmutableSet.of(CHECK_RUNNING, LAUNCHING, STOPPING, RESTARTING).contains(phase)) + if (ImmutableSet.of(CHECK_RUNNING, LAUNCHING, STOPPING, KILLING, RESTARTING).contains(phase)) s.failIfBodyEmpty(); if (ImmutableSet.of(INSTALLING, LAUNCHING).contains(phase)) s.updateTaskAndFailOnNonZeroResultCode(); @@ -177,6 +178,14 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP "rm "+pidFile ); + else if (KILLING.equals(phase)) + s.body.append( + "export PID=`cat "+pidFile+"`", + "[[ -n \"$PID\" ]] || exit 0", + "kill -9 $PID", + "rm "+pidFile + ); + else if (RESTARTING.equals(phase)) s.footer.prepend( "test -f "+pidFile+" || exit 1", //no pid, not running http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/191fa837/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessDriver.java ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessDriver.java b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessDriver.java index 667bb40..598675c 100644 --- a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessDriver.java +++ b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessDriver.java @@ -1,7 +1,9 @@ package brooklyn.entity.basic; -import brooklyn.entity.basic.EntityLocal; +import java.util.Collection; + import brooklyn.entity.drivers.EntityDriver; +import brooklyn.entity.trait.Startable; /** * The {@link EntityDriver} for a {@link SoftwareProcessEntity}. @@ -39,4 +41,9 @@ public interface SoftwareProcessDriver extends EntityDriver { * @see Startable#restart() */ void restart(); + + /** + * Kills the process, ungracefully and immediately where possible (e.g. with `kill -9`). + */ + void kill(); } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/191fa837/software/base/src/main/java/brooklyn/entity/basic/lifecycle/legacy/SshBasedAppSetup.groovy ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/brooklyn/entity/basic/lifecycle/legacy/SshBasedAppSetup.groovy b/software/base/src/main/java/brooklyn/entity/basic/lifecycle/legacy/SshBasedAppSetup.groovy index ab01995..573c7d2 100644 --- a/software/base/src/main/java/brooklyn/entity/basic/lifecycle/legacy/SshBasedAppSetup.groovy +++ b/software/base/src/main/java/brooklyn/entity/basic/lifecycle/legacy/SshBasedAppSetup.groovy @@ -355,12 +355,18 @@ public abstract class SshBasedAppSetup extends AbstractSoftwareProcessSshDriver * * @see #start() */ + @Override public void stop() { shutdown() postShutdown() log.info "stopped {}", entity } + @Override + public void kill() { + stop(); + } + /** * Restart the application. * http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/191fa837/software/base/src/main/java/brooklyn/entity/java/VanillaJavaAppSshDriver.java ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/brooklyn/entity/java/VanillaJavaAppSshDriver.java b/software/base/src/main/java/brooklyn/entity/java/VanillaJavaAppSshDriver.java index aa6af38..24bc4cd 100644 --- a/software/base/src/main/java/brooklyn/entity/java/VanillaJavaAppSshDriver.java +++ b/software/base/src/main/java/brooklyn/entity/java/VanillaJavaAppSshDriver.java @@ -11,6 +11,7 @@ import java.util.List; import java.util.Map; import brooklyn.location.basic.SshMachineLocation; +import brooklyn.util.MutableMap; import brooklyn.util.ResourceUtils; import brooklyn.util.text.StringEscapes.BashStringEscapes; @@ -138,6 +139,11 @@ public class VanillaJavaAppSshDriver extends JavaSoftwareProcessSshDriver implem } @Override + public void kill() { + newScript(MutableMap.of("usePidFile", true), KILLING).execute(); + } + + @Override protected Map getCustomJavaSystemProperties() { VanillaJavaApp entity = getEntity(); Map result = new HashMap(); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/191fa837/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityTest.groovy ---------------------------------------------------------------------- diff --git a/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityTest.groovy b/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityTest.groovy index 105b597..537a8ac 100644 --- a/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityTest.groovy +++ b/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityTest.groovy @@ -74,6 +74,12 @@ public class SimulatedDriver extends AbstractSoftwareProcessDriver { } @Override + public void kill() { + events.add("kill"); + launched = false; + } + + @Override public void install() { events.add("install"); } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/191fa837/software/base/src/test/java/brooklyn/entity/basic/lifecycle/JavaSoftwareProcessSshDriverIntegrationTest.groovy ---------------------------------------------------------------------- diff --git a/software/base/src/test/java/brooklyn/entity/basic/lifecycle/JavaSoftwareProcessSshDriverIntegrationTest.groovy b/software/base/src/test/java/brooklyn/entity/basic/lifecycle/JavaSoftwareProcessSshDriverIntegrationTest.groovy index 76b811c..9023df6 100644 --- a/software/base/src/test/java/brooklyn/entity/basic/lifecycle/JavaSoftwareProcessSshDriverIntegrationTest.groovy +++ b/software/base/src/test/java/brooklyn/entity/basic/lifecycle/JavaSoftwareProcessSshDriverIntegrationTest.groovy @@ -127,6 +127,12 @@ class MyEntitySshDriver extends JavaSoftwareProcessSshDriver implements MyEntity } @Override + public void kill() { + newScript(KILLING, usePidFile:true) + .execute(); + } + + @Override protected List<String> getCustomJavaConfigOptions() { return super.getCustomJavaConfigOptions() + ["-Dabc=def"] } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/191fa837/software/base/src/test/java/brooklyn/entity/basic/lifecycle/StartStopSshDriverTest.groovy ---------------------------------------------------------------------- diff --git a/software/base/src/test/java/brooklyn/entity/basic/lifecycle/StartStopSshDriverTest.groovy b/software/base/src/test/java/brooklyn/entity/basic/lifecycle/StartStopSshDriverTest.groovy index 54d8105..e501ff5 100644 --- a/software/base/src/test/java/brooklyn/entity/basic/lifecycle/StartStopSshDriverTest.groovy +++ b/software/base/src/test/java/brooklyn/entity/basic/lifecycle/StartStopSshDriverTest.groovy @@ -74,6 +74,7 @@ class StartStopSshDriverTest { public class BasicStartStopSshDriver extends AbstractSoftwareProcessSshDriver { public boolean isRunning() { true } public void stop() {} + public void kill() {} public void install() {} public void customize() {} public void launch() {} http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/191fa837/software/base/src/test/java/brooklyn/entity/java/EntityPollingTest.groovy ---------------------------------------------------------------------- diff --git a/software/base/src/test/java/brooklyn/entity/java/EntityPollingTest.groovy b/software/base/src/test/java/brooklyn/entity/java/EntityPollingTest.groovy index 6196f55..2ff31dd 100644 --- a/software/base/src/test/java/brooklyn/entity/java/EntityPollingTest.groovy +++ b/software/base/src/test/java/brooklyn/entity/java/EntityPollingTest.groovy @@ -76,6 +76,9 @@ public class EntityPollingTest { @Override public void stop() { // no-op } + @Override public void kill() { + // no-op + } } } };
