Class 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)

    • Method Detail

      • 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.
      • writeData

        public long writeData​(Object o)
      • addGlobalStrings

        protected void addGlobalStrings​(Collection<String> strings)
      • 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(AddUpdateCommand, long)
      • 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
      • 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
      • forceClose

        public void forceClose()
      • 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