• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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