diff --git a/BUILD b/BUILD index f2f14d860d9..8d2f9fe4833 100644 --- a/BUILD +++ b/BUILD @@ -1134,6 +1134,7 @@ grpc_cc_library( "gpr", "grpc_resolver", "handshaker_registry", + "lb_policy_registry", "service_config_parser", ], ) @@ -1803,6 +1804,7 @@ grpc_cc_library( "handshaker_factory", "handshaker_registry", "iomgr_fwd", + "pollset_set", "ref_counted_ptr", "resolved_address", "slice", @@ -2852,6 +2854,20 @@ grpc_cc_library( ], ) +grpc_cc_library( + name = "pollset_set", + srcs = [ + "src/core/lib/iomgr/pollset_set.cc", + ], + hdrs = [ + "src/core/lib/iomgr/pollset_set.h", + ], + deps = [ + "gpr", + "iomgr_fwd", + ], +) + grpc_cc_library( name = "grpc_base", srcs = [ @@ -2902,7 +2918,6 @@ grpc_cc_library( "src/core/lib/iomgr/lockfree_event.cc", "src/core/lib/iomgr/polling_entity.cc", "src/core/lib/iomgr/pollset.cc", - "src/core/lib/iomgr/pollset_set.cc", "src/core/lib/iomgr/pollset_set_windows.cc", "src/core/lib/iomgr/pollset_windows.cc", "src/core/lib/iomgr/resolve_address.cc", @@ -3008,7 +3023,6 @@ grpc_cc_library( "src/core/lib/iomgr/nameser.h", "src/core/lib/iomgr/polling_entity.h", "src/core/lib/iomgr/pollset.h", - "src/core/lib/iomgr/pollset_set.h", "src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/python_util.h", @@ -3129,6 +3143,7 @@ grpc_cc_library( "orphanable", "percent_encoding", "poll", + "pollset_set", "promise", "ref_counted", "ref_counted_ptr", @@ -3432,14 +3447,18 @@ grpc_cc_library( "absl/types:variant", ], deps = [ + "channel_args", + "closure", "debug_location", + "error", + "exec_ctx", "gpr_platform", "grpc_backend_metric_data", - "grpc_base", "grpc_codegen", "grpc_trace", "iomgr_fwd", "orphanable", + "pollset_set", "ref_counted", "ref_counted_ptr", "server_address", @@ -3489,8 +3508,8 @@ grpc_cc_library( hdrs = ["src/core/lib/load_balancing/subchannel_interface.h"], external_deps = ["absl/status"], deps = [ - "gpr", - "grpc_base", + "channel_args", + "gpr_platform", "grpc_codegen", "iomgr_fwd", "ref_counted", @@ -3598,6 +3617,7 @@ grpc_cc_library( "lb_policy_registry", "memory_quota", "orphanable", + "pollset_set", "protobuf_duration_upb", "ref_counted", "ref_counted_ptr", @@ -4057,6 +4077,7 @@ grpc_cc_library( "lb_policy_factory", "lb_policy_registry", "orphanable", + "pollset_set", "protobuf_duration_upb", "protobuf_timestamp_upb", "ref_counted", @@ -4122,6 +4143,7 @@ grpc_cc_library( "lb_policy_factory", "lb_policy_registry", "orphanable", + "pollset_set", "ref_counted_ptr", "rls_upb", "server_address", @@ -4277,6 +4299,7 @@ grpc_cc_library( "lb_policy_registry", "match", "orphanable", + "pollset_set", "protobuf_any_upb", "protobuf_duration_upb", "protobuf_struct_upb", @@ -4431,6 +4454,7 @@ grpc_cc_library( ], language = "c++", deps = [ + "config", "debug_location", "gpr", "grpc_base", @@ -4446,6 +4470,7 @@ grpc_cc_library( "lb_policy_factory", "lb_policy_registry", "orphanable", + "pollset_set", "ref_counted_ptr", "server_address", "subchannel_interface", @@ -4513,6 +4538,7 @@ grpc_cc_library( "lb_policy_factory", "lb_policy_registry", "orphanable", + "pollset_set", "ref_counted_ptr", "server_address", "subchannel_interface", @@ -4537,6 +4563,7 @@ grpc_cc_library( language = "c++", deps = [ "channel_args", + "config", "debug_location", "gpr", "grpc_base", @@ -4551,6 +4578,7 @@ grpc_cc_library( "lb_policy_factory", "lb_policy_registry", "orphanable", + "pollset_set", "ref_counted", "ref_counted_ptr", "server_address", @@ -4573,6 +4601,7 @@ grpc_cc_library( deps = [ "channel_args", "closure", + "config", "debug_location", "exec_ctx", "gpr", @@ -4587,6 +4616,7 @@ grpc_cc_library( "lb_policy_factory", "lb_policy_registry", "orphanable", + "pollset_set", "ref_counted", "ref_counted_ptr", "server_address", @@ -4655,6 +4685,7 @@ grpc_cc_library( language = "c++", deps = [ "channel_args", + "config", "debug_location", "gpr", "grpc_base", @@ -4693,6 +4724,7 @@ grpc_cc_library( language = "c++", deps = [ "closure", + "config", "debug_location", "exec_ctx", "gpr", @@ -4729,6 +4761,7 @@ grpc_cc_library( ], language = "c++", deps = [ + "config", "debug_location", "gpr", "grpc_base", @@ -4776,6 +4809,7 @@ grpc_cc_library( deps = [ "channel_args", "closure", + "config", "debug_location", "exec_ctx", "gpr", @@ -4792,6 +4826,7 @@ grpc_cc_library( "lb_policy_factory", "lb_policy_registry", "orphanable", + "pollset_set", "ref_counted", "ref_counted_ptr", "server_address", @@ -4817,6 +4852,7 @@ grpc_cc_library( deps = [ "channel_args", "closure", + "config", "debug_location", "exec_ctx", "gpr", @@ -4831,6 +4867,7 @@ grpc_cc_library( "lb_policy_factory", "lb_policy_registry", "orphanable", + "pollset_set", "ref_counted", "ref_counted_ptr", "server_address", @@ -4855,6 +4892,7 @@ grpc_cc_library( language = "c++", deps = [ "channel_args", + "config", "debug_location", "default_event_engine", "gpr", @@ -4868,6 +4906,7 @@ grpc_cc_library( "lb_policy_factory", "lb_policy_registry", "orphanable", + "pollset_set", "ref_counted", "ref_counted_ptr", "server_address", @@ -5167,6 +5206,7 @@ grpc_cc_library( "json", "orphanable", "polling_resolver", + "pollset_set", "ref_counted_ptr", "resolved_address", "server_address", @@ -5309,6 +5349,7 @@ grpc_cc_library( "iomgr_fwd", "match", "orphanable", + "pollset_set", "ref_counted_ptr", "server_address", "time", @@ -5389,6 +5430,7 @@ grpc_cc_library( "handshaker_registry", "iomgr_fwd", "orphanable", + "pollset_set", "ref_counted_ptr", "resolved_address", "resource_quota", @@ -5690,6 +5732,7 @@ grpc_cc_library( "grpc_ssl_credentials", "grpc_trace", "httpcli", + "iomgr_fwd", "json", "ref_counted_ptr", "slice_refcount", @@ -5819,6 +5862,7 @@ grpc_cc_library( "grpc_trace", "httpcli", "httpcli_ssl_credentials", + "iomgr_fwd", "json", "orphanable", "promise", @@ -5864,6 +5908,7 @@ grpc_cc_library( "json", "orphanable", "poll", + "pollset_set", "promise", "ref_counted", "ref_counted_ptr", @@ -6630,6 +6675,7 @@ grpc_cc_library( "iomgr_timer", "memory_quota", "orphanable", + "pollset_set", "ref_counted_ptr", "resolved_address", "resource_quota", diff --git a/src/core/ext/filters/client_channel/client_channel.cc b/src/core/ext/filters/client_channel/client_channel.cc index 09b84deba19..62e9bc29943 100644 --- a/src/core/ext/filters/client_channel/client_channel.cc +++ b/src/core/ext/filters/client_channel/client_channel.cc @@ -1112,8 +1112,9 @@ RefCountedPtr ChooseLbPolicy( policy_name = resolver_result.args.GetString(GRPC_ARG_LB_POLICY_NAME); bool requires_config = false; if (policy_name.has_value() && - (!LoadBalancingPolicyRegistry::LoadBalancingPolicyExists( - *policy_name, &requires_config) || + (!CoreConfiguration::Get() + .lb_policy_registry() + .LoadBalancingPolicyExists(*policy_name, &requires_config) || requires_config)) { if (requires_config) { gpr_log(GPR_ERROR, @@ -1137,7 +1138,8 @@ RefCountedPtr ChooseLbPolicy( {std::string(*policy_name), Json::Object{}}, }}; auto lb_policy_config = - LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(config_json); + CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig( + config_json); // The policy name came from one of three places: // - The deprecated loadBalancingPolicy field in the service config, // in which case the code in ClientChannelServiceConfigParser diff --git a/src/core/ext/filters/client_channel/client_channel_plugin.cc b/src/core/ext/filters/client_channel/client_channel_plugin.cc index 6864f9f8903..b767ab66763 100644 --- a/src/core/ext/filters/client_channel/client_channel_plugin.cc +++ b/src/core/ext/filters/client_channel/client_channel_plugin.cc @@ -26,12 +26,10 @@ #include "src/core/ext/filters/client_channel/retry_service_config.h" #include "src/core/lib/channel/channel_stack_builder.h" #include "src/core/lib/config/core_configuration.h" -#include "src/core/lib/load_balancing/lb_policy_registry.h" #include "src/core/lib/surface/channel_init.h" #include "src/core/lib/surface/channel_stack_type.h" void grpc_client_channel_init(void) { - grpc_core::LoadBalancingPolicyRegistry::Builder::InitRegistry(); grpc_core::ProxyMapperRegistry::Init(); grpc_core::RegisterHttpProxyMapper(); grpc_client_channel_global_init_backup_polling(); @@ -39,7 +37,6 @@ void grpc_client_channel_init(void) { void grpc_client_channel_shutdown(void) { grpc_core::ProxyMapperRegistry::Shutdown(); - grpc_core::LoadBalancingPolicyRegistry::Builder::ShutdownRegistry(); } namespace grpc_core { diff --git a/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc b/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc index 15ca8aaddd1..358558002ac 100644 --- a/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +++ b/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc @@ -29,6 +29,7 @@ #include #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/gprpp/debug_location.h" #include "src/core/lib/iomgr/pollset_set.h" #include "src/core/lib/load_balancing/lb_policy_registry.h" @@ -311,8 +312,9 @@ bool ChildPolicyHandler::ConfigChangeRequiresNewPolicyInstance( OrphanablePtr ChildPolicyHandler::CreateLoadBalancingPolicy( absl::string_view name, LoadBalancingPolicy::Args args) const { - return LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy( - name, std::move(args)); + return CoreConfiguration::Get() + .lb_policy_registry() + .CreateLoadBalancingPolicy(name, std::move(args)); } } // namespace grpc_core diff --git a/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h b/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h index 57f4d384458..d13552848c7 100644 --- a/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +++ b/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h @@ -33,9 +33,9 @@ namespace grpc_core { // A class that makes it easy to gracefully switch child policies. // // Callers should instantiate this instead of using -// LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(). Once -// instantiated, this object will automatically take care of -// constructing the child policy as needed upon receiving an update. +// CoreConfiguration::Get().lb_policy_registry().CreateLoadBalancingPolicy(). +// Once instantiated, this object will automatically take care of constructing +// the child policy as needed upon receiving an update. class ChildPolicyHandler : public LoadBalancingPolicy { public: ChildPolicyHandler(Args args, TraceFlag* tracer) diff --git a/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc b/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc index 4069cc66d47..71f17afb45f 100644 --- a/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +++ b/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc @@ -1877,7 +1877,7 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory { child_policy_config_json = &it->second; } auto child_policy_config = - LoadBalancingPolicyRegistry::ParseLoadBalancingConfig( + CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig( *child_policy_config_json); if (!child_policy_config.ok()) { error_list.emplace_back( @@ -1903,16 +1903,10 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory { // Plugin registration // -void grpc_lb_policy_grpclb_init() { - grpc_core::LoadBalancingPolicyRegistry::Builder:: - RegisterLoadBalancingPolicyFactory( - absl::make_unique()); -} - -void grpc_lb_policy_grpclb_shutdown() {} - namespace grpc_core { -void RegisterGrpcLbLoadReportingFilter(CoreConfiguration::Builder* builder) { +void RegisterGrpcLbPolicy(CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( + absl::make_unique()); builder->channel_init()->RegisterStage( GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY, [](ChannelStackBuilder* builder) { diff --git a/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc b/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc index 7810f2af812..9d4379661a8 100644 --- a/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +++ b/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc @@ -48,6 +48,7 @@ #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h" #include "src/core/lib/address_utils/sockaddr_utils.h" #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/gpr/env.h" #include "src/core/lib/gpr/string.h" @@ -1105,8 +1106,9 @@ class OutlierDetectionLbFactory : public LoadBalancingPolicyFactory { if (it == json.object_value().end()) { errors.emplace_back("field:childPolicy error:required field missing"); } else { - auto child_policy_config = - LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(it->second); + auto child_policy_config = CoreConfiguration::Get() + .lb_policy_registry() + .ParseLoadBalancingConfig(it->second); if (!child_policy_config.ok()) { errors.emplace_back( absl::StrCat("error parsing childPolicy field: ", @@ -1131,18 +1133,11 @@ class OutlierDetectionLbFactory : public LoadBalancingPolicyFactory { } // namespace -} // namespace grpc_core - -// -// Plugin registration -// - -void grpc_lb_policy_outlier_detection_init() { - if (grpc_core::XdsOutlierDetectionEnabled()) { - grpc_core::LoadBalancingPolicyRegistry::Builder:: - RegisterLoadBalancingPolicyFactory( - absl::make_unique()); +void RegisterOutlierDetectionLbPolicy(CoreConfiguration::Builder* builder) { + if (XdsOutlierDetectionEnabled()) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( + absl::make_unique()); } } -void grpc_lb_policy_outlier_detection_shutdown() {} +} // namespace grpc_core diff --git a/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc b/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc index 18e501e7d7a..3337d9f5a27 100644 --- a/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +++ b/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc @@ -38,6 +38,7 @@ #include "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h" #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/gprpp/debug_location.h" #include "src/core/lib/gprpp/orphanable.h" @@ -527,12 +528,9 @@ class PickFirstFactory : public LoadBalancingPolicyFactory { } // namespace -} // namespace grpc_core - -void grpc_lb_policy_pick_first_init() { - grpc_core::LoadBalancingPolicyRegistry::Builder:: - RegisterLoadBalancingPolicyFactory( - absl::make_unique()); +void RegisterPickFirstLbPolicy(CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( + absl::make_unique()); } -void grpc_lb_policy_pick_first_shutdown() {} +} // namespace grpc_core diff --git a/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc b/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc index eef91f7889b..9d16ae1df9c 100644 --- a/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +++ b/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc @@ -41,6 +41,7 @@ #include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h" #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h" #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/gprpp/debug_location.h" #include "src/core/lib/gprpp/orphanable.h" @@ -983,8 +984,9 @@ class PriorityLbFactory : public LoadBalancingPolicyFactory { "be type boolean")); } } - auto config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig( - it2->second); + auto config = CoreConfiguration::Get() + .lb_policy_registry() + .ParseLoadBalancingConfig(it2->second); if (!config.ok()) { errors.emplace_back( absl::StrCat("field:children key:", child_name, ": ", @@ -1038,16 +1040,9 @@ class PriorityLbFactory : public LoadBalancingPolicyFactory { } // namespace -} // namespace grpc_core - -// -// Plugin registration -// - -void grpc_lb_policy_priority_init() { - grpc_core::LoadBalancingPolicyRegistry::Builder:: - RegisterLoadBalancingPolicyFactory( - absl::make_unique()); +void RegisterPriorityLbPolicy(CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( + absl::make_unique()); } -void grpc_lb_policy_priority_shutdown() {} +} // namespace grpc_core diff --git a/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc b/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc index ab7b5e18226..0f194a29404 100644 --- a/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +++ b/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc @@ -52,6 +52,7 @@ #include "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h" #include "src/core/lib/address_utils/sockaddr_utils.h" #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/gpr/string.h" #include "src/core/lib/gprpp/debug_location.h" @@ -897,11 +898,9 @@ class RingHashFactory : public LoadBalancingPolicyFactory { } // namespace -void GrpcLbPolicyRingHashInit() { - LoadBalancingPolicyRegistry::Builder::RegisterLoadBalancingPolicyFactory( +void RegisterRingHashLbPolicy(CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( absl::make_unique()); } -void GrpcLbPolicyRingHashShutdown() {} - } // namespace grpc_core diff --git a/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc b/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc index 62ceb9459c9..46c630cef7a 100644 --- a/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +++ b/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc @@ -790,8 +790,9 @@ void RlsLb::ChildPolicyWrapper::StartUpdate() { lb_policy_.get(), this, target_.c_str(), child_policy_config.Dump().c_str()); } - auto config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig( - child_policy_config); + auto config = + CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig( + child_policy_config); // Returned RLS target fails the validation. if (!config.ok()) { if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) { @@ -2441,8 +2442,9 @@ grpc_error_handle ValidateChildPolicyList( child_policy_config_target_field_name, target, child_policy_config); if (!GRPC_ERROR_IS_NONE(error)) return error; // Parse the config. - auto parsed_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig( - *child_policy_config); + auto parsed_config = + CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig( + *child_policy_config); if (!parsed_config.ok()) { return absl_status_to_grpc_error(parsed_config.status()); } @@ -2558,8 +2560,8 @@ class RlsLbFactory : public LoadBalancingPolicyFactory { } // namespace -void RlsLbPluginInit() { - LoadBalancingPolicyRegistry::Builder::RegisterLoadBalancingPolicyFactory( +void RegisterRlsLbPolicy(CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( absl::make_unique()); } diff --git a/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc b/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc index f61e5e4f90f..febc30ee54f 100644 --- a/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +++ b/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc @@ -37,6 +37,7 @@ #include "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h" #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/gprpp/debug_location.h" #include "src/core/lib/gprpp/orphanable.h" @@ -520,12 +521,9 @@ class RoundRobinFactory : public LoadBalancingPolicyFactory { } // namespace -} // namespace grpc_core - -void grpc_lb_policy_round_robin_init() { - grpc_core::LoadBalancingPolicyRegistry::Builder:: - RegisterLoadBalancingPolicyFactory( - absl::make_unique()); +void RegisterRoundRobinLbPolicy(CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( + absl::make_unique()); } -void grpc_lb_policy_round_robin_shutdown() {} +} // namespace grpc_core diff --git a/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc b/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc index 98e119bece8..e242fc6be0f 100644 --- a/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +++ b/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc @@ -41,6 +41,7 @@ #include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h" #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h" #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/event_engine/default_event_engine.h" #include "src/core/lib/gpr/string.h" @@ -749,8 +750,9 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory { // Child policy. it = json.object_value().find("childPolicy"); if (it != json.object_value().end()) { - auto config = - LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(it->second); + auto config = CoreConfiguration::Get() + .lb_policy_registry() + .ParseLoadBalancingConfig(it->second); if (!config.ok()) { errors.emplace_back( absl::StrCat("field:childPolicy: ", config.status().message())); @@ -769,16 +771,9 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory { } // namespace -} // namespace grpc_core - -// -// Plugin registration -// - -void grpc_lb_policy_weighted_target_init() { - grpc_core::LoadBalancingPolicyRegistry::Builder:: - RegisterLoadBalancingPolicyFactory( - absl::make_unique()); +void RegisterWeightedTargetLbPolicy(CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( + absl::make_unique()); } -void grpc_lb_policy_weighted_target_shutdown() {} +} // namespace grpc_core diff --git a/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc b/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc index 8bc7d923321..9148e4e6499 100644 --- a/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +++ b/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc @@ -47,6 +47,7 @@ #include "src/core/ext/xds/xds_common_types.h" #include "src/core/ext/xds/xds_resource_type_impl.h" #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/gprpp/debug_location.h" #include "src/core/lib/gprpp/orphanable.h" @@ -517,7 +518,9 @@ void CdsLb::OnClusterChanged(const std::string& name, this, json_str.c_str()); } grpc_error_handle error = GRPC_ERROR_NONE; - auto config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json); + auto config = + CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig( + json); if (!config.ok()) { OnError(name, absl::UnavailableError(config.status().message())); return; @@ -528,8 +531,10 @@ void CdsLb::OnClusterChanged(const std::string& name, args.work_serializer = work_serializer(); args.args = args_; args.channel_control_helper = absl::make_unique(Ref()); - child_policy_ = LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy( - (*config)->name(), std::move(args)); + child_policy_ = + CoreConfiguration::Get() + .lb_policy_registry() + .CreateLoadBalancingPolicy((*config)->name(), std::move(args)); if (child_policy_ == nullptr) { OnError(name, absl::UnavailableError("failed to create child policy")); return; @@ -756,16 +761,9 @@ class CdsLbFactory : public LoadBalancingPolicyFactory { } // namespace -} // namespace grpc_core - -// -// Plugin registration -// - -void grpc_lb_policy_cds_init() { - grpc_core::LoadBalancingPolicyRegistry::Builder:: - RegisterLoadBalancingPolicyFactory( - absl::make_unique()); +void RegisterCdsLbPolicy(CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( + absl::make_unique()); } -void grpc_lb_policy_cds_shutdown() {} +} // namespace grpc_core diff --git a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc index 967686d62bd..fdb6d98233a 100644 --- a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +++ b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc @@ -50,6 +50,7 @@ #include "src/core/ext/xds/xds_client_stats.h" #include "src/core/ext/xds/xds_endpoint.h" #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/gpr/string.h" #include "src/core/lib/gprpp/debug_location.h" @@ -106,7 +107,8 @@ class CircuitBreakerCallCounterMap { std::map map_ ABSL_GUARDED_BY(mu_); }; -CircuitBreakerCallCounterMap* g_call_counter_map = nullptr; +CircuitBreakerCallCounterMap* const g_call_counter_map = + new CircuitBreakerCallCounterMap; RefCountedPtr CircuitBreakerCallCounterMap::GetOrCreate(const std::string& cluster, @@ -724,8 +726,9 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory { if (it == json.object_value().end()) { errors.emplace_back("field:childPolicy error:required field missing"); } else { - auto config = - LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(it->second); + auto config = CoreConfiguration::Get() + .lb_policy_registry() + .ParseLoadBalancingConfig(it->second); if (!config.ok()) { errors.emplace_back(absl::StrCat("field:childPolicy error:", config.status().message())); @@ -863,19 +866,9 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory { } // namespace -} // namespace grpc_core - -// -// Plugin registration -// - -void grpc_lb_policy_xds_cluster_impl_init() { - grpc_core::g_call_counter_map = new grpc_core::CircuitBreakerCallCounterMap(); - grpc_core::LoadBalancingPolicyRegistry::Builder:: - RegisterLoadBalancingPolicyFactory( - absl::make_unique()); +void RegisterXdsClusterImplLbPolicy(CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( + absl::make_unique()); } -void grpc_lb_policy_xds_cluster_impl_shutdown() { - delete grpc_core::g_call_counter_map; -} +} // namespace grpc_core diff --git a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc index 92d40a9be5c..bd37f38cde1 100644 --- a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +++ b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc @@ -40,6 +40,7 @@ #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h" #include "src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h" #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/gprpp/debug_location.h" #include "src/core/lib/gprpp/orphanable.h" @@ -685,8 +686,9 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory { if (it == json.object_value().end()) { errors.emplace_back("did not find childPolicy"); } else { - auto config = - LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(it->second); + auto config = CoreConfiguration::Get() + .lb_policy_registry() + .ParseLoadBalancingConfig(it->second); if (!config.ok()) { errors.emplace_back(absl::StrCat("field:childPolicy error:", config.status().message())); @@ -703,16 +705,9 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory { } // namespace -} // namespace grpc_core - -// -// Plugin registration -// - -void grpc_lb_policy_xds_cluster_manager_init() { - grpc_core::LoadBalancingPolicyRegistry::Builder:: - RegisterLoadBalancingPolicyFactory( - absl::make_unique()); +void RegisterXdsClusterManagerLbPolicy(CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( + absl::make_unique()); } -void grpc_lb_policy_xds_cluster_manager_shutdown() {} +} // namespace grpc_core diff --git a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc index ef4be2e7814..bbe827e0883 100644 --- a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +++ b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc @@ -976,7 +976,9 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() { "[xds_cluster_resolver_lb %p] generated config for child policy: %s", this, json_str.c_str()); } - auto config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json); + auto config = + CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig( + json); if (!config.ok()) { // This should never happen, but if it does, we basically have no // way to fix it, so we put the channel in TRANSIENT_FAILURE. @@ -1029,7 +1031,7 @@ XdsClusterResolverLb::CreateChildPolicyLocked(const ChannelArgs& args) { lb_policy_args.channel_control_helper = absl::make_unique(Ref(DEBUG_LOCATION, "Helper")); OrphanablePtr lb_policy = - LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy( + CoreConfiguration::Get().lb_policy_registry().CreateLoadBalancingPolicy( "priority_experimental", std::move(lb_policy_args)); if (GPR_UNLIKELY(lb_policy == nullptr)) { gpr_log(GPR_ERROR, @@ -1335,16 +1337,9 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory { } // namespace -} // namespace grpc_core - -// -// Plugin registration -// - -void grpc_lb_policy_xds_cluster_resolver_init() { - grpc_core::LoadBalancingPolicyRegistry::Builder:: - RegisterLoadBalancingPolicyFactory( - absl::make_unique()); +void RegisterXdsClusterResolverLbPolicy(CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( + absl::make_unique()); } -void grpc_lb_policy_xds_cluster_resolver_shutdown() {} +} // namespace grpc_core diff --git a/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc b/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc index ba88e885a1f..42c9535dea3 100644 --- a/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +++ b/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc @@ -20,6 +20,7 @@ #include #include #include +#include #include "absl/memory/memory.h" #include "absl/status/statusor.h" diff --git a/src/core/ext/filters/client_channel/resolver_result_parsing.cc b/src/core/ext/filters/client_channel/resolver_result_parsing.cc index a9d911d76d5..4636ae2264c 100644 --- a/src/core/ext/filters/client_channel/resolver_result_parsing.cc +++ b/src/core/ext/filters/client_channel/resolver_result_parsing.cc @@ -85,12 +85,13 @@ absl::StatusOr> ClientChannelServiceConfigParser::ParseGlobalParams(const ChannelArgs& /*args*/, const Json& json) { std::vector error_list; + const auto& lb_policy_registry = + CoreConfiguration::Get().lb_policy_registry(); // Parse LB config. RefCountedPtr parsed_lb_config; auto it = json.object_value().find("loadBalancingConfig"); if (it != json.object_value().end()) { - auto config = - LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(it->second); + auto config = lb_policy_registry.ParseLoadBalancingConfig(it->second); if (!config.ok()) { error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat( "field:loadBalancingConfig error:", config.status().message()))); @@ -111,8 +112,8 @@ ClientChannelServiceConfigParser::ParseGlobalParams(const ChannelArgs& /*args*/, lb_policy_name[i] = tolower(lb_policy_name[i]); } bool requires_config = false; - if (!LoadBalancingPolicyRegistry::LoadBalancingPolicyExists( - lb_policy_name.c_str(), &requires_config)) { + if (!lb_policy_registry.LoadBalancingPolicyExists(lb_policy_name.c_str(), + &requires_config)) { error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING( "field:loadBalancingPolicy error:Unknown lb policy")); } else if (requires_config) { diff --git a/src/core/ext/transport/chttp2/server/chttp2_server.cc b/src/core/ext/transport/chttp2/server/chttp2_server.cc index 7e6887141e1..9ddd2b0256f 100644 --- a/src/core/ext/transport/chttp2/server/chttp2_server.cc +++ b/src/core/ext/transport/chttp2/server/chttp2_server.cc @@ -63,7 +63,6 @@ #include "src/core/lib/iomgr/closure.h" #include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/iomgr_fwd.h" -#include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/pollset_set.h" #include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/resolved_address.h" diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc index bac34f5da29..0bee5a19b48 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc @@ -72,7 +72,6 @@ #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/iomgr_fwd.h" -#include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/timer.h" #include "src/core/lib/profiling/timers.h" #include "src/core/lib/promise/poll.h" diff --git a/src/core/ext/transport/cronet/transport/cronet_transport.cc b/src/core/ext/transport/cronet/transport/cronet_transport.cc index 19e0f721c67..b5c6e7fe8f3 100644 --- a/src/core/ext/transport/cronet/transport/cronet_transport.cc +++ b/src/core/ext/transport/cronet/transport/cronet_transport.cc @@ -51,7 +51,6 @@ #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/iomgr_fwd.h" -#include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/resource_quota/arena.h" #include "src/core/lib/slice/slice.h" #include "src/core/lib/slice/slice_buffer.h" diff --git a/src/core/ext/transport/inproc/inproc_transport.cc b/src/core/ext/transport/inproc/inproc_transport.cc index 2ef248d9cf3..993942a7061 100644 --- a/src/core/ext/transport/inproc/inproc_transport.cc +++ b/src/core/ext/transport/inproc/inproc_transport.cc @@ -54,7 +54,6 @@ #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/iomgr_fwd.h" -#include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/resource_quota/arena.h" #include "src/core/lib/slice/slice.h" #include "src/core/lib/slice/slice_buffer.h" diff --git a/src/core/ext/xds/xds_cluster_specifier_plugin.cc b/src/core/ext/xds/xds_cluster_specifier_plugin.cc index 4258ef1ba50..fbe3fba9fb0 100644 --- a/src/core/ext/xds/xds_cluster_specifier_plugin.cc +++ b/src/core/ext/xds/xds_cluster_specifier_plugin.cc @@ -33,6 +33,7 @@ #include +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/json/json.h" #include "src/core/lib/load_balancing/lb_policy_registry.h" #include "src/proto/grpc/lookup/v1/rls_config.upb.h" @@ -97,7 +98,8 @@ XdsRouteLookupClusterSpecifierPlugin::GenerateLoadBalancingPolicyConfig( // the gRPC LB policy registry instead of requiring each plugin to do that // itself. auto config = - LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(lb_policy_config); + CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig( + lb_policy_config); if (!config.ok()) { return absl::InvalidArgumentError(absl::StrCat( kXdsRouteLookupClusterSpecifierPluginConfigName, diff --git a/src/core/ext/xds/xds_lb_policy_registry.cc b/src/core/ext/xds/xds_lb_policy_registry.cc index 8ad1358f048..a18d743d9d2 100644 --- a/src/core/ext/xds/xds_lb_policy_registry.cc +++ b/src/core/ext/xds/xds_lb_policy_registry.cc @@ -43,6 +43,7 @@ #include "src/core/ext/xds/upb_utils.h" #include "src/core/ext/xds/xds_common_types.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/load_balancing/lb_policy_registry.h" namespace grpc_core { @@ -238,8 +239,9 @@ absl::StatusOr XdsLbPolicyRegistry::ConvertXdsLbPolicyConfig( } else if (type->typed_struct != nullptr) { // Custom lb policy config std::string custom_type = std::string(type->type); - if (!LoadBalancingPolicyRegistry::LoadBalancingPolicyExists( - custom_type.c_str(), nullptr)) { + if (!CoreConfiguration::Get() + .lb_policy_registry() + .LoadBalancingPolicyExists(custom_type.c_str(), nullptr)) { // Skip unsupported custom lb policy. continue; } diff --git a/src/core/lib/config/core_configuration.cc b/src/core/lib/config/core_configuration.cc index fa5eaadda33..43a77ce7101 100644 --- a/src/core/lib/config/core_configuration.cc +++ b/src/core/lib/config/core_configuration.cc @@ -43,7 +43,8 @@ CoreConfiguration::CoreConfiguration(Builder* builder) handshaker_registry_(builder->handshaker_registry_.Build()), channel_creds_registry_(builder->channel_creds_registry_.Build()), service_config_parser_(builder->service_config_parser_.Build()), - resolver_registry_(builder->resolver_registry_.Build()) {} + resolver_registry_(builder->resolver_registry_.Build()), + lb_policy_registry_(builder->lb_policy_registry_.Build()) {} void CoreConfiguration::RegisterBuilder(std::function builder) { GPR_ASSERT(config_.load(std::memory_order_relaxed) == nullptr && diff --git a/src/core/lib/config/core_configuration.h b/src/core/lib/config/core_configuration.h index fb6c9ac4680..ab5219d917b 100644 --- a/src/core/lib/config/core_configuration.h +++ b/src/core/lib/config/core_configuration.h @@ -23,6 +23,7 @@ #include #include "src/core/lib/channel/channel_args_preconditioning.h" +#include "src/core/lib/load_balancing/lb_policy_registry.h" #include "src/core/lib/resolver/resolver_registry.h" #include "src/core/lib/security/credentials/channel_creds_registry.h" #include "src/core/lib/service_config/service_config_parser.h" @@ -64,6 +65,10 @@ class CoreConfiguration { return &resolver_registry_; } + LoadBalancingPolicyRegistry::Builder* lb_policy_registry() { + return &lb_policy_registry_; + } + private: friend class CoreConfiguration; @@ -73,6 +78,7 @@ class CoreConfiguration { ChannelCredsRegistry<>::Builder channel_creds_registry_; ServiceConfigParser::Builder service_config_parser_; ResolverRegistry::Builder resolver_registry_; + LoadBalancingPolicyRegistry::Builder lb_policy_registry_; Builder(); CoreConfiguration* Build(); @@ -177,6 +183,10 @@ class CoreConfiguration { return resolver_registry_; } + const LoadBalancingPolicyRegistry& lb_policy_registry() const { + return lb_policy_registry_; + } + static void SetDefaultBuilder(void (*builder)(CoreConfiguration::Builder*)) { default_builder_ = builder; } @@ -201,6 +211,7 @@ class CoreConfiguration { ChannelCredsRegistry<> channel_creds_registry_; ServiceConfigParser service_config_parser_; ResolverRegistry resolver_registry_; + LoadBalancingPolicyRegistry lb_policy_registry_; }; extern void BuildCoreConfiguration(CoreConfiguration::Builder* builder); diff --git a/src/core/lib/iomgr/iomgr_fwd.h b/src/core/lib/iomgr/iomgr_fwd.h index bf6effacdfb..41b228d8daa 100644 --- a/src/core/lib/iomgr/iomgr_fwd.h +++ b/src/core/lib/iomgr/iomgr_fwd.h @@ -21,5 +21,6 @@ #include typedef struct grpc_pollset_set grpc_pollset_set; +typedef struct grpc_pollset grpc_pollset; #endif // GRPC_CORE_LIB_IOMGR_IOMGR_FWD_H diff --git a/src/core/lib/iomgr/pollset.h b/src/core/lib/iomgr/pollset.h index b1f1138f8e8..8d58847aed4 100644 --- a/src/core/lib/iomgr/pollset.h +++ b/src/core/lib/iomgr/pollset.h @@ -25,6 +25,7 @@ #include #include "src/core/lib/iomgr/exec_ctx.h" +#include "src/core/lib/iomgr/iomgr_fwd.h" extern grpc_core::DebugOnlyTraceFlag grpc_trace_fd_refcount; @@ -35,7 +36,6 @@ extern grpc_core::DebugOnlyTraceFlag grpc_trace_fd_refcount; - a completion queue might keep a pollset with an entry for each transport that is servicing a call that it's tracking */ -typedef struct grpc_pollset grpc_pollset; typedef struct grpc_pollset_worker grpc_pollset_worker; typedef struct grpc_pollset_vtable { diff --git a/src/core/lib/iomgr/pollset_set.h b/src/core/lib/iomgr/pollset_set.h index 8355f8e14bb..abc1189f246 100644 --- a/src/core/lib/iomgr/pollset_set.h +++ b/src/core/lib/iomgr/pollset_set.h @@ -22,7 +22,6 @@ #include #include "src/core/lib/iomgr/iomgr_fwd.h" -#include "src/core/lib/iomgr/pollset.h" /* A grpc_pollset_set is a set of pollsets that are interested in an action. Adding a pollset to a pollset_set automatically adds any diff --git a/src/core/lib/iomgr/resolve_address.h b/src/core/lib/iomgr/resolve_address.h index 13a518cb337..201f4aa94cf 100644 --- a/src/core/lib/iomgr/resolve_address.h +++ b/src/core/lib/iomgr/resolve_address.h @@ -28,6 +28,7 @@ #include #include "src/core/lib/gprpp/orphanable.h" +#include "src/core/lib/gprpp/time.h" #include "src/core/lib/iomgr/pollset_set.h" #include "src/core/lib/iomgr/port.h" #include "src/core/lib/iomgr/resolved_address.h" diff --git a/src/core/lib/iomgr/resolve_address_impl.h b/src/core/lib/iomgr/resolve_address_impl.h index 6c945a56cac..f20b9bc01cc 100644 --- a/src/core/lib/iomgr/resolve_address_impl.h +++ b/src/core/lib/iomgr/resolve_address_impl.h @@ -21,6 +21,7 @@ #include +#include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/port.h" #include "src/core/lib/iomgr/resolve_address.h" diff --git a/src/core/lib/iomgr/resolve_address_posix.cc b/src/core/lib/iomgr/resolve_address_posix.cc index 3c96ac0f4d7..cbea779271b 100644 --- a/src/core/lib/iomgr/resolve_address_posix.cc +++ b/src/core/lib/iomgr/resolve_address_posix.cc @@ -35,6 +35,7 @@ #include "src/core/lib/gprpp/host_port.h" #include "src/core/lib/gprpp/thd.h" #include "src/core/lib/iomgr/block_annotate.h" +#include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/executor.h" #include "src/core/lib/iomgr/iomgr_internal.h" #include "src/core/lib/iomgr/resolve_address.h" diff --git a/src/core/lib/iomgr/resolve_address_windows.cc b/src/core/lib/iomgr/resolve_address_windows.cc index b6a6cef4091..8a895da3b3e 100644 --- a/src/core/lib/iomgr/resolve_address_windows.cc +++ b/src/core/lib/iomgr/resolve_address_windows.cc @@ -39,6 +39,7 @@ #include "src/core/lib/gprpp/host_port.h" #include "src/core/lib/gprpp/thd.h" #include "src/core/lib/iomgr/block_annotate.h" +#include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/executor.h" #include "src/core/lib/iomgr/iomgr_internal.h" #include "src/core/lib/iomgr/resolve_address.h" diff --git a/src/core/lib/load_balancing/lb_policy_registry.cc b/src/core/lib/load_balancing/lb_policy_registry.cc index f679dcdbbad..4e1d7dbbe35 100644 --- a/src/core/lib/load_balancing/lb_policy_registry.cc +++ b/src/core/lib/load_balancing/lb_policy_registry.cc @@ -32,75 +32,53 @@ #include -namespace grpc_core { - -namespace { - -class RegistryState { - public: - void RegisterLoadBalancingPolicyFactory( - std::unique_ptr factory) { - gpr_log(GPR_DEBUG, "registering LB policy factory for \"%s\"", - std::string(factory->name()).c_str()); - GPR_ASSERT(factories_.find(factory->name()) == factories_.end()); - factories_.emplace(factory->name(), std::move(factory)); - } - - LoadBalancingPolicyFactory* GetLoadBalancingPolicyFactory( - absl::string_view name) const { - auto it = factories_.find(name); - if (it == factories_.end()) return nullptr; - return it->second.get(); - } - - private: - std::map> - factories_; -}; - -RegistryState* g_state = nullptr; +#include "src/core/lib/load_balancing/lb_policy.h" -} // namespace +namespace grpc_core { // // LoadBalancingPolicyRegistry::Builder // -void LoadBalancingPolicyRegistry::Builder::InitRegistry() { - if (g_state == nullptr) g_state = new RegistryState(); -} - -void LoadBalancingPolicyRegistry::Builder::ShutdownRegistry() { - delete g_state; - g_state = nullptr; -} - void LoadBalancingPolicyRegistry::Builder::RegisterLoadBalancingPolicyFactory( std::unique_ptr factory) { - InitRegistry(); - g_state->RegisterLoadBalancingPolicyFactory(std::move(factory)); + gpr_log(GPR_DEBUG, "registering LB policy factory for \"%s\"", + std::string(factory->name()).c_str()); + GPR_ASSERT(factories_.find(factory->name()) == factories_.end()); + factories_.emplace(factory->name(), std::move(factory)); +} + +LoadBalancingPolicyRegistry LoadBalancingPolicyRegistry::Builder::Build() { + LoadBalancingPolicyRegistry out; + out.factories_ = std::move(factories_); + return out; } // // LoadBalancingPolicyRegistry // +LoadBalancingPolicyFactory* +LoadBalancingPolicyRegistry::GetLoadBalancingPolicyFactory( + absl::string_view name) const { + auto it = factories_.find(name); + if (it == factories_.end()) return nullptr; + return it->second.get(); +} + OrphanablePtr LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy( - absl::string_view name, LoadBalancingPolicy::Args args) { - GPR_ASSERT(g_state != nullptr); + absl::string_view name, LoadBalancingPolicy::Args args) const { // Find factory. - LoadBalancingPolicyFactory* factory = - g_state->GetLoadBalancingPolicyFactory(name); + LoadBalancingPolicyFactory* factory = GetLoadBalancingPolicyFactory(name); if (factory == nullptr) return nullptr; // Specified name not found. // Create policy via factory. return factory->CreateLoadBalancingPolicy(std::move(args)); } bool LoadBalancingPolicyRegistry::LoadBalancingPolicyExists( - absl::string_view name, bool* requires_config) { - GPR_ASSERT(g_state != nullptr); - auto* factory = g_state->GetLoadBalancingPolicyFactory(name); + absl::string_view name, bool* requires_config) const { + auto* factory = GetLoadBalancingPolicyFactory(name); if (factory == nullptr) return false; // If requested, check if the load balancing policy allows an empty config. if (requires_config != nullptr) { @@ -110,12 +88,11 @@ bool LoadBalancingPolicyRegistry::LoadBalancingPolicyExists( return true; } -namespace { - // Returns the JSON node of policy (with both policy name and config content) // given the JSON node of a LoadBalancingConfig array. -absl::StatusOr ParseLoadBalancingConfigHelper( - const Json& lb_config_array) { +absl::StatusOr +LoadBalancingPolicyRegistry::ParseLoadBalancingConfigHelper( + const Json& lb_config_array) const { if (lb_config_array.type() != Json::Type::ARRAY) { return absl::InvalidArgumentError("type should be array"); } @@ -146,16 +123,13 @@ absl::StatusOr ParseLoadBalancingConfigHelper( "No known policies in list: ", absl::StrJoin(policies_tried, " "))); } -} // namespace - absl::StatusOr> -LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(const Json& json) { - GPR_ASSERT(g_state != nullptr); +LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(const Json& json) const { auto policy = ParseLoadBalancingConfigHelper(json); if (!policy.ok()) return policy.status(); // Find factory. LoadBalancingPolicyFactory* factory = - g_state->GetLoadBalancingPolicyFactory((*policy)->first.c_str()); + GetLoadBalancingPolicyFactory((*policy)->first.c_str()); if (factory == nullptr) { return absl::FailedPreconditionError(absl::StrFormat( "Factory not found for policy \"%s\"", (*policy)->first)); diff --git a/src/core/lib/load_balancing/lb_policy_registry.h b/src/core/lib/load_balancing/lb_policy_registry.h index 7fddb8a8d02..78ef159b499 100644 --- a/src/core/lib/load_balancing/lb_policy_registry.h +++ b/src/core/lib/load_balancing/lb_policy_registry.h @@ -19,6 +19,7 @@ #include +#include #include #include "absl/status/statusor.h" @@ -39,30 +40,41 @@ class LoadBalancingPolicyRegistry { /// initialization and shutdown. class Builder { public: - /// Global initialization and shutdown hooks. - static void InitRegistry(); - static void ShutdownRegistry(); - /// Registers an LB policy factory. The factory will be used to create an /// LB policy whose name matches that of the factory. - static void RegisterLoadBalancingPolicyFactory( + void RegisterLoadBalancingPolicyFactory( std::unique_ptr factory); + + LoadBalancingPolicyRegistry Build(); + + private: + std::map> + factories_; }; /// Creates an LB policy of the type specified by \a name. - static OrphanablePtr CreateLoadBalancingPolicy( - absl::string_view name, LoadBalancingPolicy::Args args); + OrphanablePtr CreateLoadBalancingPolicy( + absl::string_view name, LoadBalancingPolicy::Args args) const; /// Returns true if the LB policy factory specified by \a name exists in this /// registry. If the load balancing policy requires a config to be specified /// then sets \a requires_config to true. - static bool LoadBalancingPolicyExists(absl::string_view name, - bool* requires_config); + bool LoadBalancingPolicyExists(absl::string_view name, + bool* requires_config) const; /// Returns a parsed object of the load balancing policy to be used from a /// LoadBalancingConfig array \a json. - static absl::StatusOr> - ParseLoadBalancingConfig(const Json& json); + absl::StatusOr> + ParseLoadBalancingConfig(const Json& json) const; + + private: + LoadBalancingPolicyFactory* GetLoadBalancingPolicyFactory( + absl::string_view name) const; + absl::StatusOr ParseLoadBalancingConfigHelper( + const Json& lb_config_array) const; + + std::map> + factories_; }; } // namespace grpc_core diff --git a/src/core/lib/security/credentials/google_default/google_default_credentials.cc b/src/core/lib/security/credentials/google_default/google_default_credentials.cc index 04f44ec8171..d5a7fd282a9 100644 --- a/src/core/lib/security/credentials/google_default/google_default_credentials.cc +++ b/src/core/lib/security/credentials/google_default/google_default_credentials.cc @@ -54,6 +54,7 @@ #include "src/core/lib/iomgr/closure.h" #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/exec_ctx.h" +#include "src/core/lib/iomgr/iomgr_fwd.h" #include "src/core/lib/iomgr/load_file.h" #include "src/core/lib/iomgr/polling_entity.h" #include "src/core/lib/iomgr/pollset.h" diff --git a/src/core/lib/security/credentials/jwt/jwt_verifier.cc b/src/core/lib/security/credentials/jwt/jwt_verifier.cc index 587ab604fa8..9a4a4712f5a 100644 --- a/src/core/lib/security/credentials/jwt/jwt_verifier.cc +++ b/src/core/lib/security/credentials/jwt/jwt_verifier.cc @@ -59,6 +59,7 @@ #include "src/core/lib/iomgr/closure.h" #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/exec_ctx.h" +#include "src/core/lib/iomgr/iomgr_fwd.h" #include "src/core/lib/iomgr/polling_entity.h" #include "src/core/lib/security/credentials/credentials.h" #include "src/core/lib/slice/b64.h" diff --git a/src/core/lib/security/credentials/jwt/jwt_verifier.h b/src/core/lib/security/credentials/jwt/jwt_verifier.h index 4f695ae2cb8..a2713aaa738 100644 --- a/src/core/lib/security/credentials/jwt/jwt_verifier.h +++ b/src/core/lib/security/credentials/jwt/jwt_verifier.h @@ -26,7 +26,7 @@ #include #include "src/core/lib/gprpp/time.h" -#include "src/core/lib/iomgr/pollset.h" +#include "src/core/lib/iomgr/iomgr_fwd.h" #include "src/core/lib/json/json.h" /* --- Constants. --- */ diff --git a/src/core/lib/security/transport/secure_endpoint.cc b/src/core/lib/security/transport/secure_endpoint.cc index 303a0dc1154..aeb70b2c1bb 100644 --- a/src/core/lib/security/transport/secure_endpoint.cc +++ b/src/core/lib/security/transport/secure_endpoint.cc @@ -49,7 +49,6 @@ #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/iomgr_fwd.h" -#include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/profiling/timers.h" #include "src/core/lib/resource_quota/api.h" #include "src/core/lib/resource_quota/memory_quota.h" diff --git a/src/core/lib/surface/completion_queue.h b/src/core/lib/surface/completion_queue.h index 5b10a19be9d..52f61e0b747 100644 --- a/src/core/lib/surface/completion_queue.h +++ b/src/core/lib/surface/completion_queue.h @@ -31,7 +31,7 @@ #include "src/core/lib/gprpp/manual_constructor.h" #include "src/core/lib/gprpp/mpscq.h" #include "src/core/lib/iomgr/error.h" -#include "src/core/lib/iomgr/pollset.h" +#include "src/core/lib/iomgr/iomgr_fwd.h" /* These trace flags default to 1. The corresponding lines are only traced if grpc_api_trace is also truthy */ diff --git a/src/core/lib/surface/server.h b/src/core/lib/surface/server.h index 6191ea11ab4..8664d9793e8 100644 --- a/src/core/lib/surface/server.h +++ b/src/core/lib/surface/server.h @@ -58,7 +58,6 @@ #include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/iomgr_fwd.h" -#include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/slice/slice.h" #include "src/core/lib/surface/channel.h" #include "src/core/lib/surface/completion_queue.h" diff --git a/src/core/lib/transport/transport.h b/src/core/lib/transport/transport.h index 555abc4ed1c..60d9770d1f3 100644 --- a/src/core/lib/transport/transport.h +++ b/src/core/lib/transport/transport.h @@ -49,7 +49,6 @@ #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/iomgr_fwd.h" #include "src/core/lib/iomgr/polling_entity.h" -#include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/promise/arena_promise.h" #include "src/core/lib/promise/context.h" #include "src/core/lib/promise/latch.h" diff --git a/src/core/lib/transport/transport_impl.h b/src/core/lib/transport/transport_impl.h index 9018cc2ae85..0d9a040fad3 100644 --- a/src/core/lib/transport/transport_impl.h +++ b/src/core/lib/transport/transport_impl.h @@ -28,7 +28,6 @@ #include "src/core/lib/iomgr/closure.h" #include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/iomgr_fwd.h" -#include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/promise/arena_promise.h" #include "src/core/lib/resource_quota/arena.h" #include "src/core/lib/transport/transport.h" diff --git a/src/core/plugin_registry/grpc_plugin_registry.cc b/src/core/plugin_registry/grpc_plugin_registry.cc index 8c46ddb4c3d..03eae19dc88 100644 --- a/src/core/plugin_registry/grpc_plugin_registry.cc +++ b/src/core/plugin_registry/grpc_plugin_registry.cc @@ -27,53 +27,13 @@ extern void grpc_register_extra_plugins(void); -void grpc_chttp2_plugin_init(void); -void grpc_chttp2_plugin_shutdown(void); void grpc_client_channel_init(void); void grpc_client_channel_shutdown(void); -void grpc_lb_policy_grpclb_init(void); -void grpc_lb_policy_grpclb_shutdown(void); -void grpc_lb_policy_priority_init(void); -void grpc_lb_policy_priority_shutdown(void); -void grpc_lb_policy_outlier_detection_init(void); -void grpc_lb_policy_outlier_detection_shutdown(void); -void grpc_lb_policy_weighted_target_init(void); -void grpc_lb_policy_weighted_target_shutdown(void); -void grpc_lb_policy_pick_first_init(void); -void grpc_lb_policy_pick_first_shutdown(void); -void grpc_lb_policy_round_robin_init(void); -void grpc_lb_policy_round_robin_shutdown(void); void grpc_resolver_dns_ares_init(void); void grpc_resolver_dns_ares_shutdown(void); -namespace grpc_core { -void GrpcLbPolicyRingHashInit(void); -void GrpcLbPolicyRingHashShutdown(void); -#ifndef GRPC_NO_RLS -void RlsLbPluginInit(); -void RlsLbPluginShutdown(); -#endif // !GRPC_NO_RLS -} // namespace grpc_core void grpc_register_built_in_plugins(void) { grpc_register_plugin(grpc_client_channel_init, grpc_client_channel_shutdown); - grpc_register_plugin(grpc_lb_policy_grpclb_init, - grpc_lb_policy_grpclb_shutdown); -#ifndef GRPC_NO_RLS - grpc_register_plugin(grpc_core::RlsLbPluginInit, - grpc_core::RlsLbPluginShutdown); -#endif // !GRPC_NO_RLS - grpc_register_plugin(grpc_lb_policy_outlier_detection_init, - grpc_lb_policy_outlier_detection_shutdown); - grpc_register_plugin(grpc_lb_policy_priority_init, - grpc_lb_policy_priority_shutdown); - grpc_register_plugin(grpc_lb_policy_weighted_target_init, - grpc_lb_policy_weighted_target_shutdown); - grpc_register_plugin(grpc_lb_policy_pick_first_init, - grpc_lb_policy_pick_first_shutdown); - grpc_register_plugin(grpc_lb_policy_round_robin_init, - grpc_lb_policy_round_robin_shutdown); - grpc_register_plugin(grpc_core::GrpcLbPolicyRingHashInit, - grpc_core::GrpcLbPolicyRingHashShutdown); grpc_register_plugin(grpc_resolver_dns_ares_init, grpc_resolver_dns_ares_shutdown); grpc_register_extra_plugins(); @@ -88,8 +48,7 @@ extern void SecurityRegisterHandshakerFactories( extern void RegisterClientAuthorityFilter(CoreConfiguration::Builder* builder); extern void RegisterChannelIdleFilters(CoreConfiguration::Builder* builder); extern void RegisterDeadlineFilter(CoreConfiguration::Builder* builder); -extern void RegisterGrpcLbLoadReportingFilter( - CoreConfiguration::Builder* builder); +extern void RegisterGrpcLbPolicy(CoreConfiguration::Builder* builder); extern void RegisterHttpFilters(CoreConfiguration::Builder* builder); extern void RegisterMessageSizeFilter(CoreConfiguration::Builder* builder); extern void RegisterSecurityFilters(CoreConfiguration::Builder* builder); @@ -102,6 +61,16 @@ extern void RegisterNativeDnsResolver(CoreConfiguration::Builder* builder); extern void RegisterAresDnsResolver(CoreConfiguration::Builder* builder); extern void RegisterSockaddrResolver(CoreConfiguration::Builder* builder); extern void RegisterFakeResolver(CoreConfiguration::Builder* builder); +extern void RegisterPriorityLbPolicy(CoreConfiguration::Builder* builder); +extern void RegisterOutlierDetectionLbPolicy( + CoreConfiguration::Builder* builder); +extern void RegisterWeightedTargetLbPolicy(CoreConfiguration::Builder* builder); +extern void RegisterPickFirstLbPolicy(CoreConfiguration::Builder* builder); +extern void RegisterRoundRobinLbPolicy(CoreConfiguration::Builder* builder); +extern void RegisterRingHashLbPolicy(CoreConfiguration::Builder* builder); +#ifndef GRPC_NO_RLS +extern void RegisterRlsLbPolicy(CoreConfiguration::Builder* builder); +#endif // !GRPC_NO_RLS #ifdef GPR_SUPPORT_BINDER_TRANSPORT extern void RegisterBinderResolver(CoreConfiguration::Builder* builder); #endif @@ -112,11 +81,17 @@ void BuildCoreConfiguration(CoreConfiguration::Builder* builder) { // the start of the handshaker list. RegisterHttpConnectHandshaker(builder); RegisterTCPConnectHandshaker(builder); + RegisterPriorityLbPolicy(builder); + RegisterOutlierDetectionLbPolicy(builder); + RegisterWeightedTargetLbPolicy(builder); + RegisterPickFirstLbPolicy(builder); + RegisterRoundRobinLbPolicy(builder); + RegisterRingHashLbPolicy(builder); BuildClientChannelConfiguration(builder); SecurityRegisterHandshakerFactories(builder); RegisterClientAuthorityFilter(builder); RegisterChannelIdleFilters(builder); - RegisterGrpcLbLoadReportingFilter(builder); + RegisterGrpcLbPolicy(builder); RegisterHttpFilters(builder); RegisterDeadlineFilter(builder); RegisterMessageSizeFilter(builder); @@ -130,6 +105,9 @@ void BuildCoreConfiguration(CoreConfiguration::Builder* builder) { #ifdef GPR_SUPPORT_BINDER_TRANSPORT RegisterBinderResolver(builder); #endif +#ifndef GRPC_NO_RLS + RegisterRlsLbPolicy(builder); +#endif // !GRPC_NO_RLS // Run last so it gets a consistent location. // TODO(ctiller): Is this actually necessary? RegisterSecurityFilters(builder); diff --git a/src/core/plugin_registry/grpc_plugin_registry_extra.cc b/src/core/plugin_registry/grpc_plugin_registry_extra.cc index 68e792ac8c4..9bc6545c164 100644 --- a/src/core/plugin_registry/grpc_plugin_registry_extra.cc +++ b/src/core/plugin_registry/grpc_plugin_registry_extra.cc @@ -32,14 +32,6 @@ namespace grpc_core { void FileWatcherCertificateProviderInit(); void FileWatcherCertificateProviderShutdown(); } // namespace grpc_core -void grpc_lb_policy_cds_init(void); -void grpc_lb_policy_cds_shutdown(void); -void grpc_lb_policy_xds_cluster_impl_init(void); -void grpc_lb_policy_xds_cluster_impl_shutdown(void); -void grpc_lb_policy_xds_cluster_resolver_init(void); -void grpc_lb_policy_xds_cluster_resolver_shutdown(void); -void grpc_lb_policy_xds_cluster_manager_init(void); -void grpc_lb_policy_xds_cluster_manager_shutdown(void); #endif void grpc_register_extra_plugins() { @@ -50,13 +42,6 @@ void grpc_register_extra_plugins() { grpc_certificate_provider_registry_shutdown); grpc_register_plugin(grpc_core::FileWatcherCertificateProviderInit, grpc_core::FileWatcherCertificateProviderShutdown); - grpc_register_plugin(grpc_lb_policy_cds_init, grpc_lb_policy_cds_shutdown); - grpc_register_plugin(grpc_lb_policy_xds_cluster_impl_init, - grpc_lb_policy_xds_cluster_impl_shutdown); - grpc_register_plugin(grpc_lb_policy_xds_cluster_resolver_init, - grpc_lb_policy_xds_cluster_resolver_shutdown); - grpc_register_plugin(grpc_lb_policy_xds_cluster_manager_init, - grpc_lb_policy_xds_cluster_manager_shutdown); #endif } @@ -68,6 +53,12 @@ extern void RegisterXdsChannelStackModifier( extern void RegisterChannelDefaultCreds(CoreConfiguration::Builder* builder); extern void RegisterXdsResolver(CoreConfiguration::Builder* builder); extern void RegisterCloud2ProdResolver(CoreConfiguration::Builder* builder); +extern void RegisterXdsClusterManagerLbPolicy( + CoreConfiguration::Builder* builder); +extern void RegisterXdsClusterImplLbPolicy(CoreConfiguration::Builder* builder); +extern void RegisterCdsLbPolicy(CoreConfiguration::Builder* builder); +extern void RegisterXdsClusterResolverLbPolicy( + CoreConfiguration::Builder* builder); #endif void RegisterExtraFilters(CoreConfiguration::Builder* builder) { // Use builder to avoid unused-parameter warning. @@ -80,6 +71,10 @@ void RegisterExtraFilters(CoreConfiguration::Builder* builder) { RegisterChannelDefaultCreds(builder); RegisterXdsResolver(builder); RegisterCloud2ProdResolver(builder); + RegisterXdsClusterManagerLbPolicy(builder); + RegisterXdsClusterImplLbPolicy(builder); + RegisterCdsLbPolicy(builder); + RegisterXdsClusterResolverLbPolicy(builder); #endif } } // namespace grpc_core diff --git a/test/core/client_channel/resolvers/dns_resolver_cooldown_test.cc b/test/core/client_channel/resolvers/dns_resolver_cooldown_test.cc index 63cb1f8a3c6..c24e03eb9c7 100644 --- a/test/core/client_channel/resolvers/dns_resolver_cooldown_test.cc +++ b/test/core/client_channel/resolvers/dns_resolver_cooldown_test.cc @@ -33,6 +33,7 @@ #include "src/core/lib/gprpp/memory.h" #include "src/core/lib/gprpp/time.h" #include "src/core/lib/gprpp/work_serializer.h" +#include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/resolver/resolver_registry.h" #include "src/core/lib/resolver/server_address.h" diff --git a/test/core/client_channel/service_config_test.cc b/test/core/client_channel/service_config_test.cc index c06e096d5ec..17d3bf17339 100644 --- a/test/core/client_channel/service_config_test.cc +++ b/test/core/client_channel/service_config_test.cc @@ -473,18 +473,10 @@ TEST_F(ErroredParsersScopingTest, MethodParams) { class ClientChannelParserTest : public ::testing::Test { protected: void SetUp() override { - builder_ = std::make_unique( - [](CoreConfiguration::Builder* builder) { - builder->service_config_parser()->RegisterParser( - absl::make_unique()); - }); EXPECT_EQ(CoreConfiguration::Get().service_config_parser().GetParserIndex( "client_channel"), 0); } - - private: - std::unique_ptr builder_; }; TEST_F(ClientChannelParserTest, ValidLoadBalancingConfigPickFirst) { diff --git a/test/core/end2end/BUILD b/test/core/end2end/BUILD index 4532c429e98..237a5d7d8e1 100644 --- a/test/core/end2end/BUILD +++ b/test/core/end2end/BUILD @@ -69,6 +69,7 @@ grpc_cc_library( "//:grpc", "//:httpcli", "//:iomgr_fwd", + "//:pollset_set", "//:resolved_address", "//:slice_refcount", "//:sockaddr_utils", @@ -116,6 +117,7 @@ grpc_cc_test( "//:grpc", "//:grpc_codegen", "//:grpc_public_hdrs", + "//:iomgr_fwd", "//test/core/util:grpc_test_util", ], ) diff --git a/test/core/end2end/bad_server_response_test.cc b/test/core/end2end/bad_server_response_test.cc index 7d31eafd2ca..4687bbb6e5c 100644 --- a/test/core/end2end/bad_server_response_test.cc +++ b/test/core/end2end/bad_server_response_test.cc @@ -43,7 +43,7 @@ #include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/exec_ctx.h" -#include "src/core/lib/iomgr/pollset.h" +#include "src/core/lib/iomgr/iomgr_fwd.h" #include "src/core/lib/iomgr/tcp_server.h" #include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/slice/slice_string_helpers.h" diff --git a/test/core/end2end/tests/retry_lb_drop.cc b/test/core/end2end/tests/retry_lb_drop.cc index 85e470c2e99..51e24853bc2 100644 --- a/test/core/end2end/tests/retry_lb_drop.cc +++ b/test/core/end2end/tests/retry_lb_drop.cc @@ -35,6 +35,7 @@ #include #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/gpr/useful.h" #include "src/core/lib/gprpp/orphanable.h" #include "src/core/lib/gprpp/ref_counted_ptr.h" @@ -98,15 +99,9 @@ class DropPolicyFactory : public LoadBalancingPolicyFactory { std::vector* g_pick_args_vector = nullptr; -void RegisterDropPolicy() { - LoadBalancingPolicyRegistry::Builder::RegisterLoadBalancingPolicyFactory( +void RegisterDropPolicy(CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( absl::make_unique()); - RegisterTestPickArgsLoadBalancingPolicy( - [](const PickArgsSeen& pick_args) { - GPR_ASSERT(g_pick_args_vector != nullptr); - g_pick_args_vector->push_back(pick_args); - }, - kDropPolicyName); } } // namespace @@ -280,4 +275,16 @@ void retry_lb_drop(grpc_end2end_test_config config) { test_retry_lb_drop(config); } -void retry_lb_drop_pre_init(void) { grpc_core::RegisterDropPolicy(); } +void retry_lb_drop_pre_init(void) { + grpc_core::CoreConfiguration::RegisterBuilder( + [](grpc_core::CoreConfiguration::Builder* builder) { + grpc_core::RegisterTestPickArgsLoadBalancingPolicy( + builder, + [](const grpc_core::PickArgsSeen& pick_args) { + GPR_ASSERT(grpc_core::g_pick_args_vector != nullptr); + grpc_core::g_pick_args_vector->push_back(pick_args); + }, + grpc_core::kDropPolicyName); + }); + grpc_core::CoreConfiguration::RegisterBuilder(grpc_core::RegisterDropPolicy); +} diff --git a/test/core/end2end/tests/retry_lb_fail.cc b/test/core/end2end/tests/retry_lb_fail.cc index e82d0857afd..610a2a9f174 100644 --- a/test/core/end2end/tests/retry_lb_fail.cc +++ b/test/core/end2end/tests/retry_lb_fail.cc @@ -34,6 +34,7 @@ #include #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/gpr/useful.h" #include "src/core/lib/gprpp/orphanable.h" #include "src/core/lib/gprpp/ref_counted_ptr.h" @@ -103,8 +104,8 @@ class FailPolicyFactory : public LoadBalancingPolicyFactory { } }; -void RegisterFailPolicy() { - LoadBalancingPolicyRegistry::Builder::RegisterLoadBalancingPolicyFactory( +void RegisterFailPolicy(CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( absl::make_unique()); } @@ -278,4 +279,6 @@ void retry_lb_fail(grpc_end2end_test_config config) { test_retry_lb_fail(config); } -void retry_lb_fail_pre_init(void) { grpc_core::RegisterFailPolicy(); } +void retry_lb_fail_pre_init(void) { + grpc_core::CoreConfiguration::RegisterBuilder(grpc_core::RegisterFailPolicy); +} diff --git a/test/core/iomgr/resolve_address_posix_test.cc b/test/core/iomgr/resolve_address_posix_test.cc index 2e2cfcf9cc8..0668c662308 100644 --- a/test/core/iomgr/resolve_address_posix_test.cc +++ b/test/core/iomgr/resolve_address_posix_test.cc @@ -42,6 +42,7 @@ #include "src/core/lib/gprpp/time.h" #include "src/core/lib/iomgr/executor.h" #include "src/core/lib/iomgr/iomgr.h" +#include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/resolve_address.h" #include "test/core/util/cmdline.h" #include "test/core/util/test_config.h" diff --git a/test/core/iomgr/resolve_address_test.cc b/test/core/iomgr/resolve_address_test.cc index b369631e77d..8523c19fee4 100644 --- a/test/core/iomgr/resolve_address_test.cc +++ b/test/core/iomgr/resolve_address_test.cc @@ -40,6 +40,7 @@ #include "src/core/lib/gprpp/time.h" #include "src/core/lib/iomgr/executor.h" #include "src/core/lib/iomgr/iomgr.h" +#include "src/core/lib/iomgr/pollset.h" #include "test/core/util/cmdline.h" #include "test/core/util/fake_udp_and_tcp_server.h" #include "test/core/util/test_config.h" diff --git a/test/core/security/verify_jwt.cc b/test/core/security/verify_jwt.cc index 8dd7e65e030..3f2c54a36ff 100644 --- a/test/core/security/verify_jwt.cc +++ b/test/core/security/verify_jwt.cc @@ -26,6 +26,8 @@ #include #include +#include "src/core/lib/iomgr/exec_ctx.h" +#include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/security/credentials/jwt/jwt_verifier.h" #include "test/core/util/cmdline.h" diff --git a/test/core/surface/completion_queue_test.cc b/test/core/surface/completion_queue_test.cc index e81169b5d46..69ad4add85e 100644 --- a/test/core/surface/completion_queue_test.cc +++ b/test/core/surface/completion_queue_test.cc @@ -28,6 +28,7 @@ #include "src/core/lib/gpr/useful.h" #include "src/core/lib/gprpp/memory.h" #include "src/core/lib/gprpp/sync.h" +#include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/iomgr.h" #include "test/core/util/test_config.h" diff --git a/test/core/surface/completion_queue_threading_test.cc b/test/core/surface/completion_queue_threading_test.cc index 3496d718a89..756d32d5749 100644 --- a/test/core/surface/completion_queue_threading_test.cc +++ b/test/core/surface/completion_queue_threading_test.cc @@ -25,6 +25,7 @@ #include "src/core/lib/gpr/useful.h" #include "src/core/lib/gprpp/thd.h" +#include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/iomgr.h" #include "src/core/lib/surface/completion_queue.h" #include "test/core/util/test_config.h" diff --git a/test/core/tsi/alts/handshaker/alts_handshaker_client_test.cc b/test/core/tsi/alts/handshaker/alts_handshaker_client_test.cc index 828d312585c..f55fe996bb2 100644 --- a/test/core/tsi/alts/handshaker/alts_handshaker_client_test.cc +++ b/test/core/tsi/alts/handshaker/alts_handshaker_client_test.cc @@ -25,6 +25,7 @@ #include #include +#include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/tsi/alts/handshaker/alts_shared_resource.h" #include "src/core/tsi/alts/handshaker/alts_tsi_handshaker.h" #include "src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h" diff --git a/test/core/tsi/alts/handshaker/alts_tsi_handshaker_test.cc b/test/core/tsi/alts/handshaker/alts_tsi_handshaker_test.cc index d870d91333a..117b3ddf4a0 100644 --- a/test/core/tsi/alts/handshaker/alts_tsi_handshaker_test.cc +++ b/test/core/tsi/alts/handshaker/alts_tsi_handshaker_test.cc @@ -29,6 +29,7 @@ #include #include "src/core/lib/gprpp/thd.h" +#include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/tsi/alts/handshaker/alts_handshaker_client.h" #include "src/core/tsi/alts/handshaker/alts_shared_resource.h" #include "src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h" diff --git a/test/core/util/BUILD b/test/core/util/BUILD index 95e122bb43e..1cc1b0de2d3 100644 --- a/test/core/util/BUILD +++ b/test/core/util/BUILD @@ -132,6 +132,7 @@ grpc_cc_library( "//:grpc_sockaddr", "//:grpc_trace", "//:httpcli", + "//:iomgr_fwd", "//:iomgr_port", "//:orphanable", "//:ref_counted_ptr", @@ -167,6 +168,7 @@ grpc_cc_library( "//:grpc_sockaddr", "//:grpc_unsecure", "//:httpcli", + "//:iomgr_fwd", "//:iomgr_port", "//:orphanable", "//:ref_counted_ptr", @@ -285,6 +287,7 @@ grpc_cc_library( "absl/types:variant", ], deps = [ + "//:config", "//:gpr", "//:grpc", "//:grpc_backend_metric_data", @@ -295,6 +298,7 @@ grpc_cc_library( "//:lb_policy_factory", "//:lb_policy_registry", "//:orphanable", + "//:pollset_set", "//:ref_counted_ptr", "//:resolved_address", "//:server_address", diff --git a/test/core/util/mock_endpoint.cc b/test/core/util/mock_endpoint.cc index c020cb7b143..624ba3588f1 100644 --- a/test/core/util/mock_endpoint.cc +++ b/test/core/util/mock_endpoint.cc @@ -29,7 +29,6 @@ #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/iomgr_fwd.h" -#include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/sockaddr.h" typedef struct mock_endpoint { diff --git a/test/core/util/passthru_endpoint.cc b/test/core/util/passthru_endpoint.cc index b82ec5a3442..c42d37f1fbd 100644 --- a/test/core/util/passthru_endpoint.cc +++ b/test/core/util/passthru_endpoint.cc @@ -39,7 +39,6 @@ #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/iomgr_fwd.h" -#include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/timer.h" #include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/slice/slice_refcount.h" diff --git a/test/core/util/port_server_client.cc b/test/core/util/port_server_client.cc index be53e48eb8f..5643ea02627 100644 --- a/test/core/util/port_server_client.cc +++ b/test/core/util/port_server_client.cc @@ -35,6 +35,7 @@ #include "src/core/lib/iomgr/closure.h" #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/exec_ctx.h" +#include "src/core/lib/iomgr/iomgr_fwd.h" #include "src/core/lib/iomgr/polling_entity.h" #include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/uri/uri_parser.h" diff --git a/test/core/util/reconnect_server.cc b/test/core/util/reconnect_server.cc index fe6c4781453..e14e5121dd6 100644 --- a/test/core/util/reconnect_server.cc +++ b/test/core/util/reconnect_server.cc @@ -29,7 +29,7 @@ #include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/error.h" -#include "src/core/lib/iomgr/pollset.h" +#include "src/core/lib/iomgr/iomgr_fwd.h" #include "src/core/lib/iomgr/tcp_server.h" #include "test/core/util/test_tcp_server.h" diff --git a/test/core/util/test_lb_policies.cc b/test/core/util/test_lb_policies.cc index a6f0cc74e04..bd1ac07d324 100644 --- a/test/core/util/test_lb_policies.cc +++ b/test/core/util/test_lb_policies.cc @@ -33,6 +33,7 @@ #include "src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h" #include "src/core/lib/address_utils/parse_address.h" #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/gprpp/orphanable.h" #include "src/core/lib/gprpp/ref_counted_ptr.h" #include "src/core/lib/gprpp/time.h" @@ -66,8 +67,9 @@ class ForwardingLoadBalancingPolicy : public LoadBalancingPolicy { delegate_args.work_serializer = work_serializer(); delegate_args.channel_control_helper = std::move(delegating_helper); delegate_args.args = channel_args(); - delegate_ = LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy( - delegate_policy_name, std::move(delegate_args)); + delegate_ = + CoreConfiguration::Get().lb_policy_registry().CreateLoadBalancingPolicy( + delegate_policy_name, std::move(delegate_args)); grpc_pollset_set_add_pollset_set(delegate_->interested_parties(), interested_parties()); } @@ -657,31 +659,35 @@ class OobBackendMetricTestFactory : public LoadBalancingPolicyFactory { } // namespace void RegisterTestPickArgsLoadBalancingPolicy( - TestPickArgsCallback cb, absl::string_view delegate_policy_name) { - LoadBalancingPolicyRegistry::Builder::RegisterLoadBalancingPolicyFactory( + CoreConfiguration::Builder* builder, TestPickArgsCallback cb, + absl::string_view delegate_policy_name) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( absl::make_unique(std::move(cb), delegate_policy_name)); } void RegisterInterceptRecvTrailingMetadataLoadBalancingPolicy( + CoreConfiguration::Builder* builder, InterceptRecvTrailingMetadataCallback cb) { - LoadBalancingPolicyRegistry::Builder::RegisterLoadBalancingPolicyFactory( + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( absl::make_unique(std::move(cb))); } -void RegisterAddressTestLoadBalancingPolicy(AddressTestCallback cb) { - LoadBalancingPolicyRegistry::Builder::RegisterLoadBalancingPolicyFactory( +void RegisterAddressTestLoadBalancingPolicy(CoreConfiguration::Builder* builder, + AddressTestCallback cb) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( absl::make_unique(std::move(cb))); } -void RegisterFixedAddressLoadBalancingPolicy() { - LoadBalancingPolicyRegistry::Builder::RegisterLoadBalancingPolicyFactory( +void RegisterFixedAddressLoadBalancingPolicy( + CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( absl::make_unique()); } void RegisterOobBackendMetricTestLoadBalancingPolicy( - OobBackendMetricCallback cb) { - LoadBalancingPolicyRegistry::Builder::RegisterLoadBalancingPolicyFactory( + CoreConfiguration::Builder* builder, OobBackendMetricCallback cb) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( absl::make_unique(std::move(cb))); } diff --git a/test/core/util/test_lb_policies.h b/test/core/util/test_lb_policies.h index 0a5ef06e52e..1cd85f27a1f 100644 --- a/test/core/util/test_lb_policies.h +++ b/test/core/util/test_lb_policies.h @@ -17,6 +17,8 @@ #ifndef GRPC_TEST_CORE_UTIL_TEST_LB_POLICIES_H #define GRPC_TEST_CORE_UTIL_TEST_LB_POLICIES_H +#include + #include #include #include @@ -26,6 +28,7 @@ #include "absl/strings/string_view.h" #include "src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h" +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/resolver/server_address.h" namespace grpc_core { @@ -39,10 +42,10 @@ struct PickArgsSeen { using TestPickArgsCallback = std::function; -// Registers an LB policy called "test_pick_args_lb" that passes the args -// passed to SubchannelPicker::Pick() to cb. +// Registers an LB policy called "test_pick_args_lb" that passes the args passed +// to SubchannelPicker::Pick() to cb. void RegisterTestPickArgsLoadBalancingPolicy( - TestPickArgsCallback cb, + CoreConfiguration::Builder* builder, TestPickArgsCallback cb, absl::string_view delegate_policy_name = "pick_first"); struct TrailingMetadataArgsSeen { @@ -57,17 +60,20 @@ using InterceptRecvTrailingMetadataCallback = // Registers an LB policy called "intercept_trailing_metadata_lb" that // invokes cb when trailing metadata is received for each call. void RegisterInterceptRecvTrailingMetadataLoadBalancingPolicy( + CoreConfiguration::Builder* builder, InterceptRecvTrailingMetadataCallback cb); using AddressTestCallback = std::function; // Registers an LB policy called "address_test_lb" that invokes cb for each // address used to create a subchannel. -void RegisterAddressTestLoadBalancingPolicy(AddressTestCallback cb); +void RegisterAddressTestLoadBalancingPolicy(CoreConfiguration::Builder* builder, + AddressTestCallback cb); // Registers an LB policy called "fixed_address_lb" that provides a // single subchannel whose address is in its configuration. -void RegisterFixedAddressLoadBalancingPolicy(); +void RegisterFixedAddressLoadBalancingPolicy( + CoreConfiguration::Builder* builder); using OobBackendMetricCallback = std::function; @@ -75,7 +81,7 @@ using OobBackendMetricCallback = // Registers an LB policy called "oob_backend_metric_test_lb" that invokes // cb for each OOB backend metric report on each subchannel. void RegisterOobBackendMetricTestLoadBalancingPolicy( - OobBackendMetricCallback cb); + CoreConfiguration::Builder* builder, OobBackendMetricCallback cb); } // namespace grpc_core diff --git a/test/core/util/test_tcp_server.cc b/test/core/util/test_tcp_server.cc index 7c17bd11445..126f1a27b94 100644 --- a/test/core/util/test_tcp_server.cc +++ b/test/core/util/test_tcp_server.cc @@ -36,6 +36,7 @@ #include "src/core/lib/gprpp/time.h" #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/exec_ctx.h" +#include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/resolved_address.h" #include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/iomgr/socket_utils.h" diff --git a/test/core/util/test_tcp_server.h b/test/core/util/test_tcp_server.h index 3a3a19b88ea..7c60823256f 100644 --- a/test/core/util/test_tcp_server.h +++ b/test/core/util/test_tcp_server.h @@ -24,7 +24,7 @@ #include #include "src/core/lib/iomgr/closure.h" -#include "src/core/lib/iomgr/pollset.h" +#include "src/core/lib/iomgr/iomgr_fwd.h" #include "src/core/lib/iomgr/tcp_server.h" // test_tcp_server should be stack-allocated or new'ed, never gpr_malloc'ed diff --git a/test/core/xds/xds_lb_policy_registry_test.cc b/test/core/xds/xds_lb_policy_registry_test.cc index 3be316ee9bf..b04c490eadf 100644 --- a/test/core/xds/xds_lb_policy_registry_test.cc +++ b/test/core/xds/xds_lb_policy_registry_test.cc @@ -28,6 +28,7 @@ #include +#include "src/core/lib/config/core_configuration.h" #include "src/core/lib/load_balancing/lb_policy_factory.h" #include "src/core/lib/load_balancing/lb_policy_registry.h" #include "src/proto/grpc/testing/xds/v3/cluster.grpc.pb.h" @@ -508,9 +509,12 @@ TEST(XdsLbPolicyRegistryTest, MaxRecursion) { int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); grpc::testing::TestEnvironment env(&argc, argv); - grpc_core::LoadBalancingPolicyRegistry::Builder:: - RegisterLoadBalancingPolicyFactory( - absl::make_unique()); + grpc_core::CoreConfiguration::RegisterBuilder( + [](grpc_core::CoreConfiguration::Builder* builder) { + builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory( + absl::make_unique()); + }); + grpc_init(); auto result = RUN_ALL_TESTS(); grpc_shutdown(); diff --git a/test/cpp/end2end/client_lb_end2end_test.cc b/test/cpp/end2end/client_lb_end2end_test.cc index 0014935e436..27ba2e97098 100644 --- a/test/cpp/end2end/client_lb_end2end_test.cc +++ b/test/cpp/end2end/client_lb_end2end_test.cc @@ -2126,11 +2126,19 @@ class ClientLbPickArgsTest : public ClientLbEnd2endTest { } static void SetUpTestCase() { + grpc_core::CoreConfiguration::Reset(); + grpc_core::CoreConfiguration::RegisterBuilder( + [](grpc_core::CoreConfiguration::Builder* builder) { + grpc_core::RegisterTestPickArgsLoadBalancingPolicy(builder, + SavePickArgs); + }); grpc_init(); - grpc_core::RegisterTestPickArgsLoadBalancingPolicy(SavePickArgs); } - static void TearDownTestCase() { grpc_shutdown(); } + static void TearDownTestCase() { + grpc_shutdown(); + grpc_core::CoreConfiguration::Reset(); + } std::vector args_seen_list() { grpc_core::MutexLock lock(&mu_); @@ -2223,12 +2231,19 @@ class ClientLbInterceptTrailingMetadataTest : public ClientLbEnd2endTest { } static void SetUpTestCase() { + grpc_core::CoreConfiguration::Reset(); + grpc_core::CoreConfiguration::RegisterBuilder( + [](grpc_core::CoreConfiguration::Builder* builder) { + grpc_core::RegisterInterceptRecvTrailingMetadataLoadBalancingPolicy( + builder, ReportTrailerIntercepted); + }); grpc_init(); - grpc_core::RegisterInterceptRecvTrailingMetadataLoadBalancingPolicy( - ReportTrailerIntercepted); } - static void TearDownTestCase() { grpc_shutdown(); } + static void TearDownTestCase() { + grpc_shutdown(); + grpc_core::CoreConfiguration::Reset(); + } int num_trailers_intercepted() { grpc_core::MutexLock lock(&mu_); @@ -2497,11 +2512,19 @@ class ClientLbAddressTest : public ClientLbEnd2endTest { } static void SetUpTestCase() { + grpc_core::CoreConfiguration::Reset(); + grpc_core::CoreConfiguration::RegisterBuilder( + [](grpc_core::CoreConfiguration::Builder* builder) { + grpc_core::RegisterAddressTestLoadBalancingPolicy(builder, + SaveAddress); + }); grpc_init(); - grpc_core::RegisterAddressTestLoadBalancingPolicy(SaveAddress); } - static void TearDownTestCase() { grpc_shutdown(); } + static void TearDownTestCase() { + grpc_shutdown(); + grpc_core::CoreConfiguration::Reset(); + } const std::vector& addresses_seen() { grpc_core::MutexLock lock(&mu_); @@ -2562,12 +2585,19 @@ class OobBackendMetricTest : public ClientLbEnd2endTest { } static void SetUpTestCase() { + grpc_core::CoreConfiguration::Reset(); + grpc_core::CoreConfiguration::RegisterBuilder( + [](grpc_core::CoreConfiguration::Builder* builder) { + grpc_core::RegisterOobBackendMetricTestLoadBalancingPolicy( + builder, BackendMetricCallback); + }); grpc_init(); - grpc_core::RegisterOobBackendMetricTestLoadBalancingPolicy( - BackendMetricCallback); } - static void TearDownTestCase() { grpc_shutdown(); } + static void TearDownTestCase() { + grpc_shutdown(); + grpc_core::CoreConfiguration::Reset(); + } absl::optional GetBackendMetricReport() { grpc_core::MutexLock lock(&mu_); diff --git a/test/cpp/end2end/rls_end2end_test.cc b/test/cpp/end2end/rls_end2end_test.cc index a6951fe8e83..13a44b6530c 100644 --- a/test/cpp/end2end/rls_end2end_test.cc +++ b/test/cpp/end2end/rls_end2end_test.cc @@ -160,13 +160,15 @@ class RlsEnd2endTest : public ::testing::Test { static void SetUpTestSuite() { gpr_setenv("GRPC_EXPERIMENTAL_ENABLE_RLS_LB_POLICY", "true"); GPR_GLOBAL_CONFIG_SET(grpc_client_channel_backup_poll_interval_ms, 1); + grpc_core::CoreConfiguration::RegisterBuilder( + grpc_core::RegisterFixedAddressLoadBalancingPolicy); grpc_init(); - grpc_core::RegisterFixedAddressLoadBalancingPolicy(); } static void TearDownTestSuite() { grpc_shutdown_blocking(); gpr_unsetenv("GRPC_EXPERIMENTAL_ENABLE_RLS_LB_POLICY"); + grpc_core::CoreConfiguration::Reset(); } void SetUp() override { diff --git a/test/cpp/end2end/xds/xds_outlier_detection_end2end_test.cc b/test/cpp/end2end/xds/xds_outlier_detection_end2end_test.cc index 6321f92fdec..451bce29144 100644 --- a/test/cpp/end2end/xds/xds_outlier_detection_end2end_test.cc +++ b/test/cpp/end2end/xds/xds_outlier_detection_end2end_test.cc @@ -1253,8 +1253,8 @@ int main(int argc, char** argv) { // CoreConfiguration::BuildSpecialConfiguration() instead. gpr_setenv("GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION", "true"); grpc_init(); - gpr_unsetenv("GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION"); const auto result = RUN_ALL_TESTS(); grpc_shutdown(); + gpr_unsetenv("GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION"); return result; }