summaryrefslogtreecommitdiff
path: root/jstests/slowNightly/replica_set_shard_version.js
blob: 6221f4cdc58673a1452f27953fb559c8d74ec008 (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
// Tests whether a Replica Set in a mongos cluster can cause versioning problems

jsTestLog( "Starting sharded cluster..." )

var st = new ShardingTest( { shards : 1, mongos : 2, other : { rs : true } } )

var mongosA = st.s0
var mongosB = st.s1
var rs = st._rs[0].test
var shard = st.shard0

var sadmin = shard.getDB( "admin" )

jsTestLog( "Stepping down replica set member..." )

try{
    sadmin.runCommand({ replSetStepDown : 3000, force : true })
}
catch( e ){
    // stepdown errors out our conn to the shard
    printjson( e )
}

jsTestLog( "Reconnecting..." )

sadmin = new Mongo( st.shard0.host ).getDB("admin")

assert.soon( 
    function(){
        var res = sadmin.runCommand( "replSetGetStatus" );
        for ( var i=0; i<res.members.length; i++ ) {
            if ( res.members[i].state == 1 )
                return true;
        }
        return false;
    }
);

jsTestLog( "New primary elected..." )

coll = mongosA.getCollection( jsTestName() + ".coll" );

start = new Date();

ReplSetTest.awaitRSClientHosts( coll.getMongo(), rs.getPrimary(), { ismaster : true }, rs )

try{
    coll.findOne()
}
catch( e ){
    printjson( e )
    assert( false )
}

end = new Date();

print( "time to work for primary: " + ( ( end.getTime() - start.getTime() ) / 1000 ) + " seconds" );

jsTestLog( "Found data from collection..." )

// now check secondary

try{
    sadmin.runCommand({ replSetStepDown : 3000, force : true })
}
catch( e ){
    // expected, since all conns closed
    printjson( e )
}

sadmin = new Mongo( st.shard0.host ).getDB("admin")

jsTestLog( "Stepped down secondary..." )

other = new Mongo( mongosA.host );
other.setSlaveOk( true );
other = other.getCollection( jsTestName() + ".coll" );

print( "eliot: " + tojson( other.findOne() ) );



st.stop()