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/03 14:23:42 UTC
[05/35] brooklyn-server git commit: optimization: skip tags copy on
common simple lookups
optimization: skip tags copy on common simple lookups
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/438846c2
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/438846c2
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/438846c2
Branch: refs/heads/master
Commit: 438846c2967a64e109395a258effbf5b4db2cfd4
Parents: 16c788e
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Sep 12 22:11:56 2017 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Sep 15 10:29:07 2017 +0100
----------------------------------------------------------------------
.../org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java | 12 ++++++------
.../core/mgmt/internal/BrooklynGarbageCollector.java | 5 +++--
.../brooklyn/util/core/task/BasicExecutionManager.java | 8 ++++----
.../org/apache/brooklyn/util/core/task/BasicTask.java | 1 +
.../org/apache/brooklyn/util/core/task/TaskTags.java | 10 +++++++++-
.../java/org/apache/brooklyn/util/core/task/Tasks.java | 2 +-
6 files changed, 24 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/438846c2/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
index 7d721d0..5cb1027 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
@@ -140,7 +140,7 @@ public class BrooklynTaskTags extends TaskTags {
public static WrappedEntity getWrappedEntityTagOfType(Task<?> t, String wrappingType) {
if (t==null) return null;
- return getWrappedEntityTagOfType(t.getTags(), wrappingType);
+ return getWrappedEntityTagOfType( getTagsFast(t), wrappingType);
}
public static WrappedEntity getWrappedEntityTagOfType(Collection<?> tags, String wrappingType) {
for (Object x: tags)
@@ -196,7 +196,7 @@ public class BrooklynTaskTags extends TaskTags {
}
public static ManagementContext getManagementContext(Task<?> task) {
- for (Object tag : task.getTags())
+ for (Object tag : getTagsFast(task))
if ((tag instanceof ManagementContext))
return (ManagementContext) tag;
return null;
@@ -297,7 +297,7 @@ public class BrooklynTaskTags extends TaskTags {
/** returns the set of tags indicating the streams available on a task */
public static Set<WrappedStream> streams(Task<?> task) {
Set<WrappedStream> result = new LinkedHashSet<BrooklynTaskTags.WrappedStream>();
- for (Object tag: task.getTags()) {
+ for (Object tag: getTagsFast(task)) {
if (tag instanceof WrappedStream) {
result.add((WrappedStream)tag);
}
@@ -308,7 +308,7 @@ public class BrooklynTaskTags extends TaskTags {
/** returns the tag for the indicated stream, or null */
public static WrappedStream stream(Task<?> task, String streamType) {
if (task==null) return null;
- for (Object tag: task.getTags())
+ for (Object tag: getTagsFast(task))
if ((tag instanceof WrappedStream) && ((WrappedStream)tag).streamType.equals(streamType))
return (WrappedStream)tag;
return null;
@@ -432,7 +432,7 @@ public class BrooklynTaskTags extends TaskTags {
public static EffectorCallTag getEffectorCallTag(Task<?> task, boolean recurse) {
Task<?> t = task;
while (t!=null) {
- for (Object tag: t.getTags()) {
+ for (Object tag: getTagsFast(task)) {
if (tag instanceof EffectorCallTag)
return (EffectorCallTag)tag;
}
@@ -473,7 +473,7 @@ public class BrooklynTaskTags extends TaskTags {
public static EntitlementContext getEntitlement(Task<?> task) {
if (task==null) return null;
- return getEntitlement(task.getTags());
+ return getEntitlement(getTagsFast(task));
}
public static EntitlementContext getEntitlement(Collection<?> tags) {
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/438846c2/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BrooklynGarbageCollector.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BrooklynGarbageCollector.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BrooklynGarbageCollector.java
index 98dfd90..203c3a5 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BrooklynGarbageCollector.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BrooklynGarbageCollector.java
@@ -52,6 +52,7 @@ import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.collections.MutableSet;
import org.apache.brooklyn.util.core.task.BasicExecutionManager;
import org.apache.brooklyn.util.core.task.ExecutionListener;
+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.guava.Maybe.SoftlyPresent;
@@ -301,7 +302,7 @@ public class BrooklynGarbageCollector {
protected boolean shouldDeleteTaskImmediately(Task<?> task) {
if (!task.isDone()) return false;
- Set<Object> tags = task.getTags();
+ Set<Object> tags = BrooklynTaskTags.getTagsFast(task);
if (tags.contains(ManagementContextInternal.TRANSIENT_TASK_TAG))
return true;
if (tags.contains(ManagementContextInternal.EFFECTOR_TAG) || tags.contains(ManagementContextInternal.NON_TRANSIENT_TASK_TAG))
@@ -533,7 +534,7 @@ public class BrooklynGarbageCollector {
for (Task<?> task: tasks) {
if (!task.isDone()) continue;
- Set<Object> tags = task.getTags();
+ Set<Object> tags = TaskTags.getTagsFast(task);
int categoryTags = 0, tooFullCategoryTags = 0;
for (Object tag: tags) {
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/438846c2/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 aa16e7b..729639d 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
@@ -239,7 +239,7 @@ public class BasicExecutionManager implements ExecutionManager {
}
protected boolean deleteTaskNonRecursive(Task<?> task) {
- Set<?> tags = checkNotNull(task, "task").getTags();
+ Set<?> tags = TaskTags.getTagsFast(checkNotNull(task, "task"));
for (Object tag : tags) {
synchronized (tasksByTag) {
Set<Task<?>> tasks = tasksWithTagLiveOrNull(tag);
@@ -669,7 +669,7 @@ public class BasicExecutionManager implements ExecutionManager {
protected <T> Task<T> submitNewTask(final Map<?,?> flags, final Task<T> task) {
if (log.isTraceEnabled()) {
log.trace("Submitting task {} ({}), with flags {}, and tags {}, job {}; caller {}",
- new Object[] {task.getId(), task, Sanitizer.sanitize(flags), task.getTags(),
+ new Object[] {task.getId(), task, Sanitizer.sanitize(flags), BrooklynTaskTags.getTagsFast(task),
(task instanceof TaskInternal ? ((TaskInternal<T>)task).getJob() : "<unavailable>"),
Tasks.current() });
if (Tasks.current()==null && BrooklynTaskTags.isTransient(task)) {
@@ -692,7 +692,7 @@ public class BasicExecutionManager implements ExecutionManager {
// If there's a scheduler then use that; otherwise execute it directly
Set<TaskScheduler> schedulers = null;
- for (Object tago: task.getTags()) {
+ for (Object tago: BrooklynTaskTags.getTagsFast(task)) {
TaskScheduler scheduler = getTaskSchedulerForTag(tago);
if (scheduler!=null) {
if (schedulers==null) schedulers = new LinkedHashSet<TaskScheduler>(2);
@@ -738,7 +738,7 @@ public class BasicExecutionManager implements ExecutionManager {
if (flags.get("tag")!=null) ((TaskInternal<?>)task).getMutableTags().add(flags.remove("tag"));
if (flags.get("tags")!=null) ((TaskInternal<?>)task).getMutableTags().addAll((Collection<?>)flags.remove("tags"));
- for (Object tag: ((TaskInternal<?>)task).getTags()) {
+ for (Object tag: BrooklynTaskTags.getTagsFast(task)) {
tasksWithTagCreating(tag).add(task);
}
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/438846c2/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java
----------------------------------------------------------------------
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 5e63c68..4398675 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
@@ -917,6 +917,7 @@ public class BasicTask<T> implements TaskInternal<T> {
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void setSubmittedByTask(Task<?> task) {
+ // possible optimization, store details but don't create task until later
submittedByTask = Maybe.softThen((Task)task, (Maybe)Maybe.of(BasicTask.newGoneTaskFor(task)));
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/438846c2/core/src/main/java/org/apache/brooklyn/util/core/task/TaskTags.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/TaskTags.java b/core/src/main/java/org/apache/brooklyn/util/core/task/TaskTags.java
index 4319796..c62ace4 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/TaskTags.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/TaskTags.java
@@ -25,6 +25,7 @@ import javax.annotation.Nullable;
import org.apache.brooklyn.api.mgmt.Task;
import org.apache.brooklyn.api.mgmt.TaskAdaptable;
+import com.google.common.annotations.Beta;
import com.google.common.base.Function;
public class TaskTags {
@@ -63,7 +64,7 @@ public class TaskTags {
public static boolean hasTag(Task<?> task, Object tag) {
if (task==null) return false;
- return task.getTags().contains(tag);
+ return getTagsFast(task).contains(tag);
}
public static <U,V extends TaskAdaptable<U>> V markInessential(V task) {
@@ -71,4 +72,11 @@ public class TaskTags {
return task;
}
+ @Beta
+ public static Set<Object> getTagsFast(Task<?> task) {
+ if (task==null) return null;
+ if (task instanceof BasicTask) return ((BasicTask<?>)task).getMutableTags();
+ return task.getTags();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/438846c2/core/src/main/java/org/apache/brooklyn/util/core/task/Tasks.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/Tasks.java b/core/src/main/java/org/apache/brooklyn/util/core/task/Tasks.java
index 66c4068..2db73df 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/Tasks.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/Tasks.java
@@ -253,7 +253,7 @@ public class Tasks {
public static <T> T tag(@Nullable Task<?> task, Class<T> type, boolean recurseHierarchy) {
// support null task to make it easier for callers to walk hierarchies
if (task==null) return null;
- for (Object tag: task.getTags())
+ for (Object tag: TaskTags.getTagsFast(task))
if (type.isInstance(tag)) return (T)tag;
if (!recurseHierarchy) return null;
return tag(task.getSubmittedByTask(), type, true);