// Copyright 2023 gRPC authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Auto generated by tools/codegen/core/gen_experiments.py #include "src/core/lib/experiments/experiments.h" #include #include #ifndef GRPC_EXPERIMENTS_ARE_FINAL #if defined(GRPC_CFSTREAM) namespace { const char* const description_backoff_cap_initial_at_max = "Backoff library applies max_backoff even on initial_backoff."; const char* const additional_constraints_backoff_cap_initial_at_max = "{}"; const char* const description_call_tracer_in_transport = "Transport directly passes byte counts to CallTracer."; const char* const additional_constraints_call_tracer_in_transport = "{}"; const char* const description_chaotic_good_legacy_protocol = "If set, use the first version of the chaotic-good protocol when that " "protocol is enabled."; const char* const additional_constraints_chaotic_good_legacy_protocol = "{}"; const char* const description_disable_buffer_hint_on_high_memory_pressure = "Disable buffer hint flag parsing in the transport under high memory " "pressure."; const char* const additional_constraints_disable_buffer_hint_on_high_memory_pressure = "{}"; const char* const description_event_engine_application_callbacks = "Run application callbacks in EventEngine threads, instead of on the " "thread-local ApplicationCallbackExecCtx"; const char* const additional_constraints_event_engine_application_callbacks = "{}"; 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::kExperimentIdEventEngineApplicationCallbacks)}; 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 = "{}"; const char* const description_event_engine_dns = "If set, use EventEngine DNSResolver for client channel resolution"; const char* const additional_constraints_event_engine_dns = "{}"; const char* const description_event_engine_dns_non_client_channel = "If set, use EventEngine DNSResolver in other places besides client " "channel."; const char* const additional_constraints_event_engine_dns_non_client_channel = "{}"; 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_free_large_allocator = "If set, return all free bytes from a \042big\042 allocator"; const char* const additional_constraints_free_large_allocator = "{}"; const char* const description_local_connector_secure = "Local security connector uses TSI_SECURITY_NONE for LOCAL_TCP " "connections."; const char* const additional_constraints_local_connector_secure = "{}"; const char* const description_max_pings_wo_data_throttle = "Experiment to throttle pings to a period of 1 min when " "GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of " "completely blocking)."; const char* const additional_constraints_max_pings_wo_data_throttle = "{}"; const char* const description_monitoring_experiment = "Placeholder experiment to prove/disprove our monitoring is working"; const char* const additional_constraints_monitoring_experiment = "{}"; const char* const description_multiping = "Allow more than one ping to be in flight at a time by default."; const char* const additional_constraints_multiping = "{}"; const char* const description_pick_first_new = "New pick_first impl with memory reduction."; const char* const additional_constraints_pick_first_new = "{}"; const char* const description_posix_ee_skip_grpc_init = "Prevent the PosixEventEngine from calling grpc_init & grpc_shutdown on " "creation and destruction."; const char* const additional_constraints_posix_ee_skip_grpc_init = "{}"; const char* const description_prioritize_finished_requests = "Prioritize flushing out finished requests over other in-flight requests " "during transport writes."; const char* const additional_constraints_prioritize_finished_requests = "{}"; const char* const description_promise_based_http2_client_transport = "Use promises for the http2 client transport. We have kept client and " "server transport experiments separate to help with smoother roll outs and " "also help with interop testing."; const char* const additional_constraints_promise_based_http2_client_transport = "{}"; const char* const description_promise_based_http2_server_transport = "Use promises for the http2 server transport. We have kept client and " "server transport experiments separate to help with smoother roll outs and " "also help with interop testing."; const char* const additional_constraints_promise_based_http2_server_transport = "{}"; const char* const description_promise_based_inproc_transport = "Use promises for the in-process transport."; const char* const additional_constraints_promise_based_inproc_transport = "{}"; const char* const description_retry_in_callv3 = "Support retries with call-v3"; const char* const additional_constraints_retry_in_callv3 = "{}"; const char* const description_rq_fast_reject = "Resource quota rejects requests immediately (before allocating the " "request structure) under very high memory pressure."; const char* const additional_constraints_rq_fast_reject = "{}"; const char* const description_schedule_cancellation_over_write = "Allow cancellation op to be scheduled over a write"; const char* const additional_constraints_schedule_cancellation_over_write = "{}"; const char* const description_tcp_frame_size_tuning = "If set, enables TCP to use RPC size estimation made by higher layers. TCP " "would not indicate completion of a read operation until a specified " "number of bytes have been read over the socket. Buffers are also " "allocated according to estimated RPC sizes."; const char* const additional_constraints_tcp_frame_size_tuning = "{}"; const char* const description_tcp_rcv_lowat = "Use SO_RCVLOWAT to avoid wakeups on the read path."; const char* const additional_constraints_tcp_rcv_lowat = "{}"; const char* const description_time_caching_in_party = "Disable time caching in exec_ctx, and enable it only in a single party " "execution."; const char* const additional_constraints_time_caching_in_party = "{}"; const char* const description_trace_record_callops = "Enables tracing of call batch initiation and completion."; const char* const additional_constraints_trace_record_callops = "{}"; const char* const description_unconstrained_max_quota_buffer_size = "Discard the cap on the max free pool size for one memory allocator"; const char* const additional_constraints_unconstrained_max_quota_buffer_size = "{}"; const char* const description_work_serializer_dispatch = "Have the work serializer dispatch work to event engine for every " "callback, instead of running things inline in the first thread that " "successfully enqueues work."; const char* const additional_constraints_work_serializer_dispatch = "{}"; const char* const description_server_listener = "If set, the new server listener classes are used."; const char* const additional_constraints_server_listener = "{}"; const uint8_t required_experiments_server_listener[] = { static_cast(grpc_core::kExperimentIdWorkSerializerDispatch)}; } // namespace namespace grpc_core { const ExperimentMetadata g_experiment_metadata[] = { {"backoff_cap_initial_at_max", description_backoff_cap_initial_at_max, additional_constraints_backoff_cap_initial_at_max, nullptr, 0, true, true}, {"call_tracer_in_transport", description_call_tracer_in_transport, additional_constraints_call_tracer_in_transport, nullptr, 0, true, true}, {"chaotic_good_legacy_protocol", description_chaotic_good_legacy_protocol, additional_constraints_chaotic_good_legacy_protocol, nullptr, 0, false, true}, {"disable_buffer_hint_on_high_memory_pressure", description_disable_buffer_hint_on_high_memory_pressure, additional_constraints_disable_buffer_hint_on_high_memory_pressure, nullptr, 0, false, true}, {"event_engine_application_callbacks", description_event_engine_application_callbacks, additional_constraints_event_engine_application_callbacks, nullptr, 0, true, true}, {"event_engine_callback_cq", description_event_engine_callback_cq, additional_constraints_event_engine_callback_cq, required_experiments_event_engine_callback_cq, 1, true, true}, {"event_engine_client", description_event_engine_client, additional_constraints_event_engine_client, nullptr, 0, false, true}, {"event_engine_dns", description_event_engine_dns, additional_constraints_event_engine_dns, nullptr, 0, false, false}, {"event_engine_dns_non_client_channel", description_event_engine_dns_non_client_channel, additional_constraints_event_engine_dns_non_client_channel, nullptr, 0, false, false}, {"event_engine_listener", description_event_engine_listener, additional_constraints_event_engine_listener, nullptr, 0, false, true}, {"free_large_allocator", description_free_large_allocator, additional_constraints_free_large_allocator, nullptr, 0, false, true}, {"local_connector_secure", description_local_connector_secure, additional_constraints_local_connector_secure, nullptr, 0, false, true}, {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle, additional_constraints_max_pings_wo_data_throttle, nullptr, 0, false, true}, {"monitoring_experiment", description_monitoring_experiment, additional_constraints_monitoring_experiment, nullptr, 0, true, true}, {"multiping", description_multiping, additional_constraints_multiping, nullptr, 0, false, true}, {"pick_first_new", description_pick_first_new, additional_constraints_pick_first_new, nullptr, 0, true, true}, {"posix_ee_skip_grpc_init", description_posix_ee_skip_grpc_init, additional_constraints_posix_ee_skip_grpc_init, nullptr, 0, false, true}, {"prioritize_finished_requests", description_prioritize_finished_requests, additional_constraints_prioritize_finished_requests, nullptr, 0, false, true}, {"promise_based_http2_client_transport", description_promise_based_http2_client_transport, additional_constraints_promise_based_http2_client_transport, nullptr, 0, false, true}, {"promise_based_http2_server_transport", description_promise_based_http2_server_transport, additional_constraints_promise_based_http2_server_transport, nullptr, 0, false, true}, {"promise_based_inproc_transport", description_promise_based_inproc_transport, additional_constraints_promise_based_inproc_transport, nullptr, 0, false, false}, {"retry_in_callv3", description_retry_in_callv3, additional_constraints_retry_in_callv3, nullptr, 0, false, true}, {"rq_fast_reject", description_rq_fast_reject, additional_constraints_rq_fast_reject, nullptr, 0, false, true}, {"schedule_cancellation_over_write", description_schedule_cancellation_over_write, additional_constraints_schedule_cancellation_over_write, nullptr, 0, false, true}, {"tcp_frame_size_tuning", description_tcp_frame_size_tuning, additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true}, {"tcp_rcv_lowat", description_tcp_rcv_lowat, additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true}, {"time_caching_in_party", description_time_caching_in_party, additional_constraints_time_caching_in_party, nullptr, 0, true, true}, {"trace_record_callops", description_trace_record_callops, additional_constraints_trace_record_callops, nullptr, 0, true, true}, {"unconstrained_max_quota_buffer_size", description_unconstrained_max_quota_buffer_size, additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, false, true}, {"work_serializer_dispatch", description_work_serializer_dispatch, additional_constraints_work_serializer_dispatch, nullptr, 0, true, true}, {"server_listener", description_server_listener, additional_constraints_server_listener, required_experiments_server_listener, 1, false, true}, }; } // namespace grpc_core #elif defined(GPR_WINDOWS) namespace { const char* const description_backoff_cap_initial_at_max = "Backoff library applies max_backoff even on initial_backoff."; const char* const additional_constraints_backoff_cap_initial_at_max = "{}"; const char* const description_call_tracer_in_transport = "Transport directly passes byte counts to CallTracer."; const char* const additional_constraints_call_tracer_in_transport = "{}"; const char* const description_chaotic_good_legacy_protocol = "If set, use the first version of the chaotic-good protocol when that " "protocol is enabled."; const char* const additional_constraints_chaotic_good_legacy_protocol = "{}"; const char* const description_disable_buffer_hint_on_high_memory_pressure = "Disable buffer hint flag parsing in the transport under high memory " "pressure."; const char* const additional_constraints_disable_buffer_hint_on_high_memory_pressure = "{}"; const char* const description_event_engine_application_callbacks = "Run application callbacks in EventEngine threads, instead of on the " "thread-local ApplicationCallbackExecCtx"; const char* const additional_constraints_event_engine_application_callbacks = "{}"; 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::kExperimentIdEventEngineApplicationCallbacks)}; 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 = "{}"; const char* const description_event_engine_dns = "If set, use EventEngine DNSResolver for client channel resolution"; const char* const additional_constraints_event_engine_dns = "{}"; const char* const description_event_engine_dns_non_client_channel = "If set, use EventEngine DNSResolver in other places besides client " "channel."; const char* const additional_constraints_event_engine_dns_non_client_channel = "{}"; 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_free_large_allocator = "If set, return all free bytes from a \042big\042 allocator"; const char* const additional_constraints_free_large_allocator = "{}"; const char* const description_local_connector_secure = "Local security connector uses TSI_SECURITY_NONE for LOCAL_TCP " "connections."; const char* const additional_constraints_local_connector_secure = "{}"; const char* const description_max_pings_wo_data_throttle = "Experiment to throttle pings to a period of 1 min when " "GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of " "completely blocking)."; const char* const additional_constraints_max_pings_wo_data_throttle = "{}"; const char* const description_monitoring_experiment = "Placeholder experiment to prove/disprove our monitoring is working"; const char* const additional_constraints_monitoring_experiment = "{}"; const char* const description_multiping = "Allow more than one ping to be in flight at a time by default."; const char* const additional_constraints_multiping = "{}"; const char* const description_pick_first_new = "New pick_first impl with memory reduction."; const char* const additional_constraints_pick_first_new = "{}"; const char* const description_posix_ee_skip_grpc_init = "Prevent the PosixEventEngine from calling grpc_init & grpc_shutdown on " "creation and destruction."; const char* const additional_constraints_posix_ee_skip_grpc_init = "{}"; const char* const description_prioritize_finished_requests = "Prioritize flushing out finished requests over other in-flight requests " "during transport writes."; const char* const additional_constraints_prioritize_finished_requests = "{}"; const char* const description_promise_based_http2_client_transport = "Use promises for the http2 client transport. We have kept client and " "server transport experiments separate to help with smoother roll outs and " "also help with interop testing."; const char* const additional_constraints_promise_based_http2_client_transport = "{}"; const char* const description_promise_based_http2_server_transport = "Use promises for the http2 server transport. We have kept client and " "server transport experiments separate to help with smoother roll outs and " "also help with interop testing."; const char* const additional_constraints_promise_based_http2_server_transport = "{}"; const char* const description_promise_based_inproc_transport = "Use promises for the in-process transport."; const char* const additional_constraints_promise_based_inproc_transport = "{}"; const char* const description_retry_in_callv3 = "Support retries with call-v3"; const char* const additional_constraints_retry_in_callv3 = "{}"; const char* const description_rq_fast_reject = "Resource quota rejects requests immediately (before allocating the " "request structure) under very high memory pressure."; const char* const additional_constraints_rq_fast_reject = "{}"; const char* const description_schedule_cancellation_over_write = "Allow cancellation op to be scheduled over a write"; const char* const additional_constraints_schedule_cancellation_over_write = "{}"; const char* const description_tcp_frame_size_tuning = "If set, enables TCP to use RPC size estimation made by higher layers. TCP " "would not indicate completion of a read operation until a specified " "number of bytes have been read over the socket. Buffers are also " "allocated according to estimated RPC sizes."; const char* const additional_constraints_tcp_frame_size_tuning = "{}"; const char* const description_tcp_rcv_lowat = "Use SO_RCVLOWAT to avoid wakeups on the read path."; const char* const additional_constraints_tcp_rcv_lowat = "{}"; const char* const description_time_caching_in_party = "Disable time caching in exec_ctx, and enable it only in a single party " "execution."; const char* const additional_constraints_time_caching_in_party = "{}"; const char* const description_trace_record_callops = "Enables tracing of call batch initiation and completion."; const char* const additional_constraints_trace_record_callops = "{}"; const char* const description_unconstrained_max_quota_buffer_size = "Discard the cap on the max free pool size for one memory allocator"; const char* const additional_constraints_unconstrained_max_quota_buffer_size = "{}"; const char* const description_work_serializer_dispatch = "Have the work serializer dispatch work to event engine for every " "callback, instead of running things inline in the first thread that " "successfully enqueues work."; const char* const additional_constraints_work_serializer_dispatch = "{}"; const char* const description_server_listener = "If set, the new server listener classes are used."; const char* const additional_constraints_server_listener = "{}"; const uint8_t required_experiments_server_listener[] = { static_cast(grpc_core::kExperimentIdWorkSerializerDispatch)}; } // namespace namespace grpc_core { const ExperimentMetadata g_experiment_metadata[] = { {"backoff_cap_initial_at_max", description_backoff_cap_initial_at_max, additional_constraints_backoff_cap_initial_at_max, nullptr, 0, true, true}, {"call_tracer_in_transport", description_call_tracer_in_transport, additional_constraints_call_tracer_in_transport, nullptr, 0, true, true}, {"chaotic_good_legacy_protocol", description_chaotic_good_legacy_protocol, additional_constraints_chaotic_good_legacy_protocol, nullptr, 0, false, true}, {"disable_buffer_hint_on_high_memory_pressure", description_disable_buffer_hint_on_high_memory_pressure, additional_constraints_disable_buffer_hint_on_high_memory_pressure, nullptr, 0, false, true}, {"event_engine_application_callbacks", description_event_engine_application_callbacks, additional_constraints_event_engine_application_callbacks, nullptr, 0, true, true}, {"event_engine_callback_cq", description_event_engine_callback_cq, additional_constraints_event_engine_callback_cq, required_experiments_event_engine_callback_cq, 1, true, true}, {"event_engine_client", description_event_engine_client, additional_constraints_event_engine_client, nullptr, 0, true, true}, {"event_engine_dns", description_event_engine_dns, additional_constraints_event_engine_dns, nullptr, 0, true, false}, {"event_engine_dns_non_client_channel", description_event_engine_dns_non_client_channel, additional_constraints_event_engine_dns_non_client_channel, nullptr, 0, false, false}, {"event_engine_listener", description_event_engine_listener, additional_constraints_event_engine_listener, nullptr, 0, true, true}, {"free_large_allocator", description_free_large_allocator, additional_constraints_free_large_allocator, nullptr, 0, false, true}, {"local_connector_secure", description_local_connector_secure, additional_constraints_local_connector_secure, nullptr, 0, false, true}, {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle, additional_constraints_max_pings_wo_data_throttle, nullptr, 0, false, true}, {"monitoring_experiment", description_monitoring_experiment, additional_constraints_monitoring_experiment, nullptr, 0, true, true}, {"multiping", description_multiping, additional_constraints_multiping, nullptr, 0, false, true}, {"pick_first_new", description_pick_first_new, additional_constraints_pick_first_new, nullptr, 0, true, true}, {"posix_ee_skip_grpc_init", description_posix_ee_skip_grpc_init, additional_constraints_posix_ee_skip_grpc_init, nullptr, 0, false, true}, {"prioritize_finished_requests", description_prioritize_finished_requests, additional_constraints_prioritize_finished_requests, nullptr, 0, false, true}, {"promise_based_http2_client_transport", description_promise_based_http2_client_transport, additional_constraints_promise_based_http2_client_transport, nullptr, 0, false, true}, {"promise_based_http2_server_transport", description_promise_based_http2_server_transport, additional_constraints_promise_based_http2_server_transport, nullptr, 0, false, true}, {"promise_based_inproc_transport", description_promise_based_inproc_transport, additional_constraints_promise_based_inproc_transport, nullptr, 0, false, false}, {"retry_in_callv3", description_retry_in_callv3, additional_constraints_retry_in_callv3, nullptr, 0, false, true}, {"rq_fast_reject", description_rq_fast_reject, additional_constraints_rq_fast_reject, nullptr, 0, false, true}, {"schedule_cancellation_over_write", description_schedule_cancellation_over_write, additional_constraints_schedule_cancellation_over_write, nullptr, 0, false, true}, {"tcp_frame_size_tuning", description_tcp_frame_size_tuning, additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true}, {"tcp_rcv_lowat", description_tcp_rcv_lowat, additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true}, {"time_caching_in_party", description_time_caching_in_party, additional_constraints_time_caching_in_party, nullptr, 0, true, true}, {"trace_record_callops", description_trace_record_callops, additional_constraints_trace_record_callops, nullptr, 0, true, true}, {"unconstrained_max_quota_buffer_size", description_unconstrained_max_quota_buffer_size, additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, false, true}, {"work_serializer_dispatch", description_work_serializer_dispatch, additional_constraints_work_serializer_dispatch, nullptr, 0, true, true}, {"server_listener", description_server_listener, additional_constraints_server_listener, required_experiments_server_listener, 1, false, true}, }; } // namespace grpc_core #else namespace { const char* const description_backoff_cap_initial_at_max = "Backoff library applies max_backoff even on initial_backoff."; const char* const additional_constraints_backoff_cap_initial_at_max = "{}"; const char* const description_call_tracer_in_transport = "Transport directly passes byte counts to CallTracer."; const char* const additional_constraints_call_tracer_in_transport = "{}"; const char* const description_chaotic_good_legacy_protocol = "If set, use the first version of the chaotic-good protocol when that " "protocol is enabled."; const char* const additional_constraints_chaotic_good_legacy_protocol = "{}"; const char* const description_disable_buffer_hint_on_high_memory_pressure = "Disable buffer hint flag parsing in the transport under high memory " "pressure."; const char* const additional_constraints_disable_buffer_hint_on_high_memory_pressure = "{}"; const char* const description_event_engine_application_callbacks = "Run application callbacks in EventEngine threads, instead of on the " "thread-local ApplicationCallbackExecCtx"; const char* const additional_constraints_event_engine_application_callbacks = "{}"; 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::kExperimentIdEventEngineApplicationCallbacks)}; 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 = "{}"; const char* const description_event_engine_dns = "If set, use EventEngine DNSResolver for client channel resolution"; const char* const additional_constraints_event_engine_dns = "{}"; const char* const description_event_engine_dns_non_client_channel = "If set, use EventEngine DNSResolver in other places besides client " "channel."; const char* const additional_constraints_event_engine_dns_non_client_channel = "{}"; 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_free_large_allocator = "If set, return all free bytes from a \042big\042 allocator"; const char* const additional_constraints_free_large_allocator = "{}"; const char* const description_local_connector_secure = "Local security connector uses TSI_SECURITY_NONE for LOCAL_TCP " "connections."; const char* const additional_constraints_local_connector_secure = "{}"; const char* const description_max_pings_wo_data_throttle = "Experiment to throttle pings to a period of 1 min when " "GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of " "completely blocking)."; const char* const additional_constraints_max_pings_wo_data_throttle = "{}"; const char* const description_monitoring_experiment = "Placeholder experiment to prove/disprove our monitoring is working"; const char* const additional_constraints_monitoring_experiment = "{}"; const char* const description_multiping = "Allow more than one ping to be in flight at a time by default."; const char* const additional_constraints_multiping = "{}"; const char* const description_pick_first_new = "New pick_first impl with memory reduction."; const char* const additional_constraints_pick_first_new = "{}"; const char* const description_posix_ee_skip_grpc_init = "Prevent the PosixEventEngine from calling grpc_init & grpc_shutdown on " "creation and destruction."; const char* const additional_constraints_posix_ee_skip_grpc_init = "{}"; const char* const description_prioritize_finished_requests = "Prioritize flushing out finished requests over other in-flight requests " "during transport writes."; const char* const additional_constraints_prioritize_finished_requests = "{}"; const char* const description_promise_based_http2_client_transport = "Use promises for the http2 client transport. We have kept client and " "server transport experiments separate to help with smoother roll outs and " "also help with interop testing."; const char* const additional_constraints_promise_based_http2_client_transport = "{}"; const char* const description_promise_based_http2_server_transport = "Use promises for the http2 server transport. We have kept client and " "server transport experiments separate to help with smoother roll outs and " "also help with interop testing."; const char* const additional_constraints_promise_based_http2_server_transport = "{}"; const char* const description_promise_based_inproc_transport = "Use promises for the in-process transport."; const char* const additional_constraints_promise_based_inproc_transport = "{}"; const char* const description_retry_in_callv3 = "Support retries with call-v3"; const char* const additional_constraints_retry_in_callv3 = "{}"; const char* const description_rq_fast_reject = "Resource quota rejects requests immediately (before allocating the " "request structure) under very high memory pressure."; const char* const additional_constraints_rq_fast_reject = "{}"; const char* const description_schedule_cancellation_over_write = "Allow cancellation op to be scheduled over a write"; const char* const additional_constraints_schedule_cancellation_over_write = "{}"; const char* const description_tcp_frame_size_tuning = "If set, enables TCP to use RPC size estimation made by higher layers. TCP " "would not indicate completion of a read operation until a specified " "number of bytes have been read over the socket. Buffers are also " "allocated according to estimated RPC sizes."; const char* const additional_constraints_tcp_frame_size_tuning = "{}"; const char* const description_tcp_rcv_lowat = "Use SO_RCVLOWAT to avoid wakeups on the read path."; const char* const additional_constraints_tcp_rcv_lowat = "{}"; const char* const description_time_caching_in_party = "Disable time caching in exec_ctx, and enable it only in a single party " "execution."; const char* const additional_constraints_time_caching_in_party = "{}"; const char* const description_trace_record_callops = "Enables tracing of call batch initiation and completion."; const char* const additional_constraints_trace_record_callops = "{}"; const char* const description_unconstrained_max_quota_buffer_size = "Discard the cap on the max free pool size for one memory allocator"; const char* const additional_constraints_unconstrained_max_quota_buffer_size = "{}"; const char* const description_work_serializer_dispatch = "Have the work serializer dispatch work to event engine for every " "callback, instead of running things inline in the first thread that " "successfully enqueues work."; const char* const additional_constraints_work_serializer_dispatch = "{}"; const char* const description_server_listener = "If set, the new server listener classes are used."; const char* const additional_constraints_server_listener = "{}"; const uint8_t required_experiments_server_listener[] = { static_cast(grpc_core::kExperimentIdWorkSerializerDispatch)}; } // namespace namespace grpc_core { const ExperimentMetadata g_experiment_metadata[] = { {"backoff_cap_initial_at_max", description_backoff_cap_initial_at_max, additional_constraints_backoff_cap_initial_at_max, nullptr, 0, true, true}, {"call_tracer_in_transport", description_call_tracer_in_transport, additional_constraints_call_tracer_in_transport, nullptr, 0, true, true}, {"chaotic_good_legacy_protocol", description_chaotic_good_legacy_protocol, additional_constraints_chaotic_good_legacy_protocol, nullptr, 0, false, true}, {"disable_buffer_hint_on_high_memory_pressure", description_disable_buffer_hint_on_high_memory_pressure, additional_constraints_disable_buffer_hint_on_high_memory_pressure, nullptr, 0, false, true}, {"event_engine_application_callbacks", description_event_engine_application_callbacks, additional_constraints_event_engine_application_callbacks, nullptr, 0, true, true}, {"event_engine_callback_cq", description_event_engine_callback_cq, additional_constraints_event_engine_callback_cq, required_experiments_event_engine_callback_cq, 1, true, true}, {"event_engine_client", description_event_engine_client, additional_constraints_event_engine_client, nullptr, 0, true, true}, {"event_engine_dns", description_event_engine_dns, additional_constraints_event_engine_dns, nullptr, 0, true, false}, {"event_engine_dns_non_client_channel", description_event_engine_dns_non_client_channel, additional_constraints_event_engine_dns_non_client_channel, nullptr, 0, false, false}, {"event_engine_listener", description_event_engine_listener, additional_constraints_event_engine_listener, nullptr, 0, true, true}, {"free_large_allocator", description_free_large_allocator, additional_constraints_free_large_allocator, nullptr, 0, false, true}, {"local_connector_secure", description_local_connector_secure, additional_constraints_local_connector_secure, nullptr, 0, false, true}, {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle, additional_constraints_max_pings_wo_data_throttle, nullptr, 0, false, true}, {"monitoring_experiment", description_monitoring_experiment, additional_constraints_monitoring_experiment, nullptr, 0, true, true}, {"multiping", description_multiping, additional_constraints_multiping, nullptr, 0, false, true}, {"pick_first_new", description_pick_first_new, additional_constraints_pick_first_new, nullptr, 0, true, true}, {"posix_ee_skip_grpc_init", description_posix_ee_skip_grpc_init, additional_constraints_posix_ee_skip_grpc_init, nullptr, 0, false, true}, {"prioritize_finished_requests", description_prioritize_finished_requests, additional_constraints_prioritize_finished_requests, nullptr, 0, false, true}, {"promise_based_http2_client_transport", description_promise_based_http2_client_transport, additional_constraints_promise_based_http2_client_transport, nullptr, 0, false, true}, {"promise_based_http2_server_transport", description_promise_based_http2_server_transport, additional_constraints_promise_based_http2_server_transport, nullptr, 0, false, true}, {"promise_based_inproc_transport", description_promise_based_inproc_transport, additional_constraints_promise_based_inproc_transport, nullptr, 0, false, false}, {"retry_in_callv3", description_retry_in_callv3, additional_constraints_retry_in_callv3, nullptr, 0, false, true}, {"rq_fast_reject", description_rq_fast_reject, additional_constraints_rq_fast_reject, nullptr, 0, false, true}, {"schedule_cancellation_over_write", description_schedule_cancellation_over_write, additional_constraints_schedule_cancellation_over_write, nullptr, 0, false, true}, {"tcp_frame_size_tuning", description_tcp_frame_size_tuning, additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true}, {"tcp_rcv_lowat", description_tcp_rcv_lowat, additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true}, {"time_caching_in_party", description_time_caching_in_party, additional_constraints_time_caching_in_party, nullptr, 0, true, true}, {"trace_record_callops", description_trace_record_callops, additional_constraints_trace_record_callops, nullptr, 0, true, true}, {"unconstrained_max_quota_buffer_size", description_unconstrained_max_quota_buffer_size, additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, false, true}, {"work_serializer_dispatch", description_work_serializer_dispatch, additional_constraints_work_serializer_dispatch, nullptr, 0, true, true}, {"server_listener", description_server_listener, additional_constraints_server_listener, required_experiments_server_listener, 1, false, true}, }; } // namespace grpc_core #endif #endif