diff options
author | Blake Oler <blake.oler@mongodb.com> | 2021-06-24 17:16:47 +0000 |
---|---|---|
committer | Blake Oler <blake.oler@mongodb.com> | 2021-06-25 14:05:11 +0000 |
commit | 8c5808ecb212172a374b81b715d98faa71b407b5 (patch) | |
tree | 5883f7177d3c85e0cc54ab3fe710a89c163966cd | |
parent | a9d47d7e8ba07464545f1e270e2f10536479828a (diff) | |
download | mongo-8c5808ecb212172a374b81b715d98faa71b407b5.tar.gz |
SERVER-58063 Alias "flushReshardingStateChanges" as "_shardsvrCommitReshardCollection" to allow 5.0.0 and 5.0.1 compatibility
(cherry picked from commit 72939ea4a1d1a1ceb399caf771ee567998b4729d)
3 files changed, 34 insertions, 5 deletions
diff --git a/src/mongo/db/s/flush_resharding_state_change_command.cpp b/src/mongo/db/s/flush_resharding_state_change_command.cpp index 6d69497abe6..95b6257b9dc 100644 --- a/src/mongo/db/s/flush_resharding_state_change_command.cpp +++ b/src/mongo/db/s/flush_resharding_state_change_command.cpp @@ -52,6 +52,10 @@ class FlushReshardingStateChangeCmd final : public TypedCommand<FlushReshardingS public: using Request = _flushReshardingStateChange; + FlushReshardingStateChangeCmd() + : TypedCommand<FlushReshardingStateChangeCmd>(Request::kCommandName, + Request::kCommandAlias) {} + std::string help() const override { return "Internal command used by the resharding coordinator to flush state changes to the " "participant shards while the critical section is active."; @@ -77,6 +81,10 @@ public: return request().getCommandParameter(); } + UUID reshardingUUID() const { + return request().getReshardingUUID(); + } + void doCheckAuthorization(OperationContext* opCtx) const override { uassert(ErrorCodes::Unauthorized, "Unauthorized", diff --git a/src/mongo/db/s/resharding/resharding_coordinator_service.cpp b/src/mongo/db/s/resharding/resharding_coordinator_service.cpp index b8c6bafd65f..c4cdbcd0e8f 100644 --- a/src/mongo/db/s/resharding/resharding_coordinator_service.cpp +++ b/src/mongo/db/s/resharding/resharding_coordinator_service.cpp @@ -1025,13 +1025,25 @@ void markCompleted(const Status& status) { ReshardingMetrics::Role::kCoordinator, metricsOperationStatus, getCurrentTime()); } -BSONObj createFlushReshardingStateChangeCommand(const NamespaceString& nss) { +BSONObj createFlushReshardingStateChangeCommand(const NamespaceString& nss, + const UUID& reshardingUUID) { _flushReshardingStateChange cmd(nss); cmd.setDbName(nss.db()); + cmd.setReshardingUUID(reshardingUUID); return cmd.toBSON( BSON(WriteConcernOptions::kWriteConcernField << WriteConcernOptions::Majority)); } +BSONObj createShardsvrCommitReshardCollectionCmd(const NamespaceString& nss, + const UUID& reshardingUUID) { + BSONObjBuilder cmdBuilder; + cmdBuilder.append(_flushReshardingStateChange::kCommandAlias, nss.toString()); + reshardingUUID.appendToBuilder(&cmdBuilder, + _flushReshardingStateChange::kReshardingUUIDFieldName); + cmdBuilder.append(WriteConcernOptions::kWriteConcernField, WriteConcernOptions::Majority); + return cmdBuilder.obj(); +} + ExecutorFuture<ReshardingCoordinatorDocument> ReshardingCoordinatorService::ReshardingCoordinator::_runUntilReadyToPersistDecision( const std::shared_ptr<executor::ScopedTaskExecutor>& executor) noexcept { @@ -1600,7 +1612,8 @@ void ReshardingCoordinatorService::ReshardingCoordinator::_tellAllRecipientsToRe nssToRefresh = _coordinatorDoc.getSourceNss(); } - auto refreshCmd = createFlushReshardingStateChangeCommand(nssToRefresh); + auto refreshCmd = + createFlushReshardingStateChangeCommand(nssToRefresh, _coordinatorDoc.getReshardingUUID()); _reshardingCoordinatorExternalState->sendCommandToShards( opCtx.get(), @@ -1615,7 +1628,8 @@ void ReshardingCoordinatorService::ReshardingCoordinator::_tellAllDonorsToRefres auto opCtx = _cancelableOpCtxFactory->makeOperationContext(&cc()); auto donorIds = extractShardIdsFromParticipantEntries(_coordinatorDoc.getDonorShards()); - auto refreshCmd = createFlushReshardingStateChangeCommand(_coordinatorDoc.getSourceNss()); + auto refreshCmd = createFlushReshardingStateChangeCommand(_coordinatorDoc.getSourceNss(), + _coordinatorDoc.getReshardingUUID()); _reshardingCoordinatorExternalState->sendCommandToShards(opCtx.get(), NamespaceString::kAdminDb, refreshCmd, @@ -1633,11 +1647,12 @@ void ReshardingCoordinatorService::ReshardingCoordinator::_tellAllParticipantsTo std::set<ShardId> participantShardIds{donorShardIds.begin(), donorShardIds.end()}; participantShardIds.insert(recipientShardIds.begin(), recipientShardIds.end()); - auto refreshCmd = createFlushReshardingStateChangeCommand(nss); + auto commitCmd = + createShardsvrCommitReshardCollectionCmd(nss, _coordinatorDoc.getReshardingUUID()); _reshardingCoordinatorExternalState->sendCommandToShards( opCtx.get(), NamespaceString::kAdminDb, - refreshCmd, + commitCmd, {participantShardIds.begin(), participantShardIds.end()}, **executor); } diff --git a/src/mongo/s/request_types/flush_resharding_state_change.idl b/src/mongo/s/request_types/flush_resharding_state_change.idl index e397dda7dee..0ced190a88f 100644 --- a/src/mongo/s/request_types/flush_resharding_state_change.idl +++ b/src/mongo/s/request_types/flush_resharding_state_change.idl @@ -38,7 +38,13 @@ commands: _flushReshardingStateChange: description: "An internal command to flush resharding state changes to shards." command_name: _flushReshardingStateChange + command_alias: _shardsvrCommitReshardCollection strict: true namespace: type api_version: "" type: namespacestring + fields: + reshardingUUID: + type: uuid + optional: false + description: "The UUID for this resharding operation" |