public class LocalLockMediator<T> extends Object
This is not just an optimization to reduce network traffic. Locks written by JanusGraph to a distributed key-value store contain an identifier, the "Rid", which is unique only to the process level. The Rid can't tell which transaction in a process holds any given lock. This class prevents two transactions in a single process from concurrently writing the same lock to a distributed key-value store.
Constructor and Description |
---|
LocalLockMediator(String name,
TimestampProvider times) |
Modifier and Type | Method and Description |
---|---|
boolean |
lock(KeyColumn kc,
T requester,
Instant expires)
Acquire the lock specified by
kc . |
String |
toString() |
boolean |
unlock(KeyColumn kc,
T requester)
Release the lock specified by
kc and which was previously
locked by requester , if it is possible to release it. |
public LocalLockMediator(String name, TimestampProvider times)
public boolean lock(KeyColumn kc, T requester, Instant expires)
kc
.
For any particular key-column, whatever value of requestor
is
passed to this method must also be passed to the associated later call to
unlock(org.janusgraph.diskstorage.util.KeyColumn, T)
.
If some requestor r
calls this method on a KeyColumn k
and this method returns true, then subsequent calls to this method by
r
on l
merely attempt to update the expiresAt
timestamp. This differs from typical lock re-entrance: multiple successful
calls to this method do not require an equal number of calls to
#unlock()
. One #unlock()
call is enough, no matter how
many times a requester
called lock
beforehand. Note that
updating the timestamp may fail, in which case the lock is considered to
have expired and the calling context should assume it no longer holds the
lock specified by kc
.
The current implementation of this method returns true when given an
expiresAt
argument in the past. Future implementations may return
false instead.
kc
- lock identifierrequester
- the object locking kc
expires
- instant at which this lock will automatically expirepublic boolean unlock(KeyColumn kc, T requester)
kc
and which was previously
locked by requester
, if it is possible to release it.kc
- lock identifierrequester
- the object which previously locked kc
Copyright © 2012–2023. All rights reserved.