diff options
author | Vesselina Ratcheva <vesselina.ratcheva@10gen.com> | 2018-01-18 14:51:55 -0500 |
---|---|---|
committer | Vesselina Ratcheva <vesselina.ratcheva@10gen.com> | 2018-01-18 14:51:55 -0500 |
commit | 06b9e9ebf9778293b8425093ada0aa1eb83b594e (patch) | |
tree | ffbeaea0dbeff8e6fd2305e0269d7541a4794741 /jstests/replsets/batch_write_command_wc.js | |
parent | b1ef36a8024055f1402a6566f3751b61500ccbc4 (diff) | |
download | mongo-06b9e9ebf9778293b8425093ada0aa1eb83b594e.tar.gz |
Revert "SERVER-30347 Fail startup when running wiredTiger with --nojournal as part of a replica set"
This reverts commit 35c44dbd37c0167cc07420c8ea286ad6edfac7ff.
Diffstat (limited to 'jstests/replsets/batch_write_command_wc.js')
-rw-r--r-- | jstests/replsets/batch_write_command_wc.js | 286 |
1 files changed, 149 insertions, 137 deletions
diff --git a/jstests/replsets/batch_write_command_wc.js b/jstests/replsets/batch_write_command_wc.js index ce6adcd1cb6..fc9a1f5db61 100644 --- a/jstests/replsets/batch_write_command_wc.js +++ b/jstests/replsets/batch_write_command_wc.js @@ -4,153 +4,165 @@ // so cannot be run on the ephemeralForTest storage engine, as it accepts all journaled writes. // @tags: [SERVER-21420] -(function() { +var request; +var result; - // Skip this test if running with the "wiredTiger" storage engine, since it requires - // using 'nojournal' in a replica set, which is not supported when using WT. - if (!jsTest.options().storageEngine || jsTest.options().storageEngine == "wiredTiger") { - // WT is currently the default engine so it is used when 'storageEngine' is not set. - jsTest.log("Skipping test because it is not applicable for the wiredTiger storage engine"); - return; - } +// NOTE: ALL TESTS BELOW SHOULD BE SELF-CONTAINED, FOR EASIER DEBUGGING - var request; - var result; +jsTest.log("Starting no journal/repl set tests..."); - // NOTE: ALL TESTS BELOW SHOULD BE SELF-CONTAINED, FOR EASIER DEBUGGING +// Start a single-node replica set with no journal +// Allows testing immediate write concern failures and wc application failures +var rst = new ReplSetTest({nodes: 2}); +rst.startSet({nojournal: ""}); +rst.initiate(); +var mongod = rst.getPrimary(); +var coll = mongod.getCollection("test.batch_write_command_wc"); - jsTest.log("Starting no journal/repl set tests..."); - - // Start a single-node replica set with no journal - // Allows testing immediate write concern failures and wc application failures - var rst = new ReplSetTest({nodes: 2}); - rst.startSet({nojournal: ""}); - rst.initiate(); - var mongod = rst.getPrimary(); - var coll = mongod.getCollection("test.batch_write_command_wc"); - - // - // Basic insert, default WC - coll.remove({}); - printjson(request = {insert: coll.getName(), documents: [{a: 1}]}); - printjson(result = coll.runCommand(request)); - assert(result.ok); - assert.eq(1, result.n); - assert.eq(1, coll.find().itcount()); - - // - // Basic insert, majority WC - coll.remove({}); - printjson( - request = {insert: coll.getName(), documents: [{a: 1}], writeConcern: {w: 'majority'}}); - printjson(result = coll.runCommand(request)); - assert(result.ok); - assert.eq(1, result.n); - assert.eq(1, coll.find().itcount()); - - // - // Basic insert, w:2 WC - coll.remove({}); - printjson(request = {insert: coll.getName(), documents: [{a: 1}], writeConcern: {w: 2}}); - printjson(result = coll.runCommand(request)); - assert(result.ok); - assert.eq(1, result.n); - assert.eq(1, coll.find().itcount()); +// +// Basic insert, default WC +coll.remove({}); +printjson(request = { + insert: coll.getName(), + documents: [{a: 1}] +}); +printjson(result = coll.runCommand(request)); +assert(result.ok); +assert.eq(1, result.n); +assert.eq(1, coll.find().itcount()); - // - // Basic insert, immediate nojournal error - coll.remove({}); - printjson(request = {insert: coll.getName(), documents: [{a: 1}], writeConcern: {j: true}}); - printjson(result = coll.runCommand(request)); - assert(!result.ok); - assert.eq(0, coll.find().itcount()); +// +// Basic insert, majority WC +coll.remove({}); +printjson(request = { + insert: coll.getName(), + documents: [{a: 1}], + writeConcern: {w: 'majority'} +}); +printjson(result = coll.runCommand(request)); +assert(result.ok); +assert.eq(1, result.n); +assert.eq(1, coll.find().itcount()); - // - // Basic insert, timeout wc error - coll.remove({}); - printjson( - request = {insert: coll.getName(), documents: [{a: 1}], writeConcern: {w: 3, wtimeout: 1}}); - printjson(result = coll.runCommand(request)); - assert(result.ok); - assert.eq(1, result.n); - assert(result.writeConcernError); - assert.eq(100, result.writeConcernError.code); - assert.eq(1, coll.find().itcount()); +// +// Basic insert, w:2 WC +coll.remove({}); +printjson(request = { + insert: coll.getName(), + documents: [{a: 1}], + writeConcern: {w: 2} +}); +printjson(result = coll.runCommand(request)); +assert(result.ok); +assert.eq(1, result.n); +assert.eq(1, coll.find().itcount()); - // - // Basic insert, wmode wc error - coll.remove({}); - printjson( - request = {insert: coll.getName(), documents: [{a: 1}], writeConcern: {w: 'invalid'}}); - printjson(result = coll.runCommand(request)); - assert(result.ok); - assert.eq(1, result.n); - assert(result.writeConcernError); - assert.eq(1, coll.find().itcount()); +// +// Basic insert, immediate nojournal error +coll.remove({}); +printjson(request = { + insert: coll.getName(), + documents: [{a: 1}], + writeConcern: {j: true} +}); +printjson(result = coll.runCommand(request)); +assert(!result.ok); +assert.eq(0, coll.find().itcount()); - // - // Two ordered inserts, write error and wc error both reported - coll.remove({}); - printjson(request = { - insert: coll.getName(), - documents: [{a: 1}, {$invalid: 'doc'}], - writeConcern: {w: 'invalid'} - }); - printjson(result = coll.runCommand(request)); - assert(result.ok); - assert.eq(1, result.n); - assert.eq(result.writeErrors.length, 1); - assert.eq(result.writeErrors[0].index, 1); - assert(result.writeConcernError); - assert.eq(1, coll.find().itcount()); +// +// Basic insert, timeout wc error +coll.remove({}); +printjson(request = { + insert: coll.getName(), + documents: [{a: 1}], + writeConcern: {w: 3, wtimeout: 1} +}); +printjson(result = coll.runCommand(request)); +assert(result.ok); +assert.eq(1, result.n); +assert(result.writeConcernError); +assert.eq(100, result.writeConcernError.code); +assert.eq(1, coll.find().itcount()); - // - // Two unordered inserts, write error and wc error reported - coll.remove({}); - printjson(request = { - insert: coll.getName(), - documents: [{a: 1}, {$invalid: 'doc'}], - writeConcern: {w: 'invalid'}, - ordered: false - }); - printjson(result = coll.runCommand(request)); - assert(result.ok); - assert.eq(1, result.n); - assert.eq(result.writeErrors.length, 1); - assert.eq(result.writeErrors[0].index, 1); - assert(result.writeConcernError); - assert.eq(1, coll.find().itcount()); +// +// Basic insert, wmode wc error +coll.remove({}); +printjson(request = { + insert: coll.getName(), + documents: [{a: 1}], + writeConcern: {w: 'invalid'} +}); +printjson(result = coll.runCommand(request)); +assert(result.ok); +assert.eq(1, result.n); +assert(result.writeConcernError); +assert.eq(1, coll.find().itcount()); - // - // Write error with empty writeConcern object. - coll.remove({}); - request = - {insert: coll.getName(), documents: [{_id: 1}, {_id: 1}], writeConcern: {}, ordered: false}; - result = coll.runCommand(request); - assert(result.ok); - assert.eq(1, result.n); - assert.eq(result.writeErrors.length, 1); - assert.eq(result.writeErrors[0].index, 1); - assert.eq(null, result.writeConcernError); - assert.eq(1, coll.find().itcount()); +// +// Two ordered inserts, write error and wc error both reported +coll.remove({}); +printjson(request = { + insert: coll.getName(), + documents: [{a: 1}, {$invalid: 'doc'}], + writeConcern: {w: 'invalid'} +}); +printjson(result = coll.runCommand(request)); +assert(result.ok); +assert.eq(1, result.n); +assert.eq(result.writeErrors.length, 1); +assert.eq(result.writeErrors[0].index, 1); +assert(result.writeConcernError); +assert.eq(1, coll.find().itcount()); - // - // Write error with unspecified w. - coll.remove({}); - request = { - insert: coll.getName(), - documents: [{_id: 1}, {_id: 1}], - writeConcern: {wtimeout: 1}, - ordered: false - }; - result = assert.commandWorkedIgnoringWriteErrors(coll.runCommand(request)); - assert.eq(1, result.n); - assert.eq(result.writeErrors.length, 1); - assert.eq(result.writeErrors[0].index, 1); - assert.eq(null, result.writeConcernError); - assert.eq(1, coll.find().itcount()); +// +// Two unordered inserts, write error and wc error reported +coll.remove({}); +printjson(request = { + insert: coll.getName(), + documents: [{a: 1}, {$invalid: 'doc'}], + writeConcern: {w: 'invalid'}, + ordered: false +}); +printjson(result = coll.runCommand(request)); +assert(result.ok); +assert.eq(1, result.n); +assert.eq(result.writeErrors.length, 1); +assert.eq(result.writeErrors[0].index, 1); +assert(result.writeConcernError); +assert.eq(1, coll.find().itcount()); - jsTest.log("DONE no journal/repl tests"); - rst.stopSet(); +// +// Write error with empty writeConcern object. +coll.remove({}); +request = { + insert: coll.getName(), + documents: [{_id: 1}, {_id: 1}], + writeConcern: {}, + ordered: false +}; +result = coll.runCommand(request); +assert(result.ok); +assert.eq(1, result.n); +assert.eq(result.writeErrors.length, 1); +assert.eq(result.writeErrors[0].index, 1); +assert.eq(null, result.writeConcernError); +assert.eq(1, coll.find().itcount()); -})(); +// +// Write error with unspecified w. +coll.remove({}); +request = { + insert: coll.getName(), + documents: [{_id: 1}, {_id: 1}], + writeConcern: {wtimeout: 1}, + ordered: false +}; +result = assert.commandWorkedIgnoringWriteErrors(coll.runCommand(request)); +assert.eq(1, result.n); +assert.eq(result.writeErrors.length, 1); +assert.eq(result.writeErrors[0].index, 1); +assert.eq(null, result.writeConcernError); +assert.eq(1, coll.find().itcount()); + +jsTest.log("DONE no journal/repl tests"); +rst.stopSet(); |