0
0
mirror of https://github.com/mongodb/mongo.git synced 2024-12-01 09:32:32 +01:00

SERVER-2737 commitIfNeeded() in cappedTruncateAfter()

This commit is contained in:
Aaron 2011-03-22 21:06:54 -07:00
parent fbef3e1b63
commit 14ef6d6bc3
2 changed files with 51 additions and 0 deletions

View File

@ -319,6 +319,7 @@ namespace mongo {
// 'end' has been found and removed, so break.
break;
}
getDur().commitIfNeeded();
// 'curr' will point to the newest document in the collection.
DiskLoc curr = theCapExtent()->lastRecord;
assert( !curr.isNull() );

View File

@ -0,0 +1,50 @@
// Test a large rollback SERVER-2737
var replTest = new ReplSetTest({ name: 'unicomplex', nodes: 3, oplogSize: 2000 });
var nodes = replTest.nodeList();
var conns = replTest.startSet();
var r = replTest.initiate({ "_id": "unicomplex",
"members": [
{ "_id": 0, "host": nodes[0] },
{ "_id": 1, "host": nodes[1] },
{ "_id": 2, "host": nodes[2], arbiterOnly: true}]
});
// Make sure we have a master
var master = replTest.getMaster();
b_conn = conns[1];
b_conn.setSlaveOk();
B = b_conn.getDB("admin");
// Make sure we have an arbiter
assert.soon(function () {
res = conns[2].getDB("admin").runCommand({ replSetGetStatus: 1 });
return res.myState == 7;
}, "Arbiter failed to initialize.");
// Wait for initial replication
replTest.awaitReplication();
// Insert into master
var big = { b:new Array( 1000 ).toString() };
for( var i = 0; i < 1000000; ++i ) {
if ( i % 10000 == 0 ) {
print( i );
}
master.getDB( 'db' ).c.insert( big );
}
// Stop master
replTest.stop( 0 );
// Wait for slave to take over
assert.soon(function () { return B.isMaster().ismaster; });
master = replTest.getMaster();
// Save to new master, forcing rollback of old master
master.getDB( 'db' ).c.save( big );
// Restart old master
replTest.restart( 0 );
replTest.awaitReplication();