|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.jboss.cache.lock.AbstractLockManager
org.jboss.cache.lock.FqnLockManager
org.jboss.cache.lock.MVCCLockManager
public class MVCCLockManager
This lock manager acquires and releases locks based on the Fqn passed in and not on the node itself. The main benefit here is that locks can be acquired and held even for nonexistent nodes.
Uses lock striping so that a fixed number of locks are maintained for the entire cache, and not a single lock per node. This implementation only acquires exclusive WRITE locks, and throws an exception if you attempt to use it to acquire a READ lock. JBoss Cache's MVCC design doesn't use read locks at all. The concept of lock owners is implicit in this implementation and any owners passed in as parameters (where required) will be ignored. SeeOwnableReentrantLock
for details on how ownership
is determined.
OwnableReentrantLock
Field Summary |
---|
Fields inherited from class org.jboss.cache.lock.AbstractLockManager |
---|
configuration, lockAcquisitionTimeout |
Constructor Summary | |
---|---|
MVCCLockManager()
|
Method Summary | |
---|---|
int |
getConcurrencyLevel()
|
int |
getNumberOfLocksAvailable()
|
int |
getNumberOfLocksHeld()
|
Collection<Object> |
getReadOwners(Fqn f)
Retrieves the read lock owners, if any, for the current Fqn. |
Object |
getWriteOwner(Fqn f)
Retrieves the write lock owner, if any, for the current Fqn. |
void |
injectDependencies(DataContainer dataContainer,
CacheSPI cache,
TransactionManager transactionManager,
InvocationContextContainer invocationContextContainer)
|
boolean |
isLocked(Fqn fqn)
Returns true if the node is locked (either for reading or writing) by anyone, and false otherwise. |
boolean |
isLocked(NodeSPI n,
LockType lockType)
Returns true if the node is locked (either for reading or writing) by anyone, and false otherwise. |
boolean |
lock(Fqn fqn,
LockType lockType,
Object owner)
Acquires a lock of type lockType, for a given owner, on a specific Node in the cache, denoted by fqn. |
boolean |
lock(Fqn fqn,
LockType lockType,
Object owner,
long timeoutMillis)
Acquires a lock of type lockType, for a given owner, on a specific Node in the cache, denoted by fqn. |
boolean |
lockAll(NodeSPI node,
LockType lockType,
Object owner)
Locks the node and all child nodes, acquiring lock of type specified for the owner specified. |
boolean |
lockAll(NodeSPI node,
LockType lockType,
Object owner,
long timeout)
Locks the node and all child nodes, acquiring lock of type specified for the owner specified. |
boolean |
lockAll(NodeSPI node,
LockType lockType,
Object owner,
long timeout,
boolean excludeInternalFqns)
Locks the node and all child nodes, acquiring lock of type specified for the owner specified. |
boolean |
lockAllAndRecord(Fqn fqn,
LockType lockType,
InvocationContext ctx)
Locks the node and all child nodes, acquiring lock of type specified for the owner specified. |
boolean |
lockAllAndRecord(NodeSPI node,
LockType lockType,
InvocationContext ctx)
Locks the node and all child nodes, acquiring lock of type specified for the owner specified. |
boolean |
lockAndRecord(Fqn fqn,
LockType lockType,
InvocationContext ctx)
Acquires a lock of type lockType, on a specific Node in the cache, denoted by fqn. |
boolean |
ownsLock(Fqn fqn,
LockType lockType,
Object owner)
Tests whether a given owner owns a lock of lockType on a particular Fqn. |
boolean |
ownsLock(Fqn fqn,
Object owner)
Tests whether a given owner owns any sort of lock on a particular Fqn. |
String |
printLockInfo()
Prints lock information for all locks. |
String |
printLockInfo(NodeSPI node)
Prints lock information about a node (and its children) to a String. |
void |
setInternalFqns()
|
void |
startLockManager()
|
void |
unlock(Fqn fqn,
Object owner)
Releases the lock passed in, held by the specified owner |
void |
unlock(InvocationContext ctx)
Releases locks present in an invocation context and transaction entry, if one is available. |
void |
unlockAll(NodeSPI node)
Releases locks on a given node and all children for all owners. |
void |
unlockAll(NodeSPI<?,?> node,
Object owner)
Releases locks on a given node and all children for a given owner. |
Methods inherited from class org.jboss.cache.lock.FqnLockManager |
---|
getReadOwners, getWriteOwner, isLocked, lock, lock, lockAndRecord, ownsLock, unlock |
Methods inherited from class org.jboss.cache.lock.AbstractLockManager |
---|
getLockOwner, injectConfiguration, setLockAcquisitionTimeout |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public MVCCLockManager()
Method Detail |
---|
public void injectDependencies(DataContainer dataContainer, CacheSPI cache, TransactionManager transactionManager, InvocationContextContainer invocationContextContainer)
public void startLockManager()
public void setInternalFqns()
public boolean lock(Fqn fqn, LockType lockType, Object owner) throws InterruptedException
LockManager
Configuration.getLockAcquisitionTimeout()
milliseconds and give up if it is unable to acquire the required lock.
fqn
- Fqn to locklockType
- type of lock to acquireowner
- owner to acquire the lock for
InterruptedException
public boolean lock(Fqn fqn, LockType lockType, Object owner, long timeoutMillis) throws InterruptedException
LockManager
fqn
- Fqn to locklockType
- type of lock to acquireowner
- owner to acquire the lock fortimeoutMillis
- maximum length of time to wait for (in millis)
InterruptedException
public boolean lockAndRecord(Fqn fqn, LockType lockType, InvocationContext ctx) throws InterruptedException
LockManager
Option.getLockAcquisitionTimeout()
and, if this is unset, the default timeout
set in Configuration.getLockAcquisitionTimeout()
is used.
In addition, any locks acquired are added to the context OR transaction entry using InvocationContext.addLock(Object)
.
The owner for the lock is determined by passing the invocation context to LockManager.getLockOwner(org.jboss.cache.InvocationContext)
.
fqn
- Fqn to locklockType
- type of lock to acquirectx
- invocation context associated with this invocation
InterruptedException
public void unlock(Fqn fqn, Object owner)
LockManager
fqn
- Fqn of the node to unlockowner
- lock ownerpublic void unlock(InvocationContext ctx)
LockManager
LockManager.getLockOwner(org.jboss.cache.InvocationContext)
ctx
- invocation context to inspectpublic boolean lockAll(NodeSPI node, LockType lockType, Object owner) throws InterruptedException
LockManager
Configuration.getLockAcquisitionTimeout()
milliseconds and give up if it is unable to acquire the required lock.
node
- Node to locklockType
- type of lock to acquireowner
- owner to acquire the lock for
InterruptedException
public boolean lockAll(NodeSPI node, LockType lockType, Object owner, long timeout) throws InterruptedException
LockManager
node
- Node to locklockType
- type of lock to acquireowner
- owner to acquire the lock fortimeout
- maximum length of time to wait for (in millis)
InterruptedException
public boolean lockAll(NodeSPI node, LockType lockType, Object owner, long timeout, boolean excludeInternalFqns) throws InterruptedException
LockManager
node
- Node to locklockType
- type of lock to acquireowner
- owner to acquire the lock fortimeout
- maximum length of time to wait for (in millis)excludeInternalFqns
- if true, any Fqns that are internal are excluded.
InterruptedException
public boolean lockAllAndRecord(NodeSPI node, LockType lockType, InvocationContext ctx) throws InterruptedException
LockManager
InvocationContext.addLock(Object)
.
The owner for the lock is determined by passing the invocation context to LockManager.getLockOwner(org.jboss.cache.InvocationContext)
.
node
- Node to locklockType
- type of lock to acquirectx
- invocation context associated with this invocation
InterruptedException
public boolean lockAllAndRecord(Fqn fqn, LockType lockType, InvocationContext ctx) throws InterruptedException
LockManager
InvocationContext.addLock(Object)
.
The owner for the lock is determined by passing the invocation context to LockManager.getLockOwner(org.jboss.cache.InvocationContext)
.
fqn
- Node to locklockType
- type of lock to acquirectx
- invocation context associated with this invocation
InterruptedException
public void unlockAll(NodeSPI<?,?> node, Object owner)
LockManager
node
- node to unlockowner
- lock ownerpublic void unlockAll(NodeSPI node)
LockManager
node
- node to unlockpublic boolean ownsLock(Fqn fqn, LockType lockType, Object owner)
LockManager
fqn
- fqn to testlockType
- type of lock to test forowner
- owner
public boolean ownsLock(Fqn fqn, Object owner)
LockManager
fqn
- fqn to testowner
- owner
public boolean isLocked(Fqn fqn)
LockManager
fqn
- node to inspect
public boolean isLocked(NodeSPI n, LockType lockType)
LockManager
n
- node to inspectlockType
- lockType to test for
public Object getWriteOwner(Fqn f)
LockManager
f
- Fqn to inspect
public Collection<Object> getReadOwners(Fqn f)
LockManager
f
- Fqn to inspect
public String printLockInfo(NodeSPI node)
LockManager
node
- node to inspectpublic String printLockInfo()
LockManager
public int getConcurrencyLevel()
public int getNumberOfLocksHeld()
public int getNumberOfLocksAvailable()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |