mirror of https://github.com/mongodb/mongo
SERVER-83155 Modularize query_settings code
This commit is contained in:
parent
ecde936ada
commit
c486e70174
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
],
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
],
|
||||
)
|
||||
|
|
@ -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:
|
||||
|
|
@ -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 {
|
||||
|
||||
|
|
@ -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 {
|
||||
|
||||
|
|
@ -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 =
|
||||
|
|
@ -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"
|
||||
|
|
@ -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"
|
||||
|
|
@ -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 {
|
||||
|
||||
/**
|
||||
|
|
@ -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 {
|
||||
|
||||
/**
|
||||
|
|
@ -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"
|
||||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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)};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue