Go to file
Zhichao Cao 4369f2c7bb Checksum for each SST file and stores in MANIFEST (#6216)
Summary:
In the current code base, RocksDB generate the checksum for each block and verify the checksum at usage. Current PR enable SST file checksum. After a SST file is generated by Flush or Compaction, RocksDB generate the SST file checksum and store the checksum value and checksum method name in the vs_info and MANIFEST as part for the FileMetadata.

Added the enable_sst_file_checksum to Options to enable or disable file checksum. Added sst_file_checksum to Options such that user can plugin their own SST file checksum calculate method via overriding the SstFileChecksum class. The checksum information inlcuding uint32_t checksum value and a checksum name (string).  A new tool is added to LDB such that user can dump out a list of file checksum information from MANIFEST. If user enables the file checksum but does not provide the sst_file_checksum instance, RocksDB will use the default crc32checksum implemented in table/sst_file_checksum_crc32c.h
Pull Request resolved: https://github.com/facebook/rocksdb/pull/6216

Test Plan: Added the testing case in table_test and ldb_cmd_test to verify checksum is correct in different level. Pass make asan_check.

Differential Revision: D19171461

Pulled By: zhichao-cao

fbshipit-source-id: b2e53479eefc5bb0437189eaa1941670e5ba8b87
2020-02-10 15:52:52 -08:00
buckifier
build_tools
cache
cmake
coverage
db Checksum for each SST file and stores in MANIFEST (#6216) 2020-02-10 15:52:52 -08:00
db_stress_tool
docs
env
examples
file Checksum for each SST file and stores in MANIFEST (#6216) 2020-02-10 15:52:52 -08:00
hdfs
include/rocksdb Checksum for each SST file and stores in MANIFEST (#6216) 2020-02-10 15:52:52 -08:00
java
logging
memory
memtable
monitoring
options Checksum for each SST file and stores in MANIFEST (#6216) 2020-02-10 15:52:52 -08:00
port
table Checksum for each SST file and stores in MANIFEST (#6216) 2020-02-10 15:52:52 -08:00
test_util Allow readahead when reading option files. (#6372) 2020-02-07 15:18:26 -08:00
third-party
tools Checksum for each SST file and stores in MANIFEST (#6216) 2020-02-10 15:52:52 -08:00
trace_replay
util Checksum for each SST file and stores in MANIFEST (#6216) 2020-02-10 15:52:52 -08:00
utilities utilities/env_librados: copy use bufferlist::iterator (#6395) 2020-02-10 11:31:16 -08:00
.clang-format
.gitignore
.lgtm.yml
.travis.yml
.watchmanconfig
AUTHORS
CMakeLists.txt Checksum for each SST file and stores in MANIFEST (#6216) 2020-02-10 15:52:52 -08:00
CODE_OF_CONDUCT.md
CONTRIBUTING.md
COPYING
DEFAULT_OPTIONS_HISTORY.md
DUMP_FORMAT.md
HISTORY.md Checksum for each SST file and stores in MANIFEST (#6216) 2020-02-10 15:52:52 -08:00
INSTALL.md
LANGUAGE-BINDINGS.md
LICENSE.Apache
LICENSE.leveldb
Makefile Support move semantics for PinnableSlice (#6374) 2020-02-07 14:26:26 -08:00
README.md
ROCKSDB_LITE.md
TARGETS Checksum for each SST file and stores in MANIFEST (#6216) 2020-02-10 15:52:52 -08:00
USERS.md
Vagrantfile
WINDOWS_PORT.md
appveyor.yml
defs.bzl
issue_template.md
src.mk Checksum for each SST file and stores in MANIFEST (#6216) 2020-02-10 15:52:52 -08:00
thirdparty.inc

README.md

RocksDB: A Persistent Key-Value Store for Flash and RAM Storage

Linux/Mac Build Status Windows Build status PPC64le Build Status

RocksDB is developed and maintained by Facebook Database Engineering Team. It is built on earlier work on LevelDB by Sanjay Ghemawat (sanjay@google.com) and Jeff Dean (jeff@google.com)

This code is a library that forms the core building block for a fast key-value server, especially suited for storing data on flash drives. It has a Log-Structured-Merge-Database (LSM) design with flexible tradeoffs between Write-Amplification-Factor (WAF), Read-Amplification-Factor (RAF) and Space-Amplification-Factor (SAF). It has multi-threaded compactions, making it especially suitable for storing multiple terabytes of data in a single database.

Start with example usage here: https://github.com/facebook/rocksdb/tree/master/examples

See the github wiki for more explanation.

The public interface is in include/. Callers should not include or rely on the details of any other header files in this package. Those internal APIs may be changed without warning.

Design discussions are conducted in https://www.facebook.com/groups/rocksdb.dev/

License

RocksDB is dual-licensed under both the GPLv2 (found in the COPYING file in the root directory) and Apache 2.0 License (found in the LICENSE.Apache file in the root directory). You may select, at your option, one of the above-listed licenses.