summaryrefslogtreecommitdiff
path: root/jstests/libs/trace_missing_docs.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/libs/trace_missing_docs.js')
-rw-r--r--jstests/libs/trace_missing_docs.js112
1 files changed, 58 insertions, 54 deletions
diff --git a/jstests/libs/trace_missing_docs.js b/jstests/libs/trace_missing_docs.js
index c70798fe99b..3bc9ef75333 100644
--- a/jstests/libs/trace_missing_docs.js
+++ b/jstests/libs/trace_missing_docs.js
@@ -3,86 +3,90 @@
// On error inserting documents, traces back and shows where the document was dropped
//
-function traceMissingDoc( coll, doc, mongos ) {
+function traceMissingDoc(coll, doc, mongos) {
+ if (mongos)
+ coll = mongos.getCollection(coll + "");
+ else
+ mongos = coll.getMongo();
- if (mongos) coll = mongos.getCollection(coll + "");
- else mongos = coll.getMongo();
-
- var config = mongos.getDB( "config" );
+ var config = mongos.getDB("config");
var shards = config.shards.find().toArray();
- for ( var i = 0; i < shards.length; i++ ) {
- shards[i].conn = new Mongo( shards[i].host );
+ for (var i = 0; i < shards.length; i++) {
+ shards[i].conn = new Mongo(shards[i].host);
}
-
- var shardKeyPatt = config.collections.findOne({ _id : coll + "" }).key;
-
+
+ var shardKeyPatt = config.collections.findOne({_id: coll + ""}).key;
+
// Project out the shard key
var shardKey = {};
- for ( var k in shardKeyPatt ) {
- if ( doc[k] == undefined ) {
- jsTest.log( "Shard key " + tojson( shardKey ) +
- " not found in doc " + tojson( doc ) +
- ", falling back to _id search..." );
- shardKeyPatt = { _id : 1 };
- shardKey = { _id : doc['_id'] };
+ for (var k in shardKeyPatt) {
+ if (doc[k] == undefined) {
+ jsTest.log("Shard key " + tojson(shardKey) + " not found in doc " + tojson(doc) +
+ ", falling back to _id search...");
+ shardKeyPatt = {
+ _id: 1
+ };
+ shardKey = {
+ _id: doc['_id']
+ };
break;
}
shardKey[k] = doc[k];
}
-
- if ( doc['_id'] == undefined ) {
- jsTest.log( "Id not found in doc " + tojson( doc ) + " cannot trace oplog entries." );
+
+ if (doc['_id'] == undefined) {
+ jsTest.log("Id not found in doc " + tojson(doc) + " cannot trace oplog entries.");
return;
}
-
- jsTest.log( "Using shard key : " + tojson( shardKey ) );
-
+
+ jsTest.log("Using shard key : " + tojson(shardKey));
+
var allOps = [];
- for ( var i = 0; i < shards.length; i++ ) {
-
- var oplog = shards[i].conn.getCollection( "local.oplog.rs" );
- if ( !oplog.findOne() ) {
- oplog = shards[i].conn.getCollection( "local.oplog.$main" );
+ for (var i = 0; i < shards.length; i++) {
+ var oplog = shards[i].conn.getCollection("local.oplog.rs");
+ if (!oplog.findOne()) {
+ oplog = shards[i].conn.getCollection("local.oplog.$main");
}
-
- if ( !oplog.findOne() ) {
- jsTest.log( "No oplog was found on shard " + shards[i]._id );
+
+ if (!oplog.findOne()) {
+ jsTest.log("No oplog was found on shard " + shards[i]._id);
continue;
}
-
- var addKeyQuery = function( query, prefix ) {
- for ( var k in shardKey ) {
+
+ var addKeyQuery = function(query, prefix) {
+ for (var k in shardKey) {
query[prefix + '.' + k] = shardKey[k];
}
return query;
};
-
- var addToOps = function( cursor ) {
- cursor.forEach( function( doc ) {
+
+ var addToOps = function(cursor) {
+ cursor.forEach(function(doc) {
doc.shard = shards[i]._id;
- doc.realTime = new Date( doc.ts.getTime() * 1000 );
- allOps.push( doc );
+ doc.realTime = new Date(doc.ts.getTime() * 1000);
+ allOps.push(doc);
});
};
// Find ops
- addToOps( oplog.find( addKeyQuery( { op : 'i' }, 'o' ) ) );
- var updateQuery = { $or : [ addKeyQuery( { op : 'u' }, 'o2' ),
- { op : 'u', 'o2._id' : doc['_id'] } ] };
- addToOps( oplog.find( updateQuery ) );
- addToOps( oplog.find({ op : 'd', 'o._id' : doc['_id'] }) );
+ addToOps(oplog.find(addKeyQuery({op: 'i'}, 'o')));
+ var updateQuery = {
+ $or: [addKeyQuery({op: 'u'}, 'o2'), {op: 'u', 'o2._id': doc['_id']}]
+ };
+ addToOps(oplog.find(updateQuery));
+ addToOps(oplog.find({op: 'd', 'o._id': doc['_id']}));
}
-
- var compareOps = function( opA, opB ) {
- return bsonWoCompare( opA.ts, opB.ts );
+
+ var compareOps = function(opA, opB) {
+ return bsonWoCompare(opA.ts, opB.ts);
};
-
- allOps.sort( compareOps );
-
- print( "Ops found for doc " + tojson( doc ) + " on each shard:\n" );
- for ( var i = 0; i < allOps.length; i++ ) {
- printjson( allOps[i] );
+
+ allOps.sort(compareOps);
+
+ print("Ops found for doc " + tojson(doc) + " on each shard:\n");
+ for (var i = 0; i < allOps.length; i++) {
+ printjson(allOps[i]);
}
-
+
return allOps;
} \ No newline at end of file