Return-Path: X-Original-To: apmail-aurora-commits-archive@minotaur.apache.org Delivered-To: apmail-aurora-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D03AA11869 for ; Mon, 18 Aug 2014 23:53:48 +0000 (UTC) Received: (qmail 51948 invoked by uid 500); 18 Aug 2014 23:53:48 -0000 Delivered-To: apmail-aurora-commits-archive@aurora.apache.org Received: (qmail 51917 invoked by uid 500); 18 Aug 2014 23:53:48 -0000 Mailing-List: contact commits-help@aurora.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@aurora.incubator.apache.org Delivered-To: mailing list commits@aurora.incubator.apache.org Received: (qmail 51908 invoked by uid 99); 18 Aug 2014 23:53:48 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Aug 2014 23:53:48 +0000 X-ASF-Spam-Status: No, hits=-2000.7 required=5.0 tests=ALL_TRUSTED,RP_MATCHES_RCVD X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO mail.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with SMTP; Mon, 18 Aug 2014 23:53:47 +0000 Received: (qmail 51533 invoked by uid 99); 18 Aug 2014 23:53:26 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Aug 2014 23:53:26 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 8BC879C6A4F; Mon, 18 Aug 2014 23:53:26 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: wfarner@apache.org To: commits@aurora.incubator.apache.org Message-Id: <969751c06639441cb693c9fb977bbe06@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: git commit: Use convenience function in Numbers to group instance IDs. Date: Mon, 18 Aug 2014 23:53:26 +0000 (UTC) X-Virus-Checked: Checked by ClamAV on apache.org 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 Authored: Mon Aug 18 16:51:16 2014 -0700 Committer: Bill Farner 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> INSTANCE_ID_TO_RANGE = - new Function>() { - @Override - public Range apply(Integer id) { - return Range.closed(id, id).canonical(DiscreteDomain.integers()); - } - }; - - private static final Function>, Set> - REDUCE_RANGES = new Function>, Set>() { - @Override - public Set apply(Collection> input) { - RangeSet rangeSet = TreeRangeSet.create(); - for (Range range : input) { - rangeSet.add(range); - } - - ImmutableSet.Builder builder = ImmutableSet.builder(); - for (Range 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 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, Set>> TO_RANGES = + new Function, Set>>() { + @Override + public Set> apply(Collection numbers) { + return Numbers.toRanges(numbers); + } + }; + private Set buildOldTaskConfigs( IJobKey jobKey, StoreProvider storeProvider) { @@ -147,17 +120,28 @@ class JobUpdaterImpl implements JobUpdater { Set tasks = storeProvider.getTaskStore().fetchTasks(Query.jobScoped(jobKey).active()); - Map> 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 tasksByConfig = + Multimaps.index(tasks, Tasks.SCHEDULED_TO_INFO); + + // Translate tasks into instance IDs. + Multimap instancesByConfig = + Multimaps.transformValues(tasksByConfig, Tasks.SCHEDULED_TO_INSTANCE_ID); + + // Reduce instance IDs into contiguous ranges. + Map>> rangesByConfig = + Maps.transformValues(instancesByConfig.asMap(), TO_RANGES); ImmutableSet.Builder builder = ImmutableSet.builder(); - for (Map.Entry> entry : rangesByTask.entrySet()) { + for (Map.Entry>> entry : rangesByConfig.entrySet()) { + ImmutableSet.Builder ranges = ImmutableSet.builder(); + for (Range 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();