summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Wlodarek <gregory.wlodarek@mongodb.com>2019-11-18 23:25:46 +0000
committerevergreen <evergreen@mongodb.com>2019-11-18 23:25:46 +0000
commiteb4706d4f2fff6fa87197bb7e8d6de2c0c1b49c9 (patch)
tree2a5b469412389eb99a0e3c3d21f74f38eeea111a
parent38f2881335ab6052c24cfc4270529363e7cc2816 (diff)
downloadmongo-eb4706d4f2fff6fa87197bb7e8d6de2c0c1b49c9.tar.gz
SERVER-44028 Remove global X lock for Cloner
(cherry picked from commit 6e1889fb793e1927a5ca695c8839f9184e5d8aa4)
-rw-r--r--src/mongo/db/cloner.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/mongo/db/cloner.cpp b/src/mongo/db/cloner.cpp
index c2f40073f1e..7f9d4f67b93 100644
--- a/src/mongo/db/cloner.cpp
+++ b/src/mongo/db/cloner.cpp
@@ -127,8 +127,8 @@ struct Cloner::Fun {
: lastLog(0), opCtx(opCtx), _dbName(dbName) {}
void operator()(DBClientCursorBatchIterator& i) {
- // XXX: can probably take dblock instead
- unique_ptr<Lock::GlobalWrite> globalWriteLock(new Lock::GlobalWrite(opCtx));
+ boost::optional<Lock::DBLock> dbLock;
+ dbLock.emplace(opCtx, _dbName, MODE_X);
uassert(
ErrorCodes::NotMaster,
str::stream() << "Not primary while cloning collection " << from_collection.ns()
@@ -184,11 +184,11 @@ struct Cloner::Fun {
}
opCtx->checkForInterrupt();
- globalWriteLock.reset();
+ dbLock.reset();
CurOp::get(opCtx)->yielded();
- globalWriteLock.reset(new Lock::GlobalWrite(opCtx));
+ dbLock.emplace(opCtx, _dbName, MODE_X);
// Check if everything is still all right.
if (opCtx->writesAreReplicated()) {