diff options
author | Brett Nawrocki <brett.nawrocki@mongodb.com> | 2022-03-23 20:55:11 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-04-14 20:55:48 +0000 |
commit | 37deca965953bf21b38d5e3572e46e102b3badc6 (patch) | |
tree | d68d633aabc548905b7e9ac0c598d86a3c4ec729 /src/mongo/db/s/sharding_data_transform_instance_metrics_test.cpp | |
parent | 576ea084ea887f3f6bd1dd1f8aa12c1af33487d1 (diff) | |
download | mongo-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.cpp | 44 |
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(); |