diff options
author | Sophia Tan <sophia_tll@hotmail.com> | 2022-09-06 21:49:16 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-09-06 22:42:18 +0000 |
commit | 217eaf0a4dbf4b6a7fa75b630ba931519e6074e1 (patch) | |
tree | 85ddf872a52b6b8a2fd9f04bf39907659b75c3b6 /src/mongo/db/index_builds_coordinator.cpp | |
parent | abee805af5bda67e63f6851f93cb406286fb13b8 (diff) | |
download | mongo-217eaf0a4dbf4b6a7fa75b630ba931519e6074e1.tar.gz |
SERVER-67439 Change IndexBuildsCoordinator to take in dbName as DatabaseName
Diffstat (limited to 'src/mongo/db/index_builds_coordinator.cpp')
-rw-r--r-- | src/mongo/db/index_builds_coordinator.cpp | 62 |
1 files changed, 31 insertions, 31 deletions
diff --git a/src/mongo/db/index_builds_coordinator.cpp b/src/mongo/db/index_builds_coordinator.cpp index b6c7d7c1cae..3ce99611f15 100644 --- a/src/mongo/db/index_builds_coordinator.cpp +++ b/src/mongo/db/index_builds_coordinator.cpp @@ -632,9 +632,8 @@ Status IndexBuildsCoordinator::_startIndexBuildForRecovery(OperationContext* opC collection.getWritableCollection(opCtx)->init(opCtx); } - auto dbName = nss.db().toString(); auto replIndexBuildState = std::make_shared<ReplIndexBuildState>( - buildUUID, collection->uuid(), dbName, specs, protocol); + buildUUID, collection->uuid(), nss.dbName().toStringWithTenantId(), specs, protocol); Status status = activeIndexBuilds.registerIndexBuild(replIndexBuildState); if (!status.isOK()) { @@ -659,7 +658,7 @@ Status IndexBuildsCoordinator::_startIndexBuildForRecovery(OperationContext* opC } Status IndexBuildsCoordinator::_setUpResumeIndexBuild(OperationContext* opCtx, - std::string dbName, + const DatabaseName& dbName, const UUID& collectionUUID, const std::vector<BSONObj>& specs, const UUID& buildUUID, @@ -670,9 +669,7 @@ Status IndexBuildsCoordinator::_setUpResumeIndexBuild(OperationContext* opCtx, return {ErrorCodes::FailPointEnabled, "failSetUpResumeIndexBuild fail point is enabled"}; } - // TODO SERVER-67439 Use dbName directly - DatabaseName databaseName(boost::none, dbName); - Lock::DBLock dbLock(opCtx, databaseName, MODE_IX); + Lock::DBLock dbLock(opCtx, dbName, MODE_IX); Lock::CollectionLock collLock(opCtx, nssOrUuid, MODE_X); CollectionWriter collection(opCtx, resumeInfo.getCollectionUUID()); @@ -720,7 +717,7 @@ Status IndexBuildsCoordinator::_setUpResumeIndexBuild(OperationContext* opCtx, auto protocol = IndexBuildProtocol::kTwoPhase; auto replIndexBuildState = std::make_shared<ReplIndexBuildState>( - buildUUID, collection->uuid(), dbName, specs, protocol); + buildUUID, collection->uuid(), dbName.toStringWithTenantId(), specs, protocol); Status status = activeIndexBuilds.registerIndexBuild(replIndexBuildState); if (!status.isOK()) { @@ -776,15 +773,17 @@ std::vector<UUID> IndexBuildsCoordinator::abortCollectionIndexBuilds( } void IndexBuildsCoordinator::abortDatabaseIndexBuilds(OperationContext* opCtx, - StringData db, + const DatabaseName& dbName, const std::string& reason) { LOGV2(4612302, "About to abort all index builders running for collections in the given database", - "database"_attr = db, + "database"_attr = dbName, "reason"_attr = reason); auto builds = [&]() -> std::vector<std::shared_ptr<ReplIndexBuildState>> { - auto indexBuildFilter = [=](const auto& replState) { return db == replState.dbName; }; + auto indexBuildFilter = [=](const auto& replState) { + return dbName.toStringWithTenantId() == replState.dbName; + }; return activeIndexBuilds.filterIndexBuilds(indexBuildFilter); }(); for (auto replState : builds) { @@ -794,7 +793,7 @@ void IndexBuildsCoordinator::abortDatabaseIndexBuilds(OperationContext* opCtx, LOGV2(5010502, "Index build: failed to abort index build for database drop", "buildUUID"_attr = replState->buildUUID, - "database"_attr = db, + "database"_attr = dbName, "collectionUUID"_attr = replState->collectionUUID); } } @@ -967,7 +966,7 @@ void IndexBuildsCoordinator::applyStartIndexBuild(OperationContext* opCtx, uassertStatusOK( indexBuildsCoord ->startIndexBuild(opCtx, - nss.db().toString(), + nss.dbName(), collUUID, oplogEntry.indexSpecs, oplogEntry.buildUUID, @@ -1580,7 +1579,7 @@ void IndexBuildsCoordinator::restartIndexBuildsForRecovery( // This spawns a new thread and returns immediately. These index builds will resume and // wait for a commit or abort to be replicated. [[maybe_unused]] auto fut = uassertStatusOK(resumeIndexBuild( - opCtx, nss->db().toString(), collUUID, indexSpecs, buildUUID, resumeInfo)); + opCtx, nss->dbName(), collUUID, indexSpecs, buildUUID, resumeInfo)); successfullyResumed.insert(buildUUID); } catch (const DBException& e) { LOGV2(4841701, @@ -1642,7 +1641,7 @@ void IndexBuildsCoordinator::restartIndexBuildsForRecovery( // This spawns a new thread and returns immediately. These index builds will start and wait // for a commit or abort to be replicated. [[maybe_unused]] auto fut = uassertStatusOK(startIndexBuild(opCtx, - nss->db().toString(), + nss->dbName(), build.collUUID, build.indexSpecs, buildUUID, @@ -1655,8 +1654,10 @@ bool IndexBuildsCoordinator::noIndexBuildInProgress() const { return activeIndexBuilds.getActiveIndexBuilds() == 0; } -int IndexBuildsCoordinator::numInProgForDb(StringData db) const { - auto indexBuildFilter = [db](const auto& replState) { return db == replState.dbName; }; +int IndexBuildsCoordinator::numInProgForDb(const DatabaseName& dbName) const { + auto indexBuildFilter = [dbName](const auto& replState) { + return dbName.toStringWithTenantId() == replState.dbName; + }; auto dbIndexBuilds = activeIndexBuilds.filterIndexBuilds(indexBuildFilter); return int(dbIndexBuilds.size()); } @@ -1676,8 +1677,8 @@ bool IndexBuildsCoordinator::inProgForCollection(const UUID& collectionUUID) con return !indexBuilds.empty(); } -bool IndexBuildsCoordinator::inProgForDb(StringData db) const { - return numInProgForDb(db) > 0; +bool IndexBuildsCoordinator::inProgForDb(const DatabaseName& dbName) const { + return numInProgForDb(dbName) > 0; } void IndexBuildsCoordinator::assertNoIndexBuildInProgress() const { @@ -1703,10 +1704,10 @@ void IndexBuildsCoordinator::assertNoIndexBuildInProgForCollection( indexBuilds.empty()); } -void IndexBuildsCoordinator::assertNoBgOpInProgForDb(StringData db) const { +void IndexBuildsCoordinator::assertNoBgOpInProgForDb(const DatabaseName& dbName) const { boost::optional<UUID> firstIndexBuildUUID; auto indexBuilds = activeIndexBuilds.filterIndexBuilds([&](const auto& replState) { - auto isIndexBuildForCollection = (db == replState.dbName); + auto isIndexBuildForCollection = (dbName.toStringWithTenantId() == replState.dbName); if (isIndexBuildForCollection && !firstIndexBuildUUID) { firstIndexBuildUUID = replState.buildUUID; }; @@ -1716,7 +1717,7 @@ void IndexBuildsCoordinator::assertNoBgOpInProgForDb(StringData db) const { uassert(ErrorCodes::BackgroundOperationInProgressForDatabase, fmt::format("cannot perform operation: an index build is currently running for " "database {}. Found index build: {}", - db, + dbName.toString(), firstIndexBuildUUID->toString()), indexBuilds.empty()); } @@ -1732,8 +1733,9 @@ void IndexBuildsCoordinator::awaitNoIndexBuildInProgressForCollection(OperationC activeIndexBuilds.awaitNoIndexBuildInProgressForCollection(opCtx, collectionUUID); } -void IndexBuildsCoordinator::awaitNoBgOpInProgForDb(OperationContext* opCtx, StringData db) { - activeIndexBuilds.awaitNoBgOpInProgForDb(opCtx, db); +void IndexBuildsCoordinator::awaitNoBgOpInProgForDb(OperationContext* opCtx, + const DatabaseName& dbName) { + activeIndexBuilds.awaitNoBgOpInProgForDb(opCtx, dbName); } void IndexBuildsCoordinator::waitUntilAnIndexBuildFinishes(OperationContext* opCtx) { @@ -1882,11 +1884,11 @@ void IndexBuildsCoordinator::updateCurOpOpDescription(OperationContext* opCtx, Status IndexBuildsCoordinator::_setUpIndexBuildForTwoPhaseRecovery( OperationContext* opCtx, - StringData dbName, + const DatabaseName& dbName, const UUID& collectionUUID, const std::vector<BSONObj>& specs, const UUID& buildUUID) { - NamespaceStringOrUUID nssOrUuid{dbName.toString(), collectionUUID}; + NamespaceStringOrUUID nssOrUuid{dbName, collectionUUID}; if (opCtx->recoveryUnit()->isActive()) { // This function is shared by multiple callers. Some of which have opened a transaction to @@ -1897,9 +1899,7 @@ Status IndexBuildsCoordinator::_setUpIndexBuildForTwoPhaseRecovery( // Don't use the AutoGet helpers because they require an open database, which may not be the // case when an index builds is restarted during recovery. - // TODO SERVER-67439 Use dbName directly - DatabaseName databaseName(boost::none, dbName); - Lock::DBLock dbLock(opCtx, databaseName, MODE_IX); + Lock::DBLock dbLock(opCtx, dbName, MODE_IX); Lock::CollectionLock collLock(opCtx, nssOrUuid, MODE_X); auto collection = CollectionCatalog::get(opCtx)->lookupCollectionByUUID(opCtx, collectionUUID); invariant(collection); @@ -1910,14 +1910,14 @@ Status IndexBuildsCoordinator::_setUpIndexBuildForTwoPhaseRecovery( StatusWith<boost::optional<SharedSemiFuture<ReplIndexBuildState::IndexCatalogStats>>> IndexBuildsCoordinator::_filterSpecsAndRegisterBuild(OperationContext* opCtx, - StringData dbName, + const DatabaseName& dbName, const UUID& collectionUUID, const std::vector<BSONObj>& specs, const UUID& buildUUID, IndexBuildProtocol protocol) { // AutoGetCollection throws an exception if it is unable to look up the collection by UUID. - NamespaceStringOrUUID nssOrUuid{dbName.toString(), collectionUUID}; + NamespaceStringOrUUID nssOrUuid{dbName, collectionUUID}; AutoGetCollection autoColl(opCtx, nssOrUuid, MODE_X); CollectionWriter collection(opCtx, autoColl); @@ -1981,7 +1981,7 @@ IndexBuildsCoordinator::_filterSpecsAndRegisterBuild(OperationContext* opCtx, } auto replIndexBuildState = std::make_shared<ReplIndexBuildState>( - buildUUID, collectionUUID, dbName.toString(), filteredSpecs, protocol); + buildUUID, collectionUUID, dbName.toStringWithTenantId(), filteredSpecs, protocol); replIndexBuildState->stats.numIndexesBefore = getNumIndexesTotal(opCtx, collection.get()); auto status = activeIndexBuilds.registerIndexBuild(replIndexBuildState); |