blob: e10ce31fe22ef723bc757cfb9d8ae0286e2efc8a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
// SERVER-2351 Test killop with repair command.
// `repairDatabase` on WiredTiger does not respond to `killop`.
// @tags: [requires_mmapv1]
(function() {
'use strict';
var baseName = "jstests_disk_repair5";
var dbpath = MongoRunner.dataPath + baseName + "/";
resetDbpath(dbpath);
var m = MongoRunner.runMongod({
dbpath: dbpath,
restart: true,
cleanData: false
}); // So that the repair dir won't get removed
var dbTest = m.getDB(baseName);
// Insert a lot of data so repair runs a long time
var bulk = dbTest[baseName].initializeUnorderedBulkOp();
var big = new Array(5000).toString();
for (var i = 0; i < 20000; ++i) {
bulk.insert({i: i, b: big});
}
assert.writeOK(bulk.execute());
function killRepair() {
while (1) {
var p = db.currentOp().inprog;
for (var i in p) {
var o = p[i];
printjson(o);
// Find the active 'repairDatabase' op and kill it.
if (o.active && o.query && o.query.repairDatabase) {
db.killOp(o.opid);
return;
}
}
}
}
var s = startParallelShell(killRepair.toString() + "; killRepair();", m.port);
sleep(100); // make sure shell is actually running, lame
// Repair should fail due to killOp.
assert.commandFailed(dbTest.runCommand({repairDatabase: 1}));
s();
assert.eq(20000, dbTest[baseName].find().itcount());
assert(dbTest[baseName].validate().valid);
MongoRunner.stopMongod(m);
})();
|