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 <grpc/support/port_platform.h> 18 19 #include "src/core/lib/experiments/experiments.h" 20 21 #include <stdint.h> 22 23 #ifndef GRPC_EXPERIMENTS_ARE_FINAL 24 25 #if defined(GRPC_CFSTREAM) 26 namespace { 27 const char* const description_call_status_override_on_cancellation = 28 "Avoid overriding call status of successfully finished calls if it races " 29 "with cancellation."; 30 const char* const additional_constraints_call_status_override_on_cancellation = 31 "{}"; 32 const char* const description_call_v3 = "Promise-based call version 3."; 33 const char* const additional_constraints_call_v3 = "{}"; 34 const char* const description_canary_client_privacy = 35 "If set, canary client privacy"; 36 const char* const additional_constraints_canary_client_privacy = "{}"; 37 const char* const description_client_privacy = "If set, client privacy"; 38 const char* const additional_constraints_client_privacy = "{}"; 39 const char* const description_event_engine_client = 40 "Use EventEngine clients instead of iomgr's grpc_tcp_client"; 41 const char* const additional_constraints_event_engine_client = "{}"; 42 const char* const description_event_engine_dns = 43 "If set, use EventEngine DNSResolver for client channel resolution"; 44 const char* const additional_constraints_event_engine_dns = "{}"; 45 const char* const description_event_engine_listener = 46 "Use EventEngine listeners instead of iomgr's grpc_tcp_server"; 47 const char* const additional_constraints_event_engine_listener = "{}"; 48 const char* const description_free_large_allocator = 49 "If set, return all free bytes from a \042big\042 allocator"; 50 const char* const additional_constraints_free_large_allocator = "{}"; 51 const char* const description_http2_stats_fix = 52 "Fix on HTTP2 outgoing data stats reporting"; 53 const char* const additional_constraints_http2_stats_fix = "{}"; 54 const char* const description_keepalive_fix = 55 "Allows overriding keepalive_permit_without_calls. Refer " 56 "https://github.com/grpc/grpc/pull/33428 for more information."; 57 const char* const additional_constraints_keepalive_fix = "{}"; 58 const char* const description_keepalive_server_fix = 59 "Allows overriding keepalive_permit_without_calls for servers. Refer " 60 "https://github.com/grpc/grpc/pull/33917 for more information."; 61 const char* const additional_constraints_keepalive_server_fix = "{}"; 62 const char* const description_monitoring_experiment = 63 "Placeholder experiment to prove/disprove our monitoring is working"; 64 const char* const additional_constraints_monitoring_experiment = "{}"; 65 const char* const description_multiping = 66 "Allow more than one ping to be in flight at a time by default."; 67 const char* const additional_constraints_multiping = "{}"; 68 const char* const description_peer_state_based_framing = 69 "If set, the max sizes of frames sent to lower layers is controlled based " 70 "on the peer's memory pressure which is reflected in its max http2 frame " 71 "size."; 72 const char* const additional_constraints_peer_state_based_framing = "{}"; 73 const char* const description_pending_queue_cap = 74 "In the sync & async apis (but not the callback api), cap the number of " 75 "received but unrequested requests in the server for each call type. A " 76 "received message is one that was read from the wire on the server. A " 77 "requested message is one explicitly requested by the application using " 78 "grpc_server_request_call or grpc_server_request_registered_call (or their " 79 "wrappers in the C++ API)."; 80 const char* const additional_constraints_pending_queue_cap = "{}"; 81 const char* const description_promise_based_client_call = 82 "If set, use the new gRPC promise based call code when it's appropriate " 83 "(ie when all filters in a stack are promise based)"; 84 const char* const additional_constraints_promise_based_client_call = "{}"; 85 const uint8_t required_experiments_promise_based_client_call[] = { 86 static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineClient), 87 static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineListener)}; 88 const char* const description_promise_based_server_call = 89 "If set, use the new gRPC promise based call code when it's appropriate " 90 "(ie when all filters in a stack are promise based)"; 91 const char* const additional_constraints_promise_based_server_call = "{}"; 92 const char* const description_chaotic_good = 93 "If set, enable the chaotic good load transport (this is mostly here for " 94 "testing)"; 95 const char* const additional_constraints_chaotic_good = "{}"; 96 const uint8_t required_experiments_chaotic_good[] = { 97 static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedClientCall), 98 static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall)}; 99 const char* const description_promise_based_inproc_transport = 100 "Use promises for the in-process transport."; 101 const char* const additional_constraints_promise_based_inproc_transport = "{}"; 102 const uint8_t required_experiments_promise_based_inproc_transport[] = { 103 static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedClientCall), 104 static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall)}; 105 const char* const description_rstpit = 106 "On RST_STREAM on a server, reduce MAX_CONCURRENT_STREAMS for a short " 107 "duration"; 108 const char* const additional_constraints_rstpit = "{}"; 109 const char* const description_schedule_cancellation_over_write = 110 "Allow cancellation op to be scheduled over a write"; 111 const char* const additional_constraints_schedule_cancellation_over_write = 112 "{}"; 113 const char* const description_server_privacy = "If set, server privacy"; 114 const char* const additional_constraints_server_privacy = "{}"; 115 const char* const description_tcp_frame_size_tuning = 116 "If set, enables TCP to use RPC size estimation made by higher layers. TCP " 117 "would not indicate completion of a read operation until a specified " 118 "number of bytes have been read over the socket. Buffers are also " 119 "allocated according to estimated RPC sizes."; 120 const char* const additional_constraints_tcp_frame_size_tuning = "{}"; 121 const char* const description_tcp_rcv_lowat = 122 "Use SO_RCVLOWAT to avoid wakeups on the read path."; 123 const char* const additional_constraints_tcp_rcv_lowat = "{}"; 124 const char* const description_trace_record_callops = 125 "Enables tracing of call batch initiation and completion."; 126 const char* const additional_constraints_trace_record_callops = "{}"; 127 const char* const description_unconstrained_max_quota_buffer_size = 128 "Discard the cap on the max free pool size for one memory allocator"; 129 const char* const additional_constraints_unconstrained_max_quota_buffer_size = 130 "{}"; 131 const char* const description_work_serializer_clears_time_cache = 132 "Have the work serializer clear the time cache when it dispatches work."; 133 const char* const additional_constraints_work_serializer_clears_time_cache = 134 "{}"; 135 const char* const description_work_serializer_dispatch = 136 "Have the work serializer dispatch work to event engine for every " 137 "callback, instead of running things inline in the first thread that " 138 "successfully enqueues work."; 139 const char* const additional_constraints_work_serializer_dispatch = "{}"; 140 const uint8_t required_experiments_work_serializer_dispatch[] = { 141 static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineClient)}; 142 } // namespace 143 144 namespace grpc_core { 145 146 const ExperimentMetadata g_experiment_metadata[] = { 147 {"call_status_override_on_cancellation", 148 description_call_status_override_on_cancellation, 149 additional_constraints_call_status_override_on_cancellation, nullptr, 0, 150 false, true}, 151 {"call_v3", description_call_v3, additional_constraints_call_v3, nullptr, 0, 152 false, true}, 153 {"canary_client_privacy", description_canary_client_privacy, 154 additional_constraints_canary_client_privacy, nullptr, 0, false, false}, 155 {"client_privacy", description_client_privacy, 156 additional_constraints_client_privacy, nullptr, 0, false, false}, 157 {"event_engine_client", description_event_engine_client, 158 additional_constraints_event_engine_client, nullptr, 0, false, true}, 159 {"event_engine_dns", description_event_engine_dns, 160 additional_constraints_event_engine_dns, nullptr, 0, false, false}, 161 {"event_engine_listener", description_event_engine_listener, 162 additional_constraints_event_engine_listener, nullptr, 0, false, true}, 163 {"free_large_allocator", description_free_large_allocator, 164 additional_constraints_free_large_allocator, nullptr, 0, false, true}, 165 {"http2_stats_fix", description_http2_stats_fix, 166 additional_constraints_http2_stats_fix, nullptr, 0, true, true}, 167 {"keepalive_fix", description_keepalive_fix, 168 additional_constraints_keepalive_fix, nullptr, 0, false, false}, 169 {"keepalive_server_fix", description_keepalive_server_fix, 170 additional_constraints_keepalive_server_fix, nullptr, 0, false, false}, 171 {"monitoring_experiment", description_monitoring_experiment, 172 additional_constraints_monitoring_experiment, nullptr, 0, true, true}, 173 {"multiping", description_multiping, additional_constraints_multiping, 174 nullptr, 0, false, true}, 175 {"peer_state_based_framing", description_peer_state_based_framing, 176 additional_constraints_peer_state_based_framing, nullptr, 0, false, true}, 177 {"pending_queue_cap", description_pending_queue_cap, 178 additional_constraints_pending_queue_cap, nullptr, 0, true, true}, 179 {"promise_based_client_call", description_promise_based_client_call, 180 additional_constraints_promise_based_client_call, 181 required_experiments_promise_based_client_call, 2, false, true}, 182 {"promise_based_server_call", description_promise_based_server_call, 183 additional_constraints_promise_based_server_call, nullptr, 0, false, true}, 184 {"chaotic_good", description_chaotic_good, 185 additional_constraints_chaotic_good, required_experiments_chaotic_good, 2, 186 false, true}, 187 {"promise_based_inproc_transport", 188 description_promise_based_inproc_transport, 189 additional_constraints_promise_based_inproc_transport, 190 required_experiments_promise_based_inproc_transport, 2, false, false}, 191 {"rstpit", description_rstpit, additional_constraints_rstpit, nullptr, 0, 192 false, true}, 193 {"schedule_cancellation_over_write", 194 description_schedule_cancellation_over_write, 195 additional_constraints_schedule_cancellation_over_write, nullptr, 0, false, 196 true}, 197 {"server_privacy", description_server_privacy, 198 additional_constraints_server_privacy, nullptr, 0, false, false}, 199 {"tcp_frame_size_tuning", description_tcp_frame_size_tuning, 200 additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true}, 201 {"tcp_rcv_lowat", description_tcp_rcv_lowat, 202 additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true}, 203 {"trace_record_callops", description_trace_record_callops, 204 additional_constraints_trace_record_callops, nullptr, 0, false, true}, 205 {"unconstrained_max_quota_buffer_size", 206 description_unconstrained_max_quota_buffer_size, 207 additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, 208 false, true}, 209 {"work_serializer_clears_time_cache", 210 description_work_serializer_clears_time_cache, 211 additional_constraints_work_serializer_clears_time_cache, nullptr, 0, true, 212 true}, 213 {"work_serializer_dispatch", description_work_serializer_dispatch, 214 additional_constraints_work_serializer_dispatch, 215 required_experiments_work_serializer_dispatch, 1, false, true}, 216 }; 217 218 } // namespace grpc_core 219 220 #elif defined(GPR_WINDOWS) 221 namespace { 222 const char* const description_call_status_override_on_cancellation = 223 "Avoid overriding call status of successfully finished calls if it races " 224 "with cancellation."; 225 const char* const additional_constraints_call_status_override_on_cancellation = 226 "{}"; 227 const char* const description_call_v3 = "Promise-based call version 3."; 228 const char* const additional_constraints_call_v3 = "{}"; 229 const char* const description_canary_client_privacy = 230 "If set, canary client privacy"; 231 const char* const additional_constraints_canary_client_privacy = "{}"; 232 const char* const description_client_privacy = "If set, client privacy"; 233 const char* const additional_constraints_client_privacy = "{}"; 234 const char* const description_event_engine_client = 235 "Use EventEngine clients instead of iomgr's grpc_tcp_client"; 236 const char* const additional_constraints_event_engine_client = "{}"; 237 const char* const description_event_engine_dns = 238 "If set, use EventEngine DNSResolver for client channel resolution"; 239 const char* const additional_constraints_event_engine_dns = "{}"; 240 const char* const description_event_engine_listener = 241 "Use EventEngine listeners instead of iomgr's grpc_tcp_server"; 242 const char* const additional_constraints_event_engine_listener = "{}"; 243 const char* const description_free_large_allocator = 244 "If set, return all free bytes from a \042big\042 allocator"; 245 const char* const additional_constraints_free_large_allocator = "{}"; 246 const char* const description_http2_stats_fix = 247 "Fix on HTTP2 outgoing data stats reporting"; 248 const char* const additional_constraints_http2_stats_fix = "{}"; 249 const char* const description_keepalive_fix = 250 "Allows overriding keepalive_permit_without_calls. Refer " 251 "https://github.com/grpc/grpc/pull/33428 for more information."; 252 const char* const additional_constraints_keepalive_fix = "{}"; 253 const char* const description_keepalive_server_fix = 254 "Allows overriding keepalive_permit_without_calls for servers. Refer " 255 "https://github.com/grpc/grpc/pull/33917 for more information."; 256 const char* const additional_constraints_keepalive_server_fix = "{}"; 257 const char* const description_monitoring_experiment = 258 "Placeholder experiment to prove/disprove our monitoring is working"; 259 const char* const additional_constraints_monitoring_experiment = "{}"; 260 const char* const description_multiping = 261 "Allow more than one ping to be in flight at a time by default."; 262 const char* const additional_constraints_multiping = "{}"; 263 const char* const description_peer_state_based_framing = 264 "If set, the max sizes of frames sent to lower layers is controlled based " 265 "on the peer's memory pressure which is reflected in its max http2 frame " 266 "size."; 267 const char* const additional_constraints_peer_state_based_framing = "{}"; 268 const char* const description_pending_queue_cap = 269 "In the sync & async apis (but not the callback api), cap the number of " 270 "received but unrequested requests in the server for each call type. A " 271 "received message is one that was read from the wire on the server. A " 272 "requested message is one explicitly requested by the application using " 273 "grpc_server_request_call or grpc_server_request_registered_call (or their " 274 "wrappers in the C++ API)."; 275 const char* const additional_constraints_pending_queue_cap = "{}"; 276 const char* const description_promise_based_client_call = 277 "If set, use the new gRPC promise based call code when it's appropriate " 278 "(ie when all filters in a stack are promise based)"; 279 const char* const additional_constraints_promise_based_client_call = "{}"; 280 const uint8_t required_experiments_promise_based_client_call[] = { 281 static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineClient), 282 static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineListener)}; 283 const char* const description_promise_based_server_call = 284 "If set, use the new gRPC promise based call code when it's appropriate " 285 "(ie when all filters in a stack are promise based)"; 286 const char* const additional_constraints_promise_based_server_call = "{}"; 287 const char* const description_chaotic_good = 288 "If set, enable the chaotic good load transport (this is mostly here for " 289 "testing)"; 290 const char* const additional_constraints_chaotic_good = "{}"; 291 const uint8_t required_experiments_chaotic_good[] = { 292 static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedClientCall), 293 static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall)}; 294 const char* const description_promise_based_inproc_transport = 295 "Use promises for the in-process transport."; 296 const char* const additional_constraints_promise_based_inproc_transport = "{}"; 297 const uint8_t required_experiments_promise_based_inproc_transport[] = { 298 static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedClientCall), 299 static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall)}; 300 const char* const description_rstpit = 301 "On RST_STREAM on a server, reduce MAX_CONCURRENT_STREAMS for a short " 302 "duration"; 303 const char* const additional_constraints_rstpit = "{}"; 304 const char* const description_schedule_cancellation_over_write = 305 "Allow cancellation op to be scheduled over a write"; 306 const char* const additional_constraints_schedule_cancellation_over_write = 307 "{}"; 308 const char* const description_server_privacy = "If set, server privacy"; 309 const char* const additional_constraints_server_privacy = "{}"; 310 const char* const description_tcp_frame_size_tuning = 311 "If set, enables TCP to use RPC size estimation made by higher layers. TCP " 312 "would not indicate completion of a read operation until a specified " 313 "number of bytes have been read over the socket. Buffers are also " 314 "allocated according to estimated RPC sizes."; 315 const char* const additional_constraints_tcp_frame_size_tuning = "{}"; 316 const char* const description_tcp_rcv_lowat = 317 "Use SO_RCVLOWAT to avoid wakeups on the read path."; 318 const char* const additional_constraints_tcp_rcv_lowat = "{}"; 319 const char* const description_trace_record_callops = 320 "Enables tracing of call batch initiation and completion."; 321 const char* const additional_constraints_trace_record_callops = "{}"; 322 const char* const description_unconstrained_max_quota_buffer_size = 323 "Discard the cap on the max free pool size for one memory allocator"; 324 const char* const additional_constraints_unconstrained_max_quota_buffer_size = 325 "{}"; 326 const char* const description_work_serializer_clears_time_cache = 327 "Have the work serializer clear the time cache when it dispatches work."; 328 const char* const additional_constraints_work_serializer_clears_time_cache = 329 "{}"; 330 const char* const description_work_serializer_dispatch = 331 "Have the work serializer dispatch work to event engine for every " 332 "callback, instead of running things inline in the first thread that " 333 "successfully enqueues work."; 334 const char* const additional_constraints_work_serializer_dispatch = "{}"; 335 const uint8_t required_experiments_work_serializer_dispatch[] = { 336 static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineClient)}; 337 } // namespace 338 339 namespace grpc_core { 340 341 const ExperimentMetadata g_experiment_metadata[] = { 342 {"call_status_override_on_cancellation", 343 description_call_status_override_on_cancellation, 344 additional_constraints_call_status_override_on_cancellation, nullptr, 0, 345 false, true}, 346 {"call_v3", description_call_v3, additional_constraints_call_v3, nullptr, 0, 347 false, true}, 348 {"canary_client_privacy", description_canary_client_privacy, 349 additional_constraints_canary_client_privacy, nullptr, 0, false, false}, 350 {"client_privacy", description_client_privacy, 351 additional_constraints_client_privacy, nullptr, 0, false, false}, 352 {"event_engine_client", description_event_engine_client, 353 additional_constraints_event_engine_client, nullptr, 0, false, true}, 354 {"event_engine_dns", description_event_engine_dns, 355 additional_constraints_event_engine_dns, nullptr, 0, false, false}, 356 {"event_engine_listener", description_event_engine_listener, 357 additional_constraints_event_engine_listener, nullptr, 0, true, true}, 358 {"free_large_allocator", description_free_large_allocator, 359 additional_constraints_free_large_allocator, nullptr, 0, false, true}, 360 {"http2_stats_fix", description_http2_stats_fix, 361 additional_constraints_http2_stats_fix, nullptr, 0, true, true}, 362 {"keepalive_fix", description_keepalive_fix, 363 additional_constraints_keepalive_fix, nullptr, 0, false, false}, 364 {"keepalive_server_fix", description_keepalive_server_fix, 365 additional_constraints_keepalive_server_fix, nullptr, 0, false, false}, 366 {"monitoring_experiment", description_monitoring_experiment, 367 additional_constraints_monitoring_experiment, nullptr, 0, true, true}, 368 {"multiping", description_multiping, additional_constraints_multiping, 369 nullptr, 0, false, true}, 370 {"peer_state_based_framing", description_peer_state_based_framing, 371 additional_constraints_peer_state_based_framing, nullptr, 0, false, true}, 372 {"pending_queue_cap", description_pending_queue_cap, 373 additional_constraints_pending_queue_cap, nullptr, 0, true, true}, 374 {"promise_based_client_call", description_promise_based_client_call, 375 additional_constraints_promise_based_client_call, 376 required_experiments_promise_based_client_call, 2, false, true}, 377 {"promise_based_server_call", description_promise_based_server_call, 378 additional_constraints_promise_based_server_call, nullptr, 0, false, true}, 379 {"chaotic_good", description_chaotic_good, 380 additional_constraints_chaotic_good, required_experiments_chaotic_good, 2, 381 false, true}, 382 {"promise_based_inproc_transport", 383 description_promise_based_inproc_transport, 384 additional_constraints_promise_based_inproc_transport, 385 required_experiments_promise_based_inproc_transport, 2, false, false}, 386 {"rstpit", description_rstpit, additional_constraints_rstpit, nullptr, 0, 387 false, true}, 388 {"schedule_cancellation_over_write", 389 description_schedule_cancellation_over_write, 390 additional_constraints_schedule_cancellation_over_write, nullptr, 0, false, 391 true}, 392 {"server_privacy", description_server_privacy, 393 additional_constraints_server_privacy, nullptr, 0, false, false}, 394 {"tcp_frame_size_tuning", description_tcp_frame_size_tuning, 395 additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true}, 396 {"tcp_rcv_lowat", description_tcp_rcv_lowat, 397 additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true}, 398 {"trace_record_callops", description_trace_record_callops, 399 additional_constraints_trace_record_callops, nullptr, 0, false, true}, 400 {"unconstrained_max_quota_buffer_size", 401 description_unconstrained_max_quota_buffer_size, 402 additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, 403 false, true}, 404 {"work_serializer_clears_time_cache", 405 description_work_serializer_clears_time_cache, 406 additional_constraints_work_serializer_clears_time_cache, nullptr, 0, true, 407 true}, 408 {"work_serializer_dispatch", description_work_serializer_dispatch, 409 additional_constraints_work_serializer_dispatch, 410 required_experiments_work_serializer_dispatch, 1, false, true}, 411 }; 412 413 } // namespace grpc_core 414 415 #else 416 namespace { 417 const char* const description_call_status_override_on_cancellation = 418 "Avoid overriding call status of successfully finished calls if it races " 419 "with cancellation."; 420 const char* const additional_constraints_call_status_override_on_cancellation = 421 "{}"; 422 const char* const description_call_v3 = "Promise-based call version 3."; 423 const char* const additional_constraints_call_v3 = "{}"; 424 const char* const description_canary_client_privacy = 425 "If set, canary client privacy"; 426 const char* const additional_constraints_canary_client_privacy = "{}"; 427 const char* const description_client_privacy = "If set, client privacy"; 428 const char* const additional_constraints_client_privacy = "{}"; 429 const char* const description_event_engine_client = 430 "Use EventEngine clients instead of iomgr's grpc_tcp_client"; 431 const char* const additional_constraints_event_engine_client = "{}"; 432 const char* const description_event_engine_dns = 433 "If set, use EventEngine DNSResolver for client channel resolution"; 434 const char* const additional_constraints_event_engine_dns = "{}"; 435 const char* const description_event_engine_listener = 436 "Use EventEngine listeners instead of iomgr's grpc_tcp_server"; 437 const char* const additional_constraints_event_engine_listener = "{}"; 438 const char* const description_free_large_allocator = 439 "If set, return all free bytes from a \042big\042 allocator"; 440 const char* const additional_constraints_free_large_allocator = "{}"; 441 const char* const description_http2_stats_fix = 442 "Fix on HTTP2 outgoing data stats reporting"; 443 const char* const additional_constraints_http2_stats_fix = "{}"; 444 const char* const description_keepalive_fix = 445 "Allows overriding keepalive_permit_without_calls. Refer " 446 "https://github.com/grpc/grpc/pull/33428 for more information."; 447 const char* const additional_constraints_keepalive_fix = "{}"; 448 const char* const description_keepalive_server_fix = 449 "Allows overriding keepalive_permit_without_calls for servers. Refer " 450 "https://github.com/grpc/grpc/pull/33917 for more information."; 451 const char* const additional_constraints_keepalive_server_fix = "{}"; 452 const char* const description_monitoring_experiment = 453 "Placeholder experiment to prove/disprove our monitoring is working"; 454 const char* const additional_constraints_monitoring_experiment = "{}"; 455 const char* const description_multiping = 456 "Allow more than one ping to be in flight at a time by default."; 457 const char* const additional_constraints_multiping = "{}"; 458 const char* const description_peer_state_based_framing = 459 "If set, the max sizes of frames sent to lower layers is controlled based " 460 "on the peer's memory pressure which is reflected in its max http2 frame " 461 "size."; 462 const char* const additional_constraints_peer_state_based_framing = "{}"; 463 const char* const description_pending_queue_cap = 464 "In the sync & async apis (but not the callback api), cap the number of " 465 "received but unrequested requests in the server for each call type. A " 466 "received message is one that was read from the wire on the server. A " 467 "requested message is one explicitly requested by the application using " 468 "grpc_server_request_call or grpc_server_request_registered_call (or their " 469 "wrappers in the C++ API)."; 470 const char* const additional_constraints_pending_queue_cap = "{}"; 471 const char* const description_promise_based_client_call = 472 "If set, use the new gRPC promise based call code when it's appropriate " 473 "(ie when all filters in a stack are promise based)"; 474 const char* const additional_constraints_promise_based_client_call = "{}"; 475 const uint8_t required_experiments_promise_based_client_call[] = { 476 static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineClient), 477 static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineListener)}; 478 const char* const description_promise_based_server_call = 479 "If set, use the new gRPC promise based call code when it's appropriate " 480 "(ie when all filters in a stack are promise based)"; 481 const char* const additional_constraints_promise_based_server_call = "{}"; 482 const char* const description_chaotic_good = 483 "If set, enable the chaotic good load transport (this is mostly here for " 484 "testing)"; 485 const char* const additional_constraints_chaotic_good = "{}"; 486 const uint8_t required_experiments_chaotic_good[] = { 487 static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedClientCall), 488 static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall)}; 489 const char* const description_promise_based_inproc_transport = 490 "Use promises for the in-process transport."; 491 const char* const additional_constraints_promise_based_inproc_transport = "{}"; 492 const uint8_t required_experiments_promise_based_inproc_transport[] = { 493 static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedClientCall), 494 static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall)}; 495 const char* const description_rstpit = 496 "On RST_STREAM on a server, reduce MAX_CONCURRENT_STREAMS for a short " 497 "duration"; 498 const char* const additional_constraints_rstpit = "{}"; 499 const char* const description_schedule_cancellation_over_write = 500 "Allow cancellation op to be scheduled over a write"; 501 const char* const additional_constraints_schedule_cancellation_over_write = 502 "{}"; 503 const char* const description_server_privacy = "If set, server privacy"; 504 const char* const additional_constraints_server_privacy = "{}"; 505 const char* const description_tcp_frame_size_tuning = 506 "If set, enables TCP to use RPC size estimation made by higher layers. TCP " 507 "would not indicate completion of a read operation until a specified " 508 "number of bytes have been read over the socket. Buffers are also " 509 "allocated according to estimated RPC sizes."; 510 const char* const additional_constraints_tcp_frame_size_tuning = "{}"; 511 const char* const description_tcp_rcv_lowat = 512 "Use SO_RCVLOWAT to avoid wakeups on the read path."; 513 const char* const additional_constraints_tcp_rcv_lowat = "{}"; 514 const char* const description_trace_record_callops = 515 "Enables tracing of call batch initiation and completion."; 516 const char* const additional_constraints_trace_record_callops = "{}"; 517 const char* const description_unconstrained_max_quota_buffer_size = 518 "Discard the cap on the max free pool size for one memory allocator"; 519 const char* const additional_constraints_unconstrained_max_quota_buffer_size = 520 "{}"; 521 const char* const description_work_serializer_clears_time_cache = 522 "Have the work serializer clear the time cache when it dispatches work."; 523 const char* const additional_constraints_work_serializer_clears_time_cache = 524 "{}"; 525 const char* const description_work_serializer_dispatch = 526 "Have the work serializer dispatch work to event engine for every " 527 "callback, instead of running things inline in the first thread that " 528 "successfully enqueues work."; 529 const char* const additional_constraints_work_serializer_dispatch = "{}"; 530 const uint8_t required_experiments_work_serializer_dispatch[] = { 531 static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineClient)}; 532 } // namespace 533 534 namespace grpc_core { 535 536 const ExperimentMetadata g_experiment_metadata[] = { 537 {"call_status_override_on_cancellation", 538 description_call_status_override_on_cancellation, 539 additional_constraints_call_status_override_on_cancellation, nullptr, 0, 540 false, true}, 541 {"call_v3", description_call_v3, additional_constraints_call_v3, nullptr, 0, 542 false, true}, 543 {"canary_client_privacy", description_canary_client_privacy, 544 additional_constraints_canary_client_privacy, nullptr, 0, false, false}, 545 {"client_privacy", description_client_privacy, 546 additional_constraints_client_privacy, nullptr, 0, false, false}, 547 {"event_engine_client", description_event_engine_client, 548 additional_constraints_event_engine_client, nullptr, 0, false, true}, 549 {"event_engine_dns", description_event_engine_dns, 550 additional_constraints_event_engine_dns, nullptr, 0, true, false}, 551 {"event_engine_listener", description_event_engine_listener, 552 additional_constraints_event_engine_listener, nullptr, 0, true, true}, 553 {"free_large_allocator", description_free_large_allocator, 554 additional_constraints_free_large_allocator, nullptr, 0, false, true}, 555 {"http2_stats_fix", description_http2_stats_fix, 556 additional_constraints_http2_stats_fix, nullptr, 0, true, true}, 557 {"keepalive_fix", description_keepalive_fix, 558 additional_constraints_keepalive_fix, nullptr, 0, false, false}, 559 {"keepalive_server_fix", description_keepalive_server_fix, 560 additional_constraints_keepalive_server_fix, nullptr, 0, false, false}, 561 {"monitoring_experiment", description_monitoring_experiment, 562 additional_constraints_monitoring_experiment, nullptr, 0, true, true}, 563 {"multiping", description_multiping, additional_constraints_multiping, 564 nullptr, 0, false, true}, 565 {"peer_state_based_framing", description_peer_state_based_framing, 566 additional_constraints_peer_state_based_framing, nullptr, 0, false, true}, 567 {"pending_queue_cap", description_pending_queue_cap, 568 additional_constraints_pending_queue_cap, nullptr, 0, true, true}, 569 {"promise_based_client_call", description_promise_based_client_call, 570 additional_constraints_promise_based_client_call, 571 required_experiments_promise_based_client_call, 2, false, true}, 572 {"promise_based_server_call", description_promise_based_server_call, 573 additional_constraints_promise_based_server_call, nullptr, 0, false, true}, 574 {"chaotic_good", description_chaotic_good, 575 additional_constraints_chaotic_good, required_experiments_chaotic_good, 2, 576 false, true}, 577 {"promise_based_inproc_transport", 578 description_promise_based_inproc_transport, 579 additional_constraints_promise_based_inproc_transport, 580 required_experiments_promise_based_inproc_transport, 2, false, false}, 581 {"rstpit", description_rstpit, additional_constraints_rstpit, nullptr, 0, 582 false, true}, 583 {"schedule_cancellation_over_write", 584 description_schedule_cancellation_over_write, 585 additional_constraints_schedule_cancellation_over_write, nullptr, 0, false, 586 true}, 587 {"server_privacy", description_server_privacy, 588 additional_constraints_server_privacy, nullptr, 0, false, false}, 589 {"tcp_frame_size_tuning", description_tcp_frame_size_tuning, 590 additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true}, 591 {"tcp_rcv_lowat", description_tcp_rcv_lowat, 592 additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true}, 593 {"trace_record_callops", description_trace_record_callops, 594 additional_constraints_trace_record_callops, nullptr, 0, false, true}, 595 {"unconstrained_max_quota_buffer_size", 596 description_unconstrained_max_quota_buffer_size, 597 additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, 598 false, true}, 599 {"work_serializer_clears_time_cache", 600 description_work_serializer_clears_time_cache, 601 additional_constraints_work_serializer_clears_time_cache, nullptr, 0, true, 602 true}, 603 {"work_serializer_dispatch", description_work_serializer_dispatch, 604 additional_constraints_work_serializer_dispatch, 605 required_experiments_work_serializer_dispatch, 1, true, true}, 606 }; 607 608 } // namespace grpc_core 609 #endif 610 #endif 611