summaryrefslogtreecommitdiff
path: root/jstests/sharding/cursor_valid_after_shard_stepdown.js
blob: b717d73cac83114551ad178237ece4d2baa312c6 (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

// Checking UUID consistency involves talking to the shard primary, but by the end of this test, the
// shard does not have a primary.
TestData.skipCheckingUUIDsConsistentAcrossCluster = true;

(function() {
    'use strict';

    var st = new ShardingTest({shards: 1, rs: {nodes: 2}});

    assert.commandWorked(st.s0.adminCommand({enablesharding: 'TestDB'}));
    st.ensurePrimaryShard('TestDB', st.shard0.shardName);
    assert.commandWorked(st.s0.adminCommand({shardcollection: 'TestDB.TestColl', key: {x: 1}}));

    var db = st.s0.getDB('TestDB');
    var coll = db.TestColl;

    // Insert documents for the test
    assert.writeOK(coll.insert({x: 1, value: 'Test value 1'}));
    assert.writeOK(coll.insert({x: 2, value: 'Test value 2'}));

    // Establish a cursor on the primary (by not using slaveOk read)
    var findCursor = assert.commandWorked(db.runCommand({find: 'TestColl', batchSize: 1})).cursor;

    var shardVersionBeforeStepdown =
        assert.commandWorked(st.rs0.getPrimary().adminCommand({getShardVersion: 'TestDB.TestColl'}))
            .global;
    assert.neq(Timestamp(0, 0), shardVersionBeforeStepdown);

    // Stepdown the primary of the shard and ensure that that cursor can still be read
    assert.commandWorked(st.rs0.getPrimary().adminCommand({replSetStepDown: 60, force: 1}));

    var getMoreCursor =
        assert.commandWorked(db.runCommand({getMore: findCursor.id, collection: 'TestColl'}))
            .cursor;
    assert.eq(0, getMoreCursor.id);
    assert.eq(2, getMoreCursor.nextBatch[0].x);

    // After stepdown, the shard version will be reset
    var shardVersionAfterStepdown =
        assert.commandWorked(st.rs0.getPrimary().adminCommand({getShardVersion: 'TestDB.TestColl'}))
            .global;
    assert.eq("UNKNOWN", shardVersionAfterStepdown);

    st.stop();
})();