summaryrefslogtreecommitdiff
path: root/jstests/noPassthroughWithMongod/opcounters_legacy.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/noPassthroughWithMongod/opcounters_legacy.js')
-rw-r--r--jstests/noPassthroughWithMongod/opcounters_legacy.js173
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;