Find a file
Changyu Bi 6a0f637633 Compare the number of input keys and processed keys for compactions (#11571)
Summary:
... to improve data integrity validation during compaction.

A new option `compaction_verify_record_count` is introduced for this verification and is enabled by default. One exception when the verification is not done is when a compaction filter returns kRemoveAndSkipUntil which can cause CompactionIterator to seek until some key and hence not able to keep track of the number of keys processed.

For expected number of input keys, we sum over the number of total keys - number of range tombstones across compaction input files (`CompactionJob::UpdateCompactionStats()`). Table properties are consulted if `FileMetaData` is not initialized for some input file. Since table properties for all input files were also constructed during `DBImpl::NotifyOnCompactionBegin()`, `Compaction::GetTableProperties()` is introduced to reduce duplicated code.

For actual number of keys processed, each subcompaction will record its number of keys processed to `sub_compact->compaction_job_stats.num_input_records` and aggregated when all subcompactions finish (`CompactionJob::AggregateCompactionStats()`). In the case when some subcompaction encountered kRemoveAndSkipUntil from compaction filter and does not have accurate count, it propagates this information through `sub_compact->compaction_job_stats.has_num_input_records`.

Pull Request resolved: https://github.com/facebook/rocksdb/pull/11571

Test Plan:
* Add a new unit test `DBCompactionTest.VerifyRecordCount` for the corruption case.
* All other unit tests for non-corrupted case.
* Ran crash test for a few hours: `python3 ./tools/db_crashtest.py whitebox --simple`

Reviewed By: ajkr

Differential Revision: D47131965

Pulled By: cbi42

fbshipit-source-id: cc8e94565dd526c4347e9d3843ecf32f6727af92
2023-07-28 09:47:31 -07:00
.circleci Revert enabling IO uring in db_stress (#11242) 2023-02-21 12:53:55 -08:00
.github/workflows Fix failed CI job "Check buck targets and code format" (#11532) 2023-06-13 14:20:11 -07:00
buckifier Fix duplicate symbols in linking with buck2 (#11421) 2023-05-01 10:45:36 -07:00
build_tools Repair/instate jemalloc build on M1 (#11257) 2023-05-22 11:06:41 -07:00
cache Even more HyperClockCache refactoring (#11630) 2023-07-24 09:36:09 -07:00
cmake
coverage Remove platform009 and default to platform010 (#11333) 2023-03-30 09:56:37 -07:00
db Compare the number of input keys and processed keys for compactions (#11571) 2023-07-28 09:47:31 -07:00
db_stress_tool Initialize StressTest::optimistic_txn_db_ in ctor (#11547) 2023-06-19 15:41:30 -07:00
docs Fix typo in twitter link (#11529) 2023-06-12 15:26:13 -07:00
env remove duplicate comments in EncryptedEnv (#11549) 2023-06-27 11:55:37 -07:00
examples Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
file Move prefetching responsibility to page cache for compaction read under non directIO usecase (#11631) 2023-07-21 14:52:52 -07:00
fuzz Block per key-value checksum (#11287) 2023-04-25 12:08:23 -07:00
include/rocksdb Compare the number of input keys and processed keys for compactions (#11571) 2023-07-28 09:47:31 -07:00
java Support switching on / off UDT together with in-Memtable-only feature (#11623) 2023-07-26 20:16:32 -07:00
logging Disabling some IO error assertion in EnvLogger (#11314) 2023-03-20 13:23:29 -07:00
memory Change internal headers with duplicate names (#11408) 2023-05-17 11:27:09 -07:00
memtable remove redundant move (#11418) 2023-05-03 09:37:21 -07:00
microbench Small improvements to DBGet microbenchmark (#11498) 2023-06-02 16:39:14 -07:00
monitoring Add a ticker to track number of trash files deleted in background thread (#11540) 2023-06-16 10:05:25 -07:00
options Compare the number of input keys and processed keys for compactions (#11571) 2023-07-28 09:47:31 -07:00
plugin
port Add OpenBSD Support (#11255) 2023-06-27 11:58:29 -07:00
table Compare the number of input keys and processed keys for compactions (#11571) 2023-07-28 09:47:31 -07:00
test_util Add a UDT comparator for ReverseBytewiseComparator to object library (#11647) 2023-07-27 15:31:22 -07:00
third-party fix optimization-disabled test builds with platform010 (#11361) 2023-04-10 13:59:44 -07:00
tools add exe and script path check (#11621) 2023-07-19 12:05:24 -07:00
trace_replay Fix error maybe-uninitialized #11100 (#11101) 2023-01-19 13:59:48 -08:00
unreleased_history Compare the number of input keys and processed keys for compactions (#11571) 2023-07-28 09:47:31 -07:00
util Compare the number of input keys and processed keys for compactions (#11571) 2023-07-28 09:47:31 -07:00
utilities Use FaultInjectionTestFS in transaction_test, clarify Close() APIs (#11499) 2023-06-21 23:38:54 -07:00
.clang-format
.gitignore Tweak on IsTrivialMove() (#11467) 2023-05-26 16:40:50 -07:00
.lgtm.yml
.watchmanconfig
AUTHORS
CMakeLists.txt Allow rocksdb library to be usable with CMake's FetchContent API (#11575) 2023-07-19 10:39:30 -07:00
CODE_OF_CONDUCT.md
common.mk
CONTRIBUTING.md
COPYING
crash_test.mk Stress/Crash Test for OptimisticTransactionDB (#11513) 2023-06-17 16:27:37 -07:00
DEFAULT_OPTIONS_HISTORY.md
DUMP_FORMAT.md
HISTORY.md Make rocksdb_options_add_compact_on_deletion_collector_factory backward compatible (#11593) 2023-07-07 13:16:20 -07:00
INSTALL.md Simplify detection of x86 CPU features (#11419) 2023-05-09 22:25:45 -07:00
issue_template.md
LANGUAGE-BINDINGS.md Add grocksdb in Go language bindings (#10498) 2022-08-23 15:02:10 -07:00
LICENSE.Apache
LICENSE.leveldb
Makefile Add utils to use for handling user defined timestamp size record in WAL (#11451) 2023-05-22 14:28:58 -07:00
PLUGINS.md Added encryption plugin based on Intel open-source ipp-crypto library (#11429) 2023-05-08 12:13:43 -07:00
README.md Remove deprecated integration tests from README.md (#11354) 2023-04-07 16:52:50 -07:00
rocksdb.pc.in build: fix pkg-config file generation (#9953) 2022-05-30 12:46:40 -07:00
src.mk Add utils to use for handling user defined timestamp size record in WAL (#11451) 2023-05-22 14:28:58 -07:00
TARGETS Add utils to use for handling user defined timestamp size record in WAL (#11451) 2023-05-22 14:28:58 -07:00
thirdparty.inc
USERS.md Add more users (#11369) 2023-05-03 10:47:41 -07:00
Vagrantfile
WINDOWS_PORT.md

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

CircleCI 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/main/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.

Questions and discussions are welcome on the RocksDB Developers Public Facebook group and email list on Google Groups.

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.