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

// 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}});

// This test expects the shard version after step down to be UNKNOWN. Disable checking for index
// consistency to ensure that the config server doesn't trigger a StaleShardVersion exception on
// shard0 and cause it to refresh its sharding metadata.
st._configServers.forEach(
    config => config.adminCommand({setParameter: 1, enableShardedIndexConsistencyCheck: false}));

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();
})();