|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.derby.impl.sql.catalog.SequenceUpdater
public abstract class SequenceUpdater
An object cached in the data dictionary which manages new values for sequences. Note that this class must be public and have a 0-arg constructor in order to satisfy the Cacheable contract.
This is the abstract superclass of specific implementations for specific sequences. For instance, one subclass handles the ANSI/ISO sequences stored in SYSSEQUENCES. Another subclass could handle the sequences stored in Derby's identity columns.
This class does a couple tricky things:
Here is the algorithm pursued when the caller asks for the next number in a sequence:
If applications start seeing exceptions complaining that there is too much contention on a sequence generator, then we should improve this algorithm. Here are some options based on the idea that contention should go down if we increase the number of pre-allocated numbers:
Nested Class Summary | |
---|---|
static class |
SequenceUpdater.SyssequenceUpdater
Specific implementation of SequenceUpdater for the sequences managed by SYSSEQUENCES. |
Field Summary | |
---|---|
protected DataDictionaryImpl |
_dd
|
private long |
_lockTimeoutInMillis
|
protected SequenceGenerator |
_sequenceGenerator
|
protected java.lang.String |
_uuidString
|
Constructor Summary | |
---|---|
SequenceUpdater()
No-arg constructor to satisfy the Cacheable contract |
|
SequenceUpdater(DataDictionaryImpl dd)
Normal constructor |
Method Summary | |
---|---|
void |
clean(boolean forRemove)
Clean the object. |
void |
clearIdentity()
Put the object into the No Identity state. |
Cacheable |
createIdentity(java.lang.Object key,
java.lang.Object createParameter)
Create a new item. |
protected abstract SequenceGenerator |
createSequenceGenerator(TransactionController readOnlyTC)
Initialize the sequence generator. |
void |
getCurrentValueAndAdvance(NumberDataValue returnValue)
Get the next sequence number managed by this generator and advance the number. |
java.lang.Object |
getIdentity()
Get the identity of this object. |
private static LanguageConnectionContext |
getLCC()
|
protected int |
getLockTimeout()
Get the time we wait for a lock, in milliseconds--overridden by unit tests |
boolean |
isDirty()
Returns true of the object is dirty. |
private java.lang.Long |
peekAtCurrentValue()
Get the current value of the sequence generator without advancing it. |
Cacheable |
setIdentity(java.lang.Object key)
Set the identity of the object. |
private StandardException |
unimplementedFeature()
Report an unimplemented feature |
boolean |
updateCurrentValueOnDisk(java.lang.Long oldValue,
java.lang.Long newValue)
Update the value on disk. |
protected abstract boolean |
updateCurrentValueOnDisk(TransactionController tc,
java.lang.Long oldValue,
java.lang.Long newValue,
boolean wait)
Update the sequence value on disk. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected DataDictionaryImpl _dd
protected java.lang.String _uuidString
protected SequenceGenerator _sequenceGenerator
private long _lockTimeoutInMillis
Constructor Detail |
---|
public SequenceUpdater()
public SequenceUpdater(DataDictionaryImpl dd)
Method Detail |
---|
protected abstract SequenceGenerator createSequenceGenerator(TransactionController readOnlyTC) throws StandardException
Initialize the sequence generator. Work is done inside a read-only subtransaction of the session's execution transaction.
StandardException
protected abstract boolean updateCurrentValueOnDisk(TransactionController tc, java.lang.Long oldValue, java.lang.Long newValue, boolean wait) throws StandardException
Update the sequence value on disk. This method is first called with a read/write subtransaction of the session's execution transaction. If work can't be done there immediately, this method is called with the session's execution transaction.
tc
- The transaction to useoldValue
- Expected value on disk for this sequencenewValue
- The value to poke into the system table backing this sequencewait
- Whether to wait for a lock
StandardException
- May throw an exception if a lock can't be obtained.public void clean(boolean forRemove) throws StandardException
Cacheable
clean
in interface Cacheable
StandardException
- Standard Derby error policy.public boolean isDirty()
Cacheable
isDirty
in interface Cacheable
public java.lang.Object getIdentity()
Cacheable
getIdentity
in interface Cacheable
public void clearIdentity()
Cacheable
clearIdentity
in interface Cacheable
public Cacheable createIdentity(java.lang.Object key, java.lang.Object createParameter) throws StandardException
Cacheable
Create a new item and set the identity of the object to represent it.
The object will be in the No Identity state,
ie. it will have just been created or clearIdentity() was just called.
The object must copy the information out of key, not just store a reference to key
if the key is not immutable.
After this call the expression getIdentity().equals(key) must return true.
If the class of the object needs to change (e.g. to support a different format)
then the object should create a new object, call its initParameter() with the parameters
the original object was called with, set its identity and return a reference to it. The cache
manager will discard the reference to the old object.
If an exception is thrown the object must be left in the no-identity state.
MT - single thread required - Method must only be called be cache manager
and the cache manager will guarantee only one thread can be calling it.
createIdentity
in interface Cacheable
StandardException
- If forCreate is true and the object cannot be created.CacheManager.create(java.lang.Object, java.lang.Object)
public Cacheable setIdentity(java.lang.Object key) throws StandardException
Cacheable
Set the identity of the object to represent an item that already exists,
e.g. an existing container.
The object will be in the No Identity state,
ie. it will have just been created or clearIdentity() was just called.
The object must copy the information out of key, not just store a reference to key.
After this call the expression getIdentity().equals(key) must return true.
If the class of the object needs to change (e.g. to support a different format)
then the object should create a new object, call its initParameter() with the parameters
the original object was called with, set its identity and return a reference to it. The cache
manager will discard the reference to the old object.
If an exception is thrown the object must be left in the no-identity state.
MT - single thread required - Method must only be called be cache manager
and the cache manager will guarantee only one thread can be calling it.
setIdentity
in interface Cacheable
StandardException
- Thrown on errorCacheable.setIdentity(java.lang.Object)
public void getCurrentValueAndAdvance(NumberDataValue returnValue) throws StandardException
Get the next sequence number managed by this generator and advance the number. Could raise an exception if the legal range is exhausted and wrap-around is not allowed. Only one thread at a time is allowed through here. That synchronization is performed by the sequence generator itself.
returnValue
- This value is stuffed with the new sequence number.
StandardException
private java.lang.Long peekAtCurrentValue() throws StandardException
Get the current value of the sequence generator without advancing it. May return null if the generator is exhausted.
StandardException
public boolean updateCurrentValueOnDisk(java.lang.Long oldValue, java.lang.Long newValue) throws StandardException
Update the value on disk. First tries to update the value in a subtransaction. If that fails, falls back on the execution transaction. This is a callback method invoked by the sequence generator.
StandardException
protected int getLockTimeout()
private static LanguageConnectionContext getLCC()
private StandardException unimplementedFeature()
|
Built on Thu 2011-03-10 11:54:14+0000, from revision ??? | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |