@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;
}