com.sleepycat.je.txn
Interface Lock

All Known Implementing Classes:
LockImpl, ThinLockImpl

interface Lock

A Lock embodies the lock state of a NodeId. It includes a set of owners and a list of waiters.


Method Summary
 void demote(Locker locker)
          Downgrade a write lock to a read lock.
 void flushWaiter(Locker locker, MemoryBudget mb, int lockTableIndex)
          Remove this locker from the waiter list.
 java.util.Set<LockInfo> getOwnersClone()
          Get a new Set of the owners.
 java.util.List<LockInfo> getWaitersListClone()
          Get a list of waiters for debugging and error messages.
 Locker getWriteOwnerLocker()
          Return the locker that has a write ownership on this lock.
 boolean isOwnedWriteLock(Locker locker)
          Return true if locker is an owner of this Lock and this is a write lock.
 boolean isOwner(Locker locker, LockType lockType)
          Return true if locker is an owner of this Lock for lockType, false otherwise.
 boolean isThin()
           
 boolean isWaiter(Locker locker)
          Return true if locker is a waiter on this Lock.
 LockAttemptResult lock(LockType requestType, Locker locker, boolean nonBlockingRequest, MemoryBudget mb, int lockTableIndex)
          Attempts to acquire the lock and returns the LockGrantType.
 int nOwners()
           
 int nWaiters()
           
 java.util.Set<Locker> release(Locker locker, MemoryBudget mb, int lockTableIndex)
          Releases a lock and moves the next waiter(s) to the owners.
 java.lang.String toString()
          Debug dumper.
 Lock transfer(java.lang.Long nodeId, Locker currentLocker, Locker destLocker, MemoryBudget mb, int lockTableIndex)
          Transfer a lock from one transaction to another.
 Lock transferMultiple(java.lang.Long nodeId, Locker currentLocker, Locker[] destLockers, MemoryBudget mb, int lockTableIndex)
          Transfer a lock from one transaction to many others.
 

Method Detail

getWaitersListClone

java.util.List<LockInfo> getWaitersListClone()
Get a list of waiters for debugging and error messages.


flushWaiter

void flushWaiter(Locker locker,
                 MemoryBudget mb,
                 int lockTableIndex)
Remove this locker from the waiter list.


getOwnersClone

java.util.Set<LockInfo> getOwnersClone()
Get a new Set of the owners.


isOwner

boolean isOwner(Locker locker,
                LockType lockType)
Return true if locker is an owner of this Lock for lockType, false otherwise. This method is only used by unit tests.


isOwnedWriteLock

boolean isOwnedWriteLock(Locker locker)
Return true if locker is an owner of this Lock and this is a write lock.


isWaiter

boolean isWaiter(Locker locker)
Return true if locker is a waiter on this Lock. This method is only used by unit tests.


nWaiters

int nWaiters()

nOwners

int nOwners()

lock

LockAttemptResult lock(LockType requestType,
                       Locker locker,
                       boolean nonBlockingRequest,
                       MemoryBudget mb,
                       int lockTableIndex)
                       throws DatabaseException
Attempts to acquire the lock and returns the LockGrantType. Assumes we hold the lockTableLatch when entering this method.

Throws:
DatabaseException

release

java.util.Set<Locker> release(Locker locker,
                              MemoryBudget mb,
                              int lockTableIndex)
Releases a lock and moves the next waiter(s) to the owners.

Returns:
- null if we were not the owner, - a non-empty set if owners should be notified after releasing, - an empty set if no notification is required.

demote

void demote(Locker locker)
Downgrade a write lock to a read lock.


transfer

Lock transfer(java.lang.Long nodeId,
              Locker currentLocker,
              Locker destLocker,
              MemoryBudget mb,
              int lockTableIndex)
              throws DatabaseException
Transfer a lock from one transaction to another. Make sure that this destination locker is only present as a single reader or writer.

Throws:
DatabaseException

transferMultiple

Lock transferMultiple(java.lang.Long nodeId,
                      Locker currentLocker,
                      Locker[] destLockers,
                      MemoryBudget mb,
                      int lockTableIndex)
                      throws DatabaseException
Transfer a lock from one transaction to many others. Only really needed for case where a write handle lock is being transferred to multiple read handles.

Throws:
DatabaseException

getWriteOwnerLocker

Locker getWriteOwnerLocker()
Return the locker that has a write ownership on this lock. If no write owner exists, return null.


isThin

boolean isThin()

toString

java.lang.String toString()
Debug dumper.

Overrides:
toString in class java.lang.Object


Copyright (c) 2004,2008 Oracle. All rights reserved.