|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.sleepycat.je.txn.Locker
public abstract class Locker
Locker instances are JE's route to locking and transactional support. This class is the abstract base class for BasicLocker, ThreadLocker, Txn and AutoTxn. Locker instances are in fact only a transaction shell to get to the lock manager, and don't guarantee transactional semantics. Txn and AutoTxn instances are both truely transactional, but have different ending behaviors.
Field Summary | |
---|---|
protected boolean |
defaultNoWait
|
protected Map |
deleteInfo
|
protected EnvironmentImpl |
envImpl
|
protected Map |
handleLockToHandleMap
|
protected Map |
handleToHandleLockMap
|
protected long |
id
|
protected LockManager |
lockManager
|
protected long |
lockTimeOutMillis
|
protected boolean |
readUncommittedDefault
|
protected Thread |
thread
The thread that created this locker. |
Constructor Summary | |
---|---|
Locker()
For reading from the log. |
|
Locker(EnvironmentImpl envImpl,
boolean readUncommittedDefault,
boolean noWait)
Create a locker id. |
Method Summary | |
---|---|
void |
addDeleteInfo(BIN bin,
Key deletedKey)
Add delete information, to be added to the inCompressor queue when the transaction ends. |
(package private) abstract void |
addLock(Long nodeId,
Lock lock,
LockType type,
LockGrantType grantStatus,
MemoryBudget mb)
Add a lock to set owned by this transaction. |
void |
addToHandleMaps(Long handleLockId,
Database databaseHandle)
Remember how handle locks and handles match up. |
protected abstract void |
checkState(boolean ignoreCalledByAbort)
|
abstract LockStats |
collectStats(LockStats stats)
Get lock count, for per transaction lock stats, for internal debugging. |
abstract boolean |
createdNode(long nodeId)
|
void |
demoteLock(long nodeId)
Revert this lock from a write lock to a read lock. |
void |
dumpLockTable()
Dump lock table, for debugging |
protected abstract long |
generateId(TxnManager txnManager)
A Locker has to generate its next id. |
abstract boolean |
getAbortKnownDeleted(long nodeId)
|
abstract long |
getAbortLsn(long nodeId)
|
long |
getId()
|
long |
getLockTimeout()
Get the lock timeout period for this transaction, in milliseconds |
abstract Txn |
getTxnLocker()
Returns the underlying Txn if the locker is transactional, or null if the locker is non-transactional. |
(package private) long |
getTxnStartMillis()
|
long |
getTxnTimeOut()
|
(package private) Lock |
getWaitingFor()
|
boolean |
isHandleLockTransferrable()
|
abstract boolean |
isReadCommittedIsolation()
Returns whether the isolation level of this locker is read-committed. |
boolean |
isReadUncommittedDefault()
|
abstract boolean |
isSerializableIsolation()
Returns whether the isolation level of this locker is serializable. |
(package private) boolean |
isTimedOut()
|
abstract boolean |
isTransactional()
Returns whether this locker is transactional. |
abstract LockResult |
lock(long nodeId,
LockType lockType,
DatabaseImpl database)
Get a lock of the given type on the given nodeId. |
abstract void |
markDeleteAtTxnEnd(DatabaseImpl db,
boolean deleteAtCommit,
MemoryBudget mb)
Database operations like remove and truncate leave behind residual DatabaseImpls that must be purged at transaction commit or abort. |
(package private) abstract void |
moveWriteToReadLock(long nodeId,
Lock lock,
MemoryBudget mb)
A lock is being demoted. |
abstract Locker |
newNonTxnLocker()
Creates a fresh non-transactional locker, while retaining any transactional locks held by this locker. |
abstract void |
operationEnd()
The equivalent of calling operationEnd(true). |
abstract void |
operationEnd(boolean operationOK)
Different types of transactions do different things when the operation ends. |
void |
operationEnd(OperationStatus status)
A SUCCESS status equals operationOk. |
abstract void |
registerCursor(CursorImpl cursor)
Tell this transaction about a cursor. |
void |
releaseLock(long nodeId)
Release the lock on this LN and remove from the transaction's owning set. |
abstract void |
releaseNonTxnLocks()
Releases any non-transactional locks held by this locker. |
protected void |
rememberHandleWriteLock(Long lockId)
If necessary, remember that this txn once owned a handle lock. |
(package private) abstract void |
removeLock(long nodeId,
Lock lock)
Remove the lock from the set owned by this transaction. |
abstract void |
setHandleLockOwner(boolean operationOK,
Database dbHandle,
boolean dbIsClosing)
We're at the end of an operation. |
void |
setLockTimeout(long timeOutMillis)
Set the lock timeout period for any locks in this transaction, in milliseconds. |
(package private) void |
setOnlyAbortable()
Set the state of a transaction to ONLY_ABORTABLE. |
void |
setTxnTimeout(long timeOutMillis)
Set the timeout period for this transaction, in milliseconds. |
(package private) void |
setWaitingFor(Lock lock)
|
boolean |
sharesLocksWith(Locker other)
Returns whether this locker can share locks with the given locker. |
String |
toString()
|
void |
transferHandleLock(Database dbHandle,
Locker destLocker,
boolean demoteToRead)
|
(package private) void |
transferHandleLockToHandle(Database dbHandle)
The currentTxn passes responsiblity for this db handle lock to a txn owned by the Database object. |
abstract void |
unRegisterCursor(CursorImpl cursor)
Remove a cursor from this txn. |
(package private) void |
unregisterHandle(Database dbHandle)
Remove this Database from the protected Database handle set |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
protected EnvironmentImpl envImpl
protected LockManager lockManager
protected long id
protected boolean readUncommittedDefault
protected boolean defaultNoWait
protected long lockTimeOutMillis
protected Map deleteInfo
protected Map handleLockToHandleMap
protected Map handleToHandleLockMap
protected Thread thread
Constructor Detail |
---|
public Locker(EnvironmentImpl envImpl, boolean readUncommittedDefault, boolean noWait) throws DatabaseException
lockManager
- lock manager for this environmentreadUncommittedDefault
- if true, this transaction does
read-uncommitted by defaultnoWait
- if true, non-blocking lock requests are used.
DatabaseException
Locker()
Method Detail |
---|
protected abstract long generateId(TxnManager txnManager)
public long getId()
public long getLockTimeout()
public void setLockTimeout(long timeOutMillis)
public void setTxnTimeout(long timeOutMillis)
public boolean isReadUncommittedDefault()
Lock getWaitingFor()
void setWaitingFor(Lock lock)
void setOnlyAbortable()
protected abstract void checkState(boolean ignoreCalledByAbort) throws DatabaseException
DatabaseException
public abstract LockResult lock(long nodeId, LockType lockType, DatabaseImpl database) throws DatabaseException
DatabaseException
public void releaseLock(long nodeId) throws DatabaseException
DatabaseException
public void demoteLock(long nodeId) throws DatabaseException
DatabaseException
public abstract boolean isTransactional()
public abstract boolean isSerializableIsolation()
public abstract boolean isReadCommittedIsolation()
public abstract Txn getTxnLocker()
public abstract Locker newNonTxnLocker() throws DatabaseException
In general, transactional lockers return 'this' when this method is called, while non-transactional lockers return a new instance.
DatabaseException
public abstract void releaseNonTxnLocks() throws DatabaseException
In general, transactional lockers do nothing when this method is called, while non-transactional lockers release all locks as if operationEnd were called.
DatabaseException
public boolean sharesLocksWith(Locker other)
All lockers share locks with a BuddyLocker whose buddy is this locker. To support BuddyLocker when overriding this method, always return true if this implementation (super.sharesLocksWith(...)) returns true.
public abstract void operationEnd() throws DatabaseException
DatabaseException
public abstract void operationEnd(boolean operationOK) throws DatabaseException
operationOK
- is whether the operation succeeded, since
that may impact ending behavior. (i.e for AutoTxn)
DatabaseException
public abstract void setHandleLockOwner(boolean operationOK, Database dbHandle, boolean dbIsClosing) throws DatabaseException
DatabaseException
public void operationEnd(OperationStatus status) throws DatabaseException
DatabaseException
public abstract void registerCursor(CursorImpl cursor) throws DatabaseException
DatabaseException
public abstract void unRegisterCursor(CursorImpl cursor) throws DatabaseException
DatabaseException
public abstract long getAbortLsn(long nodeId) throws DatabaseException
DatabaseException
public abstract boolean getAbortKnownDeleted(long nodeId) throws DatabaseException
DatabaseException
public abstract void markDeleteAtTxnEnd(DatabaseImpl db, boolean deleteAtCommit, MemoryBudget mb) throws DatabaseException
DatabaseException
public void addDeleteInfo(BIN bin, Key deletedKey) throws DatabaseException
DatabaseException
abstract void addLock(Long nodeId, Lock lock, LockType type, LockGrantType grantStatus, MemoryBudget mb) throws DatabaseException
DatabaseException
public abstract boolean createdNode(long nodeId) throws DatabaseException
DatabaseException
abstract void removeLock(long nodeId, Lock lock) throws DatabaseException
DatabaseException
abstract void moveWriteToReadLock(long nodeId, Lock lock, MemoryBudget mb)
public abstract LockStats collectStats(LockStats stats) throws DatabaseException
DatabaseException
boolean isTimedOut() throws DatabaseException
DatabaseException
public long getTxnTimeOut()
long getTxnStartMillis()
void unregisterHandle(Database dbHandle)
public void addToHandleMaps(Long handleLockId, Database databaseHandle)
public boolean isHandleLockTransferrable()
void transferHandleLockToHandle(Database dbHandle) throws DatabaseException
DatabaseException
public void transferHandleLock(Database dbHandle, Locker destLocker, boolean demoteToRead) throws DatabaseException
DatabaseException
protected void rememberHandleWriteLock(Long lockId)
public String toString()
toString
in class Object
public void dumpLockTable() throws DatabaseException
DatabaseException
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |