Fix a minor data race in stats dumping threads initialization (#7151)
Summary: https://github.com/facebook/rocksdb/pull/7145 creates a minor data race against the stat creation counter. Turn it to atomic. Pull Request resolved: https://github.com/facebook/rocksdb/pull/7151 Test Plan: Run the test. Reviewed By: ajkr Differential Revision: D22631014 fbshipit-source-id: c6fb69ac5b9df7139795dacea5ce9fb9fd3278d7
This commit is contained in:
parent
77062cf13e
commit
9870704420
@ -689,14 +689,13 @@ void DBImpl::StartTimedTasks() {
|
||||
// threads dumping at once, which causes severe lock contention in
|
||||
// jemalloc. Ensure successive `DB::Open()`s are staggered by at least
|
||||
// one second in the common case.
|
||||
static uint64_t stats_dump_threads_started = 0;
|
||||
static std::atomic<uint64_t> stats_dump_threads_started(0);
|
||||
thread_dump_stats_.reset(new ROCKSDB_NAMESPACE::RepeatableThread(
|
||||
[this]() { DBImpl::DumpStats(); }, "dump_st", env_,
|
||||
static_cast<uint64_t>(stats_dump_period_sec) * kMicrosInSecond,
|
||||
stats_dump_threads_started %
|
||||
stats_dump_threads_started.fetch_add(1) %
|
||||
static_cast<uint64_t>(stats_dump_period_sec) *
|
||||
kMicrosInSecond));
|
||||
++stats_dump_threads_started;
|
||||
}
|
||||
}
|
||||
stats_persist_period_sec = mutable_db_options_.stats_persist_period_sec;
|
||||
@ -1097,15 +1096,14 @@ Status DBImpl::SetDBOptions(
|
||||
// severe lock contention in jemalloc. Ensure successive enabling of
|
||||
// `stats_dump_period_sec` are staggered by at least one second in the
|
||||
// common case.
|
||||
static uint64_t stats_dump_threads_started = 0;
|
||||
static std::atomic<uint64_t> stats_dump_threads_started(0);
|
||||
thread_dump_stats_.reset(new ROCKSDB_NAMESPACE::RepeatableThread(
|
||||
[this]() { DBImpl::DumpStats(); }, "dump_st", env_,
|
||||
static_cast<uint64_t>(new_options.stats_dump_period_sec) *
|
||||
kMicrosInSecond,
|
||||
stats_dump_threads_started %
|
||||
stats_dump_threads_started.fetch_add(1) %
|
||||
static_cast<uint64_t>(new_options.stats_dump_period_sec) *
|
||||
kMicrosInSecond));
|
||||
++stats_dump_threads_started;
|
||||
} else {
|
||||
thread_dump_stats_.reset();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user