diff options
author | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2022-06-20 16:29:09 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-06-20 17:21:51 +0000 |
commit | 77ee09ff95f6f51483ed1cde01198879adaa71ad (patch) | |
tree | ae3206166d8dc7386803f100af3653e10321ae0f /src/mongo/db/catalog_raii_test.cpp | |
parent | 46d25203fcbe843eec1b2432e1d4ed1e9d598164 (diff) | |
download | mongo-77ee09ff95f6f51483ed1cde01198879adaa71ad.tar.gz |
SERVER-66869 Get rid of the multi DB locking capability
Diffstat (limited to 'src/mongo/db/catalog_raii_test.cpp')
-rw-r--r-- | src/mongo/db/catalog_raii_test.cpp | 118 |
1 files changed, 5 insertions, 113 deletions
diff --git a/src/mongo/db/catalog_raii_test.cpp b/src/mongo/db/catalog_raii_test.cpp index 383a3dddc36..2b86133de66 100644 --- a/src/mongo/db/catalog_raii_test.cpp +++ b/src/mongo/db/catalog_raii_test.cpp @@ -27,12 +27,8 @@ * it in the license file. */ +#include <boost/optional/optional_io.hpp> -#include "mongo/platform/basic.h" - -#include <string> - -#include "boost/optional/optional_io.hpp" #include "mongo/db/catalog/database_holder_mock.h" #include "mongo/db/catalog_raii.h" #include "mongo/db/client.h" @@ -47,7 +43,6 @@ #define MONGO_LOGV2_DEFAULT_COMPONENT ::mongo::logv2::LogComponent::kTest - namespace mongo { namespace { @@ -66,6 +61,7 @@ public: const NamespaceString nss = NamespaceString("test", "coll"); const NamespaceString kSecondaryNss1 = NamespaceString("test", "secondaryColl1"); const NamespaceString kSecondaryNss2 = NamespaceString("test", "secondaryColl2"); + const NamespaceString kSecondaryNss3 = NamespaceString("test", "secondaryColl3"); const NamespaceString kSecondaryNssOtherDb1 = NamespaceString("test2", "secondaryColl1"); const NamespaceString kSecondaryNssOtherDb2 = NamespaceString("test2", "secondaryColl2"); const Milliseconds timeoutMs = Seconds(1); @@ -125,44 +121,6 @@ TEST_F(CatalogRAIITestFixture, AutoGetDBDeadlineMin) { Milliseconds(0)); } -TEST_F(CatalogRAIITestFixture, AutoGetDBMultiDBDeadline) { - // Take the kSecondaryNssOtherDb1 database MODE_X lock to create a conflict later. - boost::optional<Lock::DBLock> dbLockXLock; - dbLockXLock.emplace(client1.second.get(), kSecondaryNssOtherDb1.db(), MODE_X); - ASSERT(client1.second->lockState()->isDbLockedForMode(kSecondaryNssOtherDb1.db(), MODE_X)); - - // Trying to acquire the kSecondaryNssOtherDb1 database MODE_IS lock should time out. - std::set<StringData> secondaryDbNamesConflicting{kSecondaryNss1.db(), - kSecondaryNss2.db(), - kSecondaryNssOtherDb1.db(), - kSecondaryNssOtherDb2.db()}; - failsWithLockTimeout( - [&] { - AutoGetDb autoGetDb(client2.second.get(), - nss.db(), - MODE_IS, - Date_t::now() + timeoutMs, - secondaryDbNamesConflicting); - }, - timeoutMs); - - { - // Acquiring multiple database locks without the kSecondaryNssOtherDb1 database should work. - std::set<StringData> secondaryDbNamesNoConflict{kSecondaryNss1.db()}; - AutoGetDb autoGetDbNoConflict(client2.second.get(), - kSecondaryNss1.db(), - MODE_IS, - Date_t::max(), - secondaryDbNamesNoConflict); - } - - // Lastly, with the MODE_X lock on kSecondaryNssOtherDb1.db() released, the original multi - // database lock request should work. - dbLockXLock.reset(); - AutoGetDb autoGetDb( - client2.second.get(), nss.db(), MODE_IS, Date_t::max(), secondaryDbNamesConflicting); -} - TEST_F(CatalogRAIITestFixture, AutoGetCollectionCollLockDeadline) { Lock::DBLock dbLock1(client1.second.get(), nss.db(), MODE_IX); ASSERT(client1.second->lockState()->isDbLockedForMode(nss.db(), MODE_IX)); @@ -337,50 +295,11 @@ TEST_F(CatalogRAIITestFixture, AutoGetCollectionMultiNamespacesMODEIX) { ASSERT(!opCtx1->lockState()->isLocked()); // Global lock check } -TEST_F(CatalogRAIITestFixture, AutoGetCollectionSecondaryNamespacesMultiDb) { - auto opCtx1 = client1.second.get(); - - std::vector<NamespaceStringOrUUID> secondaryNamespaces{ - NamespaceStringOrUUID(kSecondaryNss1), - NamespaceStringOrUUID(kSecondaryNss2), - NamespaceStringOrUUID(kSecondaryNssOtherDb1), - NamespaceStringOrUUID(kSecondaryNssOtherDb2)}; - boost::optional<AutoGetCollection> autoGetColl; - autoGetColl.emplace(opCtx1, - nss, - MODE_IS, - AutoGetCollectionViewMode::kViewsForbidden, - Date_t::max(), - secondaryNamespaces); - - ASSERT(opCtx1->lockState()->isRSTLLocked()); - ASSERT(opCtx1->lockState()->isReadLocked()); // Global lock check - ASSERT(opCtx1->lockState()->isDbLockedForMode(nss.db(), MODE_IS)); - ASSERT(opCtx1->lockState()->isDbLockedForMode(kSecondaryNss1.db(), MODE_IS)); - ASSERT(opCtx1->lockState()->isDbLockedForMode(kSecondaryNss2.db(), MODE_IS)); - ASSERT(opCtx1->lockState()->isDbLockedForMode(kSecondaryNssOtherDb1.db(), MODE_IS)); - ASSERT(opCtx1->lockState()->isDbLockedForMode(kSecondaryNssOtherDb2.db(), MODE_IS)); - ASSERT(opCtx1->lockState()->isCollectionLockedForMode(nss, MODE_IS)); - ASSERT(opCtx1->lockState()->isCollectionLockedForMode(kSecondaryNss1, MODE_IS)); - ASSERT(opCtx1->lockState()->isCollectionLockedForMode(kSecondaryNss2, MODE_IS)); - ASSERT(opCtx1->lockState()->isCollectionLockedForMode(kSecondaryNssOtherDb1, MODE_IS)); - ASSERT(opCtx1->lockState()->isCollectionLockedForMode(kSecondaryNssOtherDb2, MODE_IS)); - - ASSERT(!opCtx1->lockState()->isRSTLExclusive()); - ASSERT(!opCtx1->lockState()->isGlobalLockedRecursively()); - ASSERT(!opCtx1->lockState()->isWriteLocked()); - - // All the locks should release. - autoGetColl.reset(); - ASSERT(!opCtx1->lockState()->isLocked()); // Global lock check. -} - TEST_F(CatalogRAIITestFixture, AutoGetDbSecondaryNamespacesSingleDb) { auto opCtx1 = client1.second.get(); - std::set<StringData> secondaryDbNames{kSecondaryNss1.db(), kSecondaryNss2.db()}; boost::optional<AutoGetDb> autoGetDb; - autoGetDb.emplace(opCtx1, nss.db(), MODE_IS, Date_t::max(), secondaryDbNames); + autoGetDb.emplace(opCtx1, nss.db(), MODE_IS, Date_t::max()); ASSERT(opCtx1->lockState()->isRSTLLocked()); ASSERT(opCtx1->lockState()->isReadLocked()); // Global lock check @@ -399,33 +318,6 @@ TEST_F(CatalogRAIITestFixture, AutoGetDbSecondaryNamespacesSingleDb) { ASSERT(!opCtx1->lockState()->isLocked()); // Global lock check. } -TEST_F(CatalogRAIITestFixture, AutoGetDbSecondaryNamespacesMultiDb) { - auto opCtx1 = client1.second.get(); - - std::set<StringData> secondaryDbNames{kSecondaryNss1.db(), - kSecondaryNss2.db(), - kSecondaryNssOtherDb1.db(), - kSecondaryNssOtherDb2.db()}; - boost::optional<AutoGetDb> autoGetDb; - autoGetDb.emplace(opCtx1, nss.db(), MODE_IS, Date_t::max(), secondaryDbNames); - - ASSERT(opCtx1->lockState()->isReadLocked()); // Global lock check - ASSERT(opCtx1->lockState()->isRSTLLocked()); - ASSERT(opCtx1->lockState()->isDbLockedForMode(nss.db(), MODE_IS)); - ASSERT(opCtx1->lockState()->isDbLockedForMode(kSecondaryNss1.db(), MODE_IS)); - ASSERT(opCtx1->lockState()->isDbLockedForMode(kSecondaryNss2.db(), MODE_IS)); - ASSERT(opCtx1->lockState()->isDbLockedForMode(kSecondaryNssOtherDb1.db(), MODE_IS)); - ASSERT(opCtx1->lockState()->isDbLockedForMode(kSecondaryNssOtherDb2.db(), MODE_IS)); - - ASSERT(!opCtx1->lockState()->isRSTLExclusive()); - ASSERT(!opCtx1->lockState()->isGlobalLockedRecursively()); - ASSERT(!opCtx1->lockState()->isWriteLocked()); - - // All the locks should release. - autoGetDb.reset(); - ASSERT(!opCtx1->lockState()->isLocked()); // Global lock check. -} - TEST_F(CatalogRAIITestFixture, AutoGetCollectionMultiNssCollLockDeadline) { // Take a MODE_X collection lock on kSecondaryNss1. boost::optional<AutoGetCollection> autoGetCollWithXLock; @@ -437,7 +329,7 @@ TEST_F(CatalogRAIITestFixture, AutoGetCollectionMultiNssCollLockDeadline) { const std::vector<NamespaceStringOrUUID> secondaryNamespacesConflict{ NamespaceStringOrUUID(kSecondaryNss1), NamespaceStringOrUUID(kSecondaryNss2), - NamespaceStringOrUUID(kSecondaryNssOtherDb1)}; + NamespaceStringOrUUID(kSecondaryNss3)}; failsWithLockTimeout( [&] { AutoGetCollection coll(client2.second.get(), @@ -452,7 +344,7 @@ TEST_F(CatalogRAIITestFixture, AutoGetCollectionMultiNssCollLockDeadline) { { // Sanity check that there's no conflict without kSecondaryNss1 that's MODE_X locked. const std::vector<NamespaceStringOrUUID> secondaryNamespacesNoConflict{ - NamespaceStringOrUUID(kSecondaryNss2), NamespaceStringOrUUID(kSecondaryNssOtherDb1)}; + NamespaceStringOrUUID(kSecondaryNss2), NamespaceStringOrUUID(kSecondaryNss2)}; AutoGetCollection collNoConflict(client2.second.get(), nss, MODE_IS, |