32 lines
1000 B
JavaScript
32 lines
1000 B
JavaScript
'use strict';
|
|
|
|
/*
|
|
* yield_id_hack.js (extends yield.js)
|
|
*
|
|
* Intersperse queries which use the ID_HACK stage with updates and deletes of documents they may
|
|
* match.
|
|
*/
|
|
load('jstests/concurrency/fsm_libs/extend_workload.js'); // for extendWorkload
|
|
load('jstests/concurrency/fsm_workloads/yield.js'); // for $config
|
|
|
|
var $config = extendWorkload($config, function($config, $super) {
|
|
|
|
/*
|
|
* Issue a query that will use the ID_HACK stage. This cannot be batched, so issue a
|
|
* number of them to increase the chances of yielding between getting the key and looking
|
|
* up its value.
|
|
*/
|
|
$config.states.query = function idHack(db, collName) {
|
|
var nQueries = 100;
|
|
for (var i = 0; i < nQueries; i++) {
|
|
assertAlways.lte(db[collName].find({ _id: i }).itcount(), 1);
|
|
var res = db[collName].findOne({ _id: i });
|
|
if (res !== null) {
|
|
assertAlways.eq(i, res._id);
|
|
}
|
|
}
|
|
};
|
|
|
|
return $config;
|
|
});
|