diff options
author | Allison Easton <allison.easton@mongodb.com> | 2022-02-14 07:06:52 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-02-14 07:34:53 +0000 |
commit | 7aa7f8f47a2c8e07fdfb5f79b9adf870b7ca6612 (patch) | |
tree | 17c4e0095683791ff00cc3ebdc453b5786e94ca1 /jstests | |
parent | 7c885be64e4d0f80abf3dc999379c555854a9228 (diff) | |
download | mongo-7aa7f8f47a2c8e07fdfb5f79b9adf870b7ca6612.tar.gz |
SERVER-60733 Test create collection after drop collection
Diffstat (limited to 'jstests')
-rw-r--r-- | jstests/concurrency/fsm_workloads/create_and_drop_collection.js | 69 |
1 files changed, 69 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..7ca0e2d73f0 --- /dev/null +++ b/jstests/concurrency/fsm_workloads/create_and_drop_collection.js @@ -0,0 +1,69 @@ +'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; + } + + 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: {createShardedCollection: 0.5, createUnshardedCollection: 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}; +})(); |