summaryrefslogtreecommitdiff
path: root/jstests/replsets/tenant_migration_donor_state_machine.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/replsets/tenant_migration_donor_state_machine.js')
-rw-r--r--jstests/replsets/tenant_migration_donor_state_machine.js79
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();
})();