// test for SERVER-5040 - if documents move forward during an initial sync. var rt = new ReplSetTest( { name : "replset7tests" , nodes: 1 } ); var nodes = rt.startSet(); rt.initiate(); var master = rt.getPrimary(); var md = master.getDB( 'd' ); var mdc = md[ 'c' ]; // prep the data var doccount = 5000; var bulk = mdc.initializeUnorderedBulkOp(); for( i = 0; i < doccount; ++i ) { bulk.insert( { _id:i, x:i } ); } assert.writeOK(bulk.execute()); assert.commandWorked(mdc.ensureIndex( { x : 1 }, { unique: true } )); // add a secondary var slave = rt.add(); rt.reInitiate(); print ("initiation complete!"); var sc = slave.getDB( 'd' )[ 'c' ]; slave.setSlaveOk(); // Wait for slave to start cloning. //assert.soon( function() { c = sc.find( { _id:1, x:1 } ); print( c ); return c > 0; } ); // Move all documents to the end by growing it bulk = mdc.initializeUnorderedBulkOp(); var bigStr = "ayayayayayayayayayayayayayayayayayayayayayayayayayayayayayayayayay" + "ayayayayayayayayayayayay"; for (i = 0; i < doccount; ++i) { bulk.find({ _id: i, x: i }).remove(); bulk.insert({ _id: doccount + i, x: i, bigstring: bigStr }); } assert.writeOK(bulk.execute()); // Wait for replication to catch up. rt.awaitSecondaryNodes(); // Do we have an index? assert.eq(1, slave.getDB( 'd' )['c'].getIndexes().filter(function (doc) { return (doc.v === 1 && JSON.stringify(doc.key) === JSON.stringify({x: 1}) && doc.ns === 'd.c' && doc.name === 'x_1'); }).length);