fix async delay for initializer, and intermittent failing test
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 f69138a..f5d93fb 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
@@ -1000,9 +1000,6 @@
}
@Test
- // non-deterministic failure seen once:
- // testInitializerDelay:1031 failed succeeds-eventually, 75 attempts, 30000ms elapsed:
- // AssertionError: entity=BasicEntityImpl{id=v65dmc7x81}; attribute=Sensor: x (java.lang.Integer) expected [6] but found [3]
public void testInitializerDelay() throws Exception {
Entity app = createAndStartApplication(
"services:",
@@ -1020,6 +1017,7 @@
" brooklyn.config:",
" name: pre-init",
" steps:",
+ //" - sleep 1s", // to check that 'async' really does always wait
" - set-sensor integer x = 3");
waitForApplicationTasks(app);
Entity entity = Iterables.getOnlyElement(app.getChildren());
diff --git a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowInitializer.java b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowInitializer.java
index 5c1c82b..0e80227 100644
--- a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowInitializer.java
+++ b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowInitializer.java
@@ -35,6 +35,7 @@
import org.apache.brooklyn.util.core.task.Tasks;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.guava.Maybe;
+import org.apache.brooklyn.util.repeat.Repeater;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Duration;
import org.apache.brooklyn.util.time.Time;
@@ -101,6 +102,12 @@
if (delayed) {
DynamicTasks.queue(Tasks.create("Delaying until " + delaySummary, () -> {
((EntityInternal) entity).getManagementContext().waitForManagementStartupComplete(null);
+ while (!Entities.isManagedActive(entity)) {
+ if (!Entities.isManagedActiveOrComingUp(entity)) {
+ return;
+ }
+ Time.sleep(Repeater.DEFAULT_REAL_QUICK_PERIOD);
+ }
if (delayDuration.isPositive()) Time.sleep(delayDuration);
}));
}