diff options
author | Alyssa Wagenmaker <alyssa.wagenmaker@mongodb.com> | 2023-04-06 21:13:57 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-04-07 01:54:45 +0000 |
commit | f472a15f9781f95dcabc64c6b9b6690aa66f3b33 (patch) | |
tree | 8dfde4d4589fb3447c3a2aa805cb52d36afce4ee | |
parent | 2a994ea0779acb7f594d2a23e96e6e3affbb8b8b (diff) | |
download | mongo-f472a15f9781f95dcabc64c6b9b6690aa66f3b33.tar.gz |
SERVER-75182 Allow internalQueryConfigureTelemetrySamplingRate to be -1
13 files changed, 24 insertions, 22 deletions
diff --git a/buildscripts/resmokeconfig/suites/telemetry_passthrough.yml b/buildscripts/resmokeconfig/suites/telemetry_passthrough.yml index 4f7b505299b..1aa2a490a5f 100644 --- a/buildscripts/resmokeconfig/suites/telemetry_passthrough.yml +++ b/buildscripts/resmokeconfig/suites/telemetry_passthrough.yml @@ -27,4 +27,4 @@ executor: mongod_options: set_parameters: enableTestCommands: 1 - internalQueryConfigureTelemetrySamplingRate: 2147483647 + internalQueryConfigureTelemetrySamplingRate: -1 diff --git a/jstests/noPassthrough/telemetry/application_name_find.js b/jstests/noPassthrough/telemetry/application_name_find.js index c57af6f36f4..13c70e6d70f 100644 --- a/jstests/noPassthrough/telemetry/application_name_find.js +++ b/jstests/noPassthrough/telemetry/application_name_find.js @@ -25,7 +25,7 @@ const getTelemetry = (conn, redactIdentifiers = false) => { // Turn on the collecting of telemetry metrics. let options = { - setParameter: {internalQueryConfigureTelemetrySamplingRate: 2147483647}, + setParameter: {internalQueryConfigureTelemetrySamplingRate: -1}, }; const conn = MongoRunner.runMongod(options); diff --git a/jstests/noPassthrough/telemetry/clear_telemetry_store.js b/jstests/noPassthrough/telemetry/clear_telemetry_store.js index 3682b16ce66..b2409cc0bbb 100644 --- a/jstests/noPassthrough/telemetry/clear_telemetry_store.js +++ b/jstests/noPassthrough/telemetry/clear_telemetry_store.js @@ -10,7 +10,7 @@ load("jstests/libs/telemetry_utils.js"); // For verifyMetrics. // Turn on the collecting of telemetry metrics. let options = { setParameter: { - internalQueryConfigureTelemetrySamplingRate: 2147483647, + internalQueryConfigureTelemetrySamplingRate: -1, internalQueryConfigureTelemetryCacheSize: "10MB" }, }; diff --git a/jstests/noPassthrough/telemetry/feature_flag_off_sampling_rate_on.js b/jstests/noPassthrough/telemetry/feature_flag_off_sampling_rate_on.js index a4efc5417d3..8dee55a109b 100644 --- a/jstests/noPassthrough/telemetry/feature_flag_off_sampling_rate_on.js +++ b/jstests/noPassthrough/telemetry/feature_flag_off_sampling_rate_on.js @@ -8,9 +8,9 @@ load("jstests/libs/feature_flag_util.js"); (function() { "use strict"; -// Set sampling rate to MAX_INT. +// Set sampling rate to -1. let options = { - setParameter: {internalQueryConfigureTelemetrySamplingRate: 2147483647}, + setParameter: {internalQueryConfigureTelemetrySamplingRate: -1}, }; const conn = MongoRunner.runMongod(options); const testdb = conn.getDB('test'); diff --git a/jstests/noPassthrough/telemetry/redactFieldnames_parameter.js b/jstests/noPassthrough/telemetry/redactFieldnames_parameter.js index 27a80522cf5..ca2a9aa348d 100644 --- a/jstests/noPassthrough/telemetry/redactFieldnames_parameter.js +++ b/jstests/noPassthrough/telemetry/redactFieldnames_parameter.js @@ -10,7 +10,7 @@ load("jstests/aggregation/extras/utils.js"); // For assertAdminDBErrCodeAndErrM // Turn on the collecting of telemetry metrics. let options = { - setParameter: {internalQueryConfigureTelemetrySamplingRate: 2147483647}, + setParameter: {internalQueryConfigureTelemetrySamplingRate: -1}, }; const conn = MongoRunner.runMongod(options); diff --git a/jstests/noPassthrough/telemetry/redact_queries_with_nonobject_fields.js b/jstests/noPassthrough/telemetry/redact_queries_with_nonobject_fields.js index 9ef3cabbb54..25cac47555e 100644 --- a/jstests/noPassthrough/telemetry/redact_queries_with_nonobject_fields.js +++ b/jstests/noPassthrough/telemetry/redact_queries_with_nonobject_fields.js @@ -9,7 +9,7 @@ load('jstests/libs/analyze_plan.js'); // Turn on the collecting of telemetry metrics. let options = { - setParameter: {internalQueryConfigureTelemetrySamplingRate: 2147483647}, + setParameter: {internalQueryConfigureTelemetrySamplingRate: -1}, }; const conn = MongoRunner.runMongod(options); diff --git a/jstests/noPassthrough/telemetry/telemetry_collect_on_mongos.js b/jstests/noPassthrough/telemetry/telemetry_collect_on_mongos.js index 06113315450..5882ab529f0 100644 --- a/jstests/noPassthrough/telemetry/telemetry_collect_on_mongos.js +++ b/jstests/noPassthrough/telemetry/telemetry_collect_on_mongos.js @@ -20,7 +20,7 @@ const setup = () => { rs: {nodes: 1}, mongosOptions: { setParameter: { - internalQueryConfigureTelemetrySamplingRate: 2147483647, + internalQueryConfigureTelemetrySamplingRate: -1, 'failpoint.skipClusterParameterRefresh': "{'mode':'alwaysOn'}" } }, diff --git a/jstests/noPassthrough/telemetry/telemetry_metrics_across_getMore_calls.js b/jstests/noPassthrough/telemetry/telemetry_metrics_across_getMore_calls.js index acfd6048ee2..87fc54a3360 100644 --- a/jstests/noPassthrough/telemetry/telemetry_metrics_across_getMore_calls.js +++ b/jstests/noPassthrough/telemetry/telemetry_metrics_across_getMore_calls.js @@ -10,7 +10,7 @@ load("jstests/libs/telemetry_utils.js"); // For verifyMetrics. // Turn on the collecting of telemetry metrics. let options = { - setParameter: {internalQueryConfigureTelemetrySamplingRate: 2147483647}, + setParameter: {internalQueryConfigureTelemetrySamplingRate: -1}, }; const conn = MongoRunner.runMongod(options); diff --git a/jstests/noPassthrough/telemetry/telemetry_redact_find_cmd.js b/jstests/noPassthrough/telemetry/telemetry_redact_find_cmd.js index c9bc95b410d..6bbf55f08ea 100644 --- a/jstests/noPassthrough/telemetry/telemetry_redact_find_cmd.js +++ b/jstests/noPassthrough/telemetry/telemetry_redact_find_cmd.js @@ -40,7 +40,7 @@ function runTest(conn) { const conn = MongoRunner.runMongod({ setParameter: { - internalQueryConfigureTelemetrySamplingRate: 2147483647, + internalQueryConfigureTelemetrySamplingRate: -1, featureFlagTelemetry: true, } }); @@ -54,7 +54,7 @@ const st = new ShardingTest({ rs: {nodes: 1}, mongosOptions: { setParameter: { - internalQueryConfigureTelemetrySamplingRate: 2147483647, + internalQueryConfigureTelemetrySamplingRate: -1, featureFlagTelemetry: true, 'failpoint.skipClusterParameterRefresh': "{'mode':'alwaysOn'}" } diff --git a/jstests/noPassthrough/telemetry/telemetry_server_status_metrics.js b/jstests/noPassthrough/telemetry/telemetry_server_status_metrics.js index 194fb15d0a6..84ac1717d69 100644 --- a/jstests/noPassthrough/telemetry/telemetry_server_status_metrics.js +++ b/jstests/noPassthrough/telemetry/telemetry_server_status_metrics.js @@ -108,7 +108,7 @@ function telemetryStoreSizeEstimateTest(conn, testDB, coll, testOptions) { runTestWithMongodOptions({ setParameter: { internalQueryConfigureTelemetryCacheSize: "1MB", - internalQueryConfigureTelemetrySamplingRate: 2147483647 + internalQueryConfigureTelemetrySamplingRate: -1 }, }, evictionTest, @@ -119,7 +119,7 @@ runTestWithMongodOptions({ runTestWithMongodOptions({ setParameter: { internalQueryConfigureTelemetryCacheSize: "4MB", - internalQueryConfigureTelemetrySamplingRate: 2147483647 + internalQueryConfigureTelemetrySamplingRate: -1 }, }, evictionTest, @@ -129,7 +129,7 @@ runTestWithMongodOptions({ * In this configuration, every query is sampled, so no requests should be rate-limited. */ runTestWithMongodOptions({ - setParameter: {internalQueryConfigureTelemetrySamplingRate: 2147483647}, + setParameter: {internalQueryConfigureTelemetrySamplingRate: -1}, }, countRateLimitedRequestsTest, {samplingRate: 2147483647, numRequests: 20}); @@ -149,7 +149,7 @@ runTestWithMongodOptions({ * size */ runTestWithMongodOptions({ - setParameter: {internalQueryConfigureTelemetrySamplingRate: 2147483647}, + setParameter: {internalQueryConfigureTelemetrySamplingRate: -1}, }, telemetryStoreSizeEstimateTest); }()); diff --git a/src/mongo/db/query/query_knobs.idl b/src/mongo/db/query/query_knobs.idl index e7359acbb14..070a2c56629 100644 --- a/src/mongo/db/query/query_knobs.idl +++ b/src/mongo/db/query/query_knobs.idl @@ -1020,14 +1020,14 @@ server_parameters: internalQueryConfigureTelemetrySamplingRate: description: "The maximum number of queries per second that are sampled for query telemetry. If the rate of queries goes above this number, then rate limiting will kick in, and any - further queries will not be sampled. To sample all queries, this can be set to the INT_MAX. - This can be set to 0 to turn telemetry off completely." + further queries will not be sampled. To sample all queries, this can be set to -1. This can be + set to 0 to turn telemetry off completely." set_at: [ startup, runtime ] cpp_varname: "queryTelemetrySamplingRate" cpp_vartype: AtomicWord<int> default: 0 validator: - gte: 0 + gte: -1 on_update: telemetry_util::onTelemetrySamplingRateUpdate internalQueryConfigureTelemetryCacheSize: diff --git a/src/mongo/db/query/telemetry.cpp b/src/mongo/db/query/telemetry.cpp index 2a3d1714176..1e39a3f910f 100644 --- a/src/mongo/db/query/telemetry.cpp +++ b/src/mongo/db/query/telemetry.cpp @@ -468,8 +468,9 @@ ServiceContext::ConstructorActionRegisterer telemetryStoreManagerRegisterer{ } } globalTelemetryStoreManager = std::make_unique<TelemetryStoreManager>(size, numPartitions); - telemetryRateLimiter(serviceCtx) = - std::make_unique<RateLimiting>(queryTelemetrySamplingRate.load()); + auto configuredSamplingRate = queryTelemetrySamplingRate.load(); + telemetryRateLimiter(serviceCtx) = std::make_unique<RateLimiting>( + configuredSamplingRate < 0 ? INT_MAX : configuredSamplingRate); }}; /** @@ -500,7 +501,8 @@ bool shouldCollect(const ServiceContext* serviceCtx) { return false; } // Check if rate limiting allows us to collect telemetry for this request. - if (!telemetryRateLimiter(serviceCtx)->handleRequestSlidingWindow()) { + if (telemetryRateLimiter(serviceCtx)->getSamplingRate() < INT_MAX && + !telemetryRateLimiter(serviceCtx)->handleRequestSlidingWindow()) { telemetryRateLimitedRequestsMetric.increment(); return false; } diff --git a/src/mongo/db/query/telemetry_util.cpp b/src/mongo/db/query/telemetry_util.cpp index f3918d7212a..eeaf7da71e6 100644 --- a/src/mongo/db/query/telemetry_util.cpp +++ b/src/mongo/db/query/telemetry_util.cpp @@ -85,7 +85,7 @@ Status onTelemetrySamplingRateUpdate(int samplingRate) { // context. if (auto client = Client::getCurrent()) { auto&& [serviceCtx, updater] = getUpdater(*client); - updater->updateSamplingRate(serviceCtx, samplingRate); + updater->updateSamplingRate(serviceCtx, samplingRate < 0 ? INT_MAX : samplingRate); } return Status::OK(); |