diff options
author | Allison Easton <allison.easton@mongodb.com> | 2022-02-15 14:40:28 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-02-15 15:38:00 +0000 |
commit | eeff4a62ad0702abfe3d599e16696baefc6c8cec (patch) | |
tree | 4d629041e1f24a719da3477ed04a100d793b30a2 | |
parent | bbdf42ae03fdab670dbee8d5a154156aae5342a9 (diff) | |
download | mongo-eeff4a62ad0702abfe3d599e16696baefc6c8cec.tar.gz |
SERVER-60733 Test create collection after drop collection
-rw-r--r-- | jstests/concurrency/fsm_workloads/create_and_drop_collection.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/jstests/concurrency/fsm_workloads/create_and_drop_collection.js b/jstests/concurrency/fsm_workloads/create_and_drop_collection.js new file mode 100644 index 00000000000..fd23d5e153e --- /dev/null +++ b/jstests/concurrency/fsm_workloads/create_and_drop_collection.js @@ -0,0 +1,71 @@ +'use strict'; + +/** + * create_and_drop_collection.js + * + * Repeatedly creates and drops a collection. + * + * @tags: [requires_sharding] + */ +var $config = (function() { + var data = {}; + + var states = (function() { + function init(db, collName) { + this.docNum = 0; + assertAlways.commandWorked(db[collName].insertOne({_id: this.docNum})); + checkForDocument(db[collName], this.docNum); + } + + function checkForDocument(coll, docNum) { + let docs = coll.find({}).toArray(); + assert.eq(docs.length, 1); + assert.eq(docs[0]._id, docNum); + } + + function createShardedCollection(db, collName) { + assertAlways.commandWorked(db.adminCommand({enableSharding: db.getName()})); + assertAlways.commandWorked( + db.adminCommand({shardCollection: db[collName].getFullName(), key: {_id: 1}})); + assertAlways.commandWorked(db[collName].insertOne({_id: this.docNum})); + checkForDocument(db[collName], this.docNum); + } + + function createUnshardedCollection(db, collName) { + assertAlways.commandWorked(db[collName].insertOne({_id: this.docNum})); + checkForDocument(db[collName], this.docNum); + } + + function dropCollection(db, collName) { + checkForDocument(db[collName], this.docNum++); + assertAlways(db[collName].drop()); + } + + function dropDatabase(db, collName) { + checkForDocument(db[collName], this.docNum++); + assertAlways.commandWorked(db.dropDatabase()); + } + + return { + init: init, + createShardedCollection: createShardedCollection, + createUnshardedCollection: createUnshardedCollection, + dropCollection: dropCollection, + dropDatabase: dropDatabase + }; + })(); + + var transitions = { + init: {dropCollection: 0.5, dropDatabase: 0.5}, + createShardedCollection: {dropCollection: 0.5, dropDatabase: 0.5}, + createUnshardedCollection: {dropCollection: 0.5, dropDatabase: 0.5}, + dropCollection: {createShardedCollection: 0.5, createUnshardedCollection: 0.5}, + dropDatabase: {createShardedCollection: 0.5, createUnshardedCollection: 0.5} + }; + + // This test in in the concurrency suite because it requires shard stepdowns to properly test + // that no documents from a newly created collection are dropped from a previous drop + // collection. There is only one thread because only one collection is being dropped and + // created. + return {threadCount: 1, iterations: 50, data: data, states: states, transitions: transitions}; +})(); |