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 2017/10/06 08:06:35 UTC
[11/23] brooklyn-server git commit: task visibility: ensure all tasks
have a name, updating exec.submit() methods to take name
task visibility: ensure all tasks have a name, updating exec.submit() methods to take name
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/79cc9bcc
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/79cc9bcc
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/79cc9bcc
Branch: refs/heads/master
Commit: 79cc9bccf0ca80816ecd09846ec385d5cad3fbf8
Parents: aeecd3e
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Wed Sep 20 10:09:05 2017 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Sep 20 10:10:25 2017 +0100
----------------------------------------------------------------------
.../brooklyn/api/mgmt/ExecutionContext.java | 17 +++-
.../brooklyn/api/mgmt/ExecutionManager.java | 14 ++-
.../camp/brooklyn/ConfigParametersYamlTest.java | 13 ++-
.../brooklyn/camp/brooklyn/spi/dsl/DslTest.java | 4 +-
.../core/mgmt/rebind/RebindManagerImpl.java | 10 +--
.../core/task/AbstractExecutionContext.java | 10 ++-
.../util/core/task/BasicExecutionContext.java | 5 ++
.../util/core/task/BasicExecutionManager.java | 8 +-
.../core/config/DeferredConfigTest.java | 8 +-
.../entity/ApplicationLifecycleStateTest.java | 18 ++--
.../brooklyn/core/entity/EntityAssertsTest.java | 92 ++++---------------
.../mgmt/persist/XmlMementoSerializerTest.java | 2 +-
.../qa/performance/TaskPerformanceTest.java | 6 +-
.../ssh/SshMachineLocationIntegrationTest.java | 6 +-
.../location/ssh/SshMachineLocationTest.java | 12 +--
.../util/core/task/TaskPredicatesTest.java | 5 +-
.../util/core/task/ValueResolverTest.java | 93 +++++++++++++++++---
.../brooklyn/policy/ha/ServiceReplacer.java | 6 +-
.../brooklyn/policy/ha/ServiceRestarter.java | 4 +-
.../rest/resources/SensorResourceTest.java | 2 +-
.../entity/brooklynnode/BrooklynNodeImpl.java | 12 +--
21 files changed, 178 insertions(+), 169 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/api/src/main/java/org/apache/brooklyn/api/mgmt/ExecutionContext.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/mgmt/ExecutionContext.java b/api/src/main/java/org/apache/brooklyn/api/mgmt/ExecutionContext.java
index 142e664..c940ca0 100644
--- a/api/src/main/java/org/apache/brooklyn/api/mgmt/ExecutionContext.java
+++ b/api/src/main/java/org/apache/brooklyn/api/mgmt/ExecutionContext.java
@@ -52,12 +52,22 @@ public interface ExecutionContext extends Executor {
*/
<T> Task<T> submit(Map<?,?> properties, Callable<T> callable);
- /** {@link ExecutionManager#submit(Runnable) */
+ /** {@link ExecutionManager#submit(Runnable)
+ * @deprecated since 0.12.0 pass a display name or a more detailed map */
+ @Deprecated
Task<?> submit(Runnable runnable);
- /** {@link ExecutionManager#submit(Callable) */
+ /** {@link ExecutionManager#submit(Callable)
+ * @deprecated since 0.12.0 pass a display name or a more detailed map */
+ @Deprecated
<T> Task<T> submit(Callable<T> callable);
+ /** {@link ExecutionManager#submit(String Runnable) */
+ Task<?> submit(String displayName, Runnable runnable);
+
+ /** {@link ExecutionManager#submit(String, Callable) */
+ <T> Task<T> submit(String displayName, Callable<T> callable);
+
/** See {@link ExecutionManager#submit(Map, TaskAdaptable)}. */
<T> Task<T> submit(TaskAdaptable<T> task);
@@ -80,6 +90,9 @@ public interface ExecutionContext extends Executor {
// TODO reference ImmediateSupplier when that class is moved to utils project
@Beta
<T> Maybe<T> getImmediately(Object callableOrSupplierOrTask);
+ /** As {@link #getImmediately(Object)} but strongly typed for a task. */
+ @Beta
+ <T> Maybe<T> getImmediately(Task<T> callableOrSupplierOrTask);
/**
* Efficient shortcut for {@link #submit(TaskAdaptable)} followed by an immediate {@link Task#get()}.
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/api/src/main/java/org/apache/brooklyn/api/mgmt/ExecutionManager.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/mgmt/ExecutionManager.java b/api/src/main/java/org/apache/brooklyn/api/mgmt/ExecutionManager.java
index 97108ab..d4d1db4 100644
--- a/api/src/main/java/org/apache/brooklyn/api/mgmt/ExecutionManager.java
+++ b/api/src/main/java/org/apache/brooklyn/api/mgmt/ExecutionManager.java
@@ -79,11 +79,21 @@ public interface ExecutionManager {
// /** returns all tasks known to this manager (immutable) */
// public Set<Task<?>> getAllTasks();
- /** see {@link #submit(Map, TaskAdaptable)} */
+ /** see {@link #submit(Map, TaskAdaptable)}
+ * @deprecated since 0.12.0 pass displayName or map */
+ @Deprecated
public Task<?> submit(Runnable r);
+ /** see {@link #submit(Map, TaskAdaptable)}
+ * @deprecated since 0.12.0 pass displayName or map */
+ @Deprecated
+ public <T> Task<T> submit(Callable<T> r);
+
+ /** see {@link #submit(Map, TaskAdaptable)} */
+ public Task<?> submit(String displayName, Runnable c);
+
/** see {@link #submit(Map, TaskAdaptable)} */
- public <T> Task<T> submit(Callable<T> c);
+ public <T> Task<T> submit(String displayName, Callable<T> c);
/** see {@link #submit(Map, TaskAdaptable)} */
public <T> Task<T> submit(TaskAdaptable<T> task);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ConfigParametersYamlTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ConfigParametersYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ConfigParametersYamlTest.java
index 98ccb0b..3840e2d 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ConfigParametersYamlTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ConfigParametersYamlTest.java
@@ -934,13 +934,12 @@ public class ConfigParametersYamlTest extends AbstractYamlRebindTest {
Entity app = createStartWaitAndLogApplication(yaml);
final TestEntity entity1 = (TestEntity) Iterables.getOnlyElement(app.getChildren());
- TestEntity entity2 = entity1.getExecutionContext().submit(new Callable<TestEntity>() {
- public TestEntity call() {
- TestEntity entity2 = entity1.addChild(EntitySpec.create(TestEntity.class));
- entity2.start(Collections.<Location>emptyList());
- return entity2;
- }
- }).get();
+ TestEntity entity2 = entity1.getExecutionContext().submit("create and start", () -> {
+ TestEntity entity2i = entity1.addChild(EntitySpec.create(TestEntity.class));
+ entity2i.start(Collections.<Location>emptyList());
+ return entity2i;
+ })
+ .get();
Entities.dumpInfo(app);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/DslTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/DslTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/DslTest.java
index 63aba8e..04b6bf1 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/DslTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/DslTest.java
@@ -327,7 +327,7 @@ public class DslTest extends BrooklynAppUnitTestSupport {
protected void runConcurrentWorker(Supplier<Runnable> taskSupplier) {
Collection<Task<?>> results = new ArrayList<>();
for (int i = 0; i < MAX_PARALLEL_RESOLVERS; i++) {
- Task<?> result = app.getExecutionContext().submit(taskSupplier.get());
+ Task<?> result = app.getExecutionContext().submit("parallel "+i, taskSupplier.get());
results.add(result);
}
for (Task<?> result : results) {
@@ -550,7 +550,7 @@ public class DslTest extends BrooklynAppUnitTestSupport {
}
};
if (execInTask) {
- Task<Maybe<?>> task = ((EntityInternal)context).getExecutionContext().submit(job);
+ Task<Maybe<?>> task = ((EntityInternal)context).getExecutionContext().submit("Resolving DSL for test: "+dsl, job);
task.get(Asserts.DEFAULT_LONG_TIMEOUT);
assertTrue(task.isDone());
return task.get();
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerImpl.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerImpl.java
index d896376..381fee8 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerImpl.java
@@ -520,15 +520,7 @@ public class RebindManagerImpl implements RebindManager {
ExecutionContext ec = BasicExecutionContext.getCurrentExecutionContext();
if (ec == null) {
ec = managementContext.getServerExecutionContext();
- Task<List<Application>> task = ec.submit(new Callable<List<Application>>() {
- @Override public List<Application> call() throws Exception {
- return rebindImpl(classLoader, exceptionHandler, mode);
- }});
- try {
- return task.get();
- } catch (Exception e) {
- throw Exceptions.propagate(e);
- }
+ return ec.get(Tasks.<List<Application>>builder().displayName("rebind").dynamic(false).body(() -> rebindImpl(classLoader, exceptionHandler, mode)).build());
} else {
return rebindImpl(classLoader, exceptionHandler, mode);
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/core/src/main/java/org/apache/brooklyn/util/core/task/AbstractExecutionContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/AbstractExecutionContext.java b/core/src/main/java/org/apache/brooklyn/util/core/task/AbstractExecutionContext.java
index e7debb9..424bbfc 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/AbstractExecutionContext.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/AbstractExecutionContext.java
@@ -25,6 +25,7 @@ import org.apache.brooklyn.api.mgmt.ExecutionContext;
import org.apache.brooklyn.api.mgmt.ExecutionManager;
import org.apache.brooklyn.api.mgmt.Task;
import org.apache.brooklyn.api.mgmt.TaskAdaptable;
+import org.apache.brooklyn.util.collections.MutableMap;
import com.google.common.collect.Maps;
@@ -41,11 +42,16 @@ public abstract class AbstractExecutionContext implements ExecutionContext {
public Task<?> submit(Map<?,?> properties, Runnable runnable) { return submitInternal(properties, runnable); }
/** @see #submit(Map, Runnable) */
- @Override
+ @Override
+ public Task<?> submit(String displayName, Runnable runnable) { return submitInternal(MutableMap.of("displayName", displayName), runnable); }
+ @Override @Deprecated
public Task<?> submit(Runnable runnable) { return submitInternal(Maps.newLinkedHashMap(), runnable); }
+
/** @see #submit(Map, Runnable) */
- @Override
+ @Override
+ public <T> Task<T> submit(String displayName, Callable<T> callable) { return submitInternal(MutableMap.of("displayName", displayName), callable); }
+ @Override @Deprecated
public <T> Task<T> submit(Callable<T> callable) { return submitInternal(Maps.newLinkedHashMap(), callable); }
/** @see #submit(Map, Runnable) */
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
index 1b85663..1236219 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
@@ -239,6 +239,11 @@ public class BasicExecutionContext extends AbstractExecutionContext {
}
}
+ @Override
+ public <T> Maybe<T> getImmediately(Task<T> callableOrSupplier) {
+ return getImmediately((Object) callableOrSupplier);
+ }
+
/** performs execution without spawning a new task thread, though it does temporarily set a fake task for the purpose of getting context;
* currently supports {@link Supplier}, {@link Callable}, {@link Runnable}, or {@link Task} instances;
* with tasks if it is submitted or in progress,
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java
index 46e501e8..e85bf2f 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java
@@ -57,7 +57,7 @@ import org.apache.brooklyn.core.config.Sanitizer;
import org.apache.brooklyn.core.entity.Entities;
import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
import org.apache.brooklyn.util.collections.MutableList;
-import org.apache.brooklyn.util.collections.MutableSet;
+import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.task.TaskInternal.TaskCancellationMode;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.exceptions.RuntimeInterruptedException;
@@ -388,10 +388,12 @@ public class BasicExecutionManager implements ExecutionManager {
}
}
- @Override public Task<?> submit(Runnable r) { return submit(new LinkedHashMap<Object,Object>(1), r); }
+ @Override @Deprecated public Task<?> submit(Runnable r) { return submit(new LinkedHashMap<Object,Object>(1), r); }
+ @Override public Task<?> submit(String displayName, Runnable r) { return submit(MutableMap.of("displayName", displayName), r); }
@Override public Task<?> submit(Map<?,?> flags, Runnable r) { return submit(flags, new BasicTask<Void>(flags, r)); }
- @Override public <T> Task<T> submit(Callable<T> c) { return submit(new LinkedHashMap<Object,Object>(1), c); }
+ @Override @Deprecated public <T> Task<T> submit(Callable<T> c) { return submit(new LinkedHashMap<Object,Object>(1), c); }
+ @Override public <T> Task<T> submit(String displayName, Callable<T> c) { return submit(MutableMap.of("displayName", displayName), c); }
@Override public <T> Task<T> submit(Map<?,?> flags, Callable<T> c) { return submit(flags, new BasicTask<T>(flags, c)); }
@Override public <T> Task<T> submit(TaskAdaptable<T> t) { return submit(new LinkedHashMap<Object,Object>(1), t); }
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/core/src/test/java/org/apache/brooklyn/core/config/DeferredConfigTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/config/DeferredConfigTest.java b/core/src/test/java/org/apache/brooklyn/core/config/DeferredConfigTest.java
index 9decca8..c2cf908 100644
--- a/core/src/test/java/org/apache/brooklyn/core/config/DeferredConfigTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/config/DeferredConfigTest.java
@@ -21,7 +21,6 @@ package org.apache.brooklyn.core.config;
import static org.testng.Assert.assertEquals;
import java.util.List;
-import java.util.concurrent.Callable;
import org.apache.brooklyn.api.mgmt.Task;
import org.apache.brooklyn.api.sensor.Sensor;
@@ -55,13 +54,10 @@ public class DeferredConfigTest extends BrooklynAppUnitTestSupport {
void doTestDeferredConfigInList(final boolean delay) throws Exception {
// Simulate a deferred value
- Task<Sensor<?>> sensorFuture = app.getExecutionContext().submit(new Callable<Sensor<?>>() {
- @Override
- public Sensor<?> call() throws Exception {
+ Task<Sensor<?>> sensorFuture = app.getExecutionContext().submit("deferred return sensor", () -> {
if (delay) Time.sleep(Duration.FIVE_SECONDS);
return TestApplication.MY_ATTRIBUTE;
- }
- });
+ });
app.config().set(SENSORS_UNTYPED, (Object)ImmutableList.of(sensorFuture));
if (!delay) sensorFuture.get(Duration.ONE_SECOND);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLifecycleStateTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLifecycleStateTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLifecycleStateTest.java
index e8a3eee..f301b3c 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLifecycleStateTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLifecycleStateTest.java
@@ -267,20 +267,14 @@ public class ApplicationLifecycleStateTest extends BrooklynMgmtUnitTestSupport {
}
});
- Task<?> first = mgmt.getExecutionManager().submit(new Runnable() {
- @Override
- public void run() {
+ Task<?> first = mgmt.getExecutionManager().submit("setting test sensor", () -> {
app.sensors().set(TEST_SENSOR, "first");
log.debug("set first");
- }
- });
- Task<?> second = mgmt.getExecutionManager().submit(new Runnable() {
- @Override
- public void run() {
+ });
+ Task<?> second = mgmt.getExecutionManager().submit("setting test sensor", () -> {
app.sensors().set(TEST_SENSOR, "second");
log.debug("set second");
- }
- });
+ });
first.blockUntilEnded();
second.blockUntilEnded();
@@ -394,8 +388,8 @@ public class ApplicationLifecycleStateTest extends BrooklynMgmtUnitTestSupport {
};
// Simulates firing the emit method from event handlers in different threads
- mgmt.getExecutionManager().submit(overrideJob);
- mgmt.getExecutionManager().submit(overrideJob);
+ mgmt.getExecutionManager().submit("emitting test sensor", overrideJob);
+ mgmt.getExecutionManager().submit("emitting test sensor", overrideJob);
Asserts.eventually(Suppliers.ofInstance(seenValues), CollectionFunctionals.sizeEquals(2));
Asserts.succeedsContinually(new Runnable() {
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/core/src/test/java/org/apache/brooklyn/core/entity/EntityAssertsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/EntityAssertsTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/EntityAssertsTest.java
index bfdac3c..3160518 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/EntityAssertsTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/EntityAssertsTest.java
@@ -18,7 +18,6 @@
*/
package org.apache.brooklyn.core.entity;
-import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
@@ -33,7 +32,6 @@ import org.apache.brooklyn.util.time.Duration;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
@@ -85,12 +83,7 @@ public class EntityAssertsTest extends BrooklynAppUnitTestSupport {
entity.sensors().set(TestEntity.NAME, "before");
final String after = "after";
- Task<?> assertValue = entity.getExecutionContext().submit(new Runnable() {
- @Override
- public void run() {
- EntityAsserts.assertAttributeEqualsEventually(entity, TestEntity.NAME, after);
- }
- });
+ Task<?> assertValue = entity.getExecutionContext().submit("assert attr equals", () -> EntityAsserts.assertAttributeEqualsEventually(entity, TestEntity.NAME, after));
entity.sensors().set(TestEntity.NAME, after);
assertValue.get();
}
@@ -105,12 +98,7 @@ public class EntityAssertsTest extends BrooklynAppUnitTestSupport {
@Test
public void shouldAssertAttributeEventuallyNonNull() throws Exception {
EntityAsserts.assertAttributeEquals(entity, TestEntity.NAME, null);
- Task<?> assertValue = entity.getExecutionContext().submit(new Runnable() {
- @Override
- public void run() {
- EntityAsserts.assertAttributeEventuallyNonNull(entity, TestEntity.NAME);
- }
- });
+ Task<?> assertValue = entity.getExecutionContext().submit("assert attr non-null", () -> EntityAsserts.assertAttributeEventuallyNonNull(entity, TestEntity.NAME));
entity.sensors().set(TestEntity.NAME, "something");
assertValue.get();
}
@@ -118,18 +106,11 @@ public class EntityAssertsTest extends BrooklynAppUnitTestSupport {
@Test
public void shouldAssertAttributeEventually() throws Exception {
final CountDownLatch eventuallyEntered = new CountDownLatch(2);
- Task<?> assertValue = entity.getExecutionContext().submit(new Runnable() {
- @Override
- public void run() {
- EntityAsserts.assertAttributeEventually(entity, TestEntity.NAME, new Predicate<String>() {
- @Override
- public boolean apply(String input) {
- eventuallyEntered.countDown();
- return input.matches(".*\\d+");
- }
- });
- }
- });
+ Task<?> assertValue = entity.getExecutionContext().submit("assert attribute", () -> EntityAsserts.assertAttributeEventually(entity, TestEntity.NAME,
+ (input) -> {
+ eventuallyEntered.countDown();
+ return input.matches(".*\\d+");
+ }) );
eventuallyEntered.await();
entity.sensors().set(TestEntity.NAME, "testing testing 123");
assertValue.get();
@@ -146,18 +127,11 @@ public class EntityAssertsTest extends BrooklynAppUnitTestSupport {
public void shouldAssertPredicateEventuallyTrue() throws Exception {
final int testVal = 987654321;
final CountDownLatch eventuallyEntered = new CountDownLatch(2);
- Task<?> assertValue = entity.getExecutionContext().submit(new Runnable() {
- @Override
- public void run() {
- EntityAsserts.assertPredicateEventuallyTrue(entity, new Predicate<TestEntity>() {
- @Override
- public boolean apply(TestEntity input) {
- eventuallyEntered.countDown();
- return testVal == input.getSequenceValue();
- }
- });
- }
- });
+ Task<?> assertValue = entity.getExecutionContext().submit("assert predicate", () -> EntityAsserts.assertPredicateEventuallyTrue(entity,
+ (input) -> {
+ eventuallyEntered.countDown();
+ return testVal == input.getSequenceValue();
+ }));
eventuallyEntered.await();
entity.setSequenceValue(testVal);
assertValue.get();
@@ -175,12 +149,7 @@ public class EntityAssertsTest extends BrooklynAppUnitTestSupport {
public void shouldFailAssertAttributeEqualsContinually() throws Throwable {
final String myName = "myname";
entity.sensors().set(TestEntity.NAME, myName);
- Task<?> assertValue = entity.getExecutionContext().submit(new Runnable() {
- @Override
- public void run() {
- EntityAsserts.assertAttributeEqualsContinually(entity, TestEntity.NAME, myName);
- }
- });
+ Task<?> assertValue = entity.getExecutionContext().submit("check attr equals", () -> EntityAsserts.assertAttributeEqualsContinually(entity, TestEntity.NAME, myName));
entity.sensors().set(TestEntity.NAME, "something");
try {
assertValue.get();
@@ -199,20 +168,10 @@ public class EntityAssertsTest extends BrooklynAppUnitTestSupport {
app.createAndManageChild(stooge);
app.createAndManageChild(stooge);
- Task<?> assertValue1 = entity.getExecutionContext().submit(new Runnable() {
- @Override
- public void run() {
- EntityAsserts.assertGroupSizeEqualsEventually(ImmutableMap.of("timeout", "2s"), stooges, 3);
- }
- });
+ Task<?> assertValue1 = entity.getExecutionContext().submit("assert size", () -> EntityAsserts.assertGroupSizeEqualsEventually(ImmutableMap.of("timeout", "2s"), stooges, 3));
stooges.setEntityFilter(EntityPredicates.configEqualTo(TestEntity.CONF_NAME, STOOGE));
assertValue1.get();
- Task<?> assertValue2 = entity.getExecutionContext().submit(new Runnable() {
- @Override
- public void run() {
- EntityAsserts.assertGroupSizeEqualsEventually(stooges, 0);
- }
- });
+ Task<?> assertValue2 = entity.getExecutionContext().submit("assert size 0", () -> EntityAsserts.assertGroupSizeEqualsEventually(stooges, 0));
stooges.setEntityFilter(EntityPredicates.configEqualTo(TestEntity.CONF_NAME, "Marx Brother"));
assertValue2.get();
}
@@ -220,24 +179,11 @@ public class EntityAssertsTest extends BrooklynAppUnitTestSupport {
@Test
public void shouldAssertAttributeChangesEventually () throws Exception{
entity.sensors().set(TestEntity.NAME, "before");
- final Task<?> assertValue = entity.getExecutionContext().submit(new Runnable() {
- @Override
- public void run() {
- EntityAsserts.assertAttributeChangesEventually(entity, TestEntity.NAME);
- }
- });
+ final Task<?> assertValue = entity.getExecutionContext().submit("check attr change", () -> EntityAsserts.assertAttributeChangesEventually(entity, TestEntity.NAME));
Repeater.create()
- .repeat(new Runnable() {
- @Override
- public void run() {
- entity.sensors().set(TestEntity.NAME, "after" + System.currentTimeMillis());
- }
- }).until(new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- return assertValue.isDone();
- }
- }).every(Duration.millis(10))
+ .repeat(() -> entity.sensors().set(TestEntity.NAME, "after" + System.currentTimeMillis()))
+ .until(() -> assertValue.isDone())
+ .every(Duration.millis(10))
.run();
assertValue.get();
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java
index 59ea8f2..88082ff 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java
@@ -611,7 +611,7 @@ public class XmlMementoSerializerTest {
public void testTask() throws Exception {
final TestApplication app = TestApplication.Factory.newManagedInstanceForTests();
mgmt = app.getManagementContext();
- Task<String> completedTask = app.getExecutionContext().submit(Callables.returning("myval"));
+ Task<String> completedTask = app.getExecutionContext().submit("return myval", Callables.returning("myval"));
completedTask.get();
String loggerName = UnwantedStateLoggingMapper.class.getName();
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/TaskPerformanceTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/TaskPerformanceTest.java b/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/TaskPerformanceTest.java
index a7a531b..949f139 100644
--- a/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/TaskPerformanceTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/test/qa/performance/TaskPerformanceTest.java
@@ -74,11 +74,7 @@ public class TaskPerformanceTest extends AbstractPerformanceTest {
.summary("TaskPerformanceTest.testExecuteSimplestRunnable")
.iterations(numIterations)
.minAcceptablePerSecond(minRatePerSec)
- .job(new Runnable() {
- @Override
- public void run() {
- executionManager.submit(work);
- }})
+ .job(() -> executionManager.submit("inner", work))
.completionLatch(completionLatch));
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationIntegrationTest.java b/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationIntegrationTest.java
index 9ff39c1..e648c32 100644
--- a/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationIntegrationTest.java
+++ b/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationIntegrationTest.java
@@ -123,11 +123,7 @@ public class SshMachineLocationIntegrationTest extends SshMachineLocationTest {
BasicExecutionManager execManager = new BasicExecutionManager("mycontextid");
BasicExecutionContext execContext = new BasicExecutionContext(execManager);
try {
- MachineDetails details = execContext.submit(new Callable<MachineDetails>() {
- @Override
- public MachineDetails call() {
- return host.getMachineDetails();
- }}).get();
+ MachineDetails details = execContext.submit("get details", () -> host.getMachineDetails()).get();
LOG.info("machineDetails="+details);
assertNotNull(details);
} finally {
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java b/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java
index 5c6e918..d25991c 100644
--- a/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java
+++ b/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java
@@ -131,11 +131,7 @@ public class SshMachineLocationTest extends BrooklynAppUnitTestSupport {
BasicExecutionManager execManager = new BasicExecutionManager("mycontextid");
BasicExecutionContext execContext = new BasicExecutionContext(execManager);
try {
- MachineDetails details = execContext.submit(new Callable<MachineDetails>() {
- @Override
- public MachineDetails call() {
- return host.getMachineDetails();
- }}).get();
+ MachineDetails details = execContext.submit("get details", () -> host.getMachineDetails()).get();
LOG.info("machineDetails="+details);
assertNotNull(details);
@@ -166,11 +162,7 @@ public class SshMachineLocationTest extends BrooklynAppUnitTestSupport {
BasicExecutionManager execManager = new BasicExecutionManager("mycontextid");
BasicExecutionContext execContext = new BasicExecutionContext(execManager);
try {
- MachineDetails details = execContext.submit(new Callable<MachineDetails>() {
- @Override
- public MachineDetails call() {
- return host.getMachineDetails();
- }}).get();
+ MachineDetails details = execContext.submit("get details", () -> host.getMachineDetails()).get();
LOG.info("machineDetails="+details);
assertNotNull(details);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/core/src/test/java/org/apache/brooklyn/util/core/task/TaskPredicatesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/task/TaskPredicatesTest.java b/core/src/test/java/org/apache/brooklyn/util/core/task/TaskPredicatesTest.java
index 90d6b06..2656c80 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/task/TaskPredicatesTest.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/task/TaskPredicatesTest.java
@@ -82,14 +82,13 @@ public class TaskPredicatesTest extends BrooklynAppUnitTestSupport {
@Test
public void testIsDone() throws Exception {
CountDownLatch latch = new CountDownLatch(1);
- Task<?> task = app.getExecutionContext().submit(new Runnable() {
- public void run() {
+ Task<?> task = app.getExecutionContext().submit("await latch", () -> {
try {
latch.await();
} catch (InterruptedException e) {
throw Exceptions.propagate(e);
}
- }});
+ });
assertFalse(TaskPredicates.isDone().apply(task));
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/core/src/test/java/org/apache/brooklyn/util/core/task/ValueResolverTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/task/ValueResolverTest.java b/core/src/test/java/org/apache/brooklyn/util/core/task/ValueResolverTest.java
index 1f5c754..455f8ad 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/task/ValueResolverTest.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/task/ValueResolverTest.java
@@ -24,6 +24,7 @@ import static org.testng.Assert.fail;
import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
import java.util.concurrent.Callable;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -87,19 +88,17 @@ public class ValueResolverTest extends BrooklynAppUnitTestSupport {
Assert.assertTrue(result.isAbsent(), "result="+result);
Exception exception = Maybe.getException(result);
- Assert.assertTrue(exception.toString().contains("no execution context available"), "exception="+exception);
+ Asserts.assertStringContains(exception.toString(), "no execution context available");
+
+ Asserts.assertThat(t, (tt) -> !tt.isBegun());
}
public void testUnsubmittedTaskWithExecutionContextExecutesAndReturns() {
final Task<String> t = newSleepTask(Duration.ZERO, "foo");
// Below, we call ValueResolver.getMaybe() in app's execution context. Therefore it will execute the task.
- Maybe<String> result = app.getExecutionContext()
- .submit(new Callable<Maybe<String> >() {
- @Override
- public Maybe<String> call() throws Exception {
- return Tasks.resolving(t).as(String.class).timeout(Asserts.DEFAULT_LONG_TIMEOUT).getMaybe();
- }})
+ Maybe<String> result = app.getExecutionContext()
+ .submit("resolving sleep task", () -> Tasks.resolving(t).as(String.class).timeout(Asserts.DEFAULT_LONG_TIMEOUT).getMaybe())
.getUnchecked();
Assert.assertEquals(result.get(), "foo");
@@ -110,17 +109,83 @@ public class ValueResolverTest extends BrooklynAppUnitTestSupport {
// Below, we call ValueResolver.getMaybe() in app's execution context. Therefore it will execute the task.
// However, it will quickly timeout as the task will not have completed.
- Maybe<String> result = app.getExecutionContext()
- .submit(new Callable<Maybe<String> >() {
- @Override
- public Maybe<String> call() throws Exception {
- return Tasks.resolving(t).as(String.class).timeout(Duration.ZERO).getMaybe();
- }})
+ Maybe<String> result = app.getExecutionContext()
+ .submit("resolving sleep task", () -> Tasks.resolving(t).as(String.class).timeout(Duration.ZERO).getMaybe())
.getUnchecked();
Assert.assertTrue(result.isAbsent(), "result="+result);
Exception exception = Maybe.getException(result);
Assert.assertTrue(exception.toString().contains("not completed when immediate completion requested"), "exception="+exception);
+
+ Asserts.eventually(() -> t, (tt) -> tt.isBegun(), Duration.TEN_SECONDS);
+ Asserts.assertThat(t, (tt) -> !tt.isDone());
+ }
+
+ public void testUnsubmittedTaskWithExecutionContextExecutesAndReturnsForeground() {
+ final Task<String> t = newSleepTask(Duration.ZERO, "foo");
+
+ // Below, we call ValueResolver.getMaybe() in app's execution context. Therefore it will execute the task.
+ Maybe<String> result = app.getExecutionContext()
+ .get(new BasicTask<>( () -> Tasks.resolving(t).as(String.class).timeout(Asserts.DEFAULT_LONG_TIMEOUT).getMaybe() ));
+
+ Assert.assertEquals(result.get(), "foo");
+ }
+
+ public void testUnsubmittedTaskWithExecutionContextExecutesAndTimesOutForeground() {
+ final Task<String> t = newSleepTask(Duration.ONE_MINUTE, "foo");
+
+ // Below, we call ValueResolver.getMaybe() in app's execution context. Therefore it will execute the task.
+ // However, it will quickly timeout as the task will not have completed.
+ Maybe<String> result = app.getExecutionContext()
+ .get(new BasicTask<>( () -> Tasks.resolving(t).as(String.class).timeout(Duration.ZERO).getMaybe() ));
+
+ Assert.assertTrue(result.isAbsent(), "result="+result);
+ Exception exception = Maybe.getException(result);
+ Assert.assertTrue(exception.toString().contains("not completed when immediate completion requested"), "exception="+exception);
+
+ Asserts.eventually(() -> t, (tt) -> tt.isBegun(), Duration.TEN_SECONDS);
+ Asserts.assertThat(t, (tt) -> !tt.isDone());
+ }
+
+ public void testUnsubmittedTaskWithExecutionContextTimesOutWhenImmediate() {
+ final Task<String> t = newSleepTask(Duration.ZERO, "foo");
+
+ // Below, we call ValueResolver.getMaybe() in app's execution context. Therefore it will execute the task
+ Maybe<Maybe<String>> result = app.getExecutionContext()
+ .getImmediately(new BasicTask<>( () -> Tasks.resolving(t).as(String.class).timeout(Asserts.DEFAULT_LONG_TIMEOUT).getMaybe() ));
+
+ // However, the resubmission will not be waited upon
+ Assert.assertTrue(result.isPresent(), "result="+result);
+ Assert.assertTrue(result.get().isAbsent(), "result="+result);
+ Exception exception = Maybe.getException(result.get());
+
+ Asserts.assertStringContainsIgnoreCase(exception.toString(), "immediate", "not", "available");
+
+ // But the underlying task is running
+ Asserts.eventually(() -> t, (tt) -> tt.isBegun(), Duration.TEN_SECONDS);
+ Asserts.eventually(() -> t, (tt) -> tt.isDone(), Duration.TEN_SECONDS);
+ Asserts.assertThat(t, (tt) -> Objects.equals(tt.getUnchecked(), "foo"));
+
+ // And subsequent get _is_ immediate
+ result = app.getExecutionContext()
+ .getImmediately(new BasicTask<>( () -> Tasks.resolving(t).as(String.class).timeout(Asserts.DEFAULT_LONG_TIMEOUT).getMaybe() ));
+ Assert.assertEquals(result.get().get(), "foo");
+ }
+
+ public void testUnsubmittedTaskWithExecutionContextExecutesAndTimesOutImmediate() {
+ final Task<String> t = newSleepTask(Duration.ONE_MINUTE, "foo");
+
+ // Below, we call ValueResolver.getMaybe() in app's execution context. Therefore it will execute the task.
+ // However, it will quickly timeout as the task will not have completed.
+ Maybe<Maybe<String>> result = app.getExecutionContext()
+ .getImmediately(new BasicTask<>( () -> Tasks.resolving(t).as(String.class).timeout(Duration.ZERO).getMaybe() ));
+
+ Assert.assertTrue(result.isPresent(), "result="+result);
+ Assert.assertTrue(result.get().isAbsent(), "result="+result);
+ Exception exception = Maybe.getException(result.get());
+ Asserts.assertStringContainsIgnoreCase(exception.toString(), "immediate", "not", "available");
+ Asserts.eventually(() -> t, (tt) -> tt.isBegun(), Duration.TEN_SECONDS);
+ Asserts.assertThat(t, (tt) -> !tt.isDone());
}
public void testSwallowError() {
@@ -161,7 +226,7 @@ public class ValueResolverTest extends BrooklynAppUnitTestSupport {
public void testGetImmediatelyInTask() throws Exception {
final MyImmediateAndDeferredSupplier supplier = new MyImmediateAndDeferredSupplier();
- Task<CallInfo> task = app.getExecutionContext().submit(new Callable<CallInfo>() {
+ Task<CallInfo> task = app.getExecutionContext().submit("test task for call stack", new Callable<CallInfo>() {
@Override
public CallInfo call() {
return myUniquelyNamedMethod();
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java b/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java
index e14433d..c799336 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java
@@ -129,7 +129,7 @@ public class ServiceReplacer extends AbstractPolicy {
if (isRunning()) {
highlightViolation("Failure detected");
LOG.warn("ServiceReplacer notified; dispatching job for "+entity+" ("+event.getValue()+")");
- getExecutionContext().submit(() -> onDetectedFailure(event));
+ getExecutionContext().submit("Analyzing detected failure", () -> onDetectedFailure(event));
} else {
LOG.warn("ServiceReplacer not running, so not acting on failure detected at "+entity+" ("+event.getValue()+", child of "+entity+")");
}
@@ -171,9 +171,9 @@ public class ServiceReplacer extends AbstractPolicy {
return;
}
- highlightViolation(violationText+", triggering restart");
+ highlightViolation(violationText+", triggering replacement");
LOG.warn("ServiceReplacer acting on failure detected at "+failedEntity+" ("+reason+", child of "+entity+")");
- Task<?> t = getExecutionContext().submit(() -> {
+ Task<?> t = getExecutionContext().submit("Replace member on failure", () -> {
try {
Entities.invokeEffectorWithArgs(entity, entity, MemberReplaceable.REPLACE_MEMBER, failedEntity.getId()).get();
consecutiveReplacementFailureTimes.clear();
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java b/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java
index a31e3c0..3c0341e 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java
@@ -29,14 +29,12 @@ import org.apache.brooklyn.api.sensor.SensorEventListener;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.config.ConfigKeys;
import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.entity.EntityInternal;
import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
import org.apache.brooklyn.core.entity.trait.Startable;
import org.apache.brooklyn.core.policy.AbstractPolicy;
import org.apache.brooklyn.core.sensor.BasicNotificationSensor;
import org.apache.brooklyn.policy.ha.HASensors.FailureDescriptor;
-import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.flags.SetFromFlag;
import org.apache.brooklyn.util.javalang.JavaClassNames;
import org.apache.brooklyn.util.time.Duration;
@@ -112,7 +110,7 @@ public class ServiceRestarter extends AbstractPolicy {
if (isRunning()) {
LOG.info("ServiceRestarter notified; dispatching job for "+entity+" ("+event.getValue()+")");
- getExecutionContext().submit(() -> onDetectedFailure(event));
+ getExecutionContext().submit("Analyzing detected failure", () -> onDetectedFailure(event));
} else {
LOG.warn("ServiceRestarter not running, so not acting on failure detected at "+entity+" ("+event.getValue()+")");
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/SensorResourceTest.java
----------------------------------------------------------------------
diff --git a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/SensorResourceTest.java b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/SensorResourceTest.java
index 391f2bb..e5fc5b2 100644
--- a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/SensorResourceTest.java
+++ b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/SensorResourceTest.java
@@ -325,7 +325,7 @@ public class SensorResourceTest extends BrooklynRestResourceTest {
@Test
public void testGetSensorValueOfTypeCompletedTask() throws Exception {
- Task<String> task = entity.getExecutionContext().submit(Callables.returning("myval"));
+ Task<String> task = entity.getExecutionContext().submit("returning myval", Callables.returning("myval"));
task.get();
entity.sensors().set(Sensors.newSensor(Task.class, "myTask"), task);
doGetSensorTest("myTask", String.class, "\"myval\"");
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/79cc9bcc/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
index 54c81d1..d6e3fce 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
@@ -50,32 +50,32 @@ import org.apache.brooklyn.entity.brooklynnode.EntityHttpClient.ResponseCodePred
import org.apache.brooklyn.entity.brooklynnode.effector.BrooklynNodeUpgradeEffectorBody;
import org.apache.brooklyn.entity.brooklynnode.effector.SetHighAvailabilityModeEffectorBody;
import org.apache.brooklyn.entity.brooklynnode.effector.SetHighAvailabilityPriorityEffectorBody;
-import org.apache.brooklyn.entity.software.base.SoftwareProcessImpl;
import org.apache.brooklyn.entity.software.base.SoftwareProcess.StopSoftwareParameters.StopMode;
+import org.apache.brooklyn.entity.software.base.SoftwareProcessImpl;
import org.apache.brooklyn.entity.software.base.lifecycle.MachineLifecycleEffectorTasks;
import org.apache.brooklyn.feed.http.HttpFeed;
import org.apache.brooklyn.feed.http.HttpPollConfig;
import org.apache.brooklyn.feed.http.HttpValueFunctions;
import org.apache.brooklyn.feed.http.JsonFunctions;
-import org.apache.http.HttpStatus;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.brooklyn.util.collections.Jsonya;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.apache.brooklyn.util.http.HttpToolResponse;
import org.apache.brooklyn.util.core.task.DynamicTasks;
import org.apache.brooklyn.util.core.task.TaskTags;
import org.apache.brooklyn.util.core.task.Tasks;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.exceptions.PropagatedRuntimeException;
import org.apache.brooklyn.util.guava.Functionals;
+import org.apache.brooklyn.util.http.HttpToolResponse;
import org.apache.brooklyn.util.javalang.Enums;
import org.apache.brooklyn.util.javalang.JavaClassNames;
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;
+import org.apache.http.HttpStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Functions;
@@ -222,7 +222,7 @@ public class BrooklynNodeImpl extends SoftwareProcessImpl implements BrooklynNod
// we could wait for BrooklynTaskTags.getTasksInEntityContext(ExecutionManager, this).isEmpty();
Task<?> stopEffectorTask = BrooklynTaskTags.getClosestEffectorTask(Tasks.current(), Startable.STOP);
Task<?> topEntityTask = getTopEntityTask(stopEffectorTask);
- getManagementContext().getExecutionManager().submit(new UnmanageTask(topEntityTask, this));
+ getManagementContext().getExecutionManager().submit("Unmanage Brooklyn entity after stop", new UnmanageTask(topEntityTask, this));
}
}