summaryrefslogtreecommitdiff
path: root/jstests/serverless/shard_split_enabled.js
blob: 46a310b857462f6fe9559e022439c9eda00f39a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/**
 *
 * Tests that the ShardSplit feature flag is enabled only in the proper FCV
 * @tags: [requires_fcv_52, featureFlagShardSplit]
 */

(function() {
"use strict";

load("jstests/replsets/libs/tenant_migration_util.js");
load("jstests/serverless/libs/basic_serverless_test.js");

class ShardSplitEnabledTest extends BasicServerlessTest {
    makeCommitShardSplitCmd(uuid) {
        return {
            commitShardSplit: 1,
            tenantIds: ["foo"],
            migrationId: uuid,
            recipientTagName: this.recipientTagName,
            recipientSetName: this.recipientSetName
        };
    }

    makeAbortShardSplitCmd(uuid) {
        return {abortShardSplit: 1, migrationId: uuid};
    }

    makeForgetShardSplitCmd(uuid) {
        return {forgetShardSplit: 1, migrationId: uuid};
    }
}

function makeShardSplitTest() {
    return function(downgradeFCV) {
        const test = new ShardSplitEnabledTest(
            {recipientTagName: "recipientNode", recipientSetName: "recipient"});
        test.addRecipientNodes();

        const donorPrimary = test.donor.getPrimary();
        const adminDB = donorPrimary.getDB("admin");

        // TODO(SERVER-64168): remove this when split is ready
        configureFailPoint(adminDB, "skipShardSplitWaitForSplitAcceptance");

        assert(TenantMigrationUtil.isShardSplitEnabled(adminDB));
        assert.eq(getFCVConstants().latest,
                  adminDB.system.version.findOne({_id: 'featureCompatibilityVersion'}).version);

        let commitUUID = UUID();
        let res = adminDB.runCommand(test.makeCommitShardSplitCmd(commitUUID));
        assert.neq(res.code,
                   6057900,
                   `commitShardSplitCmd shouldn't reject when featureFlagShardSplit is enabled`);

        res = adminDB.runCommand(test.makeForgetShardSplitCmd(commitUUID));
        assert.neq(res.code,
                   6057900,
                   `forgetShardSplit shouldn't reject when featureFlagShardSplit is enabled`);

        let abortUUID = UUID();
        res = adminDB.runCommand(test.makeAbortShardSplitCmd(abortUUID));
        assert.neq(res.code,
                   6057902,
                   `abortShardSplitCmd shouldn't reject when featureFlagShardSplit is enabled`);
        res = adminDB.runCommand(test.makeForgetShardSplitCmd(abortUUID));

        assert.commandWorked(adminDB.adminCommand({setFeatureCompatibilityVersion: downgradeFCV}));

        assert.commandFailedWithCode(
            adminDB.runCommand(test.makeCommitShardSplitCmd(UUID())),
            6057900,
            `commitShardSplitCmd should reject when featureFlagShardSplit is disabled`);
        assert.commandFailedWithCode(
            adminDB.runCommand(test.makeAbortShardSplitCmd(UUID())),
            6057902,
            `abortShardSplitCmd should reject when featureFlagShardSplit is disabled`);
        assert.commandFailedWithCode(
            adminDB.runCommand(test.makeForgetShardSplitCmd(UUID())),
            6236600,
            `forgetShardSplit should reject when featureFlagShardSplit is disabled`);

        // shut down replica set
        test.stop();
    };
}

runFeatureFlagMultiversionTest('featureFlagShardSplit', makeShardSplitTest());
})();