'use strict'; /** * findAndModify_remove.js * * Each thread repeatedly inserts a document, and subsequently performs * the findAndModify command to remove it. */ var $config = (function() { var data = { shardKey: { tid: 1 } }; var states = (function() { function init(db, collName) { this.iter = 0; } function insertAndRemove(db, collName) { var res = db[collName].insert({ tid: this.tid, value: this.iter }); assertAlways.writeOK(res); assertAlways.eq(1, res.nInserted); res = db.runCommand({ findandmodify: db[collName].getName(), query: { tid: this.tid }, sort: { iter: -1 }, remove: true }); assertAlways.commandWorked(res); var doc = res.value; assertWhenOwnColl(doc !== null, 'query spec should have matched a document'); if (doc !== null) { assertAlways.eq(this.tid, doc.tid); assertWhenOwnColl.eq(this.iter, doc.value); } this.iter++; } return { init: init, insertAndRemove: insertAndRemove }; })(); var transitions = { init: { insertAndRemove: 1 }, insertAndRemove: { insertAndRemove: 1 } }; return { threadCount: 20, iterations: 20, data: data, states: states, transitions: transitions }; })();