summaryrefslogtreecommitdiff
path: root/src/mongo/db/concurrency
diff options
context:
space:
mode:
authorGeert Bosch <geert@mongodb.com>2019-04-16 17:33:20 -0400
committerGeert Bosch <geert@mongodb.com>2019-04-17 15:40:11 -0400
commite0cafae280e508ef887bd08978dcbc5630c08a34 (patch)
tree225fea823d49fcbe836a0f64d3afdfd7573ebfc5 /src/mongo/db/concurrency
parentbf774fb0a5e9bed81bc475585deb70812a2c9c41 (diff)
downloadmongo-e0cafae280e508ef887bd08978dcbc5630c08a34.tar.gz
SERVER-40688 Make CollectionLock take NamespaceString
Diffstat (limited to 'src/mongo/db/concurrency')
-rw-r--r--src/mongo/db/concurrency/d_concurrency.cpp9
-rw-r--r--src/mongo/db/concurrency/d_concurrency.h2
-rw-r--r--src/mongo/db/concurrency/d_concurrency_bm.cpp12
-rw-r--r--src/mongo/db/concurrency/d_concurrency_test.cpp21
4 files changed, 24 insertions, 20 deletions
diff --git a/src/mongo/db/concurrency/d_concurrency.cpp b/src/mongo/db/concurrency/d_concurrency.cpp
index 0debd7b7ce8..29076651b50 100644
--- a/src/mongo/db/concurrency/d_concurrency.cpp
+++ b/src/mongo/db/concurrency/d_concurrency.cpp
@@ -277,13 +277,12 @@ void Lock::DBLock::relockWithMode(LockMode newMode) {
Lock::CollectionLock::CollectionLock(OperationContext* opCtx,
- StringData ns,
+ const NamespaceString& nss,
LockMode mode,
Date_t deadline)
- : _id(RESOURCE_COLLECTION, ns), _opCtx(opCtx) {
- massert(28538, "need a non-empty collection name", nsIsFull(ns));
-
- dassert(opCtx->lockState()->isDbLockedForMode(nsToDatabaseSubstring(ns),
+ : _id(RESOURCE_COLLECTION, nss.ns()), _opCtx(opCtx) {
+ invariant(nss.coll().size(), str::stream() << "expected non-empty collection name:" << nss);
+ dassert(opCtx->lockState()->isDbLockedForMode(nss.db(),
isSharedLockMode(mode) ? MODE_IS : MODE_IX));
LockMode actualLockMode = mode;
if (!supportsDocLocking()) {
diff --git a/src/mongo/db/concurrency/d_concurrency.h b/src/mongo/db/concurrency/d_concurrency.h
index 7300824373c..5e9bd6a94a2 100644
--- a/src/mongo/db/concurrency/d_concurrency.h
+++ b/src/mongo/db/concurrency/d_concurrency.h
@@ -357,7 +357,7 @@ public:
public:
CollectionLock(OperationContext* opCtx,
- StringData ns,
+ const NamespaceString& nss,
LockMode mode,
Date_t deadline = Date_t::max());
CollectionLock(CollectionLock&&);
diff --git a/src/mongo/db/concurrency/d_concurrency_bm.cpp b/src/mongo/db/concurrency/d_concurrency_bm.cpp
index de643c34374..c375ffdd73f 100644
--- a/src/mongo/db/concurrency/d_concurrency_bm.cpp
+++ b/src/mongo/db/concurrency/d_concurrency_bm.cpp
@@ -100,7 +100,8 @@ BENCHMARK_DEFINE_F(DConcurrencyTest, BM_CollectionIntentSharedLock)(benchmark::S
for (auto keepRunning : state) {
Lock::DBLock dlk(clients[state.thread_index].second.get(), "test", MODE_IS);
- Lock::CollectionLock clk(clients[state.thread_index].second.get(), "test.coll", MODE_IS);
+ Lock::CollectionLock clk(
+ clients[state.thread_index].second.get(), NamespaceString("test.coll"), MODE_IS);
}
if (state.thread_index == 0) {
@@ -118,7 +119,8 @@ BENCHMARK_DEFINE_F(DConcurrencyTest, BM_CollectionIntentExclusiveLock)(benchmark
for (auto keepRunning : state) {
Lock::DBLock dlk(clients[state.thread_index].second.get(), "test", MODE_IX);
- Lock::CollectionLock clk(clients[state.thread_index].second.get(), "test.coll", MODE_IX);
+ Lock::CollectionLock clk(
+ clients[state.thread_index].second.get(), NamespaceString("test.coll"), MODE_IX);
}
if (state.thread_index == 0) {
@@ -136,7 +138,8 @@ BENCHMARK_DEFINE_F(DConcurrencyTest, BM_MMAPv1CollectionSharedLock)(benchmark::S
for (auto keepRunning : state) {
Lock::DBLock dlk(clients[state.thread_index].second.get(), "test", MODE_IS);
- Lock::CollectionLock clk(clients[state.thread_index].second.get(), "test.coll", MODE_S);
+ Lock::CollectionLock clk(
+ clients[state.thread_index].second.get(), NamespaceString("test.coll"), MODE_S);
}
if (state.thread_index == 0) {
@@ -154,7 +157,8 @@ BENCHMARK_DEFINE_F(DConcurrencyTest, BM_MMAPv1CollectionExclusiveLock)(benchmark
for (auto keepRunning : state) {
Lock::DBLock dlk(clients[state.thread_index].second.get(), "test", MODE_IX);
- Lock::CollectionLock clk(clients[state.thread_index].second.get(), "test.coll", MODE_X);
+ Lock::CollectionLock clk(
+ clients[state.thread_index].second.get(), NamespaceString("test.coll"), MODE_X);
}
if (state.thread_index == 0) {
diff --git a/src/mongo/db/concurrency/d_concurrency_test.cpp b/src/mongo/db/concurrency/d_concurrency_test.cpp
index 7e2b70472bd..cbe7d62bf35 100644
--- a/src/mongo/db/concurrency/d_concurrency_test.cpp
+++ b/src/mongo/db/concurrency/d_concurrency_test.cpp
@@ -1176,7 +1176,7 @@ TEST_F(DConcurrencyTestFixture, IsCollectionLocked_DB_Locked_IS) {
Lock::DBLock dbLock(opCtx.get(), "db1", MODE_IS);
{
- Lock::CollectionLock collLock(opCtx.get(), ns.ns(), MODE_IS);
+ Lock::CollectionLock collLock(opCtx.get(), ns, MODE_IS);
ASSERT(lockState->isCollectionLockedForMode(ns, MODE_IS));
ASSERT(!lockState->isCollectionLockedForMode(ns, MODE_IX));
@@ -1188,7 +1188,7 @@ TEST_F(DConcurrencyTestFixture, IsCollectionLocked_DB_Locked_IS) {
}
{
- Lock::CollectionLock collLock(opCtx.get(), ns.ns(), MODE_S);
+ Lock::CollectionLock collLock(opCtx.get(), ns, MODE_S);
ASSERT(lockState->isCollectionLockedForMode(ns, MODE_IS));
ASSERT(!lockState->isCollectionLockedForMode(ns, MODE_IX));
@@ -1207,7 +1207,7 @@ TEST_F(DConcurrencyTestFixture, IsCollectionLocked_DB_Locked_IX) {
Lock::DBLock dbLock(opCtx.get(), "db1", MODE_IX);
{
- Lock::CollectionLock collLock(opCtx.get(), ns.ns(), MODE_IX);
+ Lock::CollectionLock collLock(opCtx.get(), ns, MODE_IX);
// TODO: This is TRUE because Lock::CollectionLock converts IX lock to X
ASSERT(lockState->isCollectionLockedForMode(ns, MODE_IS));
@@ -1218,7 +1218,7 @@ TEST_F(DConcurrencyTestFixture, IsCollectionLocked_DB_Locked_IX) {
}
{
- Lock::CollectionLock collLock(opCtx.get(), ns.ns(), MODE_X);
+ Lock::CollectionLock collLock(opCtx.get(), ns, MODE_X);
ASSERT(lockState->isCollectionLockedForMode(ns, MODE_IS));
ASSERT(lockState->isCollectionLockedForMode(ns, MODE_IX));
@@ -1749,7 +1749,7 @@ TEST_F(DConcurrencyTestFixture, CollectionLockInInterruptedContextThrowsEvenWhen
{
boost::optional<Lock::CollectionLock> collLock;
- ASSERT_THROWS_CODE(collLock.emplace(opCtx, "db.coll", MODE_IX),
+ ASSERT_THROWS_CODE(collLock.emplace(opCtx, NamespaceString("db.coll"), MODE_IX),
AssertionException,
ErrorCodes::Interrupted);
}
@@ -1761,13 +1761,13 @@ TEST_F(DConcurrencyTestFixture,
auto opCtx = clients[0].second.get();
Lock::DBLock dbLock(opCtx, "db", MODE_IX);
- Lock::CollectionLock collLock(opCtx, "db.coll", MODE_IX);
+ Lock::CollectionLock collLock(opCtx, NamespaceString("db.coll"), MODE_IX);
opCtx->markKilled();
{
boost::optional<Lock::CollectionLock> recursiveCollLock;
- ASSERT_THROWS_CODE(recursiveCollLock.emplace(opCtx, "db.coll", MODE_X),
+ ASSERT_THROWS_CODE(recursiveCollLock.emplace(opCtx, NamespaceString("db.coll"), MODE_X),
AssertionException,
ErrorCodes::Interrupted);
}
@@ -1782,7 +1782,7 @@ TEST_F(DConcurrencyTestFixture, CollectionLockInInterruptedContextRespectsUninte
opCtx->markKilled();
UninterruptibleLockGuard noInterrupt(opCtx->lockState());
- Lock::CollectionLock collLock(opCtx, "db.coll", MODE_IX); // Does not throw.
+ Lock::CollectionLock collLock(opCtx, NamespaceString("db.coll"), MODE_IX); // Does not throw.
}
TEST_F(DConcurrencyTestFixture, CollectionLockTimeout) {
@@ -1794,14 +1794,15 @@ TEST_F(DConcurrencyTestFixture, CollectionLockTimeout) {
Lock::DBLock DBL1(opctx1, "testdb"_sd, MODE_IX, Date_t::max());
ASSERT(opctx1->lockState()->isDbLockedForMode("testdb"_sd, MODE_IX));
- Lock::CollectionLock CL1(opctx1, "testdb.test"_sd, MODE_X, Date_t::max());
+ Lock::CollectionLock CL1(opctx1, NamespaceString("testdb.test"), MODE_X, Date_t::max());
ASSERT(opctx1->lockState()->isCollectionLockedForMode(NamespaceString("testdb.test"), MODE_X));
Date_t t1 = Date_t::now();
Lock::DBLock DBL2(opctx2, "testdb"_sd, MODE_IX, Date_t::max());
ASSERT(opctx2->lockState()->isDbLockedForMode("testdb"_sd, MODE_IX));
ASSERT_THROWS_CODE(
- Lock::CollectionLock(opctx2, "testdb.test"_sd, MODE_X, Date_t::now() + timeoutMillis),
+ Lock::CollectionLock(
+ opctx2, NamespaceString("testdb.test"), MODE_X, Date_t::now() + timeoutMillis),
AssertionException,
ErrorCodes::LockTimeout);
Date_t t2 = Date_t::now();