diff options
Diffstat (limited to 'jstests/replsets/apply_ops_wc.js')
-rw-r--r-- | jstests/replsets/apply_ops_wc.js | 217 |
1 files changed, 107 insertions, 110 deletions
diff --git a/jstests/replsets/apply_ops_wc.js b/jstests/replsets/apply_ops_wc.js index 5e7747fe343..8b3b6d4e92f 100644 --- a/jstests/replsets/apply_ops_wc.js +++ b/jstests/replsets/apply_ops_wc.js @@ -10,130 +10,127 @@ */ (function() { - "use strict"; - var nodeCount = 3; - var replTest = new ReplSetTest({name: 'applyOpsWCSet', nodes: nodeCount}); - replTest.startSet(); - var cfg = replTest.getReplSetConfig(); - cfg.settings = {}; - cfg.settings.chainingAllowed = false; - replTest.initiate(cfg); - - var testDB = "applyOps-wc-test"; - - // Get test collection. - var master = replTest.getPrimary(); - var db = master.getDB(testDB); - var coll = db.apply_ops_wc; - - function dropTestCollection() { - coll.drop(); - assert.eq(0, coll.find().itcount(), "test collection not empty"); - } +"use strict"; +var nodeCount = 3; +var replTest = new ReplSetTest({name: 'applyOpsWCSet', nodes: nodeCount}); +replTest.startSet(); +var cfg = replTest.getReplSetConfig(); +cfg.settings = {}; +cfg.settings.chainingAllowed = false; +replTest.initiate(cfg); + +var testDB = "applyOps-wc-test"; + +// Get test collection. +var master = replTest.getPrimary(); +var db = master.getDB(testDB); +var coll = db.apply_ops_wc; + +function dropTestCollection() { + coll.drop(); + assert.eq(0, coll.find().itcount(), "test collection not empty"); +} + +dropTestCollection(); + +// Set up the applyOps command. +var applyOpsReq = { + applyOps: [ + {op: "i", ns: coll.getFullName(), o: {_id: 2, x: "b"}}, + {op: "i", ns: coll.getFullName(), o: {_id: 3, x: "c"}}, + {op: "i", ns: coll.getFullName(), o: {_id: 4, x: "d"}}, + ] +}; + +function assertApplyOpsCommandWorked(res) { + assert.eq(3, res.applied); + assert.commandWorkedIgnoringWriteConcernErrors(res); + assert.eq([true, true, true], res.results); +} + +function assertWriteConcernError(res) { + assert(res.writeConcernError); + assert(res.writeConcernError.code); + assert(res.writeConcernError.errmsg); +} + +var invalidWriteConcerns = [{w: 'invalid'}, {w: nodeCount + 1}]; + +function testInvalidWriteConcern(wc) { + jsTest.log("Testing invalid write concern " + tojson(wc)); + + applyOpsReq.writeConcern = wc; + var res = coll.runCommand(applyOpsReq); + assertApplyOpsCommandWorked(res); + assertWriteConcernError(res); +} + +// Verify that invalid write concerns yield an error. +coll.insert({_id: 1, x: "a"}); +invalidWriteConcerns.forEach(testInvalidWriteConcern); + +var secondaries = replTest.getSecondaries(); + +var majorityWriteConcerns = [ + {w: 2, wtimeout: 30000}, + {w: 'majority', wtimeout: 30000}, +]; + +function testMajorityWriteConcerns(wc) { + jsTest.log("Testing " + tojson(wc)); + + // Reset secondaries to ensure they can replicate. + secondaries[0].getDB('admin').runCommand({configureFailPoint: 'rsSyncApplyStop', mode: 'off'}); + secondaries[1].getDB('admin').runCommand({configureFailPoint: 'rsSyncApplyStop', mode: 'off'}); + + // Set the writeConcern of the applyOps command. + applyOpsReq.writeConcern = wc; dropTestCollection(); - // Set up the applyOps command. - var applyOpsReq = { - applyOps: [ - {op: "i", ns: coll.getFullName(), o: {_id: 2, x: "b"}}, - {op: "i", ns: coll.getFullName(), o: {_id: 3, x: "c"}}, - {op: "i", ns: coll.getFullName(), o: {_id: 4, x: "d"}}, - ] - }; - - function assertApplyOpsCommandWorked(res) { - assert.eq(3, res.applied); - assert.commandWorkedIgnoringWriteConcernErrors(res); - assert.eq([true, true, true], res.results); - } - - function assertWriteConcernError(res) { - assert(res.writeConcernError); - assert(res.writeConcernError.code); - assert(res.writeConcernError.errmsg); - } - - var invalidWriteConcerns = [{w: 'invalid'}, {w: nodeCount + 1}]; - - function testInvalidWriteConcern(wc) { - jsTest.log("Testing invalid write concern " + tojson(wc)); - - applyOpsReq.writeConcern = wc; - var res = coll.runCommand(applyOpsReq); - assertApplyOpsCommandWorked(res); - assertWriteConcernError(res); - } - - // Verify that invalid write concerns yield an error. + // applyOps with a full replica set should succeed. coll.insert({_id: 1, x: "a"}); - invalidWriteConcerns.forEach(testInvalidWriteConcern); - - var secondaries = replTest.getSecondaries(); - - var majorityWriteConcerns = [ - {w: 2, wtimeout: 30000}, - {w: 'majority', wtimeout: 30000}, - ]; - - function testMajorityWriteConcerns(wc) { - jsTest.log("Testing " + tojson(wc)); - - // Reset secondaries to ensure they can replicate. - secondaries[0].getDB('admin').runCommand( - {configureFailPoint: 'rsSyncApplyStop', mode: 'off'}); - secondaries[1].getDB('admin').runCommand( - {configureFailPoint: 'rsSyncApplyStop', mode: 'off'}); - - // Set the writeConcern of the applyOps command. - applyOpsReq.writeConcern = wc; + var res = db.runCommand(applyOpsReq); - dropTestCollection(); + assertApplyOpsCommandWorked(res); + assert(!res.writeConcernError, + 'applyOps on a full replicaset had writeConcern error ' + tojson(res.writeConcernError)); - // applyOps with a full replica set should succeed. - coll.insert({_id: 1, x: "a"}); - var res = db.runCommand(applyOpsReq); - - assertApplyOpsCommandWorked(res); - assert(!res.writeConcernError, - 'applyOps on a full replicaset had writeConcern error ' + - tojson(res.writeConcernError)); - - dropTestCollection(); + dropTestCollection(); - // Stop replication at one secondary. - secondaries[0].getDB('admin').runCommand( - {configureFailPoint: 'rsSyncApplyStop', mode: 'alwaysOn'}); + // Stop replication at one secondary. + secondaries[0].getDB('admin').runCommand( + {configureFailPoint: 'rsSyncApplyStop', mode: 'alwaysOn'}); - // applyOps should succeed with only 1 node not replicating. - coll.insert({_id: 1, x: "a"}); - res = db.runCommand(applyOpsReq); + // applyOps should succeed with only 1 node not replicating. + coll.insert({_id: 1, x: "a"}); + res = db.runCommand(applyOpsReq); - assertApplyOpsCommandWorked(res); - assert(!res.writeConcernError, - 'applyOps on a replicaset with 2 working nodes had writeConcern error ' + - tojson(res.writeConcernError)); + assertApplyOpsCommandWorked(res); + assert(!res.writeConcernError, + 'applyOps on a replicaset with 2 working nodes had writeConcern error ' + + tojson(res.writeConcernError)); - dropTestCollection(); + dropTestCollection(); - // Stop replication at a second secondary. - secondaries[1].getDB('admin').runCommand( - {configureFailPoint: 'rsSyncApplyStop', mode: 'alwaysOn'}); + // Stop replication at a second secondary. + secondaries[1].getDB('admin').runCommand( + {configureFailPoint: 'rsSyncApplyStop', mode: 'alwaysOn'}); - // applyOps should fail after two nodes have stopped replicating. - coll.insert({_id: 1, x: "a"}); - applyOpsReq.writeConcern.wtimeout = 5000; - res = db.runCommand(applyOpsReq); + // applyOps should fail after two nodes have stopped replicating. + coll.insert({_id: 1, x: "a"}); + applyOpsReq.writeConcern.wtimeout = 5000; + res = db.runCommand(applyOpsReq); - assertApplyOpsCommandWorked(res); - assertWriteConcernError(res); - } + assertApplyOpsCommandWorked(res); + assertWriteConcernError(res); +} - majorityWriteConcerns.forEach(testMajorityWriteConcerns); +majorityWriteConcerns.forEach(testMajorityWriteConcerns); - // Allow clean shutdown - secondaries[0].getDB('admin').runCommand({configureFailPoint: 'rsSyncApplyStop', mode: 'off'}); - secondaries[1].getDB('admin').runCommand({configureFailPoint: 'rsSyncApplyStop', mode: 'off'}); +// Allow clean shutdown +secondaries[0].getDB('admin').runCommand({configureFailPoint: 'rsSyncApplyStop', mode: 'off'}); +secondaries[1].getDB('admin').runCommand({configureFailPoint: 'rsSyncApplyStop', mode: 'off'}); - replTest.stopSet(); +replTest.stopSet(); })(); |