summaryrefslogtreecommitdiff
path: root/src/mongo/db/stats/resource_consumption_metrics_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/stats/resource_consumption_metrics_test.cpp')
-rw-r--r--src/mongo/db/stats/resource_consumption_metrics_test.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/mongo/db/stats/resource_consumption_metrics_test.cpp b/src/mongo/db/stats/resource_consumption_metrics_test.cpp
index 4598e411b71..8c7d8a756ef 100644
--- a/src/mongo/db/stats/resource_consumption_metrics_test.cpp
+++ b/src/mongo/db/stats/resource_consumption_metrics_test.cpp
@@ -492,6 +492,67 @@ TEST_F(ResourceConsumptionMetricsTest, DocumentUnitsWritten) {
ASSERT_EQ(metricsCopy["db1"].writeMetrics.docsWritten.units(), expectedUnits);
}
+TEST_F(ResourceConsumptionMetricsTest, TotalUnitsWritten) {
+ auto& globalResourceConsumption = ResourceConsumption::get(getServiceContext());
+ auto& operationMetrics = ResourceConsumption::MetricsCollector::get(_opCtx.get());
+
+ int expectedUnits = 0;
+
+ {
+ ResourceConsumption::ScopedMetricsCollector scope(_opCtx.get(), "db1");
+
+ // Each of these should be counted as 1 total unit (unit size = 128).
+ operationMetrics.incrementOneDocWritten(2);
+ operationMetrics.incrementOneDocWritten(4);
+ operationMetrics.incrementOneDocWritten(8);
+ operationMetrics.incrementOneDocWritten(16);
+ operationMetrics.incrementOneDocWritten(32);
+ operationMetrics.incrementOneDocWritten(64);
+ operationMetrics.incrementOneDocWritten(128);
+ expectedUnits += 7;
+
+ // Each of these should be counted as 2 total units (unit size = 128).
+ operationMetrics.incrementOneDocWritten(129);
+ operationMetrics.incrementOneDocWritten(200);
+ operationMetrics.incrementOneDocWritten(255);
+ operationMetrics.incrementOneDocWritten(256);
+ expectedUnits += 8;
+
+ // Each of these groups should be counted as 1 total unit, combining documents with index
+ // bytes written.
+
+ // Index writes prior to document write.
+ operationMetrics.incrementOneDocWritten(0);
+ operationMetrics.incrementOneIdxEntryWritten(2);
+ operationMetrics.incrementOneDocWritten(5);
+ expectedUnits += 1;
+
+ // Index writes after document write.
+ operationMetrics.incrementOneDocWritten(2);
+ operationMetrics.incrementOneIdxEntryWritten(126);
+ expectedUnits += 1;
+
+ // No index writes.
+ operationMetrics.incrementOneDocWritten(129);
+ expectedUnits += 2;
+
+ operationMetrics.incrementOneDocWritten(127);
+ operationMetrics.incrementOneIdxEntryWritten(1);
+ expectedUnits += 1;
+
+ // Exceeds unit size and thus counts as 2 units.
+ operationMetrics.incrementOneDocWritten(1);
+ operationMetrics.incrementOneIdxEntryWritten(1);
+ operationMetrics.incrementOneIdxEntryWritten(1);
+ operationMetrics.incrementOneIdxEntryWritten(1);
+ operationMetrics.incrementOneIdxEntryWritten(128);
+ expectedUnits += 2;
+ }
+
+ auto metricsCopy = globalResourceConsumption.getDbMetrics();
+ ASSERT_EQ(metricsCopy["db1"].writeMetrics.totalWritten.units(), expectedUnits);
+}
+
TEST_F(ResourceConsumptionMetricsTest, IdxEntryUnitsRead) {
auto& globalResourceConsumption = ResourceConsumption::get(getServiceContext());
auto& operationMetrics = ResourceConsumption::MetricsCollector::get(_opCtx.get());