summaryrefslogtreecommitdiff
path: root/src/mongo/db/index_builds_coordinator.cpp
diff options
context:
space:
mode:
authorSophia Tan <sophia_tll@hotmail.com>2022-09-06 21:49:16 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-09-06 22:42:18 +0000
commit217eaf0a4dbf4b6a7fa75b630ba931519e6074e1 (patch)
tree85ddf872a52b6b8a2fd9f04bf39907659b75c3b6 /src/mongo/db/index_builds_coordinator.cpp
parentabee805af5bda67e63f6851f93cb406286fb13b8 (diff)
downloadmongo-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.cpp62
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);