Class RecoveryRecord
java.lang.Object
com.arjuna.ats.arjuna.StateManager
com.arjuna.ats.arjuna.coordinator.AbstractRecord
com.arjuna.ats.internal.arjuna.abstractrecords.RecoveryRecord
- Direct Known Subclasses:
PersistenceRecord
-
Field Summary
Fields inherited from class com.arjuna.ats.arjuna.StateManager
modifyingActions, objectModel, objectUid, synchronizationLock, usingActions
-
Constructor Summary
ConstructorDescriptionThis constructor is used to create a new instance of a RecoveryRecord. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Alter the current record with the one presented.boolean
doSave()
Should this record be saved in the intentions list? If the record is saved, then it may be recovered later in the event of a failure.protected final void
forgetAction
(boolean commit) void
Merge the current record with the one presented.int
nestedAbort causes the restore_state function of the object to be invoked passing it the saved ObjectState.int
nestedCommit does nothing since the passing of the state up to the parent action is handled by the record list merging system.int
A prepare for a nested transaction has occurred.void
print
(PrintWriter strm) Write information about this specific instance to the specified stream.boolean
restore_state
(InputObjectState os, int ot) During recovery, the transaction log is given to the recovery system and it will recreate a transaction instance to perform necessary recovery actions.boolean
save_state
(OutputObjectState os, int ot) When the transaction is required to make the intentions list persistent, it scans the list and asks each record whether or not it requires state to be saved (by calling doSave).void
boolean
Should we add the record presented to the intentions list?boolean
Should we alter the current record with the one presented?boolean
Should we merge the current record with the one presented?boolean
Should we replace the record presented with the current record?int
topLevelAbort for Recovery records implies the object state should be restored to the saved state exactly like a nested abort.int
topLevelCommit has nothing to do for RecoveryRecords as no changes have been made in the object store.int
topLevelPrepare can return PREPARE_READONLY to avoid topLevelCommit being called in the action commit casetype()
Re-implementation of abstract methods inherited from base class.int
typeIs()
value()
If this abstract record caused a heuristic then it should return an object which implementsHeuristicInformation
Methods inherited from class com.arjuna.ats.arjuna.coordinator.AbstractRecord
clearHeuristicDecision, create, equals, forgetHeuristic, getNext, getPrevious, getTypeOfObject, greaterThan, isPermittedTopLevelOnePhaseCommit, lessThan, nestedCleanup, nestedOnePhaseCommit, order, propagateOnAbort, propagateOnCommit, replace, setNext, setPrevious, topLevelCleanup, topLevelOnePhaseCommit
Methods inherited from class com.arjuna.ats.arjuna.StateManager
activate, activate, cleanup, createLists, deactivate, deactivate, deactivate, destroy, disable, forgetAction, get_uid, getCreationTimeMillis, getMutex, getObjectModel, getStore, getStoreRoot, loadObjectState, lockMutex, modified, objectType, packHeader, persist, rememberAction, setStatus, setupStore, setupStore, setupStore, status, terminate, tryLockMutex, unlockMutex, unpackHeader
-
Field Details
-
objectAddr
-
state
-
-
Constructor Details
-
RecoveryRecord
This constructor is used to create a new instance of a RecoveryRecord. -
RecoveryRecord
public RecoveryRecord()
-
-
Method Details
-
typeIs
public int typeIs()- Specified by:
typeIs
in classAbstractRecord
- Returns:
RecordType
value.
-
value
Description copied from class:AbstractRecord
If this abstract record caused a heuristic then it should return an object which implementsHeuristicInformation
- Specified by:
value
in classAbstractRecord
- Returns:
Object
to be used to order.
-
setValue
- Specified by:
setValue
in classAbstractRecord
-
nestedAbort
public int nestedAbort()nestedAbort causes the restore_state function of the object to be invoked passing it the saved ObjectState.- Specified by:
nestedAbort
in classAbstractRecord
- Returns:
TwoPhaseOutcome
to indicate success/failure.- See Also:
-
nestedCommit
public int nestedCommit()nestedCommit does nothing since the passing of the state up to the parent action is handled by the record list merging system. In fact since nestedPrepare returns PREPARE_READONLY this function should never actually be called- Specified by:
nestedCommit
in classAbstractRecord
- Returns:
TwoPhaseOutcome
to indicate success/failure.- See Also:
-
nestedPrepare
public int nestedPrepare()Description copied from class:AbstractRecord
A prepare for a nested transaction has occurred.- Specified by:
nestedPrepare
in classAbstractRecord
- Returns:
TwoPhaseOutcome
to indicate success/failure.- See Also:
-
topLevelAbort
public int topLevelAbort()topLevelAbort for Recovery records implies the object state should be restored to the saved state exactly like a nested abort.- Specified by:
topLevelAbort
in classAbstractRecord
- Returns:
TwoPhaseOutcome
to indicate success/failure.- See Also:
-
topLevelCommit
public int topLevelCommit()topLevelCommit has nothing to do for RecoveryRecords as no changes have been made in the object store. In fact since topLevelPrepare returns PREPARE_READONLY this function should never actually be called- Specified by:
topLevelCommit
in classAbstractRecord
- Returns:
TwoPhaseOutcome
to indicate success/failure.- See Also:
-
topLevelPrepare
public int topLevelPrepare()topLevelPrepare can return PREPARE_READONLY to avoid topLevelCommit being called in the action commit case- Specified by:
topLevelPrepare
in classAbstractRecord
- Returns:
TwoPhaseOutcome
to indicate success/failure.- See Also:
-
doSave
public boolean doSave()Description copied from class:AbstractRecord
Should this record be saved in the intentions list? If the record is saved, then it may be recovered later in the event of a failure. Note, however, that the size of the intentions list on disk is critical to the performance of the system (disk I/O is a bottleneck).- Overrides:
doSave
in classAbstractRecord
- Returns:
true
if it should be saved,false
otherwise.false
is the default.
-
restore_state
Description copied from class:AbstractRecord
During recovery, the transaction log is given to the recovery system and it will recreate a transaction instance to perform necessary recovery actions. This transaction will recreate the intentions list and give each recreated AbstractRecord the state that that was saved during transaction persistence. The base class will restore information that it needs from the log. Data items must be unpacked in the same order that they were packed.- Overrides:
restore_state
in classAbstractRecord
- Returns:
true
if successful,false
otherwise.
-
save_state
Description copied from class:AbstractRecord
When the transaction is required to make the intentions list persistent, it scans the list and asks each record whether or not it requires state to be saved (by calling doSave). If the answer is yes, then save_state is called and the record instance must save enough information to enable it to be restored from that state later. The basic AbstractRecord save_state will save common data that is required by the base class during recovery. If a derived class calls super.save_state then it must be called before packing any other data item.- Overrides:
save_state
in classAbstractRecord
- Returns:
true
if successful,false
otherwise.
-
print
Description copied from class:AbstractRecord
Write information about this specific instance to the specified stream.- Overrides:
print
in classAbstractRecord
- Parameters:
strm
- the stream on which to output.
-
type
Description copied from class:AbstractRecord
Re-implementation of abstract methods inherited from base class.- Overrides:
type
in classAbstractRecord
-
merge
Description copied from class:AbstractRecord
Merge the current record with the one presented.- Specified by:
merge
in classAbstractRecord
- Parameters:
a
- the record with which to merge.
-
alter
Description copied from class:AbstractRecord
Alter the current record with the one presented.- Specified by:
alter
in classAbstractRecord
- Parameters:
a
- the record with which to alter.
-
shouldAdd
Description copied from class:AbstractRecord
Should we add the record presented to the intentions list?- Specified by:
shouldAdd
in classAbstractRecord
- Parameters:
a
- The record to try to add.- Returns:
true
if the record should be added,false
otherwise.
-
shouldAlter
Description copied from class:AbstractRecord
Should we alter the current record with the one presented?- Specified by:
shouldAlter
in classAbstractRecord
- Parameters:
a
- The record to try to alter.- Returns:
true
if the record should be altered,false
otherwise.
-
shouldMerge
Description copied from class:AbstractRecord
Should we merge the current record with the one presented?- Specified by:
shouldMerge
in classAbstractRecord
- Parameters:
a
- The record to try to merge.- Returns:
true
if the record should be merged,false
otherwise.
-
shouldReplace
Description copied from class:AbstractRecord
Should we replace the record presented with the current record?- Specified by:
shouldReplace
in classAbstractRecord
- Parameters:
a
- The record to try to replace.- Returns:
true
if the record should be replaced,false
otherwise.
-
forgetAction
protected final void forgetAction(boolean commit)
-