diff options
Diffstat (limited to 'jstests/serverless/shard_split_recipient_removes_serverless_lock.js')
-rw-r--r-- | jstests/serverless/shard_split_recipient_removes_serverless_lock.js | 49 |
1 files changed, 49 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..adb55c8753e --- /dev/null +++ b/jstests/serverless/shard_split_recipient_removes_serverless_lock.js @@ -0,0 +1,49 @@ +/* + * 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) == + ServerlessLockType.None)); + +test.stop(); +})(); |