grpc 1.59.0 → 1.59.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +7 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +21 -17
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +504 -361
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +11 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +9 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +92 -28
- data/src/core/ext/transport/chttp2/transport/max_concurrent_streams_policy.cc +44 -0
- data/src/core/ext/transport/chttp2/transport/max_concurrent_streams_policy.h +67 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +103 -14
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +108 -0
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +115 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +26 -4
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +16 -1
- data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +60 -0
- data/src/core/ext/transport/chttp2/transport/write_size_policy.h +66 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +149 -77
- data/src/core/lib/channel/promise_based_filter.cc +9 -4
- data/src/core/lib/channel/promise_based_filter.h +2 -1
- data/src/core/lib/experiments/experiments.cc +222 -0
- data/src/core/lib/experiments/experiments.h +135 -0
- data/src/core/lib/iomgr/combiner.cc +3 -0
- data/src/core/lib/transport/metadata_batch.h +11 -1
- data/src/core/lib/transport/transport.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- metadata +9 -3
@@ -88,6 +88,16 @@ const char* const description_keepalive_server_fix =
|
|
88
88
|
"Allows overriding keepalive_permit_without_calls for servers. Refer "
|
89
89
|
"https://github.com/grpc/grpc/pull/33917 for more information.";
|
90
90
|
const char* const additional_constraints_keepalive_server_fix = "{}";
|
91
|
+
const char* const description_overload_protection =
|
92
|
+
"If chttp2 has more streams than it can handle open, send RST_STREAM "
|
93
|
+
"immediately on new streams appearing.";
|
94
|
+
const char* const additional_constraints_overload_protection = "{}";
|
95
|
+
const char* const description_separate_ping_from_keepalive =
|
96
|
+
"Keep a different keepalive timeout (resolution is seeing data after "
|
97
|
+
"sending a ping) from a ping timeout (resolution is getting a ping ack "
|
98
|
+
"after sending a ping) The first can be short and determines liveness. The "
|
99
|
+
"second can be longer and determines protocol correctness.";
|
100
|
+
const char* const additional_constraints_separate_ping_from_keepalive = "{}";
|
91
101
|
const char* const description_work_serializer_dispatch =
|
92
102
|
"Have the work serializer dispatch work to event engine for every "
|
93
103
|
"callback, instead of running things inline in the first thread that "
|
@@ -107,6 +117,12 @@ const char* const description_round_robin_delegate_to_pick_first =
|
|
107
117
|
"backend design.";
|
108
118
|
const char* const additional_constraints_round_robin_delegate_to_pick_first =
|
109
119
|
"{}";
|
120
|
+
const char* const description_write_size_cap =
|
121
|
+
"Limit outgoing writes proportional to the target write size";
|
122
|
+
const char* const additional_constraints_write_size_cap = "{}";
|
123
|
+
const char* const description_write_size_policy =
|
124
|
+
"Try to size writes such that they don't create too large of a backlog";
|
125
|
+
const char* const additional_constraints_write_size_policy = "{}";
|
110
126
|
const char* const description_wrr_delegate_to_pick_first =
|
111
127
|
"Change WRR code to delegate to pick_first as per dualstack backend "
|
112
128
|
"design.";
|
@@ -115,10 +131,42 @@ const char* const description_combiner_offload_to_event_engine =
|
|
115
131
|
"Offload Combiner work onto the EventEngine instead of the Executor.";
|
116
132
|
const char* const additional_constraints_combiner_offload_to_event_engine =
|
117
133
|
"{}";
|
134
|
+
const char* const description_multiping =
|
135
|
+
"Allow more than one ping to be in flight at a time by default.";
|
136
|
+
const char* const additional_constraints_multiping = "{}";
|
118
137
|
const char* const description_registered_method_lookup_in_transport =
|
119
138
|
"Change registered method's lookup point to transport";
|
120
139
|
const char* const additional_constraints_registered_method_lookup_in_transport =
|
121
140
|
"{}";
|
141
|
+
const char* const description_tarpit =
|
142
|
+
"If set, tarpit invalid requests for some amount of time";
|
143
|
+
const char* const additional_constraints_tarpit = "{}";
|
144
|
+
const char* const description_settings_timeout =
|
145
|
+
"If set, use the settings timeout to send settings frame to the peer.";
|
146
|
+
const char* const additional_constraints_settings_timeout = "{}";
|
147
|
+
const char* const description_rstpit =
|
148
|
+
"On RST_STREAM on a server, reduce MAX_CONCURRENT_STREAMS for a short "
|
149
|
+
"duration";
|
150
|
+
const char* const additional_constraints_rstpit = "{}";
|
151
|
+
const char* const description_red_max_concurrent_streams =
|
152
|
+
"Perform random early rejection of requests that would exceed a newly "
|
153
|
+
"reduced MAX_CONCURRENT_STREAMS but are allowed by the current.";
|
154
|
+
const char* const additional_constraints_red_max_concurrent_streams = "{}";
|
155
|
+
const char* const description_chttp2_batch_requests =
|
156
|
+
"Cap the number of requests received by one transport read prior to "
|
157
|
+
"offload.";
|
158
|
+
const char* const additional_constraints_chttp2_batch_requests = "{}";
|
159
|
+
const char* const description_chttp2_offload_on_rst_stream =
|
160
|
+
"Offload work on RST_STREAM.";
|
161
|
+
const char* const additional_constraints_chttp2_offload_on_rst_stream = "{}";
|
162
|
+
const char* const description_block_excessive_requests_before_settings_ack =
|
163
|
+
"If set, block excessive requests before receiving SETTINGS ACK.";
|
164
|
+
const char* const
|
165
|
+
additional_constraints_block_excessive_requests_before_settings_ack = "{}";
|
166
|
+
const char* const description_ping_on_rst_stream =
|
167
|
+
"Send a ping on receiving some RST_STREAM frames on the server (proportion "
|
168
|
+
"configurable via grpc.http2.ping_on_rst_stream_percent channel arg).";
|
169
|
+
const char* const additional_constraints_ping_on_rst_stream = "{}";
|
122
170
|
} // namespace
|
123
171
|
|
124
172
|
namespace grpc_core {
|
@@ -164,6 +212,10 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
164
212
|
additional_constraints_keepalive_fix, false, false},
|
165
213
|
{"keepalive_server_fix", description_keepalive_server_fix,
|
166
214
|
additional_constraints_keepalive_server_fix, false, false},
|
215
|
+
{"overload_protection", description_overload_protection,
|
216
|
+
additional_constraints_overload_protection, true, true},
|
217
|
+
{"separate_ping_from_keepalive", description_separate_ping_from_keepalive,
|
218
|
+
additional_constraints_separate_ping_from_keepalive, true, true},
|
167
219
|
{"work_serializer_dispatch", description_work_serializer_dispatch,
|
168
220
|
additional_constraints_work_serializer_dispatch, false, true},
|
169
221
|
{"lazier_stream_updates", description_lazier_stream_updates,
|
@@ -173,14 +225,36 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
173
225
|
{"round_robin_delegate_to_pick_first",
|
174
226
|
description_round_robin_delegate_to_pick_first,
|
175
227
|
additional_constraints_round_robin_delegate_to_pick_first, true, true},
|
228
|
+
{"write_size_cap", description_write_size_cap,
|
229
|
+
additional_constraints_write_size_cap, true, true},
|
230
|
+
{"write_size_policy", description_write_size_policy,
|
231
|
+
additional_constraints_write_size_policy, true, true},
|
176
232
|
{"wrr_delegate_to_pick_first", description_wrr_delegate_to_pick_first,
|
177
233
|
additional_constraints_wrr_delegate_to_pick_first, true, true},
|
178
234
|
{"combiner_offload_to_event_engine",
|
179
235
|
description_combiner_offload_to_event_engine,
|
180
236
|
additional_constraints_combiner_offload_to_event_engine, true, true},
|
237
|
+
{"multiping", description_multiping, additional_constraints_multiping,
|
238
|
+
false, true},
|
181
239
|
{"registered_method_lookup_in_transport",
|
182
240
|
description_registered_method_lookup_in_transport,
|
183
241
|
additional_constraints_registered_method_lookup_in_transport, true, true},
|
242
|
+
{"tarpit", description_tarpit, additional_constraints_tarpit, true, true},
|
243
|
+
{"settings_timeout", description_settings_timeout,
|
244
|
+
additional_constraints_settings_timeout, true, true},
|
245
|
+
{"rstpit", description_rstpit, additional_constraints_rstpit, false, true},
|
246
|
+
{"red_max_concurrent_streams", description_red_max_concurrent_streams,
|
247
|
+
additional_constraints_red_max_concurrent_streams, false, true},
|
248
|
+
{"chttp2_batch_requests", description_chttp2_batch_requests,
|
249
|
+
additional_constraints_chttp2_batch_requests, true, true},
|
250
|
+
{"chttp2_offload_on_rst_stream", description_chttp2_offload_on_rst_stream,
|
251
|
+
additional_constraints_chttp2_offload_on_rst_stream, true, true},
|
252
|
+
{"block_excessive_requests_before_settings_ack",
|
253
|
+
description_block_excessive_requests_before_settings_ack,
|
254
|
+
additional_constraints_block_excessive_requests_before_settings_ack, true,
|
255
|
+
true},
|
256
|
+
{"ping_on_rst_stream", description_ping_on_rst_stream,
|
257
|
+
additional_constraints_ping_on_rst_stream, true, true},
|
184
258
|
};
|
185
259
|
|
186
260
|
} // namespace grpc_core
|
@@ -253,6 +327,16 @@ const char* const description_keepalive_server_fix =
|
|
253
327
|
"Allows overriding keepalive_permit_without_calls for servers. Refer "
|
254
328
|
"https://github.com/grpc/grpc/pull/33917 for more information.";
|
255
329
|
const char* const additional_constraints_keepalive_server_fix = "{}";
|
330
|
+
const char* const description_overload_protection =
|
331
|
+
"If chttp2 has more streams than it can handle open, send RST_STREAM "
|
332
|
+
"immediately on new streams appearing.";
|
333
|
+
const char* const additional_constraints_overload_protection = "{}";
|
334
|
+
const char* const description_separate_ping_from_keepalive =
|
335
|
+
"Keep a different keepalive timeout (resolution is seeing data after "
|
336
|
+
"sending a ping) from a ping timeout (resolution is getting a ping ack "
|
337
|
+
"after sending a ping) The first can be short and determines liveness. The "
|
338
|
+
"second can be longer and determines protocol correctness.";
|
339
|
+
const char* const additional_constraints_separate_ping_from_keepalive = "{}";
|
256
340
|
const char* const description_work_serializer_dispatch =
|
257
341
|
"Have the work serializer dispatch work to event engine for every "
|
258
342
|
"callback, instead of running things inline in the first thread that "
|
@@ -272,6 +356,12 @@ const char* const description_round_robin_delegate_to_pick_first =
|
|
272
356
|
"backend design.";
|
273
357
|
const char* const additional_constraints_round_robin_delegate_to_pick_first =
|
274
358
|
"{}";
|
359
|
+
const char* const description_write_size_cap =
|
360
|
+
"Limit outgoing writes proportional to the target write size";
|
361
|
+
const char* const additional_constraints_write_size_cap = "{}";
|
362
|
+
const char* const description_write_size_policy =
|
363
|
+
"Try to size writes such that they don't create too large of a backlog";
|
364
|
+
const char* const additional_constraints_write_size_policy = "{}";
|
275
365
|
const char* const description_wrr_delegate_to_pick_first =
|
276
366
|
"Change WRR code to delegate to pick_first as per dualstack backend "
|
277
367
|
"design.";
|
@@ -280,10 +370,42 @@ const char* const description_combiner_offload_to_event_engine =
|
|
280
370
|
"Offload Combiner work onto the EventEngine instead of the Executor.";
|
281
371
|
const char* const additional_constraints_combiner_offload_to_event_engine =
|
282
372
|
"{}";
|
373
|
+
const char* const description_multiping =
|
374
|
+
"Allow more than one ping to be in flight at a time by default.";
|
375
|
+
const char* const additional_constraints_multiping = "{}";
|
283
376
|
const char* const description_registered_method_lookup_in_transport =
|
284
377
|
"Change registered method's lookup point to transport";
|
285
378
|
const char* const additional_constraints_registered_method_lookup_in_transport =
|
286
379
|
"{}";
|
380
|
+
const char* const description_tarpit =
|
381
|
+
"If set, tarpit invalid requests for some amount of time";
|
382
|
+
const char* const additional_constraints_tarpit = "{}";
|
383
|
+
const char* const description_settings_timeout =
|
384
|
+
"If set, use the settings timeout to send settings frame to the peer.";
|
385
|
+
const char* const additional_constraints_settings_timeout = "{}";
|
386
|
+
const char* const description_rstpit =
|
387
|
+
"On RST_STREAM on a server, reduce MAX_CONCURRENT_STREAMS for a short "
|
388
|
+
"duration";
|
389
|
+
const char* const additional_constraints_rstpit = "{}";
|
390
|
+
const char* const description_red_max_concurrent_streams =
|
391
|
+
"Perform random early rejection of requests that would exceed a newly "
|
392
|
+
"reduced MAX_CONCURRENT_STREAMS but are allowed by the current.";
|
393
|
+
const char* const additional_constraints_red_max_concurrent_streams = "{}";
|
394
|
+
const char* const description_chttp2_batch_requests =
|
395
|
+
"Cap the number of requests received by one transport read prior to "
|
396
|
+
"offload.";
|
397
|
+
const char* const additional_constraints_chttp2_batch_requests = "{}";
|
398
|
+
const char* const description_chttp2_offload_on_rst_stream =
|
399
|
+
"Offload work on RST_STREAM.";
|
400
|
+
const char* const additional_constraints_chttp2_offload_on_rst_stream = "{}";
|
401
|
+
const char* const description_block_excessive_requests_before_settings_ack =
|
402
|
+
"If set, block excessive requests before receiving SETTINGS ACK.";
|
403
|
+
const char* const
|
404
|
+
additional_constraints_block_excessive_requests_before_settings_ack = "{}";
|
405
|
+
const char* const description_ping_on_rst_stream =
|
406
|
+
"Send a ping on receiving some RST_STREAM frames on the server (proportion "
|
407
|
+
"configurable via grpc.http2.ping_on_rst_stream_percent channel arg).";
|
408
|
+
const char* const additional_constraints_ping_on_rst_stream = "{}";
|
287
409
|
} // namespace
|
288
410
|
|
289
411
|
namespace grpc_core {
|
@@ -329,6 +451,10 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
329
451
|
additional_constraints_keepalive_fix, false, false},
|
330
452
|
{"keepalive_server_fix", description_keepalive_server_fix,
|
331
453
|
additional_constraints_keepalive_server_fix, false, false},
|
454
|
+
{"overload_protection", description_overload_protection,
|
455
|
+
additional_constraints_overload_protection, true, true},
|
456
|
+
{"separate_ping_from_keepalive", description_separate_ping_from_keepalive,
|
457
|
+
additional_constraints_separate_ping_from_keepalive, true, true},
|
332
458
|
{"work_serializer_dispatch", description_work_serializer_dispatch,
|
333
459
|
additional_constraints_work_serializer_dispatch, false, true},
|
334
460
|
{"lazier_stream_updates", description_lazier_stream_updates,
|
@@ -338,14 +464,36 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
338
464
|
{"round_robin_delegate_to_pick_first",
|
339
465
|
description_round_robin_delegate_to_pick_first,
|
340
466
|
additional_constraints_round_robin_delegate_to_pick_first, true, true},
|
467
|
+
{"write_size_cap", description_write_size_cap,
|
468
|
+
additional_constraints_write_size_cap, true, true},
|
469
|
+
{"write_size_policy", description_write_size_policy,
|
470
|
+
additional_constraints_write_size_policy, true, true},
|
341
471
|
{"wrr_delegate_to_pick_first", description_wrr_delegate_to_pick_first,
|
342
472
|
additional_constraints_wrr_delegate_to_pick_first, true, true},
|
343
473
|
{"combiner_offload_to_event_engine",
|
344
474
|
description_combiner_offload_to_event_engine,
|
345
475
|
additional_constraints_combiner_offload_to_event_engine, true, true},
|
476
|
+
{"multiping", description_multiping, additional_constraints_multiping,
|
477
|
+
false, true},
|
346
478
|
{"registered_method_lookup_in_transport",
|
347
479
|
description_registered_method_lookup_in_transport,
|
348
480
|
additional_constraints_registered_method_lookup_in_transport, true, true},
|
481
|
+
{"tarpit", description_tarpit, additional_constraints_tarpit, true, true},
|
482
|
+
{"settings_timeout", description_settings_timeout,
|
483
|
+
additional_constraints_settings_timeout, true, true},
|
484
|
+
{"rstpit", description_rstpit, additional_constraints_rstpit, false, true},
|
485
|
+
{"red_max_concurrent_streams", description_red_max_concurrent_streams,
|
486
|
+
additional_constraints_red_max_concurrent_streams, false, true},
|
487
|
+
{"chttp2_batch_requests", description_chttp2_batch_requests,
|
488
|
+
additional_constraints_chttp2_batch_requests, true, true},
|
489
|
+
{"chttp2_offload_on_rst_stream", description_chttp2_offload_on_rst_stream,
|
490
|
+
additional_constraints_chttp2_offload_on_rst_stream, true, true},
|
491
|
+
{"block_excessive_requests_before_settings_ack",
|
492
|
+
description_block_excessive_requests_before_settings_ack,
|
493
|
+
additional_constraints_block_excessive_requests_before_settings_ack, true,
|
494
|
+
true},
|
495
|
+
{"ping_on_rst_stream", description_ping_on_rst_stream,
|
496
|
+
additional_constraints_ping_on_rst_stream, true, true},
|
349
497
|
};
|
350
498
|
|
351
499
|
} // namespace grpc_core
|
@@ -418,6 +566,16 @@ const char* const description_keepalive_server_fix =
|
|
418
566
|
"Allows overriding keepalive_permit_without_calls for servers. Refer "
|
419
567
|
"https://github.com/grpc/grpc/pull/33917 for more information.";
|
420
568
|
const char* const additional_constraints_keepalive_server_fix = "{}";
|
569
|
+
const char* const description_overload_protection =
|
570
|
+
"If chttp2 has more streams than it can handle open, send RST_STREAM "
|
571
|
+
"immediately on new streams appearing.";
|
572
|
+
const char* const additional_constraints_overload_protection = "{}";
|
573
|
+
const char* const description_separate_ping_from_keepalive =
|
574
|
+
"Keep a different keepalive timeout (resolution is seeing data after "
|
575
|
+
"sending a ping) from a ping timeout (resolution is getting a ping ack "
|
576
|
+
"after sending a ping) The first can be short and determines liveness. The "
|
577
|
+
"second can be longer and determines protocol correctness.";
|
578
|
+
const char* const additional_constraints_separate_ping_from_keepalive = "{}";
|
421
579
|
const char* const description_work_serializer_dispatch =
|
422
580
|
"Have the work serializer dispatch work to event engine for every "
|
423
581
|
"callback, instead of running things inline in the first thread that "
|
@@ -437,6 +595,12 @@ const char* const description_round_robin_delegate_to_pick_first =
|
|
437
595
|
"backend design.";
|
438
596
|
const char* const additional_constraints_round_robin_delegate_to_pick_first =
|
439
597
|
"{}";
|
598
|
+
const char* const description_write_size_cap =
|
599
|
+
"Limit outgoing writes proportional to the target write size";
|
600
|
+
const char* const additional_constraints_write_size_cap = "{}";
|
601
|
+
const char* const description_write_size_policy =
|
602
|
+
"Try to size writes such that they don't create too large of a backlog";
|
603
|
+
const char* const additional_constraints_write_size_policy = "{}";
|
440
604
|
const char* const description_wrr_delegate_to_pick_first =
|
441
605
|
"Change WRR code to delegate to pick_first as per dualstack backend "
|
442
606
|
"design.";
|
@@ -445,10 +609,42 @@ const char* const description_combiner_offload_to_event_engine =
|
|
445
609
|
"Offload Combiner work onto the EventEngine instead of the Executor.";
|
446
610
|
const char* const additional_constraints_combiner_offload_to_event_engine =
|
447
611
|
"{}";
|
612
|
+
const char* const description_multiping =
|
613
|
+
"Allow more than one ping to be in flight at a time by default.";
|
614
|
+
const char* const additional_constraints_multiping = "{}";
|
448
615
|
const char* const description_registered_method_lookup_in_transport =
|
449
616
|
"Change registered method's lookup point to transport";
|
450
617
|
const char* const additional_constraints_registered_method_lookup_in_transport =
|
451
618
|
"{}";
|
619
|
+
const char* const description_tarpit =
|
620
|
+
"If set, tarpit invalid requests for some amount of time";
|
621
|
+
const char* const additional_constraints_tarpit = "{}";
|
622
|
+
const char* const description_settings_timeout =
|
623
|
+
"If set, use the settings timeout to send settings frame to the peer.";
|
624
|
+
const char* const additional_constraints_settings_timeout = "{}";
|
625
|
+
const char* const description_rstpit =
|
626
|
+
"On RST_STREAM on a server, reduce MAX_CONCURRENT_STREAMS for a short "
|
627
|
+
"duration";
|
628
|
+
const char* const additional_constraints_rstpit = "{}";
|
629
|
+
const char* const description_red_max_concurrent_streams =
|
630
|
+
"Perform random early rejection of requests that would exceed a newly "
|
631
|
+
"reduced MAX_CONCURRENT_STREAMS but are allowed by the current.";
|
632
|
+
const char* const additional_constraints_red_max_concurrent_streams = "{}";
|
633
|
+
const char* const description_chttp2_batch_requests =
|
634
|
+
"Cap the number of requests received by one transport read prior to "
|
635
|
+
"offload.";
|
636
|
+
const char* const additional_constraints_chttp2_batch_requests = "{}";
|
637
|
+
const char* const description_chttp2_offload_on_rst_stream =
|
638
|
+
"Offload work on RST_STREAM.";
|
639
|
+
const char* const additional_constraints_chttp2_offload_on_rst_stream = "{}";
|
640
|
+
const char* const description_block_excessive_requests_before_settings_ack =
|
641
|
+
"If set, block excessive requests before receiving SETTINGS ACK.";
|
642
|
+
const char* const
|
643
|
+
additional_constraints_block_excessive_requests_before_settings_ack = "{}";
|
644
|
+
const char* const description_ping_on_rst_stream =
|
645
|
+
"Send a ping on receiving some RST_STREAM frames on the server (proportion "
|
646
|
+
"configurable via grpc.http2.ping_on_rst_stream_percent channel arg).";
|
647
|
+
const char* const additional_constraints_ping_on_rst_stream = "{}";
|
452
648
|
} // namespace
|
453
649
|
|
454
650
|
namespace grpc_core {
|
@@ -494,6 +690,10 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
494
690
|
additional_constraints_keepalive_fix, false, false},
|
495
691
|
{"keepalive_server_fix", description_keepalive_server_fix,
|
496
692
|
additional_constraints_keepalive_server_fix, false, false},
|
693
|
+
{"overload_protection", description_overload_protection,
|
694
|
+
additional_constraints_overload_protection, true, true},
|
695
|
+
{"separate_ping_from_keepalive", description_separate_ping_from_keepalive,
|
696
|
+
additional_constraints_separate_ping_from_keepalive, true, true},
|
497
697
|
{"work_serializer_dispatch", description_work_serializer_dispatch,
|
498
698
|
additional_constraints_work_serializer_dispatch, false, true},
|
499
699
|
{"lazier_stream_updates", description_lazier_stream_updates,
|
@@ -503,14 +703,36 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
503
703
|
{"round_robin_delegate_to_pick_first",
|
504
704
|
description_round_robin_delegate_to_pick_first,
|
505
705
|
additional_constraints_round_robin_delegate_to_pick_first, true, true},
|
706
|
+
{"write_size_cap", description_write_size_cap,
|
707
|
+
additional_constraints_write_size_cap, true, true},
|
708
|
+
{"write_size_policy", description_write_size_policy,
|
709
|
+
additional_constraints_write_size_policy, true, true},
|
506
710
|
{"wrr_delegate_to_pick_first", description_wrr_delegate_to_pick_first,
|
507
711
|
additional_constraints_wrr_delegate_to_pick_first, true, true},
|
508
712
|
{"combiner_offload_to_event_engine",
|
509
713
|
description_combiner_offload_to_event_engine,
|
510
714
|
additional_constraints_combiner_offload_to_event_engine, true, true},
|
715
|
+
{"multiping", description_multiping, additional_constraints_multiping,
|
716
|
+
false, true},
|
511
717
|
{"registered_method_lookup_in_transport",
|
512
718
|
description_registered_method_lookup_in_transport,
|
513
719
|
additional_constraints_registered_method_lookup_in_transport, true, true},
|
720
|
+
{"tarpit", description_tarpit, additional_constraints_tarpit, true, true},
|
721
|
+
{"settings_timeout", description_settings_timeout,
|
722
|
+
additional_constraints_settings_timeout, true, true},
|
723
|
+
{"rstpit", description_rstpit, additional_constraints_rstpit, false, true},
|
724
|
+
{"red_max_concurrent_streams", description_red_max_concurrent_streams,
|
725
|
+
additional_constraints_red_max_concurrent_streams, false, true},
|
726
|
+
{"chttp2_batch_requests", description_chttp2_batch_requests,
|
727
|
+
additional_constraints_chttp2_batch_requests, true, true},
|
728
|
+
{"chttp2_offload_on_rst_stream", description_chttp2_offload_on_rst_stream,
|
729
|
+
additional_constraints_chttp2_offload_on_rst_stream, true, true},
|
730
|
+
{"block_excessive_requests_before_settings_ack",
|
731
|
+
description_block_excessive_requests_before_settings_ack,
|
732
|
+
additional_constraints_block_excessive_requests_before_settings_ack, true,
|
733
|
+
true},
|
734
|
+
{"ping_on_rst_stream", description_ping_on_rst_stream,
|
735
|
+
additional_constraints_ping_on_rst_stream, true, true},
|
514
736
|
};
|
515
737
|
|
516
738
|
} // namespace grpc_core
|
@@ -77,6 +77,10 @@ inline bool IsCanaryClientPrivacyEnabled() { return false; }
|
|
77
77
|
inline bool IsServerPrivacyEnabled() { return false; }
|
78
78
|
inline bool IsKeepaliveFixEnabled() { return false; }
|
79
79
|
inline bool IsKeepaliveServerFixEnabled() { return false; }
|
80
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_OVERLOAD_PROTECTION
|
81
|
+
inline bool IsOverloadProtectionEnabled() { return true; }
|
82
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_SEPARATE_PING_FROM_KEEPALIVE
|
83
|
+
inline bool IsSeparatePingFromKeepaliveEnabled() { return true; }
|
80
84
|
inline bool IsWorkSerializerDispatchEnabled() { return false; }
|
81
85
|
#define GRPC_EXPERIMENT_IS_INCLUDED_LAZIER_STREAM_UPDATES
|
82
86
|
inline bool IsLazierStreamUpdatesEnabled() { return true; }
|
@@ -84,12 +88,31 @@ inline bool IsLazierStreamUpdatesEnabled() { return true; }
|
|
84
88
|
inline bool IsJitterMaxIdleEnabled() { return true; }
|
85
89
|
#define GRPC_EXPERIMENT_IS_INCLUDED_ROUND_ROBIN_DELEGATE_TO_PICK_FIRST
|
86
90
|
inline bool IsRoundRobinDelegateToPickFirstEnabled() { return true; }
|
91
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_WRITE_SIZE_CAP
|
92
|
+
inline bool IsWriteSizeCapEnabled() { return true; }
|
93
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_WRITE_SIZE_POLICY
|
94
|
+
inline bool IsWriteSizePolicyEnabled() { return true; }
|
87
95
|
#define GRPC_EXPERIMENT_IS_INCLUDED_WRR_DELEGATE_TO_PICK_FIRST
|
88
96
|
inline bool IsWrrDelegateToPickFirstEnabled() { return true; }
|
89
97
|
#define GRPC_EXPERIMENT_IS_INCLUDED_COMBINER_OFFLOAD_TO_EVENT_ENGINE
|
90
98
|
inline bool IsCombinerOffloadToEventEngineEnabled() { return true; }
|
99
|
+
inline bool IsMultipingEnabled() { return false; }
|
91
100
|
#define GRPC_EXPERIMENT_IS_INCLUDED_REGISTERED_METHOD_LOOKUP_IN_TRANSPORT
|
92
101
|
inline bool IsRegisteredMethodLookupInTransportEnabled() { return true; }
|
102
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_TARPIT
|
103
|
+
inline bool IsTarpitEnabled() { return true; }
|
104
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_SETTINGS_TIMEOUT
|
105
|
+
inline bool IsSettingsTimeoutEnabled() { return true; }
|
106
|
+
inline bool IsRstpitEnabled() { return false; }
|
107
|
+
inline bool IsRedMaxConcurrentStreamsEnabled() { return false; }
|
108
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_CHTTP2_BATCH_REQUESTS
|
109
|
+
inline bool IsChttp2BatchRequestsEnabled() { return true; }
|
110
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_CHTTP2_OFFLOAD_ON_RST_STREAM
|
111
|
+
inline bool IsChttp2OffloadOnRstStreamEnabled() { return true; }
|
112
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_BLOCK_EXCESSIVE_REQUESTS_BEFORE_SETTINGS_ACK
|
113
|
+
inline bool IsBlockExcessiveRequestsBeforeSettingsAckEnabled() { return true; }
|
114
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_PING_ON_RST_STREAM
|
115
|
+
inline bool IsPingOnRstStreamEnabled() { return true; }
|
93
116
|
|
94
117
|
#elif defined(GPR_WINDOWS)
|
95
118
|
inline bool IsTcpFrameSizeTuningEnabled() { return false; }
|
@@ -112,6 +135,10 @@ inline bool IsCanaryClientPrivacyEnabled() { return false; }
|
|
112
135
|
inline bool IsServerPrivacyEnabled() { return false; }
|
113
136
|
inline bool IsKeepaliveFixEnabled() { return false; }
|
114
137
|
inline bool IsKeepaliveServerFixEnabled() { return false; }
|
138
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_OVERLOAD_PROTECTION
|
139
|
+
inline bool IsOverloadProtectionEnabled() { return true; }
|
140
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_SEPARATE_PING_FROM_KEEPALIVE
|
141
|
+
inline bool IsSeparatePingFromKeepaliveEnabled() { return true; }
|
115
142
|
inline bool IsWorkSerializerDispatchEnabled() { return false; }
|
116
143
|
#define GRPC_EXPERIMENT_IS_INCLUDED_LAZIER_STREAM_UPDATES
|
117
144
|
inline bool IsLazierStreamUpdatesEnabled() { return true; }
|
@@ -119,12 +146,31 @@ inline bool IsLazierStreamUpdatesEnabled() { return true; }
|
|
119
146
|
inline bool IsJitterMaxIdleEnabled() { return true; }
|
120
147
|
#define GRPC_EXPERIMENT_IS_INCLUDED_ROUND_ROBIN_DELEGATE_TO_PICK_FIRST
|
121
148
|
inline bool IsRoundRobinDelegateToPickFirstEnabled() { return true; }
|
149
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_WRITE_SIZE_CAP
|
150
|
+
inline bool IsWriteSizeCapEnabled() { return true; }
|
151
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_WRITE_SIZE_POLICY
|
152
|
+
inline bool IsWriteSizePolicyEnabled() { return true; }
|
122
153
|
#define GRPC_EXPERIMENT_IS_INCLUDED_WRR_DELEGATE_TO_PICK_FIRST
|
123
154
|
inline bool IsWrrDelegateToPickFirstEnabled() { return true; }
|
124
155
|
#define GRPC_EXPERIMENT_IS_INCLUDED_COMBINER_OFFLOAD_TO_EVENT_ENGINE
|
125
156
|
inline bool IsCombinerOffloadToEventEngineEnabled() { return true; }
|
157
|
+
inline bool IsMultipingEnabled() { return false; }
|
126
158
|
#define GRPC_EXPERIMENT_IS_INCLUDED_REGISTERED_METHOD_LOOKUP_IN_TRANSPORT
|
127
159
|
inline bool IsRegisteredMethodLookupInTransportEnabled() { return true; }
|
160
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_TARPIT
|
161
|
+
inline bool IsTarpitEnabled() { return true; }
|
162
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_SETTINGS_TIMEOUT
|
163
|
+
inline bool IsSettingsTimeoutEnabled() { return true; }
|
164
|
+
inline bool IsRstpitEnabled() { return false; }
|
165
|
+
inline bool IsRedMaxConcurrentStreamsEnabled() { return false; }
|
166
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_CHTTP2_BATCH_REQUESTS
|
167
|
+
inline bool IsChttp2BatchRequestsEnabled() { return true; }
|
168
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_CHTTP2_OFFLOAD_ON_RST_STREAM
|
169
|
+
inline bool IsChttp2OffloadOnRstStreamEnabled() { return true; }
|
170
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_BLOCK_EXCESSIVE_REQUESTS_BEFORE_SETTINGS_ACK
|
171
|
+
inline bool IsBlockExcessiveRequestsBeforeSettingsAckEnabled() { return true; }
|
172
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_PING_ON_RST_STREAM
|
173
|
+
inline bool IsPingOnRstStreamEnabled() { return true; }
|
128
174
|
|
129
175
|
#else
|
130
176
|
inline bool IsTcpFrameSizeTuningEnabled() { return false; }
|
@@ -147,6 +193,10 @@ inline bool IsCanaryClientPrivacyEnabled() { return false; }
|
|
147
193
|
inline bool IsServerPrivacyEnabled() { return false; }
|
148
194
|
inline bool IsKeepaliveFixEnabled() { return false; }
|
149
195
|
inline bool IsKeepaliveServerFixEnabled() { return false; }
|
196
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_OVERLOAD_PROTECTION
|
197
|
+
inline bool IsOverloadProtectionEnabled() { return true; }
|
198
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_SEPARATE_PING_FROM_KEEPALIVE
|
199
|
+
inline bool IsSeparatePingFromKeepaliveEnabled() { return true; }
|
150
200
|
inline bool IsWorkSerializerDispatchEnabled() { return false; }
|
151
201
|
#define GRPC_EXPERIMENT_IS_INCLUDED_LAZIER_STREAM_UPDATES
|
152
202
|
inline bool IsLazierStreamUpdatesEnabled() { return true; }
|
@@ -154,12 +204,31 @@ inline bool IsLazierStreamUpdatesEnabled() { return true; }
|
|
154
204
|
inline bool IsJitterMaxIdleEnabled() { return true; }
|
155
205
|
#define GRPC_EXPERIMENT_IS_INCLUDED_ROUND_ROBIN_DELEGATE_TO_PICK_FIRST
|
156
206
|
inline bool IsRoundRobinDelegateToPickFirstEnabled() { return true; }
|
207
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_WRITE_SIZE_CAP
|
208
|
+
inline bool IsWriteSizeCapEnabled() { return true; }
|
209
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_WRITE_SIZE_POLICY
|
210
|
+
inline bool IsWriteSizePolicyEnabled() { return true; }
|
157
211
|
#define GRPC_EXPERIMENT_IS_INCLUDED_WRR_DELEGATE_TO_PICK_FIRST
|
158
212
|
inline bool IsWrrDelegateToPickFirstEnabled() { return true; }
|
159
213
|
#define GRPC_EXPERIMENT_IS_INCLUDED_COMBINER_OFFLOAD_TO_EVENT_ENGINE
|
160
214
|
inline bool IsCombinerOffloadToEventEngineEnabled() { return true; }
|
215
|
+
inline bool IsMultipingEnabled() { return false; }
|
161
216
|
#define GRPC_EXPERIMENT_IS_INCLUDED_REGISTERED_METHOD_LOOKUP_IN_TRANSPORT
|
162
217
|
inline bool IsRegisteredMethodLookupInTransportEnabled() { return true; }
|
218
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_TARPIT
|
219
|
+
inline bool IsTarpitEnabled() { return true; }
|
220
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_SETTINGS_TIMEOUT
|
221
|
+
inline bool IsSettingsTimeoutEnabled() { return true; }
|
222
|
+
inline bool IsRstpitEnabled() { return false; }
|
223
|
+
inline bool IsRedMaxConcurrentStreamsEnabled() { return false; }
|
224
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_CHTTP2_BATCH_REQUESTS
|
225
|
+
inline bool IsChttp2BatchRequestsEnabled() { return true; }
|
226
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_CHTTP2_OFFLOAD_ON_RST_STREAM
|
227
|
+
inline bool IsChttp2OffloadOnRstStreamEnabled() { return true; }
|
228
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_BLOCK_EXCESSIVE_REQUESTS_BEFORE_SETTINGS_ACK
|
229
|
+
inline bool IsBlockExcessiveRequestsBeforeSettingsAckEnabled() { return true; }
|
230
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_PING_ON_RST_STREAM
|
231
|
+
inline bool IsPingOnRstStreamEnabled() { return true; }
|
163
232
|
#endif
|
164
233
|
|
165
234
|
#else
|
@@ -183,13 +252,26 @@ enum ExperimentIds {
|
|
183
252
|
kExperimentIdServerPrivacy,
|
184
253
|
kExperimentIdKeepaliveFix,
|
185
254
|
kExperimentIdKeepaliveServerFix,
|
255
|
+
kExperimentIdOverloadProtection,
|
256
|
+
kExperimentIdSeparatePingFromKeepalive,
|
186
257
|
kExperimentIdWorkSerializerDispatch,
|
187
258
|
kExperimentIdLazierStreamUpdates,
|
188
259
|
kExperimentIdJitterMaxIdle,
|
189
260
|
kExperimentIdRoundRobinDelegateToPickFirst,
|
261
|
+
kExperimentIdWriteSizeCap,
|
262
|
+
kExperimentIdWriteSizePolicy,
|
190
263
|
kExperimentIdWrrDelegateToPickFirst,
|
191
264
|
kExperimentIdCombinerOffloadToEventEngine,
|
265
|
+
kExperimentIdMultiping,
|
192
266
|
kExperimentIdRegisteredMethodLookupInTransport,
|
267
|
+
kExperimentIdTarpit,
|
268
|
+
kExperimentIdSettingsTimeout,
|
269
|
+
kExperimentIdRstpit,
|
270
|
+
kExperimentIdRedMaxConcurrentStreams,
|
271
|
+
kExperimentIdChttp2BatchRequests,
|
272
|
+
kExperimentIdChttp2OffloadOnRstStream,
|
273
|
+
kExperimentIdBlockExcessiveRequestsBeforeSettingsAck,
|
274
|
+
kExperimentIdPingOnRstStream,
|
193
275
|
kNumExperiments
|
194
276
|
};
|
195
277
|
#define GRPC_EXPERIMENT_IS_INCLUDED_TCP_FRAME_SIZE_TUNING
|
@@ -268,6 +350,14 @@ inline bool IsKeepaliveFixEnabled() {
|
|
268
350
|
inline bool IsKeepaliveServerFixEnabled() {
|
269
351
|
return IsExperimentEnabled(kExperimentIdKeepaliveServerFix);
|
270
352
|
}
|
353
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_OVERLOAD_PROTECTION
|
354
|
+
inline bool IsOverloadProtectionEnabled() {
|
355
|
+
return IsExperimentEnabled(kExperimentIdOverloadProtection);
|
356
|
+
}
|
357
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_SEPARATE_PING_FROM_KEEPALIVE
|
358
|
+
inline bool IsSeparatePingFromKeepaliveEnabled() {
|
359
|
+
return IsExperimentEnabled(kExperimentIdSeparatePingFromKeepalive);
|
360
|
+
}
|
271
361
|
#define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_DISPATCH
|
272
362
|
inline bool IsWorkSerializerDispatchEnabled() {
|
273
363
|
return IsExperimentEnabled(kExperimentIdWorkSerializerDispatch);
|
@@ -284,6 +374,14 @@ inline bool IsJitterMaxIdleEnabled() {
|
|
284
374
|
inline bool IsRoundRobinDelegateToPickFirstEnabled() {
|
285
375
|
return IsExperimentEnabled(kExperimentIdRoundRobinDelegateToPickFirst);
|
286
376
|
}
|
377
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_WRITE_SIZE_CAP
|
378
|
+
inline bool IsWriteSizeCapEnabled() {
|
379
|
+
return IsExperimentEnabled(kExperimentIdWriteSizeCap);
|
380
|
+
}
|
381
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_WRITE_SIZE_POLICY
|
382
|
+
inline bool IsWriteSizePolicyEnabled() {
|
383
|
+
return IsExperimentEnabled(kExperimentIdWriteSizePolicy);
|
384
|
+
}
|
287
385
|
#define GRPC_EXPERIMENT_IS_INCLUDED_WRR_DELEGATE_TO_PICK_FIRST
|
288
386
|
inline bool IsWrrDelegateToPickFirstEnabled() {
|
289
387
|
return IsExperimentEnabled(kExperimentIdWrrDelegateToPickFirst);
|
@@ -292,10 +390,47 @@ inline bool IsWrrDelegateToPickFirstEnabled() {
|
|
292
390
|
inline bool IsCombinerOffloadToEventEngineEnabled() {
|
293
391
|
return IsExperimentEnabled(kExperimentIdCombinerOffloadToEventEngine);
|
294
392
|
}
|
393
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_MULTIPING
|
394
|
+
inline bool IsMultipingEnabled() {
|
395
|
+
return IsExperimentEnabled(kExperimentIdMultiping);
|
396
|
+
}
|
295
397
|
#define GRPC_EXPERIMENT_IS_INCLUDED_REGISTERED_METHOD_LOOKUP_IN_TRANSPORT
|
296
398
|
inline bool IsRegisteredMethodLookupInTransportEnabled() {
|
297
399
|
return IsExperimentEnabled(kExperimentIdRegisteredMethodLookupInTransport);
|
298
400
|
}
|
401
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_TARPIT
|
402
|
+
inline bool IsTarpitEnabled() {
|
403
|
+
return IsExperimentEnabled(kExperimentIdTarpit);
|
404
|
+
}
|
405
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_SETTINGS_TIMEOUT
|
406
|
+
inline bool IsSettingsTimeoutEnabled() {
|
407
|
+
return IsExperimentEnabled(kExperimentIdSettingsTimeout);
|
408
|
+
}
|
409
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_RSTPIT
|
410
|
+
inline bool IsRstpitEnabled() {
|
411
|
+
return IsExperimentEnabled(kExperimentIdRstpit);
|
412
|
+
}
|
413
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_RED_MAX_CONCURRENT_STREAMS
|
414
|
+
inline bool IsRedMaxConcurrentStreamsEnabled() {
|
415
|
+
return IsExperimentEnabled(kExperimentIdRedMaxConcurrentStreams);
|
416
|
+
}
|
417
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_CHTTP2_BATCH_REQUESTS
|
418
|
+
inline bool IsChttp2BatchRequestsEnabled() {
|
419
|
+
return IsExperimentEnabled(kExperimentIdChttp2BatchRequests);
|
420
|
+
}
|
421
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_CHTTP2_OFFLOAD_ON_RST_STREAM
|
422
|
+
inline bool IsChttp2OffloadOnRstStreamEnabled() {
|
423
|
+
return IsExperimentEnabled(kExperimentIdChttp2OffloadOnRstStream);
|
424
|
+
}
|
425
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_BLOCK_EXCESSIVE_REQUESTS_BEFORE_SETTINGS_ACK
|
426
|
+
inline bool IsBlockExcessiveRequestsBeforeSettingsAckEnabled() {
|
427
|
+
return IsExperimentEnabled(
|
428
|
+
kExperimentIdBlockExcessiveRequestsBeforeSettingsAck);
|
429
|
+
}
|
430
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_PING_ON_RST_STREAM
|
431
|
+
inline bool IsPingOnRstStreamEnabled() {
|
432
|
+
return IsExperimentEnabled(kExperimentIdPingOnRstStream);
|
433
|
+
}
|
299
434
|
|
300
435
|
extern const ExperimentMetadata g_experiment_metadata[kNumExperiments];
|
301
436
|
|
@@ -180,6 +180,9 @@ static void offload(void* arg, grpc_error_handle /*error*/) {
|
|
180
180
|
|
181
181
|
static void queue_offload(grpc_core::Combiner* lock) {
|
182
182
|
move_next();
|
183
|
+
// Make the combiner look uncontended by storing a non-null value here, so
|
184
|
+
// that we don't immediately offload again.
|
185
|
+
gpr_atm_no_barrier_store(&lock->initiating_exec_ctx_or_null, 1);
|
183
186
|
GRPC_COMBINER_TRACE(gpr_log(GPR_INFO, "C:%p queue_offload", lock));
|
184
187
|
if (grpc_core::IsCombinerOffloadToEventEngineEnabled()) {
|
185
188
|
lock->event_engine->Run([lock] {
|
@@ -45,6 +45,7 @@
|
|
45
45
|
#include "src/core/lib/gprpp/packed_table.h"
|
46
46
|
#include "src/core/lib/gprpp/time.h"
|
47
47
|
#include "src/core/lib/gprpp/type_list.h"
|
48
|
+
#include "src/core/lib/promise/poll.h"
|
48
49
|
#include "src/core/lib/resource_quota/arena.h"
|
49
50
|
#include "src/core/lib/slice/slice.h"
|
50
51
|
#include "src/core/lib/transport/custom_metadata.h"
|
@@ -519,6 +520,15 @@ struct GrpcRegisteredMethod {
|
|
519
520
|
static std::string DisplayValue(void* x);
|
520
521
|
};
|
521
522
|
|
523
|
+
// Annotation added by filters to inform the transport to tarpit this
|
524
|
+
// response: add some random delay to thwart certain kinds of attacks.
|
525
|
+
struct GrpcTarPit {
|
526
|
+
static absl::string_view DebugKey() { return "GrpcTarPit"; }
|
527
|
+
static constexpr bool kRepeatable = false;
|
528
|
+
using ValueType = Empty;
|
529
|
+
static absl::string_view DisplayValue(Empty) { return "tarpit"; }
|
530
|
+
};
|
531
|
+
|
522
532
|
namespace metadata_detail {
|
523
533
|
|
524
534
|
// Build a key/value formatted debug string.
|
@@ -1496,7 +1506,7 @@ using grpc_metadata_batch_base = grpc_core::MetadataMap<
|
|
1496
1506
|
grpc_core::GrpcStreamNetworkState, grpc_core::PeerString,
|
1497
1507
|
grpc_core::GrpcStatusContext, grpc_core::GrpcStatusFromWire,
|
1498
1508
|
grpc_core::GrpcCallWasCancelled, grpc_core::WaitForReady,
|
1499
|
-
grpc_core::GrpcTrailersOnly,
|
1509
|
+
grpc_core::GrpcTrailersOnly, grpc_core::GrpcTarPit,
|
1500
1510
|
grpc_core::GrpcRegisteredMethod GRPC_CUSTOM_CLIENT_METADATA
|
1501
1511
|
GRPC_CUSTOM_SERVER_METADATA>;
|
1502
1512
|
|
@@ -495,6 +495,12 @@ struct grpc_transport_stream_op_batch_payload {
|
|
495
495
|
// Error contract: the transport that gets this op must cause cancel_error
|
496
496
|
// to be unref'ed after processing it
|
497
497
|
grpc_error_handle cancel_error;
|
498
|
+
// If true the transport should endeavor to delay sending the cancellation
|
499
|
+
// notification for some small amount of time, in order to foil certain
|
500
|
+
// exploits.
|
501
|
+
// This should be set for cancellations that result from malformed client
|
502
|
+
// initial metadata.
|
503
|
+
bool tarpit = false;
|
498
504
|
} cancel_stream;
|
499
505
|
|
500
506
|
// Indexes correspond to grpc_context_index enum values
|