You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by wf...@apache.org on 2014/08/19 01:53:26 UTC
git commit: Use convenience function in Numbers to group instance IDs.
Repository: incubator-aurora
Updated Branches:
refs/heads/master 4d507d050 -> 20bb549ba
Use convenience function in Numbers to group instance IDs.
Reviewed at https://reviews.apache.org/r/24823/
Project: http://git-wip-us.apache.org/repos/asf/incubator-aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-aurora/commit/20bb549b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-aurora/tree/20bb549b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-aurora/diff/20bb549b
Branch: refs/heads/master
Commit: 20bb549ba3bd2fe0aeafab4275bd3b701c1b46f6
Parents: 4d507d0
Author: Bill Farner <wf...@apache.org>
Authored: Mon Aug 18 16:51:16 2014 -0700
Committer: Bill Farner <wf...@apache.org>
Committed: Mon Aug 18 16:51:16 2014 -0700
----------------------------------------------------------------------
.../aurora/scheduler/state/JobUpdaterImpl.java | 72 ++++++++------------
1 file changed, 28 insertions(+), 44 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/20bb549b/src/main/java/org/apache/aurora/scheduler/state/JobUpdaterImpl.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/state/JobUpdaterImpl.java b/src/main/java/org/apache/aurora/scheduler/state/JobUpdaterImpl.java
index f21f27c..2c64600 100644
--- a/src/main/java/org/apache/aurora/scheduler/state/JobUpdaterImpl.java
+++ b/src/main/java/org/apache/aurora/scheduler/state/JobUpdaterImpl.java
@@ -20,15 +20,11 @@ import java.util.Set;
import javax.inject.Inject;
import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.collect.ContiguousSet;
-import com.google.common.collect.DiscreteDomain;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
+import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import com.google.common.collect.Range;
-import com.google.common.collect.RangeSet;
-import com.google.common.collect.TreeRangeSet;
import com.twitter.common.util.Clock;
import org.apache.aurora.gen.InstanceTaskConfig;
@@ -37,6 +33,7 @@ import org.apache.aurora.gen.JobUpdateConfiguration;
import org.apache.aurora.gen.JobUpdateEvent;
import org.apache.aurora.gen.JobUpdateStatus;
import org.apache.aurora.gen.JobUpdateSummary;
+import org.apache.aurora.scheduler.base.Numbers;
import org.apache.aurora.scheduler.base.Query;
import org.apache.aurora.scheduler.base.Tasks;
import org.apache.aurora.scheduler.storage.Storage;
@@ -61,38 +58,6 @@ class JobUpdaterImpl implements JobUpdater {
private final UUIDGenerator uuidGenerator;
private final Clock clock;
- private static final Function<Integer, Range<Integer>> INSTANCE_ID_TO_RANGE =
- new Function<Integer, Range<Integer>>() {
- @Override
- public Range<Integer> apply(Integer id) {
- return Range.closed(id, id).canonical(DiscreteDomain.integers());
- }
- };
-
- private static final Function<Collection<Range<Integer>>, Set<org.apache.aurora.gen.Range>>
- REDUCE_RANGES = new Function<Collection<Range<Integer>>, Set<org.apache.aurora.gen.Range>>() {
- @Override
- public Set<org.apache.aurora.gen.Range> apply(Collection<Range<Integer>> input) {
- RangeSet<Integer> rangeSet = TreeRangeSet.create();
- for (Range<Integer> range : input) {
- rangeSet.add(range);
- }
-
- ImmutableSet.Builder<org.apache.aurora.gen.Range> builder = ImmutableSet.builder();
- for (Range<Integer> range : rangeSet.asRanges()) {
- // Canonical range of integers is closedOpen, which makes extracting upper bound
- // a problem without resorting to subtraction. The workaround is to convert range
- // into Contiguous set and get first/last.
- ContiguousSet<Integer> set = ContiguousSet.create(range, DiscreteDomain.integers());
- builder.add(new org.apache.aurora.gen.Range(
- set.first(),
- set.last()));
- }
-
- return builder.build();
- }
- };
-
@Inject
JobUpdaterImpl(Storage storage, Clock clock, UUIDGenerator uuidGenerator) {
this.storage = requireNonNull(storage);
@@ -140,6 +105,14 @@ class JobUpdaterImpl implements JobUpdater {
});
}
+ private static final Function<Collection<Integer>, Set<Range<Integer>>> TO_RANGES =
+ new Function<Collection<Integer>, Set<Range<Integer>>>() {
+ @Override
+ public Set<Range<Integer>> apply(Collection<Integer> numbers) {
+ return Numbers.toRanges(numbers);
+ }
+ };
+
private Set<InstanceTaskConfig> buildOldTaskConfigs(
IJobKey jobKey,
StoreProvider storeProvider) {
@@ -147,17 +120,28 @@ class JobUpdaterImpl implements JobUpdater {
Set<IScheduledTask> tasks =
storeProvider.getTaskStore().fetchTasks(Query.jobScoped(jobKey).active());
- Map<ITaskConfig, Set<org.apache.aurora.gen.Range>> rangesByTask = Maps.transformValues(
- Multimaps.transformValues(
- Multimaps.index(tasks, Tasks.SCHEDULED_TO_INFO),
- Functions.compose(INSTANCE_ID_TO_RANGE, Tasks.SCHEDULED_TO_INSTANCE_ID)).asMap(),
- REDUCE_RANGES);
+ // Group tasks by their configurations.
+ Multimap<ITaskConfig, IScheduledTask> tasksByConfig =
+ Multimaps.index(tasks, Tasks.SCHEDULED_TO_INFO);
+
+ // Translate tasks into instance IDs.
+ Multimap<ITaskConfig, Integer> instancesByConfig =
+ Multimaps.transformValues(tasksByConfig, Tasks.SCHEDULED_TO_INSTANCE_ID);
+
+ // Reduce instance IDs into contiguous ranges.
+ Map<ITaskConfig, Set<Range<Integer>>> rangesByConfig =
+ Maps.transformValues(instancesByConfig.asMap(), TO_RANGES);
ImmutableSet.Builder<InstanceTaskConfig> builder = ImmutableSet.builder();
- for (Map.Entry<ITaskConfig, Set<org.apache.aurora.gen.Range>> entry : rangesByTask.entrySet()) {
+ for (Map.Entry<ITaskConfig, Set<Range<Integer>>> entry : rangesByConfig.entrySet()) {
+ ImmutableSet.Builder<org.apache.aurora.gen.Range> ranges = ImmutableSet.builder();
+ for (Range<Integer> range : entry.getValue()) {
+ ranges.add(new org.apache.aurora.gen.Range(range.lowerEndpoint(), range.upperEndpoint()));
+ }
+
builder.add(new InstanceTaskConfig()
.setTask(entry.getKey().newBuilder())
- .setInstances(entry.getValue()));
+ .setInstances(ranges.build()));
}
return builder.build();