blob: c3465f78047f392c932c10cca0af726a8281918b (
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
58
59
60
|
// Perform concurrent updates with a background index build, testing that
// indexes are updated appropriately. See SERVER-23590 and SERVER-22970.
//
// Variation of index_multi.js
(function() {
"use strict";
Random.setRandomSeed();
var coll = db.getSiblingDB("indexbg_updates").coll;
coll.drop();
var numDocs = 10000;
var bulk = coll.initializeUnorderedBulkOp();
print("Populate the collection with random data");
for (var i = 0; i < numDocs; i++) {
var doc = {"_id": i, "field0": Random.rand()};
bulk.insert(doc);
}
assert.writeOK(bulk.execute());
// Perform a bulk update on a single document, targeting the updates on the
// field being actively indexed in the background
bulk = coll.initializeUnorderedBulkOp();
for (i = 0; i < numDocs; i++) {
var criteria = {"_id": 1000};
var mod = {};
if (Random.rand() < .8) {
mod["$set"] = {};
mod["$set"]["field0"] = Random.rand();
} else {
mod["$unset"] = {};
mod["$unset"]["field0"] = true;
}
bulk.find(criteria).update(mod);
}
// Build an index in the background on field0
var backgroundIndexBuildShell = startParallelShell(
function() {
var coll = db.getSiblingDB("indexbg_updates").coll;
assert.commandWorked(coll.createIndex({"field0": 1}, {"background": true}));
},
null, // port -- use default
false // noconnect
);
print("Do some sets and unsets");
assert.writeOK(bulk.execute());
print("Start background index build");
backgroundIndexBuildShell();
var explain = coll.find().hint({"field0": 1}).explain();
assert("queryPlanner" in explain, tojson(explain));
}());
|