@Override @Nullable public HeldLocksGrant refreshGrant(HeldLocksGrant grant) { Preconditions.checkNotNull(grant); @Nullable HeldLocks<HeldLocksGrant> heldLocks = heldLocksGrantMap.get(grant); if (heldLocks == null) { if (log.isTraceEnabled()) { log.trace(".refreshGrant({}) returns null", grant.getGrantId().toString(Character.MAX_RADIX)); } return null; } long now = currentTimeMillis(); long expirationDateMs = now + heldLocks.realToken.getLockTimeout().toMillis(); heldLocksGrantMap.replace(grant, heldLocks, new HeldLocks<HeldLocksGrant>( heldLocks.realToken.refresh(expirationDateMs), heldLocks.locks)); heldLocks = heldLocksGrantMap.get(grant); if (heldLocks == null) { if (log.isTraceEnabled()) { log.trace(".refreshGrant({}) returns null", grant.getGrantId().toString(Character.MAX_RADIX)); } return null; } HeldLocksGrant refreshedGrant = heldLocks.realToken; logIfAbnormallyOld(refreshedGrant, now); if (log.isTraceEnabled()) { log.trace(".refreshGrant({}) returns {}", grant.getGrantId().toString(Character.MAX_RADIX), refreshedGrant.getGrantId().toString(Character.MAX_RADIX)); } return refreshedGrant; }
@Override public HeldLocksToken useGrant(LockClient client, HeldLocksGrant grant) { Preconditions.checkNotNull(client); Preconditions.checkArgument(client != INTERNAL_LOCK_GRANT_CLIENT); Preconditions.checkNotNull(grant); @Nullable HeldLocks<HeldLocksGrant> heldLocks = heldLocksGrantMap.remove(grant); if (heldLocks == null) { log.warn("Tried to use invalid grant: {} (grant ID {})", UnsafeArg.of("grant", grant), SafeArg.of("grantId", grant.getGrantId())); throw new IllegalArgumentException("grant is invalid: " + grant); } HeldLocksGrant realGrant = heldLocks.realToken; changeOwner(heldLocks.locks, INTERNAL_LOCK_GRANT_CLIENT, client); HeldLocksToken token = createHeldLocksToken(client, realGrant.getLockDescriptors(), heldLocks.locks, realGrant.getLockTimeout(), realGrant.getVersionId(), "Converted from Grant, Missing Thread Name"); if (log.isTraceEnabled()) { log.trace(".useGrant({}, {}) (grant ID {}) returns {} (token ID {})", SafeArg.of("client", client), UnsafeArg.of("grant", grant), SafeArg.of("grantId", grant.getGrantId()), UnsafeArg.of("token", token), SafeArg.of("tokenId", token.getTokenId())); } return token; }
SafeArg.of("tokenId", token.getTokenId()), UnsafeArg.of("grant", grant), SafeArg.of("grantId", grant.getGrantId()));
Assert.assertNull(grantToken.getClient()); validToken = server.useGrant(client2, grantToken.getGrantId()); Assert.assertNotNull(validToken); Assert.assertEquals(client2, validToken.getClient());