summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/migration_impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/s/migration_impl.cpp')
-rw-r--r--src/mongo/db/s/migration_impl.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/mongo/db/s/migration_impl.cpp b/src/mongo/db/s/migration_impl.cpp
index 367bdc9e5c8..d33fc302d9b 100644
--- a/src/mongo/db/s/migration_impl.cpp
+++ b/src/mongo/db/s/migration_impl.cpp
@@ -80,6 +80,13 @@ WriteConcernOptions getDefaultWriteConcernForMigration() {
return WriteConcernOptions(1, WriteConcernOptions::NONE, 0);
}
+BSONObj createRecvChunkCommitRequest(const MigrationSessionId& sessionId) {
+ BSONObjBuilder builder;
+ builder.append("_recvChunkCommit", 1);
+ sessionId.append(&builder);
+ return builder.obj();
+}
+
MONGO_FP_DECLARE(failMigrationCommit);
MONGO_FP_DECLARE(hangBeforeLeavingCriticalSection);
MONGO_FP_DECLARE(failMigrationConfigWritePrepare);
@@ -276,7 +283,7 @@ ChunkMoveOperationState::acquireMoveMetadata() {
return &_distLockStatus->getValue();
}
-Status ChunkMoveOperationState::commitMigration() {
+Status ChunkMoveOperationState::commitMigration(const MigrationSessionId& sessionId) {
invariant(_distLockStatus.is_initialized());
invariant(_distLockStatus->isOK());
@@ -321,7 +328,7 @@ Status ChunkMoveOperationState::commitMigration() {
try {
ScopedDbConnection connTo(_toShardCS, 35.0);
- connTo->runCommand("admin", BSON("_recvChunkCommit" << 1), res);
+ connTo->runCommand("admin", createRecvChunkCommitRequest(sessionId), res);
connTo.done();
recvChunkCommitStatus = getStatusFromCommandResult(res);
} catch (const DBException& e) {
@@ -578,9 +585,11 @@ std::shared_ptr<CollectionMetadata> ChunkMoveOperationState::getCollMetadata() c
return _collMetadata;
}
-Status ChunkMoveOperationState::start(BSONObj shardKeyPattern) {
+Status ChunkMoveOperationState::start(const MigrationSessionId& sessionId,
+ const BSONObj& shardKeyPattern) {
auto migrationSourceManager = ShardingState::get(_txn)->migrationSourceManager();
- if (!migrationSourceManager->start(_txn, _nss.ns(), _minKey, _maxKey, shardKeyPattern)) {
+ if (!migrationSourceManager->start(
+ _txn, sessionId, _nss.ns(), _minKey, _maxKey, shardKeyPattern)) {
return {ErrorCodes::ConflictingOperationInProgress,
"Not starting chunk migration because another migration is already in progress "
"from this shard"};