diff options
Diffstat (limited to 'jstests/noPassthroughWithMongod/opcounters_legacy.js')
-rw-r--r-- | jstests/noPassthroughWithMongod/opcounters_legacy.js | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/jstests/noPassthroughWithMongod/opcounters_legacy.js b/jstests/noPassthroughWithMongod/opcounters_legacy.js new file mode 100644 index 00000000000..7db520a109f --- /dev/null +++ b/jstests/noPassthroughWithMongod/opcounters_legacy.js @@ -0,0 +1,173 @@ +// Test that opcounters get incremented properly. + +// Remember the global 'db' var +var lastDB = db; +var mongo = new Mongo(db.getMongo().host); +mongo.writeMode = function() { return "legacy"; } +db = mongo.getDB(db.toString()); + +var t = db.opcounters; +var isMongos = ("isdbgrid" == db.runCommand("ismaster").msg); +var opCounters; + +// +// 1. Insert. +// +// - mongod, single insert: +// counted as 1 op if successful, else 0 +// - mongod, bulk insert of N with continueOnError=true: +// counted as N ops, regardless of errors +// - mongod, bulk insert of N with continueOnError=false: +// counted as K ops, where K is number of docs successfully inserted +// +// - mongos +// count ops attempted like insert commands +// + +t.drop(); + +// Single insert, no error. +opCounters = db.serverStatus().opcounters; +t.insert({_id:0}); +assert(!db.getLastError()); +assert.eq(opCounters.insert + 1, db.serverStatus().opcounters.insert); + +// Bulk insert, no error. +opCounters = db.serverStatus().opcounters; +t.insert([{_id:1},{_id:2}]) +assert(!db.getLastError()); +assert.eq(opCounters.insert + 2, db.serverStatus().opcounters.insert); + +// Single insert, with error. +opCounters = db.serverStatus().opcounters; +t.insert({_id:0}) +print( db.getLastError() ) +assert(db.getLastError()); +assert.eq(opCounters.insert + (isMongos ? 1 : 0), db.serverStatus().opcounters.insert); + +// Bulk insert, with error, continueOnError=false. +opCounters = db.serverStatus().opcounters; +t.insert([{_id:3},{_id:3},{_id:4}]) +assert(db.getLastError()); +assert.eq(opCounters.insert + (isMongos ? 2 : 1), db.serverStatus().opcounters.insert); + +// Bulk insert, with error, continueOnError=true. +var continueOnErrorFlag = 1; +opCounters = db.serverStatus().opcounters; +t.insert([{_id:5},{_id:5},{_id:6}], continueOnErrorFlag) +assert(db.getLastError()); +assert.eq(opCounters.insert + 3, db.serverStatus().opcounters.insert); + +// +// 2. Update. +// +// - counted as 1 op, regardless of errors +// + +t.drop(); +t.insert({_id:0}); + +// Update, no error. +opCounters = db.serverStatus().opcounters; +t.update({_id:0}, {$set:{a:1}}); +assert(!db.getLastError()); +assert.eq(opCounters.update + 1, db.serverStatus().opcounters.update); + +// Update, with error. +opCounters = db.serverStatus().opcounters; +t.update({_id:0}, {$set:{_id:1}}); +assert(db.getLastError()); +assert.eq(opCounters.update + 1, db.serverStatus().opcounters.update); + +// +// 3. Delete. +// +// - counted as 1 op, regardless of errors +// + +t.drop(); +t.insert([{_id:0},{_id:1}]); + +// Delete, no error. +opCounters = db.serverStatus().opcounters; +t.remove({_id:0}); +assert(!db.getLastError()); +assert.eq(opCounters.delete + 1, db.serverStatus().opcounters.delete); + +// Delete, with error. +opCounters = db.serverStatus().opcounters; +t.remove({_id:{$invalidOp:1}}); +assert(db.getLastError()); +assert.eq(opCounters.delete + 1, db.serverStatus().opcounters.delete); + +// +// 4. Query. +// +// - mongod: counted as 1 op, regardless of errors +// - mongos: counted as 1 op if successful, else 0 +// + +t.drop(); +t.insert({_id:0}); + +// Query, no error. +opCounters = db.serverStatus().opcounters; +t.findOne(); +assert.eq(opCounters.query + 1, db.serverStatus().opcounters.query); + +// Query, with error. +opCounters = db.serverStatus().opcounters; +assert.throws(function() { t.findOne({_id:{$invalidOp:1}}) }); +assert.eq(opCounters.query + (isMongos ? 0 : 1), db.serverStatus().opcounters.query); + +// +// 5. Getmore. +// +// - counted as 1 op per getmore issued, regardless of errors +// + +t.drop(); +t.insert([{_id:0},{_id:1},{_id:2}]); + +// Getmore, no error. +opCounters = db.serverStatus().opcounters; +t.find().batchSize(2).toArray(); // 3 documents, batchSize=2 => 1 query + 1 getmore +assert.eq(opCounters.query + 1, db.serverStatus().opcounters.query); +assert.eq(opCounters.getmore + 1, db.serverStatus().opcounters.getmore); + +// Getmore, with error (TODO implement when SERVER-5813 is resolved). + +// +// 6. Command. +// +// - unrecognized commands not counted +// - recognized commands counted as 1 op, regardless of errors +// - some (recognized) commands can suppress command counting (i.e. aren't counted as commands) +// + +t.drop(); +t.insert({_id:0}) + +// Command, recognized, no error. +opCounters = db.serverStatus().opcounters; +assert.eq(opCounters.command + 1, db.serverStatus().opcounters.command); // "serverStatus" counted + +// Command, recognized, with error. +opCounters = db.serverStatus().opcounters; +res = t.runCommand("count", {query:{$invalidOp:1}}); +assert.eq(0, res.ok); +assert.eq(opCounters.command + 2, + db.serverStatus().opcounters.command); // "serverStatus", "count" counted + +// Command, unrecognized. +opCounters = db.serverStatus().opcounters; +res = t.runCommand("command that doesn't exist"); +assert.eq(0, res.ok); +//assert.eq(opCounters.command + 1, db.serverStatus().opcounters.command); // "serverStatus" counted +// TODO Replace below with above when SERVER-9038 is resolved (mongos counts unrecognized commands) +assert.eq(opCounters.command + (isMongos ? 2 : 1), db.serverStatus().opcounters.command); + +// Command, recognized, counting suppressed (TODO implement when SERVER-9038 is resolved). + +// Restore 'db' var +db = lastDB; |