diff options
author | Benety Goh <benety@mongodb.com> | 2020-04-18 11:13:53 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-04-18 15:25:38 +0000 |
commit | 8baf8f1b16ead433c35d7b705d86725da6c7c4ff (patch) | |
tree | eb1c9e05527250af1246029faed20a6cd695fb97 /src/mongo/db | |
parent | 321cb6f478bd1969ef4c7a90b210a21272354f41 (diff) | |
download | mongo-8baf8f1b16ead433c35d7b705d86725da6c7c4ff.tar.gz |
SERVER-47465 remove unused functions from indexbuildentryhelpers namespace
Diffstat (limited to 'src/mongo/db')
-rw-r--r-- | src/mongo/db/SConscript | 5 | ||||
-rw-r--r-- | src/mongo/db/index_build_entry_helpers.cpp | 163 | ||||
-rw-r--r-- | src/mongo/db/index_build_entry_helpers.h | 55 | ||||
-rw-r--r-- | src/mongo/db/index_build_entry_helpers_test.cpp | 121 |
4 files changed, 14 insertions, 330 deletions
diff --git a/src/mongo/db/SConscript b/src/mongo/db/SConscript index 90f4c489508..186c683abfa 100644 --- a/src/mongo/db/SConscript +++ b/src/mongo/db/SConscript @@ -906,16 +906,11 @@ env.Library( "dbhelpers", "db_raii", "namespace_string", - "query_exec", "service_context", "$BUILD_DIR/mongo/base", "$BUILD_DIR/mongo/db/catalog/commit_quorum_options", "$BUILD_DIR/mongo/db/catalog/index_build_entry_idl", - "$BUILD_DIR/mongo/db/matcher/expressions_mongod_only", "$BUILD_DIR/mongo/db/storage/write_unit_of_work", - "$BUILD_DIR/mongo/db/query/query_request", - "$BUILD_DIR/mongo/db/query/query_planner", - "$BUILD_DIR/mongo/util/net/network", "repl/local_oplog_info", ], ) diff --git a/src/mongo/db/index_build_entry_helpers.cpp b/src/mongo/db/index_build_entry_helpers.cpp index 7e8185833d5..edc18199781 100644 --- a/src/mongo/db/index_build_entry_helpers.cpp +++ b/src/mongo/db/index_build_entry_helpers.cpp @@ -33,29 +33,19 @@ #include "mongo/db/index_build_entry_helpers.h" -#include <memory> -#include <string> -#include <vector> - #include "mongo/db/catalog/commit_quorum_options.h" -#include "mongo/db/catalog/create_collection.h" -#include "mongo/db/catalog/database_impl.h" +#include "mongo/db/catalog/database.h" #include "mongo/db/catalog/index_build_entry_gen.h" #include "mongo/db/catalog_raii.h" #include "mongo/db/concurrency/write_conflict_exception.h" #include "mongo/db/db_raii.h" #include "mongo/db/dbhelpers.h" -#include "mongo/db/matcher/extensions_callback_real.h" #include "mongo/db/namespace_string.h" #include "mongo/db/operation_context.h" -#include "mongo/db/query/canonical_query.h" -#include "mongo/db/query/get_executor.h" -#include "mongo/db/query/query_request.h" #include "mongo/db/record_id.h" #include "mongo/db/repl/local_oplog_info.h" #include "mongo/db/storage/write_unit_of_work.h" #include "mongo/util/str.h" -#include "mongo/util/uuid.h" namespace mongo { @@ -296,63 +286,6 @@ StatusWith<IndexBuildEntry> getIndexBuildEntry(OperationContext* opCtx, UUID ind } } -StatusWith<std::vector<IndexBuildEntry>> getIndexBuildEntries(OperationContext* opCtx, - UUID collectionUUID) { - AutoGetCollectionForRead autoCollection(opCtx, NamespaceString::kIndexBuildEntryNamespace); - Collection* collection = autoCollection.getCollection(); - if (!collection) { - str::stream ss; - ss << "Collection not found: " << NamespaceString::kIndexBuildEntryNamespace.ns(); - return Status(ErrorCodes::NamespaceNotFound, ss); - } - - BSONObj collectionQuery = BSON("collectionUUID" << collectionUUID); - std::vector<IndexBuildEntry> indexBuildEntries; - - auto qr = std::make_unique<QueryRequest>(collection->ns()); - qr->setFilter(collectionQuery); - - const ExtensionsCallbackReal extensionsCallback(opCtx, &collection->ns()); - const boost::intrusive_ptr<ExpressionContext> expCtx; - auto statusWithCQ = - CanonicalQuery::canonicalize(opCtx, - std::move(qr), - expCtx, - extensionsCallback, - MatchExpressionParser::kAllowAllSpecialFeatures); - - if (!statusWithCQ.isOK()) { - return statusWithCQ.getStatus(); - } - - std::unique_ptr<CanonicalQuery> cq = std::move(statusWithCQ.getValue()); - - auto statusWithExecutor = getExecutor( - opCtx, collection, std::move(cq), PlanExecutor::NO_YIELD, QueryPlannerParams::DEFAULT); - if (!statusWithExecutor.isOK()) { - return statusWithExecutor.getStatus(); - } - - auto exec = std::move(statusWithExecutor.getValue()); - PlanExecutor::ExecState state; - BSONObj obj; - RecordId loc; - while (PlanExecutor::ADVANCED == (state = exec->getNext(&obj, &loc))) { - try { - IDLParserErrorContext ctx("IndexBuildsEntry Parser"); - IndexBuildEntry indexBuildEntry = IndexBuildEntry::parse(ctx, obj); - indexBuildEntries.push_back(indexBuildEntry); - } catch (...) { - str::stream ss; - ss << "Invalid BSON found for RecordId " << loc << " in collection " - << collection->ns(); - return Status(ErrorCodes::InvalidBSON, ss); - } - } - - return indexBuildEntries; -} - StatusWith<CommitQuorumOptions> getCommitQuorum(OperationContext* opCtx, UUID indexBuildUUID) { StatusWith<IndexBuildEntry> status = getIndexBuildEntry(opCtx, indexBuildUUID); if (!status.isOK()) { @@ -363,9 +296,9 @@ StatusWith<CommitQuorumOptions> getCommitQuorum(OperationContext* opCtx, UUID in return indexBuildEntry.getCommitQuorum(); } -Status setCommitQuorum(OperationContext* opCtx, - UUID indexBuildUUID, - CommitQuorumOptions commitQuorumOptions) { +Status setCommitQuorum_forTest(OperationContext* opCtx, + UUID indexBuildUUID, + CommitQuorumOptions commitQuorumOptions) { StatusWith<IndexBuildEntry> status = getIndexBuildEntry(opCtx, indexBuildUUID); if (!status.isOK()) { return status.getStatus(); @@ -376,93 +309,5 @@ Status setCommitQuorum(OperationContext* opCtx, return upsert(opCtx, indexBuildEntry); } -Status addCommitReadyMember(OperationContext* opCtx, UUID indexBuildUUID, HostAndPort hostAndPort) { - StatusWith<IndexBuildEntry> status = getIndexBuildEntry(opCtx, indexBuildUUID); - if (!status.isOK()) { - return status.getStatus(); - } - - IndexBuildEntry indexBuildEntry = status.getValue(); - - std::vector<HostAndPort> newCommitReadyMembers; - if (indexBuildEntry.getCommitReadyMembers()) { - newCommitReadyMembers = indexBuildEntry.getCommitReadyMembers().get(); - } - - if (std::find(newCommitReadyMembers.begin(), newCommitReadyMembers.end(), hostAndPort) == - newCommitReadyMembers.end()) { - newCommitReadyMembers.push_back(hostAndPort); - indexBuildEntry.setCommitReadyMembers(newCommitReadyMembers); - return upsert(opCtx, indexBuildEntry); - } - return Status::OK(); -} - -Status removeCommitReadyMember(OperationContext* opCtx, - UUID indexBuildUUID, - HostAndPort hostAndPort) { - StatusWith<IndexBuildEntry> status = getIndexBuildEntry(opCtx, indexBuildUUID); - if (!status.isOK()) { - return status.getStatus(); - } - - IndexBuildEntry indexBuildEntry = status.getValue(); - - std::vector<HostAndPort> newCommitReadyMembers; - if (indexBuildEntry.getCommitReadyMembers()) { - newCommitReadyMembers = indexBuildEntry.getCommitReadyMembers().get(); - } - - if (std::find(newCommitReadyMembers.begin(), newCommitReadyMembers.end(), hostAndPort) != - newCommitReadyMembers.end()) { - newCommitReadyMembers.erase( - std::remove(newCommitReadyMembers.begin(), newCommitReadyMembers.end(), hostAndPort)); - indexBuildEntry.setCommitReadyMembers(newCommitReadyMembers); - return upsert(opCtx, indexBuildEntry); - } - - return Status::OK(); -} - -StatusWith<std::vector<HostAndPort>> getCommitReadyMembers(OperationContext* opCtx, - UUID indexBuildUUID) { - StatusWith<IndexBuildEntry> status = getIndexBuildEntry(opCtx, indexBuildUUID); - if (!status.isOK()) { - return status.getStatus(); - } - - IndexBuildEntry indexBuildEntry = status.getValue(); - if (indexBuildEntry.getCommitReadyMembers()) { - return indexBuildEntry.getCommitReadyMembers().get(); - } - - return std::vector<HostAndPort>(); -} - -Status clearAllIndexBuildEntries(OperationContext* opCtx) { - return writeConflictRetry(opCtx, - "truncateIndexBuildEntries", - NamespaceString::kIndexBuildEntryNamespace.ns(), - [&]() -> Status { - AutoGetCollection autoCollection( - opCtx, NamespaceString::kIndexBuildEntryNamespace, MODE_X); - Collection* collection = autoCollection.getCollection(); - if (!collection) { - str::stream ss; - ss << "Collection not found: " - << NamespaceString::kIndexBuildEntryNamespace.ns(); - return Status(ErrorCodes::NamespaceNotFound, ss); - } - - WriteUnitOfWork wuow(opCtx); - Status status = collection->truncate(opCtx); - if (!status.isOK()) { - return status; - } - wuow.commit(); - return Status::OK(); - }); -} - } // namespace indexbuildentryhelpers } // namespace mongo diff --git a/src/mongo/db/index_build_entry_helpers.h b/src/mongo/db/index_build_entry_helpers.h index 4784a308ed3..b2377de1afa 100644 --- a/src/mongo/db/index_build_entry_helpers.h +++ b/src/mongo/db/index_build_entry_helpers.h @@ -104,6 +104,9 @@ Status addIndexBuildEntry(OperationContext* opCtx, const IndexBuildEntry& indexB * for the given 'indexBuildUUID'. * * Returns 'NoMatchingDocument' error code if no document with 'indexBuildUUID' is found. + * + * TODO(SERVER-47635): use this to remove index build entries for the finished index builds from + * system.indexBuilds collection. */ Status removeIndexBuildEntry(OperationContext* opCtx, UUID indexBuildUUID); @@ -120,16 +123,6 @@ Status removeIndexBuildEntry(OperationContext* opCtx, UUID indexBuildUUID); StatusWith<IndexBuildEntry> getIndexBuildEntry(OperationContext* opCtx, UUID indexBuildUUID); /** - * Returns a vector of matching IndexBuildEntries matching the documents with 'collectionUUID' - * from disk. - * - * Can be used to get all the unfinished index builds on the collection if the indexBuildUUID is - * unknown. - */ -StatusWith<std::vector<IndexBuildEntry>> getIndexBuildEntries(OperationContext* opCtx, - UUID collectionUUID); - -/** * Returns the 'commitQuorum' matching the document with 'indexBuildUUID' from disk if it * exists. * @@ -144,48 +137,12 @@ StatusWith<CommitQuorumOptions> getCommitQuorum(OperationContext* opCtx, UUID in * whenever the commit quorum is changed. * * Returns 'NoMatchingDocument' error code if no document with 'indexBuildUUID' is found. - */ -Status setCommitQuorum(OperationContext* opCtx, - UUID indexBuildUUID, - CommitQuorumOptions commitQuorumOptions); - -/** - * Adds 'hostAndPort' to the 'commitReadyMembers' field for the document with 'indexBuildUUID'. - * If the 'hostAndPort' is already in the 'commitReadyMembers' field, nothing is done. - * - * When a replica set member is ready to commit the index build, we need to record this. * - * Returns 'NoMatchingDocument' error code if no document with 'indexBuildUUID' is found. + * Used for testing only. */ -Status addCommitReadyMember(OperationContext* opCtx, UUID indexBuildUUID, HostAndPort hostAndPort); - -/** - * Removes 'hostAndPort' from the 'commitReadyMembers' field for the document with - * 'indexBuildUUID' if it exists. - * - * If a replica set member is removed during a reconfig and it was a commit ready member, we need to - * remove its entry from the 'commitReadyMembers' field. - * - * Returns 'NoMatchingDocument' error code if no document with 'indexBuildUUID' is found. - */ -Status removeCommitReadyMember(OperationContext* opCtx, +Status setCommitQuorum_forTest(OperationContext* opCtx, UUID indexBuildUUID, - HostAndPort hostAndPort); - -/** - * Returns a vector of HostAndPorts of all the 'commitReadyMembers' for the document with - * 'indexBuildUUID'. - * - * Returns 'NoMatchingDocument' error code if no document with 'indexBuildUUID' is found. - */ -StatusWith<std::vector<HostAndPort>> getCommitReadyMembers(OperationContext* opCtx, - UUID indexBuildUUID); - -/** - * Truncates all the documents in the "config.system.indexBuilds" collection. - * Can be used during recovery to remove unfinished index builds to restart them. - */ -Status clearAllIndexBuildEntries(OperationContext* opCtx); + CommitQuorumOptions commitQuorumOptions); } // namespace indexbuildentryhelpers } // namespace mongo diff --git a/src/mongo/db/index_build_entry_helpers_test.cpp b/src/mongo/db/index_build_entry_helpers_test.cpp index 4e58c794429..336819298fd 100644 --- a/src/mongo/db/index_build_entry_helpers_test.cpp +++ b/src/mongo/db/index_build_entry_helpers_test.cpp @@ -148,41 +148,6 @@ TEST_F(IndexBuildEntryHelpersTest, RemoveIndexBuildEntry) { ASSERT_OK(removeIndexBuildEntry(operationContext(), _secondEntry.getBuildUUID())); } -TEST_F(IndexBuildEntryHelpersTest, GetIndexBuildEntries) { - ASSERT_OK(addIndexBuildEntry(operationContext(), _firstEntry)); - ASSERT_OK(addIndexBuildEntry(operationContext(), _secondEntry)); - ASSERT_OK(addIndexBuildEntry(operationContext(), _thirdEntry)); - - // Fail to find a document with an incorrect index build UUID. - StatusWith<IndexBuildEntry> status = getIndexBuildEntry(operationContext(), UUID::gen()); - ASSERT_EQUALS(status.getStatus(), ErrorCodes::NoMatchingDocument); - - // Find a document with the correct index build UUID. - IndexBuildEntry fetchedEntry = - unittest::assertGet(getIndexBuildEntry(operationContext(), _firstEntry.getBuildUUID())); - - checkIfEqual(_firstEntry, fetchedEntry); - - // Search for index build entries by collection UUID. - { - std::vector<IndexBuildEntry> entries = unittest::assertGet( - getIndexBuildEntries(operationContext(), _secondEntry.getCollectionUUID())); - ASSERT_EQ(2U, entries.size()); - } - - { - std::vector<IndexBuildEntry> entries = unittest::assertGet( - getIndexBuildEntries(operationContext(), _thirdEntry.getCollectionUUID())); - ASSERT_EQ(1U, entries.size()); - } - - { - std::vector<IndexBuildEntry> entries = - unittest::assertGet(getIndexBuildEntries(operationContext(), UUID::gen())); - ASSERT_EQ(0U, entries.size()); - } -} - TEST_F(IndexBuildEntryHelpersTest, CommitQuorum) { ASSERT_OK(addIndexBuildEntry(operationContext(), _firstEntry)); @@ -191,7 +156,8 @@ TEST_F(IndexBuildEntryHelpersTest, CommitQuorum) { getCommitQuorum(operationContext(), UUID::gen()); ASSERT_EQUALS(statusWith.getStatus(), ErrorCodes::NoMatchingDocument); - Status status = setCommitQuorum(operationContext(), UUID::gen(), CommitQuorumOptions(1)); + Status status = + setCommitQuorum_forTest(operationContext(), UUID::gen(), CommitQuorumOptions(1)); ASSERT_EQUALS(status.code(), ErrorCodes::NoMatchingDocument); } @@ -201,92 +167,13 @@ TEST_F(IndexBuildEntryHelpersTest, CommitQuorum) { ASSERT_BSONOBJ_EQ(opts.toBSON(), _firstEntry.getCommitQuorum().toBSON()); CommitQuorumOptions newCommitQuorum(0); - ASSERT_OK(setCommitQuorum(operationContext(), _firstEntry.getBuildUUID(), newCommitQuorum)); + ASSERT_OK(setCommitQuorum_forTest( + operationContext(), _firstEntry.getBuildUUID(), newCommitQuorum)); opts = unittest::assertGet(getCommitQuorum(operationContext(), _firstEntry.getBuildUUID())); ASSERT_BSONOBJ_EQ(opts.toBSON(), newCommitQuorum.toBSON()); } } -TEST_F(IndexBuildEntryHelpersTest, CommitReadyMembers) { - ASSERT_OK(addIndexBuildEntry(operationContext(), _firstEntry)); - - HostAndPort first("localhost:27017"); - HostAndPort second("localhost:27018"); - - { - StatusWith<std::vector<HostAndPort>> statusWith = - getCommitReadyMembers(operationContext(), UUID::gen()); - ASSERT_EQUALS(statusWith.getStatus(), ErrorCodes::NoMatchingDocument); - - Status status = addCommitReadyMember(operationContext(), UUID::gen(), first); - ASSERT_EQUALS(status.code(), ErrorCodes::NoMatchingDocument); - - status = removeCommitReadyMember(operationContext(), UUID::gen(), first); - ASSERT_EQUALS(status.code(), ErrorCodes::NoMatchingDocument); - } - - { - std::vector<HostAndPort> entries = unittest::assertGet( - getCommitReadyMembers(operationContext(), _firstEntry.getBuildUUID())); - ASSERT_EQ(entries.size(), 0U); - - ASSERT_OK(addCommitReadyMember(operationContext(), _firstEntry.getBuildUUID(), first)); - ASSERT_OK(addCommitReadyMember(operationContext(), _firstEntry.getBuildUUID(), second)); - - entries = unittest::assertGet( - getCommitReadyMembers(operationContext(), _firstEntry.getBuildUUID())); - ASSERT_EQ(entries.size(), 2U); - ASSERT_EQ(entries.at(0), first); - ASSERT_EQ(entries.at(1), second); - - ASSERT_OK(removeCommitReadyMember(operationContext(), _firstEntry.getBuildUUID(), first)); - entries = unittest::assertGet( - getCommitReadyMembers(operationContext(), _firstEntry.getBuildUUID())); - ASSERT_EQ(entries.size(), 1U); - ASSERT_EQ(entries.at(0), second); - - ASSERT_OK(removeCommitReadyMember(operationContext(), _firstEntry.getBuildUUID(), second)); - } - - { - // Adding the same HostAndPort pair twice should only register it once. - ASSERT_OK(addCommitReadyMember(operationContext(), _firstEntry.getBuildUUID(), first)); - ASSERT_OK(addCommitReadyMember(operationContext(), _firstEntry.getBuildUUID(), first)); - - std::vector<HostAndPort> entries = unittest::assertGet( - getCommitReadyMembers(operationContext(), _firstEntry.getBuildUUID())); - ASSERT_EQ(entries.size(), 1U); - - // Removing HostAndPort pair not in array should have no affect. - ASSERT_OK(removeCommitReadyMember(operationContext(), _firstEntry.getBuildUUID(), second)); - entries = unittest::assertGet( - getCommitReadyMembers(operationContext(), _firstEntry.getBuildUUID())); - ASSERT_EQ(entries.size(), 1U); - } -} - -TEST_F(IndexBuildEntryHelpersTest, ClearAllIndexBuildEntries) { - ASSERT_OK(addIndexBuildEntry(operationContext(), _firstEntry)); - ASSERT_OK(addIndexBuildEntry(operationContext(), _secondEntry)); - ASSERT_OK(addIndexBuildEntry(operationContext(), _thirdEntry)); - - unittest::assertGet(getIndexBuildEntry(operationContext(), _firstEntry.getBuildUUID())); - unittest::assertGet(getIndexBuildEntry(operationContext(), _secondEntry.getBuildUUID())); - unittest::assertGet(getIndexBuildEntry(operationContext(), _thirdEntry.getBuildUUID())); - - ASSERT_OK(clearAllIndexBuildEntries(operationContext())); - - StatusWith<IndexBuildEntry> status = - getIndexBuildEntry(operationContext(), _firstEntry.getBuildUUID()); - ASSERT_EQUALS(status.getStatus(), ErrorCodes::NoMatchingDocument); - - status = getIndexBuildEntry(operationContext(), _secondEntry.getBuildUUID()); - ASSERT_EQUALS(status.getStatus(), ErrorCodes::NoMatchingDocument); - - status = getIndexBuildEntry(operationContext(), _thirdEntry.getBuildUUID()); - ASSERT_EQUALS(status.getStatus(), ErrorCodes::NoMatchingDocument); -} - } // namespace } // namespace mongo |