@Override public void onItemAdded(final Item item) { executor.submit(MutableMap.of("tag", delegate), new Runnable() { @Override public void run() { try { delegate.onItemAdded(item); } catch (Throwable t) { LOG.warn("Error notifying listener of itemAdded("+item+")", t); Exceptions.propagate(t); } } }); }
/** returns tasks started by this context (or tasks which have all the tags on this object) */ @Override public Set<Task<?>> getTasks() { return executionManager.getTasksWithAllTags(tags); }
@Override protected Task<?> customReadBody(String type, Map<Object, Object> values, JsonParser jp, DeserializationContext ctxt) throws IOException { return mgmt.getExecutionManager().getTask((String) values.get("id")); } }
@Override public boolean isShutdown() { return getExecutionManager().isShutdown(); }
public static Set<Task<?>> getTasksInEntityContext(ExecutionManager em, Entity e) { return em.getTasksWithTag(tagForContextEntity(e)); }
public void testUnmanagedEntityCanBeGcedEvenIfPreviouslyTagged() throws Exception { TestEntity e = app.createAndManageChild(EntitySpec.create(TestEntity.class)); String eId = e.getId(); e.invoke(TestEntity.MY_EFFECTOR, ImmutableMap.<String,Object>of()).get(); Set<Task<?>> tasks = BrooklynTaskTags.getTasksInEntityContext(app.getManagementContext().getExecutionManager(), e); Task<?> task = Iterables.get(tasks, 0); assertTrue(task.getTags().contains(BrooklynTaskTags.tagForContextEntity(e))); Set<Object> tags = app.getManagementContext().getExecutionManager().getTaskTags(); assertTrue(tags.contains(BrooklynTaskTags.tagForContextEntity(e)), "tags="+tags); Entities.destroy(e); forceGc(); Set<Object> tags2 = app.getManagementContext().getExecutionManager().getTaskTags(); for (Object tag : tags2) { if (tag instanceof Entity && ((Entity)tag).getId().equals(eId)) { fail("tags contains unmanaged entity "+tag); } if ((tag instanceof WrappedEntity) && ((WrappedEntity)tag).entity.getId().equals(eId) && ((WrappedEntity)tag).wrappingType.equals(BrooklynTaskTags.CONTEXT_ENTITY)) { fail("tags contains unmanaged entity (wrapped) "+tag); } } return; }
@Override public void onItemRemoved(final Item item) { executor.submit(MutableMap.of("tag", delegate), new Runnable() { @Override public void run() { try { delegate.onItemRemoved(item); } catch (Throwable t) { LOG.warn("Error notifying listener of itemAdded("+item+")", t); Exceptions.propagate(t); } } }); }
@Test public void testDelegatedNestedEffectorNotRepresentedAsTask() { e.delegateSayHi1("Bob", "hi"); Set<Task<?>> tasks = mgmt.getExecutionManager().getTasksWithAllTags(ImmutableList.of( BrooklynTaskTags.tagForContextEntity(e),ManagementContextInternal.EFFECTOR_TAG)); assertEquals(tasks.size(), 1); assertTrue(tasks.iterator().next().getDescription().contains("delegateSayHi1")); assertFalse(tasks.iterator().next().getDescription().contains("sayHi1")); }
@Override public TaskSummary getTask(final String application, final String entityToken, String taskId) { // TODO deprecate in favour of ActivityApi.get ? Task<?> t = mgmt().getExecutionManager().getTask(taskId); if (t == null) throw WebResourceUtils.notFound("Cannot find task '%s'", taskId); return TaskTransformer.fromTask(ui.getBaseUriBuilder()).apply(t); }
public Task<?> destroy(final Application application) { return mgmt.getExecutionManager().submit( MutableMap.of("displayName", "destroying "+application, "description", "REST call to destroy application "+application.getDisplayName()+" ("+application+")"), new Runnable() { @Override public void run() { ((EntityInternal)application).destroy(); mgmt.getEntityManager().unmanage(application); } }); }
@Test public void testCanRetrieveTaskForEffector() { e.sayHi1("Bob", "hi"); Set<Task<?>> tasks = mgmt.getExecutionManager().getTasksWithAllTags(ImmutableList.of( BrooklynTaskTags.tagForContextEntity(e),ManagementContextInternal.EFFECTOR_TAG)); assertEquals(tasks.size(), 1); assertTrue(tasks.iterator().next().getDescription().contains("sayHi1")); }
protected Task<?> findTask(final String taskId) { final Task<?> task = mgmt().getExecutionManager().getTask(taskId); if (task == null) { throw WebResourceUtils.notFound("Cannot find task '%s' - possibly garbage collected to save memory", taskId); } checkEntityEntitled(task); return task; }
@Test(groups="Integration") // takes 0.5s public void testGetConfigWithExecutedTaskWaitsForResult() throws Exception { LatchingCallable<String> work = new LatchingCallable<String>("abc"); Task<String> task = executionManager.submit(work); final MyOtherEntity entity = app.addChild(EntitySpec.create(MyOtherEntity.class) .configure(MyOtherEntity.STRING_KEY, task)); Future<String> getConfigFuture = executor.submit(new Callable<String>() { @Override public String call() { return entity.getConfig(MyOtherEntity.STRING_KEY); }}); assertTrue(work.latchCalled.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); assertFalse(getConfigFuture.isDone()); work.latchContinued.countDown(); assertEquals(getConfigFuture.get(TIMEOUT_MS, TimeUnit.MILLISECONDS), "abc"); assertEquals(work.callCount.get(), 1); }
@Test public void testEffectorOnProxyIsRecorded() { Object result = entity.identityEffector("abc"); assertEquals(result, "abc"); Set<Task<?>> tasks = mgmt.getExecutionManager().getTasksWithAllTags( ImmutableList.of(ManagementContextInternal.EFFECTOR_TAG, BrooklynTaskTags.tagForContextEntity(entity))); Task<?> task = Iterables.get(tasks, 0); assertEquals(tasks.size(), 1, "tasks="+tasks); assertTrue(task.getDescription().contains("identityEffector")); }
protected SshPutTaskWrapper submit(final SshPutTaskFactory tf) { SshPutTaskWrapper t = tf.newTask(); mgmt.getExecutionManager().submit(t); return t; }
@Override public void run() { Set<Task<?>> storedTasks2 = app.getManagementContext().getExecutionManager().getTasksWithAllTags( ImmutableList.of(BrooklynTaskTags.tagForContextEntity(entity), ManagementContextInternal.EFFECTOR_TAG)); List<String> storedTasks2Str = FluentIterable .from(storedTasks2) .transform(new Function<Task<?>, String>() { @Override public String apply(Task<?> input) { return taskToVerboseString(input); }}) .toList(); assertEquals(storedTasks2, ImmutableSet.copyOf(recentTasks), "storedTasks="+storedTasks2Str+"; expected="+recentTasks); }}); }
protected <T> ProcessTaskWrapper<T> submit(final ProcessTaskFactory<T> tf) { ProcessTaskWrapper<T> t = tf.newTask(); mgmt.getExecutionManager().submit(t); return t; }
@Override public void run() { Set<Task<?>> storedTasks = app.getManagementContext().getExecutionManager().getTasksWithAllTags(ImmutableList.of( BrooklynTaskTags.tagForTargetEntity(entity), ManagementContextInternal.EFFECTOR_TAG)); assertEquals(storedTasks, ImmutableSet.of(), "storedTasks="+storedTasks); }});
Task<Void> readTask = ctx.getExecutionManager().submit(new Callable<Void>() { @Override public Void call() throws Exception {
@Override public void run() { Task<?> entityTask = Iterables.getOnlyElement(entity.getApplication().getManagementContext().getExecutionManager().getTasksWithAllTags( ImmutableList.of(BrooklynTaskTags.EFFECTOR_TAG, BrooklynTaskTags.tagForContextEntity(entity)))); String blockingDetails = getBlockingDetails(entityTask); assertTrue(blockingDetails.contains(blockingDetailsSnippet)); }}); }