mirror of https://github.com/facebook/rocksdb.git
Log writer record format doc.
Summary: Added a ASCII doodle to represent the log writer format. Test Plan: None Reviewers: sdong CC: leveldb Task ID: 6179896 Blame Rev:
This commit is contained in:
parent
db6569cd4a
commit
58346b9e29
|
@ -22,6 +22,12 @@ using std::unique_ptr;
|
||||||
|
|
||||||
namespace log {
|
namespace log {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reader is a general purpose log stream reader implementation. The actual job
|
||||||
|
* of reading from the device is implemented by the SequentialFile interface.
|
||||||
|
*
|
||||||
|
* Please see Writer for details on the file and record layout.
|
||||||
|
*/
|
||||||
class Reader {
|
class Reader {
|
||||||
public:
|
public:
|
||||||
// Interface for reporting errors.
|
// Interface for reporting errors.
|
||||||
|
|
|
@ -22,6 +22,40 @@ using std::unique_ptr;
|
||||||
|
|
||||||
namespace log {
|
namespace log {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writer is a general purpose log stream writer. It provides an append-only
|
||||||
|
* abstraction for writing data. The details of the how the data is written is
|
||||||
|
* handled by the WriteableFile sub-class implementation.
|
||||||
|
*
|
||||||
|
* File format:
|
||||||
|
*
|
||||||
|
* File is broken down into variable sized records. The format of each record
|
||||||
|
* is described below.
|
||||||
|
* +-----+-------------+--+----+----------+------+-- ... ----+
|
||||||
|
* File | r0 | r1 |P | r2 | r3 | r4 | |
|
||||||
|
* +-----+-------------+--+----+----------+------+-- ... ----+
|
||||||
|
* <--- kBlockSize ------>|<-- kBlockSize ------>|
|
||||||
|
* rn = variable size records
|
||||||
|
* P = Padding
|
||||||
|
*
|
||||||
|
* Data is written out in kBlockSize chunks. If next record does not fit
|
||||||
|
* into the space left, the leftover space will be padded with \0.
|
||||||
|
*
|
||||||
|
* Record format:
|
||||||
|
*
|
||||||
|
* +---------+-----------+-----------+--- ... ---+
|
||||||
|
* |CRC (4B) | Size (2B) | Type (1B) | Payload |
|
||||||
|
* +---------+-----------+-----------+--- ... ---+
|
||||||
|
*
|
||||||
|
* CRC = 32bit hash computed over the payload using CRC
|
||||||
|
* Size = Length of the payload data
|
||||||
|
* Type = Type of record
|
||||||
|
* (kZeroType, kFullType, kFirstType, kLastType, kMiddleType )
|
||||||
|
* The type is used to group a bunch of records together to represent
|
||||||
|
* blocks that are larger than kBlockSize
|
||||||
|
* Payload = Byte stream as long as specified by the payload size
|
||||||
|
*
|
||||||
|
*/
|
||||||
class Writer {
|
class Writer {
|
||||||
public:
|
public:
|
||||||
// Create a writer that will append data to "*dest".
|
// Create a writer that will append data to "*dest".
|
||||||
|
|
Loading…
Reference in New Issue