This is an automated email from the ASF dual-hosted git repository. heneveld pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit 5a072bb9b3716917af9aa0095b415f8c65280578 Author: Alex Heneveld <[email protected]> AuthorDate: Fri Sep 10 12:48:31 2021 +0100 more guards against activity running on read-only entities --- .../brooklyn/core/entity/lifecycle/ServiceStateLogic.java | 6 +++--- .../apache/brooklyn/core/entity/trait/StartableMethods.java | 2 +- core/src/main/java/org/apache/brooklyn/core/feed/Poller.java | 2 +- .../org/apache/brooklyn/entity/group/DynamicClusterImpl.java | 2 +- .../apache/brooklyn/entity/stock/AsyncApplicationImpl.java | 2 +- .../apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java | 12 ++++++------ .../apache/brooklyn/policy/failover/ElectPrimaryPolicy.java | 5 +++++ .../software/base/AbstractSoftwareProcessSshDriver.java | 4 ++-- .../software/base/AbstractSoftwareProcessWinRmDriver.java | 4 ++-- 9 files changed, 22 insertions(+), 17 deletions(-) diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/ServiceStateLogic.java b/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/ServiceStateLogic.java index d32d0c5..8ab3d27 100644 --- a/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/ServiceStateLogic.java +++ b/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/ServiceStateLogic.java @@ -184,8 +184,8 @@ public class ServiceStateLogic { private static void waitBrieflyForServiceUpIfStateIsRunning(Entity entity, Lifecycle state) { if (state==Lifecycle.RUNNING) { - Boolean up = ((EntityInternal)entity).getAttribute(Attributes.SERVICE_UP); - if (!Boolean.TRUE.equals(up) && !Boolean.TRUE.equals(Entities.isReadOnly(entity))) { + Boolean up = entity.getAttribute(Attributes.SERVICE_UP); + if (!Boolean.TRUE.equals(up) && !Entities.isReadOnly(entity)) { // pause briefly to allow any recent problem-clearing processing to complete Stopwatch timer = Stopwatch.createStarted(); boolean nowUp = Repeater.create() @@ -537,7 +537,7 @@ public class ServiceStateLogic { @Override protected void onUpdated() { - if (entity==null || !Entities.isManaged(entity)) { + if (entity==null || !Entities.isManagedActive(entity)) { // either invoked during setup or entity has become unmanaged; just ignore BrooklynLogging.log(log, BrooklynLogging.levelDebugOrTraceIfReadOnly(entity), "Ignoring service indicators onUpdated at {} from invalid/unmanaged entity ({})", this, entity); diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/trait/StartableMethods.java b/core/src/main/java/org/apache/brooklyn/core/entity/trait/StartableMethods.java index 933dd25..d887c33 100644 --- a/core/src/main/java/org/apache/brooklyn/core/entity/trait/StartableMethods.java +++ b/core/src/main/java/org/apache/brooklyn/core/entity/trait/StartableMethods.java @@ -76,7 +76,7 @@ public class StartableMethods { List<Startable> failedEntities = Lists.newArrayList(); for (final Startable entity : entities) { - if (!Entities.isManaged((Entity)entity)) { + if (!Entities.isManagedActive((Entity)entity)) { log.debug("Not stopping {} because it is not managed; continuing", entity); continue; } diff --git a/core/src/main/java/org/apache/brooklyn/core/feed/Poller.java b/core/src/main/java/org/apache/brooklyn/core/feed/Poller.java index ce12a0f..2d70baa 100644 --- a/core/src/main/java/org/apache/brooklyn/core/feed/Poller.java +++ b/core/src/main/java/org/apache/brooklyn/core/feed/Poller.java @@ -147,7 +147,7 @@ public class Poller<V> { ScheduledTask t = ScheduledTask.builder(() -> { DynamicSequentialTask<Void> task = new DynamicSequentialTask<Void>(MutableMap.of("displayName", scheduleName, "entity", entity), new Callable<Void>() { @Override public Void call() { - if (!Entities.isManaged(entity)) { + if (!Entities.isManagedActive(entity)) { return null; } if (onlyIfServiceUp && !Boolean.TRUE.equals(entity.getAttribute(Attributes.SERVICE_UP))) { diff --git a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java index 7e6b96f..ba59b84 100644 --- a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java +++ b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java @@ -453,7 +453,7 @@ public class DynamicClusterImpl extends AbstractGroupImpl implements DynamicClus protected void doStart() { if (isQuarantineEnabled()) { QuarantineGroup quarantineGroup = getAttribute(QUARANTINE_GROUP); - if (quarantineGroup==null || !Entities.isManaged(quarantineGroup)) { + if (quarantineGroup==null || !Entities.isManagedActive(quarantineGroup)) { quarantineGroup = addChild(EntitySpec.create(QuarantineGroup.class).displayName("quarantine")); sensors().set(QUARANTINE_GROUP, quarantineGroup); } diff --git a/core/src/main/java/org/apache/brooklyn/entity/stock/AsyncApplicationImpl.java b/core/src/main/java/org/apache/brooklyn/entity/stock/AsyncApplicationImpl.java index 636ab4f..5a71504 100644 --- a/core/src/main/java/org/apache/brooklyn/entity/stock/AsyncApplicationImpl.java +++ b/core/src/main/java/org/apache/brooklyn/entity/stock/AsyncApplicationImpl.java @@ -276,7 +276,7 @@ public class AsyncApplicationImpl extends AbstractApplication implements AsyncAp @Override protected void onUpdated() { - if (entity == null || !isRunning() || !Entities.isManaged(entity)) { + if (entity == null || !isRunning() || !Entities.isManagedActive(entity)) { // e.g. invoked during setup or entity has become unmanaged; just ignore BrooklynLogging.log(LOG, BrooklynLogging.levelDebugOrTraceIfReadOnly(entity), "Ignoring {} onUpdated when entity is not in valid state ({})", this, entity); diff --git a/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java b/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java index 07ee817..c9de929 100644 --- a/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java +++ b/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java @@ -850,8 +850,8 @@ public class AutoScalerPolicy extends AbstractPolicy { } private void analyze(ScalingData data, String description) { - if (!Entities.isManaged(entity)) { - LOG.debug("Skipping autoscaling analysis because entity "+entity+" is unmanaged"); + if (!Entities.isManagedActive(entity)) { + LOG.debug("Skipping autoscaling analysis because entity "+entity+" is not actively managed"); return; } @@ -1102,8 +1102,8 @@ public class AutoScalerPolicy extends AbstractPolicy { private void resizeNow(String reason) { // this runs in a thread after the fact so might not be cancelled - if (!Entities.isManaged(entity)) { - LOG.debug("Skipping autoscaling resize scheduling (due to '"+reason+"') because entity "+entity+" is unmanaged"); + if (!Entities.isManagedActive(entity)) { + LOG.debug("Skipping autoscaling resize scheduling (due to '"+reason+"') because entity "+entity+" is not actively managed"); return; } @@ -1139,8 +1139,8 @@ public class AutoScalerPolicy extends AbstractPolicy { public Void call() throws Exception { // TODO Should we use int throughout, rather than casting here? try { - if (!Entities.isManaged(entity)) { - LOG.warn("Skipping autoscaling resize task (due to '"+reason+"') because entity "+entity+" is unmanaged"); + if (!Entities.isManagedActive(entity)) { + LOG.warn("Skipping autoscaling resize task (due to '"+reason+"') because entity "+entity+" is not actively managed"); return null; } diff --git a/policy/src/main/java/org/apache/brooklyn/policy/failover/ElectPrimaryPolicy.java b/policy/src/main/java/org/apache/brooklyn/policy/failover/ElectPrimaryPolicy.java index e2190ac..a0187f7 100644 --- a/policy/src/main/java/org/apache/brooklyn/policy/failover/ElectPrimaryPolicy.java +++ b/policy/src/main/java/org/apache/brooklyn/policy/failover/ElectPrimaryPolicy.java @@ -111,6 +111,11 @@ public class ElectPrimaryPolicy extends AbstractPolicy implements ElectPrimaryCo @Override public void setEntity(@SuppressWarnings("deprecation") org.apache.brooklyn.api.entity.EntityLocal entity) { super.setEntity(entity); + + if (!Entities.isManagedActive(entity)) { + // hot standby or entity finished + return; + } checkAndMaybeAddEffector(entity); checkQuorums(entity); diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java index 376577b..fc58de5 100644 --- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java +++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java @@ -463,8 +463,8 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP * @see #DEBUG */ protected ScriptHelper newScript(Map<String, ?> flags, String phase) { - if (!Entities.isManaged(getEntity())) - throw new IllegalStateException(getEntity()+" is no longer managed; cannot create script to run here ("+phase+")"); + if (!Entities.isManagedActive(getEntity())) + throw new IllegalStateException(getEntity()+" is not currently managed here; cannot create script to run here ("+phase+")"); if (!Iterables.all(flags.keySet(), StringPredicates.equalToAny(VALID_FLAGS))) { throw new IllegalArgumentException("Invalid flags passed: " + flags); diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java index 268de22..ddbcb3b 100644 --- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java +++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java @@ -102,8 +102,8 @@ public abstract class AbstractSoftwareProcessWinRmDriver extends AbstractSoftwar } protected WinRmExecuteHelper newEmptyScript(String taskNamePrefix) { - if (!Entities.isManaged(getEntity())) - throw new IllegalStateException(getEntity() + " is no longer managed; cannot create script to run here (" + taskNamePrefix + ")"); + if (!Entities.isManagedActive(getEntity())) + throw new IllegalStateException(getEntity() + " is not managed here; cannot create script to run here (" + taskNamePrefix + ")"); WinRmExecuteHelper s = new WinRmExecuteHelper(this, taskNamePrefix + " " + elvis(entity, this)); return s;
