summaryrefslogtreecommitdiff
path: root/src/mongo/db/storage
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/storage')
-rw-r--r--src/mongo/db/storage/kv/durable_catalog_test.cpp19
-rw-r--r--src/mongo/db/storage/kv/storage_engine_test.cpp11
-rw-r--r--src/mongo/db/storage/storage_engine_test_fixture.h30
-rw-r--r--src/mongo/db/storage/storage_repair_observer_test.cpp3
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp3
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.