rocksdb/table/block_based
Changyu Bi 9f2363f4c4 User-defined timestamp support for DeleteRange() (#10661)
Summary:
Add user-defined timestamp support for range deletion. The new API is `DeleteRange(opt, cf, begin_key, end_key, ts)`. Most of the change is to update the comparator to compare without timestamp. Other than that, major changes are
- internal range tombstone data structures (`FragmentedRangeTombstoneList`, `RangeTombstone`, etc.) to store timestamps.
- Garbage collection of range tombstones and range tombstone covered keys during compaction.
- Get()/MultiGet() to return the timestamp of a range tombstone when needed.
- Get/Iterator with range tombstones bounded by readoptions.timestamp.
- timestamp crash test now issues DeleteRange by default.

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

Test Plan:
- Added unit test: `make check`
- Stress test: `python3 tools/db_crashtest.py --enable_ts whitebox --readpercent=57 --prefixpercent=4 --writepercent=25 -delpercent=5 --iterpercent=5 --delrangepercent=4`
- Ran `db_bench` to measure regression when timestamp is not enabled. The tests are for write (with some range deletion) and iterate with DB fitting in memory: `./db_bench--benchmarks=fillrandom,seekrandom --writes_per_range_tombstone=200 --max_write_buffer_number=100 --min_write_buffer_number_to_merge=100 --writes=500000 --reads=500000 --seek_nexts=10 --disable_auto_compactions -disable_wal=true --max_num_range_tombstones=1000`.  Did not see consistent regression in no timestamp case.

| micros/op | fillrandom | seekrandom |
| --- | --- | --- |
|main| 2.58 |10.96|
|PR 10661| 2.68 |10.63|

Reviewed By: riversand963

Differential Revision: D39441192

Pulled By: cbi42

fbshipit-source-id: f05aca3c41605caf110daf0ff405919f300ddec2
2022-09-30 16:13:03 -07:00
..
binary_search_index_reader.cc
binary_search_index_reader.h
block.cc Add API for writing wide-column entities (#10242) 2022-06-25 15:30:47 -07:00
block.h Refactor to avoid confusing "raw block" (#10408) 2022-09-22 11:25:32 -07:00
block_based_table_builder.cc Refactor to avoid confusing "raw block" (#10408) 2022-09-22 11:25:32 -07:00
block_based_table_builder.h Refactor to avoid confusing "raw block" (#10408) 2022-09-22 11:25:32 -07:00
block_based_table_factory.cc Always verify SST unique IDs on SST file open (#10532) 2022-09-07 22:52:42 -07:00
block_based_table_factory.h
block_based_table_iterator.cc Provide support for direct_reads with async_io (#10197) 2022-07-06 11:42:59 -07:00
block_based_table_iterator.h
block_based_table_reader.cc User-defined timestamp support for DeleteRange() (#10661) 2022-09-30 16:13:03 -07:00
block_based_table_reader.h Refactor to avoid confusing "raw block" (#10408) 2022-09-22 11:25:32 -07:00
block_based_table_reader_impl.h Updated NewDataBlockIterator to not fetch compression dict for non-da… (#10310) 2022-07-06 09:30:25 -07:00
block_based_table_reader_sync_and_async.h Refactor to avoid confusing "raw block" (#10408) 2022-09-22 11:25:32 -07:00
block_based_table_reader_test.cc Add support for wide-column point lookups (#10540) 2022-08-19 11:51:12 -07:00
block_builder.cc
block_builder.h
block_like_traits.h Revert "Avoid dynamic memory allocation on read path (#10453)" (#10541) 2022-08-19 11:02:54 -07:00
block_prefetcher.cc Fix stress test failure for async_io (#10660) 2022-09-12 14:48:06 -07:00
block_prefetcher.h Provide support for direct_reads with async_io (#10197) 2022-07-06 11:42:59 -07:00
block_prefix_index.cc
block_prefix_index.h
block_test.cc
block_type.h
cachable_entry.h Refactor to avoid confusing "raw block" (#10408) 2022-09-22 11:25:32 -07:00
data_block_footer.cc
data_block_footer.h
data_block_hash_index.cc
data_block_hash_index.h
data_block_hash_index_test.cc Add support for wide-column point lookups (#10540) 2022-08-19 11:51:12 -07:00
filter_block.h Pass rate_limiter_priority through filter block reader functions to FS (#10251) 2022-06-24 16:13:44 -07:00
filter_block_reader_common.cc Pass rate_limiter_priority through filter block reader functions to FS (#10251) 2022-06-24 16:13:44 -07:00
filter_block_reader_common.h Pass rate_limiter_priority through filter block reader functions to FS (#10251) 2022-06-24 16:13:44 -07:00
filter_policy.cc Have Cache use Status::MemoryLimit (#10262) 2022-07-06 14:41:46 -07:00
filter_policy_internal.h
flush_block_policy.cc
flush_block_policy.h
full_filter_block.cc Pass rate_limiter_priority through filter block reader functions to FS (#10251) 2022-06-24 16:13:44 -07:00
full_filter_block.h Pass rate_limiter_priority through filter block reader functions to FS (#10251) 2022-06-24 16:13:44 -07:00
full_filter_block_test.cc Pass rate_limiter_priority through filter block reader functions to FS (#10251) 2022-06-24 16:13:44 -07:00
hash_index_reader.cc
hash_index_reader.h
index_builder.cc Make InternalKeyComparator not configurable (#10342) 2022-07-14 10:09:31 -07:00
index_builder.h Make InternalKeyComparator not configurable (#10342) 2022-07-14 10:09:31 -07:00
index_reader_common.cc
index_reader_common.h
mock_block_based_table.h
parsed_full_filter_block.cc
parsed_full_filter_block.h
partitioned_filter_block.cc Add new option num_file_reads_for_auto_readahead in BlockBasedTableOptions (#10556) 2022-09-01 11:56:00 -07:00
partitioned_filter_block.h Update passing rate_limiter_priority for a PartitionedFilterBlockReader function to FS (#10438) 2022-07-29 11:32:54 -07:00
partitioned_filter_block_test.cc Pass rate_limiter_priority through filter block reader functions to FS (#10251) 2022-06-24 16:13:44 -07:00
partitioned_index_iterator.cc Provide support for direct_reads with async_io (#10197) 2022-07-06 11:42:59 -07:00
partitioned_index_iterator.h
partitioned_index_reader.cc Add new option num_file_reads_for_auto_readahead in BlockBasedTableOptions (#10556) 2022-09-01 11:56:00 -07:00
partitioned_index_reader.h
reader_common.cc
reader_common.h
uncompression_dict_reader.cc
uncompression_dict_reader.h