SERVER-83155 Modularize query_settings code

This commit is contained in:
Denis Grebennicov 2023-11-17 19:22:05 +00:00 committed by Evergreen Agent
parent ecde936ada
commit c486e70174
45 changed files with 161 additions and 187 deletions

View File

@ -1656,7 +1656,7 @@ execEnv.Library(
'query/query_common',
'query/query_plan_cache',
'query/query_planner',
'query/query_settings',
'query/query_settings/query_settings',
'repl/repl_coordinator_interface',
'session/logical_session_cache',
'shard_filterer',
@ -1831,7 +1831,7 @@ env.Library(
'query/collation/collator_interface',
'query/datetime/date_time_support',
'query/query_knobs',
'query/query_settings',
'query/query_settings/query_settings',
'query/query_shape/query_shape_common',
'sbe_values',
'stats/counters',
@ -2590,7 +2590,7 @@ env.Library(
'periodic_runner_job_abort_expired_transactions',
'pipeline/change_stream_expired_pre_image_remover',
'pipeline/process_interface/mongod_process_interface_factory',
'query/query_settings_manager',
'query/query_settings/manager',
'query/stats/stats',
'repl/drop_pending_collection_reaper',
'repl/initial_syncer',

View File

@ -596,7 +596,7 @@ env.Library(
'$BUILD_DIR/mongo/db/collection_index_usage_tracker',
'$BUILD_DIR/mongo/db/fts/base_fts',
'$BUILD_DIR/mongo/db/query/query_planner',
'$BUILD_DIR/mongo/db/query/query_settings',
'$BUILD_DIR/mongo/db/query/query_settings/query_settings',
'$BUILD_DIR/mongo/db/query/query_stats/query_stats',
'$BUILD_DIR/mongo/db/server_base',
'$BUILD_DIR/mongo/db/service_context',

View File

@ -139,8 +139,8 @@ env.Library(
'$BUILD_DIR/mongo/db/dbdirectclient',
'$BUILD_DIR/mongo/db/query/canonical_query',
'$BUILD_DIR/mongo/db/query/query_plan_cache',
'$BUILD_DIR/mongo/db/query/query_settings_manager',
'$BUILD_DIR/mongo/db/query/query_settings_utils',
'$BUILD_DIR/mongo/db/query/query_settings/manager',
'$BUILD_DIR/mongo/db/query/query_settings/utils',
'$BUILD_DIR/mongo/db/query/query_shape/query_shape',
'$BUILD_DIR/mongo/util/namespace_string_database_name_util',
'set_cluster_parameter_impl',
@ -516,7 +516,7 @@ env.Library(
'$BUILD_DIR/mongo/db/pipeline/process_interface/mongod_process_interfaces',
'$BUILD_DIR/mongo/db/query/command_request_response',
'$BUILD_DIR/mongo/db/query/cursor_response_idl',
'$BUILD_DIR/mongo/db/query/query_settings_manager',
'$BUILD_DIR/mongo/db/query/query_settings/manager',
'$BUILD_DIR/mongo/db/query/query_shape/query_shape',
'$BUILD_DIR/mongo/db/query/query_stats/query_stats',
'$BUILD_DIR/mongo/db/query/stats/stats',

View File

@ -76,7 +76,7 @@
#include "mongo/db/query/plan_executor.h"
#include "mongo/db/query/plan_explainer.h"
#include "mongo/db/query/plan_summary_stats.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/query/view_response_formatter.h"
#include "mongo/db/read_concern_support_result.h"
#include "mongo/db/repl/read_concern_level.h"

View File

@ -85,7 +85,7 @@
#include "mongo/db/query/plan_explainer.h"
#include "mongo/db/query/plan_summary_stats.h"
#include "mongo/db/query/query_planner_params.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/query/view_response_formatter.h"
#include "mongo/db/read_concern_support_result.h"
#include "mongo/db/repl/read_concern_args.h"

View File

@ -83,7 +83,7 @@
#include "mongo/db/query/find_command_gen.h"
#include "mongo/db/query/get_executor.h"
#include "mongo/db/query/plan_yield_policy.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/repl/repl_client_info.h"
#include "mongo/db/repl/replication_coordinator.h"
#include "mongo/db/s/collection_sharding_state.h"

View File

@ -99,7 +99,7 @@
#include "mongo/db/query/plan_executor.h"
#include "mongo/db/query/plan_explainer.h"
#include "mongo/db/query/query_request_helper.h"
#include "mongo/db/query/query_settings_manager.h"
#include "mongo/db/query/query_settings/query_settings_utils.h"
#include "mongo/db/query/query_shape/query_shape.h"
#include "mongo/db/query/query_shape/serialization_options.h"
#include "mongo/db/query/query_stats/find_key_generator.h"
@ -193,47 +193,16 @@ void beginQueryOp(OperationContext* opCtx, const NamespaceString& nss, const BSO
curOp->setNS_inlock(nss);
}
/**
* Performs the lookup for the QuerySettings given the 'parsedRequest'.
*/
// TODO: SERVER-73632 Remove Feature Flag for PM-635.
// Remove query settings lookup as it is only done on mongos.
query_settings::QuerySettings lookupQuerySettingsForFind(
boost::intrusive_ptr<ExpressionContext> expCtx,
const ParsedFindCommand& parsedRequest,
const CollectionPtr& collection,
const NamespaceString& nss) {
auto opCtx = expCtx->opCtx;
// TODO: SERVER-73632 Remove Feature Flag for PM-635.
// Remove query settings lookup as it is only done on mongos.
if (ShardingState::get(opCtx)->enabled()) {
return parsedRequest.findCommandRequest->getQuerySettings().get_value_or({});
}
// No QuerySettings lookup for IDHACK queries.
if (!feature_flags::gFeatureFlagQuerySettings.isEnabled(
serverGlobalParams.featureCompatibility.acquireFCVSnapshot()) ||
(collection &&
isIdHackEligibleQuery(
collection, *parsedRequest.findCommandRequest, parsedRequest.collator.get()))) {
return query_settings::QuerySettings();
}
auto& manager = query_settings::QuerySettingsManager::get(opCtx);
auto queryShapeHashFn = [&]() {
auto& opDebug = CurOp::get(opCtx)->debug();
if (opDebug.queryStatsKey) {
return opDebug.queryStatsKey->getQueryShapeHash(
opCtx, parsedRequest.findCommandRequest->getSerializationContext());
}
return std::make_unique<query_shape::FindCmdShape>(parsedRequest, expCtx)
->sha256Hash(opCtx, parsedRequest.findCommandRequest->getSerializationContext());
};
// Return the found query settings or an empty one.
return manager.getQuerySettingsForQueryShapeHash(opCtx, queryShapeHashFn, nss)
.get_value_or({})
.first;
return ShardingState::get(opCtx)->enabled()
? parsedRequest.findCommandRequest->getQuerySettings().get_value_or({})
: query_settings::lookupForFind(expCtx, parsedRequest, nss);
}
/**
@ -276,7 +245,7 @@ std::unique_ptr<CanonicalQuery> parseQueryAndBeginOperation(
/*requiresFullQueryStatsFeatureFlag*/ false);
}
expCtx->setQuerySettings(lookupQuerySettingsForFind(expCtx, *parsedRequest, collection, nss));
expCtx->setQuerySettings(lookupQuerySettingsForFind(expCtx, *parsedRequest, nss));
return std::make_unique<CanonicalQuery>(CanonicalQueryParams{
.expCtx = std::move(expCtx),
.parsedFind = std::move(parsedRequest),
@ -460,9 +429,7 @@ public:
.extensionsCallback = ExtensionsCallbackReal(opCtx, &nss),
.allowedFeatures = MatchExpressionParser::kAllowAllSpecialFeatures}));
auto querySettings =
lookupQuerySettingsForFind(expCtx, *parsedRequest, collectionPtr, nss);
expCtx->setQuerySettings(std::move(querySettings));
expCtx->setQuerySettings(lookupQuerySettingsForFind(expCtx, *parsedRequest, nss));
auto cq = std::make_unique<CanonicalQuery>(
CanonicalQueryParams{.expCtx = std::move(expCtx),
.parsedFind = std::move(parsedRequest),

View File

@ -37,10 +37,10 @@
#include "mongo/db/commands/set_cluster_parameter_command_impl.h"
#include "mongo/db/commands/set_cluster_parameter_invocation.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/query/query_settings_cluster_parameter_gen.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings_manager.h"
#include "mongo/db/query/query_settings_utils.h"
#include "mongo/db/query/query_settings/query_settings_cluster_parameter_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_manager.h"
#include "mongo/db/query/query_settings/query_settings_utils.h"
#include "mongo/db/query/query_shape/query_shape.h"
#include "mongo/db/query/sbe_plan_cache.h"
#include "mongo/platform/basic.h"

View File

@ -33,7 +33,7 @@ imports:
- "mongo/db/auth/access_checks.idl"
- "mongo/db/auth/action_type.idl"
- "mongo/db/basic_types.idl"
- "mongo/db/query/query_settings.idl"
- "mongo/db/query/query_settings/query_settings.idl"
- "mongo/db/query/query_shape/query_shape_hash.idl"
structs:

View File

@ -82,7 +82,7 @@
#include "mongo/db/query/explain_options.h"
#include "mongo/db/query/get_executor.h"
#include "mongo/db/query/plan_yield_policy.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/repl/repl_client_info.h"
#include "mongo/db/repl/replication_coordinator.h"
#include "mongo/db/server_options.h"

View File

@ -136,7 +136,7 @@
#include "mongo/db/pipeline/change_stream_preimage_gen.h"
#include "mongo/db/pipeline/process_interface/replica_set_node_process_interface.h"
#include "mongo/db/query/query_knobs_gen.h"
#include "mongo/db/query/query_settings_manager.h"
#include "mongo/db/query/query_settings/query_settings_manager.h"
#include "mongo/db/query/stats/stats_cache_loader_impl.h"
#include "mongo/db/query/stats/stats_catalog.h"
#include "mongo/db/read_write_concern_defaults.h"

View File

@ -59,7 +59,7 @@ env.Library(
'$BUILD_DIR/mongo/db/curop_metrics',
'$BUILD_DIR/mongo/db/dbhelpers',
'$BUILD_DIR/mongo/db/introspect',
'$BUILD_DIR/mongo/db/query/query_settings_manager',
'$BUILD_DIR/mongo/db/query/query_settings/manager',
'$BUILD_DIR/mongo/db/query/query_stats/query_stats',
'$BUILD_DIR/mongo/db/record_id_helpers',
'$BUILD_DIR/mongo/db/repl/oplog',

View File

@ -50,7 +50,7 @@
#include "mongo/db/ops/write_ops_exec_util.h"
#include "mongo/db/ops/write_ops_gen.h"
#include "mongo/db/ops/write_ops_parsers.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/repl/oplog.h"
#include "mongo/db/repl/repl_client_info.h"
#include "mongo/db/session/logical_session_id.h"

View File

@ -416,7 +416,7 @@ pipelineEnv.Library(
'$BUILD_DIR/mongo/db/mongohasher',
'$BUILD_DIR/mongo/db/query/optimizer/optimizer',
'$BUILD_DIR/mongo/db/query/projection_ast',
'$BUILD_DIR/mongo/db/query/query_settings_manager',
'$BUILD_DIR/mongo/db/query/query_settings/manager',
'$BUILD_DIR/mongo/db/repl/image_collection_entry',
'$BUILD_DIR/mongo/db/sorter/sorter_idl',
'$BUILD_DIR/mongo/db/sorter/sorter_stats',

View File

@ -49,7 +49,7 @@
#include "mongo/db/query/explain_options.h"
#include "mongo/db/query/find_common.h"
#include "mongo/db/query/query_knobs_gen.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/repl/optime.h"
#include "mongo/db/repl/replication_coordinator.h"
#include "mongo/logv2/log.h"

View File

@ -34,8 +34,8 @@
#include "mongo/db/pipeline/document_source_query_settings_gen.h"
#include "mongo/db/pipeline/document_source_queue.h"
#include "mongo/db/pipeline/lite_parsed_document_source.h"
#include "mongo/db/query/query_settings_manager.h"
#include "mongo/db/query/query_settings_utils.h"
#include "mongo/db/query/query_settings/query_settings_manager.h"
#include "mongo/db/query/query_settings/query_settings_utils.h"
namespace mongo {

View File

@ -67,7 +67,7 @@
#include "mongo/db/query/explain_options.h"
#include "mongo/db/query/find_command.h"
#include "mongo/db/query/query_knobs_gen.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/query/tailable_mode.h"
#include "mongo/db/query/tailable_mode_gen.h"
#include "mongo/db/server_options.h"

View File

@ -15,6 +15,7 @@ env.SConscript(
'cost_model',
'datetime',
'optimizer',
'query_settings',
'query_stats',
'query_shape',
'stats',
@ -140,20 +141,10 @@ env.Library(
'$BUILD_DIR/mongo/db/query_expressions',
'canonical_query',
'memory_util',
'query_settings_utils',
'query_settings/utils',
],
)
env.Library(
target='query_settings_utils', source=[
"query_settings_hash.cpp",
"query_settings_utils.cpp",
], LIBDEPS_PRIVATE=[
'canonical_query',
'query_settings_manager',
"query_shape/query_shape",
])
env.Library(
target='projection_ast',
source=[
@ -178,40 +169,6 @@ env.Library(
],
)
env.Library(
target='query_settings',
source=[
'query_settings.idl',
],
LIBDEPS=[
'$BUILD_DIR/mongo/db/server_base',
'index_hint',
'query_shape/query_shape_hash',
],
)
env.Library(
target='query_settings_manager',
source=[
'query_settings_cluster_parameter.idl',
'query_settings_manager.cpp',
],
LIBDEPS=[
'$BUILD_DIR/mongo/util/namespace_string_database_name_util',
'query_settings',
],
LIBDEPS_PRIVATE=[
'$BUILD_DIR/mongo/crypto/sha256_block',
'$BUILD_DIR/mongo/db/commands/server_status_core',
'$BUILD_DIR/mongo/db/concurrency/exception_util',
'$BUILD_DIR/mongo/db/concurrency/lock_manager',
'$BUILD_DIR/mongo/db/server_base',
'$BUILD_DIR/mongo/db/service_context',
'$BUILD_DIR/mongo/idl/cluster_server_parameter',
'query_knobs',
],
)
env.Library(
target="bucket_predicate_generator",
source=[
@ -346,7 +303,7 @@ env.Library(
LIBDEPS_PRIVATE=[
'$BUILD_DIR/mongo/db/server_base',
'cursor_response_idl',
'query_settings',
'query_settings/query_settings',
],
)
@ -540,9 +497,9 @@ env.CppUnitTest(
"query_planner_tree_test.cpp",
"query_planner_wildcard_index_test.cpp",
"query_request_test.cpp",
"query_settings_manager_test.cpp",
"query_settings_test.cpp",
"query_settings_validation_test.cpp",
"query_settings/query_settings_manager_test.cpp",
"query_settings/query_settings_validation_test.cpp",
"query_solution_test.cpp",
"record_id_range_test.cpp",
"sbe_and_hash_test.cpp",
@ -591,8 +548,7 @@ env.CppUnitTest(
"query_planner",
"query_planner_test_fixture",
"query_request",
"query_settings_manager",
"query_settings_utils",
"query_settings/manager",
"query_shape/query_shape",
"query_test_service_context",
],

View File

@ -53,7 +53,6 @@
#include "mongo/db/query/query_decorations.h"
#include "mongo/db/query/query_knobs_gen.h"
#include "mongo/db/query/query_planner_common.h"
#include "mongo/db/query/query_settings_manager.h"
#include "mongo/db/server_parameter.h"
#include "mongo/logv2/log.h"
#include "mongo/logv2/log_component.h"

View File

@ -59,7 +59,6 @@
#include "mongo/db/query/projection.h"
#include "mongo/db/query/projection_policies.h"
#include "mongo/db/query/query_request_helper.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/sort_pattern.h"
#include "mongo/db/query/stage_types.h"
#include "mongo/util/assert_util.h"

View File

@ -63,7 +63,6 @@
#include "mongo/db/query/plan_summary_stats.h"
#include "mongo/db/query/query_settings.h"
#include "mongo/db/query/query_settings_decoration.h"
#include "mongo/db/query/query_settings_manager.h"
#include "mongo/db/stats/resource_consumption_metrics.h"
#include "mongo/util/assert_util.h"
#include "mongo/util/duration.h"

View File

@ -44,7 +44,7 @@ imports:
- "mongo/db/basic_types.idl"
- "mongo/db/query/cursor_response.idl"
- "mongo/db/query/hint.idl"
- "mongo/db/query/query_settings.idl"
- "mongo/db/query/query_settings/query_settings.idl"
types:
boolNoOpSerializer:

View File

@ -142,9 +142,9 @@
#include "mongo/db/query/query_planner.h"
#include "mongo/db/query/query_planner_common.h"
#include "mongo/db/query/query_planner_params.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_manager.h"
#include "mongo/db/query/query_settings_decoration.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings_manager.h"
#include "mongo/db/query/query_utils.h"
#include "mongo/db/query/sbe_cached_solution_planner.h"
#include "mongo/db/query/sbe_multi_planner.h"

View File

@ -45,7 +45,7 @@
#include "mongo/db/query/collection_query_info.h"
#include "mongo/db/query/plan_cache_key_info.h"
#include "mongo/db/query/planner_ixselect.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/s/operation_sharding_state.h"
#include "mongo/s/chunk_version.h"
#include "mongo/s/shard_version.h"

View File

@ -38,8 +38,8 @@
#include "mongo/base/string_data.h"
#include "mongo/db/query/canonical_query.h"
#include "mongo/db/query/canonical_query_encoder.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings_hash.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_hash.h"
namespace mongo {
/**

View File

@ -0,0 +1,52 @@
# -*- mode: python -*-
Import("env")
env = env.Clone()
env.Library(
target='query_settings',
source=[
'query_settings.idl',
],
LIBDEPS=[
'$BUILD_DIR/mongo/db/query/index_hint',
'$BUILD_DIR/mongo/db/query/query_shape/query_shape_hash',
'$BUILD_DIR/mongo/db/server_base',
],
)
env.Library(
target='manager',
source=[
'query_settings_cluster_parameter.idl',
'query_settings_manager.cpp',
],
LIBDEPS=[
'$BUILD_DIR/mongo/util/namespace_string_database_name_util',
'query_settings',
],
LIBDEPS_PRIVATE=[
'$BUILD_DIR/mongo/crypto/sha256_block',
'$BUILD_DIR/mongo/db/commands/server_status_core',
'$BUILD_DIR/mongo/db/concurrency/exception_util',
'$BUILD_DIR/mongo/db/concurrency/lock_manager',
'$BUILD_DIR/mongo/db/query/query_knobs',
'$BUILD_DIR/mongo/db/server_base',
'$BUILD_DIR/mongo/db/service_context',
'$BUILD_DIR/mongo/idl/cluster_server_parameter',
],
)
env.Library(
target='utils',
source=[
'query_settings_hash.cpp',
'query_settings_utils.cpp',
],
LIBDEPS_PRIVATE=[
'$BUILD_DIR/mongo/db/query/canonical_query',
'$BUILD_DIR/mongo/db/query/query_shape/query_shape',
'manager',
],
)

View File

@ -34,7 +34,7 @@ global:
imports:
- "mongo/db/basic_types.idl"
- "mongo/db/query/query_feature_flags.idl"
- "mongo/db/query/query_settings.idl"
- "mongo/db/query/query_settings/query_settings.idl"
- "mongo/idl/cluster_server_parameter.idl"
structs:

View File

@ -27,7 +27,7 @@
* it in the license file.
*/
#include "mongo/db/query/query_settings_hash.h"
#include "mongo/db/query/query_settings/query_settings_hash.h"
namespace mongo::query_settings {

View File

@ -29,7 +29,7 @@
#pragma once
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
namespace mongo::query_settings {

View File

@ -27,7 +27,7 @@
* it in the license file.
*/
#include "mongo/db/query/query_settings_manager.h"
#include "mongo/db/query/query_settings/query_settings_manager.h"
#include <boost/move/utility_core.hpp>
#include <boost/optional.hpp>
@ -45,8 +45,8 @@
#include "mongo/db/commands/server_status.h"
#include "mongo/db/logical_time.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/query/query_settings_cluster_parameter_gen.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_cluster_parameter_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/service_context.h"
#include "mongo/idl/idl_parser.h"
#include "mongo/util/assert_util.h"
@ -165,6 +165,7 @@ QuerySettingsManager::getQuerySettingsForQueryShapeHash(
OperationContext* opCtx,
const query_shape::QueryShapeHash& queryShapeHash,
const boost::optional<TenantId>& tenantId) const {
Lock::SharedLock readLock(opCtx, _mutex);
// Perform the lookup for namespace string to query settings map maintained for the given
// tenant.
auto queryShapeConfigurationsIt =

View File

@ -45,7 +45,7 @@
#include "mongo/db/logical_time.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/query/query_shape/query_shape.h"
#include "mongo/db/server_parameter.h"
#include "mongo/db/service_context.h"

View File

@ -52,10 +52,10 @@
#include "mongo/db/query/find_command.h"
#include "mongo/db/query/index_hint.h"
#include "mongo/db/query/parsed_find_command.h"
#include "mongo/db/query/query_settings_cluster_parameter_gen.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings_manager.h"
#include "mongo/db/query/query_settings_utils.h"
#include "mongo/db/query/query_settings/query_settings_cluster_parameter_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_manager.h"
#include "mongo/db/query/query_settings/query_settings_utils.h"
#include "mongo/db/query/query_shape/find_cmd_shape.h"
#include "mongo/db/query/query_shape/query_shape.h"
#include "mongo/db/query/query_shape/serialization_options.h"

View File

@ -27,10 +27,11 @@
* it in the license file.
*/
#include "mongo/db/query/query_settings_utils.h"
#include "mongo/db/query/query_settings/query_settings_utils.h"
#include "mongo/db/curop.h"
#include "mongo/db/pipeline/lite_parsed_pipeline.h"
#include "mongo/db/query/query_settings_manager.h"
#include "mongo/db/query/query_settings/query_settings_manager.h"
#include "mongo/db/query/query_shape/agg_cmd_shape.h"
#include "mongo/db/query/query_shape/find_cmd_shape.h"
#include "mongo/db/query/query_utils.h"
@ -163,6 +164,35 @@ RepresentativeQueryInfo createRepresentativeInfo(const BSONObj& cmd,
uasserted(7746402, str::stream() << "QueryShape can not be computed for command: " << cmd);
}
query_settings::QuerySettings lookupForFind(boost::intrusive_ptr<ExpressionContext> expCtx,
const ParsedFindCommand& parsedRequest,
const NamespaceString& nss) {
// No QuerySettings lookup for IDHACK queries.
if (!feature_flags::gFeatureFlagQuerySettings.isEnabled(
serverGlobalParams.featureCompatibility.acquireFCVSnapshot()) ||
isIdHackEligibleQueryWithoutCollator(*parsedRequest.findCommandRequest)) {
return query_settings::QuerySettings();
}
auto opCtx = expCtx->opCtx;
auto& manager = query_settings::QuerySettingsManager::get(opCtx);
auto queryShapeHashFn = [&]() {
auto& opDebug = CurOp::get(opCtx)->debug();
if (opDebug.queryStatsKey) {
return opDebug.queryStatsKey->getQueryShapeHash(
opCtx, parsedRequest.findCommandRequest->getSerializationContext());
}
return std::make_unique<query_shape::FindCmdShape>(parsedRequest, expCtx)
->sha256Hash(opCtx, parsedRequest.findCommandRequest->getSerializationContext());
};
// Return the found query settings or an empty one.
return manager.getQuerySettingsForQueryShapeHash(opCtx, queryShapeHashFn, nss)
.get_value_or({})
.first;
}
namespace utils {
/**

View File

@ -29,7 +29,7 @@
#pragma once
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/query/query_shape/query_shape.h"
#include "mongo/stdx/unordered_set.h"
@ -52,6 +52,13 @@ RepresentativeQueryInfo createRepresentativeInfo(const BSONObj& cmd,
OperationContext* opCtx,
const boost::optional<TenantId>& tenantId);
/**
* Performs the lookup for the QuerySettings given the 'parsedRequest'.
*/
query_settings::QuerySettings lookupForFind(boost::intrusive_ptr<ExpressionContext> expCtx,
const ParsedFindCommand& parsedFind,
const NamespaceString& nss);
namespace utils {
/**

View File

@ -28,8 +28,8 @@
*/
#include "mongo/bson/bsonobj.h"
#include "mongo/db/pipeline/expression_context_for_test.h"
#include "mongo/db/query/query_settings_manager.h"
#include "mongo/db/query/query_settings_utils.h"
#include "mongo/db/query/query_settings/query_settings_manager.h"
#include "mongo/db/query/query_settings/query_settings_utils.h"
#include "mongo/db/service_context_test_fixture.h"
#include "mongo/unittest/assert.h"
#include "mongo/util/serialization_context.h"

View File

@ -584,7 +584,7 @@ env.Library(
'$BUILD_DIR/mongo/db/internal_transactions_feature_flag',
'$BUILD_DIR/mongo/db/multitenancy',
'$BUILD_DIR/mongo/db/pipeline/process_interface/shardsvr_process_interface',
'$BUILD_DIR/mongo/db/query/query_settings_manager',
'$BUILD_DIR/mongo/db/query/query_settings/utils',
'$BUILD_DIR/mongo/db/repl/change_stream_oplog_notification',
'$BUILD_DIR/mongo/db/repl/primary_only_service',
'$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',

View File

@ -146,7 +146,7 @@ env.Program(
"$BUILD_DIR/mongo/db/query/command_request_response",
"$BUILD_DIR/mongo/db/query/query_planner_test_lib",
"$BUILD_DIR/mongo/db/query/query_request",
"$BUILD_DIR/mongo/db/query/query_settings_manager",
"$BUILD_DIR/mongo/db/query/query_settings/manager",
"$BUILD_DIR/mongo/db/query/query_test_service_context",
"$BUILD_DIR/mongo/db/query_exec",
"$BUILD_DIR/mongo/db/repl/drop_pending_collection_reaper",

View File

@ -90,7 +90,7 @@
#include "mongo/db/query/query_planner.h"
#include "mongo/db/query/query_planner_params.h"
#include "mongo/db/query/query_planner_test_lib.h"
#include "mongo/db/query/query_settings_gen.h"
#include "mongo/db/query/query_settings/query_settings_gen.h"
#include "mongo/db/query/query_solution.h"
#include "mongo/db/query/stage_builder_util.h"
#include "mongo/db/query/stage_types.h"

View File

@ -114,7 +114,7 @@ env.CppUnitTest(
'$BUILD_DIR/mongo/db/change_stream_options_manager',
'$BUILD_DIR/mongo/db/commands/create_command',
'$BUILD_DIR/mongo/db/op_observer/op_observer',
'$BUILD_DIR/mongo/db/query/query_settings_manager',
'$BUILD_DIR/mongo/db/query/query_settings/manager',
'$BUILD_DIR/mongo/db/repl/oplog',
'$BUILD_DIR/mongo/db/repl/oplog_interface_local',
'$BUILD_DIR/mongo/db/repl/replmocks',

View File

@ -40,7 +40,7 @@
#include "mongo/db/dbdirectclient.h"
#include "mongo/db/logical_time.h"
#include "mongo/db/multitenancy_gen.h"
#include "mongo/db/query/query_settings_manager.h"
#include "mongo/db/query/query_settings/query_settings_manager.h"
#include "mongo/db/repl/member_state.h"
#include "mongo/db/repl/oplog.h"
#include "mongo/db/repl/repl_settings.h"

View File

@ -541,7 +541,7 @@ env.Library(
'$BUILD_DIR/mongo/db/commands/rwc_defaults_commands',
'$BUILD_DIR/mongo/db/ftdc/ftdc_mongos',
'$BUILD_DIR/mongo/db/process_health/fault_manager',
'$BUILD_DIR/mongo/db/query/query_settings_manager',
'$BUILD_DIR/mongo/db/query/query_settings/manager',
'$BUILD_DIR/mongo/db/read_write_concern_defaults',
'$BUILD_DIR/mongo/db/serverinit',
'$BUILD_DIR/mongo/db/serverless/multitenancy_check',

View File

@ -158,7 +158,7 @@ env.Library(
'$BUILD_DIR/mongo/db/query/command_request_response',
'$BUILD_DIR/mongo/db/query/cursor_response_idl',
'$BUILD_DIR/mongo/db/query/map_reduce_output_format',
'$BUILD_DIR/mongo/db/query/query_settings_manager',
'$BUILD_DIR/mongo/db/query/query_settings/utils',
'$BUILD_DIR/mongo/db/query/query_shape/query_shape',
'$BUILD_DIR/mongo/db/read_write_concern_defaults',
'$BUILD_DIR/mongo/db/repl/hello_auth',

View File

@ -40,8 +40,7 @@
#include "mongo/db/matcher/extensions_callback_noop.h"
#include "mongo/db/pipeline/query_request_conversion.h"
#include "mongo/db/query/cursor_response.h"
#include "mongo/db/query/query_settings_manager.h"
#include "mongo/db/query/query_settings_utils.h"
#include "mongo/db/query/query_settings/query_settings_utils.h"
#include "mongo/db/query/query_shape/query_shape.h"
#include "mongo/db/query/query_stats/find_key_generator.h"
#include "mongo/db/query/query_stats/query_stats.h"
@ -58,42 +57,6 @@
namespace mongo {
namespace {
/**
* Performs the lookup for the QuerySettings given the 'parsedRequest'.
*/
query_settings::QuerySettings lookupQuerySettingsForFind(
boost::intrusive_ptr<ExpressionContext> expCtx,
const ParsedFindCommand& parsedRequest,
const NamespaceString& nss) {
// No QuerySettings lookup for IDHACK queries.
if (!feature_flags::gFeatureFlagQuerySettings.isEnabled(
serverGlobalParams.featureCompatibility.acquireFCVSnapshot()) ||
isIdHackEligibleQueryWithoutCollator(*parsedRequest.findCommandRequest)) {
return query_settings::QuerySettings();
}
auto opCtx = expCtx->opCtx;
auto& manager = query_settings::QuerySettingsManager::get(opCtx);
auto queryShapeHashFn = [&]() {
auto& opDebug = CurOp::get(opCtx)->debug();
if (opDebug.queryStatsKey) {
return opDebug.queryStatsKey->getQueryShapeHash(
opCtx, parsedRequest.findCommandRequest->getSerializationContext());
}
return std::make_unique<query_shape::FindCmdShape>(parsedRequest, expCtx)
->sha256Hash(opCtx, parsedRequest.findCommandRequest->getSerializationContext());
};
// Return the found query settings or an empty one.
return manager.getQuerySettingsForQueryShapeHash(opCtx, queryShapeHashFn, nss)
.get_value_or({})
.first;
}
} // namespace
/**
* Implements the find command for a router.
*/
@ -362,7 +325,8 @@ public:
.allowedFeatures = MatchExpressionParser::kAllowAllSpecialFeatures}));
// Look up the query settings and attach them to the ExpressionContext.
expCtx->setQuerySettings(lookupQuerySettingsForFind(expCtx, *parsedFind, expCtx->ns));
expCtx->setQuerySettings(
query_settings::lookupForFind(expCtx, *parsedFind, expCtx->ns));
return {std::move(expCtx), std::move(parsedFind)};
}

View File

@ -77,7 +77,7 @@
#include "mongo/db/logical_time_validator.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/process_health/fault_manager.h"
#include "mongo/db/query/query_settings_manager.h"
#include "mongo/db/query/query_settings/query_settings_manager.h"
#include "mongo/db/read_write_concern_defaults.h"
#include "mongo/db/server_options.h"
#include "mongo/db/serverless/multitenancy_check.h"