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 2023/03/29 16:19:23 UTC

[brooklyn-server] branch master updated (c6516ec006 -> c7a4472028)

This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git


    from c6516ec006 per previous, also ensure search path is set even when there is no catalog id
     new 50f18e1f27 fix workflow policy resumption
     new 86cb48ce1c more workflow policy fix+test - don't fail on destroy
     new 13c64f39c5 clean up provisioned location on software process entities
     new aa0bbf3038 prevent failure in formatString if an entry is null (was using guava list)
     new c7a4472028 more logging for stack traces returned in tasks

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../brooklyn/camp/brooklyn/WorkflowYamlTest.java   | 34 +++++++++++++++++++++-
 .../core/sensor/DependentConfiguration.java        |  2 +-
 .../brooklyn/core/workflow/WorkflowPolicy.java     |  6 ++--
 .../apache/brooklyn/util/core/task/BasicTask.java  |  4 +--
 .../lifecycle/MachineLifecycleEffectorTasks.java   |  7 +++++
 5 files changed, 46 insertions(+), 7 deletions(-)


[brooklyn-server] 01/05: fix workflow policy resumption

Posted by he...@apache.org.
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 50f18e1f27a6112cd19cfcbd9f3737ccf8758ce7
Author: Alex Heneveld <al...@cloudsoft.io>
AuthorDate: Wed Mar 29 16:28:41 2023 +0100

    fix workflow policy resumption
---
 .../brooklyn/camp/brooklyn/WorkflowYamlTest.java   | 28 +++++++++++++++++++++-
 .../brooklyn/core/workflow/WorkflowPolicy.java     |  4 ++--
 2 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java
index 765fe6eb2f..888433ba0e 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java
@@ -41,6 +41,7 @@ import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.entity.*;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
 import org.apache.brooklyn.core.entity.trait.Startable;
+import org.apache.brooklyn.core.policy.AbstractPolicy;
 import org.apache.brooklyn.core.sensor.Sensors;
 import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
 import org.apache.brooklyn.core.test.entity.TestApplication;
@@ -77,6 +78,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Consumer;
 import java.util.function.Predicate;
 
 import static org.apache.brooklyn.util.core.internal.ssh.ExecCmdAsserts.assertExecContains;
@@ -210,6 +212,24 @@ public class WorkflowYamlTest extends AbstractYamlTest {
         doTestWorkflowPolicy("triggers: theTrigger", Duration.seconds(1)::isLongerThan);
     }
 
+    @Test(groups="Integration")
+    public void testWorkflowPolicyTriggerSuspendResume() throws Exception {
+        doTestWorkflowPolicy("triggers: theTrigger", Duration.seconds(1)::isLongerThan, policy -> {
+            Entity entity = ((EntityAdjuncts.EntityAdjunctProxyable) policy).getEntity();
+            entity.sensors().set(MY_WORKFLOW_SENSOR, MutableMap.of("v", 10));
+            entity.sensors().set(Sensors.newStringSensor("theTrigger"), "go2");
+            EntityAsserts.assertAttributeEqualsEventually(MutableMap.of("timeout", "3s"), entity, MY_WORKFLOW_SENSOR, MutableMap.of("foo", "bar", "v", 11));
+            policy.suspend();
+            entity.sensors().set(Sensors.newStringSensor("theTrigger"), "go3");
+            Time.sleep(Duration.millis(100));
+            // not triggered
+            EntityAsserts.assertAttributeEquals(entity, MY_WORKFLOW_SENSOR, MutableMap.of("foo", "bar", "v", 11));
+            policy.resume();
+            entity.sensors().set(Sensors.newStringSensor("theTrigger"), "go4");
+            EntityAsserts.assertAttributeEqualsEventually(MutableMap.of("timeout", "3s"), entity, MY_WORKFLOW_SENSOR, MutableMap.of("foo", "bar", "v", 12));
+        });
+    }
+
     @Test(groups="Integration") // because delay
     public void testWorkflowPolicyPeriod() throws Exception {
         doTestWorkflowPolicy("period: 2s", Duration.seconds(2)::isShorterThan);
@@ -280,6 +300,10 @@ public class WorkflowYamlTest extends AbstractYamlTest {
     }
 
     public void doTestWorkflowPolicy(String triggers, Predicate<Duration> timeCheckOrNullIfShouldFail) throws Exception {
+        doTestWorkflowPolicy(triggers, timeCheckOrNullIfShouldFail, null);
+    }
+
+    public void doTestWorkflowPolicy(String triggers, Predicate<Duration> timeCheckOrNullIfShouldFail, Consumer<Policy> extraChecks) throws Exception {
         Entity app = createAndStartApplication(
                 "services:",
                 "- type: " + BasicEntity.class.getName(),
@@ -321,7 +345,7 @@ public class WorkflowYamlTest extends AbstractYamlTest {
 //            EntityAsserts.assertAttributeEqualsEventually(entity, s, MutableMap.of("foo", "bar", "v", 0));
 
             entity.sensors().set(Sensors.newStringSensor("theTrigger"), "go");
-            EntityAsserts.assertAttributeEqualsEventually(entity, MY_WORKFLOW_SENSOR, MutableMap.of("foo", "bar", "v", 0));
+            EntityAsserts.assertAttributeEqualsEventually(MutableMap.of("timeout", "5s"), entity, MY_WORKFLOW_SENSOR, MutableMap.of("foo", "bar", "v", 0));
 //            EntityAsserts.assertAttributeEqualsEventually(entity, s, MutableMap.of("foo", "bar", "v", 1));
             Duration d3 = Duration.of(sw).subtract(d2);
             // the next iteration should obey the time constraint specified above
@@ -329,6 +353,8 @@ public class WorkflowYamlTest extends AbstractYamlTest {
         } else {
             EntityAsserts.assertAttributeEqualsContinually(entity, MY_WORKFLOW_SENSOR, null);
         }
+
+        if (extraChecks!=null) extraChecks.accept(policy);
     }
 
     ClassLogWatcher lastLogWatcher;
diff --git a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java
index 037bd1e555..9acd3f8a89 100644
--- a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java
+++ b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java
@@ -147,9 +147,9 @@ public class WorkflowPolicy<T> extends AbstractPolicy {
 
     @Override
     public void resume() {
-        boolean wasSuspended = isSuspended();
+        boolean needsStarting = !poller.isRunning() || isSuspended();
         super.resume();
-        if (!wasSuspended) poller.start();
+        if (needsStarting) poller.start();
     }
 
 }


[brooklyn-server] 05/05: more logging for stack traces returned in tasks

Posted by he...@apache.org.
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 c7a4472028e1744925a11aba5530caf9bdb53735
Author: Alex Heneveld <al...@cloudsoft.io>
AuthorDate: Wed Mar 29 16:45:12 2023 +0100

    more logging for stack traces returned in tasks
---
 core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java
index 44d380fa30..467cb188cf 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java
@@ -863,9 +863,9 @@ public class BasicTask<T> implements TaskInternal<T> {
                         if (isCancelled && sws.contains(BasicTask.class.getName() + "." + "computeStatusStringError")) {
                             // don't add the cancellation exception generated by this call
                         } else {
-                            if (sws.length() > 80 * 100) {
+                            if (sws.length() > 160 * 100) {
                                 // shorten a bit, if long; esp if there is a circular reference
-                                loggedLongStack = sws.substring(0, 40 * 100) + "\n  ...\n  ..." + sws.substring(sws.length() - 40 * 100);
+                                loggedLongStack = sws.substring(0, 80 * 100) + "\n  ...\n  ..." + sws.substring(sws.length() - 80 * 100);
                                 log.warn("Long stack trace suppressed when reporting status of task " + getId() + ":\n" + sws);
                                 data.multiLineData.add(loggedLongStack);
                             } else {


[brooklyn-server] 04/05: prevent failure in formatString if an entry is null (was using guava list)

Posted by he...@apache.org.
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 aa0bbf3038ea22c1c2b145c550c8bb530b20ed14
Author: Alex Heneveld <al...@cloudsoft.io>
AuthorDate: Wed Mar 29 16:44:48 2023 +0100

    prevent failure in formatString if an entry is null (was using guava list)
---
 .../java/org/apache/brooklyn/core/sensor/DependentConfiguration.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/DependentConfiguration.java b/core/src/main/java/org/apache/brooklyn/core/sensor/DependentConfiguration.java
index 0e1a22ab83..731a0eff25 100644
--- a/core/src/main/java/org/apache/brooklyn/core/sensor/DependentConfiguration.java
+++ b/core/src/main/java/org/apache/brooklyn/core/sensor/DependentConfiguration.java
@@ -487,7 +487,7 @@ public class DependentConfiguration {
                 @Override
                 @Nullable
                 public T apply(@Nullable U input) {
-                    return transformer.apply(ImmutableList.of(input));
+                    return transformer.apply(MutableList.of(input).asUnmodifiable());
                 }
             });
         }


[brooklyn-server] 02/05: more workflow policy fix+test - don't fail on destroy

Posted by he...@apache.org.
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 86cb48ce1c99c89e1f25a9535baa06c19da6f53d
Author: Alex Heneveld <al...@cloudsoft.io>
AuthorDate: Wed Mar 29 16:45:23 2023 +0100

    more workflow policy fix+test - don't fail on destroy
    
    (even if already suspended)
---
 .../java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java    | 6 ++++++
 .../main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java
index 888433ba0e..5052f7a69b 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java
@@ -227,6 +227,12 @@ public class WorkflowYamlTest extends AbstractYamlTest {
             policy.resume();
             entity.sensors().set(Sensors.newStringSensor("theTrigger"), "go4");
             EntityAsserts.assertAttributeEqualsEventually(MutableMap.of("timeout", "3s"), entity, MY_WORKFLOW_SENSOR, MutableMap.of("foo", "bar", "v", 12));
+
+            entity.policies().remove(policy);
+            entity.sensors().set(Sensors.newStringSensor("theTrigger"), "go5");
+            Time.sleep(Duration.millis(100));
+            // not triggered
+            EntityAsserts.assertAttributeEquals(entity, MY_WORKFLOW_SENSOR, MutableMap.of("foo", "bar", "v", 12));
         });
     }
 
diff --git a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java
index 9acd3f8a89..3eadfd568d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java
+++ b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java
@@ -142,7 +142,7 @@ public class WorkflowPolicy<T> extends AbstractPolicy {
     public void suspend() {
         super.suspend();
 
-        poller.stop();
+        if (poller.isRunning()) poller.stop();
     }
 
     @Override


[brooklyn-server] 03/05: clean up provisioned location on software process entities

Posted by he...@apache.org.
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 13c64f39c50b05e08290c2c8efd139e8f4e750b2
Author: Alex Heneveld <al...@cloudsoft.io>
AuthorDate: Wed Mar 29 16:28:18 2023 +0100

    clean up provisioned location on software process entities
    
    prevent dangling reference to removed location
---
 .../software/base/lifecycle/MachineLifecycleEffectorTasks.java     | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java
index b63f6e08a0..fb813be22a 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java
@@ -1173,6 +1173,13 @@ public abstract class MachineLifecycleEffectorTasks {
     }
     protected void clearEntityLocationAttributes(Location machine, boolean removeLocation) {
         if (removeLocation) entity().removeLocations(ImmutableList.of(machine));
+
+        MachineProvisioningLocation oldProvisioningLocation = entity().sensors().get(SoftwareProcess.PROVISIONING_LOCATION);
+        if (oldProvisioningLocation!=null && !Locations.isManaged(oldProvisioningLocation)) {
+            // clear it if it has been unmanaged, to prevent rebind dangles
+            entity().sensors().set(SoftwareProcess.PROVISIONING_LOCATION, null);
+        }
+
         entity().sensors().set(Attributes.HOSTNAME, null);
         entity().sensors().set(Attributes.ADDRESS, null);
         entity().sensors().set(Attributes.SUBNET_HOSTNAME, null);