diff options
author | Matt Broadstone <mbroadst@mongodb.com> | 2022-09-14 23:05:50 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-09-15 00:19:47 +0000 |
commit | 1a13031f7cdfb6cffdcff212edef0790fe084df2 (patch) | |
tree | 8d6ba207b94133d0775d398c3384380dfcc8343a /jstests/serverless/shard_split_recipient_removes_serverless_lock.js | |
parent | d1da149077ea312efc80f8836bc79f2b1b10c1ad (diff) | |
download | mongo-1a13031f7cdfb6cffdcff212edef0790fe084df2.tar.gz |
SERVER-65315 Enforce mutual exclusion between serverless operations
Diffstat (limited to 'jstests/serverless/shard_split_recipient_removes_serverless_lock.js')
-rw-r--r-- | jstests/serverless/shard_split_recipient_removes_serverless_lock.js | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/jstests/serverless/shard_split_recipient_removes_serverless_lock.js b/jstests/serverless/shard_split_recipient_removes_serverless_lock.js new file mode 100644 index 00000000000..c4f143677c8 --- /dev/null +++ b/jstests/serverless/shard_split_recipient_removes_serverless_lock.js @@ -0,0 +1,48 @@ +/* + * Test the serverless operation lock is released from recipients when the state document is + * removed. + * + * @tags: [requires_fcv_62, featureFlagShardSplit, serverless] + */ + +load("jstests/libs/fail_point_util.js"); +load("jstests/serverless/libs/basic_serverless_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; + +const test = new BasicServerlessTest({ + recipientTagName: "recipientNode", + recipientSetName: "recipient", + quickGarbageCollection: true +}); +test.addRecipientNodes(); + +const donorPrimary = test.donor.getPrimary(); +const tenantIds = ["tenant1", "tenant2"]; +const operation = test.createSplitOperation(tenantIds); + +const donorAfterBlockingFailpoint = + configureFailPoint(donorPrimary.getDB("admin"), "pauseShardSplitAfterBlocking"); + +const commitOp = operation.commitAsync(); +donorAfterBlockingFailpoint.wait(); + +jsTestLog("Asserting recipient nodes have installed the serverless lock"); +assert.soon(() => test.recipientNodes.every(node => getServerlessOperationLock(node) === + ServerlessLockType.ShardSplitDonor)); +donorAfterBlockingFailpoint.off(); + +commitOp.join(); +assert.commandWorked(commitOp.returnData()); + +jsTestLog("Asserting the serverless exclusion lock has been released"); +assert.soon(() => test.recipientNodes.every(node => getServerlessOperationLock(node) == null)); + +test.stop(); +})(); |