diff options
author | Xiangyu Yao <xiangyu.yao@mongodb.com> | 2019-04-11 17:49:57 -0400 |
---|---|---|
committer | Xiangyu Yao <xiangyu.yao@mongodb.com> | 2019-04-18 14:51:28 -0400 |
commit | 5ad20825e2c02b14f1aeb5bfb4dcc0b4dce927b2 (patch) | |
tree | 2f9e7c1d16b7c0fb03b57d88f2aceefc00bd4c16 /src/mongo/db/ops | |
parent | b53170282d1e314549350d7124830a2457bad5d6 (diff) | |
download | mongo-5ad20825e2c02b14f1aeb5bfb4dcc0b4dce927b2.tar.gz |
SERVER-39516 Use database MODE_IX lock for creating collection
Diffstat (limited to 'src/mongo/db/ops')
-rw-r--r-- | src/mongo/db/ops/write_ops_exec.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/mongo/db/ops/write_ops_exec.cpp b/src/mongo/db/ops/write_ops_exec.cpp index a39b60aa903..b9f1f8bd006 100644 --- a/src/mongo/db/ops/write_ops_exec.cpp +++ b/src/mongo/db/ops/write_ops_exec.cpp @@ -208,7 +208,9 @@ void makeCollection(OperationContext* opCtx, const NamespaceString& ns) { !inTransaction); writeConflictRetry(opCtx, "implicit collection creation", ns.ns(), [&opCtx, &ns] { - AutoGetOrCreateDb db(opCtx, ns.db(), MODE_X); + AutoGetOrCreateDb db(opCtx, ns.db(), MODE_IX); + Lock::CollectionLock collLock(opCtx, ns, MODE_X); + assertCanWrite_inlock(opCtx, ns); if (!db.getDb()->getCollection(opCtx, ns)) { // someone else may have beat us to it. uassertStatusOK(userAllowedCreateNS(ns.db(), ns.coll())); |