diff options
Diffstat (limited to 'src/mongo/db/storage')
5 files changed, 31 insertions, 35 deletions
diff --git a/src/mongo/db/storage/kv/durable_catalog_test.cpp b/src/mongo/db/storage/kv/durable_catalog_test.cpp index 787a6c3b353..14994f957e8 100644 --- a/src/mongo/db/storage/kv/durable_catalog_test.cpp +++ b/src/mongo/db/storage/kv/durable_catalog_test.cpp @@ -62,6 +62,9 @@ static const long kExpectedVersion = 1; class DurableCatalogTest : public CatalogTestFixture { public: + // TODO (SERVER-65189): Use wiredTiger. + DurableCatalogTest() : CatalogTestFixture(Options{}.engine("ephemeralForTest")) {} + void setUp() final { CatalogTestFixture::setUp(); @@ -224,6 +227,7 @@ TEST_F(DurableCatalogTest, CanSetIndividualPathComponentOfBtreeIndexAsMultikey) auto collection = getCollection(); { + Lock::GlobalLock globalLock{operationContext(), MODE_IX}; WriteUnitOfWork wuow(operationContext()); ASSERT(collection->setIndexIsMultikey(operationContext(), indexEntry->descriptor()->indexName(), @@ -244,6 +248,7 @@ TEST_F(DurableCatalogTest, MultikeyPathsAccumulateOnDifferentFields) { auto collection = getCollection(); { + Lock::GlobalLock globalLock{operationContext(), MODE_IX}; WriteUnitOfWork wuow(operationContext()); ASSERT(collection->setIndexIsMultikey(operationContext(), indexEntry->descriptor()->indexName(), @@ -259,6 +264,7 @@ TEST_F(DurableCatalogTest, MultikeyPathsAccumulateOnDifferentFields) { } { + Lock::GlobalLock globalLock{operationContext(), MODE_IX}; WriteUnitOfWork wuow(operationContext()); ASSERT(collection->setIndexIsMultikey(operationContext(), indexEntry->descriptor()->indexName(), @@ -279,6 +285,7 @@ TEST_F(DurableCatalogTest, MultikeyPathsAccumulateOnDifferentComponentsOfTheSame auto collection = getCollection(); { + Lock::GlobalLock globalLock{operationContext(), MODE_IX}; WriteUnitOfWork wuow(operationContext()); ASSERT(collection->setIndexIsMultikey( operationContext(), indexEntry->descriptor()->indexName(), {{0U}})); @@ -293,6 +300,7 @@ TEST_F(DurableCatalogTest, MultikeyPathsAccumulateOnDifferentComponentsOfTheSame } { + Lock::GlobalLock globalLock{operationContext(), MODE_IX}; WriteUnitOfWork wuow(operationContext()); ASSERT(collection->setIndexIsMultikey( operationContext(), indexEntry->descriptor()->indexName(), {{1U}})); @@ -312,6 +320,7 @@ TEST_F(DurableCatalogTest, NoOpWhenSpecifiedPathComponentsAlreadySetAsMultikey) auto collection = getCollection(); { + Lock::GlobalLock globalLock{operationContext(), MODE_IX}; WriteUnitOfWork wuow(operationContext()); ASSERT(collection->setIndexIsMultikey( operationContext(), indexEntry->descriptor()->indexName(), {{0U}})); @@ -326,6 +335,7 @@ TEST_F(DurableCatalogTest, NoOpWhenSpecifiedPathComponentsAlreadySetAsMultikey) } { + Lock::GlobalLock globalLock{operationContext(), MODE_IX}; WriteUnitOfWork wuow(operationContext()); ASSERT(!collection->setIndexIsMultikey( operationContext(), indexEntry->descriptor()->indexName(), {{0U}})); @@ -344,6 +354,7 @@ TEST_F(DurableCatalogTest, CanSetMultipleFieldsAndComponentsAsMultikey) { auto indexEntry = createIndex(BSON("a.b.c" << 1 << "a.b.d" << 1)); auto collection = getCollection(); { + Lock::GlobalLock globalLock{operationContext(), MODE_IX}; WriteUnitOfWork wuow(operationContext()); ASSERT(collection->setIndexIsMultikey( operationContext(), indexEntry->descriptor()->indexName(), {{0U, 1U}, {0U, 1U}})); @@ -364,6 +375,7 @@ DEATH_TEST_REGEX_F(DurableCatalogTest, auto indexEntry = createIndex(BSON("a" << 1 << "b" << 1)); auto collection = getCollection(); + Lock::GlobalLock globalLock{operationContext(), MODE_IX}; WriteUnitOfWork wuow(operationContext()); collection->setIndexIsMultikey( operationContext(), indexEntry->descriptor()->indexName(), MultikeyPaths{}); @@ -375,6 +387,7 @@ DEATH_TEST_REGEX_F(DurableCatalogTest, auto indexEntry = createIndex(BSON("a" << 1 << "b" << 1)); auto collection = getCollection(); + Lock::GlobalLock globalLock{operationContext(), MODE_IX}; WriteUnitOfWork wuow(operationContext()); collection->setIndexIsMultikey(operationContext(), @@ -415,6 +428,7 @@ TEST_F(DurableCatalogTest, CanSetEntireTextIndexAsMultikey) { auto collection = getCollection(); { + Lock::GlobalLock globalLock{operationContext(), MODE_IX}; WriteUnitOfWork wuow(operationContext()); ASSERT(collection->setIndexIsMultikey( operationContext(), indexEntry->descriptor()->indexName(), MultikeyPaths{})); @@ -435,6 +449,7 @@ TEST_F(DurableCatalogTest, NoOpWhenEntireIndexAlreadySetAsMultikey) { auto collection = getCollection(); { + Lock::GlobalLock globalLock{operationContext(), MODE_IX}; WriteUnitOfWork wuow(operationContext()); ASSERT(collection->setIndexIsMultikey( operationContext(), indexEntry->descriptor()->indexName(), MultikeyPaths{})); @@ -449,6 +464,7 @@ TEST_F(DurableCatalogTest, NoOpWhenEntireIndexAlreadySetAsMultikey) { } { + Lock::GlobalLock globalLock{operationContext(), MODE_IX}; WriteUnitOfWork wuow(operationContext()); ASSERT(!collection->setIndexIsMultikey( operationContext(), indexEntry->descriptor()->indexName(), MultikeyPaths{})); @@ -515,6 +531,7 @@ DEATH_TEST_REGEX_F(DurableCatalogTest, auto indexEntry = createIndex(BSON("a" << indexType << "b" << 1), indexType); auto collection = getCollection(); + Lock::GlobalLock globalLock{operationContext(), MODE_IX}; WriteUnitOfWork wuow(operationContext()); collection->setIndexIsMultikey( operationContext(), indexEntry->descriptor()->indexName(), {{0U}, {0U}}); @@ -656,6 +673,7 @@ TEST_F(DurableCatalogTest, CheckTimeseriesBucketsMayHaveMixedSchemaDataFlagFCVLa const NamespaceString regularNss = NamespaceString("test.regular"); createCollection(regularNss, CollectionOptions()); + Lock::GlobalLock globalLock{operationContext(), MODE_IS}; auto collection = CollectionCatalog::get(operationContext()) ->lookupCollectionByNamespace(operationContext(), regularNss); RecordId catalogId = collection->getCatalogId(); @@ -670,6 +688,7 @@ TEST_F(DurableCatalogTest, CheckTimeseriesBucketsMayHaveMixedSchemaDataFlagFCVLa options.timeseries = TimeseriesOptions(/*timeField=*/"t"); createCollection(bucketsNss, options); + Lock::GlobalLock globalLock{operationContext(), MODE_IS}; auto collection = CollectionCatalog::get(operationContext()) ->lookupCollectionByNamespace(operationContext(), bucketsNss); RecordId catalogId = collection->getCatalogId(); diff --git a/src/mongo/db/storage/kv/storage_engine_test.cpp b/src/mongo/db/storage/kv/storage_engine_test.cpp index 46f5ffe64d7..1fbdc65188d 100644 --- a/src/mongo/db/storage/kv/storage_engine_test.cpp +++ b/src/mongo/db/storage/kv/storage_engine_test.cpp @@ -130,7 +130,6 @@ TEST_F(StorageEngineTest, TemporaryRecordStoreClustered) { WriteUnitOfWork wuow(opCtx.get()); StatusWith<RecordId> s = rs->insertRecord(opCtx.get(), rid, data, strlen(data), Timestamp()); ASSERT_TRUE(s.isOK()); - ASSERT_EQUALS(1, rs->numRecords(opCtx.get())); wuow.commit(); // Read the record back. @@ -175,13 +174,7 @@ TEST_F(StorageEngineTest, ReconcileKeepsTemporary) { ASSERT_EQUALS(0UL, reconcileResult.indexesToRebuild.size()); ASSERT_EQUALS(0UL, reconcileResult.indexBuildsToRestart.size()); - if (_storageEngine->supportsResumableIndexBuilds()) { - // The storage engine does not drop its temporary idents outside of starting up after an - // unclean shutdown. - ASSERT(identExists(opCtx.get(), ident)); - } else { - ASSERT_FALSE(identExists(opCtx.get(), ident)); - } + ASSERT_FALSE(identExists(opCtx.get(), ident)); } class StorageEngineTimestampMonitorTest : public StorageEngineTest { @@ -685,7 +678,7 @@ TEST_F(TimestampKVEngineTest, TimestampAdvancesOnNotification) { _storageEngine->getTimestampMonitor()->clearListeners(); } -TEST_F(StorageEngineDurableTest, UseAlternateStorageLocation) { +TEST_F(StorageEngineTest, UseAlternateStorageLocation) { auto opCtx = cc().makeOperationContext(); const NamespaceString coll1Ns("db.coll1"); diff --git a/src/mongo/db/storage/storage_engine_test_fixture.h b/src/mongo/db/storage/storage_engine_test_fixture.h index 266052614a7..db8f499f42b 100644 --- a/src/mongo/db/storage/storage_engine_test_fixture.h +++ b/src/mongo/db/storage/storage_engine_test_fixture.h @@ -48,23 +48,14 @@ namespace mongo { class StorageEngineTest : public ServiceContextMongoDTest { public: - StorageEngineTest(RepairAction repair, - const std::string& storageEngine, - StorageEngineInitFlags initFlags) - : ServiceContextMongoDTest(storageEngine, repair, initFlags), - _storageEngine(getServiceContext()->getStorageEngine()) {} - - StorageEngineTest(const std::string& storageEngine, StorageEngineInitFlags initFlags) - : StorageEngineTest(RepairAction::kNoRepair, storageEngine, initFlags) { - auto serviceCtx = getServiceContext(); + explicit StorageEngineTest(Options options = {}) + : ServiceContextMongoDTest(std::move(options)), + _storageEngine(getServiceContext()->getStorageEngine()) { repl::ReplicationCoordinator::set( - serviceCtx, std::make_unique<repl::ReplicationCoordinatorMock>(serviceCtx)); + getServiceContext(), + std::make_unique<repl::ReplicationCoordinatorMock>(getServiceContext())); } - StorageEngineTest() - : StorageEngineTest("ephemeralForTest", - ServiceContextMongoDTest::kDefaultStorageEngineInitFlags) {} - StatusWith<DurableCatalog::Entry> createCollection(OperationContext* opCtx, NamespaceString ns) { AutoGetDb db(opCtx, ns.db(), LockMode::MODE_X); @@ -121,6 +112,7 @@ public: } StatusWith<StorageEngine::ReconcileResult> reconcile(OperationContext* opCtx) { + Lock::GlobalLock globalLock{opCtx, MODE_IX}; return _storageEngine->reconcileCatalogAndIdents(opCtx, StorageEngine::LastShutdownState::kClean); } @@ -207,10 +199,9 @@ public: class StorageEngineRepairTest : public StorageEngineTest { public: + // TODO (SERVER-65191): Use wiredTiger. StorageEngineRepairTest() - : StorageEngineTest(RepairAction::kRepair, - "ephemeralForTest", - ServiceContextMongoDTest::kDefaultStorageEngineInitFlags) {} + : StorageEngineTest(Options{}.engine("ephemeralForTest").repair(RepairAction::kRepair)) {} void tearDown() { auto repairObserver = StorageRepairObserver::get(getGlobalServiceContext()); @@ -228,9 +219,4 @@ public: } }; -class StorageEngineDurableTest : public StorageEngineTest { -public: - StorageEngineDurableTest() : StorageEngineTest("wiredTiger", StorageEngineInitFlags()) {} -}; - } // namespace mongo diff --git a/src/mongo/db/storage/storage_repair_observer_test.cpp b/src/mongo/db/storage/storage_repair_observer_test.cpp index 2fe3cc786d0..204ba7fc7de 100644 --- a/src/mongo/db/storage/storage_repair_observer_test.cpp +++ b/src/mongo/db/storage/storage_repair_observer_test.cpp @@ -53,8 +53,7 @@ using boost::filesystem::path; class StorageRepairObserverTest : public ServiceContextMongoDTest { public: - StorageRepairObserverTest() : ServiceContextMongoDTest("ephemeralForTest") { - + StorageRepairObserverTest() { repl::ReplicationCoordinator::set( getServiceContext(), std::make_unique<repl::ReplicationCoordinatorMock>(getServiceContext())); diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp index 3cb2aca26a3..b13db8fd9d4 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp @@ -150,8 +150,7 @@ bool WiredTigerFileVersion::shouldDowngrade(bool readOnly, bool hasRecoveryTimes } const auto replCoord = repl::ReplicationCoordinator::get(getGlobalServiceContext()); - const auto memberState = replCoord->getMemberState(); - if (memberState.arbiter()) { + if (replCoord && replCoord->getMemberState().arbiter()) { // SERVER-35361: Arbiters will no longer downgrade their data files. To downgrade // binaries, the user must delete the dbpath. It's not particularly expensive for a // replica set to re-initialize an arbiter that comes online. |