diff options
Diffstat (limited to 'jstests/replsets/tenant_migration_donor_state_machine.js')
-rw-r--r-- | jstests/replsets/tenant_migration_donor_state_machine.js | 79 |
1 files changed, 28 insertions, 51 deletions
diff --git a/jstests/replsets/tenant_migration_donor_state_machine.js b/jstests/replsets/tenant_migration_donor_state_machine.js index 2f02cce130c..9c520ee8899 100644 --- a/jstests/replsets/tenant_migration_donor_state_machine.js +++ b/jstests/replsets/tenant_migration_donor_state_machine.js @@ -14,9 +14,8 @@ "use strict"; load("jstests/libs/fail_point_util.js"); -load("jstests/libs/parallelTester.js"); load("jstests/libs/uuid_util.js"); -load("jstests/replsets/libs/tenant_migration_util.js"); +load("jstests/replsets/libs/tenant_migration_test.js"); let expectedNumRecipientSyncDataCmdSent = 0; let expectedNumRecipientForgetMigrationCmdSent = 0; @@ -45,8 +44,9 @@ function testDonorForgetMigrationAfterMigrationCompletes( null == node.adminCommand({serverStatus: 1}).tenantMigrationAccessBlocker); }); - assert.soon(() => - 0 === donorPrimary.getCollection(kConfigDonorsNS).count({tenantId: tenantId})); + assert.soon(() => 0 === donorPrimary.getCollection(TenantMigrationTest.kConfigDonorsNS).count({ + tenantId: tenantId + })); assert.soon(() => 0 === donorPrimary.adminCommand({serverStatus: 1}) .repl.primaryOnlyServices.TenantMigrationDonorService); @@ -72,58 +72,41 @@ const donorRst = new ReplSetTest({ } } }); -const recipientRst = new ReplSetTest({ - nodes: 1, - name: "recipient", - nodeOptions: { - setParameter: { - enableTenantMigrations: true, - // TODO SERVER-51734: Remove the failpoint 'returnResponseOkForRecipientSyncDataCmd'. - 'failpoint.returnResponseOkForRecipientSyncDataCmd': tojson({mode: 'alwaysOn'}) - } - } -}); donorRst.startSet(); donorRst.initiate(); -recipientRst.startSet(); -recipientRst.initiate(); +const tenantMigrationTest = new TenantMigrationTest({name: jsTestName(), donorRst}); +const recipientRst = tenantMigrationTest.getRecipientRst(); -const donorPrimary = donorRst.getPrimary(); -const recipientPrimary = recipientRst.getPrimary(); -const kRecipientConnString = recipientRst.getURL(); +const donorPrimary = tenantMigrationTest.getDonorPrimary(); +const recipientPrimary = tenantMigrationTest.getRecipientPrimary(); const kTenantId = "testDb"; -const kConfigDonorsNS = "config.tenantMigrationDonors"; -let configDonorsColl = donorPrimary.getCollection(kConfigDonorsNS); +let configDonorsColl = donorPrimary.getCollection(TenantMigrationTest.kConfigDonorsNS); (() => { jsTest.log("Test the case where the migration commits"); const migrationId = UUID(); const migrationOpts = { migrationIdString: extractUUIDFromObject(migrationId), - recipientConnString: recipientRst.getURL(), tenantId: kTenantId, - readPreference: {mode: "primary"}, }; - let migrationThread = - new Thread(TenantMigrationUtil.startMigration, donorPrimary.host, migrationOpts); let blockingFp = configureFailPoint(donorPrimary, "pauseTenantMigrationAfterBlockingStarts"); - migrationThread.start(); + assert.commandWorked(tenantMigrationTest.startMigration(migrationOpts)); // Wait for the migration to enter the blocking state. blockingFp.wait(); let mtabs = donorPrimary.adminCommand({serverStatus: 1}).tenantMigrationAccessBlocker; - assert.eq(mtabs[kTenantId].state, TenantMigrationUtil.accessState.kBlockWritesAndReads); + assert.eq(mtabs[kTenantId].state, TenantMigrationTest.AccessState.kBlockWritesAndReads); assert(mtabs[kTenantId].blockTimestamp); let donorDoc = configDonorsColl.findOne({tenantId: kTenantId}); let blockOplogEntry = donorPrimary.getDB("local").oplog.rs.findOne( - {ns: kConfigDonorsNS, op: "u", "o.tenantId": kTenantId}); + {ns: TenantMigrationTest.kConfigDonorsNS, op: "u", "o.tenantId": kTenantId}); assert.eq(donorDoc.state, "blocking"); assert.eq(donorDoc.blockTimestamp, blockOplogEntry.ts); @@ -134,19 +117,19 @@ let configDonorsColl = donorPrimary.getCollection(kConfigDonorsNS); // Allow the migration to complete. blockingFp.off(); - migrationThread.join(); - const res = assert.commandWorked(migrationThread.returnData()); - assert.eq(res.state, "committed"); + const stateRes = + assert.commandWorked(tenantMigrationTest.waitForMigrationToComplete(migrationOpts)); + assert.eq(stateRes.state, TenantMigrationTest.State.kCommitted); donorDoc = configDonorsColl.findOne({tenantId: kTenantId}); - let commitOplogEntry = - donorPrimary.getDB("local").oplog.rs.findOne({ns: kConfigDonorsNS, op: "u", o: donorDoc}); - assert.eq(donorDoc.state, "committed"); + let commitOplogEntry = donorPrimary.getDB("local").oplog.rs.findOne( + {ns: TenantMigrationTest.kConfigDonorsNS, op: "u", o: donorDoc}); + assert.eq(donorDoc.state, TenantMigrationTest.State.kCommitted); assert.eq(donorDoc.commitOrAbortOpTime.ts, commitOplogEntry.ts); assert.soon(() => { mtabs = donorPrimary.adminCommand({serverStatus: 1}).tenantMigrationAccessBlocker; - return mtabs[kTenantId].state === TenantMigrationUtil.accessState.kReject; + return mtabs[kTenantId].state === TenantMigrationTest.AccessState.kReject; }); assert(mtabs[kTenantId].commitOrAbortOpTime); @@ -164,28 +147,25 @@ let configDonorsColl = donorPrimary.getCollection(kConfigDonorsNS); const migrationId = UUID(); const migrationOpts = { migrationIdString: extractUUIDFromObject(migrationId), - recipientConnString: recipientRst.getURL(), tenantId: kTenantId, - readPreference: {mode: "primary"}, }; let abortFp = configureFailPoint(donorPrimary, "abortTenantMigrationAfterBlockingStarts"); - const res = - assert.commandWorked(TenantMigrationUtil.startMigration(donorPrimary.host, migrationOpts)); - assert.eq(res.state, "aborted"); + const stateRes = assert.commandWorked(tenantMigrationTest.runMigration(migrationOpts)); + assert.eq(stateRes.state, TenantMigrationTest.State.kAborted); abortFp.off(); const donorDoc = configDonorsColl.findOne({tenantId: kTenantId}); - const abortOplogEntry = - donorPrimary.getDB("local").oplog.rs.findOne({ns: kConfigDonorsNS, op: "u", o: donorDoc}); - assert.eq(donorDoc.state, "aborted"); + const abortOplogEntry = donorPrimary.getDB("local").oplog.rs.findOne( + {ns: TenantMigrationTest.kConfigDonorsNS, op: "u", o: donorDoc}); + assert.eq(donorDoc.state, TenantMigrationTest.State.kAborted); assert.eq(donorDoc.commitOrAbortOpTime.ts, abortOplogEntry.ts); assert.eq(donorDoc.abortReason.code, ErrorCodes.InternalError); let mtabs; assert.soon(() => { mtabs = donorPrimary.adminCommand({serverStatus: 1}).tenantMigrationAccessBlocker; - return mtabs[kTenantId].state === TenantMigrationUtil.accessState.kAborted; + return mtabs[kTenantId].state === TenantMigrationTest.AccessState.kAborted; }); assert(mtabs[kTenantId].commitOrAbortOpTime); @@ -207,9 +187,7 @@ configDonorsColl.dropIndex({expireAt: 1}); const migrationId = UUID(); const migrationOpts = { migrationIdString: extractUUIDFromObject(migrationId), - recipientConnString: recipientRst.getURL(), tenantId: kTenantId, - readPreference: {mode: "primary"}, }; // Verify that donorForgetMigration fails since the migration hasn't started. @@ -217,9 +195,8 @@ configDonorsColl.dropIndex({expireAt: 1}); donorPrimary.adminCommand({donorForgetMigration: 1, migrationId: migrationId}), ErrorCodes.NoSuchTenantMigration); - const res = - assert.commandWorked(TenantMigrationUtil.startMigration(donorPrimary.host, migrationOpts)); - assert.eq(res.state, "committed"); + const stateRes = assert.commandWorked(tenantMigrationTest.runMigration(migrationOpts)); + assert.eq(stateRes.state, TenantMigrationTest.State.kCommitted); assert.commandWorked( donorPrimary.adminCommand({donorForgetMigration: 1, migrationId: migrationId})); @@ -228,6 +205,6 @@ configDonorsColl.dropIndex({expireAt: 1}); donorPrimary.adminCommand({donorForgetMigration: 1, migrationId: migrationId})); })(); +tenantMigrationTest.stop(); donorRst.stopSet(); -recipientRst.stopSet(); })(); |