summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/migration_source_manager.cpp
diff options
context:
space:
mode:
authorAlex Taskov <alex.taskov@mongodb.com>2020-02-21 16:26:45 -0500
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-02-21 23:09:49 +0000
commit616564d1a5ea7217aa8b1e7f4c6d28800f0b65c9 (patch)
treeac5703336b02d40e83f7b14c954b41f6d3ceb1b1 /src/mongo/db/s/migration_source_manager.cpp
parentd6c1d5f25f895cace27e2b165a1bee9e1865a2fd (diff)
downloadmongo-616564d1a5ea7217aa8b1e7f4c6d28800f0b65c9.tar.gz
SERVER-45952 moveChunk command should re-use lsid and use txnNumber that increments by two for each migration
Diffstat (limited to 'src/mongo/db/s/migration_source_manager.cpp')
-rw-r--r--src/mongo/db/s/migration_source_manager.cpp22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/mongo/db/s/migration_source_manager.cpp b/src/mongo/db/s/migration_source_manager.cpp
index 77382fb15b6..049609000eb 100644
--- a/src/mongo/db/s/migration_source_manager.cpp
+++ b/src/mongo/db/s/migration_source_manager.cpp
@@ -262,9 +262,6 @@ Status MigrationSourceManager::startClone() {
auto replCoord = repl::ReplicationCoordinator::get(_opCtx);
auto replEnabled = replCoord->isReplEnabled();
- UUID migrationId = UUID::gen();
- _lsid = makeLogicalSessionId(_opCtx);
-
{
const auto metadata = _getCurrentMetadataAndCheckEpoch();
@@ -298,9 +295,7 @@ Status MigrationSourceManager::startClone() {
if (_enableResumableRangeDeleter) {
_coordinator = std::make_unique<migrationutil::MigrationCoordinator>(
- migrationId,
_cloneDriver->getSessionId(),
- _lsid,
_args.getFromShardId(),
_args.getToShardId(),
getNss(),
@@ -324,11 +319,19 @@ Status MigrationSourceManager::startClone() {
if (_enableResumableRangeDeleter) {
_coordinator->startMigration(_opCtx);
- }
- Status startCloneStatus = _cloneDriver->startClone(_opCtx, migrationId, _lsid, TxnNumber{0});
- if (!startCloneStatus.isOK()) {
- return startCloneStatus;
+ Status startCloneStatus = _cloneDriver->startClone(_opCtx,
+ _coordinator->getMigrationId(),
+ _coordinator->getLsid(),
+ _coordinator->getTxnNumber());
+ if (!startCloneStatus.isOK()) {
+ return startCloneStatus;
+ }
+ } else {
+ Status startCloneStatus = _cloneDriver->startClone(_opCtx);
+ if (!startCloneStatus.isOK()) {
+ return startCloneStatus;
+ }
}
scopedGuard.dismiss();
@@ -765,6 +768,7 @@ void MigrationSourceManager::_cleanup() {
auto newOpCtxPtr = cc().makeOperationContext();
auto newOpCtx = newOpCtxPtr.get();
_cleanupCompleteFuture = _coordinator->completeMigration(newOpCtx);
+ _coordinator.reset();
}
}