From ca03514b54e97e6b66e5344a35be3e003d4e9fc8 Mon Sep 17 00:00:00 2001 From: Benety Goh Date: Fri, 19 Jul 2019 14:24:23 -0400 Subject: SERVER-42280 add db name argument to IndexBuildsCoordinator::startIndexBuild() and _registerAndSetUpIndexBuild() This sets ReplIndexBuildState::dbName using the db name provided to startIndexBuild() rather than deriving from the CollectionCatalog lookup result. --- src/mongo/db/commands/create_indexes.cpp | 2 +- src/mongo/db/index_builds_coordinator.cpp | 3 ++- src/mongo/db/index_builds_coordinator.h | 2 ++ src/mongo/db/index_builds_coordinator_mongod.cpp | 3 ++- src/mongo/db/index_builds_coordinator_mongod.h | 1 + src/mongo/db/index_builds_coordinator_mongod_test.cpp | 18 ++++++++++++++++++ src/mongo/db/repl/oplog.cpp | 2 ++ src/mongo/db/system_index.cpp | 1 + .../embedded/index_builds_coordinator_embedded.cpp | 3 ++- src/mongo/embedded/index_builds_coordinator_embedded.h | 1 + 10 files changed, 32 insertions(+), 4 deletions(-) (limited to 'src/mongo') diff --git a/src/mongo/db/commands/create_indexes.cpp b/src/mongo/db/commands/create_indexes.cpp index 6d0a870a691..8ca80adf742 100644 --- a/src/mongo/db/commands/create_indexes.cpp +++ b/src/mongo/db/commands/create_indexes.cpp @@ -661,7 +661,7 @@ bool runCreateIndexesWithCoordinator(OperationContext* opCtx, try { auto buildIndexFuture = uassertStatusOK(indexBuildsCoord->startIndexBuild( - opCtx, *collectionUUID, specs, buildUUID, protocol, indexBuildOptions)); + opCtx, dbname, *collectionUUID, specs, buildUUID, protocol, indexBuildOptions)); auto deadline = opCtx->getDeadline(); // Date_t::max() means no deadline. diff --git a/src/mongo/db/index_builds_coordinator.cpp b/src/mongo/db/index_builds_coordinator.cpp index a3a480e45c1..7df642c47d4 100644 --- a/src/mongo/db/index_builds_coordinator.cpp +++ b/src/mongo/db/index_builds_coordinator.cpp @@ -538,6 +538,7 @@ void IndexBuildsCoordinator::_unregisterIndexBuild( StatusWith>> IndexBuildsCoordinator::_registerAndSetUpIndexBuild( OperationContext* opCtx, + StringData dbName, CollectionUUID collectionUUID, const std::vector& specs, const UUID& buildUUID, @@ -598,7 +599,7 @@ IndexBuildsCoordinator::_registerAndSetUpIndexBuild( } auto replIndexBuildState = std::make_shared( - buildUUID, collectionUUID, nss->db().toString(), filteredSpecs, protocol, commitQuorum); + buildUUID, collectionUUID, dbName.toString(), filteredSpecs, protocol, commitQuorum); replIndexBuildState->stats.numIndexesBefore = _getNumIndexesTotal(opCtx, collection); Status status = _registerIndexBuild(lk, replIndexBuildState); diff --git a/src/mongo/db/index_builds_coordinator.h b/src/mongo/db/index_builds_coordinator.h index 2a502c5dfff..b7040be5ba0 100644 --- a/src/mongo/db/index_builds_coordinator.h +++ b/src/mongo/db/index_builds_coordinator.h @@ -111,6 +111,7 @@ public: */ virtual StatusWith> startIndexBuild( OperationContext* opCtx, + StringData dbName, CollectionUUID collectionUUID, const std::vector& specs, const UUID& buildUUID, @@ -338,6 +339,7 @@ protected: */ StatusWith>> _registerAndSetUpIndexBuild(OperationContext* opCtx, + StringData dbName, CollectionUUID collectionUUID, const std::vector& specs, const UUID& buildUUID, diff --git a/src/mongo/db/index_builds_coordinator_mongod.cpp b/src/mongo/db/index_builds_coordinator_mongod.cpp index a0e20599e65..3e5a8e9937c 100644 --- a/src/mongo/db/index_builds_coordinator_mongod.cpp +++ b/src/mongo/db/index_builds_coordinator_mongod.cpp @@ -89,13 +89,14 @@ void IndexBuildsCoordinatorMongod::shutdown() { StatusWith> IndexBuildsCoordinatorMongod::startIndexBuild(OperationContext* opCtx, + StringData dbName, CollectionUUID collectionUUID, const std::vector& specs, const UUID& buildUUID, IndexBuildProtocol protocol, IndexBuildOptions indexBuildOptions) { auto statusWithOptionalResult = _registerAndSetUpIndexBuild( - opCtx, collectionUUID, specs, buildUUID, protocol, indexBuildOptions.commitQuorum); + opCtx, dbName, collectionUUID, specs, buildUUID, protocol, indexBuildOptions.commitQuorum); if (!statusWithOptionalResult.isOK()) { return statusWithOptionalResult.getStatus(); } diff --git a/src/mongo/db/index_builds_coordinator_mongod.h b/src/mongo/db/index_builds_coordinator_mongod.h index e7d5df355d4..b653f9ef08f 100644 --- a/src/mongo/db/index_builds_coordinator_mongod.h +++ b/src/mongo/db/index_builds_coordinator_mongod.h @@ -71,6 +71,7 @@ public: */ StatusWith> startIndexBuild( OperationContext* opCtx, + StringData dbName, CollectionUUID collectionUUID, const std::vector& specs, const UUID& buildUUID, diff --git a/src/mongo/db/index_builds_coordinator_mongod_test.cpp b/src/mongo/db/index_builds_coordinator_mongod_test.cpp index 5dd6938f730..fab73dd5224 100644 --- a/src/mongo/db/index_builds_coordinator_mongod_test.cpp +++ b/src/mongo/db/index_builds_coordinator_mongod_test.cpp @@ -108,6 +108,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, AttemptBuildSameIndexReturnsImmediateSu // Register an index build on _testFooNss. auto testFoo1Future = assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _testFooNss.db(), _testFooUUID, makeSpecs(_testFooNss, {"a", "b"}), UUID::gen(), @@ -117,6 +118,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, AttemptBuildSameIndexReturnsImmediateSu // Attempt and fail to register an index build on _testFooNss with the same index name, while // the prior build is still running. auto readyFuture = assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _testFooNss.db(), _testFooUUID, makeSpecs(_testFooNss, {"b"}), UUID::gen(), @@ -141,6 +143,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, Registration) { // Register an index build on _testFooNss. auto testFoo1Future = assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _testFooNss.db(), _testFooUUID, makeSpecs(_testFooNss, {"a", "b"}), UUID::gen(), @@ -160,6 +163,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, Registration) { // Register a second index build on _testFooNss. auto testFoo2Future = assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _testFooNss.db(), _testFooUUID, makeSpecs(_testFooNss, {"c", "d"}), UUID::gen(), @@ -179,6 +183,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, Registration) { // Register an index build on a different collection _testBarNss. auto testBarFuture = assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _testBarNss.db(), _testBarUUID, makeSpecs(_testBarNss, {"x", "y"}), UUID::gen(), @@ -198,6 +203,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, Registration) { // Register an index build on a collection in a different database _othertestFoo. auto othertestFooFuture = assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _othertestFooNss.db(), _othertestFooUUID, makeSpecs(_othertestFooNss, {"r", "s"}), UUID::gen(), @@ -260,6 +266,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, DisallowNewBuildsOnNamespace) { ASSERT_EQ(ErrorCodes::CannotCreateIndex, _indexBuildsCoord ->startIndexBuild(operationContext(), + _testFooNss.db(), _testFooUUID, makeSpecs(_testFooNss, {"a", "b"}), UUID::gen(), @@ -270,6 +277,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, DisallowNewBuildsOnNamespace) { // Registering index builds on other collections and databases should still succeed. auto testBarFuture = assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _testBarNss.db(), _testBarUUID, makeSpecs(_testBarNss, {"c", "d"}), UUID::gen(), @@ -277,6 +285,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, DisallowNewBuildsOnNamespace) { _indexBuildOptions)); auto othertestFooFuture = assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _othertestFooNss.db(), _othertestFooUUID, makeSpecs(_othertestFooNss, {"e", "f"}), UUID::gen(), @@ -297,6 +306,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, DisallowNewBuildsOnNamespace) { // Check that the scoped object correctly cleared. auto testFooFuture = assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _testFooNss.db(), _testFooUUID, makeSpecs(_testFooNss, {"a", "b"}), UUID::gen(), @@ -317,6 +327,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, DisallowNewBuildsOnNamespace) { ASSERT_EQ(ErrorCodes::CannotCreateIndex, _indexBuildsCoord ->startIndexBuild(operationContext(), + _testFooNss.db(), _testFooUUID, makeSpecs(_testFooNss, {"c", "d"}), UUID::gen(), @@ -326,6 +337,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, DisallowNewBuildsOnNamespace) { ASSERT_EQ(ErrorCodes::CannotCreateIndex, _indexBuildsCoord ->startIndexBuild(operationContext(), + _testBarNss.db(), _testBarUUID, makeSpecs(_testBarNss, {"a", "b"}), UUID::gen(), @@ -336,6 +348,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, DisallowNewBuildsOnNamespace) { // Registering index builds on another database should still succeed. auto othertestFooFuture = assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _othertestFooNss.db(), _othertestFooUUID, makeSpecs(_othertestFooNss, {"g", "h"}), UUID::gen(), @@ -353,6 +366,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, DisallowNewBuildsOnNamespace) { // Check that the scoped object correctly cleared. auto testFooFuture = assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _testFooNss.db(), _testFooUUID, makeSpecs(_testFooNss, {"c", "d"}), UUID::gen(), @@ -373,6 +387,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, DisallowNewBuildsOnNamespace) { ASSERT_EQ(ErrorCodes::CannotCreateIndex, _indexBuildsCoord ->startIndexBuild(operationContext(), + _testFooNss.db(), _testFooUUID, makeSpecs(_testFooNss, {"e", "f"}), UUID::gen(), @@ -383,6 +398,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, DisallowNewBuildsOnNamespace) { ASSERT_EQ(ErrorCodes::CannotCreateIndex, _indexBuildsCoord ->startIndexBuild(operationContext(), + _testFooNss.db(), _testFooUUID, makeSpecs(_testFooNss, {"e", "f"}), UUID::gen(), @@ -395,6 +411,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, DisallowNewBuildsOnNamespace) { // Check that the scoped object correctly cleared. auto testFooFuture = assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _testFooNss.db(), _testFooUUID, makeSpecs(_testFooNss, {"e", "f"}), UUID::gen(), @@ -430,6 +447,7 @@ TEST_F(IndexBuildsCoordinatorMongodTest, SetCommitQuorumWithBadArguments) { // Register an index build on _testFooNss. auto testFoo1Future = assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _testFooNss.db(), _testFooUUID, makeSpecs(_testFooNss, {"a", "b"}), UUID::gen(), diff --git a/src/mongo/db/repl/oplog.cpp b/src/mongo/db/repl/oplog.cpp index 5ee855adb88..097029946be 100644 --- a/src/mongo/db/repl/oplog.cpp +++ b/src/mongo/db/repl/oplog.cpp @@ -195,6 +195,7 @@ Status startIndexBuild(OperationContext* opCtx, // We don't pass in a commit quorum here because secondary nodes don't have any knowledge of it. return IndexBuildsCoordinator::get(opCtx) ->startIndexBuild(opCtx, + nss.db(), collUUID, statusWithIndexes.getValue(), indexBuildUUID, @@ -281,6 +282,7 @@ void createIndexForApplyOps(OperationContext* opCtx, // This spawns a new thread and returns immediately. MONGO_COMPILER_VARIABLE_UNUSED auto fut = uassertStatusOK( indexBuildsCoordinator->startIndexBuild(opCtx, + indexNss.db(), collUUID, {indexSpec}, indexBuildUUID, diff --git a/src/mongo/db/system_index.cpp b/src/mongo/db/system_index.cpp index a09cc9c64dc..e0e475b2230 100644 --- a/src/mongo/db/system_index.cpp +++ b/src/mongo/db/system_index.cpp @@ -126,6 +126,7 @@ SharedSemiFuture generateSystemIndexForE IndexBuildsCoordinator::IndexBuildOptions indexBuildOptions = {CommitQuorumOptions(1)}; auto indexBuildFuture = uassertStatusOK(indexBuildsCoord->startIndexBuild(opCtx, + ns.db(), collectionUUID, {indexSpec}, buildUUID, diff --git a/src/mongo/embedded/index_builds_coordinator_embedded.cpp b/src/mongo/embedded/index_builds_coordinator_embedded.cpp index 594ec36f8a0..67be68dfcaf 100644 --- a/src/mongo/embedded/index_builds_coordinator_embedded.cpp +++ b/src/mongo/embedded/index_builds_coordinator_embedded.cpp @@ -45,6 +45,7 @@ void IndexBuildsCoordinatorEmbedded::shutdown() {} StatusWith> IndexBuildsCoordinatorEmbedded::startIndexBuild(OperationContext* opCtx, + StringData dbName, CollectionUUID collectionUUID, const std::vector& specs, const UUID& buildUUID, @@ -53,7 +54,7 @@ IndexBuildsCoordinatorEmbedded::startIndexBuild(OperationContext* opCtx, invariant(!opCtx->lockState()->isLocked()); auto statusWithOptionalResult = _registerAndSetUpIndexBuild( - opCtx, collectionUUID, specs, buildUUID, protocol, indexBuildOptions.commitQuorum); + opCtx, dbName, collectionUUID, specs, buildUUID, protocol, indexBuildOptions.commitQuorum); if (!statusWithOptionalResult.isOK()) { return statusWithOptionalResult.getStatus(); } diff --git a/src/mongo/embedded/index_builds_coordinator_embedded.h b/src/mongo/embedded/index_builds_coordinator_embedded.h index 5e974caf39b..affaebc0955 100644 --- a/src/mongo/embedded/index_builds_coordinator_embedded.h +++ b/src/mongo/embedded/index_builds_coordinator_embedded.h @@ -58,6 +58,7 @@ public: StatusWith> startIndexBuild( OperationContext* opCtx, + StringData dbName, CollectionUUID collectionUUID, const std::vector& specs, const UUID& buildUUID, -- cgit v1.2.1