Class FileTxnLog
- java.lang.Object
-
- org.apache.zookeeper.server.persistence.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)
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FileTxnLog.FileTxnIterator
this class implements the txnlog iterator interface which is used for reading the transaction logs-
Nested classes/interfaces inherited from interface org.apache.zookeeper.server.persistence.TxnLog
TxnLog.TxnIterator
-
-
Field Summary
Fields Modifier and Type Field Description static String
LOG_FILE_PREFIX
static int
TXNLOG_MAGIC
static int
VERSION
-
Constructor Summary
Constructors Constructor Description FileTxnLog(File logDir)
constructor for FileTxnLog.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
append(TxnHeader hdr, Record txn)
append an entry to the transaction logboolean
append(TxnHeader hdr, Record txn, TxnDigest digest)
Append a request to the transaction log with a digsetvoid
close()
close all the open file handlesvoid
commit()
commit the logs.long
getCurrentLogSize()
Return the current on-disk size of log size.long
getDbId()
the dbid of this transaction databaselong
getLastLoggedZxid()
get the last zxid that was logged in the transaction logsstatic File[]
getLogFiles(File[] logDirList, long snapshotZxid)
Find the log file that starts at, or just before, the snapshot.long
getTotalLogSize()
Gets the total size of all log fileslong
getTxnLogSyncElapsedTime()
boolean
isForceSync()
the forceSync value.protected Checksum
makeChecksumAlgorithm()
creates a checksum algorithm to be usedTxnLog.TxnIterator
read(long zxid)
start reading all the transactions from the given zxidTxnLog.TxnIterator
read(long zxid, boolean fastForward)
start reading all the transactions from the given zxid.void
rollLog()
rollover the current log file to a new one.static void
setPreallocSize(long size)
method to allow setting preallocate size of log file to pad the file.void
setServerStats(ServerStats serverStats)
Setter for ServerStats to monitor fsync threshold exceedvoid
setTotalLogSize(long size)
Sets the total size of all log filesstatic void
setTxnLogSizeLimit(long size)
Set log size limitboolean
truncate(long zxid)
truncate the current transaction logs
-
-
-
Field Detail
-
TXNLOG_MAGIC
public static final int TXNLOG_MAGIC
-
VERSION
public static final int VERSION
- See Also:
- Constant Field Values
-
LOG_FILE_PREFIX
public static final String LOG_FILE_PREFIX
- See Also:
- Constant Field Values
-
-
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 interfaceTxnLog
- 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 interfaceTxnLog
-
getTotalLogSize
public long getTotalLogSize()
Description copied from interface:TxnLog
Gets the total size of all log files- Specified by:
getTotalLogSize
in interfaceTxnLog
-
makeChecksumAlgorithm
protected Checksum makeChecksumAlgorithm()
creates a checksum algorithm to be used- Returns:
- the checksum used for this txnlog
-
rollLog
public void rollLog() throws IOException
rollover the current log file to a new one.- Specified by:
rollLog
in interfaceTxnLog
- Throws:
IOException
-
close
public void close() throws IOException
close all the open file handles- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceTxnLog
- Throws:
IOException
-
append
public boolean append(TxnHeader hdr, Record txn) throws IOException
append an entry to the transaction log- Specified by:
append
in interfaceTxnLog
- Parameters:
hdr
- the header of the transactiontxn
- the transaction part of the entry returns true iff something appended, otw false- Returns:
- true iff something appended, otw false
- Throws:
IOException
-
append
public boolean append(TxnHeader hdr, Record txn, TxnDigest digest) throws IOException
Description copied from interface:TxnLog
Append a request to the transaction log with a digset- Specified by:
append
in interfaceTxnLog
- Parameters:
hdr
- the transaction headertxn
- the transaction itselfdigest
- transaction digest 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 filessnapshotZxid
- 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 interfaceTxnLog
- 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 interfaceTxnLog
- Throws:
IOException
-
getTxnLogSyncElapsedTime
public long getTxnLogSyncElapsedTime()
- Specified by:
getTxnLogSyncElapsedTime
in interfaceTxnLog
- 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 interfaceTxnLog
- 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 fromfastForward
- 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 interfaceTxnLog
- 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 interfaceTxnLog
- 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
-
-