Repository: aurora Updated Branches: refs/heads/master d28bd4fb5 -> ca15f25cc
Use java.util.Optional and streams in LockManager Use java.util.Optional and streams in Lock*. Taking advantage of some Java 8 features along the way, and introduced GuavaCollectors.toImmutableSet for compatibility with the streams API Testing Done: ./gradlew -Pq build Reviewed at https://reviews.apache.org/r/35842/ Project: http://git-wip-us.apache.org/repos/asf/aurora/repo Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/ca15f25c Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/ca15f25c Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/ca15f25c Branch: refs/heads/master Commit: ca15f25cc9635f0c5cb4d424ab13333e98aab97b Parents: d28bd4f Author: Kevin Sweeney <[email protected]> Authored: Thu Jun 25 11:42:26 2015 -0700 Committer: Kevin Sweeney <[email protected]> Committed: Thu Jun 25 11:42:26 2015 -0700 ---------------------------------------------------------------------- src/main/java/org/apache/aurora/GuavaUtils.java | 16 ++++ .../aurora/scheduler/state/LockManager.java | 2 +- .../aurora/scheduler/state/LockManagerImpl.java | 2 +- .../scheduler/storage/ForwardingStore.java | 2 +- .../aurora/scheduler/storage/LockStore.java | 3 +- .../scheduler/storage/db/DbLockStore.java | 17 ++-- .../thrift/SchedulerThriftInterface.java | 98 ++++++-------------- .../java/org/apache/aurora/GuavaUtilsTest.java | 30 ++++++ .../scheduler/state/LockManagerImplTest.java | 12 +-- .../scheduler/storage/db/DbLockStoreTest.java | 10 +- .../thrift/SchedulerThriftInterfaceTest.java | 88 ++++++++---------- 11 files changed, 137 insertions(+), 143 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aurora/blob/ca15f25c/src/main/java/org/apache/aurora/GuavaUtils.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/GuavaUtils.java b/src/main/java/org/apache/aurora/GuavaUtils.java index 22104e6..9903299 100644 --- a/src/main/java/org/apache/aurora/GuavaUtils.java +++ b/src/main/java/org/apache/aurora/GuavaUtils.java @@ -15,12 +15,16 @@ package org.apache.aurora; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import java.util.stream.Collector; import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ImmutableSet; import com.google.common.util.concurrent.Service; import com.google.common.util.concurrent.Service.State; import com.google.common.util.concurrent.ServiceManager; +import static java.util.stream.Collector.Characteristics.UNORDERED; + /** * Utilities for working with Guava. */ @@ -30,6 +34,18 @@ public final class GuavaUtils { } /** + * Collector to create a Guava ImmutableSet. + */ + public static <T> Collector<T, ?, ImmutableSet<T>> toImmutableSet() { + return Collector.of( + ImmutableSet::builder, + ImmutableSet.Builder::add, + (ImmutableSet.Builder<T> l, ImmutableSet.Builder<T> r) -> l.addAll(r.build()), + ImmutableSet.Builder::build, + UNORDERED); + } + + /** * Interface for mocking. The Guava ServiceManager class is final. */ public interface ServiceManagerIface { http://git-wip-us.apache.org/repos/asf/aurora/blob/ca15f25c/src/main/java/org/apache/aurora/scheduler/state/LockManager.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/state/LockManager.java b/src/main/java/org/apache/aurora/scheduler/state/LockManager.java index e8303f9..07de8fc 100644 --- a/src/main/java/org/apache/aurora/scheduler/state/LockManager.java +++ b/src/main/java/org/apache/aurora/scheduler/state/LockManager.java @@ -13,7 +13,7 @@ */ package org.apache.aurora.scheduler.state; -import com.google.common.base.Optional; +import java.util.Optional; import org.apache.aurora.scheduler.storage.entities.ILock; import org.apache.aurora.scheduler.storage.entities.ILockKey; http://git-wip-us.apache.org/repos/asf/aurora/blob/ca15f25c/src/main/java/org/apache/aurora/scheduler/state/LockManagerImpl.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/state/LockManagerImpl.java b/src/main/java/org/apache/aurora/scheduler/state/LockManagerImpl.java index 6aa281c..5c37f15 100644 --- a/src/main/java/org/apache/aurora/scheduler/state/LockManagerImpl.java +++ b/src/main/java/org/apache/aurora/scheduler/state/LockManagerImpl.java @@ -14,11 +14,11 @@ package org.apache.aurora.scheduler.state; import java.util.Date; +import java.util.Optional; import javax.inject.Inject; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Optional; import com.twitter.common.util.Clock; import org.apache.aurora.gen.Lock; http://git-wip-us.apache.org/repos/asf/aurora/blob/ca15f25c/src/main/java/org/apache/aurora/scheduler/storage/ForwardingStore.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/ForwardingStore.java b/src/main/java/org/apache/aurora/scheduler/storage/ForwardingStore.java index 2be3eb0..b8bd918 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/ForwardingStore.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/ForwardingStore.java @@ -119,7 +119,7 @@ public class ForwardingStore implements } @Override - public Optional<ILock> fetchLock(ILockKey lockKey) { + public java.util.Optional<ILock> fetchLock(ILockKey lockKey) { return lockStore.fetchLock(lockKey); } http://git-wip-us.apache.org/repos/asf/aurora/blob/ca15f25c/src/main/java/org/apache/aurora/scheduler/storage/LockStore.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/LockStore.java b/src/main/java/org/apache/aurora/scheduler/storage/LockStore.java index 596a378..9764a01 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/LockStore.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/LockStore.java @@ -13,10 +13,9 @@ */ package org.apache.aurora.scheduler.storage; +import java.util.Optional; import java.util.Set; -import com.google.common.base.Optional; - import org.apache.aurora.scheduler.storage.entities.ILock; import org.apache.aurora.scheduler.storage.entities.ILockKey; http://git-wip-us.apache.org/repos/asf/aurora/blob/ca15f25c/src/main/java/org/apache/aurora/scheduler/storage/db/DbLockStore.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/db/DbLockStore.java b/src/main/java/org/apache/aurora/scheduler/storage/db/DbLockStore.java index 335d7a9..6a127e4 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/db/DbLockStore.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/db/DbLockStore.java @@ -13,13 +13,13 @@ */ package org.apache.aurora.scheduler.storage.db; +import java.util.Optional; import java.util.Set; +import java.util.function.Function; -import com.google.common.base.Function; -import com.google.common.base.Optional; -import com.google.common.collect.FluentIterable; import com.google.inject.Inject; +import org.apache.aurora.GuavaUtils; import org.apache.aurora.scheduler.storage.LockStore; import org.apache.aurora.scheduler.storage.db.views.LockRow; import org.apache.aurora.scheduler.storage.entities.ILock; @@ -65,22 +65,17 @@ class DbLockStore implements LockStore.Mutable { @Timed("lock_store_fetch_locks") @Override public Set<ILock> fetchLocks() { - return FluentIterable.from(mapper.selectAll()).transform(TO_ROW).toSet(); + return mapper.selectAll().stream().map(TO_ROW).collect(GuavaUtils.toImmutableSet()); } @Timed("lock_store_fetch_lock") @Override public Optional<ILock> fetchLock(ILockKey lockKey) { - return Optional.fromNullable(mapper.select(lockKey.newBuilder())).transform(TO_ROW); + return Optional.ofNullable(mapper.select(lockKey.newBuilder())).map(TO_ROW); } /** * LockRow converter to satisfy the ILock interface. */ - private static final Function<LockRow, ILock> TO_ROW = new Function<LockRow, ILock>() { - @Override - public ILock apply(LockRow input) { - return ILock.build(input.getLock()); - } - }; + private static final Function<LockRow, ILock> TO_ROW = input -> ILock.build(input.getLock()); } http://git-wip-us.apache.org/repos/asf/aurora/blob/ca15f25c/src/main/java/org/apache/aurora/scheduler/thrift/SchedulerThriftInterface.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/thrift/SchedulerThriftInterface.java b/src/main/java/org/apache/aurora/scheduler/thrift/SchedulerThriftInterface.java index 0670b2b..9af379c 100644 --- a/src/main/java/org/apache/aurora/scheduler/thrift/SchedulerThriftInterface.java +++ b/src/main/java/org/apache/aurora/scheduler/thrift/SchedulerThriftInterface.java @@ -13,7 +13,6 @@ */ package org.apache.aurora.scheduler.thrift; -import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; @@ -40,6 +39,7 @@ import com.twitter.common.args.Arg; import com.twitter.common.args.CmdLine; import com.twitter.common.args.constraints.Positive; +import org.apache.aurora.GuavaUtils; import org.apache.aurora.auth.CapabilityValidator; import org.apache.aurora.auth.CapabilityValidator.AuditCheck; import org.apache.aurora.auth.SessionValidator.AuthFailedException; @@ -174,12 +174,7 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { private static final Logger LOG = Logger.getLogger(SchedulerThriftInterface.class.getName()); private static final Function<IScheduledTask, String> GET_ROLE = Functions.compose( - new Function<ITaskConfig, String>() { - @Override - public String apply(ITaskConfig task) { - return task.getJob().getRole(); - } - }, + task -> task.getJob().getRole(), Tasks.SCHEDULED_TO_INFO); private final NonVolatileStorage storage; @@ -259,7 +254,7 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { try { lockManager.validateIfLocked( ILockKey.build(LockKey.job(job.getKey().newBuilder())), - Optional.fromNullable(mutableLock).transform(ILock.FROM_BUILDER)); + java.util.Optional.ofNullable(mutableLock).map(ILock::build)); checkJobExists(storeProvider, job.getKey()); @@ -331,7 +326,7 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { try { lockManager.validateIfLocked( ILockKey.build(LockKey.job(jobKey.newBuilder())), - Optional.fromNullable(mutableLock).transform(ILock.FROM_BUILDER)); + java.util.Optional.ofNullable(mutableLock).map(ILock::build)); ITaskConfig template = sanitized.getJobConfig().getTaskConfig(); int count = sanitized.getJobConfig().getInstanceCount(); @@ -390,7 +385,7 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { IJobKey jobKey = JobKeys.assertValid(IJobKey.build(mutableJobKey)); lockManager.validateIfLocked( ILockKey.build(LockKey.job(jobKey.newBuilder())), - Optional.fromNullable(mutableLock).transform(ILock.FROM_BUILDER)); + java.util.Optional.ofNullable(mutableLock).map(ILock::build)); if (!cronJobManager.deleteJob(jobKey)) { return invalidRequest(notScheduledCronMessage(jobKey)); @@ -467,7 +462,7 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { return readOnlyScheduler.getJobs(maybeNullRole); } - private void validateLockForTasks(Optional<ILock> lock, Iterable<IScheduledTask> tasks) + private void validateLockForTasks(java.util.Optional<ILock> lock, Iterable<IScheduledTask> tasks) throws LockException { ImmutableSet<IJobKey> uniqueKeys = FluentIterable.from(tasks) @@ -561,7 +556,7 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { Iterable<IScheduledTask> tasks = storeProvider.getTaskStore().fetchTasks(query); try { validateLockForTasks( - Optional.fromNullable(mutableLock).transform(ILock.FROM_BUILDER), + java.util.Optional.ofNullable(mutableLock).map(ILock::build), tasks); } catch (LockException e) { return error(LOCK_ERROR, e); @@ -610,7 +605,7 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { try { lockManager.validateIfLocked( ILockKey.build(LockKey.job(jobKey.newBuilder())), - Optional.fromNullable(mutableLock).transform(ILock.FROM_BUILDER)); + java.util.Optional.ofNullable(mutableLock).map(ILock::build)); } catch (LockException e) { return error(LOCK_ERROR, e); } @@ -935,7 +930,7 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { lockManager.validateIfLocked( ILockKey.build(LockKey.job(jobKey.newBuilder())), - Optional.fromNullable(mutableLock).transform(ILock.FROM_BUILDER)); + java.util.Optional.ofNullable(mutableLock).map(ILock::build)); Iterable<IScheduledTask> currentTasks = storeProvider.getTaskStore().fetchTasks( Query.jobScoped(task.getJob()).active()); @@ -1015,7 +1010,7 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { ImmutableSet.of(getRoleFromLockKey(lock.getKey()))); if (validation == LockValidation.CHECKED) { - lockManager.validateIfLocked(lock.getKey(), Optional.of(lock)); + lockManager.validateIfLocked(lock.getKey(), java.util.Optional.of(lock)); } lockManager.releaseLock(lock); return ok(); @@ -1061,26 +1056,10 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { } } - 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 static final Function<Range<Integer>, org.apache.aurora.gen.Range> TO_THRIFT_RANGE = - new Function<Range<Integer>, org.apache.aurora.gen.Range>() { - @Override - public org.apache.aurora.gen.Range apply(Range<Integer> range) { - return new org.apache.aurora.gen.Range(range.lowerEndpoint(), range.upperEndpoint()); - } - }; - private static Set<org.apache.aurora.gen.Range> convertRanges(Set<Range<Integer>> ranges) { - return FluentIterable.from(ranges) - .transform(TO_THRIFT_RANGE) - .toSet(); + return ranges.stream() + .map(range -> new org.apache.aurora.gen.Range(range.lowerEndpoint(), range.upperEndpoint())) + .collect(GuavaUtils.toImmutableSet()); } private static Set<InstanceTaskConfig> buildInitialState(Map<Integer, ITaskConfig> tasks) { @@ -1090,7 +1069,7 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { // Reduce instance IDs into contiguous ranges. Map<ITaskConfig, Set<Range<Integer>>> rangesByConfig = - Maps.transformValues(instancesByConfig.asMap(), TO_RANGES); + Maps.transformValues(instancesByConfig.asMap(), Numbers::toRanges); ImmutableSet.Builder<InstanceTaskConfig> builder = ImmutableSet.builder(); for (Map.Entry<ITaskConfig, Set<Range<Integer>>> entry : rangesByConfig.entrySet()) { @@ -1252,40 +1231,17 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { throws UpdateStateException; } - private static final JobUpdateStateChange PAUSE = new JobUpdateStateChange() { - @Override - public void modifyUpdate(JobUpdateController controller, IJobUpdateKey key, AuditData auditData) - throws UpdateStateException { - - controller.pause(key, auditData); - } - }; - - private static final JobUpdateStateChange RESUME = new JobUpdateStateChange() { - @Override - public void modifyUpdate(JobUpdateController controller, IJobUpdateKey key, AuditData auditData) - throws UpdateStateException { - - controller.resume(key, auditData); - } - }; - - private static final JobUpdateStateChange ABORT = new JobUpdateStateChange() { - @Override - public void modifyUpdate(JobUpdateController controller, IJobUpdateKey key, AuditData auditData) - throws UpdateStateException { - - controller.abort(key, auditData); - } - }; - @Override public Response pauseJobUpdate( JobUpdateKey mutableKey, @Nullable String message, SessionKey session) { - return changeJobUpdateState(mutableKey, session, PAUSE, Optional.fromNullable(message)); + return changeJobUpdateState( + mutableKey, + session, + JobUpdateController::pause, + Optional.fromNullable(message)); } @Override @@ -1294,7 +1250,11 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { @Nullable String message, SessionKey session) { - return changeJobUpdateState(mutableKey, session, RESUME, Optional.fromNullable(message)); + return changeJobUpdateState( + mutableKey, + session, + JobUpdateController::resume, + Optional.fromNullable(message)); } @Override @@ -1303,7 +1263,11 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { @Nullable String message, SessionKey session) { - return changeJobUpdateState(mutableKey, session, ABORT, Optional.fromNullable(message)); + return changeJobUpdateState( + mutableKey, + session, + JobUpdateController::abort, + Optional.fromNullable(message)); } @Override @@ -1415,10 +1379,6 @@ class SchedulerThriftInterface implements AnnotatedAuroraAdmin { "maxPerInstanceFailures must be non-negative."; @VisibleForTesting - static final String INVALID_MAX_WAIT_TO_RUNNING = - "maxWaitToInstanceRunningMs must be non-negative."; - - @VisibleForTesting static final String INVALID_MIN_WAIT_TO_RUNNING = "minWaitInInstanceRunningMs must be non-negative."; http://git-wip-us.apache.org/repos/asf/aurora/blob/ca15f25c/src/test/java/org/apache/aurora/GuavaUtilsTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/GuavaUtilsTest.java b/src/test/java/org/apache/aurora/GuavaUtilsTest.java new file mode 100644 index 0000000..065a4ba --- /dev/null +++ b/src/test/java/org/apache/aurora/GuavaUtilsTest.java @@ -0,0 +1,30 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.aurora; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class GuavaUtilsTest { + @Test + public static void testToImmutableSet() { + assertEquals( + ImmutableSet.of("b", "c", "a"), + ImmutableList.of("a", "b", "c").stream().collect(GuavaUtils.toImmutableSet())); + } +} http://git-wip-us.apache.org/repos/asf/aurora/blob/ca15f25c/src/test/java/org/apache/aurora/scheduler/state/LockManagerImplTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/state/LockManagerImplTest.java b/src/test/java/org/apache/aurora/scheduler/state/LockManagerImplTest.java index 9c9cf1b..1b5a5a8 100644 --- a/src/test/java/org/apache/aurora/scheduler/state/LockManagerImplTest.java +++ b/src/test/java/org/apache/aurora/scheduler/state/LockManagerImplTest.java @@ -13,10 +13,10 @@ */ package org.apache.aurora.scheduler.state; +import java.util.Optional; import java.util.UUID; import java.util.concurrent.CountDownLatch; -import com.google.common.base.Optional; import com.google.common.base.Throwables; import com.google.common.collect.Iterables; import com.google.common.util.concurrent.ThreadFactoryBuilder; @@ -120,7 +120,7 @@ public class LockManagerImplTest extends EasyMockTest { public void testValidateLockNotStoredNotHeld() throws Exception { control.replay(); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>empty()); } @Test @@ -139,7 +139,7 @@ public class LockManagerImplTest extends EasyMockTest { expectLockException(JOB_KEY); lockManager.acquireLock(LOCK_KEY, USER); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>empty()); } @Test @@ -168,7 +168,7 @@ public class LockManagerImplTest extends EasyMockTest { expect(storageUtil.storeProvider.getLockStore()).andReturn(storageUtil.lockStore).atLeastOnce(); expect(storageUtil.lockStore.fetchLock(LOCK_KEY)) - .andReturn(Optional.<ILock>absent()) + .andReturn(Optional.<ILock>empty()) .atLeastOnce(); final CountDownLatch reads = new CountDownLatch(2); @@ -198,7 +198,7 @@ public class LockManagerImplTest extends EasyMockTest { @Override public void run() { try { - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>empty()); } catch (LockException e) { throw Throwables.propagate(e); } @@ -206,7 +206,7 @@ public class LockManagerImplTest extends EasyMockTest { }) .start(); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>empty()); } private void expectLockException(IJobKey key) { http://git-wip-us.apache.org/repos/asf/aurora/blob/ca15f25c/src/test/java/org/apache/aurora/scheduler/storage/db/DbLockStoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/db/DbLockStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/db/DbLockStoreTest.java index ecbe1dd..5152448 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/db/DbLockStoreTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/db/DbLockStoreTest.java @@ -14,9 +14,9 @@ package org.apache.aurora.scheduler.storage.db; import java.io.IOException; +import java.util.Optional; import java.util.Set; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableSet; import org.apache.aurora.gen.JobKey; @@ -167,17 +167,17 @@ public class DbLockStoreTest { ILock lock1 = makeLock(JobKeys.from(role1, env, job).newBuilder(), "token1"); ILock lock2 = makeLock(JobKeys.from(role2, env, job).newBuilder(), "token2"); - assertEquals(Optional.<ILock>absent(), getLock(lock1.getKey())); - assertEquals(Optional.<ILock>absent(), getLock(lock2.getKey())); + assertEquals(Optional.<ILock>empty(), getLock(lock1.getKey())); + assertEquals(Optional.<ILock>empty(), getLock(lock2.getKey())); saveLocks(StorageEntityUtil.assertFullyPopulated(lock1)); assertEquals(Optional.of(lock1), getLock(lock1.getKey())); - assertEquals(Optional.<ILock>absent(), getLock(lock2.getKey())); + assertEquals(Optional.<ILock>empty(), getLock(lock2.getKey())); saveLocks(lock2); assertEquals(Optional.of(lock1), getLock(lock1.getKey())); assertEquals(Optional.of(lock2), getLock(lock2.getKey())); removeLocks(lock1); - assertEquals(Optional.<ILock>absent(), getLock(lock1.getKey())); + assertEquals(Optional.<ILock>empty(), getLock(lock1.getKey())); assertEquals(Optional.of(lock2), getLock(lock2.getKey())); } http://git-wip-us.apache.org/repos/asf/aurora/blob/ca15f25c/src/test/java/org/apache/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java b/src/test/java/org/apache/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java index 38ef412..71b09b1 100644 --- a/src/test/java/org/apache/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java +++ b/src/test/java/org/apache/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java @@ -21,7 +21,6 @@ import java.util.Map; import java.util.Set; import com.google.common.base.Optional; -import com.google.common.base.Predicate; import com.google.common.base.Strings; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; @@ -269,7 +268,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { IJobConfiguration job = IJobConfiguration.build(makeProdJob()); SanitizedConfiguration sanitized = SanitizedConfiguration.fromUnsanitized(job); expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); storageUtil.expectTaskFetch(Query.jobScoped(JOB_KEY).active()); expectNoCronJob(); expect(taskIdGenerator.generate(sanitized.getJobConfig().getTaskConfig(), 1)) @@ -291,7 +290,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { IJobConfiguration job = IJobConfiguration.build(makeProdJob()); SanitizedConfiguration sanitized = SanitizedConfiguration.fromUnsanitized(job); expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); storageUtil.expectTaskFetch(Query.jobScoped(JOB_KEY).active()); expectNoCronJob(); expect(taskIdGenerator.generate(sanitized.getJobConfig().getTaskConfig(), 1)) @@ -346,7 +345,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { public void testCreateJobFailsLockCheck() throws Exception { IJobConfiguration job = IJobConfiguration.build(makeJob()); expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); expectLastCall().andThrow(new LockException("Invalid lock")); control.replay(); @@ -358,7 +357,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { public void testCreateJobFailsJobExists() throws Exception { IJobConfiguration job = IJobConfiguration.build(makeJob()); expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); storageUtil.expectTaskFetch(Query.jobScoped(JOB_KEY).active(), buildScheduledTask()); control.replay(); @@ -370,7 +369,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { public void testCreateJobFailsCronJobExists() throws Exception { IJobConfiguration job = IJobConfiguration.build(makeJob()); expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); storageUtil.expectTaskFetch(Query.jobScoped(JOB_KEY).active()); expectCronJob(); @@ -385,7 +384,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { makeJob(defaultTask(true), MAX_TASKS_PER_JOB.get() + 1)); expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); storageUtil.expectTaskFetch(Query.jobScoped(JOB_KEY).active()); expectNoCronJob(); expect(quotaManager.checkInstanceAddition( @@ -403,7 +402,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { IJobConfiguration job = IJobConfiguration.build(makeJob()); SanitizedConfiguration sanitized = SanitizedConfiguration.fromUnsanitized(job); expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); storageUtil.expectTaskFetch(Query.jobScoped(JOB_KEY).active()); expectNoCronJob(); expect(quotaManager.checkInstanceAddition( @@ -424,7 +423,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { IJobConfiguration job = IJobConfiguration.build(makeProdJob()); SanitizedConfiguration sanitized = SanitizedConfiguration.fromUnsanitized(job); expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); storageUtil.expectTaskFetch(Query.jobScoped(JOB_KEY).active()); expectNoCronJob(); expect(taskIdGenerator.generate(sanitized.getJobConfig().getTaskConfig(), 1)) @@ -439,12 +438,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { private void assertMessageMatches(Response response, final String string) { // TODO(wfarner): This test coverage could be much better. Circle back to apply more thorough // response contents testing throughout. - assertTrue(Iterables.any(response.getDetails(), new Predicate<ResponseDetail>() { - @Override - public boolean apply(ResponseDetail detail) { - return detail.getMessage().equals(string); - } - })); + assertTrue(Iterables.any(response.getDetails(), detail -> detail.getMessage().equals(string))); } @Test @@ -572,7 +566,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { .setMaxTaskFailures(1) .setEnvironment("devel"); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); storageUtil.expectTaskFetch(Query.jobScoped(JOB_KEY).active()); expectNoCronJob(); expect(taskIdGenerator.generate(ITaskConfig.build(sanitized.getTaskConfig()), 1)) @@ -665,7 +659,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { expectAuth(ROOT, false); expectAuth(ROLE, true); storageUtil.expectTaskFetch(query, buildScheduledTask()); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); expectTransitionsToKilling(); control.replay(); @@ -678,7 +672,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { Query.Builder query = Query.unscoped().byJob(JOB_KEY).active(); expectAuth(ROOT, true); storageUtil.expectTaskFetch(query, buildScheduledTask()); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); expectTransitionsToKilling(); control.replay(); @@ -691,7 +685,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { TaskQuery query = new TaskQuery().setJobName("job"); expectAuth(ROOT, true); storageUtil.expectTaskFetch(Query.arbitrary(query).active(), buildScheduledTask()); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); expectTransitionsToKilling(); control.replay(); @@ -704,7 +698,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { Query.Builder query = Query.unscoped().byJob(JOB_KEY); expectAuth(ROOT, true); storageUtil.expectTaskFetch(query.active(), buildScheduledTask()); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); expectTransitionsToKilling(); control.replay(); @@ -721,8 +715,8 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { expectAuth(ROOT, false); expectAuth(ROLE, true); storageUtil.expectTaskFetch(query, buildScheduledTask(), task2); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); - lockManager.validateIfLocked(key2, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); + lockManager.validateIfLocked(key2, java.util.Optional.of(LOCK)); expectLastCall().andThrow(new LockException("Failed lock check.")); control.replay(); @@ -739,7 +733,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { // This query happens twice - once for authentication (without consistency) and once again // to perform the state change (within a write transaction). storageUtil.expectTaskFetch(query.active(), buildScheduledTask()).times(2); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); expectTransitionsToKilling(); control.replay(); @@ -769,7 +763,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { expectAuth(ROOT, false); expectAuth(ImmutableSet.of("a", "b"), true); storageUtil.expectTaskFetch(query.active(), buildScheduledTask()); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); expectTransitionsToKilling(); control.replay(); @@ -820,7 +814,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { Query.Builder query = Query.roleScoped("foo").active(); storageUtil.expectTaskFetch(query, buildScheduledTask()); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); expectTransitionsToKilling(); control.replay(); @@ -974,7 +968,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { Set<Integer> shards = ImmutableSet.of(0); expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); storageUtil.expectTaskFetch( Query.instanceScoped(JOB_KEY, shards).active(), buildScheduledTask()); @@ -1008,7 +1002,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { Set<Integer> shards = ImmutableSet.of(1, 6); expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); expectLastCall().andThrow(new LockException("test")); control.replay(); @@ -1023,7 +1017,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { Set<Integer> shards = ImmutableSet.of(1, 6); expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); storageUtil.expectTaskFetch(Query.instanceScoped(JOB_KEY, shards).active()); control.replay(); @@ -1036,7 +1030,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { @Test public void testReplaceCronTemplate() throws Exception { expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); SanitizedConfiguration sanitized = SanitizedConfiguration.fromUnsanitized(IJobConfiguration.build(CRON_JOB)); @@ -1064,7 +1058,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { @Test public void testReplaceCronTemplateFailedLockValidation() throws Exception { expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); expectLastCall().andThrow(new LockException("Failed lock.")); control.replay(); @@ -1074,7 +1068,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { @Test public void testReplaceCronTemplateDoesNotExist() throws Exception { expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); SanitizedConfiguration sanitized = SanitizedConfiguration.fromUnsanitized(IJobConfiguration.build(CRON_JOB)); @@ -1116,7 +1110,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { @Test public void testScheduleCronCreatesJob() throws Exception { expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); SanitizedConfiguration sanitized = SanitizedConfiguration.fromUnsanitized(IJobConfiguration.build(CRON_JOB)); @@ -1134,7 +1128,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { @Test public void testScheduleCronFailsCreationDueToExistingNonCron() throws Exception { expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); SanitizedConfiguration sanitized = SanitizedConfiguration.fromUnsanitized(IJobConfiguration.build(CRON_JOB)); @@ -1153,7 +1147,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { @Test public void testScheduleCronUpdatesJob() throws Exception { expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); SanitizedConfiguration sanitized = SanitizedConfiguration.fromUnsanitized(IJobConfiguration.build(CRON_JOB)); @@ -1191,7 +1185,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { @Test public void testScheduleCronJobFailsLockValidation() throws Exception { expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); expectLastCall().andThrow(new LockException("Failed lock")); control.replay(); assertResponse(LOCK_ERROR, thrift.scheduleCronJob(CRON_JOB, LOCK.newBuilder(), SESSION)); @@ -1210,7 +1204,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { @Test public void testScheduleCronFailsQuotaCheck() throws Exception { expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); SanitizedConfiguration sanitized = SanitizedConfiguration.fromUnsanitized(IJobConfiguration.build(CRON_JOB)); @@ -1225,7 +1219,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { @Test public void testDescheduleCronJob() throws Exception { expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); expect(cronJobManager.deleteJob(JOB_KEY)).andReturn(true); control.replay(); assertResponse(OK, thrift.descheduleCronJob(CRON_JOB.getKey(), null, SESSION)); @@ -1242,7 +1236,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { @Test public void testDescheduleCronJobFailsLockValidation() throws Exception { expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); expectLastCall().andThrow(new LockException("Failed lock")); control.replay(); assertResponse(LOCK_ERROR, thrift.descheduleCronJob(CRON_JOB.getKey(), null, SESSION)); @@ -1251,7 +1245,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { @Test public void testDescheduleNotACron() throws Exception { expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); expect(cronJobManager.deleteJob(JOB_KEY)).andReturn(false); control.replay(); @@ -1550,7 +1544,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { ITaskConfig populatedTask = ITaskConfig.build(populatedTask()); expectAuth(ROLE, true); expectNoCronJob(); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); storageUtil.expectTaskFetch(Query.jobScoped(JOB_KEY).active()); expect(taskIdGenerator.generate(populatedTask, 1)) .andReturn(TASK_ID); @@ -1574,7 +1568,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { AddInstancesConfig config = createInstanceConfig(populatedTask.newBuilder()); expectAuth(ROLE, true); expectNoCronJob(); - lockManager.validateIfLocked(LOCK_KEY, Optional.<ILock>absent()); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.<ILock>empty()); storageUtil.expectTaskFetch(Query.jobScoped(JOB_KEY).active()); expect(taskIdGenerator.generate(populatedTask, 1)) .andReturn(TASK_ID); @@ -1636,7 +1630,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { AddInstancesConfig config = createInstanceConfig(defaultTask(true)); expectAuth(ROLE, true); expectNoCronJob(); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); expectLastCall().andThrow(new LockException("Failed lock check.")); control.replay(); @@ -1650,7 +1644,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { AddInstancesConfig config = createInstanceConfig(populatedTask.newBuilder()); expectAuth(ROLE, true); expectNoCronJob(); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); storageUtil.expectTaskFetch(Query.jobScoped(JOB_KEY).active()); expect(quotaManager.checkInstanceAddition( anyObject(ITaskConfig.class), @@ -1670,7 +1664,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { AddInstancesConfig config = createInstanceConfig(populatedTask.newBuilder()); expectAuth(ROLE, true); expectNoCronJob(); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); storageUtil.expectTaskFetch(Query.jobScoped(JOB_KEY).active()); expect(taskIdGenerator.generate(populatedTask, 1)) .andReturn(TASK_ID); @@ -1687,7 +1681,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { AddInstancesConfig config = createInstanceConfig(populatedTask.newBuilder()); expectAuth(ROLE, true); expectNoCronJob(); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); storageUtil.expectTaskFetch(Query.jobScoped(JOB_KEY).active()); expect(taskIdGenerator.generate(populatedTask, 1)) .andReturn(TASK_ID); @@ -1743,7 +1737,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { @Test public void testReleaseLock() throws Exception { expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); lockManager.releaseLock(LOCK); control.replay(); @@ -1769,7 +1763,7 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest { @Test public void testReleaseLockFailed() throws Exception { expectAuth(ROLE, true); - lockManager.validateIfLocked(LOCK_KEY, Optional.of(LOCK)); + lockManager.validateIfLocked(LOCK_KEY, java.util.Optional.of(LOCK)); expectLastCall().andThrow(new LockException("Failed")); control.replay();
