summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatt Diener <matt.diener@mongodb.com>2022-10-12 20:19:44 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-10-12 21:06:32 +0000
commit02a79726b9109458d4eb37b010d58faf7332929b (patch)
tree03b789383d087ea67e627f8201e8f75b99a9e18e /src
parent112d7ad9e8eab0c0f8839a98d78b712b2eff9cbd (diff)
downloadmongo-02a79726b9109458d4eb37b010d58faf7332929b.tar.gz
SERVER-70264 make slowMS and sampleRate atomic
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/commands/profile_common.cpp12
-rw-r--r--src/mongo/db/curop.cpp2
-rw-r--r--src/mongo/db/curop.h2
-rw-r--r--src/mongo/db/repl/oplog_applier_impl.cpp2
-rw-r--r--src/mongo/db/repl/oplog_applier_impl_test.cpp6
-rw-r--r--src/mongo/db/repl/oplog_applier_impl_test_fixture.h4
-rw-r--r--src/mongo/db/s/auto_split_vector.cpp2
-rw-r--r--src/mongo/db/s/split_vector.cpp2
-rw-r--r--src/mongo/db/s/transaction_coordinator.cpp2
-rw-r--r--src/mongo/db/s/transaction_coordinator_test.cpp6
-rw-r--r--src/mongo/db/server_options.h4
-rw-r--r--src/mongo/db/server_options_helpers.cpp5
-rw-r--r--src/mongo/db/server_options_test.cpp12
-rw-r--r--src/mongo/db/stats/operation_latency_histogram.cpp5
-rw-r--r--src/mongo/db/stats/operation_latency_histogram_test.cpp6
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp2
-rw-r--r--src/mongo/db/transaction/transaction_participant.cpp2
-rw-r--r--src/mongo/db/transaction/transaction_participant_test.cpp108
-rw-r--r--src/mongo/db/ttl.cpp4
-rw-r--r--src/mongo/s/transaction_router.cpp2
-rw-r--r--src/mongo/s/transaction_router_test.cpp52
-rw-r--r--src/mongo/util/log_with_sampling.h2
-rw-r--r--src/mongo/util/log_with_sampling_test.cpp7
23 files changed, 127 insertions, 124 deletions
diff --git a/src/mongo/db/commands/profile_common.cpp b/src/mongo/db/commands/profile_common.cpp
index a2d42f3480c..54223b8f5a7 100644
--- a/src/mongo/db/commands/profile_common.cpp
+++ b/src/mongo/db/commands/profile_common.cpp
@@ -84,8 +84,8 @@ bool ProfileCmdBase::run(OperationContext* opCtx,
// Delegate to _applyProfilingLevel to set the profiling level appropriately whether
// we are on mongoD or mongoS.
auto oldSettings = _applyProfilingLevel(opCtx, dbName, request);
- auto oldSlowMS = serverGlobalParams.slowMS;
- auto oldSampleRate = serverGlobalParams.sampleRate;
+ auto oldSlowMS = serverGlobalParams.slowMS.load();
+ auto oldSampleRate = serverGlobalParams.sampleRate.load();
result.append("was", oldSettings.level);
result.append("slowms", oldSlowMS);
@@ -100,10 +100,10 @@ bool ProfileCmdBase::run(OperationContext* opCtx,
}
if (auto slowms = request.getSlowms()) {
- serverGlobalParams.slowMS = *slowms;
+ serverGlobalParams.slowMS.store(*slowms);
}
if (auto sampleRate = request.getSampleRate()) {
- serverGlobalParams.sampleRate = *sampleRate;
+ serverGlobalParams.sampleRate.store(*sampleRate);
}
// Log the change made to server's profiling settings, if the request asks to change anything.
@@ -127,8 +127,8 @@ bool ProfileCmdBase::run(OperationContext* opCtx,
// (0, 1, or 2).
auto newSettings = CollectionCatalog::get(opCtx)->getDatabaseProfileSettings(dbName);
newState.append("level"_sd, newSettings.level);
- newState.append("slowms"_sd, serverGlobalParams.slowMS);
- newState.append("sampleRate"_sd, serverGlobalParams.sampleRate);
+ newState.append("slowms"_sd, serverGlobalParams.slowMS.load());
+ newState.append("sampleRate"_sd, serverGlobalParams.sampleRate.load());
if (newSettings.filter) {
newState.append("filter"_sd, newSettings.filter->serialize());
}
diff --git a/src/mongo/db/curop.cpp b/src/mongo/db/curop.cpp
index 0121a310aa4..a0c481264df 100644
--- a/src/mongo/db/curop.cpp
+++ b/src/mongo/db/curop.cpp
@@ -397,7 +397,7 @@ bool CurOp::completeAndLogOperation(OperationContext* opCtx,
boost::optional<size_t> responseLength,
boost::optional<long long> slowMsOverride,
bool forceLog) {
- const long long slowMs = slowMsOverride.value_or(serverGlobalParams.slowMS);
+ const long long slowMs = slowMsOverride.value_or(serverGlobalParams.slowMS.load());
// Record the size of the response returned to the client, if applicable.
if (responseLength) {
diff --git a/src/mongo/db/curop.h b/src/mongo/db/curop.h
index 482145cbb88..f94e9a48afb 100644
--- a/src/mongo/db/curop.h
+++ b/src/mongo/db/curop.h
@@ -529,7 +529,7 @@ public:
if (CollectionCatalog::get(opCtx)->getDatabaseProfileSettings(getNSS().db()).filter)
return true;
- return elapsedTimeExcludingPauses() >= Milliseconds{serverGlobalParams.slowMS};
+ return elapsedTimeExcludingPauses() >= Milliseconds{serverGlobalParams.slowMS.load()};
}
/**
diff --git a/src/mongo/db/repl/oplog_applier_impl.cpp b/src/mongo/db/repl/oplog_applier_impl.cpp
index 616c184c9a9..0c03489dfb3 100644
--- a/src/mongo/db/repl/oplog_applier_impl.cpp
+++ b/src/mongo/db/repl/oplog_applier_impl.cpp
@@ -90,7 +90,7 @@ Status finishAndLogApply(OperationContext* opCtx,
if (shouldLogSlowOpWithSampling(opCtx,
MONGO_LOGV2_DEFAULT_COMPONENT,
Milliseconds(opDuration),
- Milliseconds(serverGlobalParams.slowMS))
+ Milliseconds(serverGlobalParams.slowMS.load()))
.first) {
logv2::DynamicAttributes attrs;
diff --git a/src/mongo/db/repl/oplog_applier_impl_test.cpp b/src/mongo/db/repl/oplog_applier_impl_test.cpp
index 48c558cfdf3..d7eca322b58 100644
--- a/src/mongo/db/repl/oplog_applier_impl_test.cpp
+++ b/src/mongo/db/repl/oplog_applier_impl_test.cpp
@@ -2796,7 +2796,7 @@ TEST_F(OplogApplierImplTest, DropDatabaseSucceedsInRecovering) {
TEST_F(OplogApplierImplWithFastAutoAdvancingClockTest, LogSlowOpApplicationWhenSuccessful) {
// This duration is greater than "slowMS", so the op would be considered slow.
- auto applyDuration = serverGlobalParams.slowMS * 10;
+ auto applyDuration = serverGlobalParams.slowMS.load() * 10;
// We are inserting into an existing collection.
const NamespaceString nss("test.t");
@@ -2820,7 +2820,7 @@ TEST_F(OplogApplierImplWithFastAutoAdvancingClockTest, LogSlowOpApplicationWhenS
TEST_F(OplogApplierImplWithFastAutoAdvancingClockTest, DoNotLogSlowOpApplicationWhenFailed) {
// This duration is greater than "slowMS", so the op would be considered slow.
- auto applyDuration = serverGlobalParams.slowMS * 10;
+ auto applyDuration = serverGlobalParams.slowMS.load() * 10;
// We are trying to insert into a non-existing database.
NamespaceString nss("test.t");
@@ -2842,7 +2842,7 @@ TEST_F(OplogApplierImplWithFastAutoAdvancingClockTest, DoNotLogSlowOpApplication
TEST_F(OplogApplierImplWithSlowAutoAdvancingClockTest, DoNotLogNonSlowOpApplicationWhenSuccessful) {
// This duration is below "slowMS", so the op would *not* be considered slow.
- auto applyDuration = serverGlobalParams.slowMS / 10;
+ auto applyDuration = serverGlobalParams.slowMS.load() / 10;
// We are inserting into an existing collection.
const NamespaceString nss("test.t");
diff --git a/src/mongo/db/repl/oplog_applier_impl_test_fixture.h b/src/mongo/db/repl/oplog_applier_impl_test_fixture.h
index 1792cb54dba..c96ca3a881a 100644
--- a/src/mongo/db/repl/oplog_applier_impl_test_fixture.h
+++ b/src/mongo/db/repl/oplog_applier_impl_test_fixture.h
@@ -237,14 +237,14 @@ class OplogApplierImplWithFastAutoAdvancingClockTest : public OplogApplierImplTe
protected:
OplogApplierImplWithFastAutoAdvancingClockTest()
: OplogApplierImplTest(
- Options{}.useMockClock(true, Milliseconds{serverGlobalParams.slowMS * 10})) {}
+ Options{}.useMockClock(true, Milliseconds{serverGlobalParams.slowMS.load() * 10})) {}
};
class OplogApplierImplWithSlowAutoAdvancingClockTest : public OplogApplierImplTest {
protected:
OplogApplierImplWithSlowAutoAdvancingClockTest()
: OplogApplierImplTest(
- Options{}.useMockClock(true, Milliseconds{serverGlobalParams.slowMS / 10})) {}
+ Options{}.useMockClock(true, Milliseconds{serverGlobalParams.slowMS.load() / 10})) {}
};
// Utility class to allow easily scanning a collection. Scans in forward order, returns
diff --git a/src/mongo/db/s/auto_split_vector.cpp b/src/mongo/db/s/auto_split_vector.cpp
index efbdad8c3c5..2806ab0cf38 100644
--- a/src/mongo/db/s/auto_split_vector.cpp
+++ b/src/mongo/db/s/auto_split_vector.cpp
@@ -370,7 +370,7 @@ std::pair<std::vector<BSONObj>, bool> autoSplitVector(OperationContext* opCtx,
"key"_attr = redact(prettyKey(keyPattern, frequentKey)));
}
- if (elapsedMillisToFindSplitPoints > serverGlobalParams.slowMS) {
+ if (elapsedMillisToFindSplitPoints > serverGlobalParams.slowMS.load()) {
LOGV2_WARNING(5865005,
"Finding the auto split vector completed",
"namespace"_attr = nss,
diff --git a/src/mongo/db/s/split_vector.cpp b/src/mongo/db/s/split_vector.cpp
index fc467a2ebdb..e880703f3e2 100644
--- a/src/mongo/db/s/split_vector.cpp
+++ b/src/mongo/db/s/split_vector.cpp
@@ -337,7 +337,7 @@ std::vector<BSONObj> splitVector(OperationContext* opCtx,
// Remove the sentinel at the beginning before returning
splitKeys.erase(splitKeys.begin());
- if (timer.millis() > serverGlobalParams.slowMS) {
+ if (timer.millis() > serverGlobalParams.slowMS.load()) {
LOGV2_WARNING(
22115,
"Finding the split vector for {namespace} over {keyPattern} keyCount: {keyCount} "
diff --git a/src/mongo/db/s/transaction_coordinator.cpp b/src/mongo/db/s/transaction_coordinator.cpp
index 7b77dcd1857..39892137e9a 100644
--- a/src/mongo/db/s/transaction_coordinator.cpp
+++ b/src/mongo/db/s/transaction_coordinator.cpp
@@ -467,7 +467,7 @@ void TransactionCoordinator::_done(Status status) {
(shouldLog(logv2::LogComponent::kTransaction, logv2::LogSeverity::Debug(1)) ||
_transactionCoordinatorMetricsObserver->getSingleTransactionCoordinatorStats()
.getTwoPhaseCommitDuration(tickSource, tickSource->getTicks()) >
- Milliseconds(serverGlobalParams.slowMS))) {
+ Milliseconds(serverGlobalParams.slowMS.load()))) {
_logSlowTwoPhaseCommit(*_decision);
}
diff --git a/src/mongo/db/s/transaction_coordinator_test.cpp b/src/mongo/db/s/transaction_coordinator_test.cpp
index 9c02733fdb0..065cb8a237f 100644
--- a/src/mongo/db/s/transaction_coordinator_test.cpp
+++ b/src/mongo/db/s/transaction_coordinator_test.cpp
@@ -2386,7 +2386,7 @@ TEST_F(TransactionCoordinatorMetricsTest, DoesNotLogTransactionsUnderSlowMSThres
// slowMS setting.
auto severityGuard = unittest::MinimumLoggedSeverityGuard{logv2::LogComponent::kTransaction,
logv2::LogSeverity::Log()};
- serverGlobalParams.slowMS = 100;
+ serverGlobalParams.slowMS.store(100);
startCapturingLogMessages();
TransactionCoordinator coordinator(
@@ -2418,7 +2418,7 @@ TEST_F(
// slowMS setting.
auto severityGuard = unittest::MinimumLoggedSeverityGuard{logv2::LogComponent::kTransaction,
logv2::LogSeverity::Log()};
- serverGlobalParams.slowMS = 100;
+ serverGlobalParams.slowMS.store(100);
startCapturingLogMessages();
TransactionCoordinator coordinator(
@@ -2448,7 +2448,7 @@ TEST_F(TransactionCoordinatorMetricsTest, LogsTransactionsOverSlowMSThreshold) {
// slowMS setting.
auto severityGuard = unittest::MinimumLoggedSeverityGuard{logv2::LogComponent::kTransaction,
logv2::LogSeverity::Log()};
- serverGlobalParams.slowMS = 100;
+ serverGlobalParams.slowMS.store(100);
startCapturingLogMessages();
TransactionCoordinator coordinator(
diff --git a/src/mongo/db/server_options.h b/src/mongo/db/server_options.h
index 2cfc6cef3e0..c9b9441e65e 100644
--- a/src/mongo/db/server_options.h
+++ b/src/mongo/db/server_options.h
@@ -77,8 +77,8 @@ struct ServerGlobalParams {
int defaultProfile = 0; // --profile
boost::optional<BSONObj> defaultProfileFilter;
- int slowMS = 100; // --time in ms that is "slow"
- double sampleRate = 1.0; // --samplerate rate at which to sample slow queries
+ AtomicWord<int> slowMS{100}; // --time in ms that is "slow"
+ AtomicWord<double> sampleRate{1.0}; // --samplerate rate at which to sample slow queries
int defaultLocalThresholdMillis = 15; // --localThreshold in ms to consider a node local
bool moveParanoia = false; // for move chunk paranoia
diff --git a/src/mongo/db/server_options_helpers.cpp b/src/mongo/db/server_options_helpers.cpp
index 29fd58cca46..eea318969d7 100644
--- a/src/mongo/db/server_options_helpers.cpp
+++ b/src/mongo/db/server_options_helpers.cpp
@@ -448,11 +448,12 @@ Status storeBaseOptions(const moe::Environment& params) {
}
if (params.count("operationProfiling.slowOpThresholdMs")) {
- serverGlobalParams.slowMS = params["operationProfiling.slowOpThresholdMs"].as<int>();
+ serverGlobalParams.slowMS.store(params["operationProfiling.slowOpThresholdMs"].as<int>());
}
if (params.count("operationProfiling.slowOpSampleRate")) {
- serverGlobalParams.sampleRate = params["operationProfiling.slowOpSampleRate"].as<double>();
+ serverGlobalParams.sampleRate.store(
+ params["operationProfiling.slowOpSampleRate"].as<double>());
}
if (params.count("operationProfiling.filter")) {
diff --git a/src/mongo/db/server_options_test.cpp b/src/mongo/db/server_options_test.cpp
index 08f47e74ce8..2f29f51ec6e 100644
--- a/src/mongo/db/server_options_test.cpp
+++ b/src/mongo/db/server_options_test.cpp
@@ -507,7 +507,7 @@ TEST(SetupOptions, SlowMsCommandLineParamParsesSuccessfully) {
ASSERT_OK(::mongo::setupServerOptions(argv));
ASSERT_OK(::mongo::storeServerOptions(environment));
- ASSERT_EQ(::mongo::serverGlobalParams.slowMS, 300);
+ ASSERT_EQ(::mongo::serverGlobalParams.slowMS.load(), 300);
}
TEST(SetupOptions, SlowMsParamInitializedSuccessfullyFromINIConfigFile) {
@@ -532,7 +532,7 @@ TEST(SetupOptions, SlowMsParamInitializedSuccessfullyFromINIConfigFile) {
ASSERT_OK(::mongo::setupServerOptions(argv));
ASSERT_OK(::mongo::storeServerOptions(environment));
- ASSERT_EQ(::mongo::serverGlobalParams.slowMS, 300);
+ ASSERT_EQ(::mongo::serverGlobalParams.slowMS.load(), 300);
}
TEST(SetupOptions, SlowMsParamInitializedSuccessfullyFromYAMLConfigFile) {
@@ -559,7 +559,7 @@ TEST(SetupOptions, SlowMsParamInitializedSuccessfullyFromYAMLConfigFile) {
ASSERT_OK(::mongo::setupServerOptions(argv));
ASSERT_OK(::mongo::storeServerOptions(environment));
- ASSERT_EQ(::mongo::serverGlobalParams.slowMS, 300);
+ ASSERT_EQ(::mongo::serverGlobalParams.slowMS.load(), 300);
}
TEST(SetupOptions, NonNumericSlowMsCommandLineOptionFailsToParse) {
@@ -615,7 +615,7 @@ TEST(SetupOptions, SampleRateCommandLineParamParsesSuccessfully) {
ASSERT_OK(::mongo::setupServerOptions(argv));
ASSERT_OK(::mongo::storeServerOptions(environment));
- ASSERT_EQ(::mongo::serverGlobalParams.sampleRate, 0.5);
+ ASSERT_EQ(::mongo::serverGlobalParams.sampleRate.load(), 0.5);
}
TEST(SetupOptions, SampleRateParamInitializedSuccessfullyFromINIConfigFile) {
@@ -640,7 +640,7 @@ TEST(SetupOptions, SampleRateParamInitializedSuccessfullyFromINIConfigFile) {
ASSERT_OK(::mongo::setupServerOptions(argv));
ASSERT_OK(::mongo::storeServerOptions(environment));
- ASSERT_EQ(::mongo::serverGlobalParams.sampleRate, 0.5);
+ ASSERT_EQ(::mongo::serverGlobalParams.sampleRate.load(), 0.5);
}
TEST(SetupOptions, SampleRateParamInitializedSuccessfullyFromYAMLConfigFile) {
@@ -667,7 +667,7 @@ TEST(SetupOptions, SampleRateParamInitializedSuccessfullyFromYAMLConfigFile) {
ASSERT_OK(::mongo::setupServerOptions(argv));
ASSERT_OK(::mongo::storeServerOptions(environment));
- ASSERT_EQ(::mongo::serverGlobalParams.sampleRate, 0.5);
+ ASSERT_EQ(::mongo::serverGlobalParams.sampleRate.load(), 0.5);
}
TEST(SetupOptions, NonNumericSampleRateCommandLineOptionFailsToParse) {
diff --git a/src/mongo/db/stats/operation_latency_histogram.cpp b/src/mongo/db/stats/operation_latency_histogram.cpp
index d9a16e9cff2..689220430dc 100644
--- a/src/mongo/db/stats/operation_latency_histogram.cpp
+++ b/src/mongo/db/stats/operation_latency_histogram.cpp
@@ -99,7 +99,7 @@ void OperationLatencyHistogram::_append(const HistogramData& data,
BSONObjBuilder* builder) const {
uint64_t filteredCount = 0;
- bool filterBuckets = slowMSBucketsOnly && serverGlobalParams.slowMS >= 0;
+ bool filterBuckets = slowMSBucketsOnly && serverGlobalParams.slowMS.load() >= 0;
size_t lowestFilteredBound = 0;
BSONObjBuilder histogramBuilder(builder->subobjStart(key));
@@ -111,7 +111,8 @@ void OperationLatencyHistogram::_append(const HistogramData& data,
}
if (filterBuckets &&
- (kLowerBounds[i] / 1000) >= static_cast<unsigned int>(serverGlobalParams.slowMS)) {
+ (kLowerBounds[i] / 1000) >=
+ static_cast<unsigned int>(serverGlobalParams.slowMS.load())) {
if (lowestFilteredBound == 0) {
lowestFilteredBound = kLowerBounds[i];
}
diff --git a/src/mongo/db/stats/operation_latency_histogram_test.cpp b/src/mongo/db/stats/operation_latency_histogram_test.cpp
index 046def97078..92b2bddded6 100644
--- a/src/mongo/db/stats/operation_latency_histogram_test.cpp
+++ b/src/mongo/db/stats/operation_latency_histogram_test.cpp
@@ -104,9 +104,9 @@ TEST(OperationLatencyHistogram, CheckBucketCountsAndTotalLatencySlowBuckets) {
}
}
- auto orig = serverGlobalParams.slowMS;
- serverGlobalParams.slowMS = 100;
- ScopeGuard g1 = [orig] { serverGlobalParams.slowMS = orig; };
+ auto orig = serverGlobalParams.slowMS.load();
+ serverGlobalParams.slowMS.store(100);
+ ScopeGuard g1 = [orig] { serverGlobalParams.slowMS.store(orig); };
// The additional +1 because of the first boundary.
uint64_t expectedSum = 3 * std::accumulate(kLowerBounds.begin(), kLowerBounds.end(), 0ULL) + 1;
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp
index 9d3995562c1..1f4d9d567b7 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp
@@ -424,7 +424,7 @@ void WiredTigerRecoveryUnit::_txnClose(bool commit) {
const int transactionTime = _timer->millis();
// `serverGlobalParams.slowMs` can be set to values <= 0. In those cases, give logging a
// break.
- if (transactionTime >= std::max(1, serverGlobalParams.slowMS)) {
+ if (transactionTime >= std::max(1, serverGlobalParams.slowMS.load())) {
LOGV2_DEBUG(22411,
kSlowTransactionSeverity.toInt(),
"Slow WT transaction. Lifetime of SnapshotId {snapshotId} was "
diff --git a/src/mongo/db/transaction/transaction_participant.cpp b/src/mongo/db/transaction/transaction_participant.cpp
index 81d09138ba9..bcb9bc689e4 100644
--- a/src/mongo/db/transaction/transaction_participant.cpp
+++ b/src/mongo/db/transaction/transaction_participant.cpp
@@ -2656,7 +2656,7 @@ void TransactionParticipant::Participant::_logSlowTransaction(
if (shouldLogSlowOpWithSampling(opCtx,
logv2::LogComponent::kTransaction,
opDuration,
- Milliseconds(serverGlobalParams.slowMS))
+ Milliseconds(serverGlobalParams.slowMS.load()))
.first) {
logv2::DynamicAttributes attr;
_transactionInfoForLog(
diff --git a/src/mongo/db/transaction/transaction_participant_test.cpp b/src/mongo/db/transaction/transaction_participant_test.cpp
index 61adbe097b6..971b81d2a91 100644
--- a/src/mongo/db/transaction/transaction_participant_test.cpp
+++ b/src/mongo/db/transaction/transaction_participant_test.cpp
@@ -3853,17 +3853,17 @@ TEST_F(TransactionsMetricsTest, LogTransactionInfoAfterSlowCommit) {
kNss, _uuid, BSON("_id" << 0), BSON("_id" << 0));
txnParticipant.addTransactionOperation(opCtx(), operation);
- const auto originalSlowMS = serverGlobalParams.slowMS;
- const auto originalSampleRate = serverGlobalParams.sampleRate;
+ const auto originalSlowMS = serverGlobalParams.slowMS.load();
+ const auto originalSampleRate = serverGlobalParams.sampleRate.load();
- serverGlobalParams.slowMS = 10;
- serverGlobalParams.sampleRate = 1;
+ serverGlobalParams.slowMS.store(10);
+ serverGlobalParams.sampleRate.store(1);
ON_BLOCK_EXIT([originalSlowMS, originalSampleRate] {
// serverGlobalParams may have been modified prior to this test, so we set them back to
// their default values.
- serverGlobalParams.slowMS = originalSlowMS;
- serverGlobalParams.sampleRate = originalSampleRate;
+ serverGlobalParams.slowMS.store(originalSlowMS);
+ serverGlobalParams.sampleRate.store(originalSampleRate);
});
tickSource->advance(Microseconds(11 * 1000));
@@ -3905,16 +3905,16 @@ TEST_F(TransactionsMetricsTest, LogPreparedTransactionInfoAfterSlowCommit) {
const int metricValue = 1;
setupAdditiveMetrics(metricValue, opCtx());
- const auto originalSlowMS = serverGlobalParams.slowMS;
- const auto originalSampleRate = serverGlobalParams.sampleRate;
+ const auto originalSlowMS = serverGlobalParams.slowMS.load();
+ const auto originalSampleRate = serverGlobalParams.sampleRate.load();
- serverGlobalParams.slowMS = 10;
- serverGlobalParams.sampleRate = 1;
+ serverGlobalParams.slowMS.store(10);
+ serverGlobalParams.sampleRate.store(1);
// Reset the global parameters to their original values after this test exits.
ON_BLOCK_EXIT([originalSlowMS, originalSampleRate] {
- serverGlobalParams.slowMS = originalSlowMS;
- serverGlobalParams.sampleRate = originalSampleRate;
+ serverGlobalParams.slowMS.store(originalSlowMS);
+ serverGlobalParams.sampleRate.store(originalSampleRate);
});
tickSource->advance(Microseconds(11 * 1000));
@@ -3955,16 +3955,16 @@ TEST_F(TransactionsMetricsTest, LogTransactionInfoAfterSlowAbort) {
txnParticipant.unstashTransactionResources(opCtx(), "abortTransaction");
- const auto originalSlowMS = serverGlobalParams.slowMS;
- const auto originalSampleRate = serverGlobalParams.sampleRate;
+ const auto originalSlowMS = serverGlobalParams.slowMS.load();
+ const auto originalSampleRate = serverGlobalParams.sampleRate.load();
- serverGlobalParams.slowMS = 10;
- serverGlobalParams.sampleRate = 1;
+ serverGlobalParams.slowMS.store(10);
+ serverGlobalParams.sampleRate.store(1);
// Reset the global parameters to their original values after this test exits.
ON_BLOCK_EXIT([originalSlowMS, originalSampleRate] {
- serverGlobalParams.slowMS = originalSlowMS;
- serverGlobalParams.sampleRate = originalSampleRate;
+ serverGlobalParams.slowMS.store(originalSlowMS);
+ serverGlobalParams.sampleRate.store(originalSampleRate);
});
tickSource->advance(Microseconds(11 * 1000));
@@ -4015,16 +4015,16 @@ TEST_F(TransactionsMetricsTest, LogPreparedTransactionInfoAfterSlowAbort) {
txnParticipant.unstashTransactionResources(opCtx(), "abortTransaction");
txnParticipant.prepareTransaction(opCtx(), {});
- const auto originalSlowMS = serverGlobalParams.slowMS;
- const auto originalSampleRate = serverGlobalParams.sampleRate;
+ const auto originalSlowMS = serverGlobalParams.slowMS.load();
+ const auto originalSampleRate = serverGlobalParams.sampleRate.load();
- serverGlobalParams.slowMS = 10;
- serverGlobalParams.sampleRate = 1;
+ serverGlobalParams.slowMS.store(10);
+ serverGlobalParams.sampleRate.store(1);
// Reset the global parameters to their original values after this test exits.
ON_BLOCK_EXIT([originalSlowMS, originalSampleRate] {
- serverGlobalParams.slowMS = originalSlowMS;
- serverGlobalParams.sampleRate = originalSampleRate;
+ serverGlobalParams.slowMS.store(originalSlowMS);
+ serverGlobalParams.sampleRate.store(originalSampleRate);
});
tickSource->advance(Microseconds(11 * 1000));
@@ -4076,16 +4076,16 @@ TEST_F(TransactionsMetricsTest, LogTransactionInfoAfterExceptionInPrepare) {
txnParticipant.unstashTransactionResources(opCtx(), "prepareTransaction");
- const auto originalSlowMS = serverGlobalParams.slowMS;
- const auto originalSampleRate = serverGlobalParams.sampleRate;
+ const auto originalSlowMS = serverGlobalParams.slowMS.load();
+ const auto originalSampleRate = serverGlobalParams.sampleRate.load();
- serverGlobalParams.slowMS = 10;
- serverGlobalParams.sampleRate = 1;
+ serverGlobalParams.slowMS.store(10);
+ serverGlobalParams.sampleRate.store(1);
// Reset the global parameters to their original values after this test exits.
ON_BLOCK_EXIT([originalSlowMS, originalSampleRate] {
- serverGlobalParams.slowMS = originalSlowMS;
- serverGlobalParams.sampleRate = originalSampleRate;
+ serverGlobalParams.slowMS.store(originalSlowMS);
+ serverGlobalParams.sampleRate.store(originalSampleRate);
});
tickSource->advance(Microseconds(11 * 1000));
@@ -4147,16 +4147,16 @@ TEST_F(TransactionsMetricsTest, LogTransactionInfoAfterSlowStashedAbort) {
ASSERT(txnResourceStashLocker);
const auto lockerInfo = txnResourceStashLocker->getLockerInfo(boost::none);
- const auto originalSlowMS = serverGlobalParams.slowMS;
- const auto originalSampleRate = serverGlobalParams.sampleRate;
+ const auto originalSlowMS = serverGlobalParams.slowMS.load();
+ const auto originalSampleRate = serverGlobalParams.sampleRate.load();
- serverGlobalParams.slowMS = 10;
- serverGlobalParams.sampleRate = 1;
+ serverGlobalParams.slowMS.store(10);
+ serverGlobalParams.sampleRate.store(1);
// Reset the global parameters to their original values after this test exits.
ON_BLOCK_EXIT([originalSlowMS, originalSampleRate] {
- serverGlobalParams.slowMS = originalSlowMS;
- serverGlobalParams.sampleRate = originalSampleRate;
+ serverGlobalParams.slowMS.store(originalSlowMS);
+ serverGlobalParams.sampleRate.store(originalSampleRate);
});
tickSource->advance(Microseconds(11 * 1000));
@@ -4173,20 +4173,20 @@ TEST_F(TransactionsMetricsTest, LogTransactionInfoZeroSampleRate) {
auto sessionCheckout = checkOutSession();
- const auto originalSlowMS = serverGlobalParams.slowMS;
- const auto originalSampleRate = serverGlobalParams.sampleRate;
+ const auto originalSlowMS = serverGlobalParams.slowMS.load();
+ const auto originalSampleRate = serverGlobalParams.sampleRate.load();
- serverGlobalParams.slowMS = 10;
+ serverGlobalParams.slowMS.store(10);
// Set the sample rate to 0 to never log this transaction.
- serverGlobalParams.sampleRate = 0;
+ serverGlobalParams.sampleRate.store(0);
auto txnParticipant = TransactionParticipant::get(opCtx());
txnParticipant.unstashTransactionResources(opCtx(), "commitTransaction");
// Reset the global parameters to their original values after this test exits.
ON_BLOCK_EXIT([originalSlowMS, originalSampleRate] {
- serverGlobalParams.slowMS = originalSlowMS;
- serverGlobalParams.sampleRate = originalSampleRate;
+ serverGlobalParams.slowMS.store(originalSlowMS);
+ serverGlobalParams.sampleRate.store(originalSampleRate);
});
tickSource->advance(Microseconds(11 * 1000));
@@ -4204,17 +4204,17 @@ TEST_F(TransactionsMetricsTest, LogTransactionInfoVerbosityInfo) {
auto txnParticipant = TransactionParticipant::get(opCtx());
- const auto originalSlowMS = serverGlobalParams.slowMS;
- const auto originalSampleRate = serverGlobalParams.sampleRate;
+ const auto originalSlowMS = serverGlobalParams.slowMS.load();
+ const auto originalSampleRate = serverGlobalParams.sampleRate.load();
// Set a high slow operation threshold to avoid the transaction being logged as slow.
- serverGlobalParams.slowMS = 10000;
- serverGlobalParams.sampleRate = 1;
+ serverGlobalParams.slowMS.store(10000);
+ serverGlobalParams.sampleRate.store(1);
// Reset the global parameters to their original values after this test exits.
ON_BLOCK_EXIT([originalSlowMS, originalSampleRate] {
- serverGlobalParams.slowMS = originalSlowMS;
- serverGlobalParams.sampleRate = originalSampleRate;
+ serverGlobalParams.slowMS.store(originalSlowMS);
+ serverGlobalParams.sampleRate.store(originalSampleRate);
});
// Set verbosity level of transaction components to info.
@@ -4242,17 +4242,17 @@ TEST_F(TransactionsMetricsTest, LogTransactionInfoVerbosityDebug) {
txnParticipant.unstashTransactionResources(opCtx(), "commitTransaction");
- const auto originalSlowMS = serverGlobalParams.slowMS;
- const auto originalSampleRate = serverGlobalParams.sampleRate;
+ const auto originalSlowMS = serverGlobalParams.slowMS.load();
+ const auto originalSampleRate = serverGlobalParams.sampleRate.load();
// Set a high slow operation threshold to avoid the transaction being logged as slow.
- serverGlobalParams.slowMS = 10000;
- serverGlobalParams.sampleRate = 1;
+ serverGlobalParams.slowMS.store(10000);
+ serverGlobalParams.sampleRate.store(1);
// Reset the global parameters to their original values after this test exits.
ON_BLOCK_EXIT([originalSlowMS, originalSampleRate] {
- serverGlobalParams.slowMS = originalSlowMS;
- serverGlobalParams.sampleRate = originalSampleRate;
+ serverGlobalParams.slowMS.store(originalSlowMS);
+ serverGlobalParams.sampleRate.store(originalSampleRate);
});
startCapturingLogMessages();
diff --git a/src/mongo/db/ttl.cpp b/src/mongo/db/ttl.cpp
index 6e4409015d2..551554322a1 100644
--- a/src/mongo/db/ttl.cpp
+++ b/src/mongo/db/ttl.cpp
@@ -584,7 +584,7 @@ bool TTLMonitor::_deleteExpiredWithIndex(OperationContext* opCtx,
if (shouldLogSlowOpWithSampling(opCtx,
logv2::LogComponent::kIndex,
duration,
- Milliseconds(serverGlobalParams.slowMS))
+ Milliseconds(serverGlobalParams.slowMS.load()))
.first) {
LOGV2(5479200,
"Deleted expired documents using index",
@@ -658,7 +658,7 @@ bool TTLMonitor::_deleteExpiredWithCollscan(OperationContext* opCtx,
if (shouldLogSlowOpWithSampling(opCtx,
logv2::LogComponent::kIndex,
duration,
- Milliseconds(serverGlobalParams.slowMS))
+ Milliseconds(serverGlobalParams.slowMS.load()))
.first) {
LOGV2(5400702,
"Deleted expired documents using collection scan",
diff --git a/src/mongo/s/transaction_router.cpp b/src/mongo/s/transaction_router.cpp
index ead253fa015..cc3d6b2763b 100644
--- a/src/mongo/s/transaction_router.cpp
+++ b/src/mongo/s/transaction_router.cpp
@@ -1728,7 +1728,7 @@ void TransactionRouter::Router::_endTransactionTrackingIfNecessary(
if (shouldLogSlowOpWithSampling(opCtx,
MONGO_LOGV2_DEFAULT_COMPONENT,
opDuration,
- Milliseconds(serverGlobalParams.slowMS))
+ Milliseconds(serverGlobalParams.slowMS.load()))
.first) {
_logSlowTransaction(opCtx, terminationCause);
}
diff --git a/src/mongo/s/transaction_router_test.cpp b/src/mongo/s/transaction_router_test.cpp
index d6e26b2d436..837099e53fd 100644
--- a/src/mongo/s/transaction_router_test.cpp
+++ b/src/mongo/s/transaction_router_test.cpp
@@ -3221,7 +3221,7 @@ protected:
txnRouter().beginOrContinueTxn(
operationContext(), kTxnNumber, TransactionRouter::TransactionActions::kStart);
txnRouter().setDefaultAtClusterTime(operationContext());
- tickSource()->advance(Milliseconds(serverGlobalParams.slowMS + 1));
+ tickSource()->advance(Milliseconds(serverGlobalParams.slowMS.load() + 1));
}
void beginRecoverCommitWithDefaultTxnNumber() {
@@ -3234,7 +3234,7 @@ protected:
txnRouter().beginOrContinueTxn(
operationContext(), kTxnNumber, TransactionRouter::TransactionActions::kCommit);
txnRouter().setDefaultAtClusterTime(operationContext());
- tickSource()->advance(Milliseconds(serverGlobalParams.slowMS + 1));
+ tickSource()->advance(Milliseconds(serverGlobalParams.slowMS.load() + 1));
}
void assertDurationIs(Microseconds micros) {
@@ -3492,16 +3492,16 @@ private:
//
TEST_F(TransactionRouterMetricsTest, DoesNotLogTransactionsUnderSlowMSThreshold) {
- const auto originalSlowMS = serverGlobalParams.slowMS;
- const auto originalSampleRate = serverGlobalParams.sampleRate;
+ const auto originalSlowMS = serverGlobalParams.slowMS.load();
+ const auto originalSampleRate = serverGlobalParams.sampleRate.load();
- serverGlobalParams.slowMS = 100;
- serverGlobalParams.sampleRate = 1;
+ serverGlobalParams.slowMS.store(100);
+ serverGlobalParams.sampleRate.store(1);
// Reset the global parameters to their original values after this test exits.
ON_BLOCK_EXIT([originalSlowMS, originalSampleRate] {
- serverGlobalParams.slowMS = originalSlowMS;
- serverGlobalParams.sampleRate = originalSampleRate;
+ serverGlobalParams.slowMS.store(originalSlowMS);
+ serverGlobalParams.sampleRate.store(originalSampleRate);
});
beginTxnWithDefaultTxnNumber();
@@ -3511,16 +3511,16 @@ TEST_F(TransactionRouterMetricsTest, DoesNotLogTransactionsUnderSlowMSThreshold)
}
TEST_F(TransactionRouterMetricsTest, LogsTransactionsOverSlowMSThreshold) {
- const auto originalSlowMS = serverGlobalParams.slowMS;
- const auto originalSampleRate = serverGlobalParams.sampleRate;
+ const auto originalSlowMS = serverGlobalParams.slowMS.load();
+ const auto originalSampleRate = serverGlobalParams.sampleRate.load();
- serverGlobalParams.slowMS = 100;
- serverGlobalParams.sampleRate = 1;
+ serverGlobalParams.slowMS.store(100);
+ serverGlobalParams.sampleRate.store(1);
// Reset the global parameters to their original values after this test exits.
ON_BLOCK_EXIT([originalSlowMS, originalSampleRate] {
- serverGlobalParams.slowMS = originalSlowMS;
- serverGlobalParams.sampleRate = originalSampleRate;
+ serverGlobalParams.slowMS.store(originalSlowMS);
+ serverGlobalParams.sampleRate.store(originalSampleRate);
});
beginTxnWithDefaultTxnNumber();
@@ -3530,16 +3530,16 @@ TEST_F(TransactionRouterMetricsTest, LogsTransactionsOverSlowMSThreshold) {
}
TEST_F(TransactionRouterMetricsTest, LogsTransactionsWithAPIParameters) {
- const auto originalSlowMS = serverGlobalParams.slowMS;
- const auto originalSampleRate = serverGlobalParams.sampleRate;
+ const auto originalSlowMS = serverGlobalParams.slowMS.load();
+ const auto originalSampleRate = serverGlobalParams.sampleRate.load();
- serverGlobalParams.slowMS = 100;
- serverGlobalParams.sampleRate = 1;
+ serverGlobalParams.slowMS.store(100);
+ serverGlobalParams.sampleRate.store(1);
// Reset the global parameters to their original values after this test exits.
ON_BLOCK_EXIT([originalSlowMS, originalSampleRate] {
- serverGlobalParams.slowMS = originalSlowMS;
- serverGlobalParams.sampleRate = originalSampleRate;
+ serverGlobalParams.slowMS.store(originalSlowMS);
+ serverGlobalParams.sampleRate.store(originalSampleRate);
});
APIParameters::get(operationContext()).setAPIVersion("1");
@@ -3567,16 +3567,16 @@ TEST_F(TransactionRouterMetricsTest, LogsTransactionsWithAPIParameters) {
}
TEST_F(TransactionRouterMetricsTest, DoesNotLogTransactionsWithSampleRateZero) {
- const auto originalSlowMS = serverGlobalParams.slowMS;
- const auto originalSampleRate = serverGlobalParams.sampleRate;
+ const auto originalSlowMS = serverGlobalParams.slowMS.load();
+ const auto originalSampleRate = serverGlobalParams.sampleRate.load();
- serverGlobalParams.slowMS = 100;
- serverGlobalParams.sampleRate = 0;
+ serverGlobalParams.slowMS.store(100);
+ serverGlobalParams.sampleRate.store(0);
// Reset the global parameters to their original values after this test exits.
ON_BLOCK_EXIT([originalSlowMS, originalSampleRate] {
- serverGlobalParams.slowMS = originalSlowMS;
- serverGlobalParams.sampleRate = originalSampleRate;
+ serverGlobalParams.slowMS.store(originalSlowMS);
+ serverGlobalParams.sampleRate.store(originalSampleRate);
});
beginTxnWithDefaultTxnNumber();
diff --git a/src/mongo/util/log_with_sampling.h b/src/mongo/util/log_with_sampling.h
index eb95aec5040..e3407c26e07 100644
--- a/src/mongo/util/log_with_sampling.h
+++ b/src/mongo/util/log_with_sampling.h
@@ -50,7 +50,7 @@ inline std::pair<bool, bool> shouldLogSlowOpWithSampling(OperationContext* opCtx
const auto client = opCtx->getClient();
const bool shouldSample =
- client->getPrng().nextCanonicalDouble() < serverGlobalParams.sampleRate;
+ client->getPrng().nextCanonicalDouble() < serverGlobalParams.sampleRate.load();
// Log the transaction if we should sample and its duration is greater than or equal to the
// slowMS command threshold.
diff --git a/src/mongo/util/log_with_sampling_test.cpp b/src/mongo/util/log_with_sampling_test.cpp
index 88b3aebe91e..4a184485f95 100644
--- a/src/mongo/util/log_with_sampling_test.cpp
+++ b/src/mongo/util/log_with_sampling_test.cpp
@@ -65,9 +65,10 @@ auto scenario(bool debugLogEnabled, bool slowOp, bool forceSample) {
auto loggedSeverityGuard = unittest::MinimumLoggedSeverityGuard(
component, debugLogEnabled ? logv2::LogSeverity::Debug(1) : logv2::LogSeverity::Info());
- ScopeGuard sampleRateGuard(
- [savedRate = serverGlobalParams.sampleRate] { serverGlobalParams.sampleRate = savedRate; });
- serverGlobalParams.sampleRate = forceSample ? 1.0 : 0.0;
+ ScopeGuard sampleRateGuard([savedRate = serverGlobalParams.sampleRate.load()] {
+ serverGlobalParams.sampleRate.store(savedRate);
+ });
+ serverGlobalParams.sampleRate.store(forceSample ? 1.0 : 0.0);
return shouldLogSlowOpWithSampling(
opCtx.get(), component, Milliseconds{slowOp ? 11 : 9}, Milliseconds{10});