summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/sharding_data_transform_instance_metrics_test.cpp
diff options
context:
space:
mode:
authorBrett Nawrocki <brett.nawrocki@mongodb.com>2022-03-23 20:55:11 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-04-14 20:55:48 +0000
commit37deca965953bf21b38d5e3572e46e102b3badc6 (patch)
treed68d633aabc548905b7e9ac0c598d86a3c4ec729 /src/mongo/db/s/sharding_data_transform_instance_metrics_test.cpp
parent576ea084ea887f3f6bd1dd1f8aa12c1af33487d1 (diff)
downloadmongo-37deca965953bf21b38d5e3572e46e102b3badc6.tar.gz
SERVER-64372 Add parity $currentOp resharding donor fields
Track and report the following fields in ShardingDataTransformInstanceMetrics for resharding $currentOp: countWritesDuringCriticalSection totalCriticalSectionTimeElapsedSecs
Diffstat (limited to 'src/mongo/db/s/sharding_data_transform_instance_metrics_test.cpp')
-rw-r--r--src/mongo/db/s/sharding_data_transform_instance_metrics_test.cpp44
1 files changed, 43 insertions, 1 deletions
diff --git a/src/mongo/db/s/sharding_data_transform_instance_metrics_test.cpp b/src/mongo/db/s/sharding_data_transform_instance_metrics_test.cpp
index 6c6a2b0c3d2..0ffa17ea88e 100644
--- a/src/mongo/db/s/sharding_data_transform_instance_metrics_test.cpp
+++ b/src/mongo/db/s/sharding_data_transform_instance_metrics_test.cpp
@@ -178,7 +178,6 @@ TEST_F(ShardingDataTransformInstanceMetricsTest, OnDeleteAppliedShouldIncrementD
ASSERT_EQ(report.getIntField("deletesApplied"), 1);
}
-
TEST_F(ShardingDataTransformInstanceMetricsTest,
OnOplogsEntriesAppliedShouldIncrementOplogsEntriesApplied) {
auto metrics = createInstanceMetrics(UUID::gen(), Role::kRecipient);
@@ -191,6 +190,49 @@ TEST_F(ShardingDataTransformInstanceMetricsTest,
ASSERT_EQ(report.getIntField("oplogEntriesApplied"), 100);
}
+TEST_F(ShardingDataTransformInstanceMetricsTest, DonorIncrementWritesDuringCriticalSection) {
+ auto metrics = createInstanceMetrics(UUID::gen(), Role::kDonor);
+
+ auto report = metrics->reportForCurrentOp();
+ ASSERT_EQ(report.getIntField("countWritesDuringCriticalSection"), 0);
+ metrics->onWriteDuringCriticalSection();
+
+ report = metrics->reportForCurrentOp();
+ ASSERT_EQ(report.getIntField("countWritesDuringCriticalSection"), 1);
+}
+
+TEST_F(ShardingDataTransformInstanceMetricsTest, CurrentOpReportsCriticalSectionTime) {
+ const auto roles = {Role::kDonor, Role::kCoordinator};
+ for (const auto& role : roles) {
+ LOGV2(6437200, "CurrentOpReportsCriticalSectionTime", "Role"_attr = role);
+ constexpr auto kFiveSeconds = Milliseconds(5000);
+ auto uuid = UUID::gen();
+ const auto& clock = getClockSource();
+ auto metrics = std::make_unique<ShardingDataTransformInstanceMetrics>(
+ uuid, kTestCommand, kTestNamespace, role, clock->now(), clock, &_cumulativeMetrics);
+
+ // Reports 0 before critical section entered.
+ clock->advance(kFiveSeconds);
+ auto report = metrics->reportForCurrentOp();
+ ASSERT_EQ(report.getIntField("totalCriticalSectionTimeElapsedSecs"), 0);
+
+ // Reports time so far during critical section.
+ metrics->onCriticalSectionBegin();
+ clock->advance(kFiveSeconds);
+ report = metrics->reportForCurrentOp();
+ ASSERT_EQ(report.getIntField("totalCriticalSectionTimeElapsedSecs"), 5);
+ clock->advance(kFiveSeconds);
+ report = metrics->reportForCurrentOp();
+ ASSERT_EQ(report.getIntField("totalCriticalSectionTimeElapsedSecs"), 10);
+
+ // Still reports total time after critical section ends.
+ metrics->onCriticalSectionEnd();
+ clock->advance(kFiveSeconds);
+ report = metrics->reportForCurrentOp();
+ ASSERT_EQ(report.getIntField("totalCriticalSectionTimeElapsedSecs"), 10);
+ }
+}
+
TEST_F(ShardingDataTransformInstanceMetricsTest, CurrentOpReportsRunningTime) {
auto uuid = UUID::gen();
auto now = getClockSource()->now();