diff options
Diffstat (limited to 'jstests/core/txns/drop_collection_not_blocked_by_txn.js')
-rw-r--r-- | jstests/core/txns/drop_collection_not_blocked_by_txn.js | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/jstests/core/txns/drop_collection_not_blocked_by_txn.js b/jstests/core/txns/drop_collection_not_blocked_by_txn.js new file mode 100644 index 00000000000..626a7128a5c --- /dev/null +++ b/jstests/core/txns/drop_collection_not_blocked_by_txn.js @@ -0,0 +1,32 @@ +/** + * Test that drop collection only takes database IX lock and will not be blocked by transactions. + * + * @tags: [uses_transactions, requires_db_locking, assumes_unsharded_collection] + */ + +(function() { + "use strict"; + + let rst = new ReplSetTest({nodes: 1}); + rst.startSet(); + rst.initiate(); + + let db = rst.getPrimary().getDB("test"); + + assert.commandWorked(db.runCommand({insert: "a", documents: [{x: 1}]})); + assert.commandWorked(db.runCommand({insert: "b", documents: [{x: 1}]})); + + const session = db.getMongo().startSession(); + const sessionDb = session.getDatabase("test"); + + session.startTransaction(); + // This holds a database IX lock and a collection IX lock on "a". + sessionDb.a.insert({y: 1}); + + // This only requires database IX lock. + assert.commandWorked(db.runCommand({drop: "b"})); + + session.commitTransaction(); + + rst.stopSet(); +})(); |