summaryrefslogtreecommitdiff
path: root/jstests/core/txns/drop_collection_not_blocked_by_txn.js
diff options
context:
space:
mode:
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.js32
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();
+})();