summaryrefslogtreecommitdiff
path: root/src/mongo/dbtests
diff options
context:
space:
mode:
authorGregory Wlodarek <gregory.wlodarek@mongodb.com>2019-09-13 01:01:44 +0000
committerevergreen <evergreen@mongodb.com>2019-09-13 01:01:44 +0000
commit4acaa3f536fe2f3fc2355c7a3e860663201c6f37 (patch)
treed03fb6e0d16c8b17bc7d071230f8861bf012c0ce /src/mongo/dbtests
parent268ab18867527611aac1b515dbc90e6f588879e0 (diff)
downloadmongo-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.cpp50
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>();
}
};