diff options
author | Ben Caimano <ben.caimano@mongodb.com> | 2019-09-17 13:42:13 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2019-09-17 13:42:13 +0000 |
commit | 9783116c8bd0c3c4414bc0b8b77b2ba629f1c823 (patch) | |
tree | 0a183767c43cdb4f5008a4db2e95bd9ab322fd58 /src | |
parent | a46c2c1a6f69206b2b15f9e2ac366968bd966d54 (diff) | |
download | mongo-9783116c8bd0c3c4414bc0b8b77b2ba629f1c823.tar.gz |
SERVER-42837 Allow waitInFindBeforeBatch FailPoint to take data.nss parameter
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/commands/find_cmd.cpp | 8 | ||||
-rw-r--r-- | src/mongo/db/commands/index_filter_commands.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/exec/multi_plan.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/query/SConscript | 3 | ||||
-rw-r--r-- | src/mongo/db/query/canonical_query.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/query/find.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/query/find_common.cpp | 21 | ||||
-rw-r--r-- | src/mongo/db/query/find_common.h | 10 | ||||
-rw-r--r-- | src/mongo/s/query/cluster_find.cpp | 3 |
9 files changed, 43 insertions, 18 deletions
diff --git a/src/mongo/db/commands/find_cmd.cpp b/src/mongo/db/commands/find_cmd.cpp index 88705768bcc..2711ee95da9 100644 --- a/src/mongo/db/commands/find_cmd.cpp +++ b/src/mongo/db/commands/find_cmd.cpp @@ -37,7 +37,6 @@ #include "mongo/db/commands.h" #include "mongo/db/commands/run_aggregate.h" #include "mongo/db/commands/test_commands_enabled.h" -#include "mongo/db/curop_failpoint_helpers.h" #include "mongo/db/cursor_manager.h" #include "mongo/db/db_raii.h" #include "mongo/db/exec/working_set_common.h" @@ -444,12 +443,7 @@ public: return; } - CurOpFailpointHelpers::waitWhileFailPointEnabled(&waitInFindBeforeMakingBatch, - opCtx, - "waitInFindBeforeMakingBatch", - []() {}, - false, - nss); + FindCommon::waitInFindBeforeMakingBatch(opCtx, *exec->getCanonicalQuery()); const QueryRequest& originalQR = exec->getCanonicalQuery()->getQueryRequest(); diff --git a/src/mongo/db/commands/index_filter_commands.cpp b/src/mongo/db/commands/index_filter_commands.cpp index de26b32142b..98ba9a5c66e 100644 --- a/src/mongo/db/commands/index_filter_commands.cpp +++ b/src/mongo/db/commands/index_filter_commands.cpp @@ -266,7 +266,7 @@ Status ClearFilters::clear(OperationContext* opCtx, // Remove entry from plan cache planCache->remove(*cq).transitional_ignore(); - LOG(0) << "Removed index filter on " << ns << " " << redact(cq->toStringShort()); + LOG(0) << "Removed index filter on " << redact(cq->toStringShort()); return Status::OK(); } @@ -399,8 +399,7 @@ Status SetFilter::set(OperationContext* opCtx, // Remove entry from plan cache. planCache->remove(*cq).transitional_ignore(); - LOG(0) << "Index filter set on " << ns << " " << redact(cq->toStringShort()) << " " - << indexesElt; + LOG(0) << "Index filter set on " << redact(cq->toStringShort()) << " " << indexesElt; return Status::OK(); } diff --git a/src/mongo/db/exec/multi_plan.cpp b/src/mongo/db/exec/multi_plan.cpp index 425a37087ff..24ee575a541 100644 --- a/src/mongo/db/exec/multi_plan.cpp +++ b/src/mongo/db/exec/multi_plan.cpp @@ -269,7 +269,7 @@ Status MultiPlanStage::pickBestPlan(PlanYieldPolicy* yieldPolicy) { size_t runnerUpIdx = ranking->candidateOrder[1]; LOG(1) << "Winning plan tied with runner-up. Not caching." - << " ns: " << collection()->ns() << " " << redact(_query->toStringShort()) + << " query: " << redact(_query->toStringShort()) << " winner score: " << ranking->scores[0] << " winner summary: " << Explain::getPlanSummary(_candidates[winnerIdx].root) << " runner-up score: " << ranking->scores[1] << " runner-up summary: " @@ -283,7 +283,7 @@ Status MultiPlanStage::pickBestPlan(PlanYieldPolicy* yieldPolicy) { size_t winnerIdx = ranking->candidateOrder[0]; LOG(1) << "Winning plan had zero results. Not caching." - << " ns: " << collection()->ns() << " " << redact(_query->toStringShort()) + << " query: " << redact(_query->toStringShort()) << " winner score: " << ranking->scores[0] << " winner summary: " << Explain::getPlanSummary(_candidates[winnerIdx].root); } diff --git a/src/mongo/db/query/SConscript b/src/mongo/db/query/SConscript index 774678220d1..4c526ba5845 100644 --- a/src/mongo/db/query/SConscript +++ b/src/mongo/db/query/SConscript @@ -107,6 +107,9 @@ env.Library( "query_planner", "query_request", ], + LIBDEPS_PRIVATE=[ + '$BUILD_DIR/mongo/db/curop_failpoint_helpers', + ], ) env.Library( diff --git a/src/mongo/db/query/canonical_query.cpp b/src/mongo/db/query/canonical_query.cpp index ff77f314fa2..085a5abaec8 100644 --- a/src/mongo/db/query/canonical_query.cpp +++ b/src/mongo/db/query/canonical_query.cpp @@ -457,8 +457,8 @@ std::string CanonicalQuery::toString() const { std::string CanonicalQuery::toStringShort() const { str::stream ss; - ss << "query: " << _qr->getFilter().toString() << " sort: " << _qr->getSort().toString() - << " projection: " << _qr->getProj().toString(); + ss << "ns: " << _qr->nss().ns() << " query: " << _qr->getFilter().toString() + << " sort: " << _qr->getSort().toString() << " projection: " << _qr->getProj().toString(); if (!_qr->getCollation().isEmpty()) { ss << " collation: " << _qr->getCollation().toString(); diff --git a/src/mongo/db/query/find.cpp b/src/mongo/db/query/find.cpp index d01fd699726..9ac91cb8768 100644 --- a/src/mongo/db/query/find.cpp +++ b/src/mongo/db/query/find.cpp @@ -657,8 +657,7 @@ std::string runQuery(OperationContext* opCtx, } opCtx->checkForInterrupt(); // May trigger maxTimeAlwaysTimeOut fail point. - CurOpFailpointHelpers::waitWhileFailPointEnabled( - &waitInFindBeforeMakingBatch, opCtx, "waitInFindBeforeMakingBatch"); + FindCommon::waitInFindBeforeMakingBatch(opCtx, *exec->getCanonicalQuery()); // Run the query. // bb is used to hold query results diff --git a/src/mongo/db/query/find_common.cpp b/src/mongo/db/query/find_common.cpp index a6c17f0158e..33de26862c9 100644 --- a/src/mongo/db/query/find_common.cpp +++ b/src/mongo/db/query/find_common.cpp @@ -27,14 +27,19 @@ * it in the license file. */ +#define MONGO_LOG_DEFAULT_COMPONENT ::mongo::logger::LogComponent::kQuery + #include "mongo/platform/basic.h" #include "mongo/db/query/find_common.h" #include "mongo/bson/bsonobj.h" #include "mongo/db/curop.h" +#include "mongo/db/curop_failpoint_helpers.h" +#include "mongo/db/query/canonical_query.h" #include "mongo/db/query/query_request.h" #include "mongo/util/assert_util.h" +#include "mongo/util/log.h" namespace mongo { @@ -89,4 +94,20 @@ BSONObj FindCommon::transformSortSpec(const BSONObj& sortSpec) { return comparatorBob.obj(); } + +void FindCommon::waitInFindBeforeMakingBatch(OperationContext* opCtx, const CanonicalQuery& cq) { + auto whileWaitingFunc = [&, hasLogged = false]() mutable { + if (!std::exchange(hasLogged, true)) { + log() << "Waiting in find before making batch for query - " + << redact(cq.toStringShort()); + } + }; + + CurOpFailpointHelpers::waitWhileFailPointEnabled(&mongo::waitInFindBeforeMakingBatch, + opCtx, + "waitInFindBeforeMakingBatch", + std::move(whileWaitingFunc), + /* checkForInterrupt = */ false, + cq.nss()); +} } // namespace mongo diff --git a/src/mongo/db/query/find_common.h b/src/mongo/db/query/find_common.h index b46629409b7..14515224326 100644 --- a/src/mongo/db/query/find_common.h +++ b/src/mongo/db/query/find_common.h @@ -53,6 +53,7 @@ struct AwaitDataState { extern const OperationContext::Decoration<AwaitDataState> awaitDataState; class BSONObj; +class CanonicalQuery; class QueryRequest; // Failpoint for making find hang. @@ -125,6 +126,15 @@ public: * meta-sort specification). */ static BSONObj transformSortSpec(const BSONObj& sortSpec); + + /** + * This function wraps waitWhileFailPointEnabled() on waitInFindBeforeMakingBatch. + * + * Since query processing happens in three different places, this function makes it easier to + * check the failpoint for a query's namespace and log a helpful diagnostic message when the + * failpoint is active. + */ + static void waitInFindBeforeMakingBatch(OperationContext* opCtx, const CanonicalQuery& cq); }; } // namespace mongo diff --git a/src/mongo/s/query/cluster_find.cpp b/src/mongo/s/query/cluster_find.cpp index cbc0d09d368..567110ae134 100644 --- a/src/mongo/s/query/cluster_find.cpp +++ b/src/mongo/s/query/cluster_find.cpp @@ -289,8 +289,7 @@ CursorId runQueryWithoutRetrying(OperationContext* opCtx, // Retrieve enough data from the ClusterClientCursor for the first batch of results. - CurOpFailpointHelpers::waitWhileFailPointEnabled( - &waitInFindBeforeMakingBatch, opCtx, "waitInFindBeforeMakingBatch"); + FindCommon::waitInFindBeforeMakingBatch(opCtx, query); auto cursorState = ClusterCursorManager::CursorState::NotExhausted; int bytesBuffered = 0; |