diff --git a/bazel/experiments.bzl b/bazel/experiments.bzl index b72cb06226216..fd88c673208df 100644 --- a/bazel/experiments.bzl +++ b/bazel/experiments.bzl @@ -22,13 +22,13 @@ EXPERIMENT_ENABLES = { "chaotic_good_framing_layer": "chaotic_good_framing_layer", "chttp2_bound_write_size": "chttp2_bound_write_size", "error_flatten": "error_flatten", + "event_engine_callback_cq": "event_engine_callback_cq,event_engine_client,event_engine_listener", "event_engine_client": "event_engine_client", "event_engine_dns": "event_engine_dns", "event_engine_dns_non_client_channel": "event_engine_dns_non_client_channel", + "event_engine_for_all_other_endpoints": "event_engine_client,event_engine_dns,event_engine_dns_non_client_channel,event_engine_for_all_other_endpoints,event_engine_listener", "event_engine_fork": "event_engine_fork", "event_engine_listener": "event_engine_listener", - "event_engine_callback_cq": "event_engine_callback_cq,event_engine_client,event_engine_listener", - "event_engine_for_all_other_endpoints": "event_engine_client,event_engine_dns,event_engine_dns_non_client_channel,event_engine_for_all_other_endpoints,event_engine_listener", "event_engine_secure_endpoint": "event_engine_secure_endpoint", "free_large_allocator": "free_large_allocator", "keep_alive_ping_timer_batch": "keep_alive_ping_timer_batch", @@ -61,9 +61,9 @@ EXPERIMENT_POLLERS = [ "event_engine_client", "event_engine_dns", "event_engine_dns_non_client_channel", + "event_engine_for_all_other_endpoints", "event_engine_fork", "event_engine_listener", - "event_engine_for_all_other_endpoints", "event_engine_secure_endpoint", ] diff --git a/src/core/lib/experiments/experiments.cc b/src/core/lib/experiments/experiments.cc index e9c86ce71fa3c..b7fe987f2bf5c 100644 --- a/src/core/lib/experiments/experiments.cc +++ b/src/core/lib/experiments/experiments.cc @@ -38,6 +38,12 @@ const char* const additional_constraints_chttp2_bound_write_size = "{}"; const char* const description_error_flatten = "Flatten errors to ordinary absl::Status form."; const char* const additional_constraints_error_flatten = "{}"; +const char* const description_event_engine_callback_cq = + "Use EventEngine instead of the CallbackAlternativeCQ."; +const char* const additional_constraints_event_engine_callback_cq = "{}"; +const uint8_t required_experiments_event_engine_callback_cq[] = { + static_cast(grpc_core::kExperimentIdEventEngineClient), + static_cast(grpc_core::kExperimentIdEventEngineListener)}; const char* const description_event_engine_client = "Use EventEngine clients instead of iomgr's grpc_tcp_client"; const char* const additional_constraints_event_engine_client = "{}"; @@ -49,19 +55,6 @@ const char* const description_event_engine_dns_non_client_channel = "channel."; const char* const additional_constraints_event_engine_dns_non_client_channel = "{}"; -const char* const description_event_engine_fork = - "Enables event engine fork handling, including onfork events and file " - "descriptor generations"; -const char* const additional_constraints_event_engine_fork = "{}"; -const char* const description_event_engine_listener = - "Use EventEngine listeners instead of iomgr's grpc_tcp_server"; -const char* const additional_constraints_event_engine_listener = "{}"; -const char* const description_event_engine_callback_cq = - "Use EventEngine instead of the CallbackAlternativeCQ."; -const char* const additional_constraints_event_engine_callback_cq = "{}"; -const uint8_t required_experiments_event_engine_callback_cq[] = { - static_cast(grpc_core::kExperimentIdEventEngineClient), - static_cast(grpc_core::kExperimentIdEventEngineListener)}; const char* const description_event_engine_for_all_other_endpoints = "Use EventEngine endpoints for all call sites, including direct uses of " "grpc_tcp_create."; @@ -73,6 +66,13 @@ const uint8_t required_experiments_event_engine_for_all_other_endpoints[] = { static_cast( grpc_core::kExperimentIdEventEngineDnsNonClientChannel), static_cast(grpc_core::kExperimentIdEventEngineListener)}; +const char* const description_event_engine_fork = + "Enables event engine fork handling, including onfork events and file " + "descriptor generations"; +const char* const additional_constraints_event_engine_fork = "{}"; +const char* const description_event_engine_listener = + "Use EventEngine listeners instead of iomgr's grpc_tcp_server"; +const char* const additional_constraints_event_engine_listener = "{}"; const char* const description_event_engine_secure_endpoint = "Use EventEngine secure endpoint wrapper instead of iomgr when available"; const char* const additional_constraints_event_engine_secure_endpoint = "{}"; @@ -201,6 +201,9 @@ const ExperimentMetadata g_experiment_metadata[] = { additional_constraints_chttp2_bound_write_size, nullptr, 0, false, true}, {"error_flatten", description_error_flatten, additional_constraints_error_flatten, nullptr, 0, false, false}, + {"event_engine_callback_cq", description_event_engine_callback_cq, + additional_constraints_event_engine_callback_cq, + required_experiments_event_engine_callback_cq, 2, true, true}, {"event_engine_client", description_event_engine_client, additional_constraints_event_engine_client, nullptr, 0, true, false}, {"event_engine_dns", description_event_engine_dns, @@ -209,17 +212,14 @@ const ExperimentMetadata g_experiment_metadata[] = { description_event_engine_dns_non_client_channel, additional_constraints_event_engine_dns_non_client_channel, nullptr, 0, false, false}, - {"event_engine_fork", description_event_engine_fork, - additional_constraints_event_engine_fork, nullptr, 0, false, false}, - {"event_engine_listener", description_event_engine_listener, - additional_constraints_event_engine_listener, nullptr, 0, true, false}, - {"event_engine_callback_cq", description_event_engine_callback_cq, - additional_constraints_event_engine_callback_cq, - required_experiments_event_engine_callback_cq, 2, true, true}, {"event_engine_for_all_other_endpoints", description_event_engine_for_all_other_endpoints, additional_constraints_event_engine_for_all_other_endpoints, required_experiments_event_engine_for_all_other_endpoints, 4, true, false}, + {"event_engine_fork", description_event_engine_fork, + additional_constraints_event_engine_fork, nullptr, 0, false, false}, + {"event_engine_listener", description_event_engine_listener, + additional_constraints_event_engine_listener, nullptr, 0, true, false}, {"event_engine_secure_endpoint", description_event_engine_secure_endpoint, additional_constraints_event_engine_secure_endpoint, nullptr, 0, true, false}, @@ -319,6 +319,12 @@ const char* const additional_constraints_chttp2_bound_write_size = "{}"; const char* const description_error_flatten = "Flatten errors to ordinary absl::Status form."; const char* const additional_constraints_error_flatten = "{}"; +const char* const description_event_engine_callback_cq = + "Use EventEngine instead of the CallbackAlternativeCQ."; +const char* const additional_constraints_event_engine_callback_cq = "{}"; +const uint8_t required_experiments_event_engine_callback_cq[] = { + static_cast(grpc_core::kExperimentIdEventEngineClient), + static_cast(grpc_core::kExperimentIdEventEngineListener)}; const char* const description_event_engine_client = "Use EventEngine clients instead of iomgr's grpc_tcp_client"; const char* const additional_constraints_event_engine_client = "{}"; @@ -330,19 +336,6 @@ const char* const description_event_engine_dns_non_client_channel = "channel."; const char* const additional_constraints_event_engine_dns_non_client_channel = "{}"; -const char* const description_event_engine_fork = - "Enables event engine fork handling, including onfork events and file " - "descriptor generations"; -const char* const additional_constraints_event_engine_fork = "{}"; -const char* const description_event_engine_listener = - "Use EventEngine listeners instead of iomgr's grpc_tcp_server"; -const char* const additional_constraints_event_engine_listener = "{}"; -const char* const description_event_engine_callback_cq = - "Use EventEngine instead of the CallbackAlternativeCQ."; -const char* const additional_constraints_event_engine_callback_cq = "{}"; -const uint8_t required_experiments_event_engine_callback_cq[] = { - static_cast(grpc_core::kExperimentIdEventEngineClient), - static_cast(grpc_core::kExperimentIdEventEngineListener)}; const char* const description_event_engine_for_all_other_endpoints = "Use EventEngine endpoints for all call sites, including direct uses of " "grpc_tcp_create."; @@ -354,6 +347,13 @@ const uint8_t required_experiments_event_engine_for_all_other_endpoints[] = { static_cast( grpc_core::kExperimentIdEventEngineDnsNonClientChannel), static_cast(grpc_core::kExperimentIdEventEngineListener)}; +const char* const description_event_engine_fork = + "Enables event engine fork handling, including onfork events and file " + "descriptor generations"; +const char* const additional_constraints_event_engine_fork = "{}"; +const char* const description_event_engine_listener = + "Use EventEngine listeners instead of iomgr's grpc_tcp_server"; +const char* const additional_constraints_event_engine_listener = "{}"; const char* const description_event_engine_secure_endpoint = "Use EventEngine secure endpoint wrapper instead of iomgr when available"; const char* const additional_constraints_event_engine_secure_endpoint = "{}"; @@ -482,6 +482,9 @@ const ExperimentMetadata g_experiment_metadata[] = { additional_constraints_chttp2_bound_write_size, nullptr, 0, false, true}, {"error_flatten", description_error_flatten, additional_constraints_error_flatten, nullptr, 0, false, false}, + {"event_engine_callback_cq", description_event_engine_callback_cq, + additional_constraints_event_engine_callback_cq, + required_experiments_event_engine_callback_cq, 2, true, true}, {"event_engine_client", description_event_engine_client, additional_constraints_event_engine_client, nullptr, 0, true, false}, {"event_engine_dns", description_event_engine_dns, @@ -490,17 +493,14 @@ const ExperimentMetadata g_experiment_metadata[] = { description_event_engine_dns_non_client_channel, additional_constraints_event_engine_dns_non_client_channel, nullptr, 0, false, false}, - {"event_engine_fork", description_event_engine_fork, - additional_constraints_event_engine_fork, nullptr, 0, false, false}, - {"event_engine_listener", description_event_engine_listener, - additional_constraints_event_engine_listener, nullptr, 0, true, false}, - {"event_engine_callback_cq", description_event_engine_callback_cq, - additional_constraints_event_engine_callback_cq, - required_experiments_event_engine_callback_cq, 2, true, true}, {"event_engine_for_all_other_endpoints", description_event_engine_for_all_other_endpoints, additional_constraints_event_engine_for_all_other_endpoints, required_experiments_event_engine_for_all_other_endpoints, 4, true, false}, + {"event_engine_fork", description_event_engine_fork, + additional_constraints_event_engine_fork, nullptr, 0, false, false}, + {"event_engine_listener", description_event_engine_listener, + additional_constraints_event_engine_listener, nullptr, 0, true, false}, {"event_engine_secure_endpoint", description_event_engine_secure_endpoint, additional_constraints_event_engine_secure_endpoint, nullptr, 0, true, false}, @@ -600,6 +600,12 @@ const char* const additional_constraints_chttp2_bound_write_size = "{}"; const char* const description_error_flatten = "Flatten errors to ordinary absl::Status form."; const char* const additional_constraints_error_flatten = "{}"; +const char* const description_event_engine_callback_cq = + "Use EventEngine instead of the CallbackAlternativeCQ."; +const char* const additional_constraints_event_engine_callback_cq = "{}"; +const uint8_t required_experiments_event_engine_callback_cq[] = { + static_cast(grpc_core::kExperimentIdEventEngineClient), + static_cast(grpc_core::kExperimentIdEventEngineListener)}; const char* const description_event_engine_client = "Use EventEngine clients instead of iomgr's grpc_tcp_client"; const char* const additional_constraints_event_engine_client = "{}"; @@ -611,19 +617,6 @@ const char* const description_event_engine_dns_non_client_channel = "channel."; const char* const additional_constraints_event_engine_dns_non_client_channel = "{}"; -const char* const description_event_engine_fork = - "Enables event engine fork handling, including onfork events and file " - "descriptor generations"; -const char* const additional_constraints_event_engine_fork = "{}"; -const char* const description_event_engine_listener = - "Use EventEngine listeners instead of iomgr's grpc_tcp_server"; -const char* const additional_constraints_event_engine_listener = "{}"; -const char* const description_event_engine_callback_cq = - "Use EventEngine instead of the CallbackAlternativeCQ."; -const char* const additional_constraints_event_engine_callback_cq = "{}"; -const uint8_t required_experiments_event_engine_callback_cq[] = { - static_cast(grpc_core::kExperimentIdEventEngineClient), - static_cast(grpc_core::kExperimentIdEventEngineListener)}; const char* const description_event_engine_for_all_other_endpoints = "Use EventEngine endpoints for all call sites, including direct uses of " "grpc_tcp_create."; @@ -635,6 +628,13 @@ const uint8_t required_experiments_event_engine_for_all_other_endpoints[] = { static_cast( grpc_core::kExperimentIdEventEngineDnsNonClientChannel), static_cast(grpc_core::kExperimentIdEventEngineListener)}; +const char* const description_event_engine_fork = + "Enables event engine fork handling, including onfork events and file " + "descriptor generations"; +const char* const additional_constraints_event_engine_fork = "{}"; +const char* const description_event_engine_listener = + "Use EventEngine listeners instead of iomgr's grpc_tcp_server"; +const char* const additional_constraints_event_engine_listener = "{}"; const char* const description_event_engine_secure_endpoint = "Use EventEngine secure endpoint wrapper instead of iomgr when available"; const char* const additional_constraints_event_engine_secure_endpoint = "{}"; @@ -763,6 +763,9 @@ const ExperimentMetadata g_experiment_metadata[] = { additional_constraints_chttp2_bound_write_size, nullptr, 0, false, true}, {"error_flatten", description_error_flatten, additional_constraints_error_flatten, nullptr, 0, false, false}, + {"event_engine_callback_cq", description_event_engine_callback_cq, + additional_constraints_event_engine_callback_cq, + required_experiments_event_engine_callback_cq, 2, true, true}, {"event_engine_client", description_event_engine_client, additional_constraints_event_engine_client, nullptr, 0, true, false}, {"event_engine_dns", description_event_engine_dns, @@ -771,17 +774,14 @@ const ExperimentMetadata g_experiment_metadata[] = { description_event_engine_dns_non_client_channel, additional_constraints_event_engine_dns_non_client_channel, nullptr, 0, false, false}, - {"event_engine_fork", description_event_engine_fork, - additional_constraints_event_engine_fork, nullptr, 0, false, false}, - {"event_engine_listener", description_event_engine_listener, - additional_constraints_event_engine_listener, nullptr, 0, true, false}, - {"event_engine_callback_cq", description_event_engine_callback_cq, - additional_constraints_event_engine_callback_cq, - required_experiments_event_engine_callback_cq, 2, true, true}, {"event_engine_for_all_other_endpoints", description_event_engine_for_all_other_endpoints, additional_constraints_event_engine_for_all_other_endpoints, required_experiments_event_engine_for_all_other_endpoints, 4, true, false}, + {"event_engine_fork", description_event_engine_fork, + additional_constraints_event_engine_fork, nullptr, 0, false, false}, + {"event_engine_listener", description_event_engine_listener, + additional_constraints_event_engine_listener, nullptr, 0, true, false}, {"event_engine_secure_endpoint", description_event_engine_secure_endpoint, additional_constraints_event_engine_secure_endpoint, nullptr, 0, true, false}, diff --git a/src/core/lib/experiments/experiments.h b/src/core/lib/experiments/experiments.h index 6c68d96b50383..facedbc128c77 100644 --- a/src/core/lib/experiments/experiments.h +++ b/src/core/lib/experiments/experiments.h @@ -64,18 +64,18 @@ inline bool IsCallv3ClientAuthFilterEnabled() { return false; } inline bool IsChaoticGoodFramingLayerEnabled() { return true; } inline bool IsChttp2BoundWriteSizeEnabled() { return false; } inline bool IsErrorFlattenEnabled() { return false; } +#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CALLBACK_CQ +inline bool IsEventEngineCallbackCqEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT inline bool IsEventEngineClientEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS inline bool IsEventEngineDnsEnabled() { return true; } inline bool IsEventEngineDnsNonClientChannelEnabled() { return false; } +#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_FOR_ALL_OTHER_ENDPOINTS +inline bool IsEventEngineForAllOtherEndpointsEnabled() { return true; } inline bool IsEventEngineForkEnabled() { return false; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER inline bool IsEventEngineListenerEnabled() { return true; } -#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CALLBACK_CQ -inline bool IsEventEngineCallbackCqEnabled() { return true; } -#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_FOR_ALL_OTHER_ENDPOINTS -inline bool IsEventEngineForAllOtherEndpointsEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_SECURE_ENDPOINT inline bool IsEventEngineSecureEndpointEnabled() { return true; } inline bool IsFreeLargeAllocatorEnabled() { return false; } @@ -118,18 +118,18 @@ inline bool IsCallv3ClientAuthFilterEnabled() { return false; } inline bool IsChaoticGoodFramingLayerEnabled() { return true; } inline bool IsChttp2BoundWriteSizeEnabled() { return false; } inline bool IsErrorFlattenEnabled() { return false; } +#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CALLBACK_CQ +inline bool IsEventEngineCallbackCqEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT inline bool IsEventEngineClientEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS inline bool IsEventEngineDnsEnabled() { return true; } inline bool IsEventEngineDnsNonClientChannelEnabled() { return false; } +#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_FOR_ALL_OTHER_ENDPOINTS +inline bool IsEventEngineForAllOtherEndpointsEnabled() { return true; } inline bool IsEventEngineForkEnabled() { return false; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER inline bool IsEventEngineListenerEnabled() { return true; } -#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CALLBACK_CQ -inline bool IsEventEngineCallbackCqEnabled() { return true; } -#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_FOR_ALL_OTHER_ENDPOINTS -inline bool IsEventEngineForAllOtherEndpointsEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_SECURE_ENDPOINT inline bool IsEventEngineSecureEndpointEnabled() { return true; } inline bool IsFreeLargeAllocatorEnabled() { return false; } @@ -172,18 +172,18 @@ inline bool IsCallv3ClientAuthFilterEnabled() { return false; } inline bool IsChaoticGoodFramingLayerEnabled() { return true; } inline bool IsChttp2BoundWriteSizeEnabled() { return false; } inline bool IsErrorFlattenEnabled() { return false; } +#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CALLBACK_CQ +inline bool IsEventEngineCallbackCqEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT inline bool IsEventEngineClientEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS inline bool IsEventEngineDnsEnabled() { return true; } inline bool IsEventEngineDnsNonClientChannelEnabled() { return false; } +#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_FOR_ALL_OTHER_ENDPOINTS +inline bool IsEventEngineForAllOtherEndpointsEnabled() { return true; } inline bool IsEventEngineForkEnabled() { return false; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER inline bool IsEventEngineListenerEnabled() { return true; } -#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CALLBACK_CQ -inline bool IsEventEngineCallbackCqEnabled() { return true; } -#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_FOR_ALL_OTHER_ENDPOINTS -inline bool IsEventEngineForAllOtherEndpointsEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_SECURE_ENDPOINT inline bool IsEventEngineSecureEndpointEnabled() { return true; } inline bool IsFreeLargeAllocatorEnabled() { return false; } @@ -226,13 +226,13 @@ enum ExperimentIds { kExperimentIdChaoticGoodFramingLayer, kExperimentIdChttp2BoundWriteSize, kExperimentIdErrorFlatten, + kExperimentIdEventEngineCallbackCq, kExperimentIdEventEngineClient, kExperimentIdEventEngineDns, kExperimentIdEventEngineDnsNonClientChannel, + kExperimentIdEventEngineForAllOtherEndpoints, kExperimentIdEventEngineFork, kExperimentIdEventEngineListener, - kExperimentIdEventEngineCallbackCq, - kExperimentIdEventEngineForAllOtherEndpoints, kExperimentIdEventEngineSecureEndpoint, kExperimentIdFreeLargeAllocator, kExperimentIdKeepAlivePingTimerBatch, @@ -281,6 +281,10 @@ inline bool IsChttp2BoundWriteSizeEnabled() { inline bool IsErrorFlattenEnabled() { return IsExperimentEnabled(); } +#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CALLBACK_CQ +inline bool IsEventEngineCallbackCqEnabled() { + return IsExperimentEnabled(); +} #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT inline bool IsEventEngineClientEnabled() { return IsExperimentEnabled(); @@ -293,6 +297,10 @@ inline bool IsEventEngineDnsEnabled() { inline bool IsEventEngineDnsNonClientChannelEnabled() { return IsExperimentEnabled(); } +#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_FOR_ALL_OTHER_ENDPOINTS +inline bool IsEventEngineForAllOtherEndpointsEnabled() { + return IsExperimentEnabled(); +} #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_FORK inline bool IsEventEngineForkEnabled() { return IsExperimentEnabled(); @@ -301,14 +309,6 @@ inline bool IsEventEngineForkEnabled() { inline bool IsEventEngineListenerEnabled() { return IsExperimentEnabled(); } -#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CALLBACK_CQ -inline bool IsEventEngineCallbackCqEnabled() { - return IsExperimentEnabled(); -} -#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_FOR_ALL_OTHER_ENDPOINTS -inline bool IsEventEngineForAllOtherEndpointsEnabled() { - return IsExperimentEnabled(); -} #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_SECURE_ENDPOINT inline bool IsEventEngineSecureEndpointEnabled() { return IsExperimentEnabled();