try { previousThreadName = updateThreadName(request); for (Entry<LockDescriptor, LockMode> entry : request.getLockDescriptors().entries()) { if (blockingMode == BlockingMode.BLOCK_INDEFINITELY_THEN_RELEASE && !descriptorToLockMap.asMap().containsKey(entry.getKey())) {
static SanitizedLockRequestProgress create(LockServiceStateDebugger.LockRequestProgress progress, LockDescriptorMapper descriptorMapper, String clientId) { return ImmutableSanitizedLockRequestProgress.builder() .totalNumLocks(progress.getTotalNumLocks()) .numLocksAcquired(progress.getNumLocksAcquired()) .nextLock(progress.getNextLock().map(descriptorMapper::getDescriptorMapping) .orElse(UNKNOWN_NEXT_LOCK_MESSAGE)) .requests( StreamSupport.stream(progress.getRequest().getLockDescriptors().entries().spliterator(), false) .map(descriptor -> SimpleLockRequest.of( progress.getRequest(), descriptorMapper.getDescriptorMapping(descriptor.getKey()), descriptor.getValue(), clientId)) .collect(Collectors.toList())) .build(); } }
private LockRequest requestContaining(String table) { return argThat( argument -> argument != null && argument.getLockDescriptors().stream() .anyMatch(descriptor -> descriptor.getLockIdAsString().contains(table))); }
private LockRequestProgress getSuspectedLockProgress( LockClient client, LockRequest request) { int locksHeld = 0; for (Map.Entry<LockDescriptor, LockMode> entry : request.getLockDescriptors().entries()) { ClientAwareReadWriteLock clientAwareLock = descriptorToLockMap.get(entry.getKey()); KnownClientLock knownClientLock = clientAwareLock.get(client, entry.getValue()); if (!knownClientLock.isHeld()) { return ImmutableLockRequestProgress.builder() .request(request) .nextLock(entry.getKey()) .numLocksAcquired(locksHeld) .totalNumLocks(request.getLockDescriptors().size()) .build(); } locksHeld++; } // This means that it looks like we hold ALL of the locks return ImmutableLockRequestProgress.builder() .request(request) .numLocksAcquired(locksHeld) .totalNumLocks(request.getLockDescriptors().size()) .build(); }
&& (locks.size() < request.getLockDescriptors().size()))) { if (log.isTraceEnabled()) { logNullResponse(client, request, null);
/** Convert a write lock to a read lock */ @Test public void testConvertWriteToRead() throws Exception { final LockRequest request1 = LockRequest.builder(ImmutableSortedMap.of(lock1, LockMode.WRITE)) .build(); final LockRequest request2 = LockRequest.builder(ImmutableSortedMap.of(lock1, LockMode.READ)) .build(); HeldLocksToken token1 = server.lockWithFullLockResponse(client, request1).getToken(); Assert.assertNotNull(token1); Assert.assertEquals(client, token1.getClient()); Assert.assertEquals(request1.getLockDescriptors(), token1.getLockDescriptors()); Future<?> future = executor.submit((Callable<Void>) () -> { barrier.await(); HeldLocksToken validToken = server.lockWithFullLockResponse(LockClient.ANONYMOUS, request2).getToken(); Assert.assertNotNull(validToken); Assert.assertEquals(LockClient.ANONYMOUS, validToken.getClient()); Assert.assertEquals(request2.getLockDescriptors(), validToken.getLockDescriptors()); Assert.assertTrue(server.unlock(validToken)); return null; }); barrier.await(); Thread.sleep(50); HeldLocksToken token2 = server.lockWithFullLockResponse(client, request2).getToken(); Assert.assertNotNull(token2); Assert.assertEquals(client, token2.getClient()); Assert.assertEquals(request2.getLockDescriptors(), token2.getLockDescriptors()); Assert.assertTrue(server.unlock(token1)); future.get(); Assert.assertTrue(server.unlock(token2)); Assert.assertTrue(server.getTokens(client).isEmpty()); }
Assert.assertNotNull(token); Assert.assertEquals(LockClient.ANONYMOUS, token.getClient()); Assert.assertEquals(request.getLockDescriptors(), token.getLockDescriptors()); server.unlock(token);
Assert.assertNotNull(token); Assert.assertEquals(client, token.getClient()); Assert.assertEquals(request.getLockDescriptors(), token.getLockDescriptors()); Thread.sleep(51); Assert.assertTrue(token.getExpirationDateMs() - System.currentTimeMillis() < 450); Assert.assertNotNull(token); Assert.assertEquals(LockClient.ANONYMOUS, token.getClient()); Assert.assertEquals(request.getLockDescriptors(), token.getLockDescriptors()); Assert.assertEquals(request.getLockDescriptors(), grant.getLocks()); Thread.sleep(51); Assert.assertTrue(grant.getExpirationDateMs() - System.currentTimeMillis() < 450); Assert.assertNotNull(token); Assert.assertEquals(client, token.getClient()); Assert.assertEquals(request.getLockDescriptors(), token.getLockDescriptors()); server.unlock(token); Assert.assertTrue(server.getTokens(client).isEmpty());
Assert.assertNotNull(token1); Assert.assertEquals(LockClient.ANONYMOUS, token1.getClient()); Assert.assertEquals(request1.getLockDescriptors(), token1.getLockDescriptors()); Assert.assertTrue(currentTimeMs + lockTimeoutMs <= token1.getExpirationDateMs()); Assert.assertTrue(token1.getExpirationDateMs()
LockRequest.Builder newRequest = LockRequest.builder(request.getLockDescriptors()); newRequest.doNotBlock(); newRequest.timeoutAfter(request.getLockTimeout());
Assert.assertNotNull(token1); Assert.assertEquals(client, token1.getClient()); Assert.assertEquals(request.getLockDescriptors(), token1.getLockDescriptors()); Assert.assertTrue(currentTimeMs + lockTimeoutMs <= token1.getExpirationDateMs()); Assert.assertTrue(token1.getExpirationDateMs()
numSuccess.set(numSuccess.get() + 1); Assert.assertEquals(Integer.toString(clientID), token.getClient().getClientId()); Assert.assertEquals(request.getLockDescriptors(), token.getLockDescriptors()); try { Thread.sleep(50);
Assert.assertNotNull(token1); Assert.assertEquals(client, token1.getClient()); Assert.assertEquals(request1.getLockDescriptors(), token1.getLockDescriptors()); Assert.assertNotNull(token2); Assert.assertEquals(LockClient.ANONYMOUS, token2.getClient()); Assert.assertEquals(request2.getLockDescriptors(), token2.getLockDescriptors());
Assert.assertEquals(client, token1.getClient()); Assert.assertEquals(10, (long) token1.getVersionId()); Assert.assertEquals(request.getLockDescriptors(), token1.getLockDescriptors()); Assert.assertTrue(currentTimeMs + lockTimeoutMs <= token1.getExpirationDateMs()); Assert.assertTrue(token1.getExpirationDateMs()
Assert.assertNotNull(token1); Assert.assertEquals(client, token1.getClient()); Assert.assertEquals(request.getLockDescriptors(), token1.getLockDescriptors()); Assert.assertTrue(currentTimeMs + lockTimeoutMs <= token1.getExpirationDateMs()); Assert.assertTrue(token1.getExpirationDateMs()
LockRequest.Builder newRequest = LockRequest.builder(request.getLockDescriptors()); newRequest.doNotBlock(); newRequest.timeoutAfter(request.getLockTimeout());