ZooKeeper源码解析(4)-TxnLog文件格式

Posted by AlstonWilliams on February 17, 2019

在上篇文章中,我们介绍了ZooKeeper中Snapshot文件的格式.在这盘文章中,我们将会介绍TxnLog文件的格式.

在ZooKeeper中,Transaction代表一次客户端操作,而TxnLog文件就保存了这些Transaction.从ZooKeeper中的FileTxnSnapLog类中,我们可以看到其格式如下:

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

Txlen:
  len 4bytes

TxnHeader: {
  clientId 8bytes
  cxid 4bytes
  zxid 8bytes
  time 8bytes
  type 4bytes
}

Record: See Jute definition file for detail on the various record type

ZeroPad: 0 padded to EOF(filled during preallocation stage)

TxnLog的文件名是log.current_zxid的格式,其中current_zxid是创建它的时候的zxid,zxid大于current_zxid的Transaction都是保存在这个文件中.默认情况下,这个文件是64MB大小.