summaryrefslogtreecommitdiff
path: root/jstests/sharding/conf_server_write_concern.js
blob: 500061d4ca1009e1dff535b35a415f4009488988 (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
/**
 * Test write concern with w parameter when writing directly to the config servers works as expected
 */
function writeToConfigTest(){
    jsTestLog("Testing data writes to config server with write concern");
    var st = new ShardingTest({ shards: 2 });
    var confDB = st.s.getDB( 'config' );

    assert.writeOK(confDB.settings.update({ _id: 'balancer' },
                                          { $set: { stopped: true }},
                                          { writeConcern: { w: 'majority' }}));

    // w:1 should still work - it gets automatically upconverted to w:majority
    assert.writeOK(confDB.settings.update({ _id: 'balancer' },
                                          { $set: { stopped: true }},
                                          { writeConcern: { w: 1 }}));

    // Write concerns other than w:1 and w:majority should fail.
    assert.writeError(confDB.settings.update({ _id: 'balancer' },
                                             { $set: { stopped: true }},
                                             { writeConcern: { w: 2 }}));

    st.stop();
}

/**
 * Test write concern with w parameter will not cause an error when writes to mongos
 * would trigger writes to config servers (in this test, split chunks is used).
 */
function configTest(){
    jsTestLog("Testing metadata writes to config server with write concern");
    var st = new ShardingTest({ shards: 1, rs: true, other: { chunkSize: 1 }});
     
    var mongos = st.s;
    var testDB = mongos.getDB( 'test' );
    var coll = testDB.user;
     
    testDB.adminCommand({ enableSharding: testDB.getName() });
    testDB.adminCommand({ shardCollection: coll.getFullName(), key: { x: 1 }});
     
    var chunkCount = function() {
        return mongos.getDB( 'config' ).chunks.find().count();
    };
     
    var initChunks = chunkCount();
    var currChunks = initChunks;
    var gleObj = null;
    var x = 0;
    var largeStr = new Array(1024*128).toString();

    assert.soon(function() {
        var bulk = coll.initializeUnorderedBulkOp();
        for (var i = 0; i < 100; i++) {
            bulk.insert({x: x++, largeStr: largeStr});
        }
        assert.writeOK(bulk.execute({w: 'majority', wtimeout: 60 * 1000}));
        currChunks = chunkCount();
        return currChunks > initChunks;
    }, function() { return "currChunks: " + currChunks + ", initChunks: " + initChunks; });

    st.stop();
}

writeToConfigTest();
configTest();