# 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 TxnLog

`TxnLog.TxnIterator`

## Field Summary

Fields
Modifier and Type
Field
Description
`static final String`
`LOG_FILE_PREFIX`
`static final int`
`TXNLOG_MAGIC`
`static final int`
`VERSION`

## Constructor Summary

Constructors
Constructor
Description
`FileTxnLog(File logDir)`
constructor for FileTxnLog.

## Method Summary

Modifier and Type
Method
Description
`boolean`
`append(Request request)`
Append a request to the transaction log with a digset
`void`
`close()`
close all the open file handles
`void`
`commit()`
commit the logs.
`long`
`getCurrentLogSize()`
Return the current on-disk size of log size.
`long`
`getDbId()`
the dbid of this transaction database
`long`
`getLastLoggedZxid()`
get the last zxid that was logged in the transaction logs
`static 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 files
`static long`
`getTxnLogSizeLimit()`
Get log size limit
`long`
`getTxnLogSyncElapsedTime()`
`boolean`
`isForceSync()`
the forceSync value.
`protected Checksum`
`makeChecksumAlgorithm()`
creates a checksum algorithm to be used
`TxnLog.TxnIterator`
`read(long zxid)`
start reading all the transactions from the given zxid
`TxnLog.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 exceed
`void`
`setTotalLogSize(long size)`
Sets the total size of all log files
`static void`
`setTxnLogSizeLimit(long size)`
Set log size limit
`boolean`
`truncate(long zxid)`
truncate the current transaction logs

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### 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 Details

### 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 Details

### 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

### rollLog

public void rollLog() throws IOException
rollover the current log file to a new one.

Specified by:
  `rollLog` in interface `TxnLog`
Throws:
  `IOException`

### close

public void close() throws IOException
close all the open file handles

Specified by:
  `close` in interface `AutoCloseable`
Specified by:
  `close` in interface `Closeable`
Specified by:
  `close` in interface `TxnLog`
Throws:
  `IOException`

### 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