File: group7.js

package info (click to toggle)
mongodb 1%3A2.4.10-5
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 82,464 kB
  • sloc: cpp: 740,225; ansic: 152,098; sh: 13,820; python: 11,864; makefile: 1,012; perl: 922; pascal: 617; java: 452; lisp: 222; asm: 174
file content (43 lines) | stat: -rw-r--r-- 1,066 bytes parent folder | download | duplicates (4)
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
// Test yielding group command SERVER-1395

t = db.jstests_group7;
t.drop();

function checkForYield( docs, updates ) {
    t.drop();
    a = 0;
    for( var i = 0; i < docs; ++i ) {
	t.save( {a:a} );
    }
    db.getLastError();

    // Iteratively update all a values atomically.
    p = startParallelShell( 'for( a = 0; a < ' + updates + '; ++a ) { db.jstests_group7.update( {$atomic:true}, {$set:{a:a}}, false, true ); db.getLastError(); }' );

    for( var i = 0; i < updates; ++i ) {
        ret = t.group({key:{a:1},reduce:function(){},initial:{}});
        // Check if group sees more than one a value, indicating that it yielded.
        if ( ret.length > 1 ) {
            p();
            return true;
        }
        printjson( ret );
    }

    p();
    return false;
}

var yielded = false;
var docs = 1500;
var updates = 50;
for( var j = 1; j <= 6; ++j ) {
    if ( checkForYield( docs, updates ) ) {
        yielded = true;
	break;
    }
     // Increase docs and updates to encourage yielding.
    docs *= 2;
    updates *= 2;
}
assert( yielded );