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 }
