Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master dc53885bd -> fe425079f


Don't stop underlying machine if there are active services at the node.

So far pre-stop was throwing if there are running services, but machine 
shutdown was forced nevertheless.


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

Branch: refs/heads/master
Commit: 810c1183bf77b4693a10be19853f43d8e89f770e
Parents: 67d05d6
Author: Svetoslav Neykov <[email protected]>
Authored: Fri Dec 12 15:01:25 2014 +0200
Committer: Svetoslav Neykov <[email protected]>
Committed: Fri Dec 12 16:32:21 2014 +0200

----------------------------------------------------------------------
 .../SoftwareProcessDriverLifecycleEffectorTasks.java     |  7 +++++++
 .../java/brooklyn/entity/basic/SoftwareProcessImpl.java  |  5 ++++-
 .../brooklyn/entity/brooklynnode/BrooklynNodeImpl.java   | 11 +++++++++--
 .../entity/software/MachineLifecycleEffectorTasks.java   | 10 ++++++++++
 4 files changed, 30 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/810c1183/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 edbafc4..158817e 100644
--- 
a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessDriverLifecycleEffectorTasks.java
+++ 
b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessDriverLifecycleEffectorTasks.java
@@ -162,6 +162,13 @@ public class SoftwareProcessDriverLifecycleEffectorTasks 
extends MachineLifecycl
     }
     
     @Override
+    protected void preStopConfirmCustom() {
+        super.preStopConfirmCustom();
+        
+        entity().preStopConfirmCustom();
+    }
+    
+    @Override
     protected void preStopCustom() {
         super.preStopCustom();
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/810c1183/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 2755997..4b876ea 100644
--- a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java
+++ b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java
@@ -244,6 +244,9 @@ public abstract class SoftwareProcessImpl extends 
AbstractEntity implements Soft
     protected void postStart() {
     }
     
+    protected void preStopConfirmCustom() {
+    }
+    
     protected void preStop() {
         // note asymmetry that disconnectSensors is done in the entity not the 
driver
         // whereas on start the *driver* calls connectSensors, before calling 
postStart,
@@ -568,5 +571,5 @@ public abstract class SoftwareProcessImpl extends 
AbstractEntity implements Soft
     protected final void doRestart() {
         doRestart(ConfigBag.EMPTY);
     }
-    
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/810c1183/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 395949d..acb99cf 100644
--- 
a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
+++ 
b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
@@ -111,7 +111,15 @@ public class BrooklynNodeImpl extends SoftwareProcessImpl 
implements BrooklynNod
     protected void preStart() {
         ServiceNotUpLogic.clearNotUpIndicator(this, SHUTDOWN.getName());
     }
-    
+
+    @Override
+    protected void preStopConfirmCustom() {
+        super.preStopConfirmCustom();
+        if 
(Boolean.TRUE.equals(getAttribute(BrooklynNode.WEB_CONSOLE_ACCESSIBLE))) {
+            Preconditions.checkState(getChildren().isEmpty(), "Can't stop 
instance with running applications.");
+        }
+    }
+
     @Override
     protected void preStop() {
         super.preStop();
@@ -119,7 +127,6 @@ public class BrooklynNodeImpl extends SoftwareProcessImpl 
implements BrooklynNod
         // Shutdown only if accessible: any of stop_* could have already been 
called.
         // Don't check serviceUp=true because stop() will already have set 
serviceUp=false && expectedState=stopping
         if 
(Boolean.TRUE.equals(getAttribute(BrooklynNode.WEB_CONSOLE_ACCESSIBLE))) {
-            Preconditions.checkState(getChildren().isEmpty(), "Can't stop 
instance with running applications.");
             DynamicTasks.queue(Effectors.invocation(this, SHUTDOWN, 
MutableMap.of(ShutdownEffector.REQUEST_TIMEOUT, Duration.ONE_MINUTE)));
         } else {
             log.info("Skipping children.isEmpty check and shutdown call, 
because web-console not up for {}", this);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/810c1183/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 ab0cae4..364d620 100644
--- 
a/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
+++ 
b/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
@@ -533,6 +533,8 @@ public abstract class MachineLifecycleEffectorTasks {
      * {@link #stopAnyProvisionedMachines()} and sets state {@link 
Lifecycle#STOPPED}
      */
     public void stop(ConfigBag parameters) {
+        preStopConfirmCustom();
+
         log.info("Stopping {} in {}", entity(), entity().getLocations());
 
         Boolean isStopMachine = 
parameters.get(StopSoftwareParameters.STOP_MACHINE);
@@ -614,6 +616,14 @@ public abstract class MachineLifecycleEffectorTasks {
         if (log.isDebugEnabled()) log.debug("Stopped software process entity 
"+entity());
     }
 
+    /** 
+     * Override to check whether stop can be executed.
+     * Throw if stop should be aborted.
+     */
+    protected void preStopConfirmCustom() {
+        // nothing needed here
+    }
+
     protected void preStopCustom() {
         // nothing needed here
     }

Reply via email to