|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.sleepycat.je.txn.LockManager
public abstract class LockManager
LockManager manages locks. Note that locks are counted as taking up part of the JE cache;
Field Summary | |
---|---|
(package private) Latch[] |
lockTableLatches
|
(package private) int |
nLockTables
|
(package private) static long |
TOTAL_LOCKIMPL_OVERHEAD
|
(package private) static long |
TOTAL_THINLOCKIMPL_OVERHEAD
|
Constructor Summary | |
---|---|
LockManager(EnvironmentImpl envImpl)
|
Method Summary | |
---|---|
(package private) abstract LockAttemptResult |
attemptLock(Long lsn,
Locker locker,
LockType type,
boolean nonBlockingRequest,
boolean jumpAheadOfWaiters)
|
(package private) LockAttemptResult |
attemptLockInternal(Long lsn,
Locker locker,
LockType type,
boolean nonBlockingRequest,
boolean jumpAheadOfWaiters,
int lockTableIndex)
|
(package private) abstract void |
demote(long lsn,
Locker locker)
Demote a lock from write to read. |
(package private) void |
demoteInternal(long lsn,
Locker locker,
int lockTableIndex)
Do the real work of demote. |
void |
dump()
Debugging |
(package private) abstract void |
dumpLockTable(StatGroup tableStats,
boolean clear)
Dump the lock table to the lock stats. |
(package private) void |
dumpLockTableInternal(StatGroup tableStats,
int i,
boolean clear)
Do the real work of dumpLockTableInternal. |
String |
dumpToString()
|
void |
envConfigUpdate(DbConfigManager configMgr,
EnvironmentMutableConfig ignore)
Process notifications of mutable property changes. |
(package private) int |
getLockTableIndex(long lsn)
|
(package private) int |
getLockTableIndex(Long lsn)
|
abstract LockType |
getOwnedLockType(Long lsn,
Locker locker)
Returns the LockType if the given locker owns a lock on the given node, or null if the lock is not owned. |
(package private) LockType |
getOwnedLockTypeInternal(Long lsn,
Locker locker,
int lockTableIndex)
|
abstract Set<LockInfo> |
getOwners(Long lsn)
Returns the Lockers that own a lock on the given LSN. |
(package private) Set<LockInfo> |
getOwnersInternal(Long lsn,
int lockTableIndex)
|
Iterator<ThreadLocker> |
getThreadLockers(Thread thread)
Returns an iterator over all thread lockers for the given thread, or an empty iterator if none. |
(package private) abstract Locker |
getWriteOwnerLocker(Long lsn)
|
(package private) Locker |
getWriteOwnerLockerInternal(Long lsn,
int lockTableIndex)
Do the real work of getWriteOwnerLocker. |
(package private) abstract boolean |
isLocked(Long lsn)
Test the status of the lock on LSN. |
(package private) boolean |
isLockedInternal(Long lsn,
int lockTableIndex)
Do the real work of isLocked. |
abstract boolean |
isLockUncontended(Long lsn)
|
(package private) boolean |
isLockUncontendedInternal(Long lsn,
int lockTableIndex)
|
(package private) abstract boolean |
isOwner(Long lsn,
Locker locker,
LockType type)
Return true if this locker owns this a lock of this type on given node. |
(package private) boolean |
isOwnerInternal(Long lsn,
Locker locker,
LockType type,
int lockTableIndex)
Do the real work of isOwner. |
(package private) abstract boolean |
isWaiter(Long lsn,
Locker locker)
Return true if this locker is waiting on this lock. |
(package private) boolean |
isWaiterInternal(Long lsn,
Locker locker,
int lockTableIndex)
Do the real work of isWaiter. |
StatGroup |
loadStats(StatsConfig config)
|
LockGrantType |
lock(long lsn,
Locker locker,
LockType type,
long timeout,
boolean nonBlockingRequest,
boolean jumpAheadOfWaiters,
DatabaseImpl database)
Attempt to acquire a lock of type on lsn. |
LockStats |
lockStat(StatsConfig config)
Statistics |
(package private) abstract Lock |
lookupLock(Long lsn)
|
(package private) Lock |
lookupLockInternal(Long lsn,
int lockTableIndex)
|
(package private) abstract LockConflictException |
makeTimeoutMsg(boolean isLockNotTxnTimeout,
Locker locker,
long lsn,
LockType type,
LockGrantType grantType,
Lock useLock,
long timeout,
long start,
long now,
DatabaseImpl database)
Create a informative lock or txn timeout message. |
(package private) LockConflictException |
makeTimeoutMsgInternal(boolean isLockNotTxnTimeout,
Locker locker,
long lsn,
LockType type,
LockGrantType grantType,
Lock useLock,
long timeout,
long start,
long now,
DatabaseImpl database)
Do the real work of creating an lock or txn timeout message. |
(package private) LockConflictException |
newLockNotAvailableException(Locker locker,
String msg)
This method should always be called instead of explicitly creating LockNotAvailableException, to ensure that je.lock.oldLockExceptions is enforced. |
(package private) abstract int |
nOwners(Long lsn)
Return the number of owners of this lock. |
(package private) int |
nOwnersInternal(Long lsn,
int lockTableIndex)
Do the real work of nWaiters. |
(package private) abstract int |
nWaiters(Long lsn)
Return the number of waiters for this lock. |
(package private) int |
nWaitersInternal(Long lsn,
int lockTableIndex)
Do the real work of nWaiters. |
void |
registerThreadLocker(ThreadLocker locker)
Called when a ThreadLocker is created. |
boolean |
release(long lsn,
Locker locker)
Release a lock and possibly notify any waiters that they have been granted the lock. |
(package private) abstract Set<Locker> |
releaseAndFindNotifyTargets(long lsn,
Locker locker)
Release the lock, and return the set of new owners to notify, if any. |
(package private) Set<Locker> |
releaseAndFindNotifyTargetsInternal(long lsn,
Locker locker,
int lockTableIndex)
Do the real work of releaseAndFindNotifyTargets |
(package private) static void |
setLockTableDump(boolean enable)
Called when the je.txn.dumpLocks property is changed. |
protected abstract LockAttemptResult |
stealLock(Long lsn,
Locker locker,
LockType lockType,
MemoryBudget mb)
|
protected LockAttemptResult |
stealLockInternal(Long lsn,
Locker locker,
LockType lockType,
MemoryBudget mb,
int lockTableIndex)
|
void |
unregisterThreadLocker(ThreadLocker locker)
Called when a ThreadLocker is closed. |
(package private) abstract boolean |
validateOwnership(Long lsn,
Locker locker,
LockType type,
boolean flushFromWaiters,
MemoryBudget mb)
|
(package private) boolean |
validateOwnershipInternal(Long lsn,
Locker locker,
LockType type,
boolean flushFromWaiters,
MemoryBudget mb,
int lockTableIndex)
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
static final long TOTAL_LOCKIMPL_OVERHEAD
static final long TOTAL_THINLOCKIMPL_OVERHEAD
int nLockTables
Latch[] lockTableLatches
Constructor Detail |
---|
public LockManager(EnvironmentImpl envImpl)
Method Detail |
---|
public void envConfigUpdate(DbConfigManager configMgr, EnvironmentMutableConfig ignore)
envConfigUpdate
in interface EnvConfigObserver
static void setLockTableDump(boolean enable)
int getLockTableIndex(Long lsn)
int getLockTableIndex(long lsn)
public LockGrantType lock(long lsn, Locker locker, LockType type, long timeout, boolean nonBlockingRequest, boolean jumpAheadOfWaiters, DatabaseImpl database) throws LockConflictException, DatabaseException
lsn
- The LSN to lock.locker
- The Locker to lock this on behalf of.type
- The lock type requested.timeout
- milliseconds to time out after if lock couldn't be
obtained. 0 means block indefinitely. Not used if nonBlockingRequest
is true.nonBlockingRequest
- if true, means don't block if lock can't be
acquired, and ignore the timeout parameter.jumpAheadOfWaiters
- grant the lock before other waiters, if any.
LockConflictException
- if lock could not be acquired.
IllegalArgumentException
- via db/cursor read/write methods, if
non-transactional access to a replicated environment is attempted, and
read-uncommitted is not specified.
DatabaseException
public abstract Set<LockInfo> getOwners(Long lsn)
Set<LockInfo> getOwnersInternal(Long lsn, int lockTableIndex)
public abstract LockType getOwnedLockType(Long lsn, Locker locker)
LockType getOwnedLockTypeInternal(Long lsn, Locker locker, int lockTableIndex)
public abstract boolean isLockUncontended(Long lsn)
boolean isLockUncontendedInternal(Long lsn, int lockTableIndex)
abstract Lock lookupLock(Long lsn) throws DatabaseException
DatabaseException
Lock lookupLockInternal(Long lsn, int lockTableIndex)
abstract LockAttemptResult attemptLock(Long lsn, Locker locker, LockType type, boolean nonBlockingRequest, boolean jumpAheadOfWaiters) throws DatabaseException
DatabaseException
LockAttemptResult attemptLockInternal(Long lsn, Locker locker, LockType type, boolean nonBlockingRequest, boolean jumpAheadOfWaiters, int lockTableIndex) throws DatabaseException
DatabaseException
abstract LockConflictException makeTimeoutMsg(boolean isLockNotTxnTimeout, Locker locker, long lsn, LockType type, LockGrantType grantType, Lock useLock, long timeout, long start, long now, DatabaseImpl database) throws DatabaseException
DatabaseException
LockConflictException makeTimeoutMsgInternal(boolean isLockNotTxnTimeout, Locker locker, long lsn, LockType type, LockGrantType grantType, Lock useLock, long timeout, long start, long now, DatabaseImpl database)
LockConflictException newLockNotAvailableException(Locker locker, String msg)
public boolean release(long lsn, Locker locker) throws DatabaseException
lsn
- The LSN of the lock to release.
DatabaseException
abstract Set<Locker> releaseAndFindNotifyTargets(long lsn, Locker locker) throws DatabaseException
DatabaseException
Set<Locker> releaseAndFindNotifyTargetsInternal(long lsn, Locker locker, int lockTableIndex)
abstract void demote(long lsn, Locker locker) throws DatabaseException
lock
- The lock to release. If null, use LSN to find locklocker
-
DatabaseException
void demoteInternal(long lsn, Locker locker, int lockTableIndex)
abstract boolean isLocked(Long lsn) throws DatabaseException
lsn
- The LSN to check.
DatabaseException
boolean isLockedInternal(Long lsn, int lockTableIndex)
abstract boolean isOwner(Long lsn, Locker locker, LockType type) throws DatabaseException
DatabaseException
boolean isOwnerInternal(Long lsn, Locker locker, LockType type, int lockTableIndex)
abstract boolean isWaiter(Long lsn, Locker locker) throws DatabaseException
DatabaseException
boolean isWaiterInternal(Long lsn, Locker locker, int lockTableIndex)
abstract int nWaiters(Long lsn) throws DatabaseException
DatabaseException
int nWaitersInternal(Long lsn, int lockTableIndex)
abstract int nOwners(Long lsn) throws DatabaseException
DatabaseException
int nOwnersInternal(Long lsn, int lockTableIndex)
abstract Locker getWriteOwnerLocker(Long lsn) throws DatabaseException
DatabaseException
Locker getWriteOwnerLockerInternal(Long lsn, int lockTableIndex)
abstract boolean validateOwnership(Long lsn, Locker locker, LockType type, boolean flushFromWaiters, MemoryBudget mb) throws DatabaseException
DatabaseException
boolean validateOwnershipInternal(Long lsn, Locker locker, LockType type, boolean flushFromWaiters, MemoryBudget mb, int lockTableIndex)
protected abstract LockAttemptResult stealLock(Long lsn, Locker locker, LockType lockType, MemoryBudget mb) throws DatabaseException
DatabaseException
protected LockAttemptResult stealLockInternal(Long lsn, Locker locker, LockType lockType, MemoryBudget mb, int lockTableIndex) throws DatabaseException
DatabaseException
public void registerThreadLocker(ThreadLocker locker)
public void unregisterThreadLocker(ThreadLocker locker)
public Iterator<ThreadLocker> getThreadLockers(Thread thread)
public LockStats lockStat(StatsConfig config) throws DatabaseException
DatabaseException
public StatGroup loadStats(StatsConfig config)
abstract void dumpLockTable(StatGroup tableStats, boolean clear) throws DatabaseException
DatabaseException
void dumpLockTableInternal(StatGroup tableStats, int i, boolean clear)
public void dump() throws DatabaseException
DatabaseException
public String dumpToString() throws DatabaseException
DatabaseException
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |