java.io.Externalizable
, Formatable
, Loggable
, java.io.Serializable
, TypedFormat
LogicalUndoable
AllocPageOperation
, ChainAllocPageOperation
, CompressSpacePageOperation
, CompressSpacePageOperation10_2
, ContainerOperation
, CopyRowsOperation
, DeleteOperation
, EncryptContainerOperation
, InitPageOperation
, InsertOperation
, InvalidatePageOperation
, LogicalPageOperation
, PhysicalPageOperation
, PurgeOperation
, RemoveFileOperation
, UpdateFieldOperation
, UpdateOperation
public interface Undoable extends Loggable
ABORT, BI_LOG, CHECKSUM, COMMIT, COMPENSATION, FILE_RESOURCE, FIRST, LAST, PREPARE, RAWSTORE, XA_NEEDLOCK
Modifier and Type | Method | Description |
---|---|---|
Compensation |
generateUndo(Transaction xact,
LimitObjectInput in) |
Generate a loggable which will undo this change, using the optional
input if necessary.
|
doMe, getPreparedLog, group, needsRedo, releaseResource
getTypeFormatId
Compensation generateUndo(Transaction xact, LimitObjectInput in) throws StandardException, java.io.IOException
NOTE
Any logical undo logic must be hidden behind generateUndo.
During recovery redo, it should not depend on any logical undo logic.
There are 3 ways to implement a redo-only log record:
Any resource (e.g., latched page) that is needed for the
undoable.undoMe() must be acquired in undoable.generateUndo().
Moreover, that resource must be identified in the compensation
operation, and reacquired in the compensation.needsRedo() method during
recovery redo.
If you do write your own generateUndo or needsRedo, any
resource you latch or acquire, you must release them in
Compensation.doMe() or in Compensation.releaseResource().
To write a generateUndo operation, find the object that needs to be rolled back. Assuming that it is a page, latch it, put together a Compensation operation with the undoOp set to this operation, and save the page number in the compensation operation, then return the Compensation operation to the logging system.
The sequence of events in a rollback of a undoable operation is
The available() method of in indicates how much data can be read, i.e. how much was originally written.
xact
- the transaction doing the rollbackjava.io.IOException
- Can be thrown by any of the methods of ObjectInput.StandardException
- Standard Derby policy.Loggable.releaseResource(org.apache.derby.iapi.store.raw.Transaction)
,
Loggable.needsRedo(org.apache.derby.iapi.store.raw.Transaction)
Apache Derby V10.14 Internals - Copyright © 2004,2018 The Apache Software Foundation. All Rights Reserved.