diff options
author | Gregory Wlodarek <gregory.wlodarek@mongodb.com> | 2019-09-13 01:01:44 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2019-09-13 01:01:44 +0000 |
commit | 4acaa3f536fe2f3fc2355c7a3e860663201c6f37 (patch) | |
tree | d03fb6e0d16c8b17bc7d071230f8861bf012c0ce /src/mongo/dbtests | |
parent | 268ab18867527611aac1b515dbc90e6f588879e0 (diff) | |
download | mongo-4acaa3f536fe2f3fc2355c7a3e860663201c6f37.tar.gz |
SERVER-42357 Add additional state to the IndexCatalogEntry to track when it is dropped
Diffstat (limited to 'src/mongo/dbtests')
-rw-r--r-- | src/mongo/dbtests/indexcatalogtests.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/mongo/dbtests/indexcatalogtests.cpp b/src/mongo/dbtests/indexcatalogtests.cpp index 802a200ead9..f51a4e2852a 100644 --- a/src/mongo/dbtests/indexcatalogtests.cpp +++ b/src/mongo/dbtests/indexcatalogtests.cpp @@ -108,6 +108,55 @@ private: Database* _db; }; +class IndexCatalogEntryDroppedTest { +public: + IndexCatalogEntryDroppedTest() { + const ServiceContext::UniqueOperationContext opCtxPtr = cc().makeOperationContext(); + OperationContext& opCtx = *opCtxPtr; + Lock::DBLock lk(&opCtx, _nss.db(), MODE_X); + OldClientContext ctx(&opCtx, _nss.ns()); + WriteUnitOfWork wuow(&opCtx); + + _db = ctx.db(); + _coll = _db->createCollection(&opCtx, _nss); + _catalog = _coll->getIndexCatalog(); + wuow.commit(); + } + + void run() { + const ServiceContext::UniqueOperationContext opCtxPtr = cc().makeOperationContext(); + OperationContext& opCtx = *opCtxPtr; + dbtests::WriteContextForTests ctx(&opCtx, _nss.ns()); + + const IndexDescriptor* idDesc = _catalog->findIdIndex(&opCtx); + std::shared_ptr<const IndexCatalogEntry> entry = _catalog->getEntryShared(idDesc); + + ASSERT_FALSE(entry->isDropped()); + + { + Lock::CollectionLock lk(&opCtx, _nss, MODE_X); + WriteUnitOfWork wuow(&opCtx); + ASSERT_OK(_db->dropCollection(&opCtx, _nss)); + ASSERT_FALSE(entry->isDropped()); + } + + ASSERT_FALSE(entry->isDropped()); + + { + Lock::CollectionLock lk(&opCtx, _nss, MODE_X); + WriteUnitOfWork wuow(&opCtx); + ASSERT_OK(_db->dropCollection(&opCtx, _nss)); + wuow.commit(); + ASSERT_TRUE(entry->isDropped()); + } + } + +private: + IndexCatalog* _catalog; + Collection* _coll; + Database* _db; +}; + /** * Test for IndexCatalog::refreshEntry(). */ @@ -187,6 +236,7 @@ public: IndexCatalogTests() : Suite("indexcatalogtests") {} void setupTests() { add<IndexIteratorTests>(); + add<IndexCatalogEntryDroppedTest>(); add<RefreshEntry>(); } }; |