1 // Copyright 2023 gRPC authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // Auto generated by tools/codegen/core/gen_experiments.py 16 17 #include "src/core/lib/experiments/experiments.h" 18 19 #include <grpc/support/port_platform.h> 20 #include <stdint.h> 21 22 #ifndef GRPC_EXPERIMENTS_ARE_FINAL 23 24 #if defined(GRPC_CFSTREAM) 25 namespace { 26 const char* const description_backoff_cap_initial_at_max = 27 "Backoff library applies max_backoff even on initial_backoff."; 28 const char* const additional_constraints_backoff_cap_initial_at_max = "{}"; 29 const char* const description_call_tracer_in_transport = 30 "Transport directly passes byte counts to CallTracer."; 31 const char* const additional_constraints_call_tracer_in_transport = "{}"; 32 const char* const description_chaotic_good_legacy_protocol = 33 "If set, use the first version of the chaotic-good protocol when that " 34 "protocol is enabled."; 35 const char* const additional_constraints_chaotic_good_legacy_protocol = "{}"; 36 const char* const description_disable_buffer_hint_on_high_memory_pressure = 37 "Disable buffer hint flag parsing in the transport under high memory " 38 "pressure."; 39 const char* const 40 additional_constraints_disable_buffer_hint_on_high_memory_pressure = "{}"; 41 const char* const description_event_engine_application_callbacks = 42 "Run application callbacks in EventEngine threads, instead of on the " 43 "thread-local ApplicationCallbackExecCtx"; 44 const char* const additional_constraints_event_engine_application_callbacks = 45 "{}"; 46 const char* const description_event_engine_callback_cq = 47 "Use EventEngine instead of the CallbackAlternativeCQ."; 48 const char* const additional_constraints_event_engine_callback_cq = "{}"; 49 const uint8_t required_experiments_event_engine_callback_cq[] = { 50 static_cast<uint8_t>( 51 grpc_core::kExperimentIdEventEngineApplicationCallbacks)}; 52 const char* const description_event_engine_client = 53 "Use EventEngine clients instead of iomgr's grpc_tcp_client"; 54 const char* const additional_constraints_event_engine_client = "{}"; 55 const char* const description_event_engine_dns = 56 "If set, use EventEngine DNSResolver for client channel resolution"; 57 const char* const additional_constraints_event_engine_dns = "{}"; 58 const char* const description_event_engine_dns_non_client_channel = 59 "If set, use EventEngine DNSResolver in other places besides client " 60 "channel."; 61 const char* const additional_constraints_event_engine_dns_non_client_channel = 62 "{}"; 63 const char* const description_event_engine_listener = 64 "Use EventEngine listeners instead of iomgr's grpc_tcp_server"; 65 const char* const additional_constraints_event_engine_listener = "{}"; 66 const char* const description_free_large_allocator = 67 "If set, return all free bytes from a \042big\042 allocator"; 68 const char* const additional_constraints_free_large_allocator = "{}"; 69 const char* const description_local_connector_secure = 70 "Local security connector uses TSI_SECURITY_NONE for LOCAL_TCP " 71 "connections."; 72 const char* const additional_constraints_local_connector_secure = "{}"; 73 const char* const description_max_pings_wo_data_throttle = 74 "Experiment to throttle pings to a period of 1 min when " 75 "GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of " 76 "completely blocking)."; 77 const char* const additional_constraints_max_pings_wo_data_throttle = "{}"; 78 const char* const description_monitoring_experiment = 79 "Placeholder experiment to prove/disprove our monitoring is working"; 80 const char* const additional_constraints_monitoring_experiment = "{}"; 81 const char* const description_multiping = 82 "Allow more than one ping to be in flight at a time by default."; 83 const char* const additional_constraints_multiping = "{}"; 84 const char* const description_pick_first_new = 85 "New pick_first impl with memory reduction."; 86 const char* const additional_constraints_pick_first_new = "{}"; 87 const char* const description_posix_ee_skip_grpc_init = 88 "Prevent the PosixEventEngine from calling grpc_init & grpc_shutdown on " 89 "creation and destruction."; 90 const char* const additional_constraints_posix_ee_skip_grpc_init = "{}"; 91 const char* const description_prioritize_finished_requests = 92 "Prioritize flushing out finished requests over other in-flight requests " 93 "during transport writes."; 94 const char* const additional_constraints_prioritize_finished_requests = "{}"; 95 const char* const description_promise_based_http2_client_transport = 96 "Use promises for the http2 client transport. We have kept client and " 97 "server transport experiments separate to help with smoother roll outs and " 98 "also help with interop testing."; 99 const char* const additional_constraints_promise_based_http2_client_transport = 100 "{}"; 101 const char* const description_promise_based_http2_server_transport = 102 "Use promises for the http2 server transport. We have kept client and " 103 "server transport experiments separate to help with smoother roll outs and " 104 "also help with interop testing."; 105 const char* const additional_constraints_promise_based_http2_server_transport = 106 "{}"; 107 const char* const description_promise_based_inproc_transport = 108 "Use promises for the in-process transport."; 109 const char* const additional_constraints_promise_based_inproc_transport = "{}"; 110 const char* const description_retry_in_callv3 = "Support retries with call-v3"; 111 const char* const additional_constraints_retry_in_callv3 = "{}"; 112 const char* const description_rq_fast_reject = 113 "Resource quota rejects requests immediately (before allocating the " 114 "request structure) under very high memory pressure."; 115 const char* const additional_constraints_rq_fast_reject = "{}"; 116 const char* const description_schedule_cancellation_over_write = 117 "Allow cancellation op to be scheduled over a write"; 118 const char* const additional_constraints_schedule_cancellation_over_write = 119 "{}"; 120 const char* const description_tcp_frame_size_tuning = 121 "If set, enables TCP to use RPC size estimation made by higher layers. TCP " 122 "would not indicate completion of a read operation until a specified " 123 "number of bytes have been read over the socket. Buffers are also " 124 "allocated according to estimated RPC sizes."; 125 const char* const additional_constraints_tcp_frame_size_tuning = "{}"; 126 const char* const description_tcp_rcv_lowat = 127 "Use SO_RCVLOWAT to avoid wakeups on the read path."; 128 const char* const additional_constraints_tcp_rcv_lowat = "{}"; 129 const char* const description_time_caching_in_party = 130 "Disable time caching in exec_ctx, and enable it only in a single party " 131 "execution."; 132 const char* const additional_constraints_time_caching_in_party = "{}"; 133 const char* const description_trace_record_callops = 134 "Enables tracing of call batch initiation and completion."; 135 const char* const additional_constraints_trace_record_callops = "{}"; 136 const char* const description_unconstrained_max_quota_buffer_size = 137 "Discard the cap on the max free pool size for one memory allocator"; 138 const char* const additional_constraints_unconstrained_max_quota_buffer_size = 139 "{}"; 140 const char* const description_work_serializer_dispatch = 141 "Have the work serializer dispatch work to event engine for every " 142 "callback, instead of running things inline in the first thread that " 143 "successfully enqueues work."; 144 const char* const additional_constraints_work_serializer_dispatch = "{}"; 145 const char* const description_server_listener = 146 "If set, the new server listener classes are used."; 147 const char* const additional_constraints_server_listener = "{}"; 148 const uint8_t required_experiments_server_listener[] = { 149 static_cast<uint8_t>(grpc_core::kExperimentIdWorkSerializerDispatch)}; 150 } // namespace 151 152 namespace grpc_core { 153 154 const ExperimentMetadata g_experiment_metadata[] = { 155 {"backoff_cap_initial_at_max", description_backoff_cap_initial_at_max, 156 additional_constraints_backoff_cap_initial_at_max, nullptr, 0, true, true}, 157 {"call_tracer_in_transport", description_call_tracer_in_transport, 158 additional_constraints_call_tracer_in_transport, nullptr, 0, true, true}, 159 {"chaotic_good_legacy_protocol", description_chaotic_good_legacy_protocol, 160 additional_constraints_chaotic_good_legacy_protocol, nullptr, 0, false, 161 true}, 162 {"disable_buffer_hint_on_high_memory_pressure", 163 description_disable_buffer_hint_on_high_memory_pressure, 164 additional_constraints_disable_buffer_hint_on_high_memory_pressure, 165 nullptr, 0, false, true}, 166 {"event_engine_application_callbacks", 167 description_event_engine_application_callbacks, 168 additional_constraints_event_engine_application_callbacks, nullptr, 0, 169 true, true}, 170 {"event_engine_callback_cq", description_event_engine_callback_cq, 171 additional_constraints_event_engine_callback_cq, 172 required_experiments_event_engine_callback_cq, 1, true, true}, 173 {"event_engine_client", description_event_engine_client, 174 additional_constraints_event_engine_client, nullptr, 0, false, true}, 175 {"event_engine_dns", description_event_engine_dns, 176 additional_constraints_event_engine_dns, nullptr, 0, false, false}, 177 {"event_engine_dns_non_client_channel", 178 description_event_engine_dns_non_client_channel, 179 additional_constraints_event_engine_dns_non_client_channel, nullptr, 0, 180 false, false}, 181 {"event_engine_listener", description_event_engine_listener, 182 additional_constraints_event_engine_listener, nullptr, 0, false, true}, 183 {"free_large_allocator", description_free_large_allocator, 184 additional_constraints_free_large_allocator, nullptr, 0, false, true}, 185 {"local_connector_secure", description_local_connector_secure, 186 additional_constraints_local_connector_secure, nullptr, 0, false, true}, 187 {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle, 188 additional_constraints_max_pings_wo_data_throttle, nullptr, 0, false, 189 true}, 190 {"monitoring_experiment", description_monitoring_experiment, 191 additional_constraints_monitoring_experiment, nullptr, 0, true, true}, 192 {"multiping", description_multiping, additional_constraints_multiping, 193 nullptr, 0, false, true}, 194 {"pick_first_new", description_pick_first_new, 195 additional_constraints_pick_first_new, nullptr, 0, true, true}, 196 {"posix_ee_skip_grpc_init", description_posix_ee_skip_grpc_init, 197 additional_constraints_posix_ee_skip_grpc_init, nullptr, 0, false, true}, 198 {"prioritize_finished_requests", description_prioritize_finished_requests, 199 additional_constraints_prioritize_finished_requests, nullptr, 0, false, 200 true}, 201 {"promise_based_http2_client_transport", 202 description_promise_based_http2_client_transport, 203 additional_constraints_promise_based_http2_client_transport, nullptr, 0, 204 false, true}, 205 {"promise_based_http2_server_transport", 206 description_promise_based_http2_server_transport, 207 additional_constraints_promise_based_http2_server_transport, nullptr, 0, 208 false, true}, 209 {"promise_based_inproc_transport", 210 description_promise_based_inproc_transport, 211 additional_constraints_promise_based_inproc_transport, nullptr, 0, false, 212 false}, 213 {"retry_in_callv3", description_retry_in_callv3, 214 additional_constraints_retry_in_callv3, nullptr, 0, false, true}, 215 {"rq_fast_reject", description_rq_fast_reject, 216 additional_constraints_rq_fast_reject, nullptr, 0, false, true}, 217 {"schedule_cancellation_over_write", 218 description_schedule_cancellation_over_write, 219 additional_constraints_schedule_cancellation_over_write, nullptr, 0, false, 220 true}, 221 {"tcp_frame_size_tuning", description_tcp_frame_size_tuning, 222 additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true}, 223 {"tcp_rcv_lowat", description_tcp_rcv_lowat, 224 additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true}, 225 {"time_caching_in_party", description_time_caching_in_party, 226 additional_constraints_time_caching_in_party, nullptr, 0, true, true}, 227 {"trace_record_callops", description_trace_record_callops, 228 additional_constraints_trace_record_callops, nullptr, 0, true, true}, 229 {"unconstrained_max_quota_buffer_size", 230 description_unconstrained_max_quota_buffer_size, 231 additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, 232 false, true}, 233 {"work_serializer_dispatch", description_work_serializer_dispatch, 234 additional_constraints_work_serializer_dispatch, nullptr, 0, true, true}, 235 {"server_listener", description_server_listener, 236 additional_constraints_server_listener, 237 required_experiments_server_listener, 1, false, true}, 238 }; 239 240 } // namespace grpc_core 241 242 #elif defined(GPR_WINDOWS) 243 namespace { 244 const char* const description_backoff_cap_initial_at_max = 245 "Backoff library applies max_backoff even on initial_backoff."; 246 const char* const additional_constraints_backoff_cap_initial_at_max = "{}"; 247 const char* const description_call_tracer_in_transport = 248 "Transport directly passes byte counts to CallTracer."; 249 const char* const additional_constraints_call_tracer_in_transport = "{}"; 250 const char* const description_chaotic_good_legacy_protocol = 251 "If set, use the first version of the chaotic-good protocol when that " 252 "protocol is enabled."; 253 const char* const additional_constraints_chaotic_good_legacy_protocol = "{}"; 254 const char* const description_disable_buffer_hint_on_high_memory_pressure = 255 "Disable buffer hint flag parsing in the transport under high memory " 256 "pressure."; 257 const char* const 258 additional_constraints_disable_buffer_hint_on_high_memory_pressure = "{}"; 259 const char* const description_event_engine_application_callbacks = 260 "Run application callbacks in EventEngine threads, instead of on the " 261 "thread-local ApplicationCallbackExecCtx"; 262 const char* const additional_constraints_event_engine_application_callbacks = 263 "{}"; 264 const char* const description_event_engine_callback_cq = 265 "Use EventEngine instead of the CallbackAlternativeCQ."; 266 const char* const additional_constraints_event_engine_callback_cq = "{}"; 267 const uint8_t required_experiments_event_engine_callback_cq[] = { 268 static_cast<uint8_t>( 269 grpc_core::kExperimentIdEventEngineApplicationCallbacks)}; 270 const char* const description_event_engine_client = 271 "Use EventEngine clients instead of iomgr's grpc_tcp_client"; 272 const char* const additional_constraints_event_engine_client = "{}"; 273 const char* const description_event_engine_dns = 274 "If set, use EventEngine DNSResolver for client channel resolution"; 275 const char* const additional_constraints_event_engine_dns = "{}"; 276 const char* const description_event_engine_dns_non_client_channel = 277 "If set, use EventEngine DNSResolver in other places besides client " 278 "channel."; 279 const char* const additional_constraints_event_engine_dns_non_client_channel = 280 "{}"; 281 const char* const description_event_engine_listener = 282 "Use EventEngine listeners instead of iomgr's grpc_tcp_server"; 283 const char* const additional_constraints_event_engine_listener = "{}"; 284 const char* const description_free_large_allocator = 285 "If set, return all free bytes from a \042big\042 allocator"; 286 const char* const additional_constraints_free_large_allocator = "{}"; 287 const char* const description_local_connector_secure = 288 "Local security connector uses TSI_SECURITY_NONE for LOCAL_TCP " 289 "connections."; 290 const char* const additional_constraints_local_connector_secure = "{}"; 291 const char* const description_max_pings_wo_data_throttle = 292 "Experiment to throttle pings to a period of 1 min when " 293 "GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of " 294 "completely blocking)."; 295 const char* const additional_constraints_max_pings_wo_data_throttle = "{}"; 296 const char* const description_monitoring_experiment = 297 "Placeholder experiment to prove/disprove our monitoring is working"; 298 const char* const additional_constraints_monitoring_experiment = "{}"; 299 const char* const description_multiping = 300 "Allow more than one ping to be in flight at a time by default."; 301 const char* const additional_constraints_multiping = "{}"; 302 const char* const description_pick_first_new = 303 "New pick_first impl with memory reduction."; 304 const char* const additional_constraints_pick_first_new = "{}"; 305 const char* const description_posix_ee_skip_grpc_init = 306 "Prevent the PosixEventEngine from calling grpc_init & grpc_shutdown on " 307 "creation and destruction."; 308 const char* const additional_constraints_posix_ee_skip_grpc_init = "{}"; 309 const char* const description_prioritize_finished_requests = 310 "Prioritize flushing out finished requests over other in-flight requests " 311 "during transport writes."; 312 const char* const additional_constraints_prioritize_finished_requests = "{}"; 313 const char* const description_promise_based_http2_client_transport = 314 "Use promises for the http2 client transport. We have kept client and " 315 "server transport experiments separate to help with smoother roll outs and " 316 "also help with interop testing."; 317 const char* const additional_constraints_promise_based_http2_client_transport = 318 "{}"; 319 const char* const description_promise_based_http2_server_transport = 320 "Use promises for the http2 server transport. We have kept client and " 321 "server transport experiments separate to help with smoother roll outs and " 322 "also help with interop testing."; 323 const char* const additional_constraints_promise_based_http2_server_transport = 324 "{}"; 325 const char* const description_promise_based_inproc_transport = 326 "Use promises for the in-process transport."; 327 const char* const additional_constraints_promise_based_inproc_transport = "{}"; 328 const char* const description_retry_in_callv3 = "Support retries with call-v3"; 329 const char* const additional_constraints_retry_in_callv3 = "{}"; 330 const char* const description_rq_fast_reject = 331 "Resource quota rejects requests immediately (before allocating the " 332 "request structure) under very high memory pressure."; 333 const char* const additional_constraints_rq_fast_reject = "{}"; 334 const char* const description_schedule_cancellation_over_write = 335 "Allow cancellation op to be scheduled over a write"; 336 const char* const additional_constraints_schedule_cancellation_over_write = 337 "{}"; 338 const char* const description_tcp_frame_size_tuning = 339 "If set, enables TCP to use RPC size estimation made by higher layers. TCP " 340 "would not indicate completion of a read operation until a specified " 341 "number of bytes have been read over the socket. Buffers are also " 342 "allocated according to estimated RPC sizes."; 343 const char* const additional_constraints_tcp_frame_size_tuning = "{}"; 344 const char* const description_tcp_rcv_lowat = 345 "Use SO_RCVLOWAT to avoid wakeups on the read path."; 346 const char* const additional_constraints_tcp_rcv_lowat = "{}"; 347 const char* const description_time_caching_in_party = 348 "Disable time caching in exec_ctx, and enable it only in a single party " 349 "execution."; 350 const char* const additional_constraints_time_caching_in_party = "{}"; 351 const char* const description_trace_record_callops = 352 "Enables tracing of call batch initiation and completion."; 353 const char* const additional_constraints_trace_record_callops = "{}"; 354 const char* const description_unconstrained_max_quota_buffer_size = 355 "Discard the cap on the max free pool size for one memory allocator"; 356 const char* const additional_constraints_unconstrained_max_quota_buffer_size = 357 "{}"; 358 const char* const description_work_serializer_dispatch = 359 "Have the work serializer dispatch work to event engine for every " 360 "callback, instead of running things inline in the first thread that " 361 "successfully enqueues work."; 362 const char* const additional_constraints_work_serializer_dispatch = "{}"; 363 const char* const description_server_listener = 364 "If set, the new server listener classes are used."; 365 const char* const additional_constraints_server_listener = "{}"; 366 const uint8_t required_experiments_server_listener[] = { 367 static_cast<uint8_t>(grpc_core::kExperimentIdWorkSerializerDispatch)}; 368 } // namespace 369 370 namespace grpc_core { 371 372 const ExperimentMetadata g_experiment_metadata[] = { 373 {"backoff_cap_initial_at_max", description_backoff_cap_initial_at_max, 374 additional_constraints_backoff_cap_initial_at_max, nullptr, 0, true, true}, 375 {"call_tracer_in_transport", description_call_tracer_in_transport, 376 additional_constraints_call_tracer_in_transport, nullptr, 0, true, true}, 377 {"chaotic_good_legacy_protocol", description_chaotic_good_legacy_protocol, 378 additional_constraints_chaotic_good_legacy_protocol, nullptr, 0, false, 379 true}, 380 {"disable_buffer_hint_on_high_memory_pressure", 381 description_disable_buffer_hint_on_high_memory_pressure, 382 additional_constraints_disable_buffer_hint_on_high_memory_pressure, 383 nullptr, 0, false, true}, 384 {"event_engine_application_callbacks", 385 description_event_engine_application_callbacks, 386 additional_constraints_event_engine_application_callbacks, nullptr, 0, 387 true, true}, 388 {"event_engine_callback_cq", description_event_engine_callback_cq, 389 additional_constraints_event_engine_callback_cq, 390 required_experiments_event_engine_callback_cq, 1, true, true}, 391 {"event_engine_client", description_event_engine_client, 392 additional_constraints_event_engine_client, nullptr, 0, true, true}, 393 {"event_engine_dns", description_event_engine_dns, 394 additional_constraints_event_engine_dns, nullptr, 0, true, false}, 395 {"event_engine_dns_non_client_channel", 396 description_event_engine_dns_non_client_channel, 397 additional_constraints_event_engine_dns_non_client_channel, nullptr, 0, 398 false, false}, 399 {"event_engine_listener", description_event_engine_listener, 400 additional_constraints_event_engine_listener, nullptr, 0, true, true}, 401 {"free_large_allocator", description_free_large_allocator, 402 additional_constraints_free_large_allocator, nullptr, 0, false, true}, 403 {"local_connector_secure", description_local_connector_secure, 404 additional_constraints_local_connector_secure, nullptr, 0, false, true}, 405 {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle, 406 additional_constraints_max_pings_wo_data_throttle, nullptr, 0, false, 407 true}, 408 {"monitoring_experiment", description_monitoring_experiment, 409 additional_constraints_monitoring_experiment, nullptr, 0, true, true}, 410 {"multiping", description_multiping, additional_constraints_multiping, 411 nullptr, 0, false, true}, 412 {"pick_first_new", description_pick_first_new, 413 additional_constraints_pick_first_new, nullptr, 0, true, true}, 414 {"posix_ee_skip_grpc_init", description_posix_ee_skip_grpc_init, 415 additional_constraints_posix_ee_skip_grpc_init, nullptr, 0, false, true}, 416 {"prioritize_finished_requests", description_prioritize_finished_requests, 417 additional_constraints_prioritize_finished_requests, nullptr, 0, false, 418 true}, 419 {"promise_based_http2_client_transport", 420 description_promise_based_http2_client_transport, 421 additional_constraints_promise_based_http2_client_transport, nullptr, 0, 422 false, true}, 423 {"promise_based_http2_server_transport", 424 description_promise_based_http2_server_transport, 425 additional_constraints_promise_based_http2_server_transport, nullptr, 0, 426 false, true}, 427 {"promise_based_inproc_transport", 428 description_promise_based_inproc_transport, 429 additional_constraints_promise_based_inproc_transport, nullptr, 0, false, 430 false}, 431 {"retry_in_callv3", description_retry_in_callv3, 432 additional_constraints_retry_in_callv3, nullptr, 0, false, true}, 433 {"rq_fast_reject", description_rq_fast_reject, 434 additional_constraints_rq_fast_reject, nullptr, 0, false, true}, 435 {"schedule_cancellation_over_write", 436 description_schedule_cancellation_over_write, 437 additional_constraints_schedule_cancellation_over_write, nullptr, 0, false, 438 true}, 439 {"tcp_frame_size_tuning", description_tcp_frame_size_tuning, 440 additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true}, 441 {"tcp_rcv_lowat", description_tcp_rcv_lowat, 442 additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true}, 443 {"time_caching_in_party", description_time_caching_in_party, 444 additional_constraints_time_caching_in_party, nullptr, 0, true, true}, 445 {"trace_record_callops", description_trace_record_callops, 446 additional_constraints_trace_record_callops, nullptr, 0, true, true}, 447 {"unconstrained_max_quota_buffer_size", 448 description_unconstrained_max_quota_buffer_size, 449 additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, 450 false, true}, 451 {"work_serializer_dispatch", description_work_serializer_dispatch, 452 additional_constraints_work_serializer_dispatch, nullptr, 0, true, true}, 453 {"server_listener", description_server_listener, 454 additional_constraints_server_listener, 455 required_experiments_server_listener, 1, false, true}, 456 }; 457 458 } // namespace grpc_core 459 460 #else 461 namespace { 462 const char* const description_backoff_cap_initial_at_max = 463 "Backoff library applies max_backoff even on initial_backoff."; 464 const char* const additional_constraints_backoff_cap_initial_at_max = "{}"; 465 const char* const description_call_tracer_in_transport = 466 "Transport directly passes byte counts to CallTracer."; 467 const char* const additional_constraints_call_tracer_in_transport = "{}"; 468 const char* const description_chaotic_good_legacy_protocol = 469 "If set, use the first version of the chaotic-good protocol when that " 470 "protocol is enabled."; 471 const char* const additional_constraints_chaotic_good_legacy_protocol = "{}"; 472 const char* const description_disable_buffer_hint_on_high_memory_pressure = 473 "Disable buffer hint flag parsing in the transport under high memory " 474 "pressure."; 475 const char* const 476 additional_constraints_disable_buffer_hint_on_high_memory_pressure = "{}"; 477 const char* const description_event_engine_application_callbacks = 478 "Run application callbacks in EventEngine threads, instead of on the " 479 "thread-local ApplicationCallbackExecCtx"; 480 const char* const additional_constraints_event_engine_application_callbacks = 481 "{}"; 482 const char* const description_event_engine_callback_cq = 483 "Use EventEngine instead of the CallbackAlternativeCQ."; 484 const char* const additional_constraints_event_engine_callback_cq = "{}"; 485 const uint8_t required_experiments_event_engine_callback_cq[] = { 486 static_cast<uint8_t>( 487 grpc_core::kExperimentIdEventEngineApplicationCallbacks)}; 488 const char* const description_event_engine_client = 489 "Use EventEngine clients instead of iomgr's grpc_tcp_client"; 490 const char* const additional_constraints_event_engine_client = "{}"; 491 const char* const description_event_engine_dns = 492 "If set, use EventEngine DNSResolver for client channel resolution"; 493 const char* const additional_constraints_event_engine_dns = "{}"; 494 const char* const description_event_engine_dns_non_client_channel = 495 "If set, use EventEngine DNSResolver in other places besides client " 496 "channel."; 497 const char* const additional_constraints_event_engine_dns_non_client_channel = 498 "{}"; 499 const char* const description_event_engine_listener = 500 "Use EventEngine listeners instead of iomgr's grpc_tcp_server"; 501 const char* const additional_constraints_event_engine_listener = "{}"; 502 const char* const description_free_large_allocator = 503 "If set, return all free bytes from a \042big\042 allocator"; 504 const char* const additional_constraints_free_large_allocator = "{}"; 505 const char* const description_local_connector_secure = 506 "Local security connector uses TSI_SECURITY_NONE for LOCAL_TCP " 507 "connections."; 508 const char* const additional_constraints_local_connector_secure = "{}"; 509 const char* const description_max_pings_wo_data_throttle = 510 "Experiment to throttle pings to a period of 1 min when " 511 "GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of " 512 "completely blocking)."; 513 const char* const additional_constraints_max_pings_wo_data_throttle = "{}"; 514 const char* const description_monitoring_experiment = 515 "Placeholder experiment to prove/disprove our monitoring is working"; 516 const char* const additional_constraints_monitoring_experiment = "{}"; 517 const char* const description_multiping = 518 "Allow more than one ping to be in flight at a time by default."; 519 const char* const additional_constraints_multiping = "{}"; 520 const char* const description_pick_first_new = 521 "New pick_first impl with memory reduction."; 522 const char* const additional_constraints_pick_first_new = "{}"; 523 const char* const description_posix_ee_skip_grpc_init = 524 "Prevent the PosixEventEngine from calling grpc_init & grpc_shutdown on " 525 "creation and destruction."; 526 const char* const additional_constraints_posix_ee_skip_grpc_init = "{}"; 527 const char* const description_prioritize_finished_requests = 528 "Prioritize flushing out finished requests over other in-flight requests " 529 "during transport writes."; 530 const char* const additional_constraints_prioritize_finished_requests = "{}"; 531 const char* const description_promise_based_http2_client_transport = 532 "Use promises for the http2 client transport. We have kept client and " 533 "server transport experiments separate to help with smoother roll outs and " 534 "also help with interop testing."; 535 const char* const additional_constraints_promise_based_http2_client_transport = 536 "{}"; 537 const char* const description_promise_based_http2_server_transport = 538 "Use promises for the http2 server transport. We have kept client and " 539 "server transport experiments separate to help with smoother roll outs and " 540 "also help with interop testing."; 541 const char* const additional_constraints_promise_based_http2_server_transport = 542 "{}"; 543 const char* const description_promise_based_inproc_transport = 544 "Use promises for the in-process transport."; 545 const char* const additional_constraints_promise_based_inproc_transport = "{}"; 546 const char* const description_retry_in_callv3 = "Support retries with call-v3"; 547 const char* const additional_constraints_retry_in_callv3 = "{}"; 548 const char* const description_rq_fast_reject = 549 "Resource quota rejects requests immediately (before allocating the " 550 "request structure) under very high memory pressure."; 551 const char* const additional_constraints_rq_fast_reject = "{}"; 552 const char* const description_schedule_cancellation_over_write = 553 "Allow cancellation op to be scheduled over a write"; 554 const char* const additional_constraints_schedule_cancellation_over_write = 555 "{}"; 556 const char* const description_tcp_frame_size_tuning = 557 "If set, enables TCP to use RPC size estimation made by higher layers. TCP " 558 "would not indicate completion of a read operation until a specified " 559 "number of bytes have been read over the socket. Buffers are also " 560 "allocated according to estimated RPC sizes."; 561 const char* const additional_constraints_tcp_frame_size_tuning = "{}"; 562 const char* const description_tcp_rcv_lowat = 563 "Use SO_RCVLOWAT to avoid wakeups on the read path."; 564 const char* const additional_constraints_tcp_rcv_lowat = "{}"; 565 const char* const description_time_caching_in_party = 566 "Disable time caching in exec_ctx, and enable it only in a single party " 567 "execution."; 568 const char* const additional_constraints_time_caching_in_party = "{}"; 569 const char* const description_trace_record_callops = 570 "Enables tracing of call batch initiation and completion."; 571 const char* const additional_constraints_trace_record_callops = "{}"; 572 const char* const description_unconstrained_max_quota_buffer_size = 573 "Discard the cap on the max free pool size for one memory allocator"; 574 const char* const additional_constraints_unconstrained_max_quota_buffer_size = 575 "{}"; 576 const char* const description_work_serializer_dispatch = 577 "Have the work serializer dispatch work to event engine for every " 578 "callback, instead of running things inline in the first thread that " 579 "successfully enqueues work."; 580 const char* const additional_constraints_work_serializer_dispatch = "{}"; 581 const char* const description_server_listener = 582 "If set, the new server listener classes are used."; 583 const char* const additional_constraints_server_listener = "{}"; 584 const uint8_t required_experiments_server_listener[] = { 585 static_cast<uint8_t>(grpc_core::kExperimentIdWorkSerializerDispatch)}; 586 } // namespace 587 588 namespace grpc_core { 589 590 const ExperimentMetadata g_experiment_metadata[] = { 591 {"backoff_cap_initial_at_max", description_backoff_cap_initial_at_max, 592 additional_constraints_backoff_cap_initial_at_max, nullptr, 0, true, true}, 593 {"call_tracer_in_transport", description_call_tracer_in_transport, 594 additional_constraints_call_tracer_in_transport, nullptr, 0, true, true}, 595 {"chaotic_good_legacy_protocol", description_chaotic_good_legacy_protocol, 596 additional_constraints_chaotic_good_legacy_protocol, nullptr, 0, false, 597 true}, 598 {"disable_buffer_hint_on_high_memory_pressure", 599 description_disable_buffer_hint_on_high_memory_pressure, 600 additional_constraints_disable_buffer_hint_on_high_memory_pressure, 601 nullptr, 0, false, true}, 602 {"event_engine_application_callbacks", 603 description_event_engine_application_callbacks, 604 additional_constraints_event_engine_application_callbacks, nullptr, 0, 605 true, true}, 606 {"event_engine_callback_cq", description_event_engine_callback_cq, 607 additional_constraints_event_engine_callback_cq, 608 required_experiments_event_engine_callback_cq, 1, true, true}, 609 {"event_engine_client", description_event_engine_client, 610 additional_constraints_event_engine_client, nullptr, 0, true, true}, 611 {"event_engine_dns", description_event_engine_dns, 612 additional_constraints_event_engine_dns, nullptr, 0, true, false}, 613 {"event_engine_dns_non_client_channel", 614 description_event_engine_dns_non_client_channel, 615 additional_constraints_event_engine_dns_non_client_channel, nullptr, 0, 616 false, false}, 617 {"event_engine_listener", description_event_engine_listener, 618 additional_constraints_event_engine_listener, nullptr, 0, true, true}, 619 {"free_large_allocator", description_free_large_allocator, 620 additional_constraints_free_large_allocator, nullptr, 0, false, true}, 621 {"local_connector_secure", description_local_connector_secure, 622 additional_constraints_local_connector_secure, nullptr, 0, false, true}, 623 {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle, 624 additional_constraints_max_pings_wo_data_throttle, nullptr, 0, false, 625 true}, 626 {"monitoring_experiment", description_monitoring_experiment, 627 additional_constraints_monitoring_experiment, nullptr, 0, true, true}, 628 {"multiping", description_multiping, additional_constraints_multiping, 629 nullptr, 0, false, true}, 630 {"pick_first_new", description_pick_first_new, 631 additional_constraints_pick_first_new, nullptr, 0, true, true}, 632 {"posix_ee_skip_grpc_init", description_posix_ee_skip_grpc_init, 633 additional_constraints_posix_ee_skip_grpc_init, nullptr, 0, false, true}, 634 {"prioritize_finished_requests", description_prioritize_finished_requests, 635 additional_constraints_prioritize_finished_requests, nullptr, 0, false, 636 true}, 637 {"promise_based_http2_client_transport", 638 description_promise_based_http2_client_transport, 639 additional_constraints_promise_based_http2_client_transport, nullptr, 0, 640 false, true}, 641 {"promise_based_http2_server_transport", 642 description_promise_based_http2_server_transport, 643 additional_constraints_promise_based_http2_server_transport, nullptr, 0, 644 false, true}, 645 {"promise_based_inproc_transport", 646 description_promise_based_inproc_transport, 647 additional_constraints_promise_based_inproc_transport, nullptr, 0, false, 648 false}, 649 {"retry_in_callv3", description_retry_in_callv3, 650 additional_constraints_retry_in_callv3, nullptr, 0, false, true}, 651 {"rq_fast_reject", description_rq_fast_reject, 652 additional_constraints_rq_fast_reject, nullptr, 0, false, true}, 653 {"schedule_cancellation_over_write", 654 description_schedule_cancellation_over_write, 655 additional_constraints_schedule_cancellation_over_write, nullptr, 0, false, 656 true}, 657 {"tcp_frame_size_tuning", description_tcp_frame_size_tuning, 658 additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true}, 659 {"tcp_rcv_lowat", description_tcp_rcv_lowat, 660 additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true}, 661 {"time_caching_in_party", description_time_caching_in_party, 662 additional_constraints_time_caching_in_party, nullptr, 0, true, true}, 663 {"trace_record_callops", description_trace_record_callops, 664 additional_constraints_trace_record_callops, nullptr, 0, true, true}, 665 {"unconstrained_max_quota_buffer_size", 666 description_unconstrained_max_quota_buffer_size, 667 additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, 668 false, true}, 669 {"work_serializer_dispatch", description_work_serializer_dispatch, 670 additional_constraints_work_serializer_dispatch, nullptr, 0, true, true}, 671 {"server_listener", description_server_listener, 672 additional_constraints_server_listener, 673 required_experiments_server_listener, 1, false, true}, 674 }; 675 676 } // namespace grpc_core 677 #endif 678 #endif 679