2015-05-26 14:44:27 -04:00
|
|
|
function test() {
|
|
|
|
|
"use strict";
|
|
|
|
|
var t = db.update_serializability1;
|
|
|
|
|
t.drop();
|
2014-11-04 15:44:03 -05:00
|
|
|
|
2015-05-26 14:44:27 -04:00
|
|
|
var N = 100000;
|
2014-11-04 15:44:03 -05:00
|
|
|
|
2015-05-26 14:44:27 -04:00
|
|
|
var bulk = t.initializeUnorderedBulkOp()
|
|
|
|
|
for ( var i = 0; i < N; i++ ) {
|
|
|
|
|
bulk.insert( { _id : i, a : i, b: N-i, x : 1, y : 1 } );
|
|
|
|
|
}
|
|
|
|
|
bulk.execute();
|
2014-11-04 15:44:03 -05:00
|
|
|
|
2015-05-26 14:44:27 -04:00
|
|
|
t.ensureIndex( { a : 1 } );
|
|
|
|
|
t.ensureIndex( { b : 1 } );
|
2014-11-04 15:44:03 -05:00
|
|
|
|
2015-05-26 14:44:27 -04:00
|
|
|
var s1 = startParallelShell( "db.update_serializability1.update( { a : { $gte : 0 } }, { $set : { x : 2 } }, false, true );" );
|
|
|
|
|
var s2 = startParallelShell( "db.update_serializability1.update( { b : { $lte : " + N + " } }, { $set : { y : 2 } }, false, true );" );
|
2014-11-04 15:44:03 -05:00
|
|
|
|
2015-05-26 14:44:27 -04:00
|
|
|
s1();
|
|
|
|
|
s2();
|
2014-11-04 15:44:03 -05:00
|
|
|
|
2015-05-26 14:44:27 -04:00
|
|
|
// both operations should happen on every document
|
|
|
|
|
assert.eq( N, t.find( { x : 2, y : 2 } ).count() );
|
|
|
|
|
}
|
2014-11-04 15:44:03 -05:00
|
|
|
|
2015-05-26 14:44:27 -04:00
|
|
|
if (db.serverStatus().storageEngine.name == 'mmapv1') {
|
|
|
|
|
jsTest.log('skipping test on mmapv1'); // This is only guaranteed on other engines.
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
test();
|
|
|
|
|
}
|