summaryrefslogtreecommitdiff
path: root/jstests/core/cursora.js
blob: fc6b1bf619202906f4545f68a6052a94eb3f41ba (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
// @tags: [requires_getmore, requires_non_retryable_writes, requires_fastcount]

t = db.cursora;

function run(n, atomic) {
    if (!isNumber(n)) {
        print("n:");
        printjson(n);
        assert(isNumber(n), "cursora.js isNumber");
    }
    t.drop();

    var bulk = t.initializeUnorderedBulkOp();
    for (i = 0; i < n; i++)
        bulk.insert({_id: i});
    assert.writeOK(bulk.execute());

    print("cursora.js startParallelShell n:" + n + " atomic:" + atomic);
    join = startParallelShell("sleep(50);" + "db.cursora.remove({" +
                              (atomic ? "$atomic:true" : "") + "});");

    var start = null;
    var ex = null;
    var num = null;
    var end = null;
    try {
        start = new Date();
        num = t.find(function() {
                   num = 2;
                   for (var x = 0; x < 1000; x++)
                       num += 2;
                   return num > 0;
               })
                  .sort({_id: -1})
                  .itcount();
        end = new Date();
    } catch (e) {
        print("cursora.js FAIL " + e);
        join();
        throw e;
    }

    join();

    // print( "cursora.js num: " + num + " time:" + ( end.getTime() - start.getTime() ) )
    assert.eq(0, t.count(), "after remove: " + tojson(ex));
    // assert.lt( 0 , ex.nYields , "not enough yields : " + tojson( ex ) ); // TODO make this more
    // reliable so cen re-enable assert
    if (n == num)
        print("cursora.js warning: shouldn't have counted all  n: " + n + " num: " + num);
}

run(1500);
run(5000);
run(1500, true);
run(5000, true);
print("cursora.js SUCCESS");