summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTess Avitabile <tess.avitabile@mongodb.com>2019-01-29 13:43:16 -0500
committerTess Avitabile <tess.avitabile@mongodb.com>2019-01-30 09:26:33 -0500
commitcaa42a1f75a56c7643d0b68d3880444375ec42e3 (patch)
tree8bcd678a1d80a3968e23aa24248c794fcbac5727
parentc9a446e51769484fc4aa911046942752c4cb9cdb (diff)
downloadmongo-r4.0.6.tar.gz
SERVER-39267 Guard opWriteConcernCounters behind flagr4.0.6-rc1r4.0.6
(cherry picked from commit 941c4fbab21029e3bbe577d953250116cd0e8533)
-rw-r--r--jstests/noPassthrough/server_write_concern_metrics.js3
-rw-r--r--src/mongo/db/stats/server_write_concern_metrics.cpp46
-rw-r--r--src/mongo/db/stats/server_write_concern_metrics.h15
3 files changed, 50 insertions, 14 deletions
diff --git a/jstests/noPassthrough/server_write_concern_metrics.js b/jstests/noPassthrough/server_write_concern_metrics.js
index 83ab7e8dd38..e7c15f38490 100644
--- a/jstests/noPassthrough/server_write_concern_metrics.js
+++ b/jstests/noPassthrough/server_write_concern_metrics.js
@@ -68,7 +68,8 @@
tojson(newStats));
}
- const rst = new ReplSetTest({nodes: 2});
+ const rst = new ReplSetTest(
+ {nodes: 2, nodeOptions: {setParameter: 'reportOpWriteConcernCountersInServerStatus=true'}});
rst.startSet();
let config = rst.getReplSetConfig();
config.members[1].priority = 0;
diff --git a/src/mongo/db/stats/server_write_concern_metrics.cpp b/src/mongo/db/stats/server_write_concern_metrics.cpp
index 3bcf1fe99af..da8e74c9011 100644
--- a/src/mongo/db/stats/server_write_concern_metrics.cpp
+++ b/src/mongo/db/stats/server_write_concern_metrics.cpp
@@ -34,9 +34,16 @@
#include "mongo/db/commands/server_status.h"
#include "mongo/db/jsobj.h"
#include "mongo/db/operation_context.h"
+#include "mongo/db/server_parameters.h"
#include "mongo/db/service_context.h"
namespace mongo {
+
+// opWriteConcernCounters are not tracked unless 'reportOpWriteConcernCountersInServerStatus' is
+// true. This is false by default because the mutex acquisition impacts performance when SSL is
+// disabled. (When SSL is enabled, other mutexes dominate.)
+MONGO_EXPORT_STARTUP_SERVER_PARAMETER(reportOpWriteConcernCountersInServerStatus, bool, false);
+
namespace {
const auto ServerWriteConcernMetricsDecoration =
ServiceContext::declareDecoration<ServerWriteConcernMetrics>();
@@ -50,7 +57,41 @@ ServerWriteConcernMetrics* ServerWriteConcernMetrics::get(OperationContext* opCt
return get(opCtx->getServiceContext());
}
+void ServerWriteConcernMetrics::recordWriteConcernForInserts(
+ const WriteConcernOptions& writeConcernOptions, size_t numInserts) {
+ if (!reportOpWriteConcernCountersInServerStatus) {
+ return;
+ }
+
+ stdx::lock_guard<stdx::mutex> lg(_mutex);
+ _insertMetrics.recordWriteConcern(writeConcernOptions, numInserts);
+}
+
+void ServerWriteConcernMetrics::recordWriteConcernForUpdate(
+ const WriteConcernOptions& writeConcernOptions) {
+ if (!reportOpWriteConcernCountersInServerStatus) {
+ return;
+ }
+
+ stdx::lock_guard<stdx::mutex> lg(_mutex);
+ _updateMetrics.recordWriteConcern(writeConcernOptions);
+}
+
+void ServerWriteConcernMetrics::recordWriteConcernForDelete(
+ const WriteConcernOptions& writeConcernOptions) {
+ if (!reportOpWriteConcernCountersInServerStatus) {
+ return;
+ }
+
+ stdx::lock_guard<stdx::mutex> lg(_mutex);
+ _deleteMetrics.recordWriteConcern(writeConcernOptions);
+}
+
BSONObj ServerWriteConcernMetrics::toBSON() const {
+ if (!reportOpWriteConcernCountersInServerStatus) {
+ return BSONObj();
+ }
+
stdx::lock_guard<stdx::mutex> lg(_mutex);
BSONObjBuilder builder;
@@ -117,7 +158,10 @@ public:
~OpWriteConcernCountersSSS() override = default;
bool includeByDefault() const override {
- return true;
+ // When 'reportOpWriteConcernCountersInServerStatus' is false, do not include this section
+ // unless requested by the user. Even if the user requests the section, it will not be
+ // included because an empty BSONObj is generated for the section.
+ return reportOpWriteConcernCountersInServerStatus;
}
BSONObj generateSection(OperationContext* opCtx,
diff --git a/src/mongo/db/stats/server_write_concern_metrics.h b/src/mongo/db/stats/server_write_concern_metrics.h
index c7a17dcc5d7..9a9525d1b30 100644
--- a/src/mongo/db/stats/server_write_concern_metrics.h
+++ b/src/mongo/db/stats/server_write_concern_metrics.h
@@ -53,10 +53,7 @@ public:
* 'writeConcernOptions'.
*/
void recordWriteConcernForInserts(const WriteConcernOptions& writeConcernOptions,
- size_t numInserts) {
- stdx::lock_guard<stdx::mutex> lg(_mutex);
- _insertMetrics.recordWriteConcern(writeConcernOptions, numInserts);
- }
+ size_t numInserts);
/**
* Updates the insert metrics according to the 'w' value of 'writeConcernOptions'.
@@ -68,18 +65,12 @@ public:
/**
* Updates the update metrics according to the 'w' value of 'writeConcernOptions'.
*/
- void recordWriteConcernForUpdate(const WriteConcernOptions& writeConcernOptions) {
- stdx::lock_guard<stdx::mutex> lg(_mutex);
- _updateMetrics.recordWriteConcern(writeConcernOptions);
- }
+ void recordWriteConcernForUpdate(const WriteConcernOptions& writeConcernOptions);
/**
* Updates the delete metrics according to the 'w' value of 'writeConcernOptions'.
*/
- void recordWriteConcernForDelete(const WriteConcernOptions& writeConcernOptions) {
- stdx::lock_guard<stdx::mutex> lg(_mutex);
- _deleteMetrics.recordWriteConcern(writeConcernOptions);
- }
+ void recordWriteConcernForDelete(const WriteConcernOptions& writeConcernOptions);
BSONObj toBSON() const;