summaryrefslogtreecommitdiff
path: root/src/mongo/db/stats/server_write_concern_metrics.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/stats/server_write_concern_metrics.cpp')
-rw-r--r--src/mongo/db/stats/server_write_concern_metrics.cpp59
1 files changed, 46 insertions, 13 deletions
diff --git a/src/mongo/db/stats/server_write_concern_metrics.cpp b/src/mongo/db/stats/server_write_concern_metrics.cpp
index bfc14025d73..f9a72590d8a 100644
--- a/src/mongo/db/stats/server_write_concern_metrics.cpp
+++ b/src/mongo/db/stats/server_write_concern_metrics.cpp
@@ -106,13 +106,8 @@ BSONObj ServerWriteConcernMetrics::toBSON() const {
return builder.obj();
}
-void ServerWriteConcernMetrics::WriteConcernMetricsForOperationType::recordWriteConcern(
+void ServerWriteConcernMetrics::WriteConcernCounters::recordWriteConcern(
const WriteConcernOptions& writeConcernOptions, size_t numOps) {
- if (writeConcernOptions.usedDefaultW) {
- noWCount += numOps;
- return;
- }
-
if (!writeConcernOptions.wMode.empty()) {
if (writeConcernOptions.wMode == WriteConcernOptions::kMajority) {
wMajorityCount += numOps;
@@ -126,8 +121,28 @@ void ServerWriteConcernMetrics::WriteConcernMetricsForOperationType::recordWrite
wNumCounts[writeConcernOptions.wNumNodes] += numOps;
}
-void ServerWriteConcernMetrics::WriteConcernMetricsForOperationType::toBSON(
- BSONObjBuilder* builder) const {
+void ServerWriteConcernMetrics::WriteConcernMetricsForOperationType::recordWriteConcern(
+ const WriteConcernOptions& writeConcernOptions, size_t numOps) {
+ if (writeConcernOptions.usedDefaultW) {
+ if (writeConcernOptions.getProvenance().isCustomDefault()) {
+ cWWC.recordWriteConcern(writeConcernOptions, numOps);
+ } else {
+ // Provenance is either:
+ // - "implicitDefault" : implicit default WC (w:1 or w:"majority") is used.
+ // - "clientSupplied" : set without "w" value, so implicit default WC (w:1) is used.
+ // - "internalWriteDefault" : if internal command sets empty WC ({writeConcern: {}}),
+ // then default constructed WC (w:1) is used.
+ implicitDefaultWC.recordWriteConcern(writeConcernOptions, numOps);
+ }
+
+ notExplicitWCount += numOps;
+ return;
+ }
+
+ explicitWC.recordWriteConcern(writeConcernOptions, numOps);
+}
+
+void ServerWriteConcernMetrics::WriteConcernCounters::toBSON(BSONObjBuilder* builder) const {
builder->append("wmajority", static_cast<long long>(wMajorityCount));
BSONObjBuilder wNumBuilder(builder->subobjStart("wnum"));
@@ -136,13 +151,31 @@ void ServerWriteConcernMetrics::WriteConcernMetricsForOperationType::toBSON(
}
wNumBuilder.done();
- BSONObjBuilder wTagBuilder(builder->subobjStart("wtag"));
- for (auto const& pair : wTagCounts) {
- wTagBuilder.append(pair.first, static_cast<long long>(pair.second));
+ if (exportWTag) {
+ BSONObjBuilder wTagBuilder(builder->subobjStart("wtag"));
+ for (auto const& pair : wTagCounts) {
+ wTagBuilder.append(pair.first, static_cast<long long>(pair.second));
+ }
+ wTagBuilder.done();
}
- wTagBuilder.done();
+}
+
+void ServerWriteConcernMetrics::WriteConcernMetricsForOperationType::toBSON(
+ BSONObjBuilder* builder) const {
+ explicitWC.toBSON(builder);
+
+ builder->append("none", static_cast<long long>(notExplicitWCount));
+ BSONObjBuilder noneBuilder(builder->subobjStart("noneInfo"));
+
+ BSONObjBuilder cWWCBuilder(noneBuilder.subobjStart("CWWC"));
+ cWWC.toBSON(&cWWCBuilder);
+ cWWCBuilder.done();
+
+ BSONObjBuilder implicitBuilder(noneBuilder.subobjStart("implicitDefault"));
+ implicitDefaultWC.toBSON(&implicitBuilder);
+ implicitBuilder.done();
- builder->append("none", static_cast<long long>(noWCount));
+ noneBuilder.done();
}
namespace {