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 9b01234b667bcb7f8c7e2ff9458522236ea2ad22 Author: Alex Heneveld <[email protected]> AuthorDate: Tue Jul 30 12:46:18 2024 +0100 optimize immediate evaluation and task cancellation --- .../apache/brooklyn/core/config/ConfigConstraints.java | 2 +- .../brooklyn/util/core/task/BasicExecutionContext.java | 16 ++++++++++++---- .../brooklyn/util/core/task/BasicExecutionManager.java | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java b/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java index b76d327119..0b0495b170 100644 --- a/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java +++ b/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java @@ -144,7 +144,7 @@ public abstract class ConfigConstraints<T> { if (exec!=null) { return exec.get( BrooklynTaskTags.setTransient( // set transient so gets GC and doesn't pollute the "top-level" view - Tasks.<Map<ConfigKey<?>,Throwable>>builder().dynamic(false).displayName("Validating config").body( () -> validateAll() ).build() )); + Tasks.<Map<ConfigKey<?>,Throwable>>builder().dynamic(false).displayName("Validating config of "+getSource()).body( () -> validateAll() ).build() )); } else { return validateAll(); } 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 fcbaf627ab..ff24b6fe2f 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 @@ -327,16 +327,24 @@ public class BasicExecutionContext extends AbstractExecutionContext { try { return runInSameThread(fakeTaskForContext, new Callable<Maybe<T>>() { public Maybe<T> call() throws Exception { + long count = -1; + if (executionManager instanceof BasicExecutionManager) count = ((BasicExecutionManager)executionManager).getTotalTasksSubmitted(); try { return Threads.runTemporarilyUninterrupted(job::getImmediately); } finally { // we've acknowledged that getImmediate may wreck (cancel) the task, // their first priority is to prevent them from leaking; - // however previously we did the cancel before running, - // doing it after means more tasks successfully execute - // (the interrupt is sufficient to prevent them blocking); + // however previously we did the cancel before running, + // doing it after means more tasks successfully execute + // (the interrupt is sufficient to prevent them blocking); // see test EffectorSayHiTest.testInvocationGetImmediately - fakeTaskForContext.cancel(); + + if (count>=0 && (((BasicExecutionManager)executionManager).getTotalTasksSubmitted()==count || ((BasicExecutionManager) executionManager).getNumIncompleteTasks() == 0)) { + // skip interrupt if not necessary, to speed things up + fakeTaskForContext.cancel(TaskInternal.TaskCancellationMode.DO_NOT_INTERRUPT); + } else { + fakeTaskForContext.cancel(); + } } } }); } catch (Exception e) { 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 8a73ad03e9..ead13412a8 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 @@ -982,7 +982,7 @@ public class BasicExecutionManager implements ExecutionManager { } } for (Task<?> t : execMgmt.getAllTasks()) { - if (task.equals(t.getSubmittedByTask())) { + if (!t.isDone() && Objects.equals(task.getId(), t.getSubmittedByTaskId())) { if (mode.isAllowedToInterruptAllSubmittedTasks() || BrooklynTaskTags.isTransient(t)) { if (log.isTraceEnabled()) { log.trace("Cancelling " + t + " on recursive cancellation of " + task);
