summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlake Oler <blake.oler@mongodb.com>2021-06-24 17:16:47 +0000
committerBlake Oler <blake.oler@mongodb.com>2021-06-25 14:05:11 +0000
commit8c5808ecb212172a374b81b715d98faa71b407b5 (patch)
tree5883f7177d3c85e0cc54ab3fe710a89c163966cd
parenta9d47d7e8ba07464545f1e270e2f10536479828a (diff)
downloadmongo-8c5808ecb212172a374b81b715d98faa71b407b5.tar.gz
SERVER-58063 Alias "flushReshardingStateChanges" as "_shardsvrCommitReshardCollection" to allow 5.0.0 and 5.0.1 compatibility
(cherry picked from commit 72939ea4a1d1a1ceb399caf771ee567998b4729d)
-rw-r--r--src/mongo/db/s/flush_resharding_state_change_command.cpp8
-rw-r--r--src/mongo/db/s/resharding/resharding_coordinator_service.cpp25
-rw-r--r--src/mongo/s/request_types/flush_resharding_state_change.idl6
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"