@Override public Set<HeldLocksToken> getTokens(LockClient client) { Preconditions.checkNotNull(client); if (client.isAnonymous()) { throw new IllegalArgumentException("client must not be anonymous"); } else if (client.equals(INTERNAL_LOCK_GRANT_CLIENT)) { throw new IllegalArgumentException("Illegal client!"); } ImmutableSet.Builder<HeldLocksToken> tokens = ImmutableSet.builder(); synchronized (lockClientMultimap) { for (HeldLocksToken token : lockClientMultimap.get(client)) { @Nullable HeldLocks<HeldLocksToken> heldLocks = heldLocksTokenMap.get(token); if ((heldLocks != null) && !isFrozen(heldLocks.locks.getKeys())) { tokens.add(token); } } } ImmutableSet<HeldLocksToken> tokenSet = tokens.build(); if (log.isTraceEnabled()) { log.trace(".getTokens({}) returns {}", client, Iterables.transform(tokenSet, TOKEN_TO_ID)); } return tokenSet; }
if (client.isAnonymous()) { heldLocksTokenMap.put(token, heldLocks); lockTokenReaperQueue.add(token);
private HeldLocksToken createHeldLocksToken(LockClient client, SortedLockCollection<LockDescriptor> lockDescriptorMap, LockCollection<? extends ClientAwareReadWriteLock> heldLocksMap, TimeDuration lockTimeout, @Nullable Long versionId, String requestThread) { while (true) { BigInteger tokenId = new BigInteger(RANDOM_BIT_COUNT, randomPool.getSecureRandom()); long expirationDateMs = currentTimeMillis() + lockTimeout.toMillis(); HeldLocksToken token = new HeldLocksToken(tokenId, client, currentTimeMillis(), expirationDateMs, lockDescriptorMap, lockTimeout, versionId, requestThread); HeldLocks<HeldLocksToken> heldLocks = HeldLocks.of(token, heldLocksMap); if (heldLocksTokenMap.putIfAbsent(token, heldLocks) == null) { lockTokenReaperQueue.add(token); if (!client.isAnonymous()) { lockClientMultimap.put(client, token); } return token; } log.error("Lock ID collision! " + "Count of held tokens = {}" + "; random bit count = {}", SafeArg.of("heldTokenCount", heldLocksTokenMap.size()), SafeArg.of("randomBitCount", RANDOM_BIT_COUNT)); } }
@Test public void testSerializationDeserialization() throws Exception { LockClient lockClient = new LockClient("foo"); LockClient deserializedLockClient = mapper.readValue(mapper.writeValueAsString(lockClient), LockClient.class); assertThat(lockClient.getClientId(), is(deserializedLockClient.getClientId())); assertThat(lockClient.isAnonymous(), is(deserializedLockClient.isAnonymous())); }