summaryrefslogtreecommitdiff
path: root/jstests/replsets/shard_split_enabled.js
blob: e7a3ad03b577d264acae306449647b70c7407681 (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
/**
 *
 * Tests that the ShardSplit feature flag is enabled only in the proper FCV
 * @tags: [requires_fcv_51, featureFlagShardSplit]
 */

(function() {
"use strict";

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

const kDummyConnStr = "mongodb://localhost/?replicaSet=foo";
function makeShardSplitTest() {
    return function(downgradeFCV) {
        function commitShardSplitCmd() {
            return {
                commitShardSplit: 1,
                tenantIds: ["foo"],
                migrationId: UUID(),
                recipientConnectionString: kDummyConnStr
            };
        }
        function abortShardSplitCmd() {
            return {abortShardSplit: 1, migrationId: UUID()};
        }

        // start up a replica set
        // server-side setup
        const rst = new ReplSetTest({nodes: 1});
        rst.startSet();
        rst.initiate();
        const primary = rst.getPrimary();
        const adminDB = primary.getDB("admin");

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

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

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

        assert.commandFailedWithCode(
            adminDB.runCommand(commitShardSplitCmd()),
            6057900,
            `commitShardSplitCmd should reject when featureFlagShardSplit is disabled`);
        assert.commandFailedWithCode(
            adminDB.runCommand(abortShardSplitCmd()),
            6057902,
            `abortShardSplitCmd should reject when featureFlagShardSplit is disabled`);

        // shut down replica set
        rst.stopSet();
    };
}

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