rocksdb/monitoring
Peter Dillinger d010b02e86 Fix race in options taking effect (#11929)
Summary:
In follow-up to https://github.com/facebook/rocksdb/issues/11922, fix a race in functions like CreateColumnFamily and SetDBOptions where the DB reports one option setting but a different one is left in effect.

To fix, we can add an extra mutex around these rare operations. We don't want to hold the DB mutex during I/O or other slow things because of the many purposes it serves, but a mutex more limited to these cases should be fine.

I believe this would fix a write-write race in https://github.com/facebook/rocksdb/issues/10079 but not the read-write race.

Intended follow-up to this:
* Should be able to remove write thread synchronization from DBImpl::WriteOptionsFile

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

Test Plan:
Added two mini-stress style regression tests that fail with >1% probability before this change:
DBOptionsTest::SetStatsDumpPeriodSecRace
ColumnFamilyTest::CreateAndDropPeriodicRace

I haven't reproduced such an inconsistency between in-memory options and on disk latest options, but this change at least improves safety and adds a test anyway:
DBOptionsTest::SetStatsDumpPeriodSecRace

Reviewed By: ajkr

Differential Revision: D50024506

Pulled By: pdillinger

fbshipit-source-id: 1e99a9ed4d96fdcf3ac5061ec6b3cee78aecdda4
2023-10-12 10:05:23 -07:00
..
file_read_sample.h Replace namespace name "rocksdb" with ROCKSDB_NAMESPACE (#6433) 2020-02-20 12:09:57 -08:00
histogram.cc clang format files under monitoring/ (#10857) 2022-10-24 20:45:54 -07:00
histogram.h clang format files under monitoring/ (#10857) 2022-10-24 20:45:54 -07:00
histogram_test.cc clang format files under monitoring/ (#10857) 2022-10-24 20:45:54 -07:00
histogram_windowing.cc clang format files under monitoring/ (#10857) 2022-10-24 20:45:54 -07:00
histogram_windowing.h clang format files under monitoring/ (#10857) 2022-10-24 20:45:54 -07:00
in_memory_stats_history.cc clang format files under monitoring/ (#10857) 2022-10-24 20:45:54 -07:00
in_memory_stats_history.h Replace namespace name "rocksdb" with ROCKSDB_NAMESPACE (#6433) 2020-02-20 12:09:57 -08:00
instrumented_mutex.cc Inject spurious wakeup and sleep before acquiring db mutex to expose race condition (#10291) 2022-09-12 13:55:23 -07:00
instrumented_mutex.h Fix race in options taking effect (#11929) 2023-10-12 10:05:23 -07:00
iostats_context.cc clang format files under monitoring/ (#10857) 2022-10-24 20:45:54 -07:00
iostats_context_imp.h Fix build error with NIOSTATS_CONTEXT (#10506) 2022-08-23 15:00:14 -07:00
iostats_context_test.cc clang format files under monitoring/ (#10857) 2022-10-24 20:45:54 -07:00
perf_context.cc Block fetch CPU time counters in perf context (#11342) 2023-04-15 11:09:44 -07:00
perf_context_imp.h Remove ROCKSDB_SUPPORT_THREAD_LOCAL define because it's a part of C++11 (#10015) 2022-05-18 15:25:19 -07:00
perf_level.cc clang format files under monitoring/ (#10857) 2022-10-24 20:45:54 -07:00
perf_level_imp.h clang format files under monitoring/ (#10857) 2022-10-24 20:45:54 -07:00
perf_step_timer.h Change internal headers with duplicate names (#11408) 2023-05-17 11:27:09 -07:00
persistent_stats_history.cc clang format files under monitoring/ (#10857) 2022-10-24 20:45:54 -07:00
persistent_stats_history.h Replace namespace name "rocksdb" with ROCKSDB_NAMESPACE (#6433) 2020-02-20 12:09:57 -08:00
statistics.cc Add statistics `COMPACTION_CPU_TOTAL_TIME` for total compaction time (#11741) 2023-09-12 15:48:36 -07:00
statistics_impl.h Change internal headers with duplicate names (#11408) 2023-05-17 11:27:09 -07:00
statistics_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
stats_history_test.cc Remove RocksDB LITE (#11147) 2023-01-27 13:14:19 -08:00
thread_status_impl.cc Replace namespace name "rocksdb" with ROCKSDB_NAMESPACE (#6433) 2020-02-20 12:09:57 -08:00
thread_status_updater.cc Group rocksdb.sst.read.micros stat by IOActivity flush and compaction (#11288) 2023-04-21 09:07:18 -07:00
thread_status_updater.h Group rocksdb.sst.read.micros stat by IOActivity flush and compaction (#11288) 2023-04-21 09:07:18 -07:00
thread_status_updater_debug.cc Replace reinterpret_cast with static_cast_with_check (#7067) 2020-07-02 19:25:41 -07:00
thread_status_util.cc Group rocksdb.sst.read.micros stat by IOActivity flush and compaction (#11288) 2023-04-21 09:07:18 -07:00
thread_status_util.h Group rocksdb.sst.read.micros stat by IOActivity flush and compaction (#11288) 2023-04-21 09:07:18 -07:00
thread_status_util_debug.cc GetEntity Support for ReadOnlyDB and SecondaryDB (#11799) 2023-09-15 08:30:44 -07:00