001: /*
002:
003: Derby - Class org.apache.derby.impl.store.raw.log.StreamLogScan
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.log;
023:
024: import org.apache.derby.iapi.store.raw.log.LogInstant;
025: import org.apache.derby.iapi.store.raw.log.LogScan;
026: import org.apache.derby.iapi.store.raw.xact.TransactionId;
027: import org.apache.derby.iapi.error.StandardException;
028:
029: import org.apache.derby.iapi.services.io.ArrayInputStream;
030:
031: import java.io.InputStream;
032: import java.io.IOException;
033:
034: /**
035: LogScan provides methods to read a log record and get its LogInstant
036: in an already defined scan. A logscan also needs to know how to advance to
037: the next log record.
038: */
039:
040: public interface StreamLogScan extends LogScan {
041:
042: /**
043: Get the next record in the scan and place its data in the passed in
044: array. The scan is advanced to the next log record.
045: If the input array is of insufficient size, getNextRecord must expand
046: the array to accomodate the log record. User can optionally pass in a
047: transaction Id and a group mask. If provided, only log record that
048: matches the transaction Id and the group mask is returned.
049:
050: @param input the ArrayInputStream to put the log record
051: @param tranId if non-null, only log record that equals tranId
052: will be returned. If null, log records are not
053: filtered on transaction Id.
054: @param groupmask if non-zero, only log record whose Loggable's group
055: value is included in the groupmask is returned.
056: groupmask can be a bit wise OR of many Loggable
057: groups. If zero, log records are not filtered on
058: the Loggable's group.
059:
060: @return an object that represents the log record, return null if the
061: scan has completed.
062:
063: @exception StandardException Standard Clooudscape error policy
064: @exception IOException Some I/O exception raised during reading
065: the log record.
066: */
067: public LogRecord getNextRecord(ArrayInputStream input,
068: TransactionId tranId, int groupmask)
069: throws StandardException, IOException;
070:
071: /**
072: Get the instant of the record just retrieved with getNextRecord().
073: @return INVALID_LOG_INSTANT if no records have been returned yet or
074: the scan has completed.
075: */
076: public long getInstant();
077:
078: /**
079: Get the log instant that is right after the record just retrieved with
080: getNextRecord(). Only valid for a forward scan and on a successful
081: retrieval.
082:
083: @return INVALID_LOG_INSTANT if this is not a FORWARD scan or, no
084: record have been returned yet or the scan has completed.
085: */
086: public long getLogRecordEnd();
087:
088: /**
089: @return true if fuzzy log end found during forward scan, this happens
090: if there was a partially written log records before the crash.
091: */
092: public boolean isLogEndFuzzy();
093:
094: /**
095: Get the LogInstant for the record just retrieved with getNextRecord().
096: @return null if no records have been returned yet or the scan has
097: completed.
098: */
099: public LogInstant getLogInstant();
100:
101: /**
102: Reset the scan to the given LogInstant so that getNextRecord get the
103: log record AFTER the given LogInstant.
104:
105: @param instant the log instant to reset to
106:
107: @exception IOException Some I/O exception raised when accessing
108: the log file
109: @exception StandardException reset to illegal position or beyond the
110: limit of the scan.
111: */
112: public void resetPosition(LogInstant instant) throws IOException,
113: StandardException;
114:
115: /**
116: Close this log scan.
117: */
118: public void close();
119: }
|