Class FileTxnSnapLog

java.lang.Object
org.apache.zookeeper.server.persistence.FileTxnSnapLog

public class FileTxnSnapLog extends Object
This is a helper class above the implementations of txnlog and snapshot classes
  • Field Details

  • Constructor Details

    • FileTxnSnapLog

      public FileTxnSnapLog(File dataDir, File snapDir) throws IOException
      the constructor which takes the datadir and snapdir.
      Parameters:
      dataDir - the transaction directory
      snapDir - the snapshot directory
      Throws:
      IOException
  • Method Details

    • setServerStats

      public void setServerStats(ServerStats serverStats)
    • getDataLogDir

      public File getDataLogDir()
      get the data log dir used by this filetxn snap log
      Returns:
      the data log dir
    • getSnapDir

      public File getSnapDir()
      get the snap dir used by this filetxn snap log
      Returns:
      the snap dir
    • getLastSnapshotInfo

      public SnapshotInfo getLastSnapshotInfo()
      get information of the last saved/restored snapshot
      Returns:
      info of last snapshot
    • shouldForceWriteInitialSnapshotAfterLeaderElection

      public boolean shouldForceWriteInitialSnapshotAfterLeaderElection()
      whether to force the write of an initial snapshot after a leader election, to address ZOOKEEPER-3781 after upgrading from Zookeeper 3.4.x.
      Returns:
      true if an initial snapshot should be written even if not otherwise required, false otherwise.
    • restore

      public long restore(DataTree dt, Map<Long,Integer> sessions, FileTxnSnapLog.PlayBackListener listener) throws IOException
      this function restores the server database after reading from the snapshots and transaction logs
      Parameters:
      dt - the datatree to be restored
      sessions - the sessions to be restored
      listener - the playback listener to run on the database restoration
      Returns:
      the highest zxid restored
      Throws:
      IOException
    • fastForwardFromEdits

      public long fastForwardFromEdits(DataTree dt, Map<Long,Integer> sessions, FileTxnSnapLog.PlayBackListener listener) throws IOException
      This function will fast forward the server database to have the latest transactions in it. This is the same as restore, but only reads from the transaction logs and not restores from a snapshot.
      Parameters:
      dt - the datatree to write transactions to.
      sessions - the sessions to be restored.
      listener - the playback listener to run on the database transactions.
      Returns:
      the highest zxid restored.
      Throws:
      IOException
    • readTxnLog

      public TxnLog.TxnIterator readTxnLog(long zxid) throws IOException
      Get TxnIterator for iterating through txnlog starting at a given zxid
      Parameters:
      zxid - starting zxid
      Returns:
      TxnIterator
      Throws:
      IOException
    • readTxnLog

      public TxnLog.TxnIterator readTxnLog(long zxid, boolean fastForward) throws IOException
      Get TxnIterator for iterating through txnlog starting at a given zxid
      Parameters:
      zxid - starting zxid
      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:
      TxnIterator
      Throws:
      IOException
    • processTransaction

      public void processTransaction(TxnHeader hdr, DataTree dt, Map<Long,Integer> sessions, Record txn) throws KeeperException.NoNodeException
      process the transaction on the datatree
      Parameters:
      hdr - the hdr of the transaction
      dt - the datatree to apply transaction to
      sessions - the sessions to be restored
      txn - the transaction to be applied
      Throws:
      KeeperException.NoNodeException
    • getLastLoggedZxid

      public long getLastLoggedZxid()
      the last logged zxid on the transaction logs
      Returns:
      the last logged zxid
    • save

      public File save(DataTree dataTree, ConcurrentHashMap<Long,Integer> sessionsWithTimeouts, boolean syncSnap) throws IOException
      save the datatree and the sessions into a snapshot
      Parameters:
      dataTree - the datatree to be serialized onto disk
      sessionsWithTimeouts - the session timeouts to be serialized onto disk
      syncSnap - sync the snapshot immediately after write
      Returns:
      the snapshot file
      Throws:
      IOException
    • truncateLog

      public boolean truncateLog(long zxid)
      truncate the transaction logs the zxid specified
      Parameters:
      zxid - the zxid to truncate the logs to
      Returns:
      true if able to truncate the log, false if not
      Throws:
      IOException
    • findMostRecentSnapshot

      public File findMostRecentSnapshot() throws IOException
      the most recent snapshot in the snapshot directory
      Returns:
      the file that contains the most recent snapshot
      Throws:
      IOException
    • findNRecentSnapshots

      public List<File> findNRecentSnapshots(int n) throws IOException
      the n most recent snapshots
      Parameters:
      n - the number of recent snapshots
      Returns:
      the list of n most recent snapshots, with the most recent in front
      Throws:
      IOException
    • findNValidSnapshots

      public List<File> findNValidSnapshots(int n)
      the n recent valid snapshots
      Parameters:
      n - the number of recent valid snapshots
      Returns:
      the list of n recent valid snapshots, with the most recent in front
    • getSnapshotLogs

      public File[] getSnapshotLogs(long zxid)
      get the snapshot logs which may contain transactions newer than the given zxid. This includes logs with starting zxid greater than given zxid, as well as the newest transaction log with starting zxid less than given zxid. The latter log file may contain transactions beyond given zxid.
      Parameters:
      zxid - the zxid that contains logs greater than zxid
      Returns:
      the snapshot logs which may contain transactions newer than the given zxid
    • append

      public boolean append(Request si) throws IOException
      append the request to the transaction logs
      Parameters:
      si - the request to be appended
      Returns:
      true iff something appended, otw false
      Throws:
      IOException
    • commit

      public void commit() throws IOException
      commit the transaction of logs
      Throws:
      IOException
    • getTxnLogElapsedSyncTime

      public long getTxnLogElapsedSyncTime()
      Returns:
      elapsed sync time of transaction log commit in milliseconds
    • rollLog

      public void rollLog() throws IOException
      roll the transaction logs
      Throws:
      IOException
    • close

      public void close() throws IOException
      close the transaction log files
      Throws:
      IOException
    • setTotalLogSize

      public void setTotalLogSize(long size)
    • getTotalLogSize

      public long getTotalLogSize()