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, autosplit 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, enableAutoSplit: true}});
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();
|