Don't shutdown BrooklynNode if STOP_PROCESS_MODE says so.
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/92951dc3 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/92951dc3 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/92951dc3 Branch: refs/heads/master Commit: 92951dc3dadbeea66928a84b08e76d8ff0399ae2 Parents: e583aa3 Author: Svetoslav Neykov <[email protected]> Authored: Fri Feb 27 17:08:35 2015 +0200 Committer: Svetoslav Neykov <[email protected]> Committed: Thu Mar 19 16:01:29 2015 +0200 ---------------------------------------------------------------------- .../entity/brooklynnode/BrooklynNodeImpl.java | 14 +++++++++++++- .../software/MachineLifecycleEffectorTasks.java | 15 +++++++++------ .../software/MachineLifecycleEffectorTasksTest.java | 8 +++++++- 3 files changed, 29 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/92951dc3/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 3827971..2ac59de 100644 --- a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java +++ b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java @@ -47,6 +47,7 @@ import brooklyn.entity.brooklynnode.effector.SetHighAvailabilityModeEffectorBody import brooklyn.entity.brooklynnode.effector.SetHighAvailabilityPriorityEffectorBody; import brooklyn.entity.effector.EffectorBody; import brooklyn.entity.effector.Effectors; +import brooklyn.entity.software.MachineLifecycleEffectorTasks; import brooklyn.entity.trait.Startable; import brooklyn.event.feed.ConfigToAttributes; import brooklyn.event.feed.http.HttpFeed; @@ -155,7 +156,18 @@ public class BrooklynNodeImpl extends SoftwareProcessImpl implements BrooklynNod @Override protected void preStop() { super.preStop(); - shutdownGracefully(); + if (MachineLifecycleEffectorTasks.canStop(getStopProcessModeParam(), this)) { + shutdownGracefully(); + } + } + + private StopMode getStopProcessModeParam() { + ConfigBag parameters = BrooklynTaskTags.getCurrentEffectorParameters(); + if (parameters != null) { + return parameters.get(StopSoftwareParameters.STOP_PROCESS_MODE); + } else { + return StopSoftwareParameters.STOP_PROCESS_MODE.getDefaultValue(); + } } @Override http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/92951dc3/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 0edd488..e64e078 100644 --- a/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java +++ b/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java @@ -45,8 +45,8 @@ import brooklyn.entity.basic.Lifecycle; import brooklyn.entity.basic.ServiceStateLogic; import brooklyn.entity.basic.SoftwareProcess; import brooklyn.entity.basic.SoftwareProcess.RestartSoftwareParameters; -import brooklyn.entity.basic.SoftwareProcess.StopSoftwareParameters; import brooklyn.entity.basic.SoftwareProcess.RestartSoftwareParameters.RestartMachineMode; +import brooklyn.entity.basic.SoftwareProcess.StopSoftwareParameters; import brooklyn.entity.basic.SoftwareProcess.StopSoftwareParameters.StopMode; import brooklyn.entity.effector.EffectorBody; import brooklyn.entity.effector.Effectors; @@ -571,8 +571,6 @@ public abstract class MachineLifecycleEffectorTasks { } } - boolean isEntityStopped = entity().getAttribute(SoftwareProcess.SERVICE_STATE_ACTUAL)==Lifecycle.STOPPED; - DynamicTasks.queue("pre-stop", new Callable<String>() { public String call() { if (entity().getAttribute(SoftwareProcess.SERVICE_STATE_ACTUAL)==Lifecycle.STOPPED) { log.debug("Skipping stop of entity "+entity()+" when already stopped"); @@ -586,7 +584,7 @@ public abstract class MachineLifecycleEffectorTasks { Maybe<SshMachineLocation> sshMachine = Machines.findUniqueSshMachineLocation(entity().getLocations()); Task<String> stoppingProcess = null; - if (canStop(stopProcessMode, isEntityStopped)) { + if (canStop(stopProcessMode, entity())) { stoppingProcess = DynamicTasks.queue("stopping (process)", new Callable<String>() { public String call() { DynamicTasks.markInessential(); stopProcessesAtMachine(); @@ -652,9 +650,14 @@ public abstract class MachineLifecycleEffectorTasks { if (log.isDebugEnabled()) log.debug("Stopped software process entity "+entity()); } - protected static boolean canStop(StopMode stopMode, boolean isTargetStopped) { + public static boolean canStop(StopMode stopMode, Entity entity) { + boolean isEntityStopped = entity.getAttribute(SoftwareProcess.SERVICE_STATE_ACTUAL)==Lifecycle.STOPPED; + return canStop(stopMode, isEntityStopped); + } + + protected static boolean canStop(StopMode stopMode, boolean isStopped) { return stopMode == StopMode.ALWAYS || - stopMode == StopMode.IF_NOT_STOPPED && !isTargetStopped; + stopMode == StopMode.IF_NOT_STOPPED && !isStopped; } private void checkCompatibleMachineModes(Boolean isStopMachine, boolean hasStopMachineMode, StopMode stopMachineMode) { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/92951dc3/software/base/src/test/java/brooklyn/entity/software/MachineLifecycleEffectorTasksTest.java ---------------------------------------------------------------------- diff --git a/software/base/src/test/java/brooklyn/entity/software/MachineLifecycleEffectorTasksTest.java b/software/base/src/test/java/brooklyn/entity/software/MachineLifecycleEffectorTasksTest.java index 223d00b..2e73ca7 100644 --- a/software/base/src/test/java/brooklyn/entity/software/MachineLifecycleEffectorTasksTest.java +++ b/software/base/src/test/java/brooklyn/entity/software/MachineLifecycleEffectorTasksTest.java @@ -23,11 +23,17 @@ import static org.testng.Assert.assertEquals; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; +import brooklyn.entity.basic.BasicEntityImpl; +import brooklyn.entity.basic.Lifecycle; +import brooklyn.entity.basic.SoftwareProcess; import brooklyn.entity.basic.SoftwareProcess.StopSoftwareParameters.StopMode; public class MachineLifecycleEffectorTasksTest { public static boolean canStop(StopMode stopMode, boolean isEntityStopped) { - return MachineLifecycleEffectorTasks.canStop(stopMode, isEntityStopped); + BasicEntityImpl entity = new BasicEntityImpl(); + Lifecycle state = isEntityStopped ? Lifecycle.STOPPED : Lifecycle.RUNNING; + entity.setAttribute(SoftwareProcess.SERVICE_STATE_ACTUAL, state); + return MachineLifecycleEffectorTasks.canStop(stopMode, entity); } @DataProvider(name = "canStopStates")
