Files
mongo/jstests/disk/preallocate_directoryperdb.js
2016-03-09 12:18:14 -05:00

51 lines
1.6 KiB
JavaScript

/**
* Test for SERVER-2417 - should not preallocate a database file while we are
* dropping its directory in directoryperdb mode.
*/
var baseDir = "jstests_disk_preallocate_directoryperdb";
var baseName = "preallocate_directoryperdb";
var baseName2 = "preallocate_directoryperdb2";
var baseName3 = "preallocate_directoryperdb3";
dbpath = MongoRunner.dataPath + baseDir + "/";
function checkDb2DirAbsent() {
files = listFiles(dbpath);
// printjson( files );
for (var f in files) {
var name = files[f].name;
assert.eq(-1, name.indexOf(dbpath + baseName2), "baseName2 dir still present");
}
}
var m = MongoRunner.runMongod(
{smallfiles: "", directoryperdb: "", dbpath: dbpath, bind_ip: "127.0.0.1"});
db = m.getDB(baseName);
db2 = m.getDB(baseName2);
var bulk = db[baseName].initializeUnorderedBulkOp();
var bulk2 = db2[baseName2].initializeUnorderedBulkOp();
var big = new Array(5000).toString();
for (var i = 0; i < 3000; ++i) {
bulk.insert({b: big});
bulk2.insert({b: big});
}
assert.writeOK(bulk.execute());
assert.writeOK(bulk2.execute());
// Due to our write pattern, we expect db2's .3 file to be queued up in the file
// allocator behind db's .3 file at the time db2 is dropped. This will
// (incorrectly) cause db2's dir to be recreated until SERVER-2417 is fixed.
db2.dropDatabase();
checkDb2DirAbsent();
db.dropDatabase();
// Try writing a new database, to ensure file allocator is still working.
db3 = m.getDB(baseName3);
c3 = db[baseName3];
assert.writeOK(c3.insert({}));
assert.eq(1, c3.count());
checkDb2DirAbsent();