summaryrefslogtreecommitdiff
path: root/jstests/core/count_plan_summary.js
blob: 2bf96e5e4370e8c97c586f5b68c847d91e845942 (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
// Test that the plan summary string appears in db.currentOp() for
// count operations. SERVER-14064.

var t = db.jstests_count_plan_summary;
t.drop();

for (var i = 0; i < 1000; i++) {
    t.insert({x: 1});
}

// Mock a long-running count operation by sleeping for each of
// the documents in the collection.
s = startParallelShell(
    "db.jstests_count_plan_summary.find({x: 1, $where: 'sleep(100)'}).count()"
);

// Find the count op in db.currentOp() and check for the plan summary.
assert.soon(function() {
    var current = db.currentOp({ns: t.getFullName(), "query.count": t.getName()});

    assert("inprog" in current);
    if (current.inprog.length === 0) {
        print("Did not find count op. db.currentOp() output:");
        printjson(current);
        return false;
    }

    // There are no indices, so the plan summary should be a collscan.
    var countOp = current.inprog[0];
    if (!("planSummary" in countOp)) {
        print("count op does not yet contain planSummary:");
        printjson(countOp);
        return false;
    }

    // There are no indices, so the planSummary should be "COLLSCAN".
    print("Found count op with planSummary:");
    printjson(countOp);
    assert.eq("COLLSCAN", countOp.planSummary, "wrong planSummary string");

    // Kill the op so that the test won't run for a long time.
    db.killOp(countOp.opid);

    return true;
});

s();