You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2022/07/04 11:05:05 UTC

[brooklyn-server] 02/03: Extending extends AddEffectorInitializerAbstract per @Ahgittin comment

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 390d7477cc9d366796a824385c5792f4b17efb1c
Author: Juan Cabrerizo <ju...@cabrerizo.es>
AuthorDate: Mon Jul 4 11:28:51 2022 +0100

    Extending extends AddEffectorInitializerAbstract per @Ahgittin comment
---
 .../core/effector/util/ChildrenBatchEffector.java  | 22 +++++++++++-----------
 .../effector/util/ChildrenBatchEffectorTest.java   |  8 ++++++++
 2 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/core/src/main/java/org/apache/brooklyn/core/effector/util/ChildrenBatchEffector.java b/core/src/main/java/org/apache/brooklyn/core/effector/util/ChildrenBatchEffector.java
index c464967387..991e575cba 100644
--- a/core/src/main/java/org/apache/brooklyn/core/effector/util/ChildrenBatchEffector.java
+++ b/core/src/main/java/org/apache/brooklyn/core/effector/util/ChildrenBatchEffector.java
@@ -20,11 +20,11 @@ package org.apache.brooklyn.core.effector.util;
 
 import org.apache.brooklyn.api.effector.Effector;
 import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityInitializer;
 import org.apache.brooklyn.api.mgmt.Task;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.config.MapConfigKey;
+import org.apache.brooklyn.core.effector.AddEffectorInitializerAbstract;
 import org.apache.brooklyn.core.effector.EffectorBody;
 import org.apache.brooklyn.core.effector.EffectorTasks.EffectorBodyTaskFactory;
 import org.apache.brooklyn.core.effector.Effectors;
@@ -40,14 +40,13 @@ import org.apache.brooklyn.util.time.Time;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 /**
  * Effector to  invoking an effector across children or members,
  */
-public class ChildrenBatchEffector implements EntityInitializer {
+public class ChildrenBatchEffector extends AddEffectorInitializerAbstract {
     public static final Effector<Object> EFFECTOR = Effectors.effector(Object.class, "childrenBatchEffector").
             description("Invokes an effector e.g. across children or members").buildAbstract();
     public static final ConfigKey<String> EFFECTOR_NAME = ConfigKeys.builder(String.class)
@@ -78,12 +77,17 @@ public class ChildrenBatchEffector implements EntityInitializer {
     public static final MapConfigKey<Object> EFFECTOR_ARGS = new MapConfigKey.Builder<Object>(Object.class, "effectorArgs")
             .build();
     private static final Logger log = LoggerFactory.getLogger(ChildrenBatchEffector.class);
-    private final ConfigBag paramsCreationTime;
 
     public ChildrenBatchEffector(ConfigBag params) {
-        this.paramsCreationTime = params;
+        super(params);
     }
 
+    @Override
+    protected Effectors.EffectorBuilder<Object> newEffectorBuilder() {
+        Effectors.EffectorBuilder<Object> eff = newAbstractEffectorBuilder(Object.class);
+        eff.impl(new ChildrenBatchEffector.ChildrenBatchEffectorBody(initParams()));
+        return eff;    }
+
     public ChildrenBatchEffector(Map<String, String> params) {
         this(ConfigBag.newInstance(params));
     }
@@ -104,7 +108,7 @@ public class ChildrenBatchEffector implements EntityInitializer {
 
     @Override
     public void apply(@SuppressWarnings("deprecation") org.apache.brooklyn.api.entity.EntityLocal entity) {
-        ((EntityInternal) entity).getMutableEntityType().addEffector(makeEffector(paramsCreationTime));
+        ((EntityInternal) entity).getMutableEntityType().addEffector(makeEffector(initParams()));
     }
 
     protected static class ChildrenBatchEffectorBody extends EffectorBody<Object> {
@@ -162,11 +166,7 @@ public class ChildrenBatchEffector implements EntityInitializer {
 
                 if (batchSize > 0 && !items.isEmpty()) {
                     while (activeTasks.size() >= batchSize) {
-                        Iterator<Task<?>> ati = activeTasks.iterator();
-                        while (ati.hasNext()) {
-                            final Task<?> task = ati.next();
-                            if (task.isDone()) ati.remove();
-                        }
+                        activeTasks.removeIf(Task::isDone);
                         if (activeTasks.size() >= batchSize) {
                             try {
                                 Tasks.withBlockingDetails("Waiting for something in current batch of " + batchSize + " to complete "
diff --git a/core/src/test/java/org/apache/brooklyn/core/effector/util/ChildrenBatchEffectorTest.java b/core/src/test/java/org/apache/brooklyn/core/effector/util/ChildrenBatchEffectorTest.java
index 2e0d9b81d5..5628fe93dc 100644
--- a/core/src/test/java/org/apache/brooklyn/core/effector/util/ChildrenBatchEffectorTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/effector/util/ChildrenBatchEffectorTest.java
@@ -27,6 +27,7 @@ import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.effector.AddEffector;
 import org.apache.brooklyn.core.effector.EffectorBody;
 import org.apache.brooklyn.core.effector.Effectors;
+import org.apache.brooklyn.core.effector.http.HttpCommandEffector;
 import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
 import org.apache.brooklyn.core.test.entity.TestEntity;
 import org.apache.brooklyn.util.core.config.ConfigBag;
@@ -75,6 +76,13 @@ public class ChildrenBatchEffectorTest extends BrooklynAppUnitTestSupport {
         assertEquals(DoNothingEffector.correctExecutions, 2);
     }
 
+    @Test(expectedExceptions = NullPointerException.class)
+    public void testMissingName() {
+        new HttpCommandEffector(ConfigBag.newInstance()
+                .configure(ChildrenBatchEffector.BATCH_SIZE, 1)
+                .configure(ChildrenBatchEffector.EFFECTOR_TO_INVOKE, EFFECTOR_CHILDREN.getName())
+        ).newEffectorBuilder();
+    }
     @Test
     public void testContinueInvocationsWhenOneEffectorFail() {