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;

Reply via email to