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