LockFactory
, PropertySetCallback
ConcurrentPool
abstract class AbstractPool extends java.lang.Object implements LockFactory
LockFactory
are implemented. Subclasses must implement the
createLockTable()
method and make it return the desired
LockTable
object.
Modifier and Type | Field | Description |
---|---|---|
(package private) int |
deadlockMonitor |
True if all deadlocks errors should be logged.
|
protected LockTable |
lockTable |
The complete set of locks in the system
MT - immutable - content dynamic : LockSet is ThreadSafe |
Modifier | Constructor | Description |
---|---|---|
protected |
AbstractPool() |
Modifier and Type | Method | Description |
---|---|---|
boolean |
anyoneBlocked() |
Returns true if locks by anyone are blocking anyone else
|
Serviceable |
apply(java.lang.String key,
java.io.Serializable value,
java.util.Dictionary p) |
Apply a property change.
|
boolean |
areLocksHeld(CompatibilitySpace compatibilitySpace) |
Return true if locks are held in this space
MT - thread safe |
boolean |
areLocksHeld(CompatibilitySpace compatibilitySpace,
java.lang.Object group) |
Return true if locks are held in this group and this space.
|
void |
clearLimit(CompatibilitySpace compatibilitySpace,
java.lang.Object group) |
Clear a limit set by setLimit.
|
CompatibilitySpace |
createCompatibilitySpace(LockOwner owner) |
Create an object which can be used as a compatibility space within this
lock manager.
|
protected abstract LockTable |
createLockTable() |
Create the lock table that contains the mapping from
Lockable s to locks. |
private void |
getAndApply(boolean dbOnly,
java.util.Dictionary p,
java.lang.String key) |
|
int |
getWaitTimeout() |
Get the lock timeout in milliseconds.
|
private static int |
getWaitValue(java.lang.String value,
int defaultValue) |
|
void |
init(boolean dbOnly,
java.util.Dictionary p) |
Initialize the properties for this callback.
|
boolean |
isLockHeld(CompatibilitySpace compatibilitySpace,
java.lang.Object group,
Lockable ref,
java.lang.Object qualifier) |
Check to see if a specific lock is held.
|
boolean |
lockObject(CompatibilitySpace compatibilitySpace,
java.lang.Object group,
Lockable ref,
java.lang.Object qualifier,
int timeout) |
Lock a specific object with a timeout.
|
java.util.Enumeration |
makeVirtualLockTable() |
Routines to support lock diagnostics VTIs for the benefit of VirtualLockTable
|
java.io.Serializable |
map(java.lang.String key,
java.io.Serializable value,
java.util.Dictionary p) |
Map a proposed new value for a property to an official value.
|
(package private) static boolean |
noLockWait(int timeout,
CompatibilitySpace compat) |
Check if we should not wait for locks, given the specified timeout and
compatibility space.
|
void |
setLimit(CompatibilitySpace compatibilitySpace,
java.lang.Object group,
int limit,
Limit callback) |
Install a limit that is called when the size of the group exceeds
the required limit.
|
void |
transfer(CompatibilitySpace compatibilitySpace,
java.lang.Object oldGroup,
java.lang.Object newGroup) |
Transfer a set of locks from one group to another.
|
int |
unlock(CompatibilitySpace compatibilitySpace,
java.lang.Object group,
Lockable ref,
java.lang.Object qualifier) |
Unlock a specific object
MT - thread safe |
void |
unlockGroup(CompatibilitySpace compatibilitySpace,
java.lang.Object group) |
Unlock a group of objects.
|
void |
unlockGroup(CompatibilitySpace compatibilitySpace,
java.lang.Object group,
Matchable key) |
Unlock all locks on a group that match the passed in value.
|
boolean |
validate(java.lang.String key,
java.io.Serializable value,
java.util.Dictionary p) |
Validate a property change.
|
boolean |
zeroDurationlockObject(CompatibilitySpace compatibilitySpace,
Lockable ref,
java.lang.Object qualifier,
int timeout) |
Lock an object with zero duration within a compatibility space,
waits up to timeout milli-seconds for the object to become unlocked.
|
protected final LockTable lockTable
int deadlockMonitor
protected abstract LockTable createLockTable()
Lockable
s to locks.LockTable
interfacepublic boolean lockObject(CompatibilitySpace compatibilitySpace, java.lang.Object group, Lockable ref, java.lang.Object qualifier, int timeout) throws StandardException
lockObject
in interface LockFactory
compatibilitySpace
- object defining compatibility spacegroup
- handle of group, must be private to a thread.ref
- reference to object to be lockedqualifier
- A qualification of the request.timeout
- the maximum time to wait in milliseconds, LockFactory.NO_WAIT means don't wait.StandardException
- Standard Derby error policyLockFactory.lockObject(org.apache.derby.iapi.services.locks.CompatibilitySpace, java.lang.Object, org.apache.derby.iapi.services.locks.Lockable, java.lang.Object, int)
public CompatibilitySpace createCompatibilitySpace(LockOwner owner)
createCompatibilitySpace
in interface LockFactory
owner
- the owner of the compatibility spacepublic int unlock(CompatibilitySpace compatibilitySpace, java.lang.Object group, Lockable ref, java.lang.Object qualifier)
unlock
in interface LockFactory
compatibilitySpace
- object defining compatibility spacegroup
- handle of group.ref
- Reference to object to be unlocked.qualifier
- qualifier of lock to be unlockedLockFactory.unlock(org.apache.derby.iapi.services.locks.CompatibilitySpace, java.lang.Object, org.apache.derby.iapi.services.locks.Lockable, java.lang.Object)
public void unlockGroup(CompatibilitySpace compatibilitySpace, java.lang.Object group)
unlockGroup
in interface LockFactory
group
- handle of group that objects were locked with.
If group is null then this call is equivilent to unlockAll().compatibilitySpace
- object defining compatibility spaceLockFactory.unlockGroup(org.apache.derby.iapi.services.locks.CompatibilitySpace, java.lang.Object)
public void unlockGroup(CompatibilitySpace compatibilitySpace, java.lang.Object group, Matchable key)
LockFactory
unlockGroup
in interface LockFactory
public void transfer(CompatibilitySpace compatibilitySpace, java.lang.Object oldGroup, java.lang.Object newGroup)
transfer
in interface LockFactory
LockFactory.transfer(org.apache.derby.iapi.services.locks.CompatibilitySpace, java.lang.Object, java.lang.Object)
public boolean anyoneBlocked()
anyoneBlocked
in interface LockFactory
public boolean areLocksHeld(CompatibilitySpace compatibilitySpace, java.lang.Object group)
areLocksHeld
in interface LockFactory
group
- handle of group that objects were locked with.LockFactory.areLocksHeld(org.apache.derby.iapi.services.locks.CompatibilitySpace, java.lang.Object)
public boolean areLocksHeld(CompatibilitySpace compatibilitySpace)
areLocksHeld
in interface LockFactory
LockFactory.areLocksHeld(org.apache.derby.iapi.services.locks.CompatibilitySpace, java.lang.Object)
public boolean zeroDurationlockObject(CompatibilitySpace compatibilitySpace, Lockable ref, java.lang.Object qualifier, int timeout) throws StandardException
LockFactory
Zero duration means the lock is released as soon as it is obtained.
A compatibility space in an space where lock requests are assumed to be
compatible and granted by the lock manager if the trio
{compatibilitySpace, ref, qualifier} are equal (i.e. reference equality
for qualifier and compatibilitySpace, equals() method for ref).
Granted by the lock manager means that the Lockable object may or may
not be queried to see if the request is compatible.
A compatibility space is not assumed to be owned by a single thread.
zeroDurationlockObject
in interface LockFactory
compatibilitySpace
- object defining compatibility spaceref
- reference to object to be lockedqualifier
- A qualification of the request.timeout
- the maximum time to wait in milliseconds, LockFactory.NO_WAIT means don't wait.StandardException
- if a deadlock has occurred (message id
will be LockFactory.Deadlock), or if the wait for the lock timed
out (message id will be LockFactory.TimeOut), or if another thread
interrupted this thread while it was waiting for the lock (this will
be a StandardException with a nested InterruptedException, and the
message id will be LockFactory.InterruptedExceptionId), or if
any other error occurs when locking the objectpublic boolean isLockHeld(CompatibilitySpace compatibilitySpace, java.lang.Object group, Lockable ref, java.lang.Object qualifier)
LockFactory
isLockHeld
in interface LockFactory
public int getWaitTimeout()
getWaitTimeout
in interface LockFactory
public void setLimit(CompatibilitySpace compatibilitySpace, java.lang.Object group, int limit, Limit callback)
LockFactory
setLimit
in interface LockFactory
Limit
public void clearLimit(CompatibilitySpace compatibilitySpace, java.lang.Object group)
clearLimit
in interface LockFactory
static boolean noLockWait(int timeout, CompatibilitySpace compat)
C_LockFactory.NO_WAIT
or
the LockOwner
has the noWait
flag set, we shouldn't
wait for locks.timeout
- the specified timeoutcompat
- the compatibility spacetrue
if we shouldn't wait for locks, false
otherwisepublic java.util.Enumeration makeVirtualLockTable()
makeVirtualLockTable
in interface LockFactory
public void init(boolean dbOnly, java.util.Dictionary p)
PropertySetCallback
Code within an init() method should use the 3 argument PropertyUtil method getPropertyFromSet() to obtain a property's value.
init
in interface PropertySetCallback
dbOnly
- true if only per-database properties are to be looked atp
- the complete set of per-database properties.private void getAndApply(boolean dbOnly, java.util.Dictionary p, java.lang.String key)
public boolean validate(java.lang.String key, java.io.Serializable value, java.util.Dictionary p) throws StandardException
PropertySetCallback
validate
in interface PropertySetCallback
key
- Property key for the property being setvalue
- proposed new value for the property being set or null if
the property is being dropped.p
- Property set before the change. SettingProperty may read but
must never change p.StandardException
- Oh well.public Serviceable apply(java.lang.String key, java.io.Serializable value, java.util.Dictionary p) throws StandardException
PropertySetCallback
apply
in interface PropertySetCallback
key
- Property key for the property being setvalue
- proposed new value for the property being set or null if
the property is being dropped.p
- Property set before the change. SettingProperty may read but
must never change p.StandardException
- Oh well.public java.io.Serializable map(java.lang.String key, java.io.Serializable value, java.util.Dictionary p)
PropertySetCallback
map
in interface PropertySetCallback
key
- Property key for the property being setvalue
- proposed new value for the property being set or null if
the property is being dropped.p
- Property set before the change. SettingProperty may read but
must never change p.private static int getWaitValue(java.lang.String value, int defaultValue)
Apache Derby V10.14 Internals - Copyright © 2004,2018 The Apache Software Foundation. All Rights Reserved.