001: /*
002:
003: Derby - Class org.apache.derby.impl.store.raw.data.InvalidatePageOperation
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to you under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.impl.store.raw.data;
023:
024: import org.apache.derby.impl.store.raw.data.BasePage;
025:
026: import org.apache.derby.iapi.services.sanity.SanityManager;
027: import org.apache.derby.iapi.services.io.FormatIdUtil;
028: import org.apache.derby.iapi.services.io.StoredFormatIds;
029:
030: import org.apache.derby.iapi.error.StandardException;
031:
032: import org.apache.derby.iapi.store.raw.Page;
033: import org.apache.derby.iapi.store.raw.Transaction;
034:
035: import org.apache.derby.iapi.store.raw.log.LogInstant;
036:
037: import java.io.OutputStream;
038: import java.io.ObjectOutput;
039: import java.io.ObjectInput;
040: import java.io.IOException;
041: import org.apache.derby.iapi.services.io.LimitObjectInput;
042:
043: /**
044: Represents invalidating a page due to deallocation.
045: This operation invalidates the page that is being deallocated, as opposed
046: to deallocatePage that happens on the alloc page.
047:
048: <PRE>
049: @format_id LOGOP_INVALIDATE_PAGE
050: the formatId is written by FormatIdOutputStream when this object is
051: written out by writeObject
052: @purpose invalidate a page
053: @upgrade
054: @disk_layout
055: PhysicalPageOperation the superclass
056: OptionalData none
057: @end_format
058: </PRE>
059: */
060: public final class InvalidatePageOperation extends
061: PhysicalPageOperation {
062: public InvalidatePageOperation(BasePage page) {
063: super (page);
064: }
065:
066: /*
067: * Formatable methods
068: */
069:
070: // no-arg constructor, required by Formatable
071: public InvalidatePageOperation() {
072: super ();
073: }
074:
075: /*
076: * If this page can be reused in the same transaction (of if committed
077: * transaction needs to be undone, then we need the before image of the
078: * page. Right now, the transaction that deallocate a page must commit
079: * before the page can be freed and reused, so we don't need to log the
080: * before image of the page
081: */
082: public void writeExternal(ObjectOutput out) throws IOException {
083: // RESOLVE: may need to write out the page BI, see comment above
084: super .writeExternal(out);
085: }
086:
087: /**
088: Read this in
089: @exception IOException error reading from log stream
090: @exception ClassNotFoundException log stream corrupted
091: */
092: public void readExternal(ObjectInput in) throws IOException,
093: ClassNotFoundException {
094: super .readExternal(in);
095: }
096:
097: /**
098: Return my format identifier.
099: */
100: public int getTypeFormatId() {
101: return StoredFormatIds.LOGOP_INVALIDATE_PAGE;
102: }
103:
104: /*
105: * Loggable methods
106: */
107: /**
108: Mark the page as being invalidated
109:
110: @exception IOException Can be thrown by any of the methods of ObjectInput.
111: @exception StandardException Standard Cloudscape policy.
112:
113: @see org.apache.derby.iapi.store.raw.Loggable#doMe
114: */
115: public void doMe(Transaction xact, LogInstant instant,
116: LimitObjectInput in) throws StandardException, IOException {
117: this .page.setPageStatus(instant, BasePage.INVALID_PAGE);
118: }
119:
120: /*
121: * PhysicalPageOperation
122: */
123:
124: /**
125: Mark the page as being valid
126:
127: @exception StandardException Thrown by methods I call
128: @exception IOException Thrown by methods I call
129:
130: @see PhysicalPageOperation#undoMe
131: */
132: public void undoMe(Transaction xact, BasePage undoPage,
133: LogInstant CLRInstant, LimitObjectInput in)
134: throws StandardException, IOException {
135: undoPage.setPageStatus(CLRInstant, BasePage.VALID_PAGE);
136: }
137:
138: /*
139: * PageBasicOperation
140: */
141:
142: /**
143: * restore the before image of the page
144: *
145: * @exception StandardException Standard Cloudscape Error Policy
146: * @exception IOException problem reading the complete log record from the
147: * input stream
148: */
149: public void restoreMe(Transaction xact, BasePage undoPage,
150: LogInstant CLRInstant, LimitObjectInput in)
151: throws StandardException, IOException {
152: undoMe(xact, undoPage, CLRInstant, in);
153: }
154:
155: public String toString() {
156: if (SanityManager.DEBUG)
157: return super .toString()
158: + "Invalidate Page - it has been deallocated";
159: else
160: return null;
161: }
162:
163: }
|