Add {pre,post}RestartCustom hooks

Can't rely on {pre,post}Stop/Start hooks being called on restart.


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/d3beb51c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/d3beb51c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/d3beb51c

Branch: refs/heads/master
Commit: d3beb51ca7c766abf6903044d1f1ec0f4c655e94
Parents: db5111a
Author: Svetoslav Neykov <[email protected]>
Authored: Fri Feb 27 12:54:00 2015 +0200
Committer: Svetoslav Neykov <[email protected]>
Committed: Thu Mar 19 16:01:28 2015 +0200

----------------------------------------------------------------------
 ...twareProcessDriverLifecycleEffectorTasks.java | 19 +++++++++++++++++++
 .../entity/basic/SoftwareProcessImpl.java        |  6 ++++++
 .../software/MachineLifecycleEffectorTasks.java  | 19 +++++++++++++++++++
 3 files changed, 44 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d3beb51c/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessDriverLifecycleEffectorTasks.java
----------------------------------------------------------------------
diff --git 
a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessDriverLifecycleEffectorTasks.java
 
b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessDriverLifecycleEffectorTasks.java
index 158817e..df706fd 100644
--- 
a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessDriverLifecycleEffectorTasks.java
+++ 
b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessDriverLifecycleEffectorTasks.java
@@ -60,6 +60,10 @@ public class SoftwareProcessDriverLifecycleEffectorTasks 
extends MachineLifecycl
             return;
         }
         
+        DynamicTasks.queue("pre-restart", new Runnable() { public void run() {
+            preRestartCustom();
+        }});
+
         log.debug("restart of "+entity()+" appears to have driver and hostname 
- doing driver-level restart");
         entity().getDriver().restart();
         
@@ -67,6 +71,7 @@ public class SoftwareProcessDriverLifecycleEffectorTasks 
extends MachineLifecycl
         
         DynamicTasks.queue("post-restart", new Runnable() { public void run() {
             postStartCustom();
+            postRestartCustom();
             ServiceStateLogic.setExpectedState(entity(), Lifecycle.RUNNING);
         }});
     }
@@ -176,6 +181,20 @@ public class SoftwareProcessDriverLifecycleEffectorTasks 
extends MachineLifecycl
     }
 
     @Override
+    protected void preRestartCustom() {
+        super.preRestartCustom();
+        
+        entity().preRestart();
+    }
+
+    @Override
+    protected void postRestartCustom() {
+        super.postRestartCustom();
+        
+        entity().postRestart();
+    }
+
+    @Override
     protected String stopProcessesAtMachine() {
         String result;
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d3beb51c/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java
----------------------------------------------------------------------
diff --git 
a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java 
b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java
index 4b876ea..f05d0fb 100644
--- a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java
+++ b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java
@@ -271,6 +271,12 @@ public abstract class SoftwareProcessImpl extends 
AbstractEntity implements Soft
     protected void postStop() {
     }
 
+    protected void preRestart() {
+    }
+
+    protected void postRestart() {
+    }
+
     /**
      * For disconnecting from the running app. Will be called on stop.
      */

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d3beb51c/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
----------------------------------------------------------------------
diff --git 
a/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
 
b/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
index 8a1279c..0edd488 100644
--- 
a/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
+++ 
b/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
@@ -477,6 +477,13 @@ public abstract class MachineLifecycleEffectorTasks {
         if (isRestartMachine==RestartMachineMode.AUTO) 
             isRestartMachine = getDefaultRestartStopsMachine() ? 
RestartMachineMode.TRUE : RestartMachineMode.FALSE; 
 
+        DynamicTasks.queue("pre-restart", new Runnable() { public void run() {
+            //Calling preStopCustom without a corresponding postStopCustom 
invocation
+            //doesn't look right so use a separate callback pair; Also 
depending on the arguments
+            //stop() could be called which will call the {pre,post}StopCustom 
on its own.
+            preRestartCustom();
+        }});
+
         if (isRestartMachine==RestartMachineMode.FALSE) {
             DynamicTasks.queue("stopping (process)", new Callable<String>() { 
public String call() {
                 DynamicTasks.markInessential();
@@ -502,6 +509,10 @@ public abstract class MachineLifecycleEffectorTasks {
         
         restartChildren(parameters);
 
+        DynamicTasks.queue("post-restart", new Runnable() { public void run() {
+            postRestartCustom();
+        }});
+
         DynamicTasks.waitForLast();
         ServiceStateLogic.setExpectedState(entity(), Lifecycle.RUNNING);
     }
@@ -673,6 +684,14 @@ public abstract class MachineLifecycleEffectorTasks {
         // nothing needed here
     }
 
+    protected void preRestartCustom() {
+        // nothing needed here
+    }
+
+    protected void postRestartCustom() {
+        // nothing needed here
+    }
+
     public static class StopMachineDetails<T> implements Serializable {
         private static final long serialVersionUID = 3256747214315895431L;
         final String message;

Reply via email to