grpc 1.46.3 → 1.53.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +419 -241
- data/include/grpc/byte_buffer.h +76 -1
- data/include/grpc/byte_buffer_reader.h +19 -1
- data/include/grpc/compression.h +2 -2
- data/include/grpc/event_engine/endpoint_config.h +11 -5
- data/include/grpc/event_engine/event_engine.h +129 -39
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
- data/include/grpc/event_engine/internal/slice_cast.h +67 -0
- data/include/grpc/event_engine/memory_allocator.h +1 -16
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +306 -0
- data/include/grpc/event_engine/slice_buffer.h +159 -0
- data/include/grpc/fork.h +25 -1
- data/include/grpc/grpc.h +4 -14
- data/include/grpc/grpc_posix.h +1 -1
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/atm.h +3 -71
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
- data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
- data/include/grpc/impl/codegen/atm_windows.h +3 -108
- data/include/grpc/impl/codegen/byte_buffer.h +4 -78
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
- data/include/grpc/impl/codegen/compression_types.h +5 -83
- data/include/grpc/impl/codegen/connectivity_state.h +5 -21
- data/include/grpc/impl/codegen/fork.h +4 -25
- data/include/grpc/impl/codegen/gpr_types.h +4 -35
- data/include/grpc/impl/codegen/grpc_types.h +5 -791
- data/include/grpc/impl/codegen/log.h +3 -86
- data/include/grpc/impl/codegen/port_platform.h +3 -699
- data/include/grpc/impl/codegen/propagation_bits.h +3 -28
- data/include/grpc/impl/codegen/slice.h +4 -107
- data/include/grpc/impl/codegen/status.h +4 -131
- data/include/grpc/impl/codegen/sync.h +3 -42
- data/include/grpc/impl/codegen/sync_abseil.h +3 -12
- data/include/grpc/impl/codegen/sync_custom.h +3 -14
- data/include/grpc/impl/codegen/sync_generic.h +3 -25
- data/include/grpc/impl/codegen/sync_posix.h +3 -28
- data/include/grpc/impl/codegen/sync_windows.h +3 -16
- data/include/grpc/impl/compression_types.h +109 -0
- data/include/grpc/impl/connectivity_state.h +47 -0
- data/include/grpc/impl/grpc_types.h +836 -0
- data/include/grpc/impl/propagation_bits.h +54 -0
- data/include/grpc/impl/slice_type.h +112 -0
- data/include/grpc/load_reporting.h +1 -1
- data/include/grpc/module.modulemap +5 -1
- data/include/grpc/slice.h +1 -1
- data/include/grpc/status.h +131 -1
- data/include/grpc/support/atm.h +70 -1
- data/include/grpc/support/atm_gcc_atomic.h +59 -1
- data/include/grpc/support/atm_gcc_sync.h +58 -1
- data/include/grpc/support/atm_windows.h +105 -1
- data/include/grpc/support/log.h +87 -1
- data/include/grpc/support/log_windows.h +1 -1
- data/include/grpc/support/port_platform.h +767 -1
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +35 -2
- data/include/grpc/support/sync_abseil.h +11 -1
- data/include/grpc/support/sync_custom.h +13 -1
- data/include/grpc/support/sync_generic.h +24 -1
- data/include/grpc/support/sync_posix.h +27 -1
- data/include/grpc/support/sync_windows.h +15 -1
- data/include/grpc/support/time.h +31 -6
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
- data/src/core/ext/filters/census/grpc_context.cc +19 -17
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +67 -61
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +26 -6
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +6 -4
- data/src/core/ext/filters/client_channel/backend_metric.cc +19 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +21 -11
- data/src/core/ext/filters/client_channel/backup_poller.cc +34 -34
- data/src/core/ext/filters/client_channel/backup_poller.h +26 -28
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +89 -44
- data/src/core/ext/filters/client_channel/client_channel.cc +401 -451
- data/src/core/ext/filters/client_channel/client_channel.h +68 -26
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -23
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +33 -23
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +19 -43
- data/src/core/ext/filters/client_channel/client_channel_factory.h +11 -11
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +22 -47
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +33 -27
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +29 -23
- data/src/core/ext/filters/client_channel/connector.h +19 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +40 -54
- data/src/core/ext/filters/client_channel/dynamic_filters.h +20 -11
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +24 -21
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -4
- data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -3
- data/src/core/ext/filters/client_channel/http_proxy.cc +100 -112
- data/src/core/ext/filters/client_channel/http_proxy.h +38 -31
- data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +37 -16
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +18 -13
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +71 -131
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +41 -24
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +410 -375
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +27 -22
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +28 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +26 -25
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +338 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1129 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +174 -180
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +366 -407
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +491 -405
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +19 -9
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +619 -634
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +261 -234
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +165 -143
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +223 -220
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +214 -153
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +19 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +178 -256
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +199 -210
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +382 -368
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +819 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +369 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +22 -21
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +34 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +531 -163
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +50 -44
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +31 -30
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +89 -84
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +300 -209
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +82 -61
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +20 -19
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +22 -22
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +54 -22
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -34
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +19 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +135 -63
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +136 -68
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +29 -14
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -27
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +368 -305
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
- data/src/core/ext/filters/client_channel/retry_filter.cc +166 -163
- data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
- data/src/core/ext/filters/client_channel/retry_service_config.cc +197 -229
- data/src/core/ext/filters/client_channel/retry_service_config.h +29 -26
- data/src/core/ext/filters/client_channel/retry_throttle.cc +28 -37
- data/src/core/ext/filters/client_channel/retry_throttle.h +36 -29
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +34 -17
- data/src/core/ext/filters/client_channel/subchannel.cc +332 -384
- data/src/core/ext/filters/client_channel/subchannel.h +112 -82
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +41 -47
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +34 -108
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +20 -12
- data/src/core/ext/filters/deadline/deadline_filter.cc +94 -76
- data/src/core/ext/filters/deadline/deadline_filter.h +14 -12
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +44 -22
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +20 -11
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +34 -13
- data/src/core/ext/filters/http/client/http_client_filter.cc +76 -54
- data/src/core/ext/filters/http/client/http_client_filter.h +36 -23
- data/src/core/ext/filters/http/client_authority_filter.cc +33 -38
- data/src/core/ext/filters/http/client_authority_filter.h +27 -24
- data/src/core/ext/filters/http/http_filters_plugin.cc +46 -55
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +307 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +111 -271
- data/src/core/ext/filters/http/server/http_server_filter.h +58 -24
- data/src/core/ext/filters/message_size/message_size_filter.cc +117 -137
- data/src/core/ext/filters/message_size/message_size_filter.h +34 -17
- data/src/core/ext/filters/rbac/rbac_filter.cc +29 -16
- data/src/core/ext/filters/rbac/rbac_filter.h +11 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +736 -523
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +18 -7
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +20 -8
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +28 -12
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +4 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +219 -0
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
- data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +185 -241
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +38 -30
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +204 -211
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +26 -26
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +24 -24
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +35 -34
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +43 -38
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +35 -31
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +801 -1067
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +28 -23
- data/src/core/ext/transport/chttp2/transport/context_list.cc +23 -19
- data/src/core/ext/transport/chttp2/transport/context_list.h +32 -29
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +350 -300
- data/src/core/ext/transport/chttp2/transport/flow_control.h +248 -325
- data/src/core/ext/transport/chttp2/transport/frame.h +22 -26
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +85 -234
- data/src/core/ext/transport/chttp2/transport/frame_data.h +38 -61
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +41 -36
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +24 -22
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +31 -25
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +25 -22
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +35 -26
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +24 -21
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +44 -77
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +27 -23
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +34 -33
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +24 -21
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +221 -372
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +338 -158
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +6 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +16 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +516 -751
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +38 -27
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +86 -76
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +79 -49
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -38
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
- data/src/core/ext/transport/chttp2/transport/internal.h +248 -296
- data/src/core/ext/transport/chttp2/transport/parsing.cc +363 -132
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +30 -30
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +24 -24
- data/src/core/ext/transport/chttp2/transport/stream_map.h +34 -33
- data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
- data/src/core/ext/transport/chttp2/transport/varint.h +39 -34
- data/src/core/ext/transport/chttp2/transport/writing.cc +121 -94
- data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -18
- data/src/core/ext/transport/inproc/inproc_transport.cc +227 -274
- data/src/core/ext/transport/inproc/inproc_transport.h +23 -21
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +6 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +33 -8
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +388 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1953 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +25 -19
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +168 -34
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -43
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +195 -116
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +35 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +179 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +23 -20
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +137 -69
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +23 -21
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +132 -44
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +17 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +67 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +15 -9
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +73 -18
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +39 -13
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +194 -15
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +5 -3
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +28 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +26 -11
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +124 -14
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +19 -15
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +78 -69
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +168 -82
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +887 -166
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +107 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -6
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +27 -14
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -3
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +29 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +38 -27
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +207 -52
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +56 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +192 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +13 -11
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +73 -23
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +133 -16
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +656 -12
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
- data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
- data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
- data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
- data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +3 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -2
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -2
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +125 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +199 -187
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +232 -222
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +187 -183
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +81 -75
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +190 -186
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +164 -137
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -129
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -74
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +2 -2
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +740 -667
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +20 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +485 -467
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +149 -145
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +156 -84
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
- data/src/core/ext/xds/certificate_provider_store.cc +69 -5
- data/src/core/ext/xds/certificate_provider_store.h +22 -5
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +17 -10
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +12 -4
- data/src/core/ext/xds/upb_utils.h +3 -25
- data/src/core/ext/xds/xds_api.cc +90 -196
- data/src/core/ext/xds/xds_api.h +41 -39
- data/src/core/ext/xds/xds_bootstrap.cc +5 -537
- data/src/core/ext/xds/xds_bootstrap.h +41 -96
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +362 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +35 -26
- data/src/core/ext/xds/xds_certificate_provider.h +29 -5
- data/src/core/ext/xds/xds_channel_args.h +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +17 -7
- data/src/core/ext/xds/xds_channel_stack_modifier.h +16 -4
- data/src/core/ext/xds/xds_client.cc +849 -1316
- data/src/core/ext/xds/xds_client.h +57 -61
- data/src/core/ext/xds/xds_client_grpc.cc +235 -0
- data/src/core/ext/xds/xds_client_grpc.h +79 -0
- data/src/core/ext/xds/xds_client_stats.cc +24 -25
- data/src/core/ext/xds/xds_client_stats.h +26 -24
- data/src/core/ext/xds/xds_cluster.cc +505 -247
- data/src/core/ext/xds/xds_cluster.h +69 -40
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +67 -77
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +47 -29
- data/src/core/ext/xds/xds_common_types.cc +238 -123
- data/src/core/ext/xds/xds_common_types.h +29 -16
- data/src/core/ext/xds/xds_endpoint.cc +265 -162
- data/src/core/ext/xds/xds_endpoint.h +19 -15
- data/src/core/ext/xds/xds_health_status.cc +80 -0
- data/src/core/ext/xds/xds_health_status.h +109 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +67 -58
- data/src/core/ext/xds/xds_http_fault_filter.h +19 -25
- data/src/core/ext/xds/xds_http_filters.cc +70 -71
- data/src/core/ext/xds/xds_http_filters.h +73 -25
- data/src/core/ext/xds/xds_http_rbac_filter.cc +168 -225
- data/src/core/ext/xds/xds_http_rbac_filter.h +22 -18
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +334 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
- data/src/core/ext/xds/xds_listener.cc +573 -481
- data/src/core/ext/xds/xds_listener.h +57 -51
- data/src/core/ext/xds/xds_resource_type.h +28 -22
- data/src/core/ext/xds/xds_resource_type_impl.h +18 -17
- data/src/core/ext/xds/xds_route_config.cc +592 -570
- data/src/core/ext/xds/xds_route_config.h +74 -40
- data/src/core/ext/xds/xds_routing.cc +21 -7
- data/src/core/ext/xds/xds_routing.h +17 -12
- data/src/core/ext/xds/xds_server_config_fetcher.cc +227 -178
- data/src/core/ext/xds/xds_transport.h +86 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
- data/src/core/ext/xds/xds_transport_grpc.h +135 -0
- data/src/core/lib/address_utils/parse_address.cc +52 -52
- data/src/core/lib/address_utils/parse_address.h +46 -42
- data/src/core/lib/address_utils/sockaddr_utils.cc +90 -54
- data/src/core/lib/address_utils/sockaddr_utils.h +45 -40
- data/src/core/lib/avl/avl.h +57 -33
- data/src/core/lib/backoff/backoff.cc +19 -21
- data/src/core/lib/backoff/backoff.h +21 -21
- data/src/core/lib/backoff/random_early_detection.cc +31 -0
- data/src/core/lib/backoff/random_early_detection.h +59 -0
- data/src/core/lib/channel/call_finalization.h +6 -4
- data/src/core/lib/channel/call_tracer.h +23 -8
- data/src/core/lib/channel/channel_args.cc +149 -61
- data/src/core/lib/channel/channel_args.h +308 -104
- data/src/core/lib/channel/channel_args_preconditioning.cc +4 -3
- data/src/core/lib/channel/channel_args_preconditioning.h +6 -5
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +92 -52
- data/src/core/lib/channel/channel_stack.h +184 -135
- data/src/core/lib/channel/channel_stack_builder.cc +26 -39
- data/src/core/lib/channel/channel_stack_builder.h +33 -40
- data/src/core/lib/channel/channel_stack_builder_impl.cc +84 -60
- data/src/core/lib/channel/channel_stack_builder_impl.h +9 -9
- data/src/core/lib/channel/channel_trace.cc +29 -36
- data/src/core/lib/channel/channel_trace.h +27 -24
- data/src/core/lib/channel/channelz.cc +50 -65
- data/src/core/lib/channel/channelz.h +50 -33
- data/src/core/lib/channel/channelz_registry.cc +28 -36
- data/src/core/lib/channel/channelz_registry.h +31 -30
- data/src/core/lib/channel/connected_channel.cc +1267 -78
- data/src/core/lib/channel/connected_channel.h +21 -23
- data/src/core/lib/channel/context.h +25 -21
- data/src/core/lib/channel/promise_based_filter.cc +1896 -377
- data/src/core/lib/channel/promise_based_filter.h +592 -92
- data/src/core/lib/channel/status_util.cc +64 -17
- data/src/core/lib/channel/status_util.h +38 -24
- data/src/core/lib/compression/compression.cc +24 -19
- data/src/core/lib/compression/compression_internal.cc +88 -63
- data/src/core/lib/compression/compression_internal.h +28 -27
- data/src/core/lib/compression/message_compress.cc +28 -26
- data/src/core/lib/compression/message_compress.h +28 -29
- data/src/core/lib/config/core_configuration.cc +8 -1
- data/src/core/lib/config/core_configuration.h +86 -39
- data/src/core/lib/debug/event_log.cc +88 -0
- data/src/core/lib/debug/event_log.h +81 -0
- data/src/core/lib/debug/histogram_view.cc +69 -0
- data/src/core/lib/debug/histogram_view.h +37 -0
- data/src/core/lib/debug/stats.cc +48 -152
- data/src/core/lib/debug/stats.h +50 -57
- data/src/core/lib/debug/stats_data.cc +302 -645
- data/src/core/lib/debug/stats_data.h +293 -545
- data/src/core/lib/debug/trace.cc +18 -20
- data/src/core/lib/debug/trace.h +27 -48
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +16 -17
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -9
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +99 -0
- data/src/core/lib/event_engine/default_event_engine.h +73 -0
- data/src/core/lib/event_engine/default_event_engine_factory.cc +24 -3
- data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +6 -9
- data/src/core/lib/event_engine/event_engine.cc +3 -30
- data/src/core/lib/event_engine/executor/executor.h +38 -0
- data/src/core/lib/event_engine/forkable.cc +106 -0
- data/src/core/lib/event_engine/forkable.h +61 -0
- data/src/core/lib/event_engine/handle_containers.h +74 -0
- data/src/core/lib/event_engine/memory_allocator.cc +11 -3
- data/src/core/lib/event_engine/poller.h +62 -0
- data/src/core/lib/event_engine/posix.h +158 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +899 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
- data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1305 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +717 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +640 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +289 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +279 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
- data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
- data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
- data/src/core/lib/{iomgr/event_engine/promise.h → event_engine/posix_engine/wakeup_fd_pipe.h} +19 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
- data/src/core/lib/event_engine/resolved_address.cc +23 -2
- data/src/core/lib/{iomgr/event_engine → event_engine}/resolved_address_internal.h +5 -8
- data/src/core/lib/event_engine/shim.cc +56 -0
- data/src/core/lib/event_engine/shim.h +33 -0
- data/src/core/lib/event_engine/slice.cc +103 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
- data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
- data/src/core/lib/event_engine/thread_local.cc +29 -0
- data/src/core/lib/event_engine/thread_local.h +32 -0
- data/src/core/lib/event_engine/thread_pool.cc +253 -0
- data/src/core/lib/event_engine/thread_pool.h +141 -0
- data/src/core/lib/event_engine/time_util.cc +30 -0
- data/src/core/lib/event_engine/time_util.h +32 -0
- data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.cc} +9 -17
- data/src/core/lib/event_engine/trace.h +43 -0
- data/src/core/lib/event_engine/utils.cc +44 -0
- data/src/core/lib/event_engine/utils.h +44 -0
- data/src/core/lib/event_engine/windows/iocp.cc +140 -0
- data/src/core/lib/event_engine/windows/iocp.h +69 -0
- data/src/core/lib/event_engine/windows/win_socket.cc +219 -0
- data/src/core/lib/event_engine/windows/win_socket.h +129 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +388 -0
- data/src/core/lib/event_engine/windows/windows_engine.h +163 -0
- data/src/core/lib/experiments/config.cc +161 -0
- data/src/core/lib/experiments/config.h +53 -0
- data/src/core/lib/experiments/experiments.cc +81 -0
- data/src/core/lib/experiments/experiments.h +117 -0
- data/src/core/lib/gpr/alloc.cc +19 -25
- data/src/core/lib/gpr/alloc.h +20 -20
- data/src/core/lib/gpr/atm.cc +17 -17
- data/src/core/lib/gpr/cpu_iphone.cc +24 -24
- data/src/core/lib/gpr/cpu_linux.cc +28 -23
- data/src/core/lib/gpr/cpu_posix.cc +23 -22
- data/src/core/lib/gpr/cpu_windows.cc +20 -18
- data/src/core/lib/gpr/log.cc +30 -17
- data/src/core/lib/gpr/log_android.cc +22 -20
- data/src/core/lib/gpr/log_linux.cc +24 -24
- data/src/core/lib/gpr/log_posix.cc +20 -19
- data/src/core/lib/gpr/log_windows.cc +25 -25
- data/src/core/lib/gpr/spinlock.h +20 -20
- data/src/core/lib/gpr/string.cc +25 -24
- data/src/core/lib/gpr/string.h +61 -61
- data/src/core/lib/gpr/string_posix.cc +24 -24
- data/src/core/lib/gpr/string_util_windows.cc +25 -52
- data/src/core/lib/gpr/string_windows.cc +24 -24
- data/src/core/lib/gpr/sync.cc +25 -25
- data/src/core/lib/gpr/sync_abseil.cc +36 -40
- data/src/core/lib/gpr/sync_posix.cc +22 -34
- data/src/core/lib/gpr/sync_windows.cc +29 -27
- data/src/core/lib/gpr/time.cc +34 -30
- data/src/core/lib/gpr/time_posix.cc +41 -45
- data/src/core/lib/gpr/time_precise.cc +22 -22
- data/src/core/lib/gpr/time_precise.h +21 -22
- data/src/core/lib/gpr/time_windows.cc +35 -29
- data/src/core/lib/gpr/tmpfile.h +24 -24
- data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
- data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
- data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
- data/src/core/lib/gpr/useful.h +83 -30
- data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
- data/src/core/lib/gprpp/atomic_utils.h +20 -20
- data/src/core/lib/gprpp/bitset.h +35 -17
- data/src/core/lib/gprpp/chunked_vector.h +7 -3
- data/src/core/lib/gprpp/construct_destruct.h +4 -3
- data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
- data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
- data/src/core/lib/gprpp/crash.h +34 -0
- data/src/core/lib/gprpp/debug_location.h +60 -31
- data/src/core/lib/gprpp/dual_ref_counted.h +4 -7
- data/src/core/lib/gprpp/env.h +53 -0
- data/src/core/lib/gprpp/env_linux.cc +80 -0
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc → lib/gprpp/env_posix.cc} +25 -9
- data/src/core/lib/gprpp/env_windows.cc +56 -0
- data/src/core/lib/gprpp/examine_stack.cc +17 -17
- data/src/core/lib/gprpp/examine_stack.h +21 -22
- data/src/core/lib/gprpp/fork.cc +58 -53
- data/src/core/lib/gprpp/fork.h +29 -35
- data/src/core/lib/gprpp/global_config.h +22 -24
- data/src/core/lib/gprpp/global_config_custom.h +20 -20
- data/src/core/lib/gprpp/global_config_env.cc +28 -25
- data/src/core/lib/gprpp/global_config_env.h +29 -27
- data/src/core/lib/gprpp/global_config_generic.h +21 -25
- data/src/core/lib/gprpp/host_port.cc +30 -26
- data/src/core/lib/gprpp/host_port.h +32 -31
- data/src/core/lib/gprpp/load_file.cc +75 -0
- data/src/core/lib/gprpp/load_file.h +33 -0
- data/src/core/lib/gprpp/manual_constructor.h +21 -89
- data/src/core/lib/gprpp/match.h +5 -3
- data/src/core/lib/gprpp/memory.h +22 -26
- data/src/core/lib/gprpp/mpscq.cc +17 -17
- data/src/core/lib/gprpp/mpscq.h +21 -21
- data/src/core/lib/gprpp/no_destruct.h +95 -0
- data/src/core/lib/gprpp/notification.h +67 -0
- data/src/core/lib/gprpp/orphanable.h +22 -25
- data/src/core/lib/gprpp/overload.h +3 -3
- data/src/core/lib/gprpp/packed_table.h +40 -0
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/ref_counted.h +22 -24
- data/src/core/lib/gprpp/ref_counted_ptr.h +42 -55
- data/src/core/lib/gprpp/single_set_ptr.h +3 -3
- data/src/core/lib/gprpp/sorted_pack.h +98 -0
- data/src/core/lib/gprpp/stat.h +3 -5
- data/src/core/lib/gprpp/stat_posix.cc +10 -4
- data/src/core/lib/gprpp/stat_windows.cc +4 -2
- data/src/core/lib/gprpp/status_helper.cc +55 -35
- data/src/core/lib/gprpp/status_helper.h +13 -5
- data/src/core/lib/gprpp/strerror.cc +43 -0
- data/src/core/lib/gprpp/strerror.h +29 -0
- data/src/core/lib/gprpp/sync.h +26 -24
- data/src/core/lib/gprpp/table.h +22 -4
- data/src/core/lib/gprpp/tchar.cc +49 -0
- data/src/core/lib/gprpp/tchar.h +33 -0
- data/src/core/lib/gprpp/thd.h +25 -28
- data/src/core/lib/gprpp/thd_posix.cc +33 -32
- data/src/core/lib/gprpp/thd_windows.cc +28 -26
- data/src/core/lib/gprpp/time.cc +52 -9
- data/src/core/lib/gprpp/time.h +78 -4
- data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
- data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +3 -3
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/gprpp/validation_errors.cc +61 -0
- data/src/core/lib/gprpp/validation_errors.h +127 -0
- data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
- data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
- data/src/core/lib/handshaker/proxy_mapper.h +53 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
- data/src/core/lib/http/format_request.cc +53 -22
- data/src/core/lib/http/format_request.h +23 -21
- data/src/core/lib/http/httpcli.cc +139 -141
- data/src/core/lib/http/httpcli.h +86 -38
- data/src/core/lib/http/httpcli_security_connector.cc +50 -42
- data/src/core/lib/http/httpcli_ssl_credentials.h +6 -4
- data/src/core/lib/http/parser.cc +78 -90
- data/src/core/lib/http/parser.h +38 -35
- data/src/core/lib/iomgr/block_annotate.h +23 -23
- data/src/core/lib/iomgr/buffer_list.cc +156 -136
- data/src/core/lib/iomgr/buffer_list.h +123 -101
- data/src/core/lib/iomgr/call_combiner.cc +32 -64
- data/src/core/lib/iomgr/call_combiner.h +24 -25
- data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
- data/src/core/lib/iomgr/cfstream_handle.h +25 -25
- data/src/core/lib/iomgr/{event_engine/pollset.h → closure.cc} +9 -7
- data/src/core/lib/iomgr/closure.h +95 -58
- data/src/core/lib/iomgr/combiner.cc +20 -39
- data/src/core/lib/iomgr/combiner.h +20 -20
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
- data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
- data/src/core/lib/iomgr/endpoint.cc +21 -21
- data/src/core/lib/iomgr/endpoint.h +53 -51
- data/src/core/lib/iomgr/endpoint_cfstream.cc +51 -47
- data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
- data/src/core/lib/iomgr/endpoint_pair.h +22 -22
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +36 -29
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +31 -22
- data/src/core/lib/iomgr/error.cc +51 -834
- data/src/core/lib/iomgr/error.h +45 -317
- data/src/core/lib/iomgr/error_cfstream.cc +18 -23
- data/src/core/lib/iomgr/error_cfstream.h +21 -21
- data/src/core/lib/iomgr/ev_apple.cc +21 -21
- data/src/core/lib/iomgr/ev_apple.h +21 -21
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +263 -248
- data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
- data/src/core/lib/iomgr/ev_poll_posix.cc +296 -271
- data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
- data/src/core/lib/iomgr/ev_posix.cc +88 -121
- data/src/core/lib/iomgr/ev_posix.h +93 -87
- data/src/core/lib/iomgr/ev_windows.cc +18 -18
- data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.cc +15 -30
- data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.h +10 -13
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
- data/src/core/lib/iomgr/exec_ctx.cc +34 -56
- data/src/core/lib/iomgr/exec_ctx.h +152 -177
- data/src/core/lib/iomgr/executor.cc +21 -31
- data/src/core/lib/iomgr/executor.h +27 -30
- data/src/core/lib/iomgr/fork_posix.cc +30 -27
- data/src/core/lib/iomgr/fork_windows.cc +21 -21
- data/src/core/lib/iomgr/gethostname.h +20 -20
- data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
- data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
- data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
- data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
- data/src/core/lib/iomgr/internal_errqueue.cc +41 -48
- data/src/core/lib/iomgr/internal_errqueue.h +84 -89
- data/src/core/lib/iomgr/iocp_windows.cc +23 -23
- data/src/core/lib/iomgr/iocp_windows.h +21 -21
- data/src/core/lib/iomgr/iomgr.cc +25 -20
- data/src/core/lib/iomgr/iomgr.h +35 -35
- data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
- data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
- data/src/core/lib/iomgr/iomgr_internal.h +28 -28
- data/src/core/lib/iomgr/iomgr_posix.cc +21 -20
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -19
- data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
- data/src/core/lib/iomgr/load_file.cc +24 -27
- data/src/core/lib/iomgr/load_file.h +22 -22
- data/src/core/lib/iomgr/lockfree_event.cc +114 -131
- data/src/core/lib/iomgr/lockfree_event.h +23 -23
- data/src/core/lib/iomgr/nameser.h +86 -86
- data/src/core/lib/iomgr/polling_entity.cc +25 -21
- data/src/core/lib/iomgr/polling_entity.h +29 -29
- data/src/core/lib/iomgr/pollset.cc +17 -17
- data/src/core/lib/iomgr/pollset.h +55 -55
- data/src/core/lib/iomgr/pollset_set.cc +17 -17
- data/src/core/lib/iomgr/pollset_set.h +26 -28
- data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
- data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
- data/src/core/lib/iomgr/pollset_windows.cc +32 -31
- data/src/core/lib/iomgr/pollset_windows.h +24 -24
- data/src/core/lib/iomgr/port.h +59 -37
- data/src/core/lib/iomgr/python_util.h +24 -24
- data/src/core/lib/iomgr/resolve_address.cc +34 -20
- data/src/core/lib/iomgr/resolve_address.h +73 -43
- data/src/core/lib/iomgr/resolve_address_impl.h +7 -7
- data/src/core/lib/iomgr/resolve_address_posix.cc +81 -62
- data/src/core/lib/iomgr/resolve_address_posix.h +26 -10
- data/src/core/lib/iomgr/resolve_address_windows.cc +64 -38
- data/src/core/lib/iomgr/resolve_address_windows.h +26 -10
- data/src/core/lib/iomgr/resolved_address.h +3 -3
- data/src/core/lib/iomgr/sockaddr.h +25 -26
- data/src/core/lib/iomgr/sockaddr_posix.h +23 -21
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
- data/src/core/lib/iomgr/sockaddr_windows.h +23 -21
- data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
- data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
- data/src/core/lib/iomgr/socket_mutator.cc +19 -18
- data/src/core/lib/iomgr/socket_mutator.h +39 -39
- data/src/core/lib/iomgr/socket_utils.h +27 -27
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +82 -101
- data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
- data/src/core/lib/iomgr/socket_utils_posix.cc +103 -19
- data/src/core/lib/iomgr/socket_utils_posix.h +176 -84
- data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
- data/src/core/lib/iomgr/socket_windows.cc +37 -36
- data/src/core/lib/iomgr/socket_windows.h +59 -61
- data/src/core/lib/iomgr/systemd_utils.cc +116 -0
- data/src/core/lib/iomgr/systemd_utils.h +33 -0
- data/src/core/lib/iomgr/tcp_client.cc +28 -24
- data/src/core/lib/iomgr/tcp_client.h +49 -38
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +46 -35
- data/src/core/lib/iomgr/tcp_client_posix.cc +243 -105
- data/src/core/lib/iomgr/tcp_client_posix.h +55 -52
- data/src/core/lib/iomgr/tcp_client_windows.cc +73 -53
- data/src/core/lib/iomgr/tcp_posix.cc +505 -362
- data/src/core/lib/iomgr/tcp_posix.h +32 -30
- data/src/core/lib/iomgr/tcp_server.cc +33 -24
- data/src/core/lib/iomgr/tcp_server.h +78 -69
- data/src/core/lib/iomgr/tcp_server_posix.cc +381 -133
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +120 -82
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +46 -43
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
- data/src/core/lib/iomgr/tcp_server_windows.cc +116 -118
- data/src/core/lib/iomgr/tcp_windows.cc +116 -98
- data/src/core/lib/iomgr/tcp_windows.h +34 -35
- data/src/core/lib/iomgr/timer.cc +17 -17
- data/src/core/lib/iomgr/timer.h +68 -68
- data/src/core/lib/iomgr/timer_generic.cc +125 -134
- data/src/core/lib/iomgr/timer_generic.h +21 -21
- data/src/core/lib/iomgr/timer_heap.cc +25 -25
- data/src/core/lib/iomgr/timer_heap.h +22 -22
- data/src/core/lib/iomgr/timer_manager.cc +31 -31
- data/src/core/lib/iomgr/timer_manager.h +27 -27
- data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +33 -30
- data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -54
- data/src/core/lib/json/json.h +23 -27
- data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -10
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +217 -0
- data/src/core/lib/json/json_object_loader.h +634 -0
- data/src/core/lib/json/json_reader.cc +123 -90
- data/src/core/lib/json/json_util.cc +14 -34
- data/src/core/lib/json/json_util.h +17 -8
- data/src/core/lib/json/json_writer.cc +62 -57
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +30 -60
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +47 -62
- data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +142 -0
- data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +57 -52
- data/src/core/lib/matchers/matchers.cc +12 -7
- data/src/core/lib/matchers/matchers.h +5 -3
- data/src/core/lib/promise/activity.cc +23 -8
- data/src/core/lib/promise/activity.h +116 -58
- data/src/core/lib/promise/arena_promise.h +115 -72
- data/src/core/lib/promise/context.h +18 -11
- data/src/core/lib/promise/detail/basic_join.h +197 -0
- data/src/core/lib/promise/detail/basic_seq.h +28 -33
- data/src/core/lib/promise/detail/promise_factory.h +61 -14
- data/src/core/lib/promise/detail/promise_like.h +3 -3
- data/src/core/lib/promise/detail/status.h +31 -3
- data/src/core/lib/promise/detail/switch.h +21 -21
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
- data/src/core/lib/promise/if.h +195 -0
- data/src/core/lib/promise/interceptor_list.h +308 -0
- data/src/core/lib/promise/intra_activity_waiter.h +9 -3
- data/src/core/lib/promise/latch.h +109 -22
- data/src/core/lib/promise/loop.h +13 -9
- data/src/core/lib/promise/map.h +4 -6
- data/src/core/lib/promise/pipe.h +608 -0
- data/src/core/lib/promise/poll.h +129 -11
- data/src/core/lib/promise/promise.h +5 -5
- data/src/core/lib/promise/race.h +6 -10
- data/src/core/lib/promise/seq.h +32 -14
- data/src/core/lib/promise/sleep.cc +58 -42
- data/src/core/lib/promise/sleep.h +44 -26
- data/src/core/lib/promise/trace.cc +20 -0
- data/src/core/lib/promise/trace.h +24 -0
- data/src/core/lib/promise/try_join.h +82 -0
- data/src/core/lib/promise/try_seq.h +41 -23
- data/src/core/lib/resolver/resolver.cc +17 -59
- data/src/core/lib/resolver/resolver.h +21 -18
- data/src/core/lib/resolver/resolver_factory.h +11 -10
- data/src/core/lib/resolver/resolver_registry.cc +17 -9
- data/src/core/lib/resolver/resolver_registry.h +15 -5
- data/src/core/lib/resolver/server_address.cc +46 -34
- data/src/core/lib/resolver/server_address.h +36 -35
- data/src/core/lib/resource_quota/api.cc +23 -2
- data/src/core/lib/resource_quota/api.h +13 -4
- data/src/core/lib/resource_quota/arena.cc +85 -27
- data/src/core/lib/resource_quota/arena.h +197 -25
- data/src/core/lib/resource_quota/memory_quota.cc +322 -101
- data/src/core/lib/resource_quota/memory_quota.h +191 -56
- data/src/core/lib/resource_quota/periodic_update.cc +78 -0
- data/src/core/lib/resource_quota/periodic_update.h +71 -0
- data/src/core/lib/resource_quota/resource_quota.h +12 -4
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +7 -3
- data/src/core/lib/resource_quota/trace.h +3 -3
- data/src/core/lib/security/authorization/authorization_engine.h +3 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +10 -3
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
- data/src/core/lib/security/authorization/evaluate_args.h +9 -6
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +5 -1
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +10 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +19 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +16 -5
- data/src/core/lib/security/authorization/matchers.cc +44 -30
- data/src/core/lib/security/authorization/matchers.h +10 -3
- data/src/core/lib/security/authorization/rbac_policy.cc +6 -2
- data/src/core/lib/security/authorization/rbac_policy.h +10 -3
- data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +9 -4
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
- data/src/core/lib/security/context/security_context.cc +27 -25
- data/src/core/lib/security/context/security_context.h +56 -34
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +31 -24
- data/src/core/lib/security/credentials/alts/alts_credentials.h +63 -59
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
- data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +20 -22
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
- data/src/core/lib/security/credentials/call_creds_util.cc +10 -0
- data/src/core/lib/security/credentials/call_creds_util.h +4 -3
- data/src/core/lib/security/credentials/channel_creds_registry.h +10 -4
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +13 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +34 -34
- data/src/core/lib/security/credentials/composite/composite_credentials.h +45 -33
- data/src/core/lib/security/credentials/credentials.cc +23 -26
- data/src/core/lib/security/credentials/credentials.h +79 -65
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +202 -74
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +21 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +14 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +86 -68
- data/src/core/lib/security/credentials/external/external_account_credentials.h +14 -3
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -26
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +9 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +44 -31
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +43 -39
- data/src/core/lib/security/credentials/fake/fake_credentials.h +51 -44
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +23 -25
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +146 -114
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +33 -27
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +31 -21
- data/src/core/lib/security/credentials/iam/iam_credentials.h +33 -23
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +15 -5
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +14 -10
- data/src/core/lib/security/credentials/jwt/json_token.cc +40 -29
- data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +32 -29
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +37 -23
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +113 -89
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
- data/src/core/lib/security/credentials/local/local_credentials.cc +32 -26
- data/src/core/lib/security/credentials/local/local_credentials.h +34 -28
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +95 -87
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +46 -25
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +35 -31
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +48 -24
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +44 -42
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +39 -27
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +22 -30
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +16 -17
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +65 -48
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +27 -16
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +36 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +37 -14
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +22 -23
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +46 -44
- data/src/core/lib/security/credentials/tls/tls_credentials.h +30 -27
- data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.h +4 -4
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +33 -35
- data/src/core/lib/security/credentials/xds/xds_credentials.h +24 -10
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +60 -54
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +49 -47
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +75 -79
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +25 -26
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +15 -6
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +26 -15
- data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +22 -20
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +43 -38
- data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +64 -47
- data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
- data/src/core/lib/security/security_connector/security_connector.cc +37 -35
- data/src/core/lib/security/security_connector/security_connector.h +58 -45
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +55 -46
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
- data/src/core/lib/security/security_connector/ssl_utils.cc +47 -39
- data/src/core/lib/security/security_connector/ssl_utils.h +45 -42
- data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
- data/src/core/lib/security/security_connector/ssl_utils_config.h +21 -22
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +58 -56
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +48 -28
- data/src/core/lib/security/transport/auth_filters.h +53 -24
- data/src/core/lib/security/transport/client_auth_filter.cc +57 -40
- data/src/core/lib/security/transport/secure_endpoint.cc +130 -75
- data/src/core/lib/security/transport/secure_endpoint.h +28 -27
- data/src/core/lib/security/transport/security_handshaker.cc +144 -114
- data/src/core/lib/security/transport/security_handshaker.h +28 -23
- data/src/core/lib/security/transport/server_auth_filter.cc +157 -266
- data/src/core/lib/security/transport/tsi_error.cc +23 -20
- data/src/core/lib/security/transport/tsi_error.h +20 -20
- data/src/core/lib/security/util/json_util.cc +24 -24
- data/src/core/lib/security/util/json_util.h +21 -23
- data/src/core/lib/service_config/service_config.h +19 -12
- data/src/core/lib/service_config/service_config_call_data.h +15 -5
- data/src/core/lib/service_config/service_config_impl.cc +111 -150
- data/src/core/lib/service_config/service_config_impl.h +27 -27
- data/src/core/lib/service_config/service_config_parser.cc +16 -28
- data/src/core/lib/service_config/service_config_parser.h +18 -19
- data/src/core/lib/slice/b64.cc +26 -26
- data/src/core/lib/slice/b64.h +34 -32
- data/src/core/lib/slice/percent_encoding.cc +24 -30
- data/src/core/lib/slice/percent_encoding.h +28 -34
- data/src/core/lib/slice/slice.cc +59 -46
- data/src/core/lib/slice/slice.h +64 -20
- data/src/core/lib/slice/slice_buffer.cc +136 -76
- data/src/core/lib/slice/slice_buffer.h +168 -0
- data/src/core/lib/slice/slice_internal.h +38 -45
- data/src/core/lib/slice/slice_refcount.cc +3 -18
- data/src/core/lib/slice/slice_refcount.h +53 -19
- data/src/core/lib/slice/slice_string_helpers.cc +17 -33
- data/src/core/lib/slice/slice_string_helpers.h +23 -30
- data/src/core/lib/surface/api_trace.cc +17 -17
- data/src/core/lib/surface/api_trace.h +25 -25
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/builtins.h +3 -3
- data/src/core/lib/surface/byte_buffer.cc +26 -21
- data/src/core/lib/surface/byte_buffer_reader.cc +24 -24
- data/src/core/lib/surface/call.cc +2232 -483
- data/src/core/lib/surface/call.h +135 -42
- data/src/core/lib/surface/call_details.cc +22 -23
- data/src/core/lib/surface/call_log_batch.cc +25 -18
- data/src/core/lib/surface/call_test_only.h +34 -31
- data/src/core/lib/surface/call_trace.cc +123 -0
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/surface/call_trace.h} +12 -10
- data/src/core/lib/surface/channel.cc +217 -284
- data/src/core/lib/surface/channel.h +137 -90
- data/src/core/lib/surface/channel_init.cc +17 -17
- data/src/core/lib/surface/channel_init.h +22 -20
- data/src/core/lib/surface/channel_ping.cc +26 -20
- data/src/core/lib/surface/channel_stack_type.cc +21 -19
- data/src/core/lib/surface/channel_stack_type.h +22 -22
- data/src/core/lib/surface/completion_queue.cc +200 -222
- data/src/core/lib/surface/completion_queue.h +42 -40
- data/src/core/lib/surface/completion_queue_factory.cc +34 -28
- data/src/core/lib/surface/completion_queue_factory.h +21 -23
- data/src/core/lib/surface/event_string.cc +19 -24
- data/src/core/lib/surface/event_string.h +21 -21
- data/src/core/lib/surface/init.cc +57 -114
- data/src/core/lib/surface/init.h +20 -28
- data/src/core/lib/surface/init_internally.cc +25 -0
- data/src/core/lib/surface/init_internally.h +37 -0
- data/src/core/lib/surface/lame_client.cc +87 -130
- data/src/core/lib/surface/lame_client.h +62 -24
- data/src/core/lib/surface/metadata_array.cc +18 -17
- data/src/core/lib/surface/server.cc +406 -174
- data/src/core/lib/surface/server.h +56 -24
- data/src/core/lib/surface/validate_metadata.cc +64 -77
- data/src/core/lib/surface/validate_metadata.h +33 -21
- data/src/core/lib/surface/version.cc +21 -21
- data/src/core/lib/transport/bdp_estimator.cc +19 -19
- data/src/core/lib/transport/bdp_estimator.h +22 -24
- data/src/core/lib/transport/connectivity_state.cc +24 -23
- data/src/core/lib/transport/connectivity_state.h +24 -25
- data/src/core/lib/transport/error_utils.cc +57 -79
- data/src/core/lib/transport/error_utils.h +29 -25
- data/src/core/lib/{channel → transport}/handshaker.cc +75 -58
- data/src/core/lib/{channel → transport}/handshaker.h +59 -48
- data/src/core/lib/transport/handshaker_factory.h +74 -0
- data/src/core/lib/transport/handshaker_registry.cc +61 -0
- data/src/core/lib/transport/handshaker_registry.h +69 -0
- data/src/core/lib/transport/http2_errors.h +22 -22
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +78 -65
- data/src/core/lib/transport/http_connect_handshaker.h +42 -0
- data/src/core/lib/transport/metadata_batch.cc +305 -0
- data/src/core/lib/transport/metadata_batch.h +405 -304
- data/src/core/lib/transport/parsed_metadata.cc +2 -4
- data/src/core/lib/transport/parsed_metadata.h +33 -14
- data/src/core/lib/transport/pid_controller.cc +20 -20
- data/src/core/lib/transport/pid_controller.h +27 -27
- data/src/core/lib/transport/status_conversion.cc +23 -23
- data/src/core/lib/transport/status_conversion.h +24 -24
- data/src/core/lib/transport/tcp_connect_handshaker.cc +245 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +24 -28
- data/src/core/lib/transport/timeout_encoding.h +25 -21
- data/src/core/lib/transport/transport.cc +97 -57
- data/src/core/lib/transport/transport.h +243 -213
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +55 -45
- data/src/core/lib/transport/transport_op_string.cc +40 -39
- data/src/core/lib/uri/uri_parser.cc +12 -4
- data/src/core/lib/uri/uri_parser.h +3 -5
- data/src/core/plugin_registry/grpc_plugin_registry.cc +60 -69
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +20 -39
- data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
- data/src/core/tsi/alts/crypt/gsec.cc +26 -26
- data/src/core/tsi/alts/crypt/gsec.h +336 -336
- data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
- data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
- data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
- data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
- data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +117 -97
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +51 -43
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +67 -58
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
- data/src/core/tsi/fake_transport_security.cc +146 -110
- data/src/core/tsi/fake_transport_security.h +36 -30
- data/src/core/tsi/local_transport_security.cc +43 -38
- data/src/core/tsi/local_transport_security.h +33 -33
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
- data/src/core/tsi/ssl/session_cache/ssl_session.h +23 -21
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +21 -19
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +27 -20
- data/src/core/tsi/ssl_transport_security.cc +299 -370
- data/src/core/tsi/ssl_transport_security.h +206 -203
- data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
- data/src/core/tsi/ssl_transport_security_utils.h +147 -0
- data/src/core/tsi/ssl_types.h +27 -27
- data/src/core/tsi/transport_security.cc +44 -32
- data/src/core/tsi/transport_security.h +49 -48
- data/src/core/tsi/transport_security_grpc.cc +23 -22
- data/src/core/tsi/transport_security_grpc.h +44 -41
- data/src/core/tsi/transport_security_interface.h +344 -332
- data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -1
- data/src/ruby/ext/grpc/extconf.rb +98 -20
- data/src/ruby/ext/grpc/rb_call.c +1 -0
- data/src/ruby/ext/grpc/rb_channel.c +1 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +1 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +60 -60
- data/src/ruby/ext/grpc/rb_loader.c +6 -2
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +0 -6
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
- data/src/ruby/spec/channel_spec.rb +5 -43
- data/src/ruby/spec/client_server_spec.rb +20 -8
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
- data/src/ruby/spec/user_agent_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +57 -58
- data/third_party/abseil-cpp/absl/base/attributes.h +88 -41
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +221 -39
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +52 -2
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -4
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +39 -28
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +36 -36
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +6 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +10 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -11
- data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -40
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/macros.h +4 -21
- data/third_party/abseil-cpp/absl/base/optimization.h +76 -16
- data/third_party/abseil-cpp/absl/base/options.h +1 -7
- data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -5
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +84 -25
- data/third_party/abseil-cpp/absl/container/internal/common.h +9 -8
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +23 -29
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +116 -23
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +40 -54
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +165 -66
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +159 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1121 -470
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -13
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +19 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +59 -102
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +41 -11
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +18 -4
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +164 -101
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +235 -26
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
- data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
- data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
- data/third_party/abseil-cpp/absl/numeric/bits.h +1 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +14 -10
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +33 -10
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -2
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +3 -24
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/random.h +6 -6
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/status.cc +193 -14
- data/third_party/abseil-cpp/absl/status/status.h +24 -14
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
- data/third_party/abseil-cpp/absl/strings/cord.cc +257 -924
- data/third_party/abseil-cpp/absl/strings/cord.h +268 -156
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +575 -0
- data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
- data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +441 -150
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +157 -53
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +70 -73
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +19 -43
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +18 -15
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
- data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +127 -30
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +42 -10
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +56 -289
- data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +9 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -103
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +42 -39
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -16
- data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +8 -19
- data/third_party/abseil-cpp/absl/strings/string_view.h +6 -12
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +55 -21
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +172 -88
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +102 -55
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -3
- data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -11
- data/third_party/abseil-cpp/absl/time/format.cc +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
- data/third_party/abseil-cpp/absl/time/time.cc +2 -2
- data/third_party/abseil-cpp/absl/time/time.h +268 -169
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
- data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +31 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
- data/third_party/re2/re2/bitstate.cc +3 -3
- data/third_party/re2/re2/dfa.cc +13 -13
- data/third_party/re2/re2/nfa.cc +4 -4
- data/third_party/re2/re2/onepass.cc +2 -2
- data/third_party/re2/re2/prefilter_tree.cc +27 -59
- data/third_party/re2/re2/prefilter_tree.h +3 -2
- data/third_party/re2/re2/prog.cc +11 -2
- data/third_party/re2/re2/prog.h +17 -5
- data/third_party/re2/re2/re2.cc +6 -11
- data/third_party/re2/re2/re2.h +1 -1
- data/third_party/re2/re2/regexp.cc +1 -2
- data/third_party/re2/re2/stringpiece.h +10 -7
- data/third_party/re2/re2/unicode_casefold.cc +25 -11
- data/third_party/re2/re2/unicode_groups.cc +319 -151
- data/third_party/re2/re2/walker-inl.h +3 -2
- data/third_party/re2/util/mutex.h +4 -4
- data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
- data/third_party/upb/upb/arena.c +277 -0
- data/third_party/upb/upb/arena.h +225 -0
- data/third_party/upb/upb/array.c +114 -0
- data/third_party/upb/upb/array.h +83 -0
- data/third_party/upb/upb/collections.h +36 -0
- data/third_party/upb/upb/decode.c +161 -65
- data/third_party/upb/upb/decode.h +1 -0
- data/third_party/upb/upb/decode_fast.c +1 -1
- data/third_party/upb/upb/def.c +10 -2
- data/third_party/upb/upb/def.h +8 -1
- data/third_party/upb/upb/def.hpp +7 -4
- data/third_party/upb/upb/encode.c +29 -20
- data/third_party/upb/upb/encode.h +16 -6
- data/third_party/upb/upb/extension_registry.c +93 -0
- data/third_party/upb/upb/extension_registry.h +84 -0
- data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
- data/third_party/upb/upb/internal/table.h +385 -0
- data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
- data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
- data/third_party/upb/upb/json_decode.c +1512 -0
- data/third_party/upb/upb/json_decode.h +47 -0
- data/third_party/upb/upb/json_encode.c +7 -3
- data/third_party/upb/upb/json_encode.h +6 -3
- data/third_party/upb/upb/map.c +108 -0
- data/third_party/upb/upb/map.h +117 -0
- data/third_party/upb/upb/message_value.h +66 -0
- data/third_party/upb/upb/mini_table.c +1147 -0
- data/third_party/upb/upb/mini_table.h +189 -0
- data/third_party/upb/upb/mini_table.hpp +112 -0
- data/third_party/upb/upb/msg.c +2 -62
- data/third_party/upb/upb/msg.h +2 -45
- data/third_party/upb/upb/msg_internal.h +28 -22
- data/third_party/upb/upb/port_def.inc +2 -1
- data/third_party/upb/upb/port_undef.inc +1 -0
- data/third_party/upb/upb/reflection.c +2 -159
- data/third_party/upb/upb/reflection.h +2 -112
- data/third_party/upb/upb/status.c +86 -0
- data/third_party/upb/upb/status.h +66 -0
- data/third_party/upb/upb/table.c +2 -2
- data/third_party/upb/upb/table_internal.h +3 -352
- data/third_party/upb/upb/text_encode.c +3 -2
- data/third_party/upb/upb/upb.c +4 -290
- data/third_party/upb/upb/upb.h +7 -196
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +21 -12
- data/third_party/zlib/deflate.c +112 -106
- data/third_party/zlib/deflate.h +2 -2
- data/third_party/zlib/gzlib.c +1 -1
- data/third_party/zlib/gzread.c +3 -5
- data/third_party/zlib/gzwrite.c +1 -1
- data/third_party/zlib/infback.c +10 -7
- data/third_party/zlib/inflate.c +5 -2
- data/third_party/zlib/inftrees.c +2 -2
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +61 -62
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +10 -10
- data/third_party/zlib/zutil.c +9 -7
- data/third_party/zlib/zutil.h +1 -0
- metadata +372 -102
- data/include/grpc/impl/codegen/gpr_slice.h +0 -71
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
- data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -186
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -179
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -456
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -386
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -61
- data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
- data/src/core/ext/xds/certificate_provider_registry.h +0 -57
- data/src/core/lib/channel/handshaker_factory.h +0 -50
- data/src/core/lib/channel/handshaker_registry.cc +0 -50
- data/src/core/lib/channel/handshaker_registry.h +0 -71
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gpr/env.h +0 -40
- data/src/core/lib/gpr/env_linux.cc +0 -75
- data/src/core/lib/gpr/env_posix.cc +0 -46
- data/src/core/lib/gpr/env_windows.cc +0 -74
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/string_windows.h +0 -32
- data/src/core/lib/gpr/tls.h +0 -158
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/error_internal.h +0 -66
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
- data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
- data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
- data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
- data/src/core/lib/iomgr/executor/threadpool.h +0 -150
- data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
- data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
- data/src/core/lib/profiling/basic_timers.cc +0 -295
- data/src/core/lib/profiling/stap_timers.cc +0 -50
- data/src/core/lib/profiling/timers.h +0 -94
- data/src/core/lib/promise/call_push_pull.h +0 -144
- data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_refcount_base.h +0 -61
- data/src/core/lib/slice/slice_split.cc +0 -100
- data/src/core/lib/slice/slice_split.h +0 -40
- data/src/core/lib/transport/byte_stream.cc +0 -164
- data/src/core/lib/transport/byte_stream.h +0 -166
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -20,63 +20,93 @@
|
|
20
20
|
|
21
21
|
#include <inttypes.h>
|
22
22
|
#include <limits.h>
|
23
|
-
#include <math.h>
|
24
23
|
#include <stdio.h>
|
25
24
|
#include <string.h>
|
26
25
|
|
26
|
+
#include <algorithm>
|
27
|
+
#include <initializer_list>
|
28
|
+
#include <memory>
|
29
|
+
#include <new>
|
30
|
+
#include <string>
|
31
|
+
#include <utility>
|
32
|
+
|
33
|
+
#include "absl/base/attributes.h"
|
34
|
+
#include "absl/status/status.h"
|
35
|
+
#include "absl/strings/cord.h"
|
36
|
+
#include "absl/strings/str_cat.h"
|
27
37
|
#include "absl/strings/str_format.h"
|
38
|
+
#include "absl/strings/string_view.h"
|
39
|
+
#include "absl/types/optional.h"
|
28
40
|
|
41
|
+
#include <grpc/event_engine/event_engine.h>
|
42
|
+
#include <grpc/grpc.h>
|
43
|
+
#include <grpc/impl/connectivity_state.h>
|
29
44
|
#include <grpc/slice_buffer.h>
|
30
45
|
#include <grpc/status.h>
|
31
46
|
#include <grpc/support/alloc.h>
|
47
|
+
#include <grpc/support/atm.h>
|
32
48
|
#include <grpc/support/log.h>
|
33
|
-
#include <grpc/support/
|
49
|
+
#include <grpc/support/time.h>
|
34
50
|
|
35
51
|
#include "src/core/ext/transport/chttp2/transport/context_list.h"
|
52
|
+
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
53
|
+
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
36
54
|
#include "src/core/ext/transport/chttp2/transport/frame_data.h"
|
55
|
+
#include "src/core/ext/transport/chttp2/transport/frame_goaway.h"
|
56
|
+
#include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h"
|
57
|
+
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
|
58
|
+
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
59
|
+
#include "src/core/ext/transport/chttp2/transport/http_trace.h"
|
37
60
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
61
|
+
#include "src/core/ext/transport/chttp2/transport/stream_map.h"
|
38
62
|
#include "src/core/ext/transport/chttp2/transport/varint.h"
|
39
63
|
#include "src/core/lib/channel/channel_args.h"
|
40
64
|
#include "src/core/lib/debug/stats.h"
|
41
|
-
#include "src/core/lib/
|
42
|
-
#include "src/core/lib/gpr/
|
43
|
-
#include "src/core/lib/gprpp/
|
65
|
+
#include "src/core/lib/debug/stats_data.h"
|
66
|
+
#include "src/core/lib/gpr/useful.h"
|
67
|
+
#include "src/core/lib/gprpp/bitset.h"
|
68
|
+
#include "src/core/lib/gprpp/crash.h"
|
69
|
+
#include "src/core/lib/gprpp/debug_location.h"
|
70
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
71
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
72
|
+
#include "src/core/lib/gprpp/time.h"
|
44
73
|
#include "src/core/lib/http/parser.h"
|
45
|
-
#include "src/core/lib/iomgr/
|
46
|
-
#include "src/core/lib/iomgr/
|
74
|
+
#include "src/core/lib/iomgr/combiner.h"
|
75
|
+
#include "src/core/lib/iomgr/error.h"
|
76
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
77
|
+
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
47
78
|
#include "src/core/lib/iomgr/timer.h"
|
48
|
-
#include "src/core/lib/
|
49
|
-
#include "src/core/lib/resource_quota/
|
79
|
+
#include "src/core/lib/promise/poll.h"
|
80
|
+
#include "src/core/lib/resource_quota/arena.h"
|
81
|
+
#include "src/core/lib/resource_quota/memory_quota.h"
|
82
|
+
#include "src/core/lib/resource_quota/resource_quota.h"
|
50
83
|
#include "src/core/lib/resource_quota/trace.h"
|
84
|
+
#include "src/core/lib/slice/slice.h"
|
85
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
51
86
|
#include "src/core/lib/slice/slice_internal.h"
|
52
|
-
#include "src/core/lib/
|
87
|
+
#include "src/core/lib/transport/bdp_estimator.h"
|
88
|
+
#include "src/core/lib/transport/connectivity_state.h"
|
53
89
|
#include "src/core/lib/transport/error_utils.h"
|
54
90
|
#include "src/core/lib/transport/http2_errors.h"
|
91
|
+
#include "src/core/lib/transport/metadata_batch.h"
|
55
92
|
#include "src/core/lib/transport/status_conversion.h"
|
56
|
-
#include "src/core/lib/transport/timeout_encoding.h"
|
57
93
|
#include "src/core/lib/transport/transport.h"
|
58
94
|
#include "src/core/lib/transport/transport_impl.h"
|
59
|
-
#include "src/core/lib/uri/uri_parser.h"
|
60
|
-
|
61
|
-
GPR_GLOBAL_CONFIG_DEFINE_BOOL(
|
62
|
-
grpc_experimental_disable_flow_control, false,
|
63
|
-
"If set, flow control will be effectively disabled. Max out all values and "
|
64
|
-
"assume the remote peer does the same. Thus we can ignore any flow control "
|
65
|
-
"bookkeeping, error checking, and decision making");
|
66
95
|
|
67
96
|
#define DEFAULT_CONNECTION_WINDOW_TARGET (1024 * 1024)
|
68
97
|
#define MAX_WINDOW 0x7fffffffu
|
69
98
|
#define MAX_WRITE_BUFFER_SIZE (64 * 1024 * 1024)
|
70
|
-
#define DEFAULT_MAX_HEADER_LIST_SIZE (
|
99
|
+
#define DEFAULT_MAX_HEADER_LIST_SIZE (16 * 1024)
|
100
|
+
#define DEFAULT_MAX_HEADER_LIST_SIZE_SOFT_LIMIT (8 * 1024)
|
71
101
|
|
72
102
|
#define DEFAULT_CLIENT_KEEPALIVE_TIME_MS INT_MAX
|
73
|
-
#define DEFAULT_CLIENT_KEEPALIVE_TIMEOUT_MS 20000
|
74
|
-
#define DEFAULT_SERVER_KEEPALIVE_TIME_MS 7200000
|
75
|
-
#define DEFAULT_SERVER_KEEPALIVE_TIMEOUT_MS 20000
|
103
|
+
#define DEFAULT_CLIENT_KEEPALIVE_TIMEOUT_MS 20000 // 20 seconds
|
104
|
+
#define DEFAULT_SERVER_KEEPALIVE_TIME_MS 7200000 // 2 hours
|
105
|
+
#define DEFAULT_SERVER_KEEPALIVE_TIMEOUT_MS 20000 // 20 seconds
|
76
106
|
#define DEFAULT_KEEPALIVE_PERMIT_WITHOUT_CALLS false
|
77
107
|
#define KEEPALIVE_TIME_BACKOFF_MULTIPLIER 2
|
78
108
|
|
79
|
-
#define DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS 300000
|
109
|
+
#define DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS 300000 // 5 minutes
|
80
110
|
#define DEFAULT_MAX_PINGS_BETWEEN_DATA 2
|
81
111
|
#define DEFAULT_MAX_PING_STRIKES 2
|
82
112
|
|
@@ -101,7 +131,6 @@ static int g_default_max_pings_without_data = DEFAULT_MAX_PINGS_BETWEEN_DATA;
|
|
101
131
|
static int g_default_max_ping_strikes = DEFAULT_MAX_PING_STRIKES;
|
102
132
|
|
103
133
|
#define MAX_CLIENT_STREAM_ID 0x7fffffffu
|
104
|
-
grpc_core::TraceFlag grpc_http_trace(false, "http");
|
105
134
|
grpc_core::TraceFlag grpc_keepalive_trace(false, "http_keepalive");
|
106
135
|
grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_refcount(false,
|
107
136
|
"chttp2_refcount");
|
@@ -116,8 +145,6 @@ static void read_action(void* t, grpc_error_handle error);
|
|
116
145
|
static void read_action_locked(void* t, grpc_error_handle error);
|
117
146
|
static void continue_read_action_locked(grpc_chttp2_transport* t);
|
118
147
|
|
119
|
-
static void complete_fetch(void* gs, grpc_error_handle error);
|
120
|
-
static void complete_fetch_locked(void* gs, grpc_error_handle error);
|
121
148
|
// Set a transport level setting, and push it to our peer
|
122
149
|
static void queue_setting_update(grpc_chttp2_transport* t,
|
123
150
|
grpc_chttp2_setting_id id, uint32_t value);
|
@@ -148,26 +175,28 @@ static void start_bdp_ping(void* tp, grpc_error_handle error);
|
|
148
175
|
static void finish_bdp_ping(void* tp, grpc_error_handle error);
|
149
176
|
static void start_bdp_ping_locked(void* tp, grpc_error_handle error);
|
150
177
|
static void finish_bdp_ping_locked(void* tp, grpc_error_handle error);
|
151
|
-
static void next_bdp_ping_timer_expired(
|
152
|
-
static void next_bdp_ping_timer_expired_locked(
|
153
|
-
|
178
|
+
static void next_bdp_ping_timer_expired(grpc_chttp2_transport* t);
|
179
|
+
static void next_bdp_ping_timer_expired_locked(
|
180
|
+
void* tp, GRPC_UNUSED grpc_error_handle error);
|
154
181
|
|
155
182
|
static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error);
|
156
183
|
static void send_ping_locked(grpc_chttp2_transport* t,
|
157
184
|
grpc_closure* on_initiate, grpc_closure* on_ack);
|
158
|
-
static void retry_initiate_ping_locked(void* tp,
|
185
|
+
static void retry_initiate_ping_locked(void* tp,
|
186
|
+
GRPC_UNUSED grpc_error_handle error);
|
159
187
|
|
160
188
|
// keepalive-relevant functions
|
161
|
-
static void init_keepalive_ping(
|
162
|
-
static void init_keepalive_ping_locked(void* arg,
|
189
|
+
static void init_keepalive_ping(grpc_chttp2_transport* t);
|
190
|
+
static void init_keepalive_ping_locked(void* arg,
|
191
|
+
GRPC_UNUSED grpc_error_handle error);
|
163
192
|
static void start_keepalive_ping(void* arg, grpc_error_handle error);
|
164
193
|
static void finish_keepalive_ping(void* arg, grpc_error_handle error);
|
165
194
|
static void start_keepalive_ping_locked(void* arg, grpc_error_handle error);
|
166
195
|
static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error);
|
167
|
-
static void keepalive_watchdog_fired(
|
168
|
-
static void keepalive_watchdog_fired_locked(
|
169
|
-
|
170
|
-
static void
|
196
|
+
static void keepalive_watchdog_fired(grpc_chttp2_transport* t);
|
197
|
+
static void keepalive_watchdog_fired_locked(
|
198
|
+
void* arg, GRPC_UNUSED grpc_error_handle error);
|
199
|
+
static void maybe_reset_keepalive_ping_timer_locked(grpc_chttp2_transport* t);
|
171
200
|
|
172
201
|
namespace grpc_core {
|
173
202
|
|
@@ -202,25 +231,25 @@ void TestOnlyGlobalHttp2TransportDisableTransientFailureStateNotification(
|
|
202
231
|
grpc_chttp2_transport::~grpc_chttp2_transport() {
|
203
232
|
size_t i;
|
204
233
|
|
234
|
+
event_engine.reset();
|
235
|
+
|
205
236
|
if (channelz_socket != nullptr) {
|
206
237
|
channelz_socket.reset();
|
207
238
|
}
|
208
239
|
|
209
240
|
grpc_endpoint_destroy(ep);
|
210
241
|
|
211
|
-
|
242
|
+
grpc_slice_buffer_destroy(&qbuf);
|
212
243
|
|
213
|
-
|
244
|
+
grpc_slice_buffer_destroy(&outbuf);
|
214
245
|
|
215
|
-
grpc_error_handle error =
|
216
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed");
|
246
|
+
grpc_error_handle error = GRPC_ERROR_CREATE("Transport destroyed");
|
217
247
|
// ContextList::Execute follows semantics of a callback function and does not
|
218
248
|
// take a ref on error
|
219
249
|
grpc_core::ContextList::Execute(cl, nullptr, error);
|
220
|
-
GRPC_ERROR_UNREF(error);
|
221
250
|
cl = nullptr;
|
222
251
|
|
223
|
-
|
252
|
+
grpc_slice_buffer_destroy(&read_buffer);
|
224
253
|
grpc_chttp2_goaway_parser_destroy(&goaway_parser);
|
225
254
|
|
226
255
|
for (i = 0; i < STREAM_LIST_COUNT; i++) {
|
@@ -228,16 +257,13 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
|
|
228
257
|
GPR_ASSERT(lists[i].tail == nullptr);
|
229
258
|
}
|
230
259
|
|
231
|
-
GRPC_ERROR_UNREF(goaway_error);
|
232
|
-
|
233
260
|
GPR_ASSERT(grpc_chttp2_stream_map_size(&stream_map) == 0);
|
234
261
|
|
235
262
|
grpc_chttp2_stream_map_destroy(&stream_map);
|
236
263
|
|
237
264
|
GRPC_COMBINER_UNREF(combiner, "chttp2_transport");
|
238
265
|
|
239
|
-
cancel_pings(this,
|
240
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed"));
|
266
|
+
cancel_pings(this, GRPC_ERROR_CREATE("Transport destroyed"));
|
241
267
|
|
242
268
|
while (write_cb_pool) {
|
243
269
|
grpc_chttp2_write_cb* next = write_cb_pool->next;
|
@@ -245,9 +271,6 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
|
|
245
271
|
write_cb_pool = next;
|
246
272
|
}
|
247
273
|
|
248
|
-
flow_control.Destroy();
|
249
|
-
|
250
|
-
GRPC_ERROR_UNREF(closed_with_error);
|
251
274
|
gpr_free(ping_acks);
|
252
275
|
if (grpc_core::test_only_destruct_callback != nullptr) {
|
253
276
|
grpc_core::test_only_destruct_callback();
|
@@ -256,155 +279,175 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
|
|
256
279
|
|
257
280
|
static const grpc_transport_vtable* get_vtable(void);
|
258
281
|
|
259
|
-
|
260
|
-
|
261
|
-
const grpc_channel_args* channel_args,
|
282
|
+
static void read_channel_args(grpc_chttp2_transport* t,
|
283
|
+
const grpc_core::ChannelArgs& channel_args,
|
262
284
|
bool is_client) {
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER)) {
|
271
|
-
const grpc_integer_options options = {-1, 0, INT_MAX};
|
272
|
-
const int value =
|
273
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
274
|
-
if (value >= 0) {
|
275
|
-
if ((t->next_stream_id & 1) != (value & 1)) {
|
276
|
-
gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
|
277
|
-
GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
|
278
|
-
is_client ? "client" : "server");
|
279
|
-
} else {
|
280
|
-
t->next_stream_id = static_cast<uint32_t>(value);
|
281
|
-
}
|
282
|
-
}
|
283
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
284
|
-
GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER)) {
|
285
|
-
const grpc_integer_options options = {-1, 0, INT_MAX};
|
286
|
-
const int value =
|
287
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
288
|
-
if (value >= 0) {
|
289
|
-
t->hpack_compressor.SetMaxUsableSize(value);
|
290
|
-
}
|
291
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
292
|
-
GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)) {
|
293
|
-
t->ping_policy.max_pings_without_data = grpc_channel_arg_get_integer(
|
294
|
-
&channel_args->args[i],
|
295
|
-
{g_default_max_pings_without_data, 0, INT_MAX});
|
296
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
297
|
-
GRPC_ARG_HTTP2_MAX_PING_STRIKES)) {
|
298
|
-
t->ping_policy.max_ping_strikes = grpc_channel_arg_get_integer(
|
299
|
-
&channel_args->args[i], {g_default_max_ping_strikes, 0, INT_MAX});
|
300
|
-
} else if (0 ==
|
301
|
-
strcmp(channel_args->args[i].key,
|
302
|
-
GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)) {
|
303
|
-
t->ping_policy.min_recv_ping_interval_without_data =
|
304
|
-
grpc_core::Duration::Milliseconds(grpc_channel_arg_get_integer(
|
305
|
-
&channel_args->args[i],
|
306
|
-
grpc_integer_options{
|
307
|
-
g_default_min_recv_ping_interval_without_data_ms, 0,
|
308
|
-
INT_MAX}));
|
309
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
310
|
-
GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)) {
|
311
|
-
t->write_buffer_size = static_cast<uint32_t>(grpc_channel_arg_get_integer(
|
312
|
-
&channel_args->args[i], {0, 0, MAX_WRITE_BUFFER_SIZE}));
|
313
|
-
} else if (0 ==
|
314
|
-
strcmp(channel_args->args[i].key, GRPC_ARG_HTTP2_BDP_PROBE)) {
|
315
|
-
enable_bdp = grpc_channel_arg_get_bool(&channel_args->args[i], true);
|
316
|
-
} else if (0 ==
|
317
|
-
strcmp(channel_args->args[i].key, GRPC_ARG_KEEPALIVE_TIME_MS)) {
|
318
|
-
const int value = grpc_channel_arg_get_integer(
|
319
|
-
&channel_args->args[i],
|
320
|
-
grpc_integer_options{t->is_client
|
321
|
-
? g_default_client_keepalive_time_ms
|
322
|
-
: g_default_server_keepalive_time_ms,
|
323
|
-
1, INT_MAX});
|
324
|
-
t->keepalive_time = value == INT_MAX
|
325
|
-
? grpc_core::Duration::Infinity()
|
326
|
-
: grpc_core::Duration::Milliseconds(value);
|
327
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
328
|
-
GRPC_ARG_KEEPALIVE_TIMEOUT_MS)) {
|
329
|
-
const int value = grpc_channel_arg_get_integer(
|
330
|
-
&channel_args->args[i],
|
331
|
-
grpc_integer_options{t->is_client
|
332
|
-
? g_default_client_keepalive_timeout_ms
|
333
|
-
: g_default_server_keepalive_timeout_ms,
|
334
|
-
0, INT_MAX});
|
335
|
-
t->keepalive_timeout = value == INT_MAX
|
336
|
-
? grpc_core::Duration::Infinity()
|
337
|
-
: grpc_core::Duration::Milliseconds(value);
|
338
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
339
|
-
GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)) {
|
340
|
-
t->keepalive_permit_without_calls = static_cast<uint32_t>(
|
341
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], {0, 0, 1}));
|
342
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
343
|
-
GRPC_ARG_OPTIMIZATION_TARGET)) {
|
344
|
-
gpr_log(GPR_INFO, "GRPC_ARG_OPTIMIZATION_TARGET is deprecated");
|
345
|
-
} else if (0 ==
|
346
|
-
strcmp(channel_args->args[i].key, GRPC_ARG_ENABLE_CHANNELZ)) {
|
347
|
-
channelz_enabled = grpc_channel_arg_get_bool(
|
348
|
-
&channel_args->args[i], GRPC_ENABLE_CHANNELZ_DEFAULT);
|
285
|
+
const int initial_sequence_number =
|
286
|
+
channel_args.GetInt(GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER).value_or(-1);
|
287
|
+
if (initial_sequence_number > 0) {
|
288
|
+
if ((t->next_stream_id & 1) != (initial_sequence_number & 1)) {
|
289
|
+
gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
|
290
|
+
GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
|
291
|
+
is_client ? "client" : "server");
|
349
292
|
} else {
|
350
|
-
|
351
|
-
const char* channel_arg_name;
|
352
|
-
grpc_chttp2_setting_id setting_id;
|
353
|
-
grpc_integer_options integer_options;
|
354
|
-
bool availability[2] /* server, client */;
|
355
|
-
} settings_map[] = {{GRPC_ARG_MAX_CONCURRENT_STREAMS,
|
356
|
-
GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
|
357
|
-
{-1, 0, INT32_MAX},
|
358
|
-
{true, false}},
|
359
|
-
{GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER,
|
360
|
-
GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
|
361
|
-
{-1, 0, INT32_MAX},
|
362
|
-
{true, true}},
|
363
|
-
{GRPC_ARG_MAX_METADATA_SIZE,
|
364
|
-
GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
|
365
|
-
{-1, 0, INT32_MAX},
|
366
|
-
{true, true}},
|
367
|
-
{GRPC_ARG_HTTP2_MAX_FRAME_SIZE,
|
368
|
-
GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
|
369
|
-
{-1, 16384, 16777215},
|
370
|
-
{true, true}},
|
371
|
-
{GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY,
|
372
|
-
GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA,
|
373
|
-
{1, 0, 1},
|
374
|
-
{true, true}},
|
375
|
-
{GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES,
|
376
|
-
GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
|
377
|
-
{-1, 5, INT32_MAX},
|
378
|
-
{true, true}}};
|
379
|
-
for (j = 0; j < static_cast<int> GPR_ARRAY_SIZE(settings_map); j++) {
|
380
|
-
if (0 == strcmp(channel_args->args[i].key,
|
381
|
-
settings_map[j].channel_arg_name)) {
|
382
|
-
if (!settings_map[j].availability[is_client]) {
|
383
|
-
gpr_log(GPR_DEBUG, "%s is not available on %s",
|
384
|
-
settings_map[j].channel_arg_name,
|
385
|
-
is_client ? "clients" : "servers");
|
386
|
-
} else {
|
387
|
-
int value = grpc_channel_arg_get_integer(
|
388
|
-
&channel_args->args[i], settings_map[j].integer_options);
|
389
|
-
if (value >= 0) {
|
390
|
-
queue_setting_update(t, settings_map[j].setting_id,
|
391
|
-
static_cast<uint32_t>(value));
|
392
|
-
}
|
393
|
-
}
|
394
|
-
break;
|
395
|
-
}
|
396
|
-
}
|
293
|
+
t->next_stream_id = static_cast<uint32_t>(initial_sequence_number);
|
397
294
|
}
|
398
295
|
}
|
399
|
-
|
296
|
+
|
297
|
+
const int max_hpack_table_size =
|
298
|
+
channel_args.GetInt(GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER).value_or(-1);
|
299
|
+
if (max_hpack_table_size >= 0) {
|
300
|
+
t->hpack_compressor.SetMaxUsableSize(max_hpack_table_size);
|
301
|
+
}
|
302
|
+
|
303
|
+
t->ping_policy.max_pings_without_data =
|
304
|
+
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)
|
305
|
+
.value_or(g_default_max_pings_without_data));
|
306
|
+
t->ping_policy.max_ping_strikes =
|
307
|
+
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PING_STRIKES)
|
308
|
+
.value_or(g_default_max_ping_strikes));
|
309
|
+
t->ping_policy.min_recv_ping_interval_without_data =
|
310
|
+
std::max(grpc_core::Duration::Zero(),
|
311
|
+
channel_args
|
312
|
+
.GetDurationFromIntMillis(
|
313
|
+
GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)
|
314
|
+
.value_or(grpc_core::Duration::Milliseconds(
|
315
|
+
g_default_min_recv_ping_interval_without_data_ms)));
|
316
|
+
t->write_buffer_size =
|
317
|
+
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)
|
318
|
+
.value_or(grpc_core::chttp2::kDefaultWindow));
|
319
|
+
t->keepalive_time =
|
320
|
+
std::max(grpc_core::Duration::Milliseconds(1),
|
321
|
+
channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIME_MS)
|
322
|
+
.value_or(grpc_core::Duration::Milliseconds(
|
323
|
+
t->is_client ? g_default_client_keepalive_time_ms
|
324
|
+
: g_default_server_keepalive_time_ms)));
|
325
|
+
t->keepalive_timeout = std::max(
|
326
|
+
grpc_core::Duration::Zero(),
|
327
|
+
channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIMEOUT_MS)
|
328
|
+
.value_or(grpc_core::Duration::Milliseconds(
|
329
|
+
t->is_client ? g_default_client_keepalive_timeout_ms
|
330
|
+
: g_default_server_keepalive_timeout_ms)));
|
331
|
+
t->keepalive_permit_without_calls =
|
332
|
+
channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
|
333
|
+
.value_or(false);
|
334
|
+
// Only send the prefered rx frame size http2 setting if we are instructed
|
335
|
+
// to auto size the buffers allocated at tcp level and we also can adjust
|
336
|
+
// sending frame size.
|
337
|
+
t->enable_preferred_rx_crypto_frame_advertisement =
|
338
|
+
channel_args
|
339
|
+
.GetBool(GRPC_ARG_EXPERIMENTAL_HTTP2_PREFERRED_CRYPTO_FRAME_SIZE)
|
340
|
+
.value_or(false);
|
341
|
+
|
342
|
+
if (channel_args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
|
343
|
+
.value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
|
400
344
|
t->channelz_socket =
|
401
345
|
grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>(
|
402
346
|
std::string(grpc_endpoint_get_local_address(t->ep)), t->peer_string,
|
403
347
|
absl::StrFormat("%s %s", get_vtable()->name, t->peer_string),
|
404
|
-
|
405
|
-
|
348
|
+
channel_args
|
349
|
+
.GetObjectRef<grpc_core::channelz::SocketNode::Security>());
|
350
|
+
}
|
351
|
+
|
352
|
+
const int soft_limit =
|
353
|
+
channel_args.GetInt(GRPC_ARG_MAX_METADATA_SIZE).value_or(-1);
|
354
|
+
if (soft_limit < 0) {
|
355
|
+
// Set soft limit to 0.8 * hard limit if this is larger than
|
356
|
+
// `DEFAULT_MAX_HEADER_LIST_SIZE_SOFT_LIMIT` and
|
357
|
+
// `GRPC_ARG_MAX_METADATA_SIZE` is not set.
|
358
|
+
t->max_header_list_size_soft_limit = std::max(
|
359
|
+
DEFAULT_MAX_HEADER_LIST_SIZE_SOFT_LIMIT,
|
360
|
+
static_cast<int>(
|
361
|
+
0.8 * channel_args.GetInt(GRPC_ARG_ABSOLUTE_MAX_METADATA_SIZE)
|
362
|
+
.value_or(-1)));
|
363
|
+
} else {
|
364
|
+
t->max_header_list_size_soft_limit = soft_limit;
|
365
|
+
}
|
366
|
+
|
367
|
+
static const struct {
|
368
|
+
absl::string_view channel_arg_name;
|
369
|
+
grpc_chttp2_setting_id setting_id;
|
370
|
+
int default_value;
|
371
|
+
int min;
|
372
|
+
int max;
|
373
|
+
bool availability[2] /* server, client */;
|
374
|
+
} settings_map[] = {{GRPC_ARG_MAX_CONCURRENT_STREAMS,
|
375
|
+
GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
|
376
|
+
-1,
|
377
|
+
0,
|
378
|
+
INT32_MAX,
|
379
|
+
{true, false}},
|
380
|
+
{GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER,
|
381
|
+
GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
|
382
|
+
-1,
|
383
|
+
0,
|
384
|
+
INT32_MAX,
|
385
|
+
{true, true}},
|
386
|
+
{GRPC_ARG_ABSOLUTE_MAX_METADATA_SIZE,
|
387
|
+
GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
|
388
|
+
-1,
|
389
|
+
0,
|
390
|
+
INT32_MAX,
|
391
|
+
{true, true}},
|
392
|
+
{GRPC_ARG_HTTP2_MAX_FRAME_SIZE,
|
393
|
+
GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
|
394
|
+
-1,
|
395
|
+
16384,
|
396
|
+
16777215,
|
397
|
+
{true, true}},
|
398
|
+
{GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY,
|
399
|
+
GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA,
|
400
|
+
1,
|
401
|
+
0,
|
402
|
+
1,
|
403
|
+
{true, true}},
|
404
|
+
{GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES,
|
405
|
+
GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
|
406
|
+
-1,
|
407
|
+
5,
|
408
|
+
INT32_MAX,
|
409
|
+
{true, true}}};
|
410
|
+
|
411
|
+
for (size_t i = 0; i < GPR_ARRAY_SIZE(settings_map); i++) {
|
412
|
+
const auto& setting = settings_map[i];
|
413
|
+
if (setting.availability[is_client]) {
|
414
|
+
const int value = channel_args.GetInt(setting.channel_arg_name)
|
415
|
+
.value_or(setting.default_value);
|
416
|
+
if (value >= 0) {
|
417
|
+
queue_setting_update(t, setting.setting_id,
|
418
|
+
grpc_core::Clamp(value, setting.min, setting.max));
|
419
|
+
} else if (setting.setting_id ==
|
420
|
+
GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE) {
|
421
|
+
// Set value to 1.25 * soft limit if this is larger than
|
422
|
+
// `DEFAULT_MAX_HEADER_LIST_SIZE` and
|
423
|
+
// `GRPC_ARG_ABSOLUTE_MAX_METADATA_SIZE` is not set.
|
424
|
+
const int soft_limit = channel_args.GetInt(GRPC_ARG_MAX_METADATA_SIZE)
|
425
|
+
.value_or(setting.default_value);
|
426
|
+
const int value = (soft_limit < (INT_MAX / 1.25))
|
427
|
+
? static_cast<int>(soft_limit * 1.25)
|
428
|
+
: soft_limit;
|
429
|
+
if (value > DEFAULT_MAX_HEADER_LIST_SIZE) {
|
430
|
+
queue_setting_update(
|
431
|
+
t, setting.setting_id,
|
432
|
+
grpc_core::Clamp(value, setting.min, setting.max));
|
433
|
+
}
|
434
|
+
}
|
435
|
+
} else if (channel_args.Contains(setting.channel_arg_name)) {
|
436
|
+
gpr_log(GPR_DEBUG, "%s is not available on %s",
|
437
|
+
std::string(setting.channel_arg_name).c_str(),
|
438
|
+
is_client ? "clients" : "servers");
|
439
|
+
}
|
440
|
+
}
|
441
|
+
|
442
|
+
if (t->enable_preferred_rx_crypto_frame_advertisement) {
|
443
|
+
const grpc_chttp2_setting_parameters* sp =
|
444
|
+
&grpc_chttp2_settings_parameters
|
445
|
+
[GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE];
|
446
|
+
queue_setting_update(
|
447
|
+
t, GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE,
|
448
|
+
grpc_core::Clamp(INT_MAX, static_cast<int>(sp->min_value),
|
449
|
+
static_cast<int>(sp->max_value)));
|
406
450
|
}
|
407
|
-
return enable_bdp;
|
408
451
|
}
|
409
452
|
|
410
453
|
static void init_transport_keepalive_settings(grpc_chttp2_transport* t) {
|
@@ -441,30 +484,35 @@ static void configure_transport_ping_policy(grpc_chttp2_transport* t) {
|
|
441
484
|
g_default_min_recv_ping_interval_without_data_ms);
|
442
485
|
}
|
443
486
|
|
444
|
-
static void
|
487
|
+
static void init_keepalive_pings_if_enabled_locked(
|
488
|
+
void* arg, GRPC_UNUSED grpc_error_handle error) {
|
489
|
+
GPR_DEBUG_ASSERT(error.ok());
|
490
|
+
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
445
491
|
if (t->keepalive_time != grpc_core::Duration::Infinity()) {
|
446
492
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_WAITING;
|
447
493
|
GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
494
|
+
t->keepalive_ping_timer_handle =
|
495
|
+
t->event_engine->RunAfter(t->keepalive_time, [t] {
|
496
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
497
|
+
grpc_core::ExecCtx exec_ctx;
|
498
|
+
init_keepalive_ping(t);
|
499
|
+
});
|
453
500
|
} else {
|
454
501
|
// Use GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED to indicate there are no
|
455
|
-
//
|
502
|
+
// inflight keepalive timers
|
456
503
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED;
|
457
504
|
}
|
458
505
|
}
|
459
506
|
|
460
507
|
grpc_chttp2_transport::grpc_chttp2_transport(
|
461
|
-
const
|
508
|
+
const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
|
509
|
+
bool is_client)
|
462
510
|
: refs(1, GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_refcount)
|
463
511
|
? "chttp2_refcount"
|
464
512
|
: nullptr),
|
465
513
|
ep(ep),
|
466
514
|
peer_string(grpc_endpoint_get_peer(ep)),
|
467
|
-
memory_owner(grpc_core::
|
515
|
+
memory_owner(channel_args.GetObject<grpc_core::ResourceQuota>()
|
468
516
|
->memory_quota()
|
469
517
|
->CreateMemoryOwner(absl::StrCat(
|
470
518
|
grpc_endpoint_get_peer(ep), ":client_transport"))),
|
@@ -475,7 +523,14 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
475
523
|
GRPC_CHANNEL_READY),
|
476
524
|
is_client(is_client),
|
477
525
|
next_stream_id(is_client ? 1 : 2),
|
478
|
-
|
526
|
+
flow_control(
|
527
|
+
peer_string.c_str(),
|
528
|
+
channel_args.GetBool(GRPC_ARG_HTTP2_BDP_PROBE).value_or(true),
|
529
|
+
&memory_owner),
|
530
|
+
deframe_state(is_client ? GRPC_DTS_FH_0 : GRPC_DTS_CLIENT_PREFIX_0),
|
531
|
+
event_engine(
|
532
|
+
channel_args
|
533
|
+
.GetObjectRef<grpc_event_engine::experimental::EventEngine>()) {
|
479
534
|
GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
|
480
535
|
GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
|
481
536
|
base.vtable = get_vtable();
|
@@ -516,34 +571,24 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
516
571
|
configure_transport_ping_policy(this);
|
517
572
|
init_transport_keepalive_settings(this);
|
518
573
|
|
519
|
-
|
520
|
-
if (channel_args) {
|
521
|
-
enable_bdp = read_channel_args(this, channel_args, is_client);
|
522
|
-
}
|
523
|
-
|
524
|
-
static const bool kEnableFlowControl =
|
525
|
-
!GPR_GLOBAL_CONFIG_GET(grpc_experimental_disable_flow_control);
|
526
|
-
if (kEnableFlowControl) {
|
527
|
-
flow_control.Init<grpc_core::chttp2::TransportFlowControl>(this,
|
528
|
-
enable_bdp);
|
529
|
-
} else {
|
530
|
-
flow_control.Init<grpc_core::chttp2::TransportFlowControlDisabled>(this);
|
531
|
-
enable_bdp = false;
|
532
|
-
}
|
574
|
+
read_channel_args(this, channel_args, is_client);
|
533
575
|
|
534
576
|
// No pings allowed before receiving a header or data frame.
|
535
577
|
ping_state.pings_before_data_required = 0;
|
536
|
-
ping_state.is_delayed_ping_timer_set = false;
|
537
578
|
ping_state.last_ping_sent_time = grpc_core::Timestamp::InfPast();
|
538
579
|
|
539
580
|
ping_recv_state.last_ping_recv_time = grpc_core::Timestamp::InfPast();
|
540
581
|
ping_recv_state.ping_strikes = 0;
|
541
582
|
|
542
|
-
|
583
|
+
grpc_core::ExecCtx exec_ctx;
|
584
|
+
combiner->Run(
|
585
|
+
GRPC_CLOSURE_INIT(&init_keepalive_ping_locked,
|
586
|
+
init_keepalive_pings_if_enabled_locked, this, nullptr),
|
587
|
+
absl::OkStatus());
|
543
588
|
|
544
|
-
if (
|
589
|
+
if (flow_control.bdp_probe()) {
|
545
590
|
bdp_ping_blocked = true;
|
546
|
-
grpc_chttp2_act_on_flowctl_action(flow_control
|
591
|
+
grpc_chttp2_act_on_flowctl_action(flow_control.PeriodicUpdate(), this,
|
547
592
|
nullptr);
|
548
593
|
}
|
549
594
|
|
@@ -558,9 +603,9 @@ static void destroy_transport_locked(void* tp, grpc_error_handle /*error*/) {
|
|
558
603
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
559
604
|
t->destroying = 1;
|
560
605
|
close_transport_locked(
|
561
|
-
t, grpc_error_set_int(
|
562
|
-
|
563
|
-
|
606
|
+
t, grpc_error_set_int(GRPC_ERROR_CREATE("Transport destroyed"),
|
607
|
+
grpc_core::StatusIntProperty::kOccurredDuringWrite,
|
608
|
+
t->write_state));
|
564
609
|
t->memory_owner.Reset();
|
565
610
|
// Must be the last line.
|
566
611
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "destroy");
|
@@ -569,45 +614,66 @@ static void destroy_transport_locked(void* tp, grpc_error_handle /*error*/) {
|
|
569
614
|
static void destroy_transport(grpc_transport* gt) {
|
570
615
|
grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
|
571
616
|
t->combiner->Run(GRPC_CLOSURE_CREATE(destroy_transport_locked, t, nullptr),
|
572
|
-
|
617
|
+
absl::OkStatus());
|
573
618
|
}
|
574
619
|
|
575
620
|
static void close_transport_locked(grpc_chttp2_transport* t,
|
576
621
|
grpc_error_handle error) {
|
577
|
-
end_all_the_calls(t,
|
578
|
-
cancel_pings(t,
|
579
|
-
if (t->closed_with_error
|
622
|
+
end_all_the_calls(t, error);
|
623
|
+
cancel_pings(t, error);
|
624
|
+
if (t->closed_with_error.ok()) {
|
580
625
|
if (!grpc_error_has_clear_grpc_status(error)) {
|
581
|
-
error =
|
582
|
-
|
626
|
+
error =
|
627
|
+
grpc_error_set_int(error, grpc_core::StatusIntProperty::kRpcStatus,
|
628
|
+
GRPC_STATUS_UNAVAILABLE);
|
583
629
|
}
|
584
630
|
if (t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE) {
|
585
|
-
if (t->close_transport_on_writes_finished
|
631
|
+
if (t->close_transport_on_writes_finished.ok()) {
|
586
632
|
t->close_transport_on_writes_finished =
|
587
|
-
|
588
|
-
"Delayed close due to in-progress write");
|
633
|
+
GRPC_ERROR_CREATE("Delayed close due to in-progress write");
|
589
634
|
}
|
590
635
|
t->close_transport_on_writes_finished =
|
591
636
|
grpc_error_add_child(t->close_transport_on_writes_finished, error);
|
592
637
|
return;
|
593
638
|
}
|
594
|
-
GPR_ASSERT(error
|
595
|
-
t->closed_with_error =
|
639
|
+
GPR_ASSERT(!error.ok());
|
640
|
+
t->closed_with_error = error;
|
596
641
|
connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, absl::Status(),
|
597
642
|
"close_transport");
|
598
|
-
if (t->ping_state.
|
599
|
-
|
643
|
+
if (t->ping_state.delayed_ping_timer_handle.has_value()) {
|
644
|
+
if (t->event_engine->Cancel(*t->ping_state.delayed_ping_timer_handle)) {
|
645
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "retry_initiate_ping_locked");
|
646
|
+
t->ping_state.delayed_ping_timer_handle.reset();
|
647
|
+
}
|
600
648
|
}
|
601
|
-
if (t->
|
602
|
-
|
649
|
+
if (t->next_bdp_ping_timer_handle.has_value()) {
|
650
|
+
if (t->event_engine->Cancel(*t->next_bdp_ping_timer_handle)) {
|
651
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
652
|
+
t->next_bdp_ping_timer_handle.reset();
|
653
|
+
}
|
603
654
|
}
|
604
655
|
switch (t->keepalive_state) {
|
605
656
|
case GRPC_CHTTP2_KEEPALIVE_STATE_WAITING:
|
606
|
-
|
657
|
+
if (t->keepalive_ping_timer_handle.has_value()) {
|
658
|
+
if (t->event_engine->Cancel(*t->keepalive_ping_timer_handle)) {
|
659
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
|
660
|
+
t->keepalive_ping_timer_handle.reset();
|
661
|
+
}
|
662
|
+
}
|
607
663
|
break;
|
608
664
|
case GRPC_CHTTP2_KEEPALIVE_STATE_PINGING:
|
609
|
-
|
610
|
-
|
665
|
+
if (t->keepalive_ping_timer_handle.has_value()) {
|
666
|
+
if (t->event_engine->Cancel(*t->keepalive_ping_timer_handle)) {
|
667
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
|
668
|
+
t->keepalive_ping_timer_handle.reset();
|
669
|
+
}
|
670
|
+
}
|
671
|
+
if (t->keepalive_watchdog_timer_handle.has_value()) {
|
672
|
+
if (t->event_engine->Cancel(*t->keepalive_watchdog_timer_handle)) {
|
673
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
|
674
|
+
t->keepalive_watchdog_timer_handle.reset();
|
675
|
+
}
|
676
|
+
}
|
611
677
|
break;
|
612
678
|
case GRPC_CHTTP2_KEEPALIVE_STATE_DYING:
|
613
679
|
case GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED:
|
@@ -621,19 +687,17 @@ static void close_transport_locked(grpc_chttp2_transport* t,
|
|
621
687
|
GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:close");
|
622
688
|
}
|
623
689
|
GPR_ASSERT(t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE);
|
624
|
-
grpc_endpoint_shutdown(t->ep,
|
690
|
+
grpc_endpoint_shutdown(t->ep, error);
|
625
691
|
}
|
626
692
|
if (t->notify_on_receive_settings != nullptr) {
|
627
693
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_receive_settings,
|
628
|
-
|
694
|
+
error);
|
629
695
|
t->notify_on_receive_settings = nullptr;
|
630
696
|
}
|
631
697
|
if (t->notify_on_close != nullptr) {
|
632
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_close,
|
633
|
-
GRPC_ERROR_REF(error));
|
698
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_close, error);
|
634
699
|
t->notify_on_close = nullptr;
|
635
700
|
}
|
636
|
-
GRPC_ERROR_UNREF(error);
|
637
701
|
}
|
638
702
|
|
639
703
|
#ifndef NDEBUG
|
@@ -668,29 +732,27 @@ grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
|
|
668
732
|
refcount(refcount),
|
669
733
|
reffer(this),
|
670
734
|
initial_metadata_buffer(arena),
|
671
|
-
trailing_metadata_buffer(arena)
|
735
|
+
trailing_metadata_buffer(arena),
|
736
|
+
flow_control(&t->flow_control) {
|
672
737
|
if (server_data) {
|
673
738
|
id = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(server_data));
|
739
|
+
if (grpc_http_trace.enabled()) {
|
740
|
+
gpr_log(GPR_DEBUG, "HTTP:%p/%p creating accept stream %d [from %p]", t,
|
741
|
+
this, id, server_data);
|
742
|
+
}
|
674
743
|
*t->accepting_stream = this;
|
675
744
|
grpc_chttp2_stream_map_add(&t->stream_map, id, this);
|
676
745
|
post_destructive_reclaimer(t);
|
677
746
|
}
|
678
|
-
if (t->flow_control->flow_control_enabled()) {
|
679
|
-
flow_control.Init<grpc_core::chttp2::StreamFlowControl>(
|
680
|
-
static_cast<grpc_core::chttp2::TransportFlowControl*>(
|
681
|
-
t->flow_control.get()),
|
682
|
-
this);
|
683
|
-
} else {
|
684
|
-
flow_control.Init<grpc_core::chttp2::StreamFlowControlDisabled>();
|
685
|
-
}
|
686
747
|
|
687
748
|
grpc_slice_buffer_init(&frame_storage);
|
688
|
-
grpc_slice_buffer_init(&unprocessed_incoming_frames_buffer);
|
689
749
|
grpc_slice_buffer_init(&flow_controlled_buffer);
|
690
|
-
GRPC_CLOSURE_INIT(&reset_byte_stream, ::reset_byte_stream, this, nullptr);
|
691
750
|
}
|
692
751
|
|
693
752
|
grpc_chttp2_stream::~grpc_chttp2_stream() {
|
753
|
+
grpc_chttp2_list_remove_stalled_by_stream(t, this);
|
754
|
+
grpc_chttp2_list_remove_stalled_by_transport(t, this);
|
755
|
+
|
694
756
|
if (t->channelz_socket != nullptr) {
|
695
757
|
if ((t->is_client && eos_received) || (!t->is_client && eos_sent)) {
|
696
758
|
t->channelz_socket->RecordStreamSucceeded();
|
@@ -704,57 +766,48 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
|
|
704
766
|
GPR_ASSERT(grpc_chttp2_stream_map_find(&t->stream_map, id) == nullptr);
|
705
767
|
}
|
706
768
|
|
707
|
-
|
708
|
-
grpc_slice_buffer_destroy_internal(&frame_storage);
|
769
|
+
grpc_slice_buffer_destroy(&frame_storage);
|
709
770
|
|
710
771
|
for (int i = 0; i < STREAM_LIST_COUNT; i++) {
|
711
|
-
if (GPR_UNLIKELY(included
|
712
|
-
|
713
|
-
|
714
|
-
|
772
|
+
if (GPR_UNLIKELY(included.is_set(i))) {
|
773
|
+
grpc_core::Crash(absl::StrFormat("%s stream %d still included in list %d",
|
774
|
+
t->is_client ? "client" : "server", id,
|
775
|
+
i));
|
715
776
|
}
|
716
777
|
}
|
717
778
|
|
718
779
|
GPR_ASSERT(send_initial_metadata_finished == nullptr);
|
719
|
-
GPR_ASSERT(fetching_send_message == nullptr);
|
720
780
|
GPR_ASSERT(send_trailing_metadata_finished == nullptr);
|
721
781
|
GPR_ASSERT(recv_initial_metadata_ready == nullptr);
|
722
782
|
GPR_ASSERT(recv_message_ready == nullptr);
|
723
783
|
GPR_ASSERT(recv_trailing_metadata_finished == nullptr);
|
724
|
-
|
725
|
-
GRPC_ERROR_UNREF(read_closed_error);
|
726
|
-
GRPC_ERROR_UNREF(write_closed_error);
|
727
|
-
GRPC_ERROR_UNREF(byte_stream_error);
|
728
|
-
flow_control.Destroy();
|
784
|
+
grpc_slice_buffer_destroy(&flow_controlled_buffer);
|
729
785
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "stream");
|
730
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, destroy_stream_arg,
|
786
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, destroy_stream_arg, absl::OkStatus());
|
731
787
|
}
|
732
788
|
|
733
789
|
static int init_stream(grpc_transport* gt, grpc_stream* gs,
|
734
790
|
grpc_stream_refcount* refcount, const void* server_data,
|
735
791
|
grpc_core::Arena* arena) {
|
736
|
-
GPR_TIMER_SCOPE("init_stream", 0);
|
737
792
|
grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
|
738
793
|
new (gs) grpc_chttp2_stream(t, refcount, server_data, arena);
|
739
794
|
return 0;
|
740
795
|
}
|
741
796
|
|
742
797
|
static void destroy_stream_locked(void* sp, grpc_error_handle /*error*/) {
|
743
|
-
GPR_TIMER_SCOPE("destroy_stream", 0);
|
744
798
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(sp);
|
745
799
|
s->~grpc_chttp2_stream();
|
746
800
|
}
|
747
801
|
|
748
802
|
static void destroy_stream(grpc_transport* gt, grpc_stream* gs,
|
749
803
|
grpc_closure* then_schedule_closure) {
|
750
|
-
GPR_TIMER_SCOPE("destroy_stream", 0);
|
751
804
|
grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
|
752
805
|
grpc_chttp2_stream* s = reinterpret_cast<grpc_chttp2_stream*>(gs);
|
753
806
|
|
754
807
|
s->destroy_stream_arg = then_schedule_closure;
|
755
808
|
t->combiner->Run(
|
756
809
|
GRPC_CLOSURE_INIT(&s->destroy_stream, destroy_stream_locked, s, nullptr),
|
757
|
-
|
810
|
+
absl::OkStatus());
|
758
811
|
}
|
759
812
|
|
760
813
|
grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream(grpc_chttp2_transport* t,
|
@@ -802,93 +855,18 @@ static void set_write_state(grpc_chttp2_transport* t,
|
|
802
855
|
// from peer while we had some pending writes)
|
803
856
|
if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
|
804
857
|
grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &t->run_after_write);
|
805
|
-
if (t->close_transport_on_writes_finished
|
858
|
+
if (!t->close_transport_on_writes_finished.ok()) {
|
806
859
|
grpc_error_handle err = t->close_transport_on_writes_finished;
|
807
|
-
t->close_transport_on_writes_finished =
|
860
|
+
t->close_transport_on_writes_finished = absl::OkStatus();
|
808
861
|
close_transport_locked(t, err);
|
809
862
|
}
|
810
863
|
}
|
811
864
|
}
|
812
865
|
|
813
|
-
static void inc_initiate_write_reason(
|
814
|
-
grpc_chttp2_initiate_write_reason reason) {
|
815
|
-
switch (reason) {
|
816
|
-
case GRPC_CHTTP2_INITIATE_WRITE_INITIAL_WRITE:
|
817
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_INITIAL_WRITE();
|
818
|
-
break;
|
819
|
-
case GRPC_CHTTP2_INITIATE_WRITE_START_NEW_STREAM:
|
820
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_START_NEW_STREAM();
|
821
|
-
break;
|
822
|
-
case GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE:
|
823
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_MESSAGE();
|
824
|
-
break;
|
825
|
-
case GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA:
|
826
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_INITIAL_METADATA();
|
827
|
-
break;
|
828
|
-
case GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA:
|
829
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_TRAILING_METADATA();
|
830
|
-
break;
|
831
|
-
case GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING:
|
832
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_RETRY_SEND_PING();
|
833
|
-
break;
|
834
|
-
case GRPC_CHTTP2_INITIATE_WRITE_CONTINUE_PINGS:
|
835
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_CONTINUE_PINGS();
|
836
|
-
break;
|
837
|
-
case GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT:
|
838
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_GOAWAY_SENT();
|
839
|
-
break;
|
840
|
-
case GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM:
|
841
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_RST_STREAM();
|
842
|
-
break;
|
843
|
-
case GRPC_CHTTP2_INITIATE_WRITE_CLOSE_FROM_API:
|
844
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_CLOSE_FROM_API();
|
845
|
-
break;
|
846
|
-
case GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL:
|
847
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_STREAM_FLOW_CONTROL();
|
848
|
-
break;
|
849
|
-
case GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL:
|
850
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_TRANSPORT_FLOW_CONTROL();
|
851
|
-
break;
|
852
|
-
case GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS:
|
853
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_SETTINGS();
|
854
|
-
break;
|
855
|
-
case GRPC_CHTTP2_INITIATE_WRITE_SETTINGS_ACK:
|
856
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SETTINGS_ACK();
|
857
|
-
break;
|
858
|
-
case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_SETTING:
|
859
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FLOW_CONTROL_UNSTALLED_BY_SETTING();
|
860
|
-
break;
|
861
|
-
case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_UPDATE:
|
862
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FLOW_CONTROL_UNSTALLED_BY_UPDATE();
|
863
|
-
break;
|
864
|
-
case GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING:
|
865
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_APPLICATION_PING();
|
866
|
-
break;
|
867
|
-
case GRPC_CHTTP2_INITIATE_WRITE_BDP_PING:
|
868
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_BDP_ESTIMATOR_PING();
|
869
|
-
break;
|
870
|
-
case GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING:
|
871
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_KEEPALIVE_PING();
|
872
|
-
break;
|
873
|
-
case GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL_UNSTALLED:
|
874
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_TRANSPORT_FLOW_CONTROL_UNSTALLED();
|
875
|
-
break;
|
876
|
-
case GRPC_CHTTP2_INITIATE_WRITE_PING_RESPONSE:
|
877
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_PING_RESPONSE();
|
878
|
-
break;
|
879
|
-
case GRPC_CHTTP2_INITIATE_WRITE_FORCE_RST_STREAM:
|
880
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FORCE_RST_STREAM();
|
881
|
-
break;
|
882
|
-
}
|
883
|
-
}
|
884
|
-
|
885
866
|
void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
|
886
867
|
grpc_chttp2_initiate_write_reason reason) {
|
887
|
-
GPR_TIMER_SCOPE("grpc_chttp2_initiate_write", 0);
|
888
|
-
|
889
868
|
switch (t->write_state) {
|
890
869
|
case GRPC_CHTTP2_WRITE_STATE_IDLE:
|
891
|
-
inc_initiate_write_reason(reason);
|
892
870
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING,
|
893
871
|
grpc_chttp2_initiate_write_reason_string(reason));
|
894
872
|
GRPC_CHTTP2_REF_TRANSPORT(t, "writing");
|
@@ -911,7 +889,7 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
|
|
911
889
|
t->combiner->FinallyRun(
|
912
890
|
GRPC_CLOSURE_INIT(&t->write_action_begin_locked,
|
913
891
|
write_action_begin_locked, t, nullptr),
|
914
|
-
|
892
|
+
absl::OkStatus());
|
915
893
|
break;
|
916
894
|
case GRPC_CHTTP2_WRITE_STATE_WRITING:
|
917
895
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE,
|
@@ -924,8 +902,7 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
|
|
924
902
|
|
925
903
|
void grpc_chttp2_mark_stream_writable(grpc_chttp2_transport* t,
|
926
904
|
grpc_chttp2_stream* s) {
|
927
|
-
if (t->closed_with_error
|
928
|
-
grpc_chttp2_list_add_writable_stream(t, s)) {
|
905
|
+
if (t->closed_with_error.ok() && grpc_chttp2_list_add_writable_stream(t, s)) {
|
929
906
|
GRPC_CHTTP2_STREAM_REF(s, "chttp2_writing:become");
|
930
907
|
}
|
931
908
|
}
|
@@ -940,24 +917,20 @@ static const char* begin_writing_desc(bool partial) {
|
|
940
917
|
|
941
918
|
static void write_action_begin_locked(void* gt,
|
942
919
|
grpc_error_handle /*error_ignored*/) {
|
943
|
-
GPR_TIMER_SCOPE("write_action_begin_locked", 0);
|
944
920
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
|
945
921
|
GPR_ASSERT(t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE);
|
946
922
|
grpc_chttp2_begin_write_result r;
|
947
|
-
if (t->closed_with_error
|
923
|
+
if (!t->closed_with_error.ok()) {
|
948
924
|
r.writing = false;
|
949
925
|
} else {
|
950
926
|
r = grpc_chttp2_begin_write(t);
|
951
927
|
}
|
952
928
|
if (r.writing) {
|
953
|
-
if (r.partial) {
|
954
|
-
GRPC_STATS_INC_HTTP2_PARTIAL_WRITES();
|
955
|
-
}
|
956
929
|
set_write_state(t,
|
957
930
|
r.partial ? GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE
|
958
931
|
: GRPC_CHTTP2_WRITE_STATE_WRITING,
|
959
932
|
begin_writing_desc(r.partial));
|
960
|
-
write_action(t,
|
933
|
+
write_action(t, absl::OkStatus());
|
961
934
|
if (t->reading_paused_on_pending_induced_frames) {
|
962
935
|
GPR_ASSERT(t->num_pending_induced_frames == 0);
|
963
936
|
// We had paused reading, because we had many induced frames (SETTINGS
|
@@ -972,40 +945,48 @@ static void write_action_begin_locked(void* gt,
|
|
972
945
|
continue_read_action_locked(t);
|
973
946
|
}
|
974
947
|
} else {
|
975
|
-
GRPC_STATS_INC_HTTP2_SPURIOUS_WRITES_BEGUN();
|
976
948
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_IDLE, "begin writing nothing");
|
977
949
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "writing");
|
978
950
|
}
|
979
951
|
}
|
980
952
|
|
981
953
|
static void write_action(void* gt, grpc_error_handle /*error*/) {
|
982
|
-
GPR_TIMER_SCOPE("write_action", 0);
|
983
954
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
|
984
955
|
void* cl = t->cl;
|
985
956
|
t->cl = nullptr;
|
957
|
+
// Choose max_frame_size as the prefered rx crypto frame size indicated by the
|
958
|
+
// peer.
|
959
|
+
int max_frame_size =
|
960
|
+
t->settings
|
961
|
+
[GRPC_PEER_SETTINGS]
|
962
|
+
[GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE];
|
963
|
+
// Note: max frame size is 0 if the remote peer does not support adjusting the
|
964
|
+
// sending frame size.
|
965
|
+
if (max_frame_size == 0) {
|
966
|
+
max_frame_size = INT_MAX;
|
967
|
+
}
|
986
968
|
grpc_endpoint_write(
|
987
969
|
t->ep, &t->outbuf,
|
988
970
|
GRPC_CLOSURE_INIT(&t->write_action_end_locked, write_action_end, t,
|
989
971
|
grpc_schedule_on_exec_ctx),
|
990
|
-
cl);
|
972
|
+
cl, max_frame_size);
|
991
973
|
}
|
992
974
|
|
993
975
|
static void write_action_end(void* tp, grpc_error_handle error) {
|
994
976
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
995
977
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->write_action_end_locked,
|
996
978
|
write_action_end_locked, t, nullptr),
|
997
|
-
|
979
|
+
error);
|
998
980
|
}
|
999
981
|
|
1000
982
|
// Callback from the grpc_endpoint after bytes have been written by calling
|
1001
983
|
// sendmsg
|
1002
984
|
static void write_action_end_locked(void* tp, grpc_error_handle error) {
|
1003
|
-
GPR_TIMER_SCOPE("terminate_writing_with_lock", 0);
|
1004
985
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
1005
986
|
|
1006
987
|
bool closed = false;
|
1007
|
-
if (error
|
1008
|
-
close_transport_locked(t,
|
988
|
+
if (!error.ok()) {
|
989
|
+
close_transport_locked(t, error);
|
1009
990
|
closed = true;
|
1010
991
|
}
|
1011
992
|
|
@@ -1013,8 +994,7 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
|
|
1013
994
|
t->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SENT;
|
1014
995
|
closed = true;
|
1015
996
|
if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
1016
|
-
close_transport_locked(
|
1017
|
-
t, GRPC_ERROR_CREATE_FROM_STATIC_STRING("goaway sent"));
|
997
|
+
close_transport_locked(t, GRPC_ERROR_CREATE("goaway sent"));
|
1018
998
|
}
|
1019
999
|
}
|
1020
1000
|
|
@@ -1022,11 +1002,9 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
|
|
1022
1002
|
case GRPC_CHTTP2_WRITE_STATE_IDLE:
|
1023
1003
|
GPR_UNREACHABLE_CODE(break);
|
1024
1004
|
case GRPC_CHTTP2_WRITE_STATE_WRITING:
|
1025
|
-
GPR_TIMER_MARK("state=writing", 0);
|
1026
1005
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_IDLE, "finish writing");
|
1027
1006
|
break;
|
1028
1007
|
case GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE:
|
1029
|
-
GPR_TIMER_MARK("state=writing_stale_no_poller", 0);
|
1030
1008
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING, "continue writing");
|
1031
1009
|
GRPC_CHTTP2_REF_TRANSPORT(t, "writing");
|
1032
1010
|
// If the transport is closed, we will retry writing on the endpoint
|
@@ -1040,11 +1018,11 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
|
|
1040
1018
|
t->combiner->FinallyRun(
|
1041
1019
|
GRPC_CLOSURE_INIT(&t->write_action_begin_locked,
|
1042
1020
|
write_action_begin_locked, t, nullptr),
|
1043
|
-
|
1021
|
+
absl::OkStatus());
|
1044
1022
|
break;
|
1045
1023
|
}
|
1046
1024
|
|
1047
|
-
grpc_chttp2_end_write(t,
|
1025
|
+
grpc_chttp2_end_write(t, error);
|
1048
1026
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "writing");
|
1049
1027
|
}
|
1050
1028
|
|
@@ -1073,26 +1051,27 @@ static void cancel_unstarted_streams(grpc_chttp2_transport* t,
|
|
1073
1051
|
s->trailing_metadata_buffer.Set(
|
1074
1052
|
grpc_core::GrpcStreamNetworkState(),
|
1075
1053
|
grpc_core::GrpcStreamNetworkState::kNotSentOnWire);
|
1076
|
-
grpc_chttp2_cancel_stream(t, s,
|
1054
|
+
grpc_chttp2_cancel_stream(t, s, error);
|
1077
1055
|
}
|
1078
|
-
GRPC_ERROR_UNREF(error);
|
1079
1056
|
}
|
1080
1057
|
|
1081
1058
|
void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
1082
1059
|
uint32_t goaway_error,
|
1083
1060
|
uint32_t last_stream_id,
|
1084
1061
|
absl::string_view goaway_text) {
|
1085
|
-
// Discard the error from a previous goaway frame (if any)
|
1086
|
-
if (t->goaway_error != GRPC_ERROR_NONE) {
|
1087
|
-
GRPC_ERROR_UNREF(t->goaway_error);
|
1088
|
-
}
|
1089
1062
|
t->goaway_error = grpc_error_set_str(
|
1090
1063
|
grpc_error_set_int(
|
1091
1064
|
grpc_error_set_int(
|
1092
|
-
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1065
|
+
grpc_core::StatusCreate(
|
1066
|
+
absl::StatusCode::kUnavailable,
|
1067
|
+
absl::StrFormat(
|
1068
|
+
"GOAWAY received; Error code: %u; Debug Text: %s",
|
1069
|
+
goaway_error, goaway_text),
|
1070
|
+
DEBUG_LOCATION, {}),
|
1071
|
+
grpc_core::StatusIntProperty::kHttp2Error,
|
1072
|
+
static_cast<intptr_t>(goaway_error)),
|
1073
|
+
grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE),
|
1074
|
+
grpc_core::StatusStrProperty::kRawBytes, goaway_text);
|
1096
1075
|
|
1097
1076
|
GRPC_CHTTP2_IF_TRACING(
|
1098
1077
|
gpr_log(GPR_INFO, "transport %p got goaway with last stream id %d", t,
|
@@ -1101,10 +1080,10 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
|
1101
1080
|
// received a GOAWAY with a non NO_ERROR code.
|
1102
1081
|
if (goaway_error != GRPC_HTTP2_NO_ERROR) {
|
1103
1082
|
gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string.c_str(),
|
1104
|
-
goaway_error,
|
1083
|
+
goaway_error, grpc_core::StatusToString(t->goaway_error).c_str());
|
1105
1084
|
}
|
1106
1085
|
if (t->is_client) {
|
1107
|
-
cancel_unstarted_streams(t,
|
1086
|
+
cancel_unstarted_streams(t, t->goaway_error);
|
1108
1087
|
// Cancel all unseen streams
|
1109
1088
|
grpc_chttp2_stream_map_for_each(
|
1110
1089
|
&t->stream_map,
|
@@ -1115,8 +1094,7 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
|
1115
1094
|
s->trailing_metadata_buffer.Set(
|
1116
1095
|
grpc_core::GrpcStreamNetworkState(),
|
1117
1096
|
grpc_core::GrpcStreamNetworkState::kNotSeenByServer);
|
1118
|
-
grpc_chttp2_cancel_stream(s->t, s,
|
1119
|
-
GRPC_ERROR_REF(s->t->goaway_error));
|
1097
|
+
grpc_chttp2_cancel_stream(s->t, s, s->t->goaway_error);
|
1120
1098
|
}
|
1121
1099
|
},
|
1122
1100
|
&last_stream_id);
|
@@ -1130,16 +1108,18 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
|
1130
1108
|
goaway_error == GRPC_HTTP2_ENHANCE_YOUR_CALM &&
|
1131
1109
|
goaway_text == "too_many_pings")) {
|
1132
1110
|
gpr_log(GPR_ERROR,
|
1133
|
-
"Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
|
1134
|
-
"data equal to \"too_many_pings\""
|
1135
|
-
|
1136
|
-
|
1137
|
-
|
1138
|
-
|
1139
|
-
|
1140
|
-
|
1111
|
+
"%s: Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
|
1112
|
+
"data equal to \"too_many_pings\". Current keepalive time (before "
|
1113
|
+
"throttling): %s",
|
1114
|
+
t->peer_string.c_str(), t->keepalive_time.ToString().c_str());
|
1115
|
+
constexpr int max_keepalive_time_millis =
|
1116
|
+
INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
|
1117
|
+
int64_t throttled_keepalive_time =
|
1118
|
+
t->keepalive_time.millis() > max_keepalive_time_millis
|
1119
|
+
? INT_MAX
|
1120
|
+
: t->keepalive_time.millis() * KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
|
1141
1121
|
status.SetPayload(grpc_core::kKeepaliveThrottlingKey,
|
1142
|
-
absl::Cord(std::to_string(
|
1122
|
+
absl::Cord(std::to_string(throttled_keepalive_time)));
|
1143
1123
|
}
|
1144
1124
|
// lie: use transient failure from the transport to indicate goaway has been
|
1145
1125
|
// received.
|
@@ -1153,8 +1133,8 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
|
1153
1133
|
grpc_chttp2_stream* s;
|
1154
1134
|
// maybe cancel out streams that haven't yet started if we have received a
|
1155
1135
|
// GOAWAY
|
1156
|
-
if (t->goaway_error
|
1157
|
-
cancel_unstarted_streams(t,
|
1136
|
+
if (!t->goaway_error.ok()) {
|
1137
|
+
cancel_unstarted_streams(t, t->goaway_error);
|
1158
1138
|
return;
|
1159
1139
|
}
|
1160
1140
|
// start streams where we have free grpc_chttp2_stream ids and free
|
@@ -1194,9 +1174,9 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
|
1194
1174
|
grpc_core::GrpcStreamNetworkState::kNotSentOnWire);
|
1195
1175
|
grpc_chttp2_cancel_stream(
|
1196
1176
|
t, s,
|
1197
|
-
grpc_error_set_int(
|
1198
|
-
|
1199
|
-
|
1177
|
+
grpc_error_set_int(GRPC_ERROR_CREATE("Stream IDs exhausted"),
|
1178
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
1179
|
+
GRPC_STATUS_UNAVAILABLE));
|
1200
1180
|
}
|
1201
1181
|
}
|
1202
1182
|
}
|
@@ -1217,7 +1197,13 @@ static grpc_closure* add_closure_barrier(grpc_closure* closure) {
|
|
1217
1197
|
static void null_then_sched_closure(grpc_closure** closure) {
|
1218
1198
|
grpc_closure* c = *closure;
|
1219
1199
|
*closure = nullptr;
|
1220
|
-
|
1200
|
+
// null_then_schedule_closure might be run during a start_batch which might
|
1201
|
+
// subsequently examine the batch for more operations contained within.
|
1202
|
+
// However, the closure run might make it back to the call object, push a
|
1203
|
+
// completion, have the application see it, and make a new operation on the
|
1204
|
+
// call which recycles the batch BEFORE the call to start_batch completes,
|
1205
|
+
// forcing a race.
|
1206
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, c, absl::OkStatus());
|
1221
1207
|
}
|
1222
1208
|
|
1223
1209
|
void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
|
@@ -1228,7 +1214,6 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
|
|
1228
1214
|
grpc_closure* closure = *pclosure;
|
1229
1215
|
*pclosure = nullptr;
|
1230
1216
|
if (closure == nullptr) {
|
1231
|
-
GRPC_ERROR_UNREF(error);
|
1232
1217
|
return;
|
1233
1218
|
}
|
1234
1219
|
closure->next_data.scratch -= CLOSURE_BARRIER_FIRST_REF_BIT;
|
@@ -1242,42 +1227,31 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
|
|
1242
1227
|
CLOSURE_BARRIER_FIRST_REF_BIT),
|
1243
1228
|
static_cast<int>(closure->next_data.scratch %
|
1244
1229
|
CLOSURE_BARRIER_FIRST_REF_BIT),
|
1245
|
-
desc,
|
1230
|
+
desc, grpc_core::StatusToString(error).c_str(),
|
1246
1231
|
write_state_name(t->write_state));
|
1247
1232
|
}
|
1248
|
-
if (error
|
1249
|
-
#ifdef GRPC_ERROR_IS_ABSEIL_STATUS
|
1233
|
+
if (!error.ok()) {
|
1250
1234
|
grpc_error_handle cl_err =
|
1251
1235
|
grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
|
1252
|
-
|
1253
|
-
|
1254
|
-
|
1255
|
-
|
1256
|
-
|
1257
|
-
|
1258
|
-
|
1259
|
-
|
1260
|
-
t->peer_string);
|
1236
|
+
if (cl_err.ok()) {
|
1237
|
+
cl_err = GRPC_ERROR_CREATE(absl::StrCat(
|
1238
|
+
"Error in HTTP transport completing operation: ", desc,
|
1239
|
+
" write_state=", write_state_name(t->write_state), " refs=",
|
1240
|
+
closure->next_data.scratch / CLOSURE_BARRIER_FIRST_REF_BIT, " flags=",
|
1241
|
+
closure->next_data.scratch % CLOSURE_BARRIER_FIRST_REF_BIT));
|
1242
|
+
cl_err = grpc_error_set_str(
|
1243
|
+
cl_err, grpc_core::StatusStrProperty::kTargetAddress, t->peer_string);
|
1261
1244
|
}
|
1262
1245
|
cl_err = grpc_error_add_child(cl_err, error);
|
1263
|
-
#ifdef GRPC_ERROR_IS_ABSEIL_STATUS
|
1264
1246
|
closure->error_data.error = grpc_core::internal::StatusAllocHeapPtr(cl_err);
|
1265
|
-
#else
|
1266
|
-
closure->error_data.error = reinterpret_cast<intptr_t>(cl_err);
|
1267
|
-
#endif
|
1268
1247
|
}
|
1269
1248
|
if (closure->next_data.scratch < CLOSURE_BARRIER_FIRST_REF_BIT) {
|
1270
1249
|
if ((t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE) ||
|
1271
1250
|
!(closure->next_data.scratch & CLOSURE_BARRIER_MAY_COVER_WRITE)) {
|
1272
1251
|
// Using GRPC_CLOSURE_SCHED instead of GRPC_CLOSURE_RUN to avoid running
|
1273
1252
|
// closures earlier than when it is safe to do so.
|
1274
|
-
#ifdef GRPC_ERROR_IS_ABSEIL_STATUS
|
1275
1253
|
grpc_error_handle run_error =
|
1276
1254
|
grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
|
1277
|
-
#else
|
1278
|
-
grpc_error_handle run_error =
|
1279
|
-
reinterpret_cast<grpc_error_handle>(closure->error_data.error);
|
1280
|
-
#endif
|
1281
1255
|
closure->error_data.error = 0;
|
1282
1256
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, run_error);
|
1283
1257
|
} else {
|
@@ -1291,96 +1265,9 @@ static bool contains_non_ok_status(grpc_metadata_batch* batch) {
|
|
1291
1265
|
GRPC_STATUS_OK;
|
1292
1266
|
}
|
1293
1267
|
|
1294
|
-
static void maybe_become_writable_due_to_send_msg(grpc_chttp2_transport* t,
|
1295
|
-
grpc_chttp2_stream* s) {
|
1296
|
-
if (s->id != 0 && (!s->write_buffering ||
|
1297
|
-
s->flow_controlled_buffer.length > t->write_buffer_size)) {
|
1298
|
-
grpc_chttp2_mark_stream_writable(t, s);
|
1299
|
-
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE);
|
1300
|
-
}
|
1301
|
-
}
|
1302
|
-
|
1303
|
-
static void add_fetched_slice_locked(grpc_chttp2_transport* t,
|
1304
|
-
grpc_chttp2_stream* s) {
|
1305
|
-
s->fetched_send_message_length +=
|
1306
|
-
static_cast<uint32_t> GRPC_SLICE_LENGTH(s->fetching_slice);
|
1307
|
-
grpc_slice_buffer_add(&s->flow_controlled_buffer, s->fetching_slice);
|
1308
|
-
maybe_become_writable_due_to_send_msg(t, s);
|
1309
|
-
}
|
1310
|
-
|
1311
|
-
static void continue_fetching_send_locked(grpc_chttp2_transport* t,
|
1312
|
-
grpc_chttp2_stream* s) {
|
1313
|
-
for (;;) {
|
1314
|
-
if (s->fetching_send_message == nullptr) {
|
1315
|
-
// Stream was cancelled before message fetch completed
|
1316
|
-
abort(); /* TODO(ctiller): what cleanup here? */
|
1317
|
-
}
|
1318
|
-
if (s->fetched_send_message_length == s->fetching_send_message->length()) {
|
1319
|
-
int64_t notify_offset = s->next_message_end_offset;
|
1320
|
-
if (notify_offset <= s->flow_controlled_bytes_written) {
|
1321
|
-
grpc_chttp2_complete_closure_step(
|
1322
|
-
t, s, &s->fetching_send_message_finished, GRPC_ERROR_NONE,
|
1323
|
-
"fetching_send_message_finished");
|
1324
|
-
} else {
|
1325
|
-
grpc_chttp2_write_cb* cb = t->write_cb_pool;
|
1326
|
-
if (cb == nullptr) {
|
1327
|
-
cb = static_cast<grpc_chttp2_write_cb*>(gpr_malloc(sizeof(*cb)));
|
1328
|
-
} else {
|
1329
|
-
t->write_cb_pool = cb->next;
|
1330
|
-
}
|
1331
|
-
cb->call_at_byte = notify_offset;
|
1332
|
-
cb->closure = s->fetching_send_message_finished;
|
1333
|
-
s->fetching_send_message_finished = nullptr;
|
1334
|
-
grpc_chttp2_write_cb** list =
|
1335
|
-
s->fetching_send_message->flags() & GRPC_WRITE_THROUGH
|
1336
|
-
? &s->on_write_finished_cbs
|
1337
|
-
: &s->on_flow_controlled_cbs;
|
1338
|
-
cb->next = *list;
|
1339
|
-
*list = cb;
|
1340
|
-
}
|
1341
|
-
s->fetching_send_message.reset();
|
1342
|
-
return; /* early out */
|
1343
|
-
} else if (s->fetching_send_message->Next(
|
1344
|
-
UINT32_MAX, GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
|
1345
|
-
::complete_fetch, s,
|
1346
|
-
grpc_schedule_on_exec_ctx))) {
|
1347
|
-
grpc_error_handle error =
|
1348
|
-
s->fetching_send_message->Pull(&s->fetching_slice);
|
1349
|
-
if (error != GRPC_ERROR_NONE) {
|
1350
|
-
s->fetching_send_message.reset();
|
1351
|
-
grpc_chttp2_cancel_stream(t, s, error);
|
1352
|
-
} else {
|
1353
|
-
add_fetched_slice_locked(t, s);
|
1354
|
-
}
|
1355
|
-
}
|
1356
|
-
}
|
1357
|
-
}
|
1358
|
-
|
1359
|
-
static void complete_fetch(void* gs, grpc_error_handle error) {
|
1360
|
-
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
|
1361
|
-
s->t->combiner->Run(GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
|
1362
|
-
::complete_fetch_locked, s, nullptr),
|
1363
|
-
GRPC_ERROR_REF(error));
|
1364
|
-
}
|
1365
|
-
|
1366
|
-
static void complete_fetch_locked(void* gs, grpc_error_handle error) {
|
1367
|
-
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
|
1368
|
-
grpc_chttp2_transport* t = s->t;
|
1369
|
-
if (error == GRPC_ERROR_NONE) {
|
1370
|
-
error = s->fetching_send_message->Pull(&s->fetching_slice);
|
1371
|
-
if (error == GRPC_ERROR_NONE) {
|
1372
|
-
add_fetched_slice_locked(t, s);
|
1373
|
-
continue_fetching_send_locked(t, s);
|
1374
|
-
}
|
1375
|
-
}
|
1376
|
-
if (error != GRPC_ERROR_NONE) {
|
1377
|
-
s->fetching_send_message.reset();
|
1378
|
-
grpc_chttp2_cancel_stream(t, s, error);
|
1379
|
-
}
|
1380
|
-
}
|
1381
|
-
|
1382
1268
|
static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
|
1383
1269
|
bool is_client, bool is_initial) {
|
1270
|
+
gpr_log(GPR_INFO, "--metadata--");
|
1384
1271
|
const std::string prefix = absl::StrCat(
|
1385
1272
|
"HTTP:", id, is_initial ? ":HDR" : ":TRL", is_client ? ":CLI:" : ":SVR:");
|
1386
1273
|
md_batch->Log([&prefix](absl::string_view key, absl::string_view value) {
|
@@ -1390,8 +1277,6 @@ static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
|
|
1390
1277
|
|
1391
1278
|
static void perform_stream_op_locked(void* stream_op,
|
1392
1279
|
grpc_error_handle /*error_ignored*/) {
|
1393
|
-
GPR_TIMER_SCOPE("perform_stream_op_locked", 0);
|
1394
|
-
|
1395
1280
|
grpc_transport_stream_op_batch* op =
|
1396
1281
|
static_cast<grpc_transport_stream_op_batch*>(stream_op);
|
1397
1282
|
grpc_chttp2_stream* s =
|
@@ -1399,8 +1284,6 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1399
1284
|
grpc_transport_stream_op_batch_payload* op_payload = op->payload;
|
1400
1285
|
grpc_chttp2_transport* t = s->t;
|
1401
1286
|
|
1402
|
-
GRPC_STATS_INC_HTTP2_OP_BATCHES();
|
1403
|
-
|
1404
1287
|
s->context = op->payload->context;
|
1405
1288
|
s->traced = op->is_traced;
|
1406
1289
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
@@ -1428,7 +1311,6 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1428
1311
|
}
|
1429
1312
|
|
1430
1313
|
if (op->cancel_stream) {
|
1431
|
-
GRPC_STATS_INC_HTTP2_OP_CANCEL();
|
1432
1314
|
grpc_chttp2_cancel_stream(t, s, op_payload->cancel_stream.cancel_error);
|
1433
1315
|
}
|
1434
1316
|
|
@@ -1436,7 +1318,6 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1436
1318
|
if (t->is_client && t->channelz_socket != nullptr) {
|
1437
1319
|
t->channelz_socket->RecordStreamStartedFromLocal();
|
1438
1320
|
}
|
1439
|
-
GRPC_STATS_INC_HTTP2_OP_SEND_INITIAL_METADATA();
|
1440
1321
|
GPR_ASSERT(s->send_initial_metadata_finished == nullptr);
|
1441
1322
|
on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
|
1442
1323
|
|
@@ -1454,7 +1335,7 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1454
1335
|
}
|
1455
1336
|
if (!s->write_closed) {
|
1456
1337
|
if (t->is_client) {
|
1457
|
-
if (t->closed_with_error
|
1338
|
+
if (t->closed_with_error.ok()) {
|
1458
1339
|
GPR_ASSERT(s->id == 0);
|
1459
1340
|
grpc_chttp2_list_add_waiting_for_concurrency(t, s);
|
1460
1341
|
maybe_start_some_streams(t);
|
@@ -1465,16 +1346,16 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1465
1346
|
grpc_chttp2_cancel_stream(
|
1466
1347
|
t, s,
|
1467
1348
|
grpc_error_set_int(
|
1468
|
-
|
1469
|
-
|
1470
|
-
|
1349
|
+
GRPC_ERROR_CREATE_REFERENCING("Transport closed",
|
1350
|
+
&t->closed_with_error, 1),
|
1351
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
1352
|
+
GRPC_STATUS_UNAVAILABLE));
|
1471
1353
|
}
|
1472
1354
|
} else {
|
1473
1355
|
GPR_ASSERT(s->id != 0);
|
1474
1356
|
grpc_chttp2_mark_stream_writable(t, s);
|
1475
1357
|
if (!(op->send_message &&
|
1476
|
-
(op->payload->send_message.
|
1477
|
-
GRPC_WRITE_BUFFER_HINT))) {
|
1358
|
+
(op->payload->send_message.flags & GRPC_WRITE_BUFFER_HINT))) {
|
1478
1359
|
grpc_chttp2_initiate_write(
|
1479
1360
|
t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
|
1480
1361
|
}
|
@@ -1483,7 +1364,7 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1483
1364
|
s->send_initial_metadata = nullptr;
|
1484
1365
|
grpc_chttp2_complete_closure_step(
|
1485
1366
|
t, s, &s->send_initial_metadata_finished,
|
1486
|
-
|
1367
|
+
GRPC_ERROR_CREATE_REFERENCING(
|
1487
1368
|
"Attempt to send initial metadata after stream was closed",
|
1488
1369
|
&s->write_closed_error, 1),
|
1489
1370
|
"send_initial_metadata_finished");
|
@@ -1495,35 +1376,30 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1495
1376
|
}
|
1496
1377
|
|
1497
1378
|
if (op->send_message) {
|
1498
|
-
GRPC_STATS_INC_HTTP2_OP_SEND_MESSAGE();
|
1499
1379
|
t->num_messages_in_next_write++;
|
1500
|
-
|
1501
|
-
op->payload->send_message.send_message->
|
1380
|
+
grpc_core::global_stats().IncrementHttp2SendMessageSize(
|
1381
|
+
op->payload->send_message.send_message->Length());
|
1502
1382
|
on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
|
1503
|
-
s->
|
1383
|
+
s->send_message_finished = add_closure_barrier(op->on_complete);
|
1384
|
+
const uint32_t flags = op_payload->send_message.flags;
|
1504
1385
|
if (s->write_closed) {
|
1505
1386
|
op->payload->send_message.stream_write_closed = true;
|
1506
1387
|
// We should NOT return an error here, so as to avoid a cancel OP being
|
1507
1388
|
// started. The surface layer will notice that the stream has been closed
|
1508
1389
|
// for writes and fail the send message op.
|
1509
|
-
|
1510
|
-
|
1511
|
-
|
1512
|
-
"fetching_send_message_finished");
|
1390
|
+
grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
|
1391
|
+
absl::OkStatus(),
|
1392
|
+
"fetching_send_message_finished");
|
1513
1393
|
} else {
|
1514
|
-
GPR_ASSERT(s->fetching_send_message == nullptr);
|
1515
1394
|
uint8_t* frame_hdr = grpc_slice_buffer_tiny_add(
|
1516
1395
|
&s->flow_controlled_buffer, GRPC_HEADER_SIZE_IN_BYTES);
|
1517
|
-
uint32_t flags = op_payload->send_message.send_message->flags();
|
1518
1396
|
frame_hdr[0] = (flags & GRPC_WRITE_INTERNAL_COMPRESS) != 0;
|
1519
|
-
size_t len = op_payload->send_message.send_message->
|
1397
|
+
size_t len = op_payload->send_message.send_message->Length();
|
1520
1398
|
frame_hdr[1] = static_cast<uint8_t>(len >> 24);
|
1521
1399
|
frame_hdr[2] = static_cast<uint8_t>(len >> 16);
|
1522
1400
|
frame_hdr[3] = static_cast<uint8_t>(len >> 8);
|
1523
1401
|
frame_hdr[4] = static_cast<uint8_t>(len);
|
1524
|
-
|
1525
|
-
std::move(op_payload->send_message.send_message);
|
1526
|
-
s->fetched_send_message_length = 0;
|
1402
|
+
|
1527
1403
|
s->next_message_end_offset =
|
1528
1404
|
s->flow_controlled_bytes_written +
|
1529
1405
|
static_cast<int64_t>(s->flow_controlled_buffer.length) +
|
@@ -1534,13 +1410,48 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1534
1410
|
} else {
|
1535
1411
|
s->write_buffering = false;
|
1536
1412
|
}
|
1537
|
-
|
1538
|
-
|
1413
|
+
|
1414
|
+
grpc_slice* const slices =
|
1415
|
+
op_payload->send_message.send_message->c_slice_buffer()->slices;
|
1416
|
+
grpc_slice* const end =
|
1417
|
+
slices + op_payload->send_message.send_message->Count();
|
1418
|
+
for (grpc_slice* slice = slices; slice != end; slice++) {
|
1419
|
+
grpc_slice_buffer_add(&s->flow_controlled_buffer,
|
1420
|
+
grpc_core::CSliceRef(*slice));
|
1421
|
+
}
|
1422
|
+
|
1423
|
+
int64_t notify_offset = s->next_message_end_offset;
|
1424
|
+
if (notify_offset <= s->flow_controlled_bytes_written) {
|
1425
|
+
grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
|
1426
|
+
absl::OkStatus(),
|
1427
|
+
"fetching_send_message_finished");
|
1428
|
+
} else {
|
1429
|
+
grpc_chttp2_write_cb* cb = t->write_cb_pool;
|
1430
|
+
if (cb == nullptr) {
|
1431
|
+
cb = static_cast<grpc_chttp2_write_cb*>(gpr_malloc(sizeof(*cb)));
|
1432
|
+
} else {
|
1433
|
+
t->write_cb_pool = cb->next;
|
1434
|
+
}
|
1435
|
+
cb->call_at_byte = notify_offset;
|
1436
|
+
cb->closure = s->send_message_finished;
|
1437
|
+
s->send_message_finished = nullptr;
|
1438
|
+
grpc_chttp2_write_cb** list = flags & GRPC_WRITE_THROUGH
|
1439
|
+
? &s->on_write_finished_cbs
|
1440
|
+
: &s->on_flow_controlled_cbs;
|
1441
|
+
cb->next = *list;
|
1442
|
+
*list = cb;
|
1443
|
+
}
|
1444
|
+
|
1445
|
+
if (s->id != 0 &&
|
1446
|
+
(!s->write_buffering ||
|
1447
|
+
s->flow_controlled_buffer.length > t->write_buffer_size)) {
|
1448
|
+
grpc_chttp2_mark_stream_writable(t, s);
|
1449
|
+
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE);
|
1450
|
+
}
|
1539
1451
|
}
|
1540
1452
|
}
|
1541
1453
|
|
1542
1454
|
if (op->send_trailing_metadata) {
|
1543
|
-
GRPC_STATS_INC_HTTP2_OP_SEND_TRAILING_METADATA();
|
1544
1455
|
GPR_ASSERT(s->send_trailing_metadata_finished == nullptr);
|
1545
1456
|
on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
|
1546
1457
|
s->send_trailing_metadata_finished = add_closure_barrier(on_complete);
|
@@ -1557,10 +1468,9 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1557
1468
|
grpc_chttp2_complete_closure_step(
|
1558
1469
|
t, s, &s->send_trailing_metadata_finished,
|
1559
1470
|
op->payload->send_trailing_metadata.send_trailing_metadata->empty()
|
1560
|
-
?
|
1561
|
-
:
|
1562
|
-
|
1563
|
-
"stream was closed"),
|
1471
|
+
? absl::OkStatus()
|
1472
|
+
: GRPC_ERROR_CREATE("Attempt to send trailing metadata after "
|
1473
|
+
"stream was closed"),
|
1564
1474
|
"send_trailing_metadata_finished");
|
1565
1475
|
} else if (s->id != 0) {
|
1566
1476
|
// TODO(ctiller): check if there's flow control for any outstanding
|
@@ -1572,7 +1482,6 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1572
1482
|
}
|
1573
1483
|
|
1574
1484
|
if (op->recv_initial_metadata) {
|
1575
|
-
GRPC_STATS_INC_HTTP2_OP_RECV_INITIAL_METADATA();
|
1576
1485
|
GPR_ASSERT(s->recv_initial_metadata_ready == nullptr);
|
1577
1486
|
s->recv_initial_metadata_ready =
|
1578
1487
|
op_payload->recv_initial_metadata.recv_initial_metadata_ready;
|
@@ -1580,6 +1489,9 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1580
1489
|
op_payload->recv_initial_metadata.recv_initial_metadata;
|
1581
1490
|
s->trailing_metadata_available =
|
1582
1491
|
op_payload->recv_initial_metadata.trailing_metadata_available;
|
1492
|
+
if (s->parsed_trailers_only && s->trailing_metadata_available != nullptr) {
|
1493
|
+
*s->trailing_metadata_available = true;
|
1494
|
+
}
|
1583
1495
|
if (op_payload->recv_initial_metadata.peer_string != nullptr) {
|
1584
1496
|
gpr_atm_rel_store(op_payload->recv_initial_metadata.peer_string,
|
1585
1497
|
(gpr_atm)t->peer_string.c_str());
|
@@ -1588,33 +1500,17 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1588
1500
|
}
|
1589
1501
|
|
1590
1502
|
if (op->recv_message) {
|
1591
|
-
GRPC_STATS_INC_HTTP2_OP_RECV_MESSAGE();
|
1592
|
-
size_t before = 0;
|
1593
1503
|
GPR_ASSERT(s->recv_message_ready == nullptr);
|
1594
|
-
GPR_ASSERT(!s->pending_byte_stream);
|
1595
1504
|
s->recv_message_ready = op_payload->recv_message.recv_message_ready;
|
1596
1505
|
s->recv_message = op_payload->recv_message.recv_message;
|
1506
|
+
s->recv_message->emplace();
|
1507
|
+
s->recv_message_flags = op_payload->recv_message.flags;
|
1597
1508
|
s->call_failed_before_recv_message =
|
1598
1509
|
op_payload->recv_message.call_failed_before_recv_message;
|
1599
|
-
|
1600
|
-
if (!s->read_closed) {
|
1601
|
-
before = s->frame_storage.length +
|
1602
|
-
s->unprocessed_incoming_frames_buffer.length;
|
1603
|
-
}
|
1604
|
-
}
|
1605
|
-
grpc_chttp2_maybe_complete_recv_message(t, s);
|
1606
|
-
if (s->id != 0) {
|
1607
|
-
if (!s->read_closed && s->frame_storage.length == 0) {
|
1608
|
-
size_t after = s->unprocessed_incoming_frames_buffer_cached_length;
|
1609
|
-
s->flow_control->IncomingByteStreamUpdate(GRPC_HEADER_SIZE_IN_BYTES,
|
1610
|
-
before - after);
|
1611
|
-
grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
|
1612
|
-
}
|
1613
|
-
}
|
1510
|
+
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
1614
1511
|
}
|
1615
1512
|
|
1616
1513
|
if (op->recv_trailing_metadata) {
|
1617
|
-
GRPC_STATS_INC_HTTP2_OP_RECV_TRAILING_METADATA();
|
1618
1514
|
GPR_ASSERT(s->collecting_stats == nullptr);
|
1619
1515
|
s->collecting_stats = op_payload->recv_trailing_metadata.collect_stats;
|
1620
1516
|
GPR_ASSERT(s->recv_trailing_metadata_finished == nullptr);
|
@@ -1627,7 +1523,7 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1627
1523
|
}
|
1628
1524
|
|
1629
1525
|
if (on_complete != nullptr) {
|
1630
|
-
grpc_chttp2_complete_closure_step(t, s, &on_complete,
|
1526
|
+
grpc_chttp2_complete_closure_step(t, s, &on_complete, absl::OkStatus(),
|
1631
1527
|
"op->on_complete");
|
1632
1528
|
}
|
1633
1529
|
|
@@ -1636,7 +1532,6 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1636
1532
|
|
1637
1533
|
static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
|
1638
1534
|
grpc_transport_stream_op_batch* op) {
|
1639
|
-
GPR_TIMER_SCOPE("perform_stream_op", 0);
|
1640
1535
|
grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
|
1641
1536
|
grpc_chttp2_stream* s = reinterpret_cast<grpc_chttp2_stream*>(gs);
|
1642
1537
|
|
@@ -1662,49 +1557,46 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
|
|
1662
1557
|
op->handler_private.extra_arg = gs;
|
1663
1558
|
t->combiner->Run(GRPC_CLOSURE_INIT(&op->handler_private.closure,
|
1664
1559
|
perform_stream_op_locked, op, nullptr),
|
1665
|
-
|
1560
|
+
absl::OkStatus());
|
1666
1561
|
}
|
1667
1562
|
|
1668
1563
|
static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
|
1669
1564
|
// callback remaining pings: they're not allowed to call into the transport,
|
1670
1565
|
// and maybe they hold resources that need to be freed
|
1671
1566
|
grpc_chttp2_ping_queue* pq = &t->ping_queue;
|
1672
|
-
GPR_ASSERT(error
|
1567
|
+
GPR_ASSERT(!error.ok());
|
1673
1568
|
for (size_t j = 0; j < GRPC_CHTTP2_PCL_COUNT; j++) {
|
1674
|
-
grpc_closure_list_fail_all(&pq->lists[j],
|
1569
|
+
grpc_closure_list_fail_all(&pq->lists[j], error);
|
1675
1570
|
grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &pq->lists[j]);
|
1676
1571
|
}
|
1677
|
-
GRPC_ERROR_UNREF(error);
|
1678
1572
|
}
|
1679
1573
|
|
1680
1574
|
static void send_ping_locked(grpc_chttp2_transport* t,
|
1681
1575
|
grpc_closure* on_initiate, grpc_closure* on_ack) {
|
1682
|
-
if (t->closed_with_error
|
1683
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_initiate,
|
1684
|
-
|
1685
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_ack,
|
1686
|
-
GRPC_ERROR_REF(t->closed_with_error));
|
1576
|
+
if (!t->closed_with_error.ok()) {
|
1577
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_initiate, t->closed_with_error);
|
1578
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_ack, t->closed_with_error);
|
1687
1579
|
return;
|
1688
1580
|
}
|
1689
1581
|
grpc_chttp2_ping_queue* pq = &t->ping_queue;
|
1690
1582
|
grpc_closure_list_append(&pq->lists[GRPC_CHTTP2_PCL_INITIATE], on_initiate,
|
1691
|
-
|
1583
|
+
absl::OkStatus());
|
1692
1584
|
grpc_closure_list_append(&pq->lists[GRPC_CHTTP2_PCL_NEXT], on_ack,
|
1693
|
-
|
1585
|
+
absl::OkStatus());
|
1694
1586
|
}
|
1695
1587
|
|
1696
1588
|
// Specialized form of send_ping_locked for keepalive ping. If there is already
|
1697
1589
|
// a ping in progress, the keepalive ping would piggyback onto that ping,
|
1698
1590
|
// instead of waiting for that ping to complete and then starting a new ping.
|
1699
1591
|
static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
|
1700
|
-
if (t->closed_with_error
|
1592
|
+
if (!t->closed_with_error.ok()) {
|
1701
1593
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
|
1702
1594
|
start_keepalive_ping_locked, t, nullptr),
|
1703
|
-
|
1595
|
+
t->closed_with_error);
|
1704
1596
|
t->combiner->Run(
|
1705
1597
|
GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
|
1706
1598
|
finish_keepalive_ping_locked, t, nullptr),
|
1707
|
-
|
1599
|
+
t->closed_with_error);
|
1708
1600
|
return;
|
1709
1601
|
}
|
1710
1602
|
grpc_chttp2_ping_queue* pq = &t->ping_queue;
|
@@ -1712,39 +1604,39 @@ static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
|
|
1712
1604
|
// There is a ping in flight. Add yourself to the inflight closure list.
|
1713
1605
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
|
1714
1606
|
start_keepalive_ping_locked, t, nullptr),
|
1715
|
-
|
1607
|
+
t->closed_with_error);
|
1716
1608
|
grpc_closure_list_append(
|
1717
1609
|
&pq->lists[GRPC_CHTTP2_PCL_INFLIGHT],
|
1718
1610
|
GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
|
1719
1611
|
finish_keepalive_ping, t, grpc_schedule_on_exec_ctx),
|
1720
|
-
|
1612
|
+
absl::OkStatus());
|
1721
1613
|
return;
|
1722
1614
|
}
|
1723
1615
|
grpc_closure_list_append(
|
1724
1616
|
&pq->lists[GRPC_CHTTP2_PCL_INITIATE],
|
1725
1617
|
GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked, start_keepalive_ping,
|
1726
1618
|
t, grpc_schedule_on_exec_ctx),
|
1727
|
-
|
1619
|
+
absl::OkStatus());
|
1728
1620
|
grpc_closure_list_append(
|
1729
1621
|
&pq->lists[GRPC_CHTTP2_PCL_NEXT],
|
1730
1622
|
GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked, finish_keepalive_ping,
|
1731
1623
|
t, grpc_schedule_on_exec_ctx),
|
1732
|
-
|
1624
|
+
absl::OkStatus());
|
1733
1625
|
}
|
1734
1626
|
|
1735
|
-
void grpc_chttp2_retry_initiate_ping(
|
1736
|
-
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
1627
|
+
void grpc_chttp2_retry_initiate_ping(grpc_chttp2_transport* t) {
|
1737
1628
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->retry_initiate_ping_locked,
|
1738
1629
|
retry_initiate_ping_locked, t, nullptr),
|
1739
|
-
|
1630
|
+
absl::OkStatus());
|
1740
1631
|
}
|
1741
1632
|
|
1742
|
-
static void retry_initiate_ping_locked(void* tp,
|
1633
|
+
static void retry_initiate_ping_locked(void* tp,
|
1634
|
+
GRPC_UNUSED grpc_error_handle error) {
|
1635
|
+
GPR_DEBUG_ASSERT(error.ok());
|
1743
1636
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
1744
|
-
t->ping_state.
|
1745
|
-
|
1746
|
-
|
1747
|
-
}
|
1637
|
+
GPR_ASSERT(t->ping_state.delayed_ping_timer_handle.has_value());
|
1638
|
+
t->ping_state.delayed_ping_timer_handle.reset();
|
1639
|
+
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING);
|
1748
1640
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "retry_initiate_ping_locked");
|
1749
1641
|
}
|
1750
1642
|
|
@@ -1789,8 +1681,7 @@ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
|
|
1789
1681
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
|
1790
1682
|
Ref().release(); // Ref for the timer
|
1791
1683
|
grpc_timer_init(
|
1792
|
-
&timer_,
|
1793
|
-
grpc_core::ExecCtx::Get()->Now() + grpc_core::Duration::Seconds(20),
|
1684
|
+
&timer_, grpc_core::Timestamp::Now() + grpc_core::Duration::Seconds(20),
|
1794
1685
|
GRPC_CLOSURE_INIT(&on_timer_, OnTimer, this, nullptr));
|
1795
1686
|
}
|
1796
1687
|
|
@@ -1799,7 +1690,7 @@ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
|
|
1799
1690
|
// We already sent the final GOAWAY.
|
1800
1691
|
return;
|
1801
1692
|
}
|
1802
|
-
if (t_->destroying || t_->closed_with_error
|
1693
|
+
if (t_->destroying || !t_->closed_with_error.ok()) {
|
1803
1694
|
GRPC_CHTTP2_IF_TRACING(gpr_log(
|
1804
1695
|
GPR_INFO,
|
1805
1696
|
"transport:%p %s peer:%s Transport already shutting down. "
|
@@ -1824,7 +1715,7 @@ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
|
|
1824
1715
|
auto* self = static_cast<GracefulGoaway*>(arg);
|
1825
1716
|
self->t_->combiner->Run(
|
1826
1717
|
GRPC_CLOSURE_INIT(&self->on_ping_ack_, OnPingAckLocked, self, nullptr),
|
1827
|
-
|
1718
|
+
absl::OkStatus());
|
1828
1719
|
}
|
1829
1720
|
|
1830
1721
|
static void OnPingAckLocked(void* arg, grpc_error_handle /* error */) {
|
@@ -1836,13 +1727,13 @@ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
|
|
1836
1727
|
|
1837
1728
|
static void OnTimer(void* arg, grpc_error_handle error) {
|
1838
1729
|
auto* self = static_cast<GracefulGoaway*>(arg);
|
1839
|
-
if (error
|
1730
|
+
if (!error.ok()) {
|
1840
1731
|
self->Unref();
|
1841
1732
|
return;
|
1842
1733
|
}
|
1843
1734
|
self->t_->combiner->Run(
|
1844
1735
|
GRPC_CLOSURE_INIT(&self->on_timer_, OnTimerLocked, self, nullptr),
|
1845
|
-
|
1736
|
+
absl::OkStatus());
|
1846
1737
|
}
|
1847
1738
|
|
1848
1739
|
static void OnTimerLocked(void* arg, grpc_error_handle /* error */) {
|
@@ -1859,39 +1750,48 @@ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
|
|
1859
1750
|
|
1860
1751
|
} // namespace
|
1861
1752
|
|
1862
|
-
static void send_goaway(grpc_chttp2_transport* t, grpc_error_handle error
|
1753
|
+
static void send_goaway(grpc_chttp2_transport* t, grpc_error_handle error,
|
1754
|
+
bool immediate_disconnect_hint) {
|
1863
1755
|
grpc_http2_error_code http_error;
|
1864
1756
|
std::string message;
|
1865
1757
|
grpc_error_get_status(error, grpc_core::Timestamp::InfFuture(), nullptr,
|
1866
1758
|
&message, &http_error, nullptr);
|
1867
|
-
if (!t->is_client && http_error == GRPC_HTTP2_NO_ERROR
|
1759
|
+
if (!t->is_client && http_error == GRPC_HTTP2_NO_ERROR &&
|
1760
|
+
!immediate_disconnect_hint) {
|
1868
1761
|
// Do a graceful shutdown.
|
1869
|
-
|
1870
|
-
|
1762
|
+
if (t->sent_goaway_state == GRPC_CHTTP2_NO_GOAWAY_SEND) {
|
1763
|
+
GracefulGoaway::Start(t);
|
1764
|
+
} else {
|
1765
|
+
// Graceful GOAWAY is already in progress.
|
1766
|
+
}
|
1767
|
+
} else if (t->sent_goaway_state == GRPC_CHTTP2_NO_GOAWAY_SEND ||
|
1768
|
+
t->sent_goaway_state == GRPC_CHTTP2_GRACEFUL_GOAWAY) {
|
1871
1769
|
// We want to log this irrespective of whether http tracing is enabled
|
1872
1770
|
gpr_log(GPR_DEBUG, "%s: Sending goaway err=%s", t->peer_string.c_str(),
|
1873
|
-
|
1771
|
+
grpc_core::StatusToString(error).c_str());
|
1874
1772
|
t->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED;
|
1875
1773
|
grpc_chttp2_goaway_append(
|
1876
1774
|
t->last_new_stream_id, static_cast<uint32_t>(http_error),
|
1877
1775
|
grpc_slice_from_cpp_string(std::move(message)), &t->qbuf);
|
1776
|
+
} else {
|
1777
|
+
// Final GOAWAY has already been sent.
|
1878
1778
|
}
|
1879
1779
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
|
1880
|
-
GRPC_ERROR_UNREF(error);
|
1881
1780
|
}
|
1882
1781
|
|
1883
1782
|
void grpc_chttp2_add_ping_strike(grpc_chttp2_transport* t) {
|
1884
1783
|
if (++t->ping_recv_state.ping_strikes > t->ping_policy.max_ping_strikes &&
|
1885
1784
|
t->ping_policy.max_ping_strikes != 0) {
|
1886
1785
|
send_goaway(t,
|
1887
|
-
grpc_error_set_int(
|
1888
|
-
|
1889
|
-
|
1786
|
+
grpc_error_set_int(GRPC_ERROR_CREATE("too_many_pings"),
|
1787
|
+
grpc_core::StatusIntProperty::kHttp2Error,
|
1788
|
+
GRPC_HTTP2_ENHANCE_YOUR_CALM),
|
1789
|
+
/*immediate_disconnect_hint=*/true);
|
1890
1790
|
// The transport will be closed after the write is done
|
1891
1791
|
close_transport_locked(
|
1892
|
-
t, grpc_error_set_int(
|
1893
|
-
|
1894
|
-
|
1792
|
+
t, grpc_error_set_int(GRPC_ERROR_CREATE("Too many pings"),
|
1793
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
1794
|
+
GRPC_STATUS_UNAVAILABLE));
|
1895
1795
|
}
|
1896
1796
|
}
|
1897
1797
|
|
@@ -1910,8 +1810,8 @@ static void perform_transport_op_locked(void* stream_op,
|
|
1910
1810
|
grpc_chttp2_transport* t =
|
1911
1811
|
static_cast<grpc_chttp2_transport*>(op->handler_private.extra_arg);
|
1912
1812
|
|
1913
|
-
if (op->goaway_error
|
1914
|
-
send_goaway(t, op->goaway_error);
|
1813
|
+
if (!op->goaway_error.ok()) {
|
1814
|
+
send_goaway(t, op->goaway_error, /*immediate_disconnect_hint=*/false);
|
1915
1815
|
}
|
1916
1816
|
|
1917
1817
|
if (op->set_accept_stream) {
|
@@ -1940,11 +1840,13 @@ static void perform_transport_op_locked(void* stream_op,
|
|
1940
1840
|
t->state_tracker.RemoveWatcher(op->stop_connectivity_watch);
|
1941
1841
|
}
|
1942
1842
|
|
1943
|
-
if (op->disconnect_with_error
|
1843
|
+
if (!op->disconnect_with_error.ok()) {
|
1844
|
+
send_goaway(t, op->disconnect_with_error,
|
1845
|
+
/*immediate_disconnect_hint=*/true);
|
1944
1846
|
close_transport_locked(t, op->disconnect_with_error);
|
1945
1847
|
}
|
1946
1848
|
|
1947
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, op->on_consumed,
|
1849
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, absl::OkStatus());
|
1948
1850
|
|
1949
1851
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "transport_op");
|
1950
1852
|
}
|
@@ -1959,7 +1861,7 @@ static void perform_transport_op(grpc_transport* gt, grpc_transport_op* op) {
|
|
1959
1861
|
GRPC_CHTTP2_REF_TRANSPORT(t, "transport_op");
|
1960
1862
|
t->combiner->Run(GRPC_CLOSURE_INIT(&op->handler_private.closure,
|
1961
1863
|
perform_transport_op_locked, op, nullptr),
|
1962
|
-
|
1864
|
+
absl::OkStatus());
|
1963
1865
|
}
|
1964
1866
|
|
1965
1867
|
//
|
@@ -1971,11 +1873,7 @@ void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_chttp2_transport* t,
|
|
1971
1873
|
if (s->recv_initial_metadata_ready != nullptr &&
|
1972
1874
|
s->published_metadata[0] != GRPC_METADATA_NOT_PUBLISHED) {
|
1973
1875
|
if (s->seen_error) {
|
1974
|
-
|
1975
|
-
if (!s->pending_byte_stream) {
|
1976
|
-
grpc_slice_buffer_reset_and_unref_internal(
|
1977
|
-
&s->unprocessed_incoming_frames_buffer);
|
1978
|
-
}
|
1876
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
1979
1877
|
}
|
1980
1878
|
*s->recv_initial_metadata = std::move(s->initial_metadata_buffer);
|
1981
1879
|
s->recv_initial_metadata->Set(grpc_core::PeerString(), t->peer_string);
|
@@ -1992,84 +1890,103 @@ void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_chttp2_transport* t,
|
|
1992
1890
|
}
|
1993
1891
|
}
|
1994
1892
|
|
1995
|
-
void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport*
|
1893
|
+
void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* t,
|
1996
1894
|
grpc_chttp2_stream* s) {
|
1997
|
-
|
1998
|
-
|
1999
|
-
|
2000
|
-
|
2001
|
-
|
2002
|
-
|
2003
|
-
|
2004
|
-
|
2005
|
-
|
1895
|
+
if (s->recv_message_ready == nullptr) return;
|
1896
|
+
|
1897
|
+
grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext upd(
|
1898
|
+
&s->flow_control);
|
1899
|
+
grpc_error_handle error;
|
1900
|
+
|
1901
|
+
// Lambda is immediately invoked as a big scoped section that can be
|
1902
|
+
// exited out of at any point by returning.
|
1903
|
+
[&]() {
|
1904
|
+
if (grpc_http_trace.enabled()) {
|
1905
|
+
gpr_log(GPR_DEBUG,
|
1906
|
+
"maybe_complete_recv_message %p final_metadata_requested=%d "
|
1907
|
+
"seen_error=%d",
|
1908
|
+
s, s->final_metadata_requested, s->seen_error);
|
2006
1909
|
}
|
2007
|
-
if (
|
2008
|
-
|
2009
|
-
|
2010
|
-
|
2011
|
-
|
2012
|
-
|
2013
|
-
|
2014
|
-
|
2015
|
-
|
2016
|
-
|
2017
|
-
|
2018
|
-
|
2019
|
-
|
2020
|
-
|
2021
|
-
|
2022
|
-
|
2023
|
-
|
2024
|
-
|
1910
|
+
if (s->final_metadata_requested && s->seen_error) {
|
1911
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
1912
|
+
s->recv_message->reset();
|
1913
|
+
} else {
|
1914
|
+
if (s->frame_storage.length != 0) {
|
1915
|
+
while (true) {
|
1916
|
+
GPR_ASSERT(s->frame_storage.length > 0);
|
1917
|
+
int64_t min_progress_size;
|
1918
|
+
auto r = grpc_deframe_unprocessed_incoming_frames(
|
1919
|
+
s, &min_progress_size, &**s->recv_message, s->recv_message_flags);
|
1920
|
+
if (grpc_http_trace.enabled()) {
|
1921
|
+
gpr_log(GPR_DEBUG, "Deframe data frame: %s",
|
1922
|
+
grpc_core::PollToString(r, [](absl::Status r) {
|
1923
|
+
return r.ToString();
|
1924
|
+
}).c_str());
|
1925
|
+
}
|
1926
|
+
if (r.pending()) {
|
1927
|
+
if (s->read_closed) {
|
1928
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
1929
|
+
s->recv_message->reset();
|
1930
|
+
break;
|
1931
|
+
} else {
|
1932
|
+
upd.SetMinProgressSize(min_progress_size);
|
1933
|
+
return; // Out of lambda to enclosing function
|
1934
|
+
}
|
1935
|
+
} else {
|
1936
|
+
error = std::move(r.value());
|
1937
|
+
if (!error.ok()) {
|
1938
|
+
s->seen_error = true;
|
1939
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
1940
|
+
break;
|
1941
|
+
} else {
|
1942
|
+
if (t->channelz_socket != nullptr) {
|
1943
|
+
t->channelz_socket->RecordMessageReceived();
|
1944
|
+
}
|
1945
|
+
break;
|
1946
|
+
}
|
1947
|
+
}
|
2025
1948
|
}
|
1949
|
+
} else if (s->read_closed) {
|
1950
|
+
s->recv_message->reset();
|
1951
|
+
} else {
|
1952
|
+
upd.SetMinProgressSize(GRPC_HEADER_SIZE_IN_BYTES);
|
1953
|
+
return; // Out of lambda to enclosing function
|
2026
1954
|
}
|
2027
1955
|
}
|
2028
1956
|
// save the length of the buffer before handing control back to application
|
2029
1957
|
// threads. Needed to support correct flow control bookkeeping
|
2030
|
-
s->
|
2031
|
-
s->unprocessed_incoming_frames_buffer.length;
|
2032
|
-
if (error == GRPC_ERROR_NONE && *s->recv_message != nullptr) {
|
1958
|
+
if (error.ok() && s->recv_message->has_value()) {
|
2033
1959
|
null_then_sched_closure(&s->recv_message_ready);
|
2034
1960
|
} else if (s->published_metadata[1] != GRPC_METADATA_NOT_PUBLISHED) {
|
2035
|
-
*s->recv_message = nullptr;
|
2036
1961
|
if (s->call_failed_before_recv_message != nullptr) {
|
2037
1962
|
*s->call_failed_before_recv_message =
|
2038
1963
|
(s->published_metadata[1] != GRPC_METADATA_PUBLISHED_AT_CLOSE);
|
2039
1964
|
}
|
2040
1965
|
null_then_sched_closure(&s->recv_message_ready);
|
2041
1966
|
}
|
2042
|
-
|
2043
|
-
|
1967
|
+
}();
|
1968
|
+
|
1969
|
+
upd.SetPendingSize(s->frame_storage.length);
|
1970
|
+
grpc_chttp2_act_on_flowctl_action(upd.MakeAction(), t, s);
|
2044
1971
|
}
|
2045
1972
|
|
2046
1973
|
void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
|
2047
1974
|
grpc_chttp2_stream* s) {
|
2048
1975
|
grpc_chttp2_maybe_complete_recv_message(t, s);
|
1976
|
+
if (grpc_http_trace.enabled()) {
|
1977
|
+
gpr_log(GPR_DEBUG,
|
1978
|
+
"maybe_complete_recv_trailing_metadata cli=%d s=%p closure=%p "
|
1979
|
+
"read_closed=%d "
|
1980
|
+
"write_closed=%d %" PRIdPTR,
|
1981
|
+
t->is_client, s, s->recv_trailing_metadata_finished, s->read_closed,
|
1982
|
+
s->write_closed, s->frame_storage.length);
|
1983
|
+
}
|
2049
1984
|
if (s->recv_trailing_metadata_finished != nullptr && s->read_closed &&
|
2050
1985
|
s->write_closed) {
|
2051
1986
|
if (s->seen_error || !t->is_client) {
|
2052
|
-
|
2053
|
-
if (!s->pending_byte_stream) {
|
2054
|
-
grpc_slice_buffer_reset_and_unref_internal(
|
2055
|
-
&s->unprocessed_incoming_frames_buffer);
|
2056
|
-
}
|
1987
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
2057
1988
|
}
|
2058
|
-
|
2059
|
-
s->unprocessed_incoming_frames_buffer.length > 0;
|
2060
|
-
if (s->read_closed && s->frame_storage.length > 0 && !pending_data &&
|
2061
|
-
!s->seen_error && s->recv_trailing_metadata_finished != nullptr) {
|
2062
|
-
// Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
|
2063
|
-
// maybe decompress the next 5 bytes in the stream.
|
2064
|
-
grpc_slice_buffer_move_first(
|
2065
|
-
&s->frame_storage,
|
2066
|
-
std::min(s->frame_storage.length, size_t(GRPC_HEADER_SIZE_IN_BYTES)),
|
2067
|
-
&s->unprocessed_incoming_frames_buffer);
|
2068
|
-
if (s->unprocessed_incoming_frames_buffer.length > 0) {
|
2069
|
-
pending_data = true;
|
2070
|
-
}
|
2071
|
-
}
|
2072
|
-
if (s->read_closed && s->frame_storage.length == 0 && !pending_data &&
|
1989
|
+
if (s->read_closed && s->frame_storage.length == 0 &&
|
2073
1990
|
s->recv_trailing_metadata_finished != nullptr) {
|
2074
1991
|
grpc_transport_move_stats(&s->stats, s->collecting_stats);
|
2075
1992
|
s->collecting_stats = nullptr;
|
@@ -2089,26 +2006,12 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
|
|
2089
2006
|
t->incoming_stream = nullptr;
|
2090
2007
|
grpc_chttp2_parsing_become_skip_parser(t);
|
2091
2008
|
}
|
2092
|
-
if (s->pending_byte_stream) {
|
2093
|
-
if (s->on_next != nullptr) {
|
2094
|
-
grpc_core::Chttp2IncomingByteStream* bs = s->data_parser.parsing_frame;
|
2095
|
-
if (error == GRPC_ERROR_NONE) {
|
2096
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
|
2097
|
-
}
|
2098
|
-
bs->PublishError(error);
|
2099
|
-
bs->Unref();
|
2100
|
-
s->data_parser.parsing_frame = nullptr;
|
2101
|
-
} else {
|
2102
|
-
GRPC_ERROR_UNREF(s->byte_stream_error);
|
2103
|
-
s->byte_stream_error = GRPC_ERROR_REF(error);
|
2104
|
-
}
|
2105
|
-
}
|
2106
2009
|
|
2107
2010
|
if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
2108
2011
|
post_benign_reclaimer(t);
|
2109
2012
|
if (t->sent_goaway_state == GRPC_CHTTP2_FINAL_GOAWAY_SENT) {
|
2110
2013
|
close_transport_locked(
|
2111
|
-
t,
|
2014
|
+
t, GRPC_ERROR_CREATE_REFERENCING(
|
2112
2015
|
"Last stream closed after sending GOAWAY", &error, 1));
|
2113
2016
|
}
|
2114
2017
|
}
|
@@ -2118,8 +2021,6 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
|
|
2118
2021
|
grpc_chttp2_list_remove_stalled_by_stream(t, s);
|
2119
2022
|
grpc_chttp2_list_remove_stalled_by_transport(t, s);
|
2120
2023
|
|
2121
|
-
GRPC_ERROR_UNREF(error);
|
2122
|
-
|
2123
2024
|
maybe_start_some_streams(t);
|
2124
2025
|
}
|
2125
2026
|
|
@@ -2141,7 +2042,7 @@ void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2141
2042
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
|
2142
2043
|
}
|
2143
2044
|
}
|
2144
|
-
if (due_to_error
|
2045
|
+
if (!due_to_error.ok() && !s->seen_error) {
|
2145
2046
|
s->seen_error = true;
|
2146
2047
|
}
|
2147
2048
|
grpc_chttp2_mark_stream_closed(t, s, 1, 1, due_to_error);
|
@@ -2163,7 +2064,8 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2163
2064
|
// what we want - which is safe because we haven't told anyone
|
2164
2065
|
// about the metadata yet
|
2165
2066
|
if (s->published_metadata[1] == GRPC_METADATA_NOT_PUBLISHED ||
|
2166
|
-
s->recv_trailing_metadata_finished != nullptr
|
2067
|
+
s->recv_trailing_metadata_finished != nullptr ||
|
2068
|
+
!s->final_metadata_requested) {
|
2167
2069
|
s->trailing_metadata_buffer.Set(grpc_core::GrpcStatusMetadata(), status);
|
2168
2070
|
if (!message.empty()) {
|
2169
2071
|
s->trailing_metadata_buffer.Set(
|
@@ -2173,13 +2075,11 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2173
2075
|
s->published_metadata[1] = GRPC_METADATA_SYNTHESIZED_FROM_FAKE;
|
2174
2076
|
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
2175
2077
|
}
|
2176
|
-
|
2177
|
-
GRPC_ERROR_UNREF(error);
|
2178
2078
|
}
|
2179
2079
|
|
2180
2080
|
static void add_error(grpc_error_handle error, grpc_error_handle* refs,
|
2181
2081
|
size_t* nrefs) {
|
2182
|
-
if (error
|
2082
|
+
if (error.ok()) return;
|
2183
2083
|
for (size_t i = 0; i < *nrefs; i++) {
|
2184
2084
|
if (error == refs[i]) {
|
2185
2085
|
return;
|
@@ -2197,12 +2097,10 @@ static grpc_error_handle removal_error(grpc_error_handle extra_error,
|
|
2197
2097
|
add_error(s->read_closed_error, refs, &nrefs);
|
2198
2098
|
add_error(s->write_closed_error, refs, &nrefs);
|
2199
2099
|
add_error(extra_error, refs, &nrefs);
|
2200
|
-
grpc_error_handle error
|
2100
|
+
grpc_error_handle error;
|
2201
2101
|
if (nrefs > 0) {
|
2202
|
-
error =
|
2203
|
-
refs, nrefs);
|
2102
|
+
error = GRPC_ERROR_CREATE_REFERENCING(main_error_msg, refs, nrefs);
|
2204
2103
|
}
|
2205
|
-
GRPC_ERROR_UNREF(extra_error);
|
2206
2104
|
return error;
|
2207
2105
|
}
|
2208
2106
|
|
@@ -2212,12 +2110,11 @@ static void flush_write_list(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2212
2110
|
while (*list) {
|
2213
2111
|
grpc_chttp2_write_cb* cb = *list;
|
2214
2112
|
*list = cb->next;
|
2215
|
-
grpc_chttp2_complete_closure_step(t, s, &cb->closure,
|
2113
|
+
grpc_chttp2_complete_closure_step(t, s, &cb->closure, error,
|
2216
2114
|
"on_write_finished_cb");
|
2217
2115
|
cb->next = t->write_cb_pool;
|
2218
2116
|
t->write_cb_pool = cb;
|
2219
2117
|
}
|
2220
|
-
GRPC_ERROR_UNREF(error);
|
2221
2118
|
}
|
2222
2119
|
|
2223
2120
|
void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
|
@@ -2227,30 +2124,34 @@ void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
|
|
2227
2124
|
removal_error(error, s, "Pending writes failed due to stream closure");
|
2228
2125
|
s->send_initial_metadata = nullptr;
|
2229
2126
|
grpc_chttp2_complete_closure_step(t, s, &s->send_initial_metadata_finished,
|
2230
|
-
|
2231
|
-
"send_initial_metadata_finished");
|
2127
|
+
error, "send_initial_metadata_finished");
|
2232
2128
|
|
2233
2129
|
s->send_trailing_metadata = nullptr;
|
2234
2130
|
s->sent_trailing_metadata_op = nullptr;
|
2235
2131
|
grpc_chttp2_complete_closure_step(t, s, &s->send_trailing_metadata_finished,
|
2236
|
-
|
2237
|
-
"send_trailing_metadata_finished");
|
2132
|
+
error, "send_trailing_metadata_finished");
|
2238
2133
|
|
2239
|
-
s->
|
2240
|
-
grpc_chttp2_complete_closure_step(t, s, &s->fetching_send_message_finished,
|
2241
|
-
GRPC_ERROR_REF(error),
|
2134
|
+
grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished, error,
|
2242
2135
|
"fetching_send_message_finished");
|
2243
|
-
flush_write_list(t, s, &s->on_write_finished_cbs,
|
2136
|
+
flush_write_list(t, s, &s->on_write_finished_cbs, error);
|
2244
2137
|
flush_write_list(t, s, &s->on_flow_controlled_cbs, error);
|
2245
2138
|
}
|
2246
2139
|
|
2247
2140
|
void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
|
2248
2141
|
grpc_chttp2_stream* s, int close_reads,
|
2249
2142
|
int close_writes, grpc_error_handle error) {
|
2143
|
+
if (grpc_http_trace.enabled()) {
|
2144
|
+
gpr_log(
|
2145
|
+
GPR_DEBUG, "MARK_STREAM_CLOSED: t=%p s=%p(id=%d) %s [%s]", t, s, s->id,
|
2146
|
+
(close_reads && close_writes)
|
2147
|
+
? "read+write"
|
2148
|
+
: (close_reads ? "read" : (close_writes ? "write" : "nothing??")),
|
2149
|
+
error.ToString().c_str());
|
2150
|
+
}
|
2250
2151
|
if (s->read_closed && s->write_closed) {
|
2251
2152
|
// already closed, but we should still fake the status if needed.
|
2252
2153
|
grpc_error_handle overall_error = removal_error(error, s, "Stream removed");
|
2253
|
-
if (overall_error
|
2154
|
+
if (!overall_error.ok()) {
|
2254
2155
|
grpc_chttp2_fake_status(t, s, overall_error);
|
2255
2156
|
}
|
2256
2157
|
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
@@ -2259,26 +2160,25 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
|
|
2259
2160
|
bool closed_read = false;
|
2260
2161
|
bool became_closed = false;
|
2261
2162
|
if (close_reads && !s->read_closed) {
|
2262
|
-
s->read_closed_error =
|
2163
|
+
s->read_closed_error = error;
|
2263
2164
|
s->read_closed = true;
|
2264
2165
|
closed_read = true;
|
2265
2166
|
}
|
2266
2167
|
if (close_writes && !s->write_closed) {
|
2267
|
-
s->write_closed_error =
|
2168
|
+
s->write_closed_error = error;
|
2268
2169
|
s->write_closed = true;
|
2269
|
-
grpc_chttp2_fail_pending_writes(t, s,
|
2170
|
+
grpc_chttp2_fail_pending_writes(t, s, error);
|
2270
2171
|
}
|
2271
2172
|
if (s->read_closed && s->write_closed) {
|
2272
2173
|
became_closed = true;
|
2273
|
-
grpc_error_handle overall_error =
|
2274
|
-
removal_error(GRPC_ERROR_REF(error), s, "Stream removed");
|
2174
|
+
grpc_error_handle overall_error = removal_error(error, s, "Stream removed");
|
2275
2175
|
if (s->id != 0) {
|
2276
|
-
remove_stream(t, s->id,
|
2176
|
+
remove_stream(t, s->id, overall_error);
|
2277
2177
|
} else {
|
2278
2178
|
// Purge streams waiting on concurrency still waiting for id assignment
|
2279
2179
|
grpc_chttp2_list_remove_waiting_for_concurrency(t, s);
|
2280
2180
|
}
|
2281
|
-
if (overall_error
|
2181
|
+
if (!overall_error.ok()) {
|
2282
2182
|
grpc_chttp2_fake_status(t, s, overall_error);
|
2283
2183
|
}
|
2284
2184
|
}
|
@@ -2292,10 +2192,11 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
|
|
2292
2192
|
grpc_chttp2_maybe_complete_recv_message(t, s);
|
2293
2193
|
}
|
2294
2194
|
if (became_closed) {
|
2195
|
+
s->stats.latency =
|
2196
|
+
gpr_time_sub(gpr_now(GPR_CLOCK_MONOTONIC), s->creation_time);
|
2295
2197
|
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
2296
2198
|
GRPC_CHTTP2_STREAM_UNREF(s, "chttp2");
|
2297
2199
|
}
|
2298
|
-
GRPC_ERROR_UNREF(error);
|
2299
2200
|
}
|
2300
2201
|
|
2301
2202
|
static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
@@ -2378,8 +2279,8 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2378
2279
|
|
2379
2280
|
status_hdr = GRPC_SLICE_MALLOC(15 + (grpc_status >= 10));
|
2380
2281
|
p = GRPC_SLICE_START_PTR(status_hdr);
|
2381
|
-
*p++ = 0x00;
|
2382
|
-
*p++ = 11;
|
2282
|
+
*p++ = 0x00; // literal header, not indexed
|
2283
|
+
*p++ = 11; // len(grpc-status)
|
2383
2284
|
*p++ = 'g';
|
2384
2285
|
*p++ = 'r';
|
2385
2286
|
*p++ = 'p';
|
@@ -2404,11 +2305,11 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2404
2305
|
|
2405
2306
|
size_t msg_len = message.length();
|
2406
2307
|
GPR_ASSERT(msg_len <= UINT32_MAX);
|
2407
|
-
grpc_core::VarintWriter<1> msg_len_writer(msg_len);
|
2308
|
+
grpc_core::VarintWriter<1> msg_len_writer(static_cast<uint32_t>(msg_len));
|
2408
2309
|
message_pfx = GRPC_SLICE_MALLOC(14 + msg_len_writer.length());
|
2409
2310
|
p = GRPC_SLICE_START_PTR(message_pfx);
|
2410
|
-
*p++ = 0x00;
|
2411
|
-
*p++ = 12;
|
2311
|
+
*p++ = 0x00; // literal header, not indexed
|
2312
|
+
*p++ = 12; // len(grpc-message)
|
2412
2313
|
*p++ = 'g';
|
2413
2314
|
*p++ = 'r';
|
2414
2315
|
*p++ = 'p';
|
@@ -2465,7 +2366,7 @@ struct cancel_stream_cb_args {
|
|
2465
2366
|
static void cancel_stream_cb(void* user_data, uint32_t /*key*/, void* stream) {
|
2466
2367
|
cancel_stream_cb_args* args = static_cast<cancel_stream_cb_args*>(user_data);
|
2467
2368
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(stream);
|
2468
|
-
grpc_chttp2_cancel_stream(args->t, s,
|
2369
|
+
grpc_chttp2_cancel_stream(args->t, s, args->error);
|
2469
2370
|
}
|
2470
2371
|
|
2471
2372
|
static void end_all_the_calls(grpc_chttp2_transport* t,
|
@@ -2473,14 +2374,14 @@ static void end_all_the_calls(grpc_chttp2_transport* t,
|
|
2473
2374
|
intptr_t http2_error;
|
2474
2375
|
// If there is no explicit grpc or HTTP/2 error, set to UNAVAILABLE on server.
|
2475
2376
|
if (!t->is_client && !grpc_error_has_clear_grpc_status(error) &&
|
2476
|
-
!grpc_error_get_int(error,
|
2477
|
-
|
2377
|
+
!grpc_error_get_int(error, grpc_core::StatusIntProperty::kHttp2Error,
|
2378
|
+
&http2_error)) {
|
2379
|
+
error = grpc_error_set_int(error, grpc_core::StatusIntProperty::kRpcStatus,
|
2478
2380
|
GRPC_STATUS_UNAVAILABLE);
|
2479
2381
|
}
|
2480
|
-
cancel_unstarted_streams(t,
|
2382
|
+
cancel_unstarted_streams(t, error);
|
2481
2383
|
cancel_stream_cb_args args = {error, t};
|
2482
2384
|
grpc_chttp2_stream_map_for_each(&t->stream_map, cancel_stream_cb, &args);
|
2483
|
-
GRPC_ERROR_UNREF(error);
|
2484
2385
|
}
|
2485
2386
|
|
2486
2387
|
//
|
@@ -2507,8 +2408,11 @@ void grpc_chttp2_act_on_flowctl_action(
|
|
2507
2408
|
const grpc_core::chttp2::FlowControlAction& action,
|
2508
2409
|
grpc_chttp2_transport* t, grpc_chttp2_stream* s) {
|
2509
2410
|
WithUrgency(t, action.send_stream_update(),
|
2510
|
-
GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL,
|
2511
|
-
|
2411
|
+
GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL, [t, s]() {
|
2412
|
+
if (s->id != 0 && !s->read_closed) {
|
2413
|
+
grpc_chttp2_mark_stream_writable(t, s);
|
2414
|
+
}
|
2415
|
+
});
|
2512
2416
|
WithUrgency(t, action.send_transport_update(),
|
2513
2417
|
GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL, []() {});
|
2514
2418
|
WithUrgency(t, action.send_initial_window_update(),
|
@@ -2522,31 +2426,39 @@ void grpc_chttp2_act_on_flowctl_action(
|
|
2522
2426
|
queue_setting_update(t, GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
|
2523
2427
|
action.max_frame_size());
|
2524
2428
|
});
|
2429
|
+
if (t->enable_preferred_rx_crypto_frame_advertisement) {
|
2430
|
+
WithUrgency(
|
2431
|
+
t, action.preferred_rx_crypto_frame_size_update(),
|
2432
|
+
GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS, [t, &action]() {
|
2433
|
+
queue_setting_update(
|
2434
|
+
t, GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE,
|
2435
|
+
action.preferred_rx_crypto_frame_size());
|
2436
|
+
});
|
2437
|
+
}
|
2525
2438
|
}
|
2526
2439
|
|
2527
2440
|
static grpc_error_handle try_http_parsing(grpc_chttp2_transport* t) {
|
2528
2441
|
grpc_http_parser parser;
|
2529
2442
|
size_t i = 0;
|
2530
|
-
grpc_error_handle error
|
2443
|
+
grpc_error_handle error;
|
2531
2444
|
grpc_http_response response;
|
2532
2445
|
|
2533
2446
|
grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response);
|
2534
2447
|
|
2535
|
-
grpc_error_handle parse_error
|
2536
|
-
for (; i < t->read_buffer.count && parse_error
|
2448
|
+
grpc_error_handle parse_error;
|
2449
|
+
for (; i < t->read_buffer.count && parse_error.ok(); i++) {
|
2537
2450
|
parse_error =
|
2538
2451
|
grpc_http_parser_parse(&parser, t->read_buffer.slices[i], nullptr);
|
2539
2452
|
}
|
2540
|
-
if (parse_error
|
2541
|
-
(parse_error = grpc_http_parser_eof(&parser)) ==
|
2453
|
+
if (parse_error.ok() &&
|
2454
|
+
(parse_error = grpc_http_parser_eof(&parser)) == absl::OkStatus()) {
|
2542
2455
|
error = grpc_error_set_int(
|
2543
|
-
grpc_error_set_int(
|
2544
|
-
|
2545
|
-
|
2546
|
-
|
2456
|
+
grpc_error_set_int(
|
2457
|
+
GRPC_ERROR_CREATE("Trying to connect an http1.x server"),
|
2458
|
+
grpc_core::StatusIntProperty::kHttpStatus, response.status),
|
2459
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
2547
2460
|
grpc_http2_status_to_grpc_status(response.status));
|
2548
2461
|
}
|
2549
|
-
GRPC_ERROR_UNREF(parse_error);
|
2550
2462
|
|
2551
2463
|
grpc_http_parser_destroy(&parser);
|
2552
2464
|
grpc_http_response_destroy(&response);
|
@@ -2557,44 +2469,31 @@ static void read_action(void* tp, grpc_error_handle error) {
|
|
2557
2469
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2558
2470
|
t->combiner->Run(
|
2559
2471
|
GRPC_CLOSURE_INIT(&t->read_action_locked, read_action_locked, t, nullptr),
|
2560
|
-
|
2472
|
+
error);
|
2561
2473
|
}
|
2562
2474
|
|
2563
2475
|
static void read_action_locked(void* tp, grpc_error_handle error) {
|
2564
|
-
GPR_TIMER_SCOPE("reading_action_locked", 0);
|
2565
|
-
|
2566
2476
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2567
2477
|
|
2568
|
-
(void)GRPC_ERROR_REF(error);
|
2569
|
-
|
2570
2478
|
grpc_error_handle err = error;
|
2571
|
-
if (err
|
2572
|
-
err = grpc_error_set_int(
|
2573
|
-
|
2574
|
-
|
2575
|
-
t->write_state);
|
2479
|
+
if (!err.ok()) {
|
2480
|
+
err = grpc_error_set_int(
|
2481
|
+
GRPC_ERROR_CREATE_REFERENCING("Endpoint read failed", &err, 1),
|
2482
|
+
grpc_core::StatusIntProperty::kOccurredDuringWrite, t->write_state);
|
2576
2483
|
}
|
2577
2484
|
std::swap(err, error);
|
2578
|
-
|
2579
|
-
if (t->closed_with_error == GRPC_ERROR_NONE) {
|
2580
|
-
GPR_TIMER_SCOPE("reading_action.parse", 0);
|
2485
|
+
if (t->closed_with_error.ok()) {
|
2581
2486
|
size_t i = 0;
|
2582
|
-
grpc_error_handle errors[3] = {
|
2583
|
-
|
2584
|
-
for (; i < t->read_buffer.count && errors[1] == GRPC_ERROR_NONE; i++) {
|
2487
|
+
grpc_error_handle errors[3] = {error, absl::OkStatus(), absl::OkStatus()};
|
2488
|
+
for (; i < t->read_buffer.count && errors[1] == absl::OkStatus(); i++) {
|
2585
2489
|
errors[1] = grpc_chttp2_perform_read(t, t->read_buffer.slices[i]);
|
2586
2490
|
}
|
2587
|
-
if (errors[1] !=
|
2491
|
+
if (errors[1] != absl::OkStatus()) {
|
2588
2492
|
errors[2] = try_http_parsing(t);
|
2589
|
-
|
2590
|
-
|
2591
|
-
"Failed parsing HTTP/2", errors, GPR_ARRAY_SIZE(errors));
|
2592
|
-
}
|
2593
|
-
for (i = 0; i < GPR_ARRAY_SIZE(errors); i++) {
|
2594
|
-
GRPC_ERROR_UNREF(errors[i]);
|
2493
|
+
error = GRPC_ERROR_CREATE_REFERENCING("Failed parsing HTTP/2", errors,
|
2494
|
+
GPR_ARRAY_SIZE(errors));
|
2595
2495
|
}
|
2596
2496
|
|
2597
|
-
GPR_TIMER_SCOPE("post_parse_locked", 0);
|
2598
2497
|
if (t->initial_window_update != 0) {
|
2599
2498
|
if (t->initial_window_update > 0) {
|
2600
2499
|
grpc_chttp2_stream* s;
|
@@ -2608,29 +2507,28 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
|
|
2608
2507
|
}
|
2609
2508
|
}
|
2610
2509
|
|
2611
|
-
GPR_TIMER_SCOPE("post_reading_action_locked", 0);
|
2612
2510
|
bool keep_reading = false;
|
2613
|
-
if (error
|
2614
|
-
error =
|
2615
|
-
|
2511
|
+
if (error.ok() && !t->closed_with_error.ok()) {
|
2512
|
+
error = GRPC_ERROR_CREATE_REFERENCING("Transport closed",
|
2513
|
+
&t->closed_with_error, 1);
|
2616
2514
|
}
|
2617
|
-
if (error
|
2515
|
+
if (!error.ok()) {
|
2618
2516
|
// If a goaway frame was received, this might be the reason why the read
|
2619
2517
|
// failed. Add this info to the error
|
2620
|
-
if (t->goaway_error
|
2621
|
-
error = grpc_error_add_child(error,
|
2518
|
+
if (!t->goaway_error.ok()) {
|
2519
|
+
error = grpc_error_add_child(error, t->goaway_error);
|
2622
2520
|
}
|
2623
2521
|
|
2624
|
-
close_transport_locked(t,
|
2522
|
+
close_transport_locked(t, error);
|
2625
2523
|
t->endpoint_reading = 0;
|
2626
|
-
} else if (t->closed_with_error
|
2524
|
+
} else if (t->closed_with_error.ok()) {
|
2627
2525
|
keep_reading = true;
|
2628
2526
|
// Since we have read a byte, reset the keepalive timer
|
2629
2527
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
|
2630
|
-
|
2528
|
+
maybe_reset_keepalive_ping_timer_locked(t);
|
2631
2529
|
}
|
2632
2530
|
}
|
2633
|
-
|
2531
|
+
grpc_slice_buffer_reset_and_unref(&t->read_buffer);
|
2634
2532
|
|
2635
2533
|
if (keep_reading) {
|
2636
2534
|
if (t->num_pending_induced_frames >= DEFAULT_MAX_PENDING_INDUCED_FRAMES) {
|
@@ -2646,22 +2544,20 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
|
|
2646
2544
|
} else {
|
2647
2545
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "reading_action");
|
2648
2546
|
}
|
2649
|
-
|
2650
|
-
GRPC_ERROR_UNREF(error);
|
2651
2547
|
}
|
2652
2548
|
|
2653
2549
|
static void continue_read_action_locked(grpc_chttp2_transport* t) {
|
2654
|
-
const bool urgent = t->goaway_error
|
2550
|
+
const bool urgent = !t->goaway_error.ok();
|
2655
2551
|
GRPC_CLOSURE_INIT(&t->read_action_locked, read_action, t,
|
2656
2552
|
grpc_schedule_on_exec_ctx);
|
2657
|
-
grpc_endpoint_read(t->ep, &t->read_buffer, &t->read_action_locked, urgent
|
2658
|
-
|
2553
|
+
grpc_endpoint_read(t->ep, &t->read_buffer, &t->read_action_locked, urgent,
|
2554
|
+
grpc_chttp2_min_read_progress_size(t));
|
2659
2555
|
}
|
2660
2556
|
|
2661
2557
|
// t is reffed prior to calling the first time, and once the callback chain
|
2662
2558
|
// that kicks off finishes, it's unreffed
|
2663
2559
|
void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
|
2664
|
-
t->flow_control
|
2560
|
+
t->flow_control.bdp_estimator()->SchedulePing();
|
2665
2561
|
send_ping_locked(
|
2666
2562
|
t,
|
2667
2563
|
GRPC_CLOSURE_INIT(&t->start_bdp_ping_locked, start_bdp_ping, t,
|
@@ -2675,23 +2571,23 @@ static void start_bdp_ping(void* tp, grpc_error_handle error) {
|
|
2675
2571
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2676
2572
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_bdp_ping_locked,
|
2677
2573
|
start_bdp_ping_locked, t, nullptr),
|
2678
|
-
|
2574
|
+
error);
|
2679
2575
|
}
|
2680
2576
|
|
2681
2577
|
static void start_bdp_ping_locked(void* tp, grpc_error_handle error) {
|
2682
2578
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2683
2579
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
2684
2580
|
gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string.c_str(),
|
2685
|
-
|
2581
|
+
grpc_core::StatusToString(error).c_str());
|
2686
2582
|
}
|
2687
|
-
if (error
|
2583
|
+
if (!error.ok() || !t->closed_with_error.ok()) {
|
2688
2584
|
return;
|
2689
2585
|
}
|
2690
2586
|
// Reset the keepalive ping timer
|
2691
2587
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
|
2692
|
-
|
2588
|
+
maybe_reset_keepalive_ping_timer_locked(t);
|
2693
2589
|
}
|
2694
|
-
t->flow_control
|
2590
|
+
t->flow_control.bdp_estimator()->StartPing();
|
2695
2591
|
t->bdp_ping_started = true;
|
2696
2592
|
}
|
2697
2593
|
|
@@ -2699,16 +2595,16 @@ static void finish_bdp_ping(void* tp, grpc_error_handle error) {
|
|
2699
2595
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2700
2596
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
|
2701
2597
|
finish_bdp_ping_locked, t, nullptr),
|
2702
|
-
|
2598
|
+
error);
|
2703
2599
|
}
|
2704
2600
|
|
2705
2601
|
static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
|
2706
2602
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2707
2603
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
2708
2604
|
gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string.c_str(),
|
2709
|
-
|
2605
|
+
grpc_core::StatusToString(error).c_str());
|
2710
2606
|
}
|
2711
|
-
if (error
|
2607
|
+
if (!error.ok() || !t->closed_with_error.ok()) {
|
2712
2608
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
2713
2609
|
return;
|
2714
2610
|
}
|
@@ -2717,40 +2613,37 @@ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
|
|
2717
2613
|
// finish_bdp_ping_locked to be run later.
|
2718
2614
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
|
2719
2615
|
finish_bdp_ping_locked, t, nullptr),
|
2720
|
-
|
2616
|
+
error);
|
2721
2617
|
return;
|
2722
2618
|
}
|
2723
2619
|
t->bdp_ping_started = false;
|
2724
2620
|
grpc_core::Timestamp next_ping =
|
2725
|
-
t->flow_control
|
2726
|
-
grpc_chttp2_act_on_flowctl_action(t->flow_control
|
2621
|
+
t->flow_control.bdp_estimator()->CompletePing();
|
2622
|
+
grpc_chttp2_act_on_flowctl_action(t->flow_control.PeriodicUpdate(), t,
|
2727
2623
|
nullptr);
|
2728
|
-
GPR_ASSERT(!t->
|
2729
|
-
t->
|
2730
|
-
|
2731
|
-
|
2732
|
-
|
2733
|
-
|
2624
|
+
GPR_ASSERT(!t->next_bdp_ping_timer_handle.has_value());
|
2625
|
+
t->next_bdp_ping_timer_handle =
|
2626
|
+
t->event_engine->RunAfter(next_ping - grpc_core::Timestamp::Now(), [t] {
|
2627
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2628
|
+
grpc_core::ExecCtx exec_ctx;
|
2629
|
+
next_bdp_ping_timer_expired(t);
|
2630
|
+
});
|
2734
2631
|
}
|
2735
2632
|
|
2736
|
-
static void next_bdp_ping_timer_expired(
|
2737
|
-
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2633
|
+
static void next_bdp_ping_timer_expired(grpc_chttp2_transport* t) {
|
2738
2634
|
t->combiner->Run(
|
2739
2635
|
GRPC_CLOSURE_INIT(&t->next_bdp_ping_timer_expired_locked,
|
2740
2636
|
next_bdp_ping_timer_expired_locked, t, nullptr),
|
2741
|
-
|
2637
|
+
absl::OkStatus());
|
2742
2638
|
}
|
2743
2639
|
|
2744
|
-
static void next_bdp_ping_timer_expired_locked(
|
2745
|
-
|
2640
|
+
static void next_bdp_ping_timer_expired_locked(
|
2641
|
+
void* tp, GRPC_UNUSED grpc_error_handle error) {
|
2642
|
+
GPR_DEBUG_ASSERT(error.ok());
|
2746
2643
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2747
|
-
GPR_ASSERT(t->
|
2748
|
-
t->
|
2749
|
-
if (
|
2750
|
-
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
2751
|
-
return;
|
2752
|
-
}
|
2753
|
-
if (t->flow_control->bdp_estimator()->accumulator() == 0) {
|
2644
|
+
GPR_ASSERT(t->next_bdp_ping_timer_handle.has_value());
|
2645
|
+
t->next_bdp_ping_timer_handle.reset();
|
2646
|
+
if (t->flow_control.bdp_estimator()->accumulator() == 0) {
|
2754
2647
|
// Block the bdp ping till we receive more data.
|
2755
2648
|
t->bdp_ping_blocked = true;
|
2756
2649
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
@@ -2818,42 +2711,37 @@ void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
|
|
2818
2711
|
}
|
2819
2712
|
}
|
2820
2713
|
|
2821
|
-
static void init_keepalive_ping(
|
2822
|
-
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2714
|
+
static void init_keepalive_ping(grpc_chttp2_transport* t) {
|
2823
2715
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked,
|
2824
2716
|
init_keepalive_ping_locked, t, nullptr),
|
2825
|
-
|
2717
|
+
absl::OkStatus());
|
2826
2718
|
}
|
2827
2719
|
|
2828
|
-
static void init_keepalive_ping_locked(void* arg,
|
2720
|
+
static void init_keepalive_ping_locked(void* arg,
|
2721
|
+
GRPC_UNUSED grpc_error_handle error) {
|
2722
|
+
GPR_DEBUG_ASSERT(error.ok());
|
2829
2723
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2830
2724
|
GPR_ASSERT(t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING);
|
2831
|
-
|
2725
|
+
GPR_ASSERT(t->keepalive_ping_timer_handle.has_value());
|
2726
|
+
t->keepalive_ping_timer_handle.reset();
|
2727
|
+
if (t->destroying || !t->closed_with_error.ok()) {
|
2832
2728
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
|
2833
|
-
} else
|
2729
|
+
} else {
|
2834
2730
|
if (t->keepalive_permit_without_calls ||
|
2835
2731
|
grpc_chttp2_stream_map_size(&t->stream_map) > 0) {
|
2836
2732
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_PINGING;
|
2837
2733
|
GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive ping end");
|
2838
|
-
grpc_timer_init_unset(&t->keepalive_watchdog_timer);
|
2839
2734
|
send_keepalive_ping_locked(t);
|
2840
2735
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING);
|
2841
2736
|
} else {
|
2842
2737
|
GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
|
2843
|
-
|
2844
|
-
|
2845
|
-
|
2846
|
-
|
2847
|
-
|
2848
|
-
|
2849
|
-
|
2850
|
-
// The keepalive ping timer may be cancelled by bdp
|
2851
|
-
GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
|
2852
|
-
GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked, init_keepalive_ping, t,
|
2853
|
-
grpc_schedule_on_exec_ctx);
|
2854
|
-
grpc_timer_init(&t->keepalive_ping_timer,
|
2855
|
-
grpc_core::ExecCtx::Get()->Now() + t->keepalive_time,
|
2856
|
-
&t->init_keepalive_ping_locked);
|
2738
|
+
t->keepalive_ping_timer_handle =
|
2739
|
+
t->event_engine->RunAfter(t->keepalive_time, [t] {
|
2740
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2741
|
+
grpc_core::ExecCtx exec_ctx;
|
2742
|
+
init_keepalive_ping(t);
|
2743
|
+
});
|
2744
|
+
}
|
2857
2745
|
}
|
2858
2746
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
|
2859
2747
|
}
|
@@ -2862,12 +2750,12 @@ static void start_keepalive_ping(void* arg, grpc_error_handle error) {
|
|
2862
2750
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2863
2751
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
|
2864
2752
|
start_keepalive_ping_locked, t, nullptr),
|
2865
|
-
|
2753
|
+
error);
|
2866
2754
|
}
|
2867
2755
|
|
2868
2756
|
static void start_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
2869
2757
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2870
|
-
if (error
|
2758
|
+
if (!error.ok()) {
|
2871
2759
|
return;
|
2872
2760
|
}
|
2873
2761
|
if (t->channelz_socket != nullptr) {
|
@@ -2878,11 +2766,12 @@ static void start_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
|
2878
2766
|
gpr_log(GPR_INFO, "%s: Start keepalive ping", t->peer_string.c_str());
|
2879
2767
|
}
|
2880
2768
|
GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive watchdog");
|
2881
|
-
|
2882
|
-
|
2883
|
-
|
2884
|
-
|
2885
|
-
|
2769
|
+
t->keepalive_watchdog_timer_handle =
|
2770
|
+
t->event_engine->RunAfter(t->keepalive_timeout, [t] {
|
2771
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2772
|
+
grpc_core::ExecCtx exec_ctx;
|
2773
|
+
keepalive_watchdog_fired(t);
|
2774
|
+
});
|
2886
2775
|
t->keepalive_ping_started = true;
|
2887
2776
|
}
|
2888
2777
|
|
@@ -2890,13 +2779,13 @@ static void finish_keepalive_ping(void* arg, grpc_error_handle error) {
|
|
2890
2779
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2891
2780
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
|
2892
2781
|
finish_keepalive_ping_locked, t, nullptr),
|
2893
|
-
|
2782
|
+
error);
|
2894
2783
|
}
|
2895
2784
|
|
2896
2785
|
static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
2897
2786
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2898
2787
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
|
2899
|
-
if (error
|
2788
|
+
if (error.ok()) {
|
2900
2789
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
|
2901
2790
|
GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
|
2902
2791
|
gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string.c_str());
|
@@ -2907,56 +2796,81 @@ static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
|
2907
2796
|
t->combiner->Run(
|
2908
2797
|
GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
|
2909
2798
|
finish_keepalive_ping_locked, t, nullptr),
|
2910
|
-
|
2799
|
+
error);
|
2911
2800
|
return;
|
2912
2801
|
}
|
2913
2802
|
t->keepalive_ping_started = false;
|
2914
2803
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_WAITING;
|
2915
|
-
|
2804
|
+
if (t->keepalive_watchdog_timer_handle.has_value()) {
|
2805
|
+
if (t->event_engine->Cancel(*t->keepalive_watchdog_timer_handle)) {
|
2806
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
|
2807
|
+
t->keepalive_watchdog_timer_handle.reset();
|
2808
|
+
}
|
2809
|
+
}
|
2810
|
+
GPR_ASSERT(!t->keepalive_ping_timer_handle.has_value());
|
2916
2811
|
GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
|
2917
|
-
|
2918
|
-
|
2919
|
-
|
2920
|
-
|
2921
|
-
|
2812
|
+
t->keepalive_ping_timer_handle =
|
2813
|
+
t->event_engine->RunAfter(t->keepalive_time, [t] {
|
2814
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2815
|
+
grpc_core::ExecCtx exec_ctx;
|
2816
|
+
init_keepalive_ping(t);
|
2817
|
+
});
|
2922
2818
|
}
|
2923
2819
|
}
|
2924
2820
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive ping end");
|
2925
2821
|
}
|
2926
2822
|
|
2927
|
-
static void keepalive_watchdog_fired(
|
2928
|
-
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2823
|
+
static void keepalive_watchdog_fired(grpc_chttp2_transport* t) {
|
2929
2824
|
t->combiner->Run(
|
2930
2825
|
GRPC_CLOSURE_INIT(&t->keepalive_watchdog_fired_locked,
|
2931
2826
|
keepalive_watchdog_fired_locked, t, nullptr),
|
2932
|
-
|
2827
|
+
absl::OkStatus());
|
2933
2828
|
}
|
2934
2829
|
|
2935
|
-
static void keepalive_watchdog_fired_locked(
|
2936
|
-
|
2830
|
+
static void keepalive_watchdog_fired_locked(
|
2831
|
+
void* arg, GRPC_UNUSED grpc_error_handle error) {
|
2832
|
+
GPR_DEBUG_ASSERT(error.ok());
|
2937
2833
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2834
|
+
GPR_ASSERT(t->keepalive_watchdog_timer_handle.has_value());
|
2835
|
+
t->keepalive_watchdog_timer_handle.reset();
|
2938
2836
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
|
2939
|
-
|
2940
|
-
|
2941
|
-
|
2942
|
-
|
2943
|
-
|
2944
|
-
|
2945
|
-
|
2946
|
-
GRPC_ERROR_INT_GRPC_STATUS,
|
2947
|
-
GRPC_STATUS_UNAVAILABLE));
|
2948
|
-
}
|
2837
|
+
gpr_log(GPR_INFO, "%s: Keepalive watchdog fired. Closing transport.",
|
2838
|
+
t->peer_string.c_str());
|
2839
|
+
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
|
2840
|
+
close_transport_locked(
|
2841
|
+
t, grpc_error_set_int(GRPC_ERROR_CREATE("keepalive watchdog timeout"),
|
2842
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
2843
|
+
GRPC_STATUS_UNAVAILABLE));
|
2949
2844
|
} else {
|
2950
|
-
//
|
2951
|
-
// finish_keepalive_ping_locked.
|
2952
|
-
|
2953
|
-
|
2954
|
-
|
2955
|
-
}
|
2845
|
+
// If keepalive_state is not PINGING, we consider it as an error. Maybe the
|
2846
|
+
// cancellation failed in finish_keepalive_ping_locked. Users have seen
|
2847
|
+
// other states: https://github.com/grpc/grpc/issues/32085.
|
2848
|
+
gpr_log(GPR_ERROR, "keepalive_ping_end state error: %d (expect: %d)",
|
2849
|
+
t->keepalive_state, GRPC_CHTTP2_KEEPALIVE_STATE_PINGING);
|
2956
2850
|
}
|
2957
2851
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
|
2958
2852
|
}
|
2959
2853
|
|
2854
|
+
static void maybe_reset_keepalive_ping_timer_locked(grpc_chttp2_transport* t) {
|
2855
|
+
if (t->keepalive_ping_timer_handle.has_value()) {
|
2856
|
+
if (t->event_engine->Cancel(*t->keepalive_ping_timer_handle)) {
|
2857
|
+
// Cancel succeeds, resets the keepalive ping timer. Note that we don't
|
2858
|
+
// need to Ref or Unref here since we still hold the Ref.
|
2859
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
|
2860
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
|
2861
|
+
gpr_log(GPR_INFO, "%s: Keepalive ping cancelled. Resetting timer.",
|
2862
|
+
t->peer_string.c_str());
|
2863
|
+
}
|
2864
|
+
t->keepalive_ping_timer_handle =
|
2865
|
+
t->event_engine->RunAfter(t->keepalive_time, [t] {
|
2866
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2867
|
+
grpc_core::ExecCtx exec_ctx;
|
2868
|
+
init_keepalive_ping(t);
|
2869
|
+
});
|
2870
|
+
}
|
2871
|
+
}
|
2872
|
+
}
|
2873
|
+
|
2960
2874
|
//
|
2961
2875
|
// CALLBACK LOOP
|
2962
2876
|
//
|
@@ -2986,187 +2900,6 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* /*gs*/,
|
|
2986
2900
|
grpc_endpoint_add_to_pollset_set(t->ep, pollset_set);
|
2987
2901
|
}
|
2988
2902
|
|
2989
|
-
//
|
2990
|
-
// BYTE STREAM
|
2991
|
-
//
|
2992
|
-
|
2993
|
-
static void reset_byte_stream(void* arg, grpc_error_handle error) {
|
2994
|
-
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
|
2995
|
-
s->pending_byte_stream = false;
|
2996
|
-
if (error == GRPC_ERROR_NONE) {
|
2997
|
-
grpc_chttp2_maybe_complete_recv_message(s->t, s);
|
2998
|
-
grpc_chttp2_maybe_complete_recv_trailing_metadata(s->t, s);
|
2999
|
-
} else {
|
3000
|
-
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
3001
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, s->on_next, GRPC_ERROR_REF(error));
|
3002
|
-
s->on_next = nullptr;
|
3003
|
-
GRPC_ERROR_UNREF(s->byte_stream_error);
|
3004
|
-
s->byte_stream_error = GRPC_ERROR_NONE;
|
3005
|
-
grpc_chttp2_cancel_stream(s->t, s, GRPC_ERROR_REF(error));
|
3006
|
-
s->byte_stream_error = GRPC_ERROR_REF(error);
|
3007
|
-
}
|
3008
|
-
}
|
3009
|
-
|
3010
|
-
namespace grpc_core {
|
3011
|
-
|
3012
|
-
Chttp2IncomingByteStream::Chttp2IncomingByteStream(
|
3013
|
-
grpc_chttp2_transport* transport, grpc_chttp2_stream* stream,
|
3014
|
-
uint32_t frame_size, uint32_t flags)
|
3015
|
-
: ByteStream(frame_size, flags),
|
3016
|
-
transport_(transport),
|
3017
|
-
stream_(stream),
|
3018
|
-
refs_(2),
|
3019
|
-
remaining_bytes_(frame_size) {
|
3020
|
-
GRPC_ERROR_UNREF(stream->byte_stream_error);
|
3021
|
-
stream->byte_stream_error = GRPC_ERROR_NONE;
|
3022
|
-
}
|
3023
|
-
|
3024
|
-
void Chttp2IncomingByteStream::OrphanLocked(
|
3025
|
-
void* arg, grpc_error_handle /*error_ignored*/) {
|
3026
|
-
Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
|
3027
|
-
grpc_chttp2_stream* s = bs->stream_;
|
3028
|
-
grpc_chttp2_transport* t = s->t;
|
3029
|
-
bs->Unref();
|
3030
|
-
s->pending_byte_stream = false;
|
3031
|
-
grpc_chttp2_maybe_complete_recv_message(t, s);
|
3032
|
-
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
3033
|
-
}
|
3034
|
-
|
3035
|
-
void Chttp2IncomingByteStream::Orphan() {
|
3036
|
-
GPR_TIMER_SCOPE("incoming_byte_stream_destroy", 0);
|
3037
|
-
transport_->combiner->Run(
|
3038
|
-
GRPC_CLOSURE_INIT(&destroy_action_,
|
3039
|
-
&Chttp2IncomingByteStream::OrphanLocked, this, nullptr),
|
3040
|
-
GRPC_ERROR_NONE);
|
3041
|
-
}
|
3042
|
-
|
3043
|
-
void Chttp2IncomingByteStream::NextLocked(void* arg,
|
3044
|
-
grpc_error_handle /*error_ignored*/) {
|
3045
|
-
Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
|
3046
|
-
grpc_chttp2_transport* t = bs->transport_;
|
3047
|
-
grpc_chttp2_stream* s = bs->stream_;
|
3048
|
-
size_t cur_length = s->frame_storage.length;
|
3049
|
-
if (!s->read_closed) {
|
3050
|
-
s->flow_control->IncomingByteStreamUpdate(bs->next_action_.max_size_hint,
|
3051
|
-
cur_length);
|
3052
|
-
grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
|
3053
|
-
}
|
3054
|
-
GPR_ASSERT(s->unprocessed_incoming_frames_buffer.length == 0);
|
3055
|
-
if (s->frame_storage.length > 0) {
|
3056
|
-
grpc_slice_buffer_swap(&s->frame_storage,
|
3057
|
-
&s->unprocessed_incoming_frames_buffer);
|
3058
|
-
ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete, GRPC_ERROR_NONE);
|
3059
|
-
} else if (s->byte_stream_error != GRPC_ERROR_NONE) {
|
3060
|
-
ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete,
|
3061
|
-
GRPC_ERROR_REF(s->byte_stream_error));
|
3062
|
-
if (s->data_parser.parsing_frame != nullptr) {
|
3063
|
-
s->data_parser.parsing_frame->Unref();
|
3064
|
-
s->data_parser.parsing_frame = nullptr;
|
3065
|
-
}
|
3066
|
-
} else if (s->read_closed) {
|
3067
|
-
if (bs->remaining_bytes_ != 0) {
|
3068
|
-
s->byte_stream_error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
3069
|
-
"Truncated message", &s->read_closed_error, 1);
|
3070
|
-
ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete,
|
3071
|
-
GRPC_ERROR_REF(s->byte_stream_error));
|
3072
|
-
if (s->data_parser.parsing_frame != nullptr) {
|
3073
|
-
s->data_parser.parsing_frame->Unref();
|
3074
|
-
s->data_parser.parsing_frame = nullptr;
|
3075
|
-
}
|
3076
|
-
} else {
|
3077
|
-
// Should never reach here.
|
3078
|
-
GPR_ASSERT(false);
|
3079
|
-
}
|
3080
|
-
} else {
|
3081
|
-
s->on_next = bs->next_action_.on_complete;
|
3082
|
-
}
|
3083
|
-
bs->Unref();
|
3084
|
-
}
|
3085
|
-
|
3086
|
-
bool Chttp2IncomingByteStream::Next(size_t max_size_hint,
|
3087
|
-
grpc_closure* on_complete) {
|
3088
|
-
GPR_TIMER_SCOPE("incoming_byte_stream_next", 0);
|
3089
|
-
if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
|
3090
|
-
return true;
|
3091
|
-
} else {
|
3092
|
-
Ref();
|
3093
|
-
next_action_.max_size_hint = max_size_hint;
|
3094
|
-
next_action_.on_complete = on_complete;
|
3095
|
-
transport_->combiner->Run(
|
3096
|
-
GRPC_CLOSURE_INIT(&next_action_.closure,
|
3097
|
-
&Chttp2IncomingByteStream::NextLocked, this, nullptr),
|
3098
|
-
GRPC_ERROR_NONE);
|
3099
|
-
return false;
|
3100
|
-
}
|
3101
|
-
}
|
3102
|
-
|
3103
|
-
grpc_error_handle Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
|
3104
|
-
GPR_TIMER_SCOPE("incoming_byte_stream_pull", 0);
|
3105
|
-
grpc_error_handle error;
|
3106
|
-
if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
|
3107
|
-
error = grpc_deframe_unprocessed_incoming_frames(
|
3108
|
-
&stream_->data_parser, stream_,
|
3109
|
-
&stream_->unprocessed_incoming_frames_buffer, slice, nullptr);
|
3110
|
-
if (error != GRPC_ERROR_NONE) {
|
3111
|
-
return error;
|
3112
|
-
}
|
3113
|
-
} else {
|
3114
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
|
3115
|
-
stream_->t->combiner->Run(&stream_->reset_byte_stream,
|
3116
|
-
GRPC_ERROR_REF(error));
|
3117
|
-
return error;
|
3118
|
-
}
|
3119
|
-
return GRPC_ERROR_NONE;
|
3120
|
-
}
|
3121
|
-
|
3122
|
-
void Chttp2IncomingByteStream::PublishError(grpc_error_handle error) {
|
3123
|
-
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
3124
|
-
ExecCtx::Run(DEBUG_LOCATION, stream_->on_next, GRPC_ERROR_REF(error));
|
3125
|
-
stream_->on_next = nullptr;
|
3126
|
-
GRPC_ERROR_UNREF(stream_->byte_stream_error);
|
3127
|
-
stream_->byte_stream_error = GRPC_ERROR_REF(error);
|
3128
|
-
grpc_chttp2_cancel_stream(transport_, stream_, GRPC_ERROR_REF(error));
|
3129
|
-
}
|
3130
|
-
|
3131
|
-
grpc_error_handle Chttp2IncomingByteStream::Push(const grpc_slice& slice,
|
3132
|
-
grpc_slice* slice_out) {
|
3133
|
-
if (remaining_bytes_ < GRPC_SLICE_LENGTH(slice)) {
|
3134
|
-
grpc_error_handle error =
|
3135
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many bytes in stream");
|
3136
|
-
transport_->combiner->Run(&stream_->reset_byte_stream,
|
3137
|
-
GRPC_ERROR_REF(error));
|
3138
|
-
grpc_slice_unref_internal(slice);
|
3139
|
-
return error;
|
3140
|
-
} else {
|
3141
|
-
remaining_bytes_ -= static_cast<uint32_t> GRPC_SLICE_LENGTH(slice);
|
3142
|
-
if (slice_out != nullptr) {
|
3143
|
-
*slice_out = slice;
|
3144
|
-
}
|
3145
|
-
return GRPC_ERROR_NONE;
|
3146
|
-
}
|
3147
|
-
}
|
3148
|
-
|
3149
|
-
grpc_error_handle Chttp2IncomingByteStream::Finished(grpc_error_handle error,
|
3150
|
-
bool reset_on_error) {
|
3151
|
-
if (error == GRPC_ERROR_NONE) {
|
3152
|
-
if (remaining_bytes_ != 0) {
|
3153
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
|
3154
|
-
}
|
3155
|
-
}
|
3156
|
-
if (error != GRPC_ERROR_NONE && reset_on_error) {
|
3157
|
-
transport_->combiner->Run(&stream_->reset_byte_stream,
|
3158
|
-
GRPC_ERROR_REF(error));
|
3159
|
-
}
|
3160
|
-
Unref();
|
3161
|
-
return error;
|
3162
|
-
}
|
3163
|
-
|
3164
|
-
void Chttp2IncomingByteStream::Shutdown(grpc_error_handle error) {
|
3165
|
-
GRPC_ERROR_UNREF(Finished(error, true /* reset_on_error */));
|
3166
|
-
}
|
3167
|
-
|
3168
|
-
} // namespace grpc_core
|
3169
|
-
|
3170
2903
|
//
|
3171
2904
|
// RESOURCE QUOTAS
|
3172
2905
|
//
|
@@ -3183,7 +2916,7 @@ static void post_benign_reclaimer(grpc_chttp2_transport* t) {
|
|
3183
2916
|
benign_reclaimer_locked, t,
|
3184
2917
|
grpc_schedule_on_exec_ctx);
|
3185
2918
|
t->active_reclamation = std::move(*sweep);
|
3186
|
-
t->combiner->Run(&t->benign_reclaimer_locked,
|
2919
|
+
t->combiner->Run(&t->benign_reclaimer_locked, absl::OkStatus());
|
3187
2920
|
} else {
|
3188
2921
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
|
3189
2922
|
}
|
@@ -3203,9 +2936,10 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
|
|
3203
2936
|
destructive_reclaimer_locked, t,
|
3204
2937
|
grpc_schedule_on_exec_ctx);
|
3205
2938
|
t->active_reclamation = std::move(*sweep);
|
3206
|
-
t->combiner->Run(&t->destructive_reclaimer_locked,
|
2939
|
+
t->combiner->Run(&t->destructive_reclaimer_locked,
|
2940
|
+
absl::OkStatus());
|
3207
2941
|
} else {
|
3208
|
-
GRPC_CHTTP2_UNREF_TRANSPORT(t, "
|
2942
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "destructive_reclaimer");
|
3209
2943
|
}
|
3210
2944
|
});
|
3211
2945
|
}
|
@@ -3213,8 +2947,7 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
|
|
3213
2947
|
|
3214
2948
|
static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
|
3215
2949
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
3216
|
-
if (error ==
|
3217
|
-
grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
2950
|
+
if (error.ok() && grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
3218
2951
|
// Channel with no active streams: send a goaway to try and make it
|
3219
2952
|
// disconnect cleanly
|
3220
2953
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
@@ -3222,11 +2955,11 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3222
2955
|
t->peer_string.c_str());
|
3223
2956
|
}
|
3224
2957
|
send_goaway(t,
|
3225
|
-
grpc_error_set_int(
|
3226
|
-
|
3227
|
-
|
3228
|
-
|
3229
|
-
|
2958
|
+
grpc_error_set_int(GRPC_ERROR_CREATE("Buffers full"),
|
2959
|
+
grpc_core::StatusIntProperty::kHttp2Error,
|
2960
|
+
GRPC_HTTP2_ENHANCE_YOUR_CALM),
|
2961
|
+
/*immediate_disconnect_hint=*/true);
|
2962
|
+
} else if (error.ok() && GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
3230
2963
|
gpr_log(GPR_INFO,
|
3231
2964
|
"HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
|
3232
2965
|
" streams",
|
@@ -3234,7 +2967,7 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3234
2967
|
grpc_chttp2_stream_map_size(&t->stream_map));
|
3235
2968
|
}
|
3236
2969
|
t->benign_reclaimer_registered = false;
|
3237
|
-
if (error !=
|
2970
|
+
if (error != absl::CancelledError()) {
|
3238
2971
|
t->active_reclamation.Finish();
|
3239
2972
|
}
|
3240
2973
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
|
@@ -3244,7 +2977,7 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3244
2977
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
3245
2978
|
size_t n = grpc_chttp2_stream_map_size(&t->stream_map);
|
3246
2979
|
t->destructive_reclaimer_registered = false;
|
3247
|
-
if (error
|
2980
|
+
if (error.ok() && n > 0) {
|
3248
2981
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
|
3249
2982
|
grpc_chttp2_stream_map_rand(&t->stream_map));
|
3250
2983
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
@@ -3253,8 +2986,8 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3253
2986
|
}
|
3254
2987
|
grpc_chttp2_cancel_stream(
|
3255
2988
|
t, s,
|
3256
|
-
grpc_error_set_int(
|
3257
|
-
|
2989
|
+
grpc_error_set_int(GRPC_ERROR_CREATE("Buffers full"),
|
2990
|
+
grpc_core::StatusIntProperty::kHttp2Error,
|
3258
2991
|
GRPC_HTTP2_ENHANCE_YOUR_CALM));
|
3259
2992
|
if (n > 1) {
|
3260
2993
|
// Since we cancel one stream per destructive reclamation, if
|
@@ -3264,7 +2997,7 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3264
2997
|
post_destructive_reclaimer(t);
|
3265
2998
|
}
|
3266
2999
|
}
|
3267
|
-
if (error !=
|
3000
|
+
if (error != absl::CancelledError()) {
|
3268
3001
|
t->active_reclamation.Finish();
|
3269
3002
|
}
|
3270
3003
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "destructive_reclaimer");
|
@@ -3351,7 +3084,8 @@ grpc_chttp2_transport_get_socket_node(grpc_transport* transport) {
|
|
3351
3084
|
}
|
3352
3085
|
|
3353
3086
|
grpc_transport* grpc_create_chttp2_transport(
|
3354
|
-
const
|
3087
|
+
const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
|
3088
|
+
bool is_client) {
|
3355
3089
|
auto t = new grpc_chttp2_transport(channel_args, ep, is_client);
|
3356
3090
|
return &t->base;
|
3357
3091
|
}
|
@@ -3362,7 +3096,7 @@ void grpc_chttp2_transport_start_reading(
|
|
3362
3096
|
grpc_chttp2_transport* t =
|
3363
3097
|
reinterpret_cast<grpc_chttp2_transport*>(transport);
|
3364
3098
|
GRPC_CHTTP2_REF_TRANSPORT(
|
3365
|
-
t, "reading_action");
|
3099
|
+
t, "reading_action"); // matches unref inside reading_action
|
3366
3100
|
if (read_buffer != nullptr) {
|
3367
3101
|
grpc_slice_buffer_move_into(read_buffer, &t->read_buffer);
|
3368
3102
|
gpr_free(read_buffer);
|
@@ -3371,5 +3105,5 @@ void grpc_chttp2_transport_start_reading(
|
|
3371
3105
|
t->notify_on_close = notify_on_close;
|
3372
3106
|
t->combiner->Run(
|
3373
3107
|
GRPC_CLOSURE_INIT(&t->read_action_locked, read_action_locked, t, nullptr),
|
3374
|
-
|
3108
|
+
absl::OkStatus());
|
3375
3109
|
}
|