Class FlushedScan

java.lang.Object
org.apache.derby.impl.store.raw.log.FlushedScan
All Implemented Interfaces:
LogScan, StreamLogScan

public class FlushedScan extends Object implements StreamLogScan
Scan the the log which is implemented by a series of log files.n This log scan knows how to move across log file if it is positioned at the boundary of a log file and needs to getNextRecord.
        4 bytes - length of user data, i.e. N
        8 bytes - long representing log instant
        N bytes of supplied data
        4 bytes - length of user data, i.e. N
        
  • Field Details

    • scan

    • logFactory

      LogToFile logFactory
    • open

      boolean open
    • currentLogFileNumber

      long currentLogFileNumber
    • currentLogFileFirstUnflushedPosition

      long currentLogFileFirstUnflushedPosition
    • currentInstant

      long currentInstant
    • firstUnflushed

      long firstUnflushed
    • firstUnflushedFileNumber

      long firstUnflushedFileNumber
    • firstUnflushedFilePosition

      long firstUnflushedFilePosition
    • LOG_REC_LEN_BYTE_LENGTH

      static final int LOG_REC_LEN_BYTE_LENGTH
      See Also:
    • nextRecordLength

      int nextRecordLength
      The length of the next record. Read from scan and set by currentLogFileHasUnflushedRecord. This is used to retain the length of a log record in the case currentLogFileHasUnflushedRecord reads the length and determines that some bytes in the log record are not yet flushed.
    • readNextRecordLength

      boolean readNextRecordLength
      Flag to indicate that the length of the next log record has been read by currentLogFileHasUnflushedRecord. This flag gets reset in two ways:
      1. currentLogFileHasUnflushedRecord determines that the entire log record is flushed and returns true. In this case getNextRecord reads and returns the log record.
      2. we switch log files --due to a partial log record at the end of an old log file.
  • Constructor Details

  • Method Details

    • getNextRecord

      public LogRecord getNextRecord(ArrayInputStream input, TransactionId tranId, int groupmask) throws StandardException
      Read a log record into the byte array provided. Resize the input stream byte array if necessary.
      Specified by:
      getNextRecord in interface StreamLogScan
      Parameters:
      input - the ArrayInputStream to put the log record
      tranId - if non-null, only log record that equals tranId will be returned. If null, log records are not filtered on transaction Id.
      groupmask - if non-zero, only log record whose Loggable's group value is included in the groupmask is returned. groupmask can be a bit wise OR of many Loggable groups. If zero, log records are not filtered on the Loggable's group.
      Returns:
      the length of the data written into data, or -1 if the end of the scan has been reached.
      Throws:
      StandardException - Standard Derby error policy
    • resetPosition

      public void resetPosition(LogInstant instant) throws IOException
      Reset the scan to the given LogInstant.
      Specified by:
      resetPosition in interface StreamLogScan
      Parameters:
      instant - the position to reset to
      Throws:
      IOException - scan cannot access the log at the new position.
    • getLogRecordEnd

      public long getLogRecordEnd()
      Get the log instant that is right after the record just retrived
      Specified by:
      getLogRecordEnd in interface StreamLogScan
      Returns:
      INVALID_LOG_INSTANT if this is not a FORWARD scan or, no record have been returned yet or the scan has completed.
    • isLogEndFuzzy

      public boolean isLogEndFuzzy()
      returns true if there is partially writen log records before the crash in the last log file. Partiall wrires are identified during forward scans for log recovery.
      Specified by:
      isLogEndFuzzy in interface StreamLogScan
      Returns:
      true if fuzzy log end found during forward scan, this happens if there was a partially written log records before the crash.
    • getInstant

      public long getInstant()
      Return the log instant (as an integer) the scan is currently on - this is the log instant of the log record that was returned by getNextRecord.
      Specified by:
      getInstant in interface StreamLogScan
      Returns:
      INVALID_LOG_INSTANT if no records have been returned yet or the scan has completed.
    • getLogInstant

      public LogInstant getLogInstant()
      Return the log instant the scan is currently on - this is the log instant of the log record that was returned by getNextRecord.
      Specified by:
      getLogInstant in interface StreamLogScan
      Returns:
      null if no records have been returned yet or the scan has completed.
    • close

      public void close()
      Close the scan.
      Specified by:
      close in interface StreamLogScan
    • setFirstUnflushed

      private void setFirstUnflushed() throws StandardException, IOException
      Throws:
      StandardException
      IOException
    • setCurrentLogFileFirstUnflushedPosition

      private void setCurrentLogFileFirstUnflushedPosition() throws IOException
      Throws:
      IOException
    • switchLogFile

      private void switchLogFile() throws StandardException
      Throws:
      StandardException
    • currentLogFileHasUnflushedRecord

      private boolean currentLogFileHasUnflushedRecord() throws IOException
      Throws:
      IOException
    • positionToNextRecord

      private boolean positionToNextRecord() throws StandardException, IOException
      Throws:
      StandardException
      IOException