51 lines
1.6 KiB
JavaScript
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();
|