rocksdb/db
Peter Dillinger 94e3beec77 Cleanup, improve, stress test LockWAL() (#11143)
Summary:
The previous API comments for LockWAL didn't provide much about why you might want to use it, and didn't really meet what one would infer its contract was. Also, LockWAL was not in db_stress / crash test. In this change:

* Implement a counting semantics for LockWAL()+UnlockWAL(), so that they can safely be used concurrently across threads or recursively within a thread. This should make the API much less bug-prone and easier to use.
* Make sure no UnlockWAL() is needed after non-OK LockWAL() (to match RocksDB conventions)
* Make UnlockWAL() reliably return non-OK when there's no matching LockWAL() (for debug-ability)
* Clarify API comments on LockWAL(), UnlockWAL(), FlushWAL(), and SyncWAL(). Their exact meanings are not obvious, and I don't think it's appropriate to talk about implementation mutexes in the API comments, but about what operations might block each other.
* Add LockWAL()/UnlockWAL() to db_stress and crash test, mostly to check for assertion failures, but also checks that latest seqno doesn't change while WAL is locked. This is simpler to add when LockWAL() is allowed in multiple threads.
* Remove unnecessary use of sync points in test DBWALTest::LockWal. There was a bug during development of above changes that caused this test to fail sporadically, with and without this sync point change.

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

Test Plan: unit tests added / updated, added to stress/crash test

Reviewed By: ajkr

Differential Revision: D42848627

Pulled By: pdillinger

fbshipit-source-id: 6d976c51791941a31fd8fbf28b0f82e888d9f4b4
2023-01-30 22:52:30 -08:00
..
blob Use user key on sst file for blob verification for Get and MultiGet (#11105) 2023-01-30 10:21:21 -08:00
compaction Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_impl Cleanup, improve, stress test LockWAL() (#11143) 2023-01-30 22:52:30 -08:00
wide Support Merge for wide-column entities in the compaction logic (#10946) 2022-11-11 16:32:32 -08:00
arena_wrapped_db_iter.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
arena_wrapped_db_iter.h Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
builder.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
builder.h Include estimated bytes deleted by range tombstones in compensated file size (#10734) 2022-12-29 13:28:24 -08:00
c.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
c_test.c Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
column_family.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
column_family.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
column_family_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
compact_files_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
comparator_db_test.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
convenience.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
corruption_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
cuckoo_table_db_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_basic_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_block_cache_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_bloom_filter_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_compaction_filter_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_compaction_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_dynamic_level_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_encryption_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_filesnapshot.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_flush_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_info_dumper.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
db_info_dumper.h Add a DB Session ID (#6959) 2020-06-15 10:47:02 -07:00
db_inplace_update_test.cc Fix in-place updates for value types other than kTypeValue (#10254) 2022-06-27 16:37:09 -07:00
db_io_failure_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_iter.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_iter.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_iter_stress_test.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
db_iter_test.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
db_iterator_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_kv_checksum_test.cc Print stack traces on frozen tests in CI (#10828) 2022-10-18 00:35:35 -07:00
db_log_iter_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_logical_block_size_cache_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_memtable_test.cc Add support for wide-column point lookups (#10540) 2022-08-19 11:51:12 -07:00
db_merge_operand_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_merge_operator_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_options_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_properties_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_range_del_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_rate_limiter_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_readonly_with_timestamp_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_secondary_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_sst_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_statistics_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_table_properties_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_tailing_iter_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_test2.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_test_util.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_test_util.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_universal_compaction_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_wal_test.cc Cleanup, improve, stress test LockWAL() (#11143) 2023-01-30 22:52:30 -08:00
db_with_timestamp_basic_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_with_timestamp_compaction_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_with_timestamp_test_util.cc Add timestamp support to DBImplReadOnly (#10004) 2022-05-19 18:39:41 -07:00
db_with_timestamp_test_util.h Add timestamp support to DBImplReadOnly (#10004) 2022-05-19 18:39:41 -07:00
db_write_buffer_manager_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
db_write_test.cc Cleanup, improve, stress test LockWAL() (#11143) 2023-01-30 22:52:30 -08:00
dbformat.cc Remove copying of range tombstones keys in iterator (#10878) 2022-11-28 19:27:22 -08:00
dbformat.h Remove copying of range tombstones keys in iterator (#10878) 2022-11-28 19:27:22 -08:00
dbformat_test.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
deletefile_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
error_handler.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
error_handler.h Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
error_handler_fs_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
event_helpers.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
event_helpers.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
experimental.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
external_sst_file_basic_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
external_sst_file_ingestion_job.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
external_sst_file_ingestion_job.h Add missing range conflict check between file ingestion and RefitLevel() (#10988) 2022-12-29 15:05:36 -08:00
external_sst_file_test.cc Move ExternalSSTTestEnv to FileSystemWrapper (#11139) 2023-01-27 14:51:39 -08:00
fault_injection_test.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
file_indexer.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
file_indexer.h Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
file_indexer_test.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
filename_test.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
flush_job.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
flush_job.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
flush_job_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
flush_scheduler.cc Replace namespace name "rocksdb" with ROCKSDB_NAMESPACE (#6433) 2020-02-20 12:09:57 -08:00
flush_scheduler.h Include C++ standard library headers instead of C compatibility headers (#8068) 2021-03-19 12:09:47 -07:00
forward_iterator.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
forward_iterator.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
forward_iterator_bench.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
history_trimming_iterator.h Revert #10802 Consider range tombstone in compaction output file cutting (#11089) 2023-01-13 12:28:21 -08:00
import_column_family_job.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
import_column_family_job.h Add some missing headers (#10519) 2022-08-11 12:45:50 -07:00
import_column_family_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
internal_stats.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
internal_stats.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
job_context.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
kv_checksum.h Add memtable per key-value checksum (#10281) 2022-08-12 13:51:32 -07:00
listener_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
log_format.h Add record to set WAL compression type if enabled (#9556) 2022-02-17 16:19:31 -08:00
log_reader.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
log_reader.h Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
log_test.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
log_writer.cc Add manual_wal_flush, FlushWAL() to stress/crash test (#10698) 2022-09-30 15:48:33 -07:00
log_writer.h Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
logs_with_prep_tracker.cc Replace namespace name "rocksdb" with ROCKSDB_NAMESPACE (#6433) 2020-02-20 12:09:57 -08:00
logs_with_prep_tracker.h Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
lookup_key.h Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
malloc_stats.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
malloc_stats.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
manual_compaction_test.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
memtable.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
memtable.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
memtable_list.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
memtable_list.h Fix memtable-only iterator regression (#10705) 2022-09-21 09:49:31 -07:00
memtable_list_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
merge_context.h Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
merge_helper.cc Add API to limit blast radius of merge operator failure (#11092) 2023-01-20 14:40:30 -08:00
merge_helper.h Add API to limit blast radius of merge operator failure (#11092) 2023-01-20 14:40:30 -08:00
merge_helper_test.cc Basic Support for Merge with user-defined timestamp (#10819) 2022-10-31 22:28:58 -07:00
merge_operator.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
merge_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
obsolete_files_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
options_file_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
output_validator.cc Cleanup includes in dbformat.h (#8930) 2021-09-29 04:04:40 -07:00
output_validator.h Cleanup includes in dbformat.h (#8930) 2021-09-29 04:04:40 -07:00
perf_context_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
periodic_task_scheduler.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
periodic_task_scheduler.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
periodic_task_scheduler_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
pinned_iterators_manager.h Avoid allocations/copies for large GetMergeOperands() results (#10458) 2022-08-04 00:42:13 -07:00
plain_table_db_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
post_memtable_callback.h Snapshots with user-specified timestamps (#9879) 2022-06-10 16:07:03 -07:00
pre_release_callback.h Fix and detect headers with missing dependencies (#8893) 2021-09-10 10:00:26 -07:00
prefix_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
range_del_aggregator.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
range_del_aggregator.h User-defined timestamp support for DeleteRange() (#10661) 2022-09-30 16:13:03 -07:00
range_del_aggregator_bench.cc Improve FragmentTombstones() speed by lazily initializing seq_set_ (#10848) 2022-10-25 11:33:04 -07:00
range_del_aggregator_test.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
range_tombstone_fragmenter.cc Improve FragmentTombstones() speed by lazily initializing seq_set_ (#10848) 2022-10-25 11:33:04 -07:00
range_tombstone_fragmenter.h Improve FragmentTombstones() speed by lazily initializing seq_set_ (#10848) 2022-10-25 11:33:04 -07:00
range_tombstone_fragmenter_test.cc snapshots of FragmentedRangeTombstoneList must in ascending order (#11046) 2022-12-19 15:06:22 -08:00
read_callback.h Fix and detect headers with missing dependencies (#8893) 2021-09-10 10:00:26 -07:00
repair.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
repair_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
seqno_time_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
seqno_to_time_mapping.cc Add option preserve_internal_time_seconds to preserve the time info (#10747) 2022-10-07 18:49:40 -07:00
seqno_to_time_mapping.h Add option preserve_internal_time_seconds to preserve the time info (#10747) 2022-10-07 18:49:40 -07:00
snapshot_checker.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
snapshot_impl.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
snapshot_impl.h Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
table_cache.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
table_cache.h Major Cache refactoring, CPU efficiency improvement (#10975) 2023-01-11 14:20:40 -08:00
table_cache_sync_and_async.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
table_properties_collector.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
table_properties_collector.h Fix an assertion failure in TimestampTablePropertiesCollector for empty output (#11015) 2022-12-05 13:46:27 -08:00
table_properties_collector_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
transaction_log_impl.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
transaction_log_impl.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
trim_history_scheduler.cc Replace namespace name "rocksdb" with ROCKSDB_NAMESPACE (#6433) 2020-02-20 12:09:57 -08:00
trim_history_scheduler.h Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
version_builder.cc Major Cache refactoring, CPU efficiency improvement (#10975) 2023-01-11 14:20:40 -08:00
version_builder.h Sort L0 files by newly introduced epoch_num (#10922) 2022-12-13 13:29:37 -08:00
version_builder_test.cc Include estimated bytes deleted by range tombstones in compensated file size (#10734) 2022-12-29 13:28:24 -08:00
version_edit.cc Include estimated bytes deleted by range tombstones in compensated file size (#10734) 2022-12-29 13:28:24 -08:00
version_edit.h Avoid counting extra range tombstone compensated size in AddRangeDels() (#11091) 2023-01-17 12:47:44 -08:00
version_edit_handler.cc Sort L0 files by newly introduced epoch_num (#10922) 2022-12-13 13:29:37 -08:00
version_edit_handler.h Sort L0 files by newly introduced epoch_num (#10922) 2022-12-13 13:29:37 -08:00
version_edit_test.cc Include estimated bytes deleted by range tombstones in compensated file size (#10734) 2022-12-29 13:28:24 -08:00
version_set.cc Use user key on sst file for blob verification for Get and MultiGet (#11105) 2023-01-30 10:21:21 -08:00
version_set.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
version_set_sync_and_async.h Major Cache refactoring, CPU efficiency improvement (#10975) 2023-01-11 14:20:40 -08:00
version_set_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
version_util.h Allow manifest fix-up without requiring prior state (#10796) 2022-10-10 17:59:17 -07:00
wal_edit.cc Do not hold mutex when write keys if not necessary (#7516) 2022-07-21 13:35:36 -07:00
wal_edit.h Do not hold mutex when write keys if not necessary (#7516) 2022-07-21 13:35:36 -07:00
wal_edit_test.cc Do not hold mutex when write keys if not necessary (#7516) 2022-07-21 13:35:36 -07:00
wal_manager.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
wal_manager.h Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
wal_manager_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
write_batch.cc Add API to limit blast radius of merge operator failure (#11092) 2023-01-20 14:40:30 -08:00
write_batch_base.cc Replace namespace name "rocksdb" with ROCKSDB_NAMESPACE (#6433) 2020-02-20 12:09:57 -08:00
write_batch_internal.h Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
write_batch_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
write_callback.h Replace namespace name "rocksdb" with ROCKSDB_NAMESPACE (#6433) 2020-02-20 12:09:57 -08:00
write_callback_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
write_controller.cc Revamp WriteController (#8064) 2021-03-18 09:47:31 -07:00
write_controller.h Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
write_controller_test.cc Ran clang-format on db/ directory (#10910) 2022-11-02 14:34:24 -07:00
write_thread.cc Revise LockWAL/UnlockWAL implementation (#11020) 2022-12-13 21:45:00 -08:00
write_thread.h Fix race in ExitAsBatchGroupLeader with pipelined writes (#9944) 2022-08-02 14:52:10 -07:00