From 7648dc6152e8f24ca626b6cd120d9d701c37bf2d Mon Sep 17 00:00:00 2001 From: Matthew Russotto Date: Tue, 16 Feb 2021 09:48:35 -0500 Subject: SERVER-53552 Tenant migration donor should pass startMigrationDonorTimestamp info to recipient via recipientSyncData cmd --- .../replsets/tenant_migration_donor_current_op.js | 51 ++++++++++++++++++++-- 1 file changed, 47 insertions(+), 4 deletions(-) (limited to 'jstests/replsets/tenant_migration_donor_current_op.js') diff --git a/jstests/replsets/tenant_migration_donor_current_op.js b/jstests/replsets/tenant_migration_donor_current_op.js index d24a9e3176c..f8d6bbf8742 100644 --- a/jstests/replsets/tenant_migration_donor_current_op.js +++ b/jstests/replsets/tenant_migration_donor_current_op.js @@ -17,10 +17,11 @@ load("jstests/replsets/libs/tenant_migration_test.js"); // An object that mirrors the donor migration states. const migrationStates = { kUninitialized: 0, - kDataSync: 1, - kBlocking: 2, - kCommitted: 3, - kAborted: 4 + kAbortingIndexBuilds: 1, + kDataSync: 2, + kBlocking: 3, + kCommitted: 4, + kAborted: 5 }; const kTenantId = 'testTenantId'; @@ -28,6 +29,43 @@ const kReadPreference = { mode: "primary" }; +(() => { + jsTestLog("Testing currentOp output for migration in data sync state"); + const tenantMigrationTest = new TenantMigrationTest({name: jsTestName()}); + if (!tenantMigrationTest.isFeatureFlagEnabled()) { + jsTestLog("Skipping test because the tenant migrations feature flag is disabled"); + return; + } + + const donorPrimary = tenantMigrationTest.getDonorPrimary(); + + const migrationId = UUID(); + const migrationOpts = { + migrationIdString: extractUUIDFromObject(migrationId), + tenantId: kTenantId, + readPreference: kReadPreference + }; + let fp = configureFailPoint(donorPrimary, + "pauseTenantMigrationBeforeLeavingAbortingIndexBuildsState"); + assert.commandWorked(tenantMigrationTest.startMigration(migrationOpts)); + fp.wait(); + + const res = assert.commandWorked( + donorPrimary.adminCommand({currentOp: true, desc: "tenant donor migration"})); + assert.eq(res.inprog.length, 1); + assert.eq(bsonWoCompare(res.inprog[0].instanceID.uuid, migrationId), 0); + assert.eq(bsonWoCompare(res.inprog[0].tenantId, kTenantId), 0); + assert.eq(res.inprog[0].recipientConnectionString, + tenantMigrationTest.getRecipientRst().getURL()); + assert.eq(bsonWoCompare(res.inprog[0].readPreference, kReadPreference), 0); + assert.eq(res.inprog[0].lastDurableState, migrationStates.kAbortingIndexBuilds); + assert.eq(res.inprog[0].migrationCompleted, false); + + fp.off(); + assert.commandWorked(tenantMigrationTest.waitForMigrationToComplete(migrationOpts)); + tenantMigrationTest.stop(); +})(); + (() => { jsTestLog("Testing currentOp output for migration in data sync state"); const tenantMigrationTest = new TenantMigrationTest({name: jsTestName()}); @@ -57,6 +95,7 @@ const kReadPreference = { tenantMigrationTest.getRecipientRst().getURL()); assert.eq(bsonWoCompare(res.inprog[0].readPreference, kReadPreference), 0); assert.eq(res.inprog[0].lastDurableState, migrationStates.kDataSync); + assert(res.inprog[0].startMigrationDonorTimestamp); assert.eq(res.inprog[0].migrationCompleted, false); fp.off(); @@ -92,6 +131,7 @@ const kReadPreference = { tenantMigrationTest.getRecipientRst().getURL()); assert.eq(bsonWoCompare(res.inprog[0].readPreference, kReadPreference), 0); assert.eq(res.inprog[0].lastDurableState, migrationStates.kBlocking); + assert(res.inprog[0].startMigrationDonorTimestamp); assert(res.inprog[0].blockTimestamp); assert.eq(res.inprog[0].migrationCompleted, false); @@ -128,6 +168,7 @@ const kReadPreference = { tenantMigrationTest.getRecipientRst().getURL()); assert.eq(bsonWoCompare(res.inprog[0].readPreference, kReadPreference), 0); assert.eq(res.inprog[0].lastDurableState, migrationStates.kAborted); + assert(res.inprog[0].startMigrationDonorTimestamp); assert(res.inprog[0].blockTimestamp); assert(res.inprog[0].commitOrAbortOpTime); assert(res.inprog[0].abortReason); @@ -162,6 +203,7 @@ const kReadPreference = { tenantMigrationTest.getRecipientRst().getURL()); assert.eq(bsonWoCompare(res.inprog[0].readPreference, kReadPreference), 0); assert.eq(res.inprog[0].lastDurableState, migrationStates.kCommitted); + assert(res.inprog[0].startMigrationDonorTimestamp); assert(res.inprog[0].blockTimestamp); assert(res.inprog[0].commitOrAbortOpTime); assert.eq(res.inprog[0].migrationCompleted, false); @@ -178,6 +220,7 @@ const kReadPreference = { tenantMigrationTest.getRecipientRst().getURL()); assert.eq(bsonWoCompare(res.inprog[0].readPreference, kReadPreference), 0); assert.eq(res.inprog[0].lastDurableState, migrationStates.kCommitted); + assert(res.inprog[0].startMigrationDonorTimestamp); assert(res.inprog[0].blockTimestamp); assert(res.inprog[0].commitOrAbortOpTime); assert(res.inprog[0].expireAt); -- cgit v1.2.1