Class TransactionLog

java.lang.Object
org.apache.solr.update.TransactionLog
All Implemented Interfaces:
Closeable, AutoCloseable

public class TransactionLog extends Object implements Closeable
Log Format: List{Operation, Version, ...} ADD, VERSION, DOC DELETE, VERSION, ID_BYTES DELETE_BY_QUERY, VERSION, String

TODO: keep two files, one for [operation, version, id] and the other for the actual document data. That way we could throw away document log files more readily while retaining the smaller operation log files longer (and we can retrieve the stored fields from the latest documents from the index).

This would require keeping all source fields stored of course.

This would also allow to not log document data for requests with commit=true in them (since we know that if the request succeeds, all docs will be committed)

  • Field Details

  • Constructor Details

  • Method Details

    • setWrittenCount

      protected void setWrittenCount(long fileStartOffset) throws IOException
      Sets the counter of written data in the FastOutputStream view of the log file, to reflect that we aren't starting at the beginning.
      Throws:
      IOException
    • getLogFileSize

      protected long getLogFileSize() throws IOException
      Gets the log file data size.
      Throws:
      IOException
    • numRecords

      public int numRecords()
      Returns the number of records in the log (currently includes the header and an optional commit). Note: currently returns 0 for reopened existing log files.
    • endsWithCommit

      public boolean endsWithCommit() throws IOException
      Throws:
      IOException
    • writeData

      public long writeData(Object o)
    • addGlobalStrings

      protected void addGlobalStrings(Collection<String> strings)
    • writeLogHeader

      protected void writeLogHeader(TransactionLog.LogCodec codec) throws IOException
      Throws:
      IOException
    • endRecord

      protected void endRecord(long startRecordPosition) throws IOException
      Throws:
      IOException
    • checkWriteHeader

      protected void checkWriteHeader(TransactionLog.LogCodec codec, org.apache.solr.common.SolrInputDocument optional) throws IOException
      Throws:
      IOException
    • write

      public long write(AddUpdateCommand cmd)
      Writes an add update command to the transaction log. This is not applicable for in-place updates; use write(AddUpdateCommand, long). (The previous pointer (applicable for in-place updates) is set to -1 while writing the command to the transaction log.)
      Parameters:
      cmd - The add update command to be written
      Returns:
      Returns the position pointer of the written update command
      See Also:
    • write

      public long write(AddUpdateCommand cmd, long prevPointer)
      Writes an add update command to the transaction log. This should be called only for writing in-place updates, or else pass -1 as the prevPointer.
      Parameters:
      cmd - The add update command to be written
      prevPointer - The pointer in the transaction log which this update depends on (applicable for in-place updates)
      Returns:
      Returns the position pointer of the written update command
    • writeDelete

      public long writeDelete(DeleteUpdateCommand cmd)
    • writeDeleteByQuery

      public long writeDeleteByQuery(DeleteUpdateCommand cmd)
    • writeCommit

      public long writeCommit(CommitUpdateCommand cmd)
    • lookup

      public Object lookup(long pos)
    • incref

      public void incref()
    • try_incref

      public boolean try_incref()
    • decref

      public void decref()
    • position

      public long position()
      returns the current position in the log file
    • closeOutput

      public void closeOutput()
      Move to a read-only state, closing and releasing resources while keeping the log available for reads
    • finish

      public void finish(UpdateLog.SyncLevel syncLevel)
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
    • forceClose

      public void forceClose()
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getLogSize

      public long getLogSize()
    • getLogSizeFromStream

      public long getLogSizeFromStream()
      Returns:
      the FastOutputStream size
    • getReader

      public TransactionLog.LogReader getReader(long startingPos) throws IOException
      Returns a reader that can be used while a log is still in use. Currently only *one* LogReader may be outstanding, and that log may only be used from a single thread.
      Throws:
      IOException
    • getSortedReader

      public TransactionLog.LogReader getSortedReader(long startingPos) throws IOException
      Throws:
      IOException
    • getReverseReader

      public TransactionLog.ReverseReader getReverseReader() throws IOException
      Returns a single threaded reverse reader
      Throws:
      IOException