@Test public void lockDelegatesToLockService() throws InterruptedException { com.palantir.lock.LockRequest legacyRequest = com.palantir.lock.LockRequest.builder(buildLockMap(LockMode.WRITE)) .blockForAtMost(SimpleTimeDuration.of(TIMEOUT, TimeUnit.MILLISECONDS)) .build(); when(lockService.lock(LockClient.ANONYMOUS.getClientId(), legacyRequest)).thenReturn(LOCK_REFRESH_TOKEN); assertEquals(LockResponse.successful(LOCK_TOKEN_V2), timelock.lock( LockRequest.of(ImmutableSet.of(LOCK_A, LOCK_B), TIMEOUT))); verify(lockService).lock(LockClient.ANONYMOUS.getClientId(), legacyRequest); }
.blockForAtMost(SimpleTimeDuration.of(1000, TimeUnit.MILLISECONDS)) .build(); LockRequest request2 = LockRequest.builder( LockCollections.of(ImmutableSortedMap.of(DESCRIPTOR_2, LockMode.WRITE))) .blockForAtMost(SimpleTimeDuration.of(1000, TimeUnit.MILLISECONDS)) .build();
lock2, LockMode.READ)) .timeoutAfter(SimpleTimeDuration.of(200, TimeUnit.MILLISECONDS)) .blockForAtMost( SimpleTimeDuration.of(200, TimeUnit.MILLISECONDS)) .build(); lock1, LockMode.READ, lock2, LockMode.WRITE)) .timeoutAfter(SimpleTimeDuration.of(200, TimeUnit.MILLISECONDS)) .blockForAtMost( SimpleTimeDuration.of(2000, TimeUnit.MILLISECONDS)) .build();
Object readResolve() { Builder builder = new Builder(lockMap).timeoutAfter(lockTimeout); if (lockGroupBehavior == LockGroupBehavior.LOCK_AS_MANY_AS_POSSIBLE) { builder.lockAsManyAsPossible(); } if (blockingMode == BlockingMode.DO_NOT_BLOCK) { builder.doNotBlock(); } else if (blockingMode == BlockingMode.BLOCK_UNTIL_TIMEOUT) { builder.blockForAtMost(blockingDuration); } else if (blockingMode == BlockingMode.BLOCK_INDEFINITELY_THEN_RELEASE) { builder.lockAndRelease(); } if (versionId != null) { builder.withLockedInVersionId(versionId); } builder.withCreatingThreadName(creatingThreadName); return builder.build(); } }
lock1, LockMode.READ, lock2, LockMode.WRITE)) .withLockedInVersionId(10) .blockForAtMost(SimpleTimeDuration.of(10, TimeUnit.MILLISECONDS)).build(); long currentTimeMs = System.currentTimeMillis(); LockResponse response = server.lockWithFullLockResponse(client, request); LockResponse response1 = server.lockWithFullLockResponse(LockClient.ANONYMOUS, LockRequest.builder( ImmutableSortedMap.of(lock2, LockMode.READ)) .blockForAtMost(SimpleTimeDuration.of(10, TimeUnit.MILLISECONDS)).build()); Assert.assertFalse(response1.success()); Assert.assertFalse(response1.getLockHolders().isEmpty()); .blockForAtMost(SimpleTimeDuration.of(100, TimeUnit.MILLISECONDS)).build()); Assert.assertTrue(response1.success()); Assert.assertTrue(response1.getLockHolders().isEmpty()); .blockForAtMost(SimpleTimeDuration.of(0, TimeUnit.MILLISECONDS)).build()); Assert.assertTrue(response.success()); Assert.assertTrue(response.getLockHolders().isEmpty()); ImmutableSortedMap.of(lock2, LockMode.READ)) .withLockedInVersionId(5) .blockForAtMost(SimpleTimeDuration.of(10, TimeUnit.MILLISECONDS)).build()); Assert.assertTrue(response.success()); Assert.assertTrue(response.getLockHolders().isEmpty()); .blockForAtMost(SimpleTimeDuration.of(10, TimeUnit.MILLISECONDS)).build()); Assert.assertTrue(response.success()); Assert.assertTrue(response.getLockHolders().isEmpty());
.blockForAtMost(SimpleTimeDuration.of(1, TimeUnit.MILLISECONDS)).build(); Assert.fail(); } catch (IllegalStateException expected) { .blockForAtMost(SimpleTimeDuration.of(1, TimeUnit.MILLISECONDS)) .blockForAtMost(SimpleTimeDuration.of(1, TimeUnit.MILLISECONDS)).build(); Assert.fail(); } catch (IllegalStateException expected) {
.blockForAtMost(SimpleTimeDuration.of(0, TimeUnit.SECONDS)).build(); try { server.lockWithFullLockResponse(client, request2); Assert.assertNull(token2); request2 = LockRequest.builder(ImmutableSortedMap.of(lock, LockMode.READ)) .blockForAtMost(server.getLockServerOptions().getMaxAllowedBlockingDuration()).build(); token2 = server.lockWithFullLockResponse(client2, request2).getToken(); Assert.assertNotNull(token2); server.getLockServerOptions().getMaxAllowedBlockingDuration().toSeconds() + 10, TimeUnit.SECONDS); request2 = LockRequest.builder(ImmutableSortedMap.of( lock, LockMode.READ)).blockForAtMost(beyondMaxDuration).build(); TimeDuration negativeDuration = SimpleTimeDuration.of(-10, TimeUnit.SECONDS); try { request2 = LockRequest.builder(ImmutableSortedMap.of( lock, LockMode.READ)).blockForAtMost(negativeDuration).build(); Assert.fail(); } catch (IllegalArgumentException expected) {
lock1, LockMode.READ, lock3, LockMode.WRITE)) .lockAsManyAsPossible() .blockForAtMost(SimpleTimeDuration.of(50, TimeUnit.MILLISECONDS)).build(); response = server.lockWithFullLockResponse(LockClient.ANONYMOUS, request); Assert.assertTrue(response.success()); lock2, LockMode.READ, lock4, LockMode.WRITE)) .lockAsManyAsPossible() .blockForAtMost(SimpleTimeDuration.of(50, TimeUnit.MILLISECONDS)).build(); response = server.lockWithFullLockResponse(LockClient.ANONYMOUS, request); Assert.assertTrue(response.success()); lock1, LockMode.READ, lock2, LockMode.READ)) .lockAsManyAsPossible() .blockForAtMost(SimpleTimeDuration.of(50, TimeUnit.MILLISECONDS)).build(); response = server.lockWithFullLockResponse(LockClient.ANONYMOUS, request); Assert.assertTrue(response.success()); lock3, LockMode.WRITE, lock4, LockMode.WRITE)) .lockAsManyAsPossible() .blockForAtMost(SimpleTimeDuration.of(50, TimeUnit.MILLISECONDS)).build(); response = server.lockWithFullLockResponse(LockClient.ANONYMOUS, request); Assert.assertFalse(response.success());
ImmutableSortedMap.of(lock1, LockMode.READ, lock2, LockMode.WRITE)) .lockAsManyAsPossible() .blockForAtMost(SimpleTimeDuration.of(100, TimeUnit.MILLISECONDS)).build(); response = server.lockWithFullLockResponse(client, request3); Assert.assertTrue(response.success());
Object readResolve() { Builder builder = new Builder(lockMap).timeoutAfter(lockTimeout); if (lockGroupBehavior == LockGroupBehavior.LOCK_AS_MANY_AS_POSSIBLE) { builder.lockAsManyAsPossible(); } if (blockingMode == BlockingMode.DO_NOT_BLOCK) { builder.doNotBlock(); } else if (blockingMode == BlockingMode.BLOCK_UNTIL_TIMEOUT) { builder.blockForAtMost(blockingDuration); } else if (blockingMode == BlockingMode.BLOCK_INDEFINITELY_THEN_RELEASE) { builder.lockAndRelease(); } if (versionId != null) { builder.withLockedInVersionId(versionId); } builder.withCreatingThreadName(creatingThreadName); return builder.build(); } }
private com.palantir.lock.LockRequest toLegacyLockRequest(LockRequest request) { SortedMap<LockDescriptor, LockMode> locks = buildLockMap(request.getLockDescriptors(), LockMode.WRITE); return com.palantir.lock.LockRequest.builder(locks) .blockForAtMost(SimpleTimeDuration.of(request.getAcquireTimeoutMs(), TimeUnit.MILLISECONDS)) .build(); }