Class LockTracking<T extends Lock>
- java.lang.Object
-
- org.eclipse.rdf4j.common.concurrent.locks.diagnostics.LockTracking<T>
-
- All Implemented Interfaces:
LockMonitoring<T>
@InternalUseOnly public class LockTracking<T extends Lock> extends java.lang.Object implements LockMonitoring<T>
Full tracking of locks with simple deadlock detection and logging as well as automatic release of abandoned locks (same as LockCleaner).
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
LockTracking.SimpleLock<T extends Lock>
-
Nested classes/interfaces inherited from interface org.eclipse.rdf4j.common.concurrent.locks.diagnostics.LockMonitoring
LockMonitoring.Wrapper<T extends Lock>
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.String
alias
private static ConcurrentCleaner
cleaner
private int
currentWaitToCollect
private java.util.Map<LockTracking.SimpleLock<T>,java.lang.ref.WeakReference<LockTracking.SimpleLock<T>>>
locks
static int
LOGGED_STALLED_LOCKS_MINIMUM_WAIT_TO_COLLECT
private org.slf4j.Logger
logger
private long
previousActiveLocksSignature
private long
previousCleanup
private static java.util.concurrent.atomic.AtomicLong
seq
private boolean
stacktrace
private java.util.concurrent.locks.ReentrantLock
staleLoggingLock
private Lock.ExtendedSupplier<T>
supplier
private int
waitToCollect
-
Fields inherited from interface org.eclipse.rdf4j.common.concurrent.locks.diagnostics.LockMonitoring
INITIAL_WAIT_TO_COLLECT
-
-
Constructor Summary
Constructors Constructor Description LockTracking(boolean stacktrace, java.lang.String alias, org.slf4j.Logger logger, int waitToCollect, Lock.ExtendedSupplier<T> supplier)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private long
getActiveLocksSignature()
Lock
getLock()
Lock
getLock(java.lang.String alias)
private LockTracking.SimpleLock<T>
getLockInner(T lock, java.lang.String alias)
private void
logStalledLocks()
Lock
register(T lock)
boolean
requiresManualCleanup()
void
runCleanup()
Lock
tryLock()
void
unregister(Lock lock)
T
unsafeInnerLock(Lock lock)
-
-
-
Field Detail
-
LOGGED_STALLED_LOCKS_MINIMUM_WAIT_TO_COLLECT
public static final int LOGGED_STALLED_LOCKS_MINIMUM_WAIT_TO_COLLECT
- See Also:
- Constant Field Values
-
logger
private final org.slf4j.Logger logger
-
cleaner
private static final ConcurrentCleaner cleaner
-
seq
private static final java.util.concurrent.atomic.AtomicLong seq
-
staleLoggingLock
private final java.util.concurrent.locks.ReentrantLock staleLoggingLock
-
locks
private final java.util.Map<LockTracking.SimpleLock<T extends Lock>,java.lang.ref.WeakReference<LockTracking.SimpleLock<T extends Lock>>> locks
-
supplier
private final Lock.ExtendedSupplier<T extends Lock> supplier
-
stacktrace
private final boolean stacktrace
-
waitToCollect
private final int waitToCollect
-
alias
private final java.lang.String alias
-
currentWaitToCollect
private int currentWaitToCollect
-
previousCleanup
private long previousCleanup
-
previousActiveLocksSignature
private long previousActiveLocksSignature
-
-
Constructor Detail
-
LockTracking
public LockTracking(boolean stacktrace, java.lang.String alias, org.slf4j.Logger logger, int waitToCollect, Lock.ExtendedSupplier<T> supplier)
-
-
Method Detail
-
getActiveLocksSignature
private long getActiveLocksSignature()
-
logStalledLocks
private void logStalledLocks()
-
runCleanup
public void runCleanup()
- Specified by:
runCleanup
in interfaceLockMonitoring<T extends Lock>
-
getLock
public Lock getLock() throws java.lang.InterruptedException
- Specified by:
getLock
in interfaceLockMonitoring<T extends Lock>
- Throws:
java.lang.InterruptedException
-
getLock
public Lock getLock(java.lang.String alias) throws java.lang.InterruptedException
- Specified by:
getLock
in interfaceLockMonitoring<T extends Lock>
- Throws:
java.lang.InterruptedException
-
unsafeInnerLock
public T unsafeInnerLock(Lock lock)
- Specified by:
unsafeInnerLock
in interfaceLockMonitoring<T extends Lock>
-
tryLock
public Lock tryLock()
- Specified by:
tryLock
in interfaceLockMonitoring<T extends Lock>
-
getLockInner
private LockTracking.SimpleLock<T> getLockInner(T lock, java.lang.String alias)
-
requiresManualCleanup
public boolean requiresManualCleanup()
- Specified by:
requiresManualCleanup
in interfaceLockMonitoring<T extends Lock>
-
register
public Lock register(T lock)
- Specified by:
register
in interfaceLockMonitoring<T extends Lock>
-
unregister
public void unregister(Lock lock)
- Specified by:
unregister
in interfaceLockMonitoring<T extends Lock>
-
-