summaryrefslogtreecommitdiff
path: root/src/mongo/db
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2020-04-18 11:13:53 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-04-18 15:25:38 +0000
commit8baf8f1b16ead433c35d7b705d86725da6c7c4ff (patch)
treeeb1c9e05527250af1246029faed20a6cd695fb97 /src/mongo/db
parent321cb6f478bd1969ef4c7a90b210a21272354f41 (diff)
downloadmongo-8baf8f1b16ead433c35d7b705d86725da6c7c4ff.tar.gz
SERVER-47465 remove unused functions from indexbuildentryhelpers namespace
Diffstat (limited to 'src/mongo/db')
-rw-r--r--src/mongo/db/SConscript5
-rw-r--r--src/mongo/db/index_build_entry_helpers.cpp163
-rw-r--r--src/mongo/db/index_build_entry_helpers.h55
-rw-r--r--src/mongo/db/index_build_entry_helpers_test.cpp121
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