diff options
author | Amirsaman Memaripour <amirsaman.memaripour@mongodb.com> | 2021-02-04 18:32:15 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-02-05 00:18:36 +0000 |
commit | b7a167b7a683cc5620c56e915530458a680557b2 (patch) | |
tree | a3669be5f64a89fe0f9df0cbbeac9977313f2eae /src | |
parent | 078b47bc4bb193c936b2041aa7d1a5fcfb17fdf6 (diff) | |
download | mongo-b7a167b7a683cc5620c56e915530458a680557b2.tar.gz |
SERVER-51021 Add currentOp reporting for ReshardingRecipientService Instances
Diffstat (limited to 'src')
4 files changed, 87 insertions, 9 deletions
diff --git a/src/mongo/db/s/resharding/resharding_metrics.cpp b/src/mongo/db/s/resharding/resharding_metrics.cpp index 6e4833813d1..d7063bf07ad 100644 --- a/src/mongo/db/s/resharding/resharding_metrics.cpp +++ b/src/mongo/db/s/resharding/resharding_metrics.cpp @@ -288,8 +288,8 @@ void ReshardingMetrics::OperationMetrics::append(BSONObjBuilder* bob, Role role) bob->append(kCompletionStatus, OperationStatus_serializer(operationStatus)); break; case Role::kRecipient: - // TODO SERVER-51021 - MONGO_UNREACHABLE; + bob->append(kRecipientState, RecipientState_serializer(recipientState)); + bob->append(kCompletionStatus, OperationStatus_serializer(operationStatus)); break; case Role::kCoordinator: // TODO SERVER-50976 diff --git a/src/mongo/db/s/resharding/resharding_metrics_test.cpp b/src/mongo/db/s/resharding/resharding_metrics_test.cpp index eea7789e682..f22584eec0a 100644 --- a/src/mongo/db/s/resharding/resharding_metrics_test.cpp +++ b/src/mongo/db/s/resharding/resharding_metrics_test.cpp @@ -256,4 +256,75 @@ TEST_F(ReshardingMetricsTest, CurrentOpReportForDonor) { ASSERT_BSONOBJ_EQ(expected, report); } +TEST_F(ReshardingMetricsTest, CurrentOpReportForRecipient) { + const auto kRecipientState = RecipientStateEnum::kCloning; + + constexpr auto kDocumentsToCopy = 500; + constexpr auto kDocumentsCopied = kDocumentsToCopy * 0.5; + static_assert(kDocumentsToCopy >= kDocumentsCopied); + + constexpr auto kBytesToCopy = 8192; + constexpr auto kBytesCopied = kBytesToCopy * 0.5; + static_assert(kBytesToCopy >= kBytesCopied); + + constexpr auto kDelayBeforeCloning = Seconds(2); + getMetrics()->onStart(); + advanceTime(kDelayBeforeCloning); + + constexpr auto kTimeSpentCloning = Seconds(3); + getMetrics()->setRecipientState(kRecipientState); + getMetrics()->setDocumentsToCopy(kDocumentsToCopy, kBytesToCopy); + advanceTime(kTimeSpentCloning); + getMetrics()->onDocumentsCopied(kDocumentsCopied, kBytesCopied); + + const auto kTimeToCopyRemainingSeconds = + durationCount<Seconds>(kTimeSpentCloning) * (kBytesToCopy / kBytesCopied - 1); + const auto kRemainingOperationTimeSeconds = + durationCount<Seconds>(kTimeSpentCloning) + 2 * kTimeToCopyRemainingSeconds; + + const ReshardingMetrics::ReporterOptions options( + ReshardingMetrics::ReporterOptions::Role::kRecipient, + UUID::parse("12345678-1234-1234-1234-123456789def").getValue(), + NamespaceString("db", "collection"), + BSON("id" << 1), + false); + + const auto expected = + fromjson(fmt::format("{{ type: \"op\"," + "desc: \"ReshardingRecipientService {0}\"," + "op: \"command\"," + "ns: \"{1}\"," + "originatingCommand: {{ reshardCollection: \"{1}\"," + "key: {2}," + "unique: {3}," + "collation: {{ locale: \"simple\" }} }}," + "totalOperationTimeElapsed: {4}," + "remainingOperationTimeEstimated: {5}," + "approxDocumentsToCopy: {6}," + "documentsCopied: {7}," + "approxBytesToCopy: {8}," + "bytesCopied: {9}," + "totalCopyTimeElapsed: {10}," + "oplogEntriesFetched: 0," + "oplogEntriesApplied: 0," + "totalApplyTimeElapsed: 0," + "recipientState: \"{11}\"," + "opStatus: \"actively running\" }}", + options.id.toString(), + options.nss.toString(), + options.shardKey.toString(), + options.unique ? "true" : "false", + durationCount<Seconds>(kDelayBeforeCloning + kTimeSpentCloning), + kRemainingOperationTimeSeconds, + kDocumentsToCopy, + kDocumentsCopied, + kBytesToCopy, + kBytesCopied, + durationCount<Seconds>(kTimeSpentCloning), + RecipientState_serializer(kRecipientState))); + + const auto report = getMetrics()->reportForCurrentOp(options); + ASSERT_BSONOBJ_EQ(expected, report); +} + } // namespace mongo diff --git a/src/mongo/db/s/resharding/resharding_recipient_service.cpp b/src/mongo/db/s/resharding/resharding_recipient_service.cpp index b6ac78b8da9..548072bc3d4 100644 --- a/src/mongo/db/s/resharding/resharding_recipient_service.cpp +++ b/src/mongo/db/s/resharding/resharding_recipient_service.cpp @@ -40,6 +40,7 @@ #include "mongo/db/repl/read_concern_args.h" #include "mongo/db/s/migration_destination_manager.h" #include "mongo/db/s/resharding/resharding_collection_cloner.h" +#include "mongo/db/s/resharding/resharding_metrics.h" #include "mongo/db/s/resharding/resharding_server_parameters_gen.h" #include "mongo/db/s/resharding_util.h" #include "mongo/db/s/shard_key_util.h" @@ -238,6 +239,17 @@ void ReshardingRecipientService::RecipientStateMachine::interrupt(Status status) } } +boost::optional<BSONObj> ReshardingRecipientService::RecipientStateMachine::reportForCurrentOp( + MongoProcessInterface::CurrentOpConnectionsMode, + MongoProcessInterface::CurrentOpSessionsMode) noexcept { + ReshardingMetrics::ReporterOptions options(ReshardingMetrics::ReporterOptions::Role::kRecipient, + _id, + _recipientDoc.getNss(), + _recipientDoc.getReshardingKey().toBSON(), + false); + return ReshardingMetrics::get(cc().getServiceContext())->reportForCurrentOp(options); +} + void ReshardingRecipientService::RecipientStateMachine::onReshardingFieldsChanges( const TypeCollectionReshardingFields& reshardingFields) { auto coordinatorState = reshardingFields.getState(); diff --git a/src/mongo/db/s/resharding/resharding_recipient_service.h b/src/mongo/db/s/resharding/resharding_recipient_service.h index 0967b4bf930..045a55bc1a8 100644 --- a/src/mongo/db/s/resharding/resharding_recipient_service.h +++ b/src/mongo/db/s/resharding/resharding_recipient_service.h @@ -107,14 +107,9 @@ public: return _completionPromise.getFuture(); } - /** - * TODO(SERVER-51021) Report ReshardingRecipientService Instances in currentOp(). - */ boost::optional<BSONObj> reportForCurrentOp( - MongoProcessInterface::CurrentOpConnectionsMode connMode, - MongoProcessInterface::CurrentOpSessionsMode sessionMode) noexcept final { - return boost::none; - } + MongoProcessInterface::CurrentOpConnectionsMode, + MongoProcessInterface::CurrentOpSessionsMode) noexcept override; void onReshardingFieldsChanges(const TypeCollectionReshardingFields& reshardingFields); |