Class PageBasicOperation
- java.lang.Object
-
- org.apache.derby.impl.store.raw.data.PageBasicOperation
-
- All Implemented Interfaces:
java.io.Externalizable
,java.io.Serializable
,Formatable
,TypedFormat
,Loggable
,RePreparable
- Direct Known Subclasses:
LogicalPageOperation
,LogicalUndoOperation
,PhysicalPageOperation
,PhysicalUndoOperation
,SetReservedSpaceOperation
abstract class PageBasicOperation extends java.lang.Object implements Loggable, RePreparable
A PageBasicOperation changed the content of a page, this is the root class of all page oriented operation. Each PageBasicOperation record change(s) that apply to one and only one page. The pageID that is changed must be recorded in the log operation - in other words, redo must be physical (or more correctly, in Gray's term, physiological, since changes are logical within a page).
Undo can be logical, but the undo logic must be hidden in generateUndo. By the time a compensation operation is logged as a LogOperation, the page that needs roll back must be determined.- See Also:
Loggable
Format ID no format id, an abstract class. Purpose provide methods for logical undo Upgrade Disk Layout pageId(PageKey) the page this operation applies to pageVersion(CompressedLong) the page version this operation applied to OptionalData none
-
-
Field Summary
Fields Modifier and Type Field Description protected RawContainerHandle
containerHdl
protected boolean
foundHere
protected BasePage
page
private PageKey
pageId
private long
pageVersion
-
Fields inherited from interface org.apache.derby.iapi.store.raw.Loggable
ABORT, BI_LOG, CHECKSUM, COMMIT, COMPENSATION, FILE_RESOURCE, FIRST, LAST, PREPARE, RAWSTORE, XA_NEEDLOCK
-
-
Constructor Summary
Constructors Constructor Description PageBasicOperation()
PageBasicOperation(BasePage page)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description BasePage
findpage(Transaction xact)
Find the page the operation applies to and latch it, this only uses the segmentId, containerId, and pageId stored in this log record to find the page.Page
getPage()
protected BasePage
getPageForRedoRecovery(Transaction xact)
Subclass (e.g., init page) that wishes to do something about missing pages in load tran should override this method to return the pageprotected PageKey
getPageId()
long
getPageVersion()
ByteArray
getPreparedLog()
the default for optional data is set to null.int
group()
A page operation is a RAWSTORE log recordboolean
needsRedo(Transaction xact)
Returns true if this op should be redone during recovery redo, if so, get and latched the page.void
readExternal(java.io.ObjectInput in)
void
reclaimPrepareLocks(Transaction t, LockingPolicy locking_policy)
reclaim locks associated with the changes in this log record.void
releaseResource(Transaction xact)
Release latched page and any other resources acquired during a previous findpage, safe to call multiple times.protected void
resetPageNumber(long pageNumber)
Reset the pageNumberabstract void
restoreMe(Transaction xact, BasePage undoPage, LogInstant CLRinstant, LimitObjectInput in)
Undo the change indicated by this log operation and optional data.java.lang.String
toString()
void
writeExternal(java.io.ObjectOutput out)
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.derby.iapi.services.io.TypedFormat
getTypeFormatId
-
-
-
-
Field Detail
-
pageId
private PageKey pageId
-
pageVersion
private long pageVersion
-
page
protected transient BasePage page
-
containerHdl
protected transient RawContainerHandle containerHdl
-
foundHere
protected transient boolean foundHere
-
-
Constructor Detail
-
PageBasicOperation
PageBasicOperation(BasePage page)
-
PageBasicOperation
PageBasicOperation()
-
-
Method Detail
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
writeExternal
public void writeExternal(java.io.ObjectOutput out) throws java.io.IOException
- Specified by:
writeExternal
in interfacejava.io.Externalizable
- Throws:
java.io.IOException
-
readExternal
public void readExternal(java.io.ObjectInput in) throws java.io.IOException, java.lang.ClassNotFoundException
- Specified by:
readExternal
in interfacejava.io.Externalizable
- Throws:
java.io.IOException
java.lang.ClassNotFoundException
-
needsRedo
public final boolean needsRedo(Transaction xact) throws StandardException
Returns true if this op should be redone during recovery redo, if so, get and latched the page.- Specified by:
needsRedo
in interfaceLoggable
- Parameters:
xact
- The transaction trying to redo this operation- Returns:
- true if operation needs redoing, false if not.
- Throws:
StandardException
- Standard Derby policy.- See Also:
Loggable.releaseResource(org.apache.derby.iapi.store.raw.Transaction)
-
releaseResource
public void releaseResource(Transaction xact)
Release latched page and any other resources acquired during a previous findpage, safe to call multiple times. In this RawStore implementataion, resource is acquired by a log operation in one of two places- during runtime or recovery undo in PageOperation.generateUndo()
- during recovery redo in PageBasicOperation.needsRedo()
- Specified by:
releaseResource
in interfaceLoggable
-
group
public int group()
A page operation is a RAWSTORE log record
-
getPreparedLog
public ByteArray getPreparedLog() throws StandardException
the default for optional data is set to null. If an operation has optional data, the operation need to prepare the optional data for this method. WARNING: If a log operation extends this class, and the operation has optional data, it MUST overwrite this method to return a ByteArray that contains the optional data.- Specified by:
getPreparedLog
in interfaceLoggable
- Throws:
StandardException
- Standard Derby policy.
-
reclaimPrepareLocks
public void reclaimPrepareLocks(Transaction t, LockingPolicy locking_policy) throws StandardException
reclaim locks associated with the changes in this log record.- Specified by:
reclaimPrepareLocks
in interfaceRePreparable
- Throws:
StandardException
- Standard exception policy.
-
resetPageNumber
protected final void resetPageNumber(long pageNumber)
Reset the pageNumber
-
getPageId
protected final PageKey getPageId()
-
findpage
public final BasePage findpage(Transaction xact) throws StandardException
Find the page the operation applies to and latch it, this only uses the segmentId, containerId, and pageId stored in this log record to find the page.- Returns:
- null if container is dropped and committed (possibly stubbified), else return the latched page
- Throws:
StandardException
- Standard Derby policy.
-
getPageForRedoRecovery
protected BasePage getPageForRedoRecovery(Transaction xact) throws StandardException
Subclass (e.g., init page) that wishes to do something about missing pages in load tran should override this method to return the page- Throws:
StandardException
- Derby Standard error policy
-
getPage
public final Page getPage()
-
getPageVersion
public final long getPageVersion()
-
restoreMe
public abstract void restoreMe(Transaction xact, BasePage undoPage, LogInstant CLRinstant, LimitObjectInput in) throws StandardException, java.io.IOException
Undo the change indicated by this log operation and optional data. The page the undo should apply to is the latched undoPage. The undoPage must be the same page as the doMe page and the undo operation must restore the before image of the row that changed.
this can only be used under special circumstances: namely table level locking, and no internal or nested transaction, and all operations are rollec back with restoreMe instead of undoMe.
This method is here to support BeforeImageLogging- Parameters:
xact
- the Transaction doing the rollbackundoPage
- the page to rollback changes onCLRinstant
- the log instant of this (PageUndo) operationin
- optional data for the rollback operation- Throws:
java.io.IOException
- Can be thrown by any of the methods of ObjectInput.StandardException
- Standard Derby policy.
-
-