diff options
author | Matt Diener <matt.diener@mongodb.com> | 2022-10-12 20:19:44 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-10-12 21:06:32 +0000 |
commit | 02a79726b9109458d4eb37b010d58faf7332929b (patch) | |
tree | 03b789383d087ea67e627f8201e8f75b99a9e18e /src | |
parent | 112d7ad9e8eab0c0f8839a98d78b712b2eff9cbd (diff) | |
download | mongo-02a79726b9109458d4eb37b010d58faf7332929b.tar.gz |
SERVER-70264 make slowMS and sampleRate atomic
Diffstat (limited to 'src')
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}); |