summaryrefslogtreecommitdiff
path: root/jstests/sharding/configsvr_set_allow_migrations.js
blob: 06c1631359659cc542245fc46bd1acc7e8abce5d (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

(function() {
'use strict';

load("jstests/libs/retryable_writes_util.js");

function runConfigsvrSetAllowMigrationsWithRetries(st, ns, lsid, txnNumber, allowMigrations) {
    var res;
    assert.soon(() => {
        res = st.configRS.getPrimary().adminCommand({
            _configsvrSetAllowMigrations: ns,
            allowMigrations: allowMigrations,
            collectionUUID: st.s.getCollection('config.collections').findOne({_id: ns}).uuid,
            lsid: lsid,
            txnNumber: txnNumber,
            writeConcern: {w: "majority"}
        });

        if (RetryableWritesUtil.isRetryableCode(res.code) ||
            RetryableWritesUtil.errmsgContainsRetryableCodeName(res.errmsg) ||
            (res.writeConcernError &&
             RetryableWritesUtil.isRetryableCode(res.writeConcernError.code))) {
            return false;  // Retry
        }

        return true;
    });

    return res;
}

const st = new ShardingTest({shards: 1});

const dbName = "test";
const collName = "foo";
const ns = dbName + "." + collName;

st.s.adminCommand({shardCollection: ns, key: {x: 1}});

let lsid = assert.commandWorked(st.s.getDB("admin").runCommand({startSession: 1})).id;

assert.eq(
    false,
    st.s.getCollection('config.collections').findOne({_id: ns}).hasOwnProperty('allowMigrations'));

assert.commandWorked(runConfigsvrSetAllowMigrationsWithRetries(st, ns, lsid, NumberLong(1), false));

let collectionMetadata = st.s.getCollection('config.collections').findOne({_id: ns});
assert.eq(true, collectionMetadata.hasOwnProperty('allowMigrations'));
assert.eq(false, collectionMetadata.allowMigrations);

assert.commandFailedWithCode(
    runConfigsvrSetAllowMigrationsWithRetries(st, ns, lsid, NumberLong(0), true),
    ErrorCodes.TransactionTooOld);

collectionMetadata = st.s.getCollection('config.collections').findOne({_id: ns});
assert.eq(true, collectionMetadata.hasOwnProperty('allowMigrations'));
assert.eq(false, collectionMetadata.allowMigrations);

st.stop();
})();