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
+                    }
                 }
             }
         };        

Reply via email to