diff options
author | Matt Broadstone <mbroadst@mongodb.com> | 2023-01-04 16:01:17 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-01-04 16:40:22 +0000 |
commit | 2d1d04a9b387538a23de3f78006972992b0258ad (patch) | |
tree | 788eaca256041f158cb0238898654e34a3fe53ce | |
parent | e9c0261130bd3e06ab5d206c6b6632ab96758733 (diff) | |
download | mongo-2d1d04a9b387538a23de3f78006972992b0258ad.tar.gz |
SERVER-72286 Convert all shard split tests to use ES modules
61 files changed, 195 insertions, 323 deletions
diff --git a/.eslintrc.yml b/.eslintrc.yml index ff14b3bb5e5..575cde0bef7 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -1,9 +1,9 @@ env: - es2019: true + es2020: true mongo: true parserOptions: - ecmaVersion: 2019 + ecmaVersion: 2020 sourceType: "module" rules: diff --git a/jstests/serverless/libs/shard_split_test.js b/jstests/serverless/libs/shard_split_test.js index a27865e7b55..bc153ef8bcb 100644 --- a/jstests/serverless/libs/shard_split_test.js +++ b/jstests/serverless/libs/shard_split_test.js @@ -3,22 +3,22 @@ load("jstests/replsets/rslib.js"); load("jstests/libs/parallelTester.js"); load("jstests/libs/uuid_util.js"); -const runForgetShardSplitAsync = function(primaryHost, migrationIdString) { +function runForgetShardSplitAsync(primaryHost, migrationIdString) { const primary = new Mongo(primaryHost); return primary.adminCommand({forgetShardSplit: 1, migrationId: UUID(migrationIdString)}); -}; +} -const runAbortShardSplitAsync = function(primaryHost, migrationIdString) { +function runAbortShardSplitAsync(primaryHost, migrationIdString) { const primary = new Mongo(primaryHost); return primary.adminCommand({abortShardSplit: 1, migrationId: UUID(migrationIdString)}); -}; +} /* * Connects to a replica set and runs write operation, returning the results. * @param {rstArgs} replicaSetArgs for the replica set to connect to. * @param {tenantIds} perform a write operation for each tenantId. */ -const doWriteOperations = function(rstArgs, tenantIds) { +export function doWriteOperations(rstArgs, tenantIds) { load("jstests/replsets/rslib.js"); const donorRst = createRst(rstArgs, true); @@ -49,9 +49,9 @@ const doWriteOperations = function(rstArgs, tenantIds) { }); return writeResults; -}; +} -const addRecipientNodes = function({rst, numNodes, recipientTagName}) { +export function addRecipientNodes({rst, numNodes, recipientTagName}) { numNodes = numNodes || 3; // default to three nodes const recipientNodes = []; const options = TenantMigrationUtil.makeX509OptionsForTest(); @@ -86,23 +86,22 @@ const addRecipientNodes = function({rst, numNodes, recipientTagName}) { recipientNodes.forEach(node => rst.waitForState(node, ReplSetTest.State.SECONDARY)); return recipientNodes; -}; +} /** * Convert arguments passed through the Thread interface and calls runShardSplitCommand. */ -const runCommitSplitThreadWrapper = function(rstArgs, - migrationIdString, - tenantIds, - recipientTagName, - recipientSetName, - retryOnRetryableErrors, - enableDonorStartMigrationFsync) { +async function runCommitSplitThreadWrapper(rstArgs, + migrationIdString, + tenantIds, + recipientTagName, + recipientSetName, + retryOnRetryableErrors, + enableDonorStartMigrationFsync) { load("jstests/replsets/rslib.js"); - load("jstests/serverless/libs/shard_split_test.js"); + const {runShardSplitCommand} = await import("jstests/serverless/libs/shard_split_test.js"); const donorRst = createRst(rstArgs, true); - const commitShardSplitCmdObj = { commitShardSplit: 1, migrationId: UUID(migrationIdString), @@ -115,7 +114,7 @@ const runCommitSplitThreadWrapper = function(rstArgs, return runShardSplitCommand( donorRst, commitShardSplitCmdObj, retryOnRetryableErrors, enableDonorStartMigrationFsync); -}; +} /* * Wait for state document garbage collection by polling for when the document has been removed @@ -123,7 +122,7 @@ const runCommitSplitThreadWrapper = function(rstArgs, * @param {migrationId} id that was used for the commitShardSplit command. * @param {tenantIds} tenant ids of the shard split. */ -const waitForGarbageCollectionForSplit = function(donorNodes, migrationId, tenantIds) { +export function waitForGarbageCollectionForSplit(donorNodes, migrationId, tenantIds) { jsTestLog("Wait for garbage collection"); assert.soon(() => donorNodes.every(node => { const donorDocumentDeleted = @@ -153,9 +152,9 @@ const waitForGarbageCollectionForSplit = function(donorNodes, migrationId, tenan "tenant access blockers weren't removed", 60 * 1000, 1 * 1000); -}; +} -const commitSplitAsync = function({ +export function commitSplitAsync({ rst, tenantIds, recipientTagName, @@ -183,9 +182,9 @@ const commitSplitAsync = function({ thread.start(); return thread; -}; +} -const runShardSplitCommand = function( +export function runShardSplitCommand( replicaSet, cmdObj, retryOnRetryableErrors, enableDonorStartMigrationFsync) { let res; if (enableDonorStartMigrationFsync) { @@ -225,7 +224,7 @@ const runShardSplitCommand = function( } }, "failed to retry commitShardSplit", 10 * 1000, 1 * 1000); return res; -}; +} /** * Utility class to run shard split operations. @@ -343,7 +342,7 @@ class ShardSplitOperation { * Utility class to create a ReplicaSetTest that provides functionnality to run a shard split * operation. */ -class ShardSplitTest { +export class ShardSplitTest { constructor({ recipientTagName = "recipientNode", recipientSetName = "recipientSetName", @@ -691,17 +690,12 @@ ShardSplitTest.DonorState = { kAborted: "aborted" }; -function findSplitOperation(primary, migrationId) { +export function findSplitOperation(primary, migrationId) { const donorsCollection = primary.getCollection(ShardSplitTest.kConfigSplitDonorsNS); return donorsCollection.findOne({"_id": migrationId}); } -function cleanupMigrationDocument(primary, migrationId) { - const donorsCollection = primary.getCollection(ShardSplitTest.kConfigSplitDonorsNS); - return donorsCollection.deleteOne({"_id": migrationId}, {w: "majority"}); -} - -function assertMigrationState(primary, migrationId, state) { +export function assertMigrationState(primary, migrationId, state) { const migrationDoc = findSplitOperation(primary, migrationId); assert(migrationDoc); diff --git a/jstests/serverless/serverless_reject_multiple_ops_access_blocker.js b/jstests/serverless/serverless_reject_multiple_ops_access_blocker.js index b54382d5bbb..e1073ddeb92 100644 --- a/jstests/serverless/serverless_reject_multiple_ops_access_blocker.js +++ b/jstests/serverless/serverless_reject_multiple_ops_access_blocker.js @@ -6,9 +6,9 @@ * ] */ +import {addRecipientNodes, commitSplitAsync} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/libs/tenant_migration_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/libs/uuid_util.js"); function cannotStartMigrationWhenThereIsAnExistingAccessBlocker(protocol) { @@ -21,7 +21,7 @@ function cannotStartMigrationWhenThereIsAnExistingAccessBlocker(protocol) { // Ensure a high enough delay so the shard split document is not deleted before tenant migration // is started. - sharedOptions = {}; + const sharedOptions = {}; sharedOptions["setParameter"] = { shardSplitGarbageCollectionDelayMS: 36000000, ttlMonitorSleepSecs: 1 diff --git a/jstests/serverless/serverless_reject_multiple_ops_migration_after_garbage_collection.js b/jstests/serverless/serverless_reject_multiple_ops_migration_after_garbage_collection.js index dc5c4929a20..115ceacf9fb 100644 --- a/jstests/serverless/serverless_reject_multiple_ops_migration_after_garbage_collection.js +++ b/jstests/serverless/serverless_reject_multiple_ops_migration_after_garbage_collection.js @@ -6,10 +6,13 @@ * ] */ +import { + addRecipientNodes, + commitSplitAsync, + waitForGarbageCollectionForSplit +} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/libs/tenant_migration_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); -load("jstests/libs/parallelTester.js"); load("jstests/libs/uuid_util.js"); function canStartMigrationAfterSplitGarbageCollection(protocol) { @@ -20,7 +23,7 @@ function canStartMigrationAfterSplitGarbageCollection(protocol) { const splitMigrationId = UUID(); const tenantMigrationId = UUID(); - sharedOptions = {}; + const sharedOptions = {}; sharedOptions["setParameter"] = {shardSplitGarbageCollectionDelayMS: 0, ttlMonitorSleepSecs: 1}; const test = new TenantMigrationTest({quickGarbageCollection: true, sharedOptions}); diff --git a/jstests/serverless/serverless_reject_multiple_ops_migration_different_tenant.js b/jstests/serverless/serverless_reject_multiple_ops_migration_different_tenant.js index b8b3e38a185..be93b69b91d 100644 --- a/jstests/serverless/serverless_reject_multiple_ops_migration_different_tenant.js +++ b/jstests/serverless/serverless_reject_multiple_ops_migration_different_tenant.js @@ -6,9 +6,13 @@ * ] */ +import { + addRecipientNodes, + commitSplitAsync, + waitForGarbageCollectionForSplit +} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/libs/tenant_migration_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/libs/uuid_util.js"); function cannotStartMigrationWithDifferentTenantWhileShardSplitIsInProgress(protocol) { @@ -20,7 +24,7 @@ function cannotStartMigrationWithDifferentTenantWhileShardSplitIsInProgress(prot const splitMigrationId = UUID(); const tenantMigrationId = UUID(); - sharedOptions = {}; + const sharedOptions = {}; sharedOptions["setParameter"] = {shardSplitGarbageCollectionDelayMS: 0, ttlMonitorSleepSecs: 1}; const test = new TenantMigrationTest({quickGarbageCollection: true, sharedOptions}); diff --git a/jstests/serverless/serverless_reject_multiple_ops_migration_donor.js b/jstests/serverless/serverless_reject_multiple_ops_migration_donor.js index dc5c4929a20..115ceacf9fb 100644 --- a/jstests/serverless/serverless_reject_multiple_ops_migration_donor.js +++ b/jstests/serverless/serverless_reject_multiple_ops_migration_donor.js @@ -6,10 +6,13 @@ * ] */ +import { + addRecipientNodes, + commitSplitAsync, + waitForGarbageCollectionForSplit +} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/libs/tenant_migration_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); -load("jstests/libs/parallelTester.js"); load("jstests/libs/uuid_util.js"); function canStartMigrationAfterSplitGarbageCollection(protocol) { @@ -20,7 +23,7 @@ function canStartMigrationAfterSplitGarbageCollection(protocol) { const splitMigrationId = UUID(); const tenantMigrationId = UUID(); - sharedOptions = {}; + const sharedOptions = {}; sharedOptions["setParameter"] = {shardSplitGarbageCollectionDelayMS: 0, ttlMonitorSleepSecs: 1}; const test = new TenantMigrationTest({quickGarbageCollection: true, sharedOptions}); diff --git a/jstests/serverless/serverless_reject_multiple_ops_migration_donor_retry.js b/jstests/serverless/serverless_reject_multiple_ops_migration_donor_retry.js index 1ed74c9f793..2516c4611d4 100644 --- a/jstests/serverless/serverless_reject_multiple_ops_migration_donor_retry.js +++ b/jstests/serverless/serverless_reject_multiple_ops_migration_donor_retry.js @@ -6,9 +6,13 @@ * ] */ +import { + addRecipientNodes, + commitSplitAsync, + waitForGarbageCollectionForSplit +} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/libs/tenant_migration_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/libs/uuid_util.js"); function retryMigrationAfterSplitCompletes(protocol) { @@ -20,7 +24,7 @@ function retryMigrationAfterSplitCompletes(protocol) { const firstTenantMigrationId = UUID(); const secondTenantMigrationId = UUID(); - sharedOptions = {}; + const sharedOptions = {}; sharedOptions["setParameter"] = {shardSplitGarbageCollectionDelayMS: 0, ttlMonitorSleepSecs: 1}; const test = new TenantMigrationTest({quickGarbageCollection: true, sharedOptions}); diff --git a/jstests/serverless/serverless_reject_multiple_ops_migration_fail.js b/jstests/serverless/serverless_reject_multiple_ops_migration_fail.js index 7b911da8c50..13f311ffe80 100644 --- a/jstests/serverless/serverless_reject_multiple_ops_migration_fail.js +++ b/jstests/serverless/serverless_reject_multiple_ops_migration_fail.js @@ -6,9 +6,13 @@ * ] */ +import { + addRecipientNodes, + commitSplitAsync, + waitForGarbageCollectionForSplit +} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/libs/tenant_migration_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/libs/uuid_util.js"); function cannotStartMigrationWhileShardSplitIsInProgress(protocol) { @@ -19,7 +23,7 @@ function cannotStartMigrationWhileShardSplitIsInProgress(protocol) { const splitMigrationId = UUID(); const tenantMigrationId = UUID(); - sharedOptions = {}; + const sharedOptions = {}; sharedOptions["setParameter"] = {shardSplitGarbageCollectionDelayMS: 0, ttlMonitorSleepSecs: 1}; const test = new TenantMigrationTest({quickGarbageCollection: true, sharedOptions}); diff --git a/jstests/serverless/serverless_reject_multiple_ops_migration_fail_on_recipient.js b/jstests/serverless/serverless_reject_multiple_ops_migration_fail_on_recipient.js index c1a546ca02a..1ab2ac05996 100644 --- a/jstests/serverless/serverless_reject_multiple_ops_migration_fail_on_recipient.js +++ b/jstests/serverless/serverless_reject_multiple_ops_migration_fail_on_recipient.js @@ -6,9 +6,13 @@ * ] */ +import { + addRecipientNodes, + commitSplitAsync, + waitForGarbageCollectionForSplit +} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/libs/tenant_migration_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/libs/uuid_util.js"); function cannotStartMigrationWhileShardSplitIsInProgressOnRecipient(protocol) { @@ -19,7 +23,7 @@ function cannotStartMigrationWhileShardSplitIsInProgressOnRecipient(protocol) { const splitMigrationId = UUID(); const tenantMigrationId = UUID(); - sharedOptions = {}; + const sharedOptions = {}; sharedOptions["setParameter"] = {shardSplitGarbageCollectionDelayMS: 0, ttlMonitorSleepSecs: 1}; const test = new TenantMigrationTest({quickGarbageCollection: true, sharedOptions}); diff --git a/jstests/serverless/serverless_reject_multiple_ops_migration_recipient_retry.js b/jstests/serverless/serverless_reject_multiple_ops_migration_recipient_retry.js index 13e55b65aca..9567fe2e325 100644 --- a/jstests/serverless/serverless_reject_multiple_ops_migration_recipient_retry.js +++ b/jstests/serverless/serverless_reject_multiple_ops_migration_recipient_retry.js @@ -6,9 +6,13 @@ * ] */ +import { + addRecipientNodes, + commitSplitAsync, + waitForGarbageCollectionForSplit +} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/libs/tenant_migration_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/libs/uuid_util.js"); function cannotStartMigrationWhileShardSplitIsInProgressOnRecipient(protocol) { @@ -20,7 +24,7 @@ function cannotStartMigrationWhileShardSplitIsInProgressOnRecipient(protocol) { const tenantMigrationId = UUID(); const secondTenantMigrationId = UUID(); - sharedOptions = {}; + const sharedOptions = {}; sharedOptions["setParameter"] = {shardSplitGarbageCollectionDelayMS: 0, ttlMonitorSleepSecs: 1}; const test = new TenantMigrationTest({quickGarbageCollection: true, sharedOptions}); diff --git a/jstests/serverless/serverless_reject_multiple_ops_split.js b/jstests/serverless/serverless_reject_multiple_ops_split.js index 48708f79fa8..0531094f164 100644 --- a/jstests/serverless/serverless_reject_multiple_ops_split.js +++ b/jstests/serverless/serverless_reject_multiple_ops_split.js @@ -6,9 +6,9 @@ * ] */ +import {addRecipientNodes, commitSplitAsync} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/libs/tenant_migration_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/libs/uuid_util.js"); function cannotStartShardSplitWithMigrationInProgress( @@ -52,7 +52,7 @@ function cannotStartShardSplitWithMigrationInProgress( jsTestLog("cannotStartShardSplitWithMigrationInProgress test completed"); } -sharedOptions = {}; +const sharedOptions = {}; sharedOptions["setParameter"] = { shardSplitGarbageCollectionDelayMS: 0, tenantMigrationGarbageCollectionDelayMS: 0, diff --git a/jstests/serverless/serverless_reject_multiple_ops_split_retry.js b/jstests/serverless/serverless_reject_multiple_ops_split_retry.js index 8b2fdf93c76..0955e0b0802 100644 --- a/jstests/serverless/serverless_reject_multiple_ops_split_retry.js +++ b/jstests/serverless/serverless_reject_multiple_ops_split_retry.js @@ -6,9 +6,9 @@ * ] */ +import {addRecipientNodes, commitSplitAsync} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/libs/tenant_migration_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/libs/uuid_util.js"); function retrySplit({protocol, recipientTagName, recipientSetName, tenantIds, test, splitRst}) { @@ -78,7 +78,7 @@ const recipientTagName = "recipientTag"; const recipientSetName = "recipient"; const tenantIds = [ObjectId(), ObjectId()]; -sharedOptions = { +const sharedOptions = { setParameter: { shardSplitGarbageCollectionDelayMS: 0, tenantMigrationGarbageCollectionDelayMS: 0, diff --git a/jstests/serverless/serverless_reject_multiple_ops_split_success.js b/jstests/serverless/serverless_reject_multiple_ops_split_success.js index f982176fdd5..d0660710a30 100644 --- a/jstests/serverless/serverless_reject_multiple_ops_split_success.js +++ b/jstests/serverless/serverless_reject_multiple_ops_split_success.js @@ -6,9 +6,9 @@ * ] */ +import {addRecipientNodes, commitSplitAsync} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/libs/tenant_migration_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/libs/uuid_util.js"); function canStartShardSplitWithAbortedMigration({protocol, runOnRecipient}) { @@ -18,7 +18,7 @@ function canStartShardSplitWithAbortedMigration({protocol, runOnRecipient}) { const splitMigrationId = UUID(); const tenantMigrationId = UUID(); - sharedOptions = {}; + const sharedOptions = {}; sharedOptions["setParameter"] = {shardSplitGarbageCollectionDelayMS: 0, ttlMonitorSleepSecs: 1}; const test = new TenantMigrationTest({quickGarbageCollection: false, sharedOptions}); diff --git a/jstests/serverless/shard_split_abort_during_upgrade_downgrade.js b/jstests/serverless/shard_split_abort_during_upgrade_downgrade.js index cdbcd193380..63e791e448d 100644 --- a/jstests/serverless/shard_split_abort_during_upgrade_downgrade.js +++ b/jstests/serverless/shard_split_abort_during_upgrade_downgrade.js @@ -4,17 +4,15 @@ * @tags: [requires_fcv_62, serverless] */ -(function() { -"use strict"; +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); // Shard split commands are gated by a feature flag, which will not be supported when we // downgrade versions. Eventually, we will run this test when we have two consecutive versions // that support `commitShardSplit` without a feature flag. This check will be removed as part // of SERVER-66965. if (MongoRunner.compareBinVersions(latestFCV, "6.3") < 0) { - return; + quit(); } // Skip db hash check because secondary is left with a different config. @@ -58,4 +56,3 @@ upgradeThread.join(); secondSplit.forget(); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_abort_forget_retry.js b/jstests/serverless/shard_split_abort_forget_retry.js index b6bb76c56fe..7e0edd5be35 100644 --- a/jstests/serverless/shard_split_abort_forget_retry.js +++ b/jstests/serverless/shard_split_abort_forget_retry.js @@ -7,13 +7,9 @@ * @tags: [requires_fcv_62, serverless] */ -(function() { -"use strict"; +import {assertMigrationState, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load('jstests/libs/parallel_shell_helpers.js'); // for "startParallelShell" -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); TestData.skipCheckDBHashes = true; const test = new ShardSplitTest({quickGarbageCollection: true}); @@ -103,4 +99,3 @@ const test = new ShardSplitTest({quickGarbageCollection: true}); })(); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_abort_on_setfcv.js b/jstests/serverless/shard_split_abort_on_setfcv.js index 0b5d4288de9..dee05af5417 100644 --- a/jstests/serverless/shard_split_abort_on_setfcv.js +++ b/jstests/serverless/shard_split_abort_on_setfcv.js @@ -5,10 +5,9 @@ * @tags: [requires_fcv_62, serverless] */ -(function() { -"use strict"; +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; + load("jstests/libs/fail_point_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); // Skip db hash check because secondary is left with a different config. TestData.skipCheckDBHashes = true; @@ -51,4 +50,3 @@ if (lastContinuousFCV == "6.1") { } test.stop(); -})(); diff --git a/jstests/serverless/shard_split_abort_while_committing.js b/jstests/serverless/shard_split_abort_while_committing.js index 8eaf00b202e..7e0550a6806 100644 --- a/jstests/serverless/shard_split_abort_while_committing.js +++ b/jstests/serverless/shard_split_abort_while_committing.js @@ -4,8 +4,9 @@ * @tags: [requires_fcv_62, serverless] */ +import {assertMigrationState, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; + load("jstests/libs/fail_point_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); const failpoints = ["pauseShardSplitAfterUpdatingToCommittedState"]; diff --git a/jstests/serverless/shard_split_basic_test.js b/jstests/serverless/shard_split_basic_test.js index 37a19fcaaf8..3539ab69199 100644 --- a/jstests/serverless/shard_split_basic_test.js +++ b/jstests/serverless/shard_split_basic_test.js @@ -3,10 +3,11 @@ * @tags: [requires_fcv_62, serverless] */ -load("jstests/serverless/libs/shard_split_test.js"); - -(function() { -"use strict"; +import { + assertMigrationState, + findSplitOperation, + ShardSplitTest +} from "jstests/serverless/libs/shard_split_test.js"; const tenantIds = [ObjectId(), ObjectId()]; const test = new ShardSplitTest({quickGarbageCollection: true}); @@ -32,4 +33,3 @@ assert.gt(status.shardSplits.totalCommittedDurationWithoutCatchupMillis, 0); test.cleanupSuccesfulCommitted(operation.migrationId, tenantIds); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_buildindex.js b/jstests/serverless/shard_split_buildindex.js index 6bde26885a9..70f57619a58 100644 --- a/jstests/serverless/shard_split_buildindex.js +++ b/jstests/serverless/shard_split_buildindex.js @@ -12,12 +12,10 @@ * ] */ -(function() { -"use strict"; +import {assertMigrationState, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); load("jstests/replsets/libs/tenant_migration_test.js"); -load("jstests/serverless/libs/shard_split_test.js"); const shardSplitTest = new ShardSplitTest({quickGarbageCollection: true}); shardSplitTest.addRecipientNodes(); @@ -143,4 +141,3 @@ assert.commandFailedWithCode(db[kNewCollName1].createIndex({b: 1}), operation.forget(); shardSplitTest.cleanupSuccesfulCommitted(operation.migrationId, tenantIds); shardSplitTest.stop(); -})(); diff --git a/jstests/serverless/shard_split_change_collections_test.js b/jstests/serverless/shard_split_change_collections_test.js index 41b032e4973..ee0f99a2dc0 100644 --- a/jstests/serverless/shard_split_change_collections_test.js +++ b/jstests/serverless/shard_split_change_collections_test.js @@ -3,27 +3,21 @@ * @tags: [requires_fcv_62, serverless] */ +import {assertMigrationState, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/cluster_server_parameter_utils.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/serverless/libs/change_collection_util.js"); -(function() { -"use strict"; - const tenantIds = [ObjectId(), ObjectId()]; - const donorRst = new ChangeStreamMultitenantReplicaSetTest({ nodes: 3, nodeOptions: {setParameter: {shardSplitGarbageCollectionDelayMS: 0, ttlMonitorSleepSecs: 1}} }); const test = new ShardSplitTest({quickGarbageCollection: true, donorRst}); - test.addRecipientNodes(); test.donor.awaitSecondaryNodes(); const donorPrimary = test.getDonorPrimary(); - const donorTenantConn = ChangeStreamMultitenantReplicaSetTest.getTenantConnection(donorPrimary.host, tenantIds[0]); test.donor.setChangeStreamState(donorTenantConn, true); @@ -43,7 +37,7 @@ assert.eq(donorCursor.hasNext(), true); const {_id: resumeToken} = donorCursor.next(); const operation = test.createSplitOperation(tenantIds); -const result = assert.commandWorked(operation.commit()); +assert.commandWorked(operation.commit()); assertMigrationState(donorPrimary, operation.migrationId, "committed"); let errCode; @@ -84,4 +78,3 @@ assert.eq(changeStreamsClusterParameter.expireAfterSeconds, 7200); test.cleanupSuccesfulCommitted(operation.migrationId, tenantIds); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_concurrent_bulk_writes.js b/jstests/serverless/shard_split_concurrent_bulk_writes.js index 6618214b1e9..fd9c87ad229 100644 --- a/jstests/serverless/shard_split_concurrent_bulk_writes.js +++ b/jstests/serverless/shard_split_concurrent_bulk_writes.js @@ -15,13 +15,9 @@ * ] */ -(function() { -'use strict'; - +import {assertMigrationState, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); load("jstests/libs/parallelTester.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); const kMaxBatchSize = 2; const kCollName = "testColl"; @@ -619,4 +615,3 @@ function bulkMultiUpdateDocsUnordered(primaryHost, dbName, collName, numDocs) { tojson(bulkWriteRes)); test.stop(); })(); -})(); diff --git a/jstests/serverless/shard_split_concurrent_reads_on_donor_aborted.js b/jstests/serverless/shard_split_concurrent_reads_on_donor_aborted.js index f6141d6882b..c559b12ca2e 100644 --- a/jstests/serverless/shard_split_concurrent_reads_on_donor_aborted.js +++ b/jstests/serverless/shard_split_concurrent_reads_on_donor_aborted.js @@ -14,13 +14,15 @@ * ] */ -(function() { -'use strict'; +import { + assertMigrationState, + findSplitOperation, + ShardSplitTest +} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); load("jstests/libs/parallelTester.js"); load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/serverless/shard_split_concurrent_reads_on_donor_util.js"); const kCollName = "testColl"; @@ -104,4 +106,3 @@ for (const [testCaseName, testCase] of Object.entries(testCases)) { } test.stop(); -})(); diff --git a/jstests/serverless/shard_split_concurrent_reads_on_donor_blocking.js b/jstests/serverless/shard_split_concurrent_reads_on_donor_blocking.js index 4c533c86a4d..af06d3ff0ce 100644 --- a/jstests/serverless/shard_split_concurrent_reads_on_donor_blocking.js +++ b/jstests/serverless/shard_split_concurrent_reads_on_donor_blocking.js @@ -14,13 +14,9 @@ * ] */ -(function() { -'use strict'; +import {findSplitOperation, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load("jstests/libs/parallelTester.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/serverless/shard_split_concurrent_reads_on_donor_util.js"); const kCollName = "testColl"; @@ -109,4 +105,3 @@ splitThread.join(); assert.commandWorked(splitThread.returnData()); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_concurrent_reads_on_donor_blocking_then_aborted.js b/jstests/serverless/shard_split_concurrent_reads_on_donor_blocking_then_aborted.js index 4d50feb0aab..cc3604520e6 100644 --- a/jstests/serverless/shard_split_concurrent_reads_on_donor_blocking_then_aborted.js +++ b/jstests/serverless/shard_split_concurrent_reads_on_donor_blocking_then_aborted.js @@ -16,13 +16,9 @@ * ] */ -(function() { -'use strict'; +import {findSplitOperation, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load("jstests/libs/parallelTester.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/serverless/shard_split_concurrent_reads_on_donor_util.js"); const ktenantId = ObjectId(); @@ -33,11 +29,11 @@ const kCollName = "testColl"; * To be used to resume a split that is paused after entering the blocking state. Waits for the * number of blocked reads to reach 'targetNumBlockedReads' and unpauses the split. */ -function resumeMigrationAfterBlockingRead(host, tenantId, targetNumBlockedReads) { +async function resumeMigrationAfterBlockingRead(host, tenantId, targetNumBlockedReads) { + const {ShardSplitTest} = await import("jstests/serverless/libs/shard_split_test.js"); load("jstests/libs/fail_point_util.js"); - load("jstests/serverless/libs/shard_split_test.js"); - const primary = new Mongo(host); + const primary = new Mongo(host); assert.soon(() => ShardSplitTest.getNumBlockedReads(primary, eval(tenantId)) == targetNumBlockedReads); @@ -125,4 +121,3 @@ for (const [testCaseName, testCase] of Object.entries(testCases)) { const dbName = `${ktenantId.str}_${testCaseName}`; testUnblockBlockedReadsAfterMigrationAborted(testCase, dbName, kCollName); } -})(); diff --git a/jstests/serverless/shard_split_concurrent_reads_on_donor_blocking_then_committed.js b/jstests/serverless/shard_split_concurrent_reads_on_donor_blocking_then_committed.js index 4626cf2e2e6..f7110cdaade 100644 --- a/jstests/serverless/shard_split_concurrent_reads_on_donor_blocking_then_committed.js +++ b/jstests/serverless/shard_split_concurrent_reads_on_donor_blocking_then_committed.js @@ -14,13 +14,9 @@ * ] */ -(function() { -'use strict'; +import {findSplitOperation, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load("jstests/libs/parallelTester.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/serverless/shard_split_concurrent_reads_on_donor_util.js"); const kCollName = "testColl"; @@ -30,11 +26,11 @@ const kTenantId = ObjectId(); * To be used to resume a split that is paused after entering the blocking state. Waits for the * number of blocked reads to reach 'targetNumBlockedReads' and unpauses the split. */ -function resumeMigrationAfterBlockingRead(host, tenantId, targetNumBlockedReads) { +async function resumeMigrationAfterBlockingRead(host, tenantId, targetNumBlockedReads) { + const {ShardSplitTest} = await import("jstests/serverless/libs/shard_split_test.js"); load("jstests/libs/fail_point_util.js"); - load("jstests/serverless/libs/shard_split_test.js"); - const primary = new Mongo(host); + const primary = new Mongo(host); assert.soon(() => ShardSplitTest.getNumBlockedReads(primary, eval(tenantId)) == targetNumBlockedReads); @@ -118,4 +114,3 @@ for (const [testCaseName, testCase] of Object.entries(testCases)) { const dbName = `${kTenantId.str}_${testCaseName}`; testRejectBlockedReadsAfterMigrationCommitted(testCase, dbName, kCollName); } -})(); diff --git a/jstests/serverless/shard_split_concurrent_reads_on_donor_committed.js b/jstests/serverless/shard_split_concurrent_reads_on_donor_committed.js index ae7f9a1f3fe..901d11cb4bf 100644 --- a/jstests/serverless/shard_split_concurrent_reads_on_donor_committed.js +++ b/jstests/serverless/shard_split_concurrent_reads_on_donor_committed.js @@ -14,13 +14,9 @@ * ] */ -(function() { -'use strict'; +import {findSplitOperation, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load("jstests/libs/parallelTester.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/serverless/shard_split_concurrent_reads_on_donor_util.js"); const kCollName = "testColl"; @@ -123,4 +119,3 @@ secondaries.forEach(node => { }); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_concurrent_reconfig.js b/jstests/serverless/shard_split_concurrent_reconfig.js index babe54fbce5..d1a34212367 100644 --- a/jstests/serverless/shard_split_concurrent_reconfig.js +++ b/jstests/serverless/shard_split_concurrent_reconfig.js @@ -4,10 +4,7 @@ * @tags: [requires_fcv_62, serverless] */ -load("jstests/serverless/libs/shard_split_test.js"); - -(function() { -"use strict"; +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; const tenantIds = [ObjectId(), ObjectId()]; const test = new ShardSplitTest({quickGarbageCollection: true}); @@ -35,4 +32,3 @@ split.forget(); test.cleanupSuccesfulAborted(split.migrationId, tenantIds); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_concurrent_state_doc_removal_and_stepdown.js b/jstests/serverless/shard_split_concurrent_state_doc_removal_and_stepdown.js index dc7e52a944b..b14fecb51f6 100644 --- a/jstests/serverless/shard_split_concurrent_state_doc_removal_and_stepdown.js +++ b/jstests/serverless/shard_split_concurrent_state_doc_removal_and_stepdown.js @@ -12,13 +12,9 @@ * ] */ -(function() { -"use strict"; +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; -load("jstests/libs/parallelTester.js"); load("jstests/libs/fail_point_util.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); const test = new ShardSplitTest({ recipientTagName: "recipientTag", @@ -58,4 +54,3 @@ assert.commandFailedWithCode(forgetMigrationThread.returnData(), ErrorCodes.InterruptedDueToReplStateChange); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_concurrent_writes_on_donor_aborted.js b/jstests/serverless/shard_split_concurrent_writes_on_donor_aborted.js index e58e0ed8061..db4f269e3c3 100644 --- a/jstests/serverless/shard_split_concurrent_writes_on_donor_aborted.js +++ b/jstests/serverless/shard_split_concurrent_writes_on_donor_aborted.js @@ -10,15 +10,12 @@ * requires_fcv_62 * ] */ -(function() { -'use strict'; + +import {assertMigrationState, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load("jstests/libs/parallelTester.js"); -load("jstests/libs/uuid_util.js"); load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/tenant_migration_concurrent_writes_on_donor_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); TestData.skipCheckDBHashes = true; const tenantMigrationTest = new ShardSplitTest({ @@ -144,4 +141,3 @@ abortFp.off(); runTestsAfterMigration(); tenantMigrationTest.stop(); -})(); diff --git a/jstests/serverless/shard_split_concurrent_writes_on_donor_blocking.js b/jstests/serverless/shard_split_concurrent_writes_on_donor_blocking.js index 06e8d231d58..7f434139146 100644 --- a/jstests/serverless/shard_split_concurrent_writes_on_donor_blocking.js +++ b/jstests/serverless/shard_split_concurrent_writes_on_donor_blocking.js @@ -11,15 +11,12 @@ * requires_fcv_62 * ] */ -(function() { -'use strict'; + +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load("jstests/libs/parallelTester.js"); -load("jstests/libs/uuid_util.js"); load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/tenant_migration_concurrent_writes_on_donor_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); TestData.skipCheckDBHashes = true; const tenantMigrationTest = new ShardSplitTest({ @@ -186,4 +183,3 @@ ShardSplitTest.checkShardSplitAccessBlocker( donorPrimary, kTenantID, {numBlockedWrites: countBlockedWrites}); tenantMigrationTest.stop(); -})(); diff --git a/jstests/serverless/shard_split_concurrent_writes_on_donor_committed.js b/jstests/serverless/shard_split_concurrent_writes_on_donor_committed.js index 6a18e7d4b99..16dfc9394f1 100644 --- a/jstests/serverless/shard_split_concurrent_writes_on_donor_committed.js +++ b/jstests/serverless/shard_split_concurrent_writes_on_donor_committed.js @@ -10,15 +10,11 @@ * requires_fcv_62 * ] */ -(function() { -'use strict'; + +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load("jstests/libs/parallelTester.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/tenant_migration_concurrent_writes_on_donor_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); TestData.skipCheckDBHashes = true; const test = new ShardSplitTest({ @@ -137,4 +133,3 @@ ShardSplitTest.checkShardSplitAccessBlocker(donorPrimary, kTenantID, { }); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_donor_current_op.js b/jstests/serverless/shard_split_donor_current_op.js index ebac82aafca..1ae80c00288 100644 --- a/jstests/serverless/shard_split_donor_current_op.js +++ b/jstests/serverless/shard_split_donor_current_op.js @@ -14,12 +14,9 @@ * ] */ -(function() { -"use strict"; +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); const kTenantIds = [ObjectId()]; @@ -171,4 +168,3 @@ function checkStandardFieldsOK(ops, {migrationId, reachedDecision, tenantIds}) { test.stop(); })(); -})(); diff --git a/jstests/serverless/shard_split_drop_state_doc_collection_aborted.js b/jstests/serverless/shard_split_drop_state_doc_collection_aborted.js index 81f54d9d5bb..17b5710135e 100644 --- a/jstests/serverless/shard_split_drop_state_doc_collection_aborted.js +++ b/jstests/serverless/shard_split_drop_state_doc_collection_aborted.js @@ -12,12 +12,9 @@ * ] */ -(function() { -"use strict"; +import {findSplitOperation, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); TestData.skipCheckDBHashes = true; @@ -100,4 +97,3 @@ testDroppingStateDocCollections(test, fpName, { }); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_drop_state_doc_collection_blocking.js b/jstests/serverless/shard_split_drop_state_doc_collection_blocking.js index bf313671714..08979c21058 100644 --- a/jstests/serverless/shard_split_drop_state_doc_collection_blocking.js +++ b/jstests/serverless/shard_split_drop_state_doc_collection_blocking.js @@ -12,12 +12,9 @@ * ] */ -(function() { -"use strict"; +import {findSplitOperation, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); TestData.skipCheckDBHashes = true; @@ -104,4 +101,3 @@ if (fpName) { } test.stop(); -})(); diff --git a/jstests/serverless/shard_split_drop_state_doc_collection_committed.js b/jstests/serverless/shard_split_drop_state_doc_collection_committed.js index 56b6cbcf31d..5ec30b9816f 100644 --- a/jstests/serverless/shard_split_drop_state_doc_collection_committed.js +++ b/jstests/serverless/shard_split_drop_state_doc_collection_committed.js @@ -12,12 +12,9 @@ * ] */ -(function() { -"use strict"; +import {findSplitOperation, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); TestData.skipCheckDBHashes = true; @@ -77,4 +74,3 @@ testDroppingStateDocCollections( test, fpName, {dropDonorsCollection: true, retryWithDifferentMigrationId: true}); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_drop_state_doc_collection_decision_fullfilled.js b/jstests/serverless/shard_split_drop_state_doc_collection_decision_fullfilled.js index 6be3fc6a920..656a9996e57 100644 --- a/jstests/serverless/shard_split_drop_state_doc_collection_decision_fullfilled.js +++ b/jstests/serverless/shard_split_drop_state_doc_collection_decision_fullfilled.js @@ -13,12 +13,9 @@ * ] */ -(function() { -"use strict"; +import {findSplitOperation, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); TestData.skipCheckDBHashes = true; @@ -107,4 +104,3 @@ if (fpName) { } test.stop(); -})(); diff --git a/jstests/serverless/shard_split_ensure_split_outcome_visibility_for_blocked_writes.js b/jstests/serverless/shard_split_ensure_split_outcome_visibility_for_blocked_writes.js index f7d91efa254..315df33ad5e 100644 --- a/jstests/serverless/shard_split_ensure_split_outcome_visibility_for_blocked_writes.js +++ b/jstests/serverless/shard_split_ensure_split_outcome_visibility_for_blocked_writes.js @@ -14,12 +14,10 @@ * requires_fcv_62 * ] */ -(function() { -'use strict'; + +import {assertMigrationState, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); const kGarbageCollectionParams = { // Set the delay before a donor state doc is garbage collected to be short to speed up the test. @@ -137,4 +135,3 @@ function insertDocument(primaryHost, dbName, collName) { test.stop(); })(); -})(); diff --git a/jstests/serverless/shard_split_invalid_inputs.js b/jstests/serverless/shard_split_invalid_inputs.js index 0f6c5dd6ac1..11b25eeedf1 100644 --- a/jstests/serverless/shard_split_invalid_inputs.js +++ b/jstests/serverless/shard_split_invalid_inputs.js @@ -12,11 +12,7 @@ * ] */ -(function() { -"use strict"; - -load("jstests/serverless/libs/shard_split_test.js"); -load("jstests/replsets/libs/tenant_migration_util.js"); +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; const test = new ShardSplitTest({recipientSetName: "recipientSet", recipientTagName: "recipientTag"}); @@ -46,4 +42,3 @@ unsupportedtenantIds.forEach((invalidTenantId) => { }); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_on_clustered_collections.js b/jstests/serverless/shard_split_on_clustered_collections.js index 1126e3cf128..0fa6a7b6a16 100644 --- a/jstests/serverless/shard_split_on_clustered_collections.js +++ b/jstests/serverless/shard_split_on_clustered_collections.js @@ -16,13 +16,9 @@ * ] */ -(function() { -"use strict"; +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/clustered_collections/clustered_collection_util.js"); // ClusteredCollectionUtil -load("jstests/libs/parallelTester.js"); // Thread() -load("jstests/libs/uuid_util.js"); // extractUUIDFromObject() -load("jstests/serverless/libs/shard_split_test.js"); // ShardSplitTest const test = new ShardSplitTest({ recipientSetName: "recipientSet", @@ -100,4 +96,3 @@ operation.forget(); validateMigrationResults(recipientRst); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_performance_test.js b/jstests/serverless/shard_split_performance_test.js index c511e64cb6c..7185f32844a 100644 --- a/jstests/serverless/shard_split_performance_test.js +++ b/jstests/serverless/shard_split_performance_test.js @@ -4,7 +4,8 @@ * @tags: [requires_fcv_62, serverless] */ -load("jstests/serverless/libs/shard_split_test.js"); +import {assertMigrationState, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; + load("jstests/replsets/rslib.js"); function runOneMoveChunk() { diff --git a/jstests/serverless/shard_split_read_your_own_writes.js b/jstests/serverless/shard_split_read_your_own_writes.js index 42bd1edc699..3887e388aa1 100644 --- a/jstests/serverless/shard_split_read_your_own_writes.js +++ b/jstests/serverless/shard_split_read_your_own_writes.js @@ -14,11 +14,8 @@ * ] */ -(function() { -"use strict"; +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; -load("jstests/serverless/libs/shard_split_test.js"); -load("jstests/libs/uuid_util.js"); load("jstests/libs/fail_point_util.js"); // For configureFailPoint(). const test = @@ -124,4 +121,3 @@ test.donor.nodes.forEach( {configureFailPoint: "tenantMigrationDonorAllowsNonTimestampedReads", mode: "alwaysOn"}))); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_recipient_removes_access_blockers.js b/jstests/serverless/shard_split_recipient_removes_access_blockers.js index 23ce04dcfae..8ab280e83c8 100644 --- a/jstests/serverless/shard_split_recipient_removes_access_blockers.js +++ b/jstests/serverless/shard_split_recipient_removes_access_blockers.js @@ -4,11 +4,9 @@ * @tags: [requires_fcv_62, serverless] */ -load("jstests/libs/fail_point_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; -(function() { -"use strict"; +load("jstests/libs/fail_point_util.js"); // Skip db hash check because secondary is left with a different config. TestData.skipCheckDBHashes = true; @@ -47,4 +45,3 @@ assert.soon(() => test.recipientNodes.every(node => { })); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_recipient_removes_serverless_lock.js b/jstests/serverless/shard_split_recipient_removes_serverless_lock.js index 92b778296e2..d1829e0e3b7 100644 --- a/jstests/serverless/shard_split_recipient_removes_serverless_lock.js +++ b/jstests/serverless/shard_split_recipient_removes_serverless_lock.js @@ -5,14 +5,12 @@ * @tags: [requires_fcv_62, serverless] */ +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; + load("jstests/libs/fail_point_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); load("jstests/replsets/libs/tenant_migration_util.js"); const {ServerlessLockType, getServerlessOperationLock} = TenantMigrationUtil; -(function() { -"use strict"; - // Skip db hash check because secondary is left with a different config. TestData.skipCheckDBHashes = true; @@ -42,4 +40,3 @@ assert.soon(() => test.recipientNodes.every(node => getServerlessOperationLock(n ServerlessLockType.None)); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_rejects_multiple_ops.js b/jstests/serverless/shard_split_rejects_multiple_ops.js index 1a6f23c0fad..e4bf0f4fe2f 100644 --- a/jstests/serverless/shard_split_rejects_multiple_ops.js +++ b/jstests/serverless/shard_split_rejects_multiple_ops.js @@ -4,12 +4,9 @@ * @tags: [requires_fcv_62, serverless] */ -load("jstests/libs/fail_point_util.js"); // for "configureFailPoint" -load('jstests/libs/parallel_shell_helpers.js'); // for "startParallelShell" -load("jstests/serverless/libs/shard_split_test.js"); +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; -(function() { -"use strict"; +load("jstests/libs/fail_point_util.js"); // for "configureFailPoint" const tenantIds = [ObjectId(), ObjectId()]; @@ -73,4 +70,3 @@ function commitShardSplitConcurrently() { } commitShardSplitConcurrently(); -})(); diff --git a/jstests/serverless/shard_split_remove_split_config_after_decision.js b/jstests/serverless/shard_split_remove_split_config_after_decision.js index 2adb857cde7..337f5f4f091 100644 --- a/jstests/serverless/shard_split_remove_split_config_after_decision.js +++ b/jstests/serverless/shard_split_remove_split_config_after_decision.js @@ -4,8 +4,9 @@ * @tags: [requires_fcv_62, serverless] */ +import {assertMigrationState, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; + load("jstests/libs/fail_point_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); function assertSplitConfigExists(donorPrimary, recipientSetName) { jsTestLog("Asserting a split config has been applied"); diff --git a/jstests/serverless/shard_split_shutdown_while_blocking_reads.js b/jstests/serverless/shard_split_shutdown_while_blocking_reads.js index 06b1b2d57cc..08fc7f5452a 100644 --- a/jstests/serverless/shard_split_shutdown_while_blocking_reads.js +++ b/jstests/serverless/shard_split_shutdown_while_blocking_reads.js @@ -13,14 +13,10 @@ * ] */ -(function() { -"use strict"; +import {findSplitOperation, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/parallelTester.js"); load("jstests/libs/fail_point_util.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); -load("jstests/replsets/libs/tenant_migration_util.js"); const test = new ShardSplitTest({recipientTagName: "recipientTag", recipientSetName: "recipientSet"}); @@ -73,4 +69,3 @@ assert(res.code == ErrorCodes.InterruptedDueToReplStateChange || // Shut down all the other nodes. test.donor.nodes.filter(node => node.port != donorPrimary.port) .forEach(node => donorRst.stop(node)); -})(); diff --git a/jstests/serverless/shard_split_startup_recovery_aborted.js b/jstests/serverless/shard_split_startup_recovery_aborted.js index 8370aec71ad..ccf0a5fecd5 100644 --- a/jstests/serverless/shard_split_startup_recovery_aborted.js +++ b/jstests/serverless/shard_split_startup_recovery_aborted.js @@ -5,14 +5,14 @@ * @tags: [requires_fcv_62, serverless] */ -load("jstests/libs/fail_point_util.js"); // for "configureFailPoint" -load('jstests/libs/parallel_shell_helpers.js'); // for "startParallelShell" -load("jstests/noPassthrough/libs/server_parameter_helpers.js"); // for "setParameter" -load("jstests/serverless/libs/shard_split_test.js"); -load("jstests/replsets/libs/tenant_migration_test.js"); +import { + assertMigrationState, + findSplitOperation, + ShardSplitTest +} from "jstests/serverless/libs/shard_split_test.js"; -(function() { -"use strict"; +load("jstests/libs/fail_point_util.js"); // for "configureFailPoint" +load("jstests/replsets/libs/tenant_migration_test.js"); // Skip db hash check because secondary is left with a different config. TestData.skipCheckDBHashes = true; @@ -51,4 +51,3 @@ test.validateTenantAccessBlockers( operation.migrationId, tenantIds, TenantMigrationTest.DonorAccessState.kAborted); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_startup_recovery_blocking.js b/jstests/serverless/shard_split_startup_recovery_blocking.js index be00a4fe50b..972a24e6311 100644 --- a/jstests/serverless/shard_split_startup_recovery_blocking.js +++ b/jstests/serverless/shard_split_startup_recovery_blocking.js @@ -4,14 +4,14 @@ * @tags: [requires_fcv_62, serverless] */ -load("jstests/libs/fail_point_util.js"); // for "configureFailPoint" -load('jstests/libs/parallel_shell_helpers.js'); // for "startParallelShell" -load("jstests/noPassthrough/libs/server_parameter_helpers.js"); // for "setParameter" -load("jstests/serverless/libs/shard_split_test.js"); -load("jstests/replsets/libs/tenant_migration_test.js"); +import { + assertMigrationState, + findSplitOperation, + ShardSplitTest +} from "jstests/serverless/libs/shard_split_test.js"; -(function() { -"use strict"; +load("jstests/libs/fail_point_util.js"); // for "configureFailPoint" +load("jstests/replsets/libs/tenant_migration_test.js"); // Skip db hash check because secondary is left with a different config. TestData.skipCheckDBHashes = true; @@ -48,4 +48,3 @@ test.validateTenantAccessBlockers( operation.migrationId, tenantIds, TenantMigrationTest.DonorAccessState.kBlockWritesAndReads); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_startup_recovery_committed.js b/jstests/serverless/shard_split_startup_recovery_committed.js index c0403c3b7e1..1f93304e94a 100644 --- a/jstests/serverless/shard_split_startup_recovery_committed.js +++ b/jstests/serverless/shard_split_startup_recovery_committed.js @@ -4,14 +4,14 @@ * @tags: [requires_fcv_62, serverless] */ -load("jstests/libs/fail_point_util.js"); // for "configureFailPoint" -load('jstests/libs/parallel_shell_helpers.js'); // for "startParallelShell" -load("jstests/noPassthrough/libs/server_parameter_helpers.js"); // for "setParameter" -load("jstests/serverless/libs/shard_split_test.js"); -load("jstests/replsets/libs/tenant_migration_test.js"); +import { + assertMigrationState, + findSplitOperation, + ShardSplitTest +} from "jstests/serverless/libs/shard_split_test.js"; -(function() { -"use strict"; +load("jstests/libs/fail_point_util.js"); // for "configureFailPoint" +load("jstests/replsets/libs/tenant_migration_test.js"); // Skip db hash check because secondary is left with a different config. TestData.skipCheckDBHashes = true; @@ -51,4 +51,3 @@ test.validateTenantAccessBlockers( operation.migrationId, tenantIds, TenantMigrationTest.DonorAccessState.kReject); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_startup_recovery_initially_aborted.js b/jstests/serverless/shard_split_startup_recovery_initially_aborted.js index d190ebe6a43..b3ab18fcfe4 100644 --- a/jstests/serverless/shard_split_startup_recovery_initially_aborted.js +++ b/jstests/serverless/shard_split_startup_recovery_initially_aborted.js @@ -6,17 +6,17 @@ * @tags: [requires_fcv_62, serverless] */ -load("jstests/libs/fail_point_util.js"); // for "configureFailPoint" -load('jstests/libs/parallel_shell_helpers.js'); // for "startParallelShell" -load("jstests/noPassthrough/libs/server_parameter_helpers.js"); // for "setParameter" -load("jstests/serverless/libs/shard_split_test.js"); +import { + assertMigrationState, + findSplitOperation, + ShardSplitTest +} from "jstests/serverless/libs/shard_split_test.js"; + +load("jstests/libs/fail_point_util.js"); // for "configureFailPoint" load("jstests/replsets/libs/tenant_migration_test.js"); load("jstests/replsets/libs/tenant_migration_util.js"); const {ServerlessLockType, getServerlessOperationLock} = TenantMigrationUtil; -(function() { -"use strict"; - // Skip db hash check because secondary is left with a different config. TestData.skipCheckDBHashes = true; @@ -63,4 +63,3 @@ tenantIds.every(tenantId => { assert.eq(getServerlessOperationLock(donorPrimary), ServerlessLockType.None); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_tenant_access_blocking.js b/jstests/serverless/shard_split_tenant_access_blocking.js index 50c008b5eae..f9ec0a3eaae 100644 --- a/jstests/serverless/shard_split_tenant_access_blocking.js +++ b/jstests/serverless/shard_split_tenant_access_blocking.js @@ -4,13 +4,15 @@ * @tags: [requires_fcv_62, serverless] */ +import { + assertMigrationState, + findSplitOperation, + ShardSplitTest +} from "jstests/serverless/libs/shard_split_test.js"; + load("jstests/libs/fail_point_util.js"); load("jstests/libs/parallelTester.js"); load('jstests/libs/parallel_shell_helpers.js'); -load("jstests/serverless/libs/shard_split_test.js"); - -(function() { -"use strict"; jsTestLog("Starting runBlocking"); @@ -88,4 +90,3 @@ operation.forget(); test.waitForGarbageCollection(operation.migrationId, tenantIds); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_test_max_bson_limit.js b/jstests/serverless/shard_split_test_max_bson_limit.js index 45a8a23982b..341f51f9d53 100644 --- a/jstests/serverless/shard_split_test_max_bson_limit.js +++ b/jstests/serverless/shard_split_test_max_bson_limit.js @@ -11,13 +11,11 @@ * requires_fcv_62 * ] */ -(function() { -'use strict'; +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; load("jstests/libs/fail_point_util.js"); load("jstests/libs/parallelTester.js"); load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); const kCollName = "testColl"; const kTenantDefinedDbName = "0"; @@ -96,4 +94,3 @@ assert.lte(Object.bsonsize(bulkWriteRes), assert.commandWorked(primaryDB.hello()).maxBsonObjectSize); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_timeseries_collections.js b/jstests/serverless/shard_split_timeseries_collections.js index 611bffbfeaf..78214235e95 100644 --- a/jstests/serverless/shard_split_timeseries_collections.js +++ b/jstests/serverless/shard_split_timeseries_collections.js @@ -12,11 +12,7 @@ * ] */ -(function() { -"use strict"; - -load("jstests/libs/uuid_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; const test = new ShardSplitTest({ recipientSetName: "recipientSet", @@ -40,4 +36,3 @@ assert.commandWorked(operation.commit()); operation.forget(); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_unblock_reads_and_writes_on_completion.js b/jstests/serverless/shard_split_unblock_reads_and_writes_on_completion.js index e9f0fb65719..38d19bd2358 100644 --- a/jstests/serverless/shard_split_unblock_reads_and_writes_on_completion.js +++ b/jstests/serverless/shard_split_unblock_reads_and_writes_on_completion.js @@ -13,13 +13,7 @@ * ] */ -(function() { -"use strict"; - -load("jstests/libs/fail_point_util.js"); -load("jstests/libs/uuid_util.js"); -load("jstests/libs/write_concern_util.js"); -load("jstests/serverless/libs/shard_split_test.js"); +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; function startReadThread(node, dbName, collName, afterClusterTime) { let readThread = new Thread((host, dbName, collName, afterClusterTime) => { @@ -205,4 +199,3 @@ const kCollName = "testColl"; test.stop(); })(); -})(); diff --git a/jstests/serverless/shard_split_wait_for_block_timestamp.js b/jstests/serverless/shard_split_wait_for_block_timestamp.js index 4e8b7fc6f61..15cd8bc36a3 100644 --- a/jstests/serverless/shard_split_wait_for_block_timestamp.js +++ b/jstests/serverless/shard_split_wait_for_block_timestamp.js @@ -6,14 +6,15 @@ * @tags: [requires_fcv_62, serverless] */ +import { + assertMigrationState, + findSplitOperation, + ShardSplitTest +} from "jstests/serverless/libs/shard_split_test.js"; + load("jstests/libs/fail_point_util.js"); // for "configureFailPoint" load("jstests/libs/write_concern_util.js"); // for "stopServerReplication" load("jstests/noPassthrough/libs/server_parameter_helpers.js"); // for "setParameter" -load('jstests/libs/parallel_shell_helpers.js'); // for "startParallelShell" -load("jstests/serverless/libs/shard_split_test.js"); - -(function() { -"use strict"; // Skip db hash check because secondary is left with a different config. TestData.skipCheckDBHashes = true; @@ -63,4 +64,3 @@ secondOperation.forget(); test.waitForGarbageCollection(secondOperation.migrationId, tenantIds); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_write_during_aborted_split.js b/jstests/serverless/shard_split_write_during_aborted_split.js index 3d7ea1f1330..2bc4c644cb8 100644 --- a/jstests/serverless/shard_split_write_during_aborted_split.js +++ b/jstests/serverless/shard_split_write_during_aborted_split.js @@ -3,10 +3,7 @@ * @tags: [requires_fcv_62, serverless] */ -load("jstests/serverless/libs/shard_split_test.js"); - -(function() { -"use strict"; +import {ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; TestData.skipCheckDBHashes = true; const test = new ShardSplitTest({ @@ -66,4 +63,3 @@ assert.commandFailedWithCode(splitThread.returnData(), ErrorCodes.TenantMigratio writes.forEach(write => write.join()); test.stop(); -})(); diff --git a/jstests/serverless/shard_split_write_during_shard_split.js b/jstests/serverless/shard_split_write_during_shard_split.js index 59e6994e891..d1ab044a577 100644 --- a/jstests/serverless/shard_split_write_during_shard_split.js +++ b/jstests/serverless/shard_split_write_during_shard_split.js @@ -4,10 +4,7 @@ * @tags: [requires_fcv_62, serverless] */ -load("jstests/serverless/libs/shard_split_test.js"); - -(function() { -"use strict"; +import {doWriteOperations, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; const test = new ShardSplitTest(); test.addAndAwaitRecipientNodes(); @@ -53,4 +50,3 @@ writeResults.forEach(res => { TestData.skipCheckDBHashes = true; test.stop(); -})(); diff --git a/jstests/serverless/shard_split_write_during_split_stepdown.js b/jstests/serverless/shard_split_write_during_split_stepdown.js index 83b8398e9c0..443549d5472 100644 --- a/jstests/serverless/shard_split_write_during_split_stepdown.js +++ b/jstests/serverless/shard_split_write_during_split_stepdown.js @@ -6,10 +6,7 @@ * @tags: [requires_fcv_62, serverless] */ -load("jstests/serverless/libs/shard_split_test.js"); - -(function() { -"use strict"; +import {doWriteOperations, ShardSplitTest} from "jstests/serverless/libs/shard_split_test.js"; const test = new ShardSplitTest({ nodeOptions: { @@ -58,4 +55,3 @@ writeResults.forEach(res => { TestData.skipCheckDBHashes = true; test.stop(); -})(); diff --git a/src/mongo/scripting/mozjs/implscope.cpp b/src/mongo/scripting/mozjs/implscope.cpp index fa5d95540aa..73c541e6161 100644 --- a/src/mongo/scripting/mozjs/implscope.cpp +++ b/src/mongo/scripting/mozjs/implscope.cpp @@ -665,7 +665,7 @@ void MozJSImplScope::_MozJSCreateFunction(StringData raw, JS::MutableHandleValue bool MozJSImplScope::onSyncPromiseResolved(JSContext* cx, unsigned argc, JS::Value* vp) { JS::CallArgs args = JS::CallArgsFromVp(argc, vp); auto scope = getScope(cx); - scope->_promiseResult.emplace(args[0]); + scope->_promiseResult.emplace(cx, args[0]); args.rval().setUndefined(); return true; } @@ -934,6 +934,10 @@ bool MozJSImplScope::exec(StringData code, JSObject* modulePtr = nullptr; if (shouldTryExecAsModule(_context, name, success)) { + // If we should run this as a module, we need to clear the previous exception in order + // to catch stack traces for future exceptions. + JS_ClearPendingException(_context); + modulePtr = _moduleLoader->loadRootModuleFromSource(_context, name, code); success = modulePtr != nullptr; } @@ -963,6 +967,9 @@ bool MozJSImplScope::exec(StringData code, if (success) { JS::RootedObject evaluationPromise(_context, &out.toObject()); success = JS::ThrowOnModuleEvaluationFailure(_context, evaluationPromise); + if (success) { + success = awaitPromise(_context, evaluationPromise, &out); + } } } } diff --git a/src/mongo/scripting/mozjs/implscope.h b/src/mongo/scripting/mozjs/implscope.h index 1a517b48944..0e0ce3e32cb 100644 --- a/src/mongo/scripting/mozjs/implscope.h +++ b/src/mongo/scripting/mozjs/implscope.h @@ -457,7 +457,7 @@ private: std::unique_ptr<ModuleLoader> _moduleLoader; std::unique_ptr<EnvironmentPreparer> _environmentPreparer; - boost::optional<JS::HandleValue> _promiseResult; + boost::optional<JS::RootedValue> _promiseResult; WrapType<BinDataInfo> _binDataProto; WrapType<BSONInfo> _bsonProto; diff --git a/src/mongo/scripting/mozjs/module_loader.cpp b/src/mongo/scripting/mozjs/module_loader.cpp index 836a1a27892..9341e2c3ce5 100644 --- a/src/mongo/scripting/mozjs/module_loader.cpp +++ b/src/mongo/scripting/mozjs/module_loader.cpp @@ -217,18 +217,8 @@ JSString* ModuleLoader::resolveAndNormalize(JSContext* cx, } boost::system::error_code ec; - auto fullPath = [&]() { - if (!boost::filesystem::is_directory(refAbsPath)) { - return boost::filesystem::canonical(specifierPath, refAbsPath.parent_path(), ec) - .lexically_normal() - .string(); - } - - return boost::filesystem::canonical(specifierPath, refAbsPath, ec) - .lexically_normal() - .string(); - }(); - + auto fullPath = + boost::filesystem::canonical(specifierPath, _baseUrl, ec).lexically_normal().string(); if (ec) { if (ec.value() == boost::system::errc::no_such_file_or_directory) { JS_ReportErrorUTF8(cx, |