Class FileTxnLog

  • All Implemented Interfaces:
    Closeable, AutoCloseable, TxnLog

    public class FileTxnLog
    extends Object
    implements TxnLog, Closeable
    This class implements the TxnLog interface. It provides api's to access the txnlogs and add entries to it.

    The format of a Transactional log is as follows:

     LogFile:
         FileHeader TxnList ZeroPad
    
     FileHeader: {
         magic 4bytes (ZKLG)
         version 4bytes
         dbid 8bytes
       }
    
     TxnList:
         Txn || Txn TxnList
    
     Txn:
         checksum Txnlen TxnHeader Record 0x42
    
     checksum: 8bytes Adler32 is currently used
       calculated across payload -- Txnlen, TxnHeader, Record and 0x42
    
     Txnlen:
         len 4bytes
    
     TxnHeader: {
         sessionid 8bytes
         cxid 4bytes
         zxid 8bytes
         time 8bytes
         type 4bytes
       }
    
     Record:
         See Jute definition file for details on the various record types
    
     ZeroPad:
         0 padded to EOF (filled during preallocation stage)
     
    • Constructor Detail

      • FileTxnLog

        public FileTxnLog​(File logDir)
        constructor for FileTxnLog. Take the directory where the txnlogs are stored
        Parameters:
        logDir - the directory where the txnlogs are stored
    • Method Detail

      • setPreallocSize

        public static void setPreallocSize​(long size)
        method to allow setting preallocate size of log file to pad the file.
        Parameters:
        size - the size to set to in bytes
      • setServerStats

        public void setServerStats​(ServerStats serverStats)
        Setter for ServerStats to monitor fsync threshold exceed
        Specified by:
        setServerStats in interface TxnLog
        Parameters:
        serverStats - used to update fsyncThresholdExceedCount
      • setTxnLogSizeLimit

        public static void setTxnLogSizeLimit​(long size)
        Set log size limit
      • getCurrentLogSize

        public long getCurrentLogSize()
        Return the current on-disk size of log size. This will be accurate only after commit() is called. Otherwise, unflushed txns may not be included.
      • setTotalLogSize

        public void setTotalLogSize​(long size)
        Description copied from interface: TxnLog
        Sets the total size of all log files
        Specified by:
        setTotalLogSize in interface TxnLog
      • getTotalLogSize

        public long getTotalLogSize()
        Description copied from interface: TxnLog
        Gets the total size of all log files
        Specified by:
        getTotalLogSize in interface TxnLog
      • getTxnLogSizeLimit

        public static long getTxnLogSizeLimit()
        Get log size limit
      • makeChecksumAlgorithm

        protected Checksum makeChecksumAlgorithm()
        creates a checksum algorithm to be used
        Returns:
        the checksum used for this txnlog
      • append

        public boolean append​(Request request)
                       throws IOException
        Description copied from interface: TxnLog
        Append a request to the transaction log with a digset
        Specified by:
        append in interface TxnLog
        Parameters:
        request - the request to be appended returns true iff something appended, otw false
        Throws:
        IOException
      • getLogFiles

        public static File[] getLogFiles​(File[] logDirList,
                                         long snapshotZxid)
        Find the log file that starts at, or just before, the snapshot. Return this and all subsequent logs. Results are ordered by zxid of file, ascending order.
        Parameters:
        logDirList - array of files
        snapshotZxid - return files at, or before this zxid
        Returns:
        log files that starts at, or just before, the snapshot and subsequent ones
      • getLastLoggedZxid

        public long getLastLoggedZxid()
        get the last zxid that was logged in the transaction logs
        Specified by:
        getLastLoggedZxid in interface TxnLog
        Returns:
        the last zxid logged in the transaction logs
      • commit

        public void commit()
                    throws IOException
        commit the logs. make sure that everything hits the disk
        Specified by:
        commit in interface TxnLog
        Throws:
        IOException
      • getTxnLogSyncElapsedTime

        public long getTxnLogSyncElapsedTime()
        Specified by:
        getTxnLogSyncElapsedTime in interface TxnLog
        Returns:
        elapsed sync time of transaction log in milliseconds
      • read

        public TxnLog.TxnIterator read​(long zxid)
                                throws IOException
        start reading all the transactions from the given zxid
        Specified by:
        read in interface TxnLog
        Parameters:
        zxid - the zxid to start reading transactions from
        Returns:
        returns an iterator to iterate through the transaction logs
        Throws:
        IOException
      • read

        public TxnLog.TxnIterator read​(long zxid,
                                       boolean fastForward)
                                throws IOException
        start reading all the transactions from the given zxid.
        Parameters:
        zxid - the zxid to start reading transactions from
        fastForward - true if the iterator should be fast forwarded to point to the txn of a given zxid, else the iterator will point to the starting txn of a txnlog that may contain txn of a given zxid
        Returns:
        returns an iterator to iterate through the transaction logs
        Throws:
        IOException
      • truncate

        public boolean truncate​(long zxid)
                         throws IOException
        truncate the current transaction logs
        Specified by:
        truncate in interface TxnLog
        Parameters:
        zxid - the zxid to truncate the logs to
        Returns:
        true if successful false if not
        Throws:
        IOException
      • getDbId

        public long getDbId()
                     throws IOException
        the dbid of this transaction database
        Specified by:
        getDbId in interface TxnLog
        Returns:
        the dbid of this database
        Throws:
        IOException
      • isForceSync

        public boolean isForceSync()
        the forceSync value. true if forceSync is enabled, false otherwise.
        Returns:
        the forceSync value