grpc 1.43.1 → 1.53.0
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 +765 -449
- 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 +131 -41
- 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 +44 -28
- data/include/grpc/grpc_posix.h +21 -20
- data/include/grpc/grpc_security.h +47 -50
- 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 -85
- 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 -788
- 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 -104
- 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 +827 -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 -12
- 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 +315 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +142 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.cc +96 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +68 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +22 -15
- data/src/core/ext/filters/client_channel/backend_metric.h +21 -11
- data/src/core/ext/filters/client_channel/backup_poller.cc +44 -40
- data/src/core/ext/filters/client_channel/backup_poller.h +26 -28
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +94 -49
- data/src/core/ext/filters/client_channel/client_channel.cc +681 -648
- data/src/core/ext/filters/client_channel/client_channel.h +106 -61
- 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 +26 -57
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/client_channel_service_config.h +111 -0
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +33 -27
- data/src/core/ext/filters/client_channel/connector.h +20 -11
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +40 -55
- data/src/core/ext/filters/client_channel/dynamic_filters.h +22 -13
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +4 -22
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +27 -36
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +139 -583
- data/src/core/ext/filters/client_channel/health/health_check_client.h +29 -163
- data/src/core/ext/filters/client_channel/http_proxy.cc +130 -164
- data/src/core/ext/filters/client_channel/http_proxy.h +46 -22
- 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 +12 -8
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +9 -7
- 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 -134
- 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 +468 -413
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +27 -35
- 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 +10 -8
- 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 +43 -34
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +30 -29
- 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 +221 -209
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +488 -480
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +525 -391
- 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 +726 -701
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +282 -254
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +177 -150
- 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 +289 -251
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +274 -201
- 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_attributes.h +64 -0
- 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 +215 -264
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +213 -215
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +578 -667
- 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 +42 -33
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +678 -336
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +67 -51
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +50 -45
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +109 -119
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +421 -420
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +95 -81
- 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 +21 -20
- 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 +124 -255
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +37 -49
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +21 -6
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +190 -96
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +269 -0
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +121 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +56 -61
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +537 -338
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
- data/src/core/ext/filters/client_channel/retry_filter.cc +392 -307
- data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
- data/src/core/ext/filters/client_channel/retry_service_config.cc +198 -232
- data/src/core/ext/filters/client_channel/retry_service_config.h +44 -35
- data/src/core/ext/filters/client_channel/retry_throttle.cc +37 -60
- data/src/core/ext/filters/client_channel/retry_throttle.h +47 -34
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +40 -22
- data/src/core/ext/filters/client_channel/subchannel.cc +343 -402
- data/src/core/ext/filters/client_channel/subchannel.h +116 -86
- 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 +470 -0
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +102 -83
- data/src/core/ext/filters/deadline/deadline_filter.h +17 -14
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +180 -403
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +41 -9
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +112 -0
- data/src/core/ext/filters/http/client/http_client_filter.cc +123 -548
- data/src/core/ext/filters/http/client/http_client_filter.h +55 -25
- data/src/core/ext/filters/http/client_authority_filter.cc +60 -129
- data/src/core/ext/filters/http/client_authority_filter.h +49 -27
- data/src/core/ext/filters/http/http_filters_plugin.cc +53 -60
- 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 +116 -474
- data/src/core/ext/filters/http/server/http_server_filter.h +58 -24
- data/src/core/ext/filters/message_size/message_size_filter.cc +137 -165
- data/src/core/ext/filters/message_size/message_size_filter.h +44 -20
- data/src/core/ext/filters/rbac/rbac_filter.cc +175 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +84 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +819 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +86 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +23 -10
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +93 -199
- 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 +316 -137
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +38 -30
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +378 -182
- 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 +31 -30
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +29 -29
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +972 -1236
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +36 -25
- 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 +351 -301
- data/src/core/ext/transport/chttp2/transport/flow_control.h +249 -326
- data/src/core/ext/transport/chttp2/transport/frame.h +22 -26
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +85 -235
- 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 +34 -28
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +25 -22
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +40 -26
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +24 -21
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +46 -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 +432 -422
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +127 -219
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +5 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +15 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +143 -620
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +31 -25
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +162 -61
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +71 -71
- 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 +257 -338
- data/src/core/ext/transport/chttp2/transport/parsing.cc +367 -140
- 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 +199 -227
- data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -22
- data/src/core/ext/transport/inproc/inproc_transport.cc +252 -347
- data/src/core/ext/transport/inproc/inproc_transport.h +23 -24
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +502 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +122 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +578 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +46 -359
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +280 -1357
- 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 +56 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +159 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +64 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +189 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +128 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +106 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +101 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +613 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +107 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +14 -12
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +49 -16
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +13 -11
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +53 -23
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +98 -96
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +729 -386
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +191 -173
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1403 -664
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +34 -26
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +212 -91
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +256 -250
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1774 -852
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +46 -24
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +49 -27
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +276 -99
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1437 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +78 -51
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +519 -190
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +11 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +49 -25
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +159 -154
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1178 -584
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +87 -42
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +553 -167
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +9 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +42 -24
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +11 -29
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +45 -101
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +159 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +108 -104
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +820 -410
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +118 -84
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +813 -358
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +11 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +61 -31
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +164 -108
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1082 -399
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +8 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +32 -17
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +15 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +91 -49
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +29 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +140 -34
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +15 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +97 -49
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +11 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +50 -26
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +34 -32
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +206 -109
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +58 -49
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +405 -191
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +49 -47
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +377 -188
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +9 -7
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +38 -21
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +101 -64
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +684 -261
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +77 -69
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +588 -301
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +21 -15
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +130 -49
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +15 -10
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +98 -41
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +140 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +58 -55
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +445 -235
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +62 -60
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +442 -237
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +98 -77
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +672 -294
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +46 -36
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +301 -163
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +589 -475
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4357 -1895
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +25 -19
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +160 -72
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +241 -0
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1191 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +45 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +101 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +107 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +15 -13
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +85 -46
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +138 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +254 -0
- 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 +47 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +221 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +33 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +43 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +226 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +55 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +159 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +8 -6
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +38 -24
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +29 -27
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +208 -113
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +36 -34
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +272 -132
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +71 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +237 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +19 -14
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -43
- 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 +239 -197
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1708 -734
- 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/cert.upb.c +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +2 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +89 -58
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +606 -235
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +26 -24
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +168 -87
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +100 -71
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +672 -263
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +168 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +6 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +26 -16
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +185 -66
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1118 -256
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +18 -16
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +115 -62
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +52 -50
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +367 -186
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +116 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +20 -18
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +140 -82
- 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 +74 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +230 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +16 -14
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +107 -57
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +54 -31
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +52 -27
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +9 -7
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +42 -24
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +21 -19
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +129 -69
- 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 +19 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +131 -65
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +14 -12
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +93 -53
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +23 -21
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +162 -83
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +32 -30
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -146
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +36 -34
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +255 -131
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +213 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +3 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +143 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +13 -11
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +70 -36
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +19 -17
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +110 -52
- 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.c +26 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +43 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +44 -19
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +131 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +8 -6
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +22 -6
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +109 -103
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +764 -382
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +120 -112
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +843 -402
- data/src/core/ext/upb-generated/google/api/http.upb.c +29 -27
- data/src/core/ext/upb-generated/google/api/http.upb.h +228 -115
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +115 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +9 -7
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +42 -22
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +292 -237
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2198 -1030
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +9 -7
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +40 -20
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +6 -4
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +26 -16
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +31 -29
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +189 -93
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +9 -7
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +40 -20
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +40 -38
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +276 -149
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +11 -9
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +56 -30
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +335 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +21 -19
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +107 -48
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +102 -96
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +725 -359
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +16 -13
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +84 -41
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +12 -10
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +64 -35
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +57 -55
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +419 -219
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +22 -20
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +123 -63
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +36 -34
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +201 -78
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +14 -12
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +57 -22
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +7 -5
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +15 -6
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +14 -12
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +59 -24
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +13 -11
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -23
- data/src/core/ext/upb-generated/validate/validate.upb.c +339 -312
- data/src/core/ext/upb-generated/validate/validate.upb.h +2818 -1180
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +290 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +112 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +34 -32
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +187 -80
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +103 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +8 -6
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +34 -19
- 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 +18 -16
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +106 -55
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +14 -12
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +57 -30
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +107 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +12 -10
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +59 -30
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +20 -18
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +138 -70
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +12 -10
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +62 -30
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +24 -21
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +114 -46
- 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 +207 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +914 -0
- 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 +52 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +151 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +226 -0
- 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 +10 -9
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +46 -24
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +128 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +73 -278
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +16 -101
- 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/init_dump.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +8 -6
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +8 -6
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +118 -115
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +257 -237
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +58 -51
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +394 -370
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +73 -78
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +23 -16
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +101 -79
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +27 -22
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +203 -194
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +73 -73
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +138 -101
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +14 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +22 -34
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +21 -18
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +182 -165
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +14 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +252 -219
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +53 -43
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +12 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +18 -11
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +9 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +24 -21
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +13 -11
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +18 -15
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +81 -73
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +19 -19
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +18 -15
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +180 -146
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +24 -19
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +153 -147
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +26 -19
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +44 -33
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +17 -14
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +17 -14
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +28 -28
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +201 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +91 -74
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +902 -806
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +180 -160
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +52 -37
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +199 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +90 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
- 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/service.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +61 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +79 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +15 -11
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +17 -14
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +18 -15
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +80 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +59 -44
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
- 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 +506 -463
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +63 -58
- 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/cert.upbdefs.c +15 -11
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +172 -140
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +24 -19
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +19 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +220 -198
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +163 -88
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +57 -22
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +16 -13
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +123 -120
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +13 -10
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +13 -13
- 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/http_inputs.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +36 -32
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
- 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/matcher/v3/string.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +14 -12
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +16 -13
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +13 -10
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +10 -8
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +12 -10
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +11 -8
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
- 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 +39 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +11 -9
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
- data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +94 -92
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
- 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/core/v3/collection_entry.upbdefs.c +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
- 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 +126 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
- 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/matcher/v3/regex.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -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 +6 -9
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +4 -4
- data/src/core/ext/xds/certificate_provider_store.cc +75 -3
- data/src/core/ext/xds/certificate_provider_store.h +30 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +21 -14
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -6
- data/src/core/ext/xds/upb_utils.h +45 -0
- data/src/core/ext/xds/xds_api.cc +294 -3740
- data/src/core/ext/xds/xds_api.h +82 -635
- data/src/core/ext/xds/xds_bootstrap.cc +10 -446
- data/src/core/ext/xds/xds_bootstrap.h +46 -83
- 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 +36 -25
- data/src/core/ext/xds/xds_certificate_provider.h +37 -4
- data/src/core/ext/xds/xds_channel_args.h +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +27 -20
- data/src/core/ext/xds/xds_channel_stack_modifier.h +20 -7
- data/src/core/ext/xds/xds_client.cc +1247 -2097
- data/src/core/ext/xds/xds_client.h +159 -204
- 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 +35 -36
- data/src/core/ext/xds/xds_client_stats.h +31 -28
- data/src/core/ext/xds/xds_cluster.cc +711 -0
- data/src/core/ext/xds/xds_cluster.h +137 -0
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +132 -0
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +97 -0
- data/src/core/ext/xds/xds_common_types.cc +503 -0
- data/src/core/ext/xds/xds_common_types.h +108 -0
- data/src/core/ext/xds/xds_endpoint.cc +474 -0
- data/src/core/ext/xds/xds_endpoint.h +139 -0
- 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 +68 -59
- data/src/core/ext/xds/xds_http_fault_filter.h +20 -26
- data/src/core/ext/xds/xds_http_filters.cc +71 -66
- data/src/core/ext/xds/xds_http_filters.h +74 -26
- data/src/core/ext/xds/xds_http_rbac_filter.cc +506 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +58 -0
- 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 +1131 -0
- data/src/core/ext/xds/xds_listener.h +226 -0
- data/src/core/ext/xds/xds_resource_type.h +104 -0
- data/src/core/ext/xds/xds_resource_type_impl.h +88 -0
- data/src/core/ext/xds/xds_route_config.cc +1144 -0
- data/src/core/ext/xds/xds_route_config.h +252 -0
- data/src/core/ext/xds/xds_routing.cc +33 -16
- data/src/core/ext/xds/xds_routing.h +25 -17
- data/src/core/ext/xds/xds_server_config_fetcher.cc +386 -281
- 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 +55 -35
- data/src/core/lib/address_utils/parse_address.h +46 -37
- data/src/core/lib/address_utils/sockaddr_utils.cc +112 -79
- data/src/core/lib/address_utils/sockaddr_utils.h +45 -55
- data/src/core/lib/avl/avl.h +100 -13
- data/src/core/lib/backoff/backoff.cc +26 -57
- data/src/core/lib/backoff/backoff.h +32 -32
- data/src/core/lib/channel/call_finalization.h +88 -0
- data/src/core/lib/channel/call_tracer.h +27 -9
- data/src/core/lib/channel/channel_args.cc +291 -65
- data/src/core/lib/channel/channel_args.h +461 -54
- data/src/core/lib/channel/channel_args_preconditioning.cc +6 -10
- data/src/core/lib/channel/channel_args_preconditioning.h +7 -7
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +100 -53
- data/src/core/lib/channel/channel_stack.h +212 -130
- data/src/core/lib/channel/channel_stack_builder.cc +35 -295
- data/src/core/lib/channel/channel_stack_builder.h +115 -153
- data/src/core/lib/channel/channel_stack_builder_impl.cc +126 -0
- data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
- data/src/core/lib/channel/channel_trace.cc +29 -39
- data/src/core/lib/channel/channel_trace.h +27 -24
- data/src/core/lib/channel/channelz.cc +51 -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 +1269 -75
- data/src/core/lib/channel/connected_channel.h +23 -24
- data/src/core/lib/channel/context.h +36 -21
- data/src/core/lib/channel/promise_based_filter.cc +2521 -0
- data/src/core/lib/channel/promise_based_filter.h +937 -0
- 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 +44 -131
- data/src/core/lib/compression/compression_internal.cc +189 -230
- data/src/core/lib/compression/compression_internal.h +90 -94
- data/src/core/lib/compression/message_compress.cc +39 -37
- data/src/core/lib/compression/message_compress.h +30 -31
- data/src/core/lib/config/core_configuration.cc +15 -2
- data/src/core/lib/config/core_configuration.h +125 -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 -649
- data/src/core/lib/debug/stats_data.h +293 -548
- 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 +48 -0
- data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
- data/src/core/lib/event_engine/event_engine.cc +3 -15
- 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 +19 -15
- 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/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
- 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 +60 -0
- data/src/core/lib/event_engine/resolved_address_internal.h +34 -0
- 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/event_engine/trace.cc +24 -0
- 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 +23 -34
- data/src/core/lib/gpr/sync_windows.cc +29 -27
- data/src/core/lib/gpr/time.cc +36 -31
- 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 +101 -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 +54 -17
- data/src/core/lib/gprpp/chunked_vector.h +52 -6
- data/src/core/lib/gprpp/construct_destruct.h +4 -3
- data/src/core/lib/gprpp/cpp_impl_of.h +7 -3
- data/src/core/lib/gprpp/crash.cc +33 -0
- data/src/core/lib/gprpp/crash.h +34 -0
- data/src/core/lib/gprpp/debug_location.h +62 -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/lib/gprpp/env_posix.cc +47 -0
- 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 +75 -0
- 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 +59 -0
- 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 +24 -24
- data/src/core/lib/gprpp/ref_counted_ptr.h +42 -55
- data/src/core/lib/gprpp/single_set_ptr.h +87 -0
- 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 +79 -51
- data/src/core/lib/gprpp/status_helper.h +19 -24
- 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 +33 -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 +241 -0
- data/src/core/lib/gprpp/time.h +366 -0
- 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/gprpp/work_serializer.cc +247 -0
- data/src/core/lib/gprpp/work_serializer.h +86 -0
- 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 +81 -47
- data/src/core/lib/http/format_request.h +30 -27
- data/src/core/lib/http/httpcli.cc +328 -262
- data/src/core/lib/http/httpcli.h +256 -115
- data/src/core/lib/http/httpcli_security_connector.cc +101 -104
- data/src/core/lib/http/httpcli_ssl_credentials.h +39 -0
- data/src/core/lib/http/parser.cc +144 -85
- data/src/core/lib/http/parser.h +51 -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 +128 -106
- data/src/core/lib/iomgr/call_combiner.cc +37 -58
- 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/closure.cc +27 -0
- data/src/core/lib/iomgr/closure.h +111 -54
- data/src/core/lib/iomgr/combiner.cc +29 -26
- 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 +20 -20
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +34 -27
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +30 -21
- data/src/core/lib/iomgr/error.cc +52 -832
- data/src/core/lib/iomgr/error.h +45 -319
- 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 +27 -26
- data/src/core/lib/iomgr/ev_apple.h +21 -21
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +270 -254
- data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
- data/src/core/lib/iomgr/ev_poll_posix.cc +302 -277
- data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
- data/src/core/lib/iomgr/ev_posix.cc +91 -125
- data/src/core/lib/iomgr/ev_posix.h +94 -88
- data/src/core/lib/iomgr/ev_windows.cc +18 -18
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +62 -0
- data/src/core/lib/iomgr/event_engine_shims/closure.h +39 -0
- 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 +45 -139
- data/src/core/lib/iomgr/exec_ctx.h +154 -195
- data/src/core/lib/iomgr/executor.cc +25 -26
- data/src/core/lib/iomgr/executor.h +27 -30
- data/src/core/lib/iomgr/fork_posix.cc +30 -26
- 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 +31 -31
- data/src/core/lib/iomgr/iocp_windows.h +22 -22
- 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 +22 -21
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +22 -20
- data/src/core/lib/iomgr/iomgr_windows.cc +25 -23
- 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 +35 -29
- data/src/core/lib/iomgr/pollset.cc +18 -18
- data/src/core/lib/iomgr/pollset.h +60 -60
- 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 +34 -33
- data/src/core/lib/iomgr/pollset_windows.h +24 -24
- data/src/core/lib/iomgr/port.h +59 -42
- data/src/core/lib/iomgr/python_util.h +24 -24
- data/src/core/lib/iomgr/resolve_address.cc +34 -39
- data/src/core/lib/iomgr/resolve_address.h +100 -67
- data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +133 -98
- data/src/core/lib/iomgr/resolve_address_posix.h +63 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +129 -84
- data/src/core/lib/iomgr/resolve_address_windows.h +63 -0
- data/src/core/lib/iomgr/resolved_address.h +39 -0
- 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 +64 -0
- 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 -118
- 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 -37
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +46 -35
- data/src/core/lib/iomgr/tcp_client_posix.cc +244 -106
- 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 +563 -361
- 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 +402 -145
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +121 -82
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +47 -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 +123 -98
- data/src/core/lib/iomgr/tcp_windows.h +34 -35
- data/src/core/lib/iomgr/timer.cc +19 -19
- data/src/core/lib/iomgr/timer.h +78 -73
- data/src/core/lib/iomgr/timer_generic.cc +214 -204
- 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 +44 -43
- data/src/core/lib/iomgr/timer_manager.h +27 -27
- data/src/core/lib/iomgr/unix_sockets_posix.cc +38 -51
- data/src/core/lib/iomgr/unix_sockets_posix.h +25 -28
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +25 -32
- 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/lib/json/json_args.h +34 -0
- 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 +17 -37
- data/src/core/lib/json/json_util.h +21 -12
- data/src/core/lib/json/json_writer.cc +62 -57
- data/src/core/lib/load_balancing/lb_policy.cc +102 -0
- data/src/core/lib/load_balancing/lb_policy.h +442 -0
- 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/lib/load_balancing/subchannel_interface.h +135 -0
- data/src/core/lib/matchers/matchers.cc +13 -8
- data/src/core/lib/matchers/matchers.h +5 -3
- data/src/core/lib/promise/activity.cc +36 -15
- data/src/core/lib/promise/activity.h +287 -188
- data/src/core/lib/promise/arena_promise.h +231 -0
- 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 +104 -20
- data/src/core/lib/promise/detail/promise_factory.h +62 -15
- data/src/core/lib/promise/detail/promise_like.h +3 -3
- data/src/core/lib/promise/detail/status.h +37 -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 +55 -0
- data/src/core/lib/promise/latch.h +191 -0
- data/src/core/lib/promise/loop.h +44 -14
- 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 +132 -8
- data/src/core/lib/promise/promise.h +95 -0
- data/src/core/lib/promise/race.h +6 -10
- data/src/core/lib/promise/seq.h +45 -9
- data/src/core/lib/promise/sleep.cc +90 -0
- data/src/core/lib/promise/sleep.h +84 -0
- 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 +175 -0
- data/src/core/lib/resolver/resolver.cc +37 -0
- data/src/core/lib/resolver/resolver.h +138 -0
- data/src/core/lib/resolver/resolver_factory.h +77 -0
- data/src/core/lib/resolver/resolver_registry.cc +164 -0
- data/src/core/lib/resolver/resolver_registry.h +123 -0
- data/src/core/lib/resolver/server_address.cc +182 -0
- data/src/core/lib/resolver/server_address.h +145 -0
- data/src/core/lib/resource_quota/api.cc +25 -29
- data/src/core/lib/resource_quota/api.h +14 -6
- data/src/core/lib/resource_quota/arena.cc +165 -0
- data/src/core/lib/resource_quota/arena.h +314 -0
- data/src/core/lib/resource_quota/memory_quota.cc +418 -173
- data/src/core/lib/resource_quota/memory_quota.h +287 -116
- 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 +20 -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 +17 -3
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +42 -28
- data/src/core/lib/security/authorization/evaluate_args.h +10 -7
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +64 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +69 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +122 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +61 -0
- data/src/core/lib/security/authorization/matchers.cc +241 -0
- data/src/core/lib/security/authorization/matchers.h +218 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +446 -0
- data/src/core/lib/security/authorization/rbac_policy.h +178 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +66 -0
- 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 +31 -27
- data/src/core/lib/security/context/security_context.h +65 -36
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +35 -27
- data/src/core/lib/security/credentials/alts/alts_credentials.h +71 -57
- 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 +97 -0
- data/src/core/lib/security/credentials/call_creds_util.h +43 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +103 -0
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +80 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +52 -111
- data/src/core/lib/security/credentials/composite/composite_credentials.h +65 -40
- data/src/core/lib/security/credentials/credentials.cc +25 -29
- data/src/core/lib/security/credentials/credentials.h +141 -133
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +248 -104
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +22 -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 +137 -101
- data/src/core/lib/security/credentials/external/external_account_credentials.h +19 -12
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -27
- 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 +77 -44
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +14 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +62 -62
- data/src/core/lib/security/credentials/fake/fake_credentials.h +71 -63
- 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 +163 -124
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +41 -29
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +50 -47
- data/src/core/lib/security/credentials/iam/iam_credentials.h +46 -30
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +35 -26
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +44 -35
- data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +62 -71
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +51 -33
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +166 -129
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +51 -49
- data/src/core/lib/security/credentials/local/local_credentials.cc +36 -30
- data/src/core/lib/security/credentials/local/local_credentials.h +42 -26
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +229 -234
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +103 -55
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +122 -174
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +101 -48
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +49 -54
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +49 -26
- 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 +69 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +44 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +75 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +47 -23
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +70 -83
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +55 -50
- data/src/core/lib/security/credentials/tls/tls_credentials.h +34 -25
- 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 +77 -81
- data/src/core/lib/security/credentials/xds/xds_credentials.h +56 -11
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +68 -68
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +50 -48
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +79 -91
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +26 -29
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +21 -22
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +30 -24
- 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_supported.cc +175 -0
- 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 +74 -65
- data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
- data/src/core/lib/security/security_connector/security_connector.cc +39 -49
- data/src/core/lib/security/security_connector/security_connector.h +82 -65
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +65 -59
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
- data/src/core/lib/security/security_connector/ssl_utils.cc +76 -70
- data/src/core/lib/security/security_connector/ssl_utils.h +57 -58
- 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 +83 -71
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +54 -34
- data/src/core/lib/security/transport/auth_filters.h +89 -27
- data/src/core/lib/security/transport/client_auth_filter.cc +142 -388
- data/src/core/lib/security/transport/secure_endpoint.cc +305 -181
- data/src/core/lib/security/transport/secure_endpoint.h +29 -28
- data/src/core/lib/security/transport/security_handshaker.cc +147 -107
- data/src/core/lib/security/transport/security_handshaker.h +28 -23
- data/src/core/lib/security/transport/server_auth_filter.cc +179 -282
- 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 +89 -0
- data/src/core/lib/service_config/service_config_call_data.h +82 -0
- data/src/core/lib/service_config/service_config_impl.cc +191 -0
- data/src/core/lib/service_config/service_config_impl.h +125 -0
- data/src/core/lib/service_config/service_config_parser.cc +81 -0
- data/src/core/lib/service_config/service_config_parser.h +105 -0
- 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 +128 -218
- data/src/core/lib/slice/slice.h +126 -39
- 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 +43 -69
- data/src/core/lib/slice/slice_refcount.cc +4 -1
- data/src/core/lib/slice/slice_refcount.h +51 -96
- 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 +11 -6
- 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 +3070 -1436
- data/src/core/lib/surface/call.h +140 -61
- 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/lib/surface/call_trace.h +30 -0
- data/src/core/lib/surface/channel.cc +249 -322
- data/src/core/lib/surface/channel.h +140 -94
- data/src/core/lib/surface/channel_init.cc +19 -20
- data/src/core/lib/surface/channel_init.h +25 -27
- 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 +210 -231
- 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 +106 -94
- data/src/core/lib/surface/init.h +20 -30
- 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 +421 -228
- data/src/core/lib/surface/server.h +62 -31
- data/src/core/lib/surface/validate_metadata.cc +34 -48
- data/src/core/lib/surface/validate_metadata.h +24 -21
- data/src/core/lib/surface/version.cc +21 -21
- data/src/core/lib/transport/bdp_estimator.cc +28 -29
- data/src/core/lib/transport/bdp_estimator.h +24 -26
- 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 +62 -82
- data/src/core/lib/transport/error_utils.h +31 -26
- data/src/core/lib/transport/handshaker.cc +239 -0
- data/src/core/lib/transport/handshaker.h +172 -0
- 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/lib/transport/http_connect_handshaker.cc +400 -0
- data/src/core/lib/transport/http_connect_handshaker.h +42 -0
- data/src/core/lib/transport/metadata_batch.cc +278 -72
- data/src/core/lib/transport/metadata_batch.h +1052 -825
- data/src/core/lib/transport/parsed_metadata.cc +4 -4
- data/src/core/lib/transport/parsed_metadata.h +128 -100
- 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 +25 -25
- data/src/core/lib/transport/status_conversion.h +25 -25
- 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 +225 -92
- data/src/core/lib/transport/timeout_encoding.h +65 -31
- data/src/core/lib/transport/transport.cc +99 -57
- data/src/core/lib/transport/transport.h +282 -152
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +59 -35
- data/src/core/lib/transport/transport_op_string.cc +44 -85
- data/src/core/lib/uri/uri_parser.cc +239 -57
- data/src/core/lib/uri/uri_parser.h +40 -28
- data/src/core/plugin_registry/grpc_plugin_registry.cc +77 -156
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +66 -0
- 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 +142 -117
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +27 -18
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +72 -56
- 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 +23 -22
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +39 -39
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +21 -21
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +107 -106
- 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 +46 -49
- data/src/core/tsi/local_transport_security.h +34 -37
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +146 -0
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +24 -24
- 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 +34 -27
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +27 -20
- data/src/core/tsi/ssl_transport_security.cc +451 -394
- data/src/core/tsi/ssl_transport_security.h +235 -194
- 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 +346 -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 +107 -22
- data/src/ruby/ext/grpc/rb_call.c +1 -0
- data/src/ruby/ext/grpc/rb_channel.c +6 -2
- 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 +58 -62
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +90 -96
- data/src/ruby/ext/grpc/rb_loader.c +6 -2
- data/src/ruby/ext/grpc/rb_server.c +7 -4
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/grpc.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +1 -6
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
- data/src/ruby/pb/test/client.rb +769 -0
- data/src/ruby/pb/test/server.rb +252 -0
- data/src/ruby/pb/test/xds_client.rb +415 -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 +50 -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 +200 -0
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
- data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +95 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +270 -0
- data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +161 -0
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +287 -0
- data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.h +96 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +225 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +264 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +165 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
- data/third_party/abseil-cpp/absl/random/internal/traits.h +149 -0
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +96 -0
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +256 -0
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +261 -0
- data/third_party/abseil-cpp/absl/random/random.h +189 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +111 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +272 -0
- 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/asn1/tasn_enc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +9 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +23 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
- data/third_party/cares/cares/include/ares.h +742 -0
- data/third_party/cares/cares/include/ares_dns.h +112 -0
- data/third_party/cares/cares/include/ares_version.h +24 -0
- data/third_party/cares/cares/src/lib/ares__close_sockets.c +61 -0
- data/third_party/cares/cares/src/lib/ares__get_hostent.c +260 -0
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
- data/third_party/cares/cares/src/lib/ares_android.c +444 -0
- data/third_party/cares/cares/src/lib/ares_android.h +27 -0
- data/third_party/cares/cares/src/lib/ares_create_query.c +197 -0
- data/third_party/cares/cares/src/lib/ares_data.c +240 -0
- data/third_party/cares/cares/src/lib/ares_data.h +74 -0
- data/third_party/cares/cares/src/lib/ares_expand_name.c +300 -0
- data/third_party/cares/cares/src/lib/ares_expand_string.c +67 -0
- data/third_party/cares/cares/src/lib/ares_free_hostent.c +43 -0
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
- data/third_party/cares/cares/src/lib/ares_getenv.c +28 -0
- data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +287 -0
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +534 -0
- data/third_party/cares/cares/src/lib/ares_getnameinfo.c +447 -0
- data/third_party/cares/cares/src/lib/ares_init.c +2654 -0
- data/third_party/cares/cares/src/lib/ares_ipv6.h +85 -0
- data/third_party/cares/cares/src/lib/ares_library_init.c +200 -0
- data/third_party/cares/cares/src/lib/ares_library_init.h +43 -0
- data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
- data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
- data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +164 -0
- data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +183 -0
- data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +177 -0
- data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +228 -0
- data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
- data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +168 -0
- data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +214 -0
- data/third_party/cares/cares/src/lib/ares_private.h +423 -0
- data/third_party/cares/cares/src/lib/ares_process.c +1548 -0
- data/third_party/cares/cares/src/lib/ares_query.c +180 -0
- data/third_party/cares/cares/src/lib/ares_search.c +321 -0
- data/third_party/cares/cares/src/lib/ares_send.c +131 -0
- data/third_party/cares/cares/src/lib/ares_setup.h +220 -0
- data/third_party/cares/cares/src/lib/ares_strsplit.c +178 -0
- data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
- data/third_party/cares/cares/src/lib/config-dos.h +115 -0
- data/third_party/cares/cares/src/lib/inet_net_pton.c +444 -0
- data/third_party/cares/cares/src/lib/inet_ntop.c +201 -0
- 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/naive.c +92 -0
- data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
- data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
- data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
- 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 +685 -366
- data/third_party/upb/upb/decode.h +44 -17
- data/third_party/upb/upb/decode_fast.c +304 -302
- data/third_party/upb/upb/decode_fast.h +18 -18
- data/third_party/upb/upb/def.c +1932 -1076
- data/third_party/upb/upb/def.h +336 -288
- data/third_party/upb/upb/def.hpp +134 -174
- data/third_party/upb/upb/encode.c +228 -186
- data/third_party/upb/upb/encode.h +24 -16
- 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/internal/decode.h +211 -0
- data/third_party/upb/upb/internal/table.h +385 -0
- data/third_party/upb/upb/internal/upb.h +68 -0
- 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 +780 -0
- data/third_party/upb/upb/json_encode.h +65 -0
- 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 +125 -167
- data/third_party/upb/upb/msg.h +18 -55
- data/third_party/upb/upb/msg_internal.h +352 -284
- data/third_party/upb/upb/port_def.inc +10 -1
- data/third_party/upb/upb/port_undef.inc +2 -0
- data/third_party/upb/upb/reflection.c +150 -267
- data/third_party/upb/upb/reflection.h +36 -126
- data/third_party/upb/upb/reflection.hpp +6 -6
- 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 +233 -149
- data/third_party/upb/upb/table_internal.h +9 -324
- data/third_party/upb/upb/text_encode.c +115 -91
- data/third_party/upb/upb/text_encode.h +10 -10
- data/third_party/upb/upb/upb.c +34 -281
- data/third_party/upb/upb/upb.h +79 -262
- data/third_party/upb/upb/upb.hpp +31 -28
- data/third_party/xxhash/xxhash.h +607 -352
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +975 -292
- data/third_party/zlib/crc32.h +9441 -436
- data/third_party/zlib/deflate.c +183 -129
- data/third_party/zlib/deflate.h +12 -15
- data/third_party/zlib/gzguts.h +3 -2
- data/third_party/zlib/gzlib.c +6 -4
- data/third_party/zlib/gzread.c +8 -12
- data/third_party/zlib/gzwrite.c +26 -14
- data/third_party/zlib/infback.c +12 -8
- data/third_party/zlib/inffast.c +14 -14
- data/third_party/zlib/inflate.c +44 -10
- data/third_party/zlib/inflate.h +3 -2
- data/third_party/zlib/inftrees.c +3 -3
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +85 -107
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +129 -106
- data/third_party/zlib/zutil.c +11 -9
- data/third_party/zlib/zutil.h +13 -9
- metadata +790 -298
- data/include/grpc/impl/codegen/gpr_slice.h +0 -71
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +0 -390
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -83
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -60
- data/src/core/ext/filters/client_channel/lb_policy.cc +0 -131
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -441
- 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/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +0 -28
- data/src/core/ext/filters/client_channel/resolver.cc +0 -87
- data/src/core/ext/filters/client_channel/resolver.h +0 -136
- data/src/core/ext/filters/client_channel/resolver_factory.h +0 -75
- data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -194
- data/src/core/ext/filters/client_channel/resolver_registry.h +0 -88
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -189
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -99
- data/src/core/ext/filters/client_channel/server_address.cc +0 -170
- data/src/core/ext/filters/client_channel/server_address.h +0 -144
- data/src/core/ext/filters/client_channel/subchannel_interface.h +0 -130
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -264
- data/src/core/ext/filters/client_idle/idle_filter_state.cc +0 -96
- data/src/core/ext/filters/client_idle/idle_filter_state.h +0 -66
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -181
- data/src/core/ext/filters/fault_injection/service_config_parser.h +0 -85
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -553
- 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 -398
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +0 -31
- data/src/core/ext/filters/max_age/max_age_filter.cc +0 -560
- data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -67
- data/src/core/ext/service_config/service_config.cc +0 -227
- data/src/core/ext/service_config/service_config.h +0 -127
- data/src/core/ext/service_config/service_config_call_data.h +0 -72
- data/src/core/ext/service_config/service_config_parser.cc +0 -89
- data/src/core/ext/service_config/service_config_parser.h +0 -97
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -122
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -92
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -192
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -52
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -79
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -125
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
- data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
- data/src/core/ext/transport/chttp2/transport/hpack_utils.h +0 -30
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -38
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -64
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -38
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -64
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -38
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -64
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -38
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -64
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -38
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -64
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.c +0 -102
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.h +0 -306
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.c +0 -56
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.h +0 -135
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.c +0 -115
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.h +0 -371
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -67
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -68
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -67
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -75
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -69
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
- data/src/core/ext/xds/certificate_provider_factory.h +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.cc +0 -222
- data/src/core/lib/channel/handshaker.h +0 -161
- 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/compression/algorithm_metadata.h +0 -62
- data/src/core/lib/compression/compression_args.cc +0 -140
- data/src/core/lib/compression/compression_args.h +0 -58
- data/src/core/lib/compression/stream_compression.cc +0 -81
- data/src/core/lib/compression/stream_compression.h +0 -117
- data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
- data/src/core/lib/compression/stream_compression_gzip.h +0 -28
- data/src/core/lib/compression/stream_compression_identity.cc +0 -91
- data/src/core/lib/compression/stream_compression_identity.h +0 -29
- data/src/core/lib/event_engine/event_engine_factory.cc +0 -49
- data/src/core/lib/event_engine/event_engine_factory.h +0 -33
- 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 -157
- data/src/core/lib/gprpp/arena.cc +0 -104
- data/src/core/lib/gprpp/arena.h +0 -131
- data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +0 -32
- data/src/core/lib/iomgr/error_internal.h +0 -66
- data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1654
- data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
- data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
- data/src/core/lib/iomgr/event_engine/closure.h +0 -42
- 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 -84
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -88
- data/src/core/lib/iomgr/event_engine/pollset.h +0 -25
- data/src/core/lib/iomgr/event_engine/promise.h +0 -51
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -41
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -35
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -115
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -295
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -63
- 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/iomgr_custom.cc +0 -79
- data/src/core/lib/iomgr/iomgr_custom.h +0 -49
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
- data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
- data/src/core/lib/iomgr/pollset_custom.cc +0 -105
- data/src/core/lib/iomgr/pollset_custom.h +0 -37
- data/src/core/lib/iomgr/pollset_set_custom.cc +0 -47
- data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
- data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
- data/src/core/lib/iomgr/resolve_address_custom.h +0 -44
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
- data/src/core/lib/iomgr/tcp_client_custom.cc +0 -146
- data/src/core/lib/iomgr/tcp_custom.cc +0 -350
- data/src/core/lib/iomgr/tcp_custom.h +0 -85
- data/src/core/lib/iomgr/tcp_server_custom.cc +0 -457
- 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/iomgr/timer_custom.cc +0 -96
- data/src/core/lib/iomgr/timer_custom.h +0 -43
- data/src/core/lib/iomgr/work_serializer.cc +0 -226
- data/src/core/lib/iomgr/work_serializer.h +0 -93
- 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/security/authorization/sdk_server_authz_filter.cc +0 -173
- data/src/core/lib/security/authorization/sdk_server_authz_filter.h +0 -67
- data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +0 -170
- 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_intern.cc +0 -367
- data/src/core/lib/slice/slice_refcount_base.h +0 -181
- data/src/core/lib/slice/slice_split.cc +0 -100
- data/src/core/lib/slice/slice_split.h +0 -40
- data/src/core/lib/slice/slice_utils.h +0 -200
- data/src/core/lib/slice/static_slice.cc +0 -377
- data/src/core/lib/slice/static_slice.h +0 -300
- data/src/core/lib/surface/init_secure.cc +0 -103
- data/src/core/lib/transport/byte_stream.cc +0 -162
- data/src/core/lib/transport/byte_stream.h +0 -166
- data/src/core/lib/transport/metadata.cc +0 -714
- data/src/core/lib/transport/metadata.h +0 -449
- data/src/core/lib/transport/static_metadata.cc +0 -1032
- data/src/core/lib/transport/static_metadata.h +0 -322
- data/src/core/lib/transport/status_metadata.cc +0 -63
- data/src/core/lib/transport/status_metadata.h +0 -48
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
- data/third_party/cares/cares/ares.h +0 -670
- data/third_party/cares/cares/ares__close_sockets.c +0 -61
- data/third_party/cares/cares/ares__get_hostent.c +0 -261
- data/third_party/cares/cares/ares_create_query.c +0 -206
- data/third_party/cares/cares/ares_data.c +0 -222
- data/third_party/cares/cares/ares_data.h +0 -72
- data/third_party/cares/cares/ares_dns.h +0 -103
- data/third_party/cares/cares/ares_expand_name.c +0 -209
- data/third_party/cares/cares/ares_expand_string.c +0 -70
- data/third_party/cares/cares/ares_free_hostent.c +0 -41
- data/third_party/cares/cares/ares_getenv.c +0 -30
- data/third_party/cares/cares/ares_gethostbyaddr.c +0 -294
- data/third_party/cares/cares/ares_gethostbyname.c +0 -529
- data/third_party/cares/cares/ares_getnameinfo.c +0 -453
- data/third_party/cares/cares/ares_getopt.c +0 -122
- data/third_party/cares/cares/ares_getopt.h +0 -53
- data/third_party/cares/cares/ares_init.c +0 -2615
- data/third_party/cares/cares/ares_ipv6.h +0 -78
- data/third_party/cares/cares/ares_library_init.c +0 -195
- data/third_party/cares/cares/ares_library_init.h +0 -43
- data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
- data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
- data/third_party/cares/cares/ares_parse_mx_reply.c +0 -170
- data/third_party/cares/cares/ares_parse_naptr_reply.c +0 -194
- data/third_party/cares/cares/ares_parse_ns_reply.c +0 -183
- data/third_party/cares/cares/ares_parse_ptr_reply.c +0 -221
- data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
- data/third_party/cares/cares/ares_parse_srv_reply.c +0 -179
- data/third_party/cares/cares/ares_parse_txt_reply.c +0 -220
- data/third_party/cares/cares/ares_private.h +0 -382
- data/third_party/cares/cares/ares_process.c +0 -1473
- data/third_party/cares/cares/ares_query.c +0 -186
- data/third_party/cares/cares/ares_search.c +0 -323
- data/third_party/cares/cares/ares_send.c +0 -137
- data/third_party/cares/cares/ares_setup.h +0 -217
- data/third_party/cares/cares/ares_strsplit.c +0 -174
- data/third_party/cares/cares/ares_version.h +0 -24
- data/third_party/cares/cares/inet_net_pton.c +0 -450
- data/third_party/cares/cares/inet_ntop.c +0 -207
- data/third_party/upb/upb/decode_internal.h +0 -194
- data/third_party/upb/upb/upb_internal.h +0 -58
- /data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
- /data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
- /data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
- /data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
- /data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
- /data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
- /data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
- /data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
- /data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
- /data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
- /data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
- /data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
- /data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
- /data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
- /data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
- /data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
- /data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
- /data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
- /data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
- /data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
- /data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
- /data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
- /data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
- /data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
- /data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
- /data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
- /data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
- /data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
- /data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
- /data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
- /data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
- /data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
- /data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
@@ -20,44 +20,78 @@
|
|
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>
|
45
|
+
#include <grpc/status.h>
|
30
46
|
#include <grpc/support/alloc.h>
|
47
|
+
#include <grpc/support/atm.h>
|
31
48
|
#include <grpc/support/log.h>
|
32
|
-
#include <grpc/support/
|
49
|
+
#include <grpc/support/time.h>
|
33
50
|
|
34
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"
|
35
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"
|
36
60
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
61
|
+
#include "src/core/ext/transport/chttp2/transport/stream_map.h"
|
37
62
|
#include "src/core/ext/transport/chttp2/transport/varint.h"
|
38
63
|
#include "src/core/lib/channel/channel_args.h"
|
39
|
-
#include "src/core/lib/compression/stream_compression.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"
|
55
|
-
#include "src/core/lib/transport/
|
91
|
+
#include "src/core/lib/transport/metadata_batch.h"
|
56
92
|
#include "src/core/lib/transport/status_conversion.h"
|
57
|
-
#include "src/core/lib/transport/timeout_encoding.h"
|
58
93
|
#include "src/core/lib/transport/transport.h"
|
59
94
|
#include "src/core/lib/transport/transport_impl.h"
|
60
|
-
#include "src/core/lib/uri/uri_parser.h"
|
61
95
|
|
62
96
|
#define DEFAULT_CONNECTION_WINDOW_TARGET (1024 * 1024)
|
63
97
|
#define MAX_WINDOW 0x7fffffffu
|
@@ -65,13 +99,13 @@
|
|
65
99
|
#define DEFAULT_MAX_HEADER_LIST_SIZE (8 * 1024)
|
66
100
|
|
67
101
|
#define DEFAULT_CLIENT_KEEPALIVE_TIME_MS INT_MAX
|
68
|
-
#define DEFAULT_CLIENT_KEEPALIVE_TIMEOUT_MS 20000
|
69
|
-
#define DEFAULT_SERVER_KEEPALIVE_TIME_MS 7200000
|
70
|
-
#define DEFAULT_SERVER_KEEPALIVE_TIMEOUT_MS 20000
|
102
|
+
#define DEFAULT_CLIENT_KEEPALIVE_TIMEOUT_MS 20000 // 20 seconds
|
103
|
+
#define DEFAULT_SERVER_KEEPALIVE_TIME_MS 7200000 // 2 hours
|
104
|
+
#define DEFAULT_SERVER_KEEPALIVE_TIMEOUT_MS 20000 // 20 seconds
|
71
105
|
#define DEFAULT_KEEPALIVE_PERMIT_WITHOUT_CALLS false
|
72
106
|
#define KEEPALIVE_TIME_BACKOFF_MULTIPLIER 2
|
73
107
|
|
74
|
-
#define DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS 300000
|
108
|
+
#define DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS 300000 // 5 minutes
|
75
109
|
#define DEFAULT_MAX_PINGS_BETWEEN_DATA 2
|
76
110
|
#define DEFAULT_MAX_PING_STRIKES 2
|
77
111
|
|
@@ -96,7 +130,6 @@ static int g_default_max_pings_without_data = DEFAULT_MAX_PINGS_BETWEEN_DATA;
|
|
96
130
|
static int g_default_max_ping_strikes = DEFAULT_MAX_PING_STRIKES;
|
97
131
|
|
98
132
|
#define MAX_CLIENT_STREAM_ID 0x7fffffffu
|
99
|
-
grpc_core::TraceFlag grpc_http_trace(false, "http");
|
100
133
|
grpc_core::TraceFlag grpc_keepalive_trace(false, "http_keepalive");
|
101
134
|
grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_refcount(false,
|
102
135
|
"chttp2_refcount");
|
@@ -111,8 +144,6 @@ static void read_action(void* t, grpc_error_handle error);
|
|
111
144
|
static void read_action_locked(void* t, grpc_error_handle error);
|
112
145
|
static void continue_read_action_locked(grpc_chttp2_transport* t);
|
113
146
|
|
114
|
-
static void complete_fetch(void* gs, grpc_error_handle error);
|
115
|
-
static void complete_fetch_locked(void* gs, grpc_error_handle error);
|
116
147
|
// Set a transport level setting, and push it to our peer
|
117
148
|
static void queue_setting_update(grpc_chttp2_transport* t,
|
118
149
|
grpc_chttp2_setting_id id, uint32_t value);
|
@@ -143,30 +174,28 @@ static void start_bdp_ping(void* tp, grpc_error_handle error);
|
|
143
174
|
static void finish_bdp_ping(void* tp, grpc_error_handle error);
|
144
175
|
static void start_bdp_ping_locked(void* tp, grpc_error_handle error);
|
145
176
|
static void finish_bdp_ping_locked(void* tp, grpc_error_handle error);
|
146
|
-
static void next_bdp_ping_timer_expired(
|
147
|
-
static void next_bdp_ping_timer_expired_locked(
|
148
|
-
|
177
|
+
static void next_bdp_ping_timer_expired(grpc_chttp2_transport* t);
|
178
|
+
static void next_bdp_ping_timer_expired_locked(
|
179
|
+
void* tp, GRPC_UNUSED grpc_error_handle error);
|
149
180
|
|
150
181
|
static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error);
|
151
182
|
static void send_ping_locked(grpc_chttp2_transport* t,
|
152
183
|
grpc_closure* on_initiate, grpc_closure* on_ack);
|
153
|
-
static void retry_initiate_ping_locked(void* tp,
|
184
|
+
static void retry_initiate_ping_locked(void* tp,
|
185
|
+
GRPC_UNUSED grpc_error_handle error);
|
154
186
|
|
155
187
|
// keepalive-relevant functions
|
156
|
-
static void init_keepalive_ping(
|
157
|
-
static void init_keepalive_ping_locked(void* arg,
|
188
|
+
static void init_keepalive_ping(grpc_chttp2_transport* t);
|
189
|
+
static void init_keepalive_ping_locked(void* arg,
|
190
|
+
GRPC_UNUSED grpc_error_handle error);
|
158
191
|
static void start_keepalive_ping(void* arg, grpc_error_handle error);
|
159
192
|
static void finish_keepalive_ping(void* arg, grpc_error_handle error);
|
160
193
|
static void start_keepalive_ping_locked(void* arg, grpc_error_handle error);
|
161
194
|
static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error);
|
162
|
-
static void keepalive_watchdog_fired(
|
163
|
-
static void keepalive_watchdog_fired_locked(
|
164
|
-
|
165
|
-
static void
|
166
|
-
|
167
|
-
// Flow control default enabled. Can be disabled by setting
|
168
|
-
// GRPC_EXPERIMENTAL_DISABLE_FLOW_CONTROL
|
169
|
-
bool g_flow_control_enabled = true;
|
195
|
+
static void keepalive_watchdog_fired(grpc_chttp2_transport* t);
|
196
|
+
static void keepalive_watchdog_fired_locked(
|
197
|
+
void* arg, GRPC_UNUSED grpc_error_handle error);
|
198
|
+
static void maybe_reset_keepalive_ping_timer_locked(grpc_chttp2_transport* t);
|
170
199
|
|
171
200
|
namespace grpc_core {
|
172
201
|
|
@@ -174,6 +203,7 @@ namespace {
|
|
174
203
|
TestOnlyGlobalHttp2TransportInitCallback test_only_init_callback = nullptr;
|
175
204
|
TestOnlyGlobalHttp2TransportDestructCallback test_only_destruct_callback =
|
176
205
|
nullptr;
|
206
|
+
bool test_only_disable_transient_failure_state_notification = false;
|
177
207
|
} // namespace
|
178
208
|
|
179
209
|
void TestOnlySetGlobalHttp2TransportInitCallback(
|
@@ -186,6 +216,11 @@ void TestOnlySetGlobalHttp2TransportDestructCallback(
|
|
186
216
|
test_only_destruct_callback = callback;
|
187
217
|
}
|
188
218
|
|
219
|
+
void TestOnlyGlobalHttp2TransportDisableTransientFailureStateNotification(
|
220
|
+
bool disable) {
|
221
|
+
test_only_disable_transient_failure_state_notification = disable;
|
222
|
+
}
|
223
|
+
|
189
224
|
} // namespace grpc_core
|
190
225
|
|
191
226
|
//
|
@@ -195,25 +230,25 @@ void TestOnlySetGlobalHttp2TransportDestructCallback(
|
|
195
230
|
grpc_chttp2_transport::~grpc_chttp2_transport() {
|
196
231
|
size_t i;
|
197
232
|
|
233
|
+
event_engine.reset();
|
234
|
+
|
198
235
|
if (channelz_socket != nullptr) {
|
199
236
|
channelz_socket.reset();
|
200
237
|
}
|
201
238
|
|
202
239
|
grpc_endpoint_destroy(ep);
|
203
240
|
|
204
|
-
|
241
|
+
grpc_slice_buffer_destroy(&qbuf);
|
205
242
|
|
206
|
-
|
243
|
+
grpc_slice_buffer_destroy(&outbuf);
|
207
244
|
|
208
|
-
grpc_error_handle error =
|
209
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed");
|
245
|
+
grpc_error_handle error = GRPC_ERROR_CREATE("Transport destroyed");
|
210
246
|
// ContextList::Execute follows semantics of a callback function and does not
|
211
247
|
// take a ref on error
|
212
248
|
grpc_core::ContextList::Execute(cl, nullptr, error);
|
213
|
-
GRPC_ERROR_UNREF(error);
|
214
249
|
cl = nullptr;
|
215
250
|
|
216
|
-
|
251
|
+
grpc_slice_buffer_destroy(&read_buffer);
|
217
252
|
grpc_chttp2_goaway_parser_destroy(&goaway_parser);
|
218
253
|
|
219
254
|
for (i = 0; i < STREAM_LIST_COUNT; i++) {
|
@@ -221,16 +256,13 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
|
|
221
256
|
GPR_ASSERT(lists[i].tail == nullptr);
|
222
257
|
}
|
223
258
|
|
224
|
-
GRPC_ERROR_UNREF(goaway_error);
|
225
|
-
|
226
259
|
GPR_ASSERT(grpc_chttp2_stream_map_size(&stream_map) == 0);
|
227
260
|
|
228
261
|
grpc_chttp2_stream_map_destroy(&stream_map);
|
229
262
|
|
230
263
|
GRPC_COMBINER_UNREF(combiner, "chttp2_transport");
|
231
264
|
|
232
|
-
cancel_pings(this,
|
233
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed"));
|
265
|
+
cancel_pings(this, GRPC_ERROR_CREATE("Transport destroyed"));
|
234
266
|
|
235
267
|
while (write_cb_pool) {
|
236
268
|
grpc_chttp2_write_cb* next = write_cb_pool->next;
|
@@ -238,9 +270,6 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
|
|
238
270
|
write_cb_pool = next;
|
239
271
|
}
|
240
272
|
|
241
|
-
flow_control.Destroy();
|
242
|
-
|
243
|
-
GRPC_ERROR_UNREF(closed_with_error);
|
244
273
|
gpr_free(ping_acks);
|
245
274
|
if (grpc_core::test_only_destruct_callback != nullptr) {
|
246
275
|
grpc_core::test_only_destruct_callback();
|
@@ -249,170 +278,168 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
|
|
249
278
|
|
250
279
|
static const grpc_transport_vtable* get_vtable(void);
|
251
280
|
|
252
|
-
|
253
|
-
|
254
|
-
const grpc_channel_args* channel_args,
|
281
|
+
static void read_channel_args(grpc_chttp2_transport* t,
|
282
|
+
const grpc_core::ChannelArgs& channel_args,
|
255
283
|
bool is_client) {
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER)) {
|
264
|
-
const grpc_integer_options options = {-1, 0, INT_MAX};
|
265
|
-
const int value =
|
266
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
267
|
-
if (value >= 0) {
|
268
|
-
if ((t->next_stream_id & 1) != (value & 1)) {
|
269
|
-
gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
|
270
|
-
GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
|
271
|
-
is_client ? "client" : "server");
|
272
|
-
} else {
|
273
|
-
t->next_stream_id = static_cast<uint32_t>(value);
|
274
|
-
}
|
275
|
-
}
|
276
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
277
|
-
GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER)) {
|
278
|
-
const grpc_integer_options options = {-1, 0, INT_MAX};
|
279
|
-
const int value =
|
280
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
281
|
-
if (value >= 0) {
|
282
|
-
t->hpack_compressor.SetMaxUsableSize(value);
|
283
|
-
}
|
284
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
285
|
-
GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)) {
|
286
|
-
t->ping_policy.max_pings_without_data = grpc_channel_arg_get_integer(
|
287
|
-
&channel_args->args[i],
|
288
|
-
{g_default_max_pings_without_data, 0, INT_MAX});
|
289
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
290
|
-
GRPC_ARG_HTTP2_MAX_PING_STRIKES)) {
|
291
|
-
t->ping_policy.max_ping_strikes = grpc_channel_arg_get_integer(
|
292
|
-
&channel_args->args[i], {g_default_max_ping_strikes, 0, INT_MAX});
|
293
|
-
} else if (0 ==
|
294
|
-
strcmp(channel_args->args[i].key,
|
295
|
-
GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)) {
|
296
|
-
t->ping_policy.min_recv_ping_interval_without_data =
|
297
|
-
grpc_channel_arg_get_integer(
|
298
|
-
&channel_args->args[i],
|
299
|
-
grpc_integer_options{
|
300
|
-
g_default_min_recv_ping_interval_without_data_ms, 0,
|
301
|
-
INT_MAX});
|
302
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
303
|
-
GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)) {
|
304
|
-
t->write_buffer_size = static_cast<uint32_t>(grpc_channel_arg_get_integer(
|
305
|
-
&channel_args->args[i], {0, 0, MAX_WRITE_BUFFER_SIZE}));
|
306
|
-
} else if (0 ==
|
307
|
-
strcmp(channel_args->args[i].key, GRPC_ARG_HTTP2_BDP_PROBE)) {
|
308
|
-
enable_bdp = grpc_channel_arg_get_bool(&channel_args->args[i], true);
|
309
|
-
} else if (0 ==
|
310
|
-
strcmp(channel_args->args[i].key, GRPC_ARG_KEEPALIVE_TIME_MS)) {
|
311
|
-
const int value = grpc_channel_arg_get_integer(
|
312
|
-
&channel_args->args[i],
|
313
|
-
grpc_integer_options{t->is_client
|
314
|
-
? g_default_client_keepalive_time_ms
|
315
|
-
: g_default_server_keepalive_time_ms,
|
316
|
-
1, INT_MAX});
|
317
|
-
t->keepalive_time = value == INT_MAX ? GRPC_MILLIS_INF_FUTURE : value;
|
318
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
319
|
-
GRPC_ARG_KEEPALIVE_TIMEOUT_MS)) {
|
320
|
-
const int value = grpc_channel_arg_get_integer(
|
321
|
-
&channel_args->args[i],
|
322
|
-
grpc_integer_options{t->is_client
|
323
|
-
? g_default_client_keepalive_timeout_ms
|
324
|
-
: g_default_server_keepalive_timeout_ms,
|
325
|
-
0, INT_MAX});
|
326
|
-
t->keepalive_timeout = value == INT_MAX ? GRPC_MILLIS_INF_FUTURE : value;
|
327
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
328
|
-
GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)) {
|
329
|
-
t->keepalive_permit_without_calls = static_cast<uint32_t>(
|
330
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], {0, 0, 1}));
|
331
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
332
|
-
GRPC_ARG_OPTIMIZATION_TARGET)) {
|
333
|
-
gpr_log(GPR_INFO, "GRPC_ARG_OPTIMIZATION_TARGET is deprecated");
|
334
|
-
} else if (0 ==
|
335
|
-
strcmp(channel_args->args[i].key, GRPC_ARG_ENABLE_CHANNELZ)) {
|
336
|
-
channelz_enabled = grpc_channel_arg_get_bool(
|
337
|
-
&channel_args->args[i], GRPC_ENABLE_CHANNELZ_DEFAULT);
|
284
|
+
const int initial_sequence_number =
|
285
|
+
channel_args.GetInt(GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER).value_or(-1);
|
286
|
+
if (initial_sequence_number > 0) {
|
287
|
+
if ((t->next_stream_id & 1) != (initial_sequence_number & 1)) {
|
288
|
+
gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
|
289
|
+
GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
|
290
|
+
is_client ? "client" : "server");
|
338
291
|
} else {
|
339
|
-
|
340
|
-
const char* channel_arg_name;
|
341
|
-
grpc_chttp2_setting_id setting_id;
|
342
|
-
grpc_integer_options integer_options;
|
343
|
-
bool availability[2] /* server, client */;
|
344
|
-
} settings_map[] = {{GRPC_ARG_MAX_CONCURRENT_STREAMS,
|
345
|
-
GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
|
346
|
-
{-1, 0, INT32_MAX},
|
347
|
-
{true, false}},
|
348
|
-
{GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER,
|
349
|
-
GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
|
350
|
-
{-1, 0, INT32_MAX},
|
351
|
-
{true, true}},
|
352
|
-
{GRPC_ARG_MAX_METADATA_SIZE,
|
353
|
-
GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
|
354
|
-
{-1, 0, INT32_MAX},
|
355
|
-
{true, true}},
|
356
|
-
{GRPC_ARG_HTTP2_MAX_FRAME_SIZE,
|
357
|
-
GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
|
358
|
-
{-1, 16384, 16777215},
|
359
|
-
{true, true}},
|
360
|
-
{GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY,
|
361
|
-
GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA,
|
362
|
-
{1, 0, 1},
|
363
|
-
{true, true}},
|
364
|
-
{GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES,
|
365
|
-
GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
|
366
|
-
{-1, 5, INT32_MAX},
|
367
|
-
{true, true}}};
|
368
|
-
for (j = 0; j < static_cast<int> GPR_ARRAY_SIZE(settings_map); j++) {
|
369
|
-
if (0 == strcmp(channel_args->args[i].key,
|
370
|
-
settings_map[j].channel_arg_name)) {
|
371
|
-
if (!settings_map[j].availability[is_client]) {
|
372
|
-
gpr_log(GPR_DEBUG, "%s is not available on %s",
|
373
|
-
settings_map[j].channel_arg_name,
|
374
|
-
is_client ? "clients" : "servers");
|
375
|
-
} else {
|
376
|
-
int value = grpc_channel_arg_get_integer(
|
377
|
-
&channel_args->args[i], settings_map[j].integer_options);
|
378
|
-
if (value >= 0) {
|
379
|
-
queue_setting_update(t, settings_map[j].setting_id,
|
380
|
-
static_cast<uint32_t>(value));
|
381
|
-
}
|
382
|
-
}
|
383
|
-
break;
|
384
|
-
}
|
385
|
-
}
|
292
|
+
t->next_stream_id = static_cast<uint32_t>(initial_sequence_number);
|
386
293
|
}
|
387
294
|
}
|
388
|
-
|
295
|
+
|
296
|
+
const int max_hpack_table_size =
|
297
|
+
channel_args.GetInt(GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER).value_or(-1);
|
298
|
+
if (max_hpack_table_size >= 0) {
|
299
|
+
t->hpack_compressor.SetMaxUsableSize(max_hpack_table_size);
|
300
|
+
}
|
301
|
+
|
302
|
+
t->ping_policy.max_pings_without_data =
|
303
|
+
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)
|
304
|
+
.value_or(g_default_max_pings_without_data));
|
305
|
+
t->ping_policy.max_ping_strikes =
|
306
|
+
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PING_STRIKES)
|
307
|
+
.value_or(g_default_max_ping_strikes));
|
308
|
+
t->ping_policy.min_recv_ping_interval_without_data =
|
309
|
+
std::max(grpc_core::Duration::Zero(),
|
310
|
+
channel_args
|
311
|
+
.GetDurationFromIntMillis(
|
312
|
+
GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)
|
313
|
+
.value_or(grpc_core::Duration::Milliseconds(
|
314
|
+
g_default_min_recv_ping_interval_without_data_ms)));
|
315
|
+
t->write_buffer_size =
|
316
|
+
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)
|
317
|
+
.value_or(grpc_core::chttp2::kDefaultWindow));
|
318
|
+
t->keepalive_time =
|
319
|
+
std::max(grpc_core::Duration::Milliseconds(1),
|
320
|
+
channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIME_MS)
|
321
|
+
.value_or(grpc_core::Duration::Milliseconds(
|
322
|
+
t->is_client ? g_default_client_keepalive_time_ms
|
323
|
+
: g_default_server_keepalive_time_ms)));
|
324
|
+
t->keepalive_timeout = std::max(
|
325
|
+
grpc_core::Duration::Zero(),
|
326
|
+
channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIMEOUT_MS)
|
327
|
+
.value_or(grpc_core::Duration::Milliseconds(
|
328
|
+
t->is_client ? g_default_client_keepalive_timeout_ms
|
329
|
+
: g_default_server_keepalive_timeout_ms)));
|
330
|
+
t->keepalive_permit_without_calls =
|
331
|
+
channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
|
332
|
+
.value_or(false);
|
333
|
+
// Only send the prefered rx frame size http2 setting if we are instructed
|
334
|
+
// to auto size the buffers allocated at tcp level and we also can adjust
|
335
|
+
// sending frame size.
|
336
|
+
t->enable_preferred_rx_crypto_frame_advertisement =
|
337
|
+
channel_args
|
338
|
+
.GetBool(GRPC_ARG_EXPERIMENTAL_HTTP2_PREFERRED_CRYPTO_FRAME_SIZE)
|
339
|
+
.value_or(false);
|
340
|
+
|
341
|
+
if (channel_args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
|
342
|
+
.value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
|
389
343
|
t->channelz_socket =
|
390
344
|
grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>(
|
391
345
|
std::string(grpc_endpoint_get_local_address(t->ep)), t->peer_string,
|
392
346
|
absl::StrFormat("%s %s", get_vtable()->name, t->peer_string),
|
393
|
-
|
394
|
-
|
347
|
+
channel_args
|
348
|
+
.GetObjectRef<grpc_core::channelz::SocketNode::Security>());
|
349
|
+
}
|
350
|
+
|
351
|
+
static const struct {
|
352
|
+
absl::string_view channel_arg_name;
|
353
|
+
grpc_chttp2_setting_id setting_id;
|
354
|
+
int default_value;
|
355
|
+
int min;
|
356
|
+
int max;
|
357
|
+
bool availability[2] /* server, client */;
|
358
|
+
} settings_map[] = {{GRPC_ARG_MAX_CONCURRENT_STREAMS,
|
359
|
+
GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
|
360
|
+
-1,
|
361
|
+
0,
|
362
|
+
INT32_MAX,
|
363
|
+
{true, false}},
|
364
|
+
{GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER,
|
365
|
+
GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
|
366
|
+
-1,
|
367
|
+
0,
|
368
|
+
INT32_MAX,
|
369
|
+
{true, true}},
|
370
|
+
{GRPC_ARG_MAX_METADATA_SIZE,
|
371
|
+
GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
|
372
|
+
-1,
|
373
|
+
0,
|
374
|
+
INT32_MAX,
|
375
|
+
{true, true}},
|
376
|
+
{GRPC_ARG_HTTP2_MAX_FRAME_SIZE,
|
377
|
+
GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
|
378
|
+
-1,
|
379
|
+
16384,
|
380
|
+
16777215,
|
381
|
+
{true, true}},
|
382
|
+
{GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY,
|
383
|
+
GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA,
|
384
|
+
1,
|
385
|
+
0,
|
386
|
+
1,
|
387
|
+
{true, true}},
|
388
|
+
{GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES,
|
389
|
+
GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
|
390
|
+
-1,
|
391
|
+
5,
|
392
|
+
INT32_MAX,
|
393
|
+
{true, true}}};
|
394
|
+
|
395
|
+
for (size_t i = 0; i < GPR_ARRAY_SIZE(settings_map); i++) {
|
396
|
+
const auto& setting = settings_map[i];
|
397
|
+
if (setting.availability[is_client]) {
|
398
|
+
const int value = channel_args.GetInt(setting.channel_arg_name)
|
399
|
+
.value_or(setting.default_value);
|
400
|
+
if (value >= 0) {
|
401
|
+
queue_setting_update(t, setting.setting_id,
|
402
|
+
grpc_core::Clamp(value, setting.min, setting.max));
|
403
|
+
}
|
404
|
+
} else if (channel_args.Contains(setting.channel_arg_name)) {
|
405
|
+
gpr_log(GPR_DEBUG, "%s is not available on %s",
|
406
|
+
std::string(setting.channel_arg_name).c_str(),
|
407
|
+
is_client ? "clients" : "servers");
|
408
|
+
}
|
409
|
+
}
|
410
|
+
|
411
|
+
if (t->enable_preferred_rx_crypto_frame_advertisement) {
|
412
|
+
const grpc_chttp2_setting_parameters* sp =
|
413
|
+
&grpc_chttp2_settings_parameters
|
414
|
+
[GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE];
|
415
|
+
queue_setting_update(
|
416
|
+
t, GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE,
|
417
|
+
grpc_core::Clamp(INT_MAX, static_cast<int>(sp->min_value),
|
418
|
+
static_cast<int>(sp->max_value)));
|
395
419
|
}
|
396
|
-
return enable_bdp;
|
397
420
|
}
|
398
421
|
|
399
422
|
static void init_transport_keepalive_settings(grpc_chttp2_transport* t) {
|
400
423
|
if (t->is_client) {
|
401
424
|
t->keepalive_time = g_default_client_keepalive_time_ms == INT_MAX
|
402
|
-
?
|
403
|
-
:
|
425
|
+
? grpc_core::Duration::Infinity()
|
426
|
+
: grpc_core::Duration::Milliseconds(
|
427
|
+
g_default_client_keepalive_time_ms);
|
404
428
|
t->keepalive_timeout = g_default_client_keepalive_timeout_ms == INT_MAX
|
405
|
-
?
|
406
|
-
:
|
429
|
+
? grpc_core::Duration::Infinity()
|
430
|
+
: grpc_core::Duration::Milliseconds(
|
431
|
+
g_default_client_keepalive_timeout_ms);
|
407
432
|
t->keepalive_permit_without_calls =
|
408
433
|
g_default_client_keepalive_permit_without_calls;
|
409
434
|
} else {
|
410
435
|
t->keepalive_time = g_default_server_keepalive_time_ms == INT_MAX
|
411
|
-
?
|
412
|
-
:
|
436
|
+
? grpc_core::Duration::Infinity()
|
437
|
+
: grpc_core::Duration::Milliseconds(
|
438
|
+
g_default_server_keepalive_time_ms);
|
413
439
|
t->keepalive_timeout = g_default_server_keepalive_timeout_ms == INT_MAX
|
414
|
-
?
|
415
|
-
:
|
440
|
+
? grpc_core::Duration::Infinity()
|
441
|
+
: grpc_core::Duration::Milliseconds(
|
442
|
+
g_default_server_keepalive_timeout_ms);
|
416
443
|
t->keepalive_permit_without_calls =
|
417
444
|
g_default_server_keepalive_permit_without_calls;
|
418
445
|
}
|
@@ -422,33 +449,39 @@ static void configure_transport_ping_policy(grpc_chttp2_transport* t) {
|
|
422
449
|
t->ping_policy.max_pings_without_data = g_default_max_pings_without_data;
|
423
450
|
t->ping_policy.max_ping_strikes = g_default_max_ping_strikes;
|
424
451
|
t->ping_policy.min_recv_ping_interval_without_data =
|
425
|
-
|
452
|
+
grpc_core::Duration::Milliseconds(
|
453
|
+
g_default_min_recv_ping_interval_without_data_ms);
|
426
454
|
}
|
427
455
|
|
428
|
-
static void
|
429
|
-
|
456
|
+
static void init_keepalive_pings_if_enabled_locked(
|
457
|
+
void* arg, GRPC_UNUSED grpc_error_handle error) {
|
458
|
+
GPR_DEBUG_ASSERT(error.ok());
|
459
|
+
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
460
|
+
if (t->keepalive_time != grpc_core::Duration::Infinity()) {
|
430
461
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_WAITING;
|
431
462
|
GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
463
|
+
t->keepalive_ping_timer_handle =
|
464
|
+
t->event_engine->RunAfter(t->keepalive_time, [t] {
|
465
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
466
|
+
grpc_core::ExecCtx exec_ctx;
|
467
|
+
init_keepalive_ping(t);
|
468
|
+
});
|
437
469
|
} else {
|
438
470
|
// Use GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED to indicate there are no
|
439
|
-
//
|
471
|
+
// inflight keepalive timers
|
440
472
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED;
|
441
473
|
}
|
442
474
|
}
|
443
475
|
|
444
476
|
grpc_chttp2_transport::grpc_chttp2_transport(
|
445
|
-
const
|
477
|
+
const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
|
478
|
+
bool is_client)
|
446
479
|
: refs(1, GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_refcount)
|
447
480
|
? "chttp2_refcount"
|
448
481
|
: nullptr),
|
449
482
|
ep(ep),
|
450
483
|
peer_string(grpc_endpoint_get_peer(ep)),
|
451
|
-
memory_owner(grpc_core::
|
484
|
+
memory_owner(channel_args.GetObject<grpc_core::ResourceQuota>()
|
452
485
|
->memory_quota()
|
453
486
|
->CreateMemoryOwner(absl::StrCat(
|
454
487
|
grpc_endpoint_get_peer(ep), ":client_transport"))),
|
@@ -459,7 +492,14 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
459
492
|
GRPC_CHANNEL_READY),
|
460
493
|
is_client(is_client),
|
461
494
|
next_stream_id(is_client ? 1 : 2),
|
462
|
-
|
495
|
+
flow_control(
|
496
|
+
peer_string.c_str(),
|
497
|
+
channel_args.GetBool(GRPC_ARG_HTTP2_BDP_PROBE).value_or(true),
|
498
|
+
&memory_owner),
|
499
|
+
deframe_state(is_client ? GRPC_DTS_FH_0 : GRPC_DTS_CLIENT_PREFIX_0),
|
500
|
+
event_engine(
|
501
|
+
channel_args
|
502
|
+
.GetObjectRef<grpc_event_engine::experimental::EventEngine>()) {
|
463
503
|
GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
|
464
504
|
GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
|
465
505
|
base.vtable = get_vtable();
|
@@ -500,32 +540,24 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
500
540
|
configure_transport_ping_policy(this);
|
501
541
|
init_transport_keepalive_settings(this);
|
502
542
|
|
503
|
-
|
504
|
-
if (channel_args) {
|
505
|
-
enable_bdp = read_channel_args(this, channel_args, is_client);
|
506
|
-
}
|
507
|
-
|
508
|
-
if (g_flow_control_enabled) {
|
509
|
-
flow_control.Init<grpc_core::chttp2::TransportFlowControl>(this,
|
510
|
-
enable_bdp);
|
511
|
-
} else {
|
512
|
-
flow_control.Init<grpc_core::chttp2::TransportFlowControlDisabled>(this);
|
513
|
-
enable_bdp = false;
|
514
|
-
}
|
543
|
+
read_channel_args(this, channel_args, is_client);
|
515
544
|
|
516
545
|
// No pings allowed before receiving a header or data frame.
|
517
546
|
ping_state.pings_before_data_required = 0;
|
518
|
-
ping_state.
|
519
|
-
ping_state.last_ping_sent_time = GRPC_MILLIS_INF_PAST;
|
547
|
+
ping_state.last_ping_sent_time = grpc_core::Timestamp::InfPast();
|
520
548
|
|
521
|
-
ping_recv_state.last_ping_recv_time =
|
549
|
+
ping_recv_state.last_ping_recv_time = grpc_core::Timestamp::InfPast();
|
522
550
|
ping_recv_state.ping_strikes = 0;
|
523
551
|
|
524
|
-
|
552
|
+
grpc_core::ExecCtx exec_ctx;
|
553
|
+
combiner->Run(
|
554
|
+
GRPC_CLOSURE_INIT(&init_keepalive_ping_locked,
|
555
|
+
init_keepalive_pings_if_enabled_locked, this, nullptr),
|
556
|
+
absl::OkStatus());
|
525
557
|
|
526
|
-
if (
|
558
|
+
if (flow_control.bdp_probe()) {
|
527
559
|
bdp_ping_blocked = true;
|
528
|
-
grpc_chttp2_act_on_flowctl_action(flow_control
|
560
|
+
grpc_chttp2_act_on_flowctl_action(flow_control.PeriodicUpdate(), this,
|
529
561
|
nullptr);
|
530
562
|
}
|
531
563
|
|
@@ -540,9 +572,9 @@ static void destroy_transport_locked(void* tp, grpc_error_handle /*error*/) {
|
|
540
572
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
541
573
|
t->destroying = 1;
|
542
574
|
close_transport_locked(
|
543
|
-
t, grpc_error_set_int(
|
544
|
-
|
545
|
-
|
575
|
+
t, grpc_error_set_int(GRPC_ERROR_CREATE("Transport destroyed"),
|
576
|
+
grpc_core::StatusIntProperty::kOccurredDuringWrite,
|
577
|
+
t->write_state));
|
546
578
|
t->memory_owner.Reset();
|
547
579
|
// Must be the last line.
|
548
580
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "destroy");
|
@@ -551,45 +583,66 @@ static void destroy_transport_locked(void* tp, grpc_error_handle /*error*/) {
|
|
551
583
|
static void destroy_transport(grpc_transport* gt) {
|
552
584
|
grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
|
553
585
|
t->combiner->Run(GRPC_CLOSURE_CREATE(destroy_transport_locked, t, nullptr),
|
554
|
-
|
586
|
+
absl::OkStatus());
|
555
587
|
}
|
556
588
|
|
557
589
|
static void close_transport_locked(grpc_chttp2_transport* t,
|
558
590
|
grpc_error_handle error) {
|
559
|
-
end_all_the_calls(t,
|
560
|
-
cancel_pings(t,
|
561
|
-
if (t->closed_with_error
|
591
|
+
end_all_the_calls(t, error);
|
592
|
+
cancel_pings(t, error);
|
593
|
+
if (t->closed_with_error.ok()) {
|
562
594
|
if (!grpc_error_has_clear_grpc_status(error)) {
|
563
|
-
error =
|
564
|
-
|
595
|
+
error =
|
596
|
+
grpc_error_set_int(error, grpc_core::StatusIntProperty::kRpcStatus,
|
597
|
+
GRPC_STATUS_UNAVAILABLE);
|
565
598
|
}
|
566
599
|
if (t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE) {
|
567
|
-
if (t->close_transport_on_writes_finished
|
600
|
+
if (t->close_transport_on_writes_finished.ok()) {
|
568
601
|
t->close_transport_on_writes_finished =
|
569
|
-
|
570
|
-
"Delayed close due to in-progress write");
|
602
|
+
GRPC_ERROR_CREATE("Delayed close due to in-progress write");
|
571
603
|
}
|
572
604
|
t->close_transport_on_writes_finished =
|
573
605
|
grpc_error_add_child(t->close_transport_on_writes_finished, error);
|
574
606
|
return;
|
575
607
|
}
|
576
|
-
GPR_ASSERT(error
|
577
|
-
t->closed_with_error =
|
608
|
+
GPR_ASSERT(!error.ok());
|
609
|
+
t->closed_with_error = error;
|
578
610
|
connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, absl::Status(),
|
579
611
|
"close_transport");
|
580
|
-
if (t->ping_state.
|
581
|
-
|
612
|
+
if (t->ping_state.delayed_ping_timer_handle.has_value()) {
|
613
|
+
if (t->event_engine->Cancel(*t->ping_state.delayed_ping_timer_handle)) {
|
614
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "retry_initiate_ping_locked");
|
615
|
+
t->ping_state.delayed_ping_timer_handle.reset();
|
616
|
+
}
|
582
617
|
}
|
583
|
-
if (t->
|
584
|
-
|
618
|
+
if (t->next_bdp_ping_timer_handle.has_value()) {
|
619
|
+
if (t->event_engine->Cancel(*t->next_bdp_ping_timer_handle)) {
|
620
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
621
|
+
t->next_bdp_ping_timer_handle.reset();
|
622
|
+
}
|
585
623
|
}
|
586
624
|
switch (t->keepalive_state) {
|
587
625
|
case GRPC_CHTTP2_KEEPALIVE_STATE_WAITING:
|
588
|
-
|
626
|
+
if (t->keepalive_ping_timer_handle.has_value()) {
|
627
|
+
if (t->event_engine->Cancel(*t->keepalive_ping_timer_handle)) {
|
628
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
|
629
|
+
t->keepalive_ping_timer_handle.reset();
|
630
|
+
}
|
631
|
+
}
|
589
632
|
break;
|
590
633
|
case GRPC_CHTTP2_KEEPALIVE_STATE_PINGING:
|
591
|
-
|
592
|
-
|
634
|
+
if (t->keepalive_ping_timer_handle.has_value()) {
|
635
|
+
if (t->event_engine->Cancel(*t->keepalive_ping_timer_handle)) {
|
636
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
|
637
|
+
t->keepalive_ping_timer_handle.reset();
|
638
|
+
}
|
639
|
+
}
|
640
|
+
if (t->keepalive_watchdog_timer_handle.has_value()) {
|
641
|
+
if (t->event_engine->Cancel(*t->keepalive_watchdog_timer_handle)) {
|
642
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
|
643
|
+
t->keepalive_watchdog_timer_handle.reset();
|
644
|
+
}
|
645
|
+
}
|
593
646
|
break;
|
594
647
|
case GRPC_CHTTP2_KEEPALIVE_STATE_DYING:
|
595
648
|
case GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED:
|
@@ -603,19 +656,17 @@ static void close_transport_locked(grpc_chttp2_transport* t,
|
|
603
656
|
GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:close");
|
604
657
|
}
|
605
658
|
GPR_ASSERT(t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE);
|
606
|
-
grpc_endpoint_shutdown(t->ep,
|
659
|
+
grpc_endpoint_shutdown(t->ep, error);
|
607
660
|
}
|
608
661
|
if (t->notify_on_receive_settings != nullptr) {
|
609
662
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_receive_settings,
|
610
|
-
|
663
|
+
error);
|
611
664
|
t->notify_on_receive_settings = nullptr;
|
612
665
|
}
|
613
666
|
if (t->notify_on_close != nullptr) {
|
614
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_close,
|
615
|
-
GRPC_ERROR_REF(error));
|
667
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_close, error);
|
616
668
|
t->notify_on_close = nullptr;
|
617
669
|
}
|
618
|
-
GRPC_ERROR_UNREF(error);
|
619
670
|
}
|
620
671
|
|
621
672
|
#ifndef NDEBUG
|
@@ -649,34 +700,28 @@ grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
|
|
649
700
|
: t(t),
|
650
701
|
refcount(refcount),
|
651
702
|
reffer(this),
|
652
|
-
stream_reservation(t->memory_owner.MakeReservation(
|
653
|
-
grpc_core::kResourceQuotaCallSize)), // TODO(ctiller): sizeof(*this),
|
654
|
-
// or better, move allocation to
|
655
|
-
// memory quota.
|
656
703
|
initial_metadata_buffer(arena),
|
657
|
-
trailing_metadata_buffer(arena)
|
704
|
+
trailing_metadata_buffer(arena),
|
705
|
+
flow_control(&t->flow_control) {
|
658
706
|
if (server_data) {
|
659
707
|
id = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(server_data));
|
708
|
+
if (grpc_http_trace.enabled()) {
|
709
|
+
gpr_log(GPR_DEBUG, "HTTP:%p/%p creating accept stream %d [from %p]", t,
|
710
|
+
this, id, server_data);
|
711
|
+
}
|
660
712
|
*t->accepting_stream = this;
|
661
713
|
grpc_chttp2_stream_map_add(&t->stream_map, id, this);
|
662
714
|
post_destructive_reclaimer(t);
|
663
715
|
}
|
664
|
-
if (t->flow_control->flow_control_enabled()) {
|
665
|
-
flow_control.Init<grpc_core::chttp2::StreamFlowControl>(
|
666
|
-
static_cast<grpc_core::chttp2::TransportFlowControl*>(
|
667
|
-
t->flow_control.get()),
|
668
|
-
this);
|
669
|
-
} else {
|
670
|
-
flow_control.Init<grpc_core::chttp2::StreamFlowControlDisabled>();
|
671
|
-
}
|
672
716
|
|
673
717
|
grpc_slice_buffer_init(&frame_storage);
|
674
|
-
grpc_slice_buffer_init(&unprocessed_incoming_frames_buffer);
|
675
718
|
grpc_slice_buffer_init(&flow_controlled_buffer);
|
676
|
-
GRPC_CLOSURE_INIT(&reset_byte_stream, ::reset_byte_stream, this, nullptr);
|
677
719
|
}
|
678
720
|
|
679
721
|
grpc_chttp2_stream::~grpc_chttp2_stream() {
|
722
|
+
grpc_chttp2_list_remove_stalled_by_stream(t, this);
|
723
|
+
grpc_chttp2_list_remove_stalled_by_transport(t, this);
|
724
|
+
|
680
725
|
if (t->channelz_socket != nullptr) {
|
681
726
|
if ((t->is_client && eos_received) || (!t->is_client && eos_sent)) {
|
682
727
|
t->channelz_socket->RecordStreamSucceeded();
|
@@ -690,76 +735,48 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
|
|
690
735
|
GPR_ASSERT(grpc_chttp2_stream_map_find(&t->stream_map, id) == nullptr);
|
691
736
|
}
|
692
737
|
|
693
|
-
|
694
|
-
grpc_slice_buffer_destroy_internal(&frame_storage);
|
695
|
-
if (stream_compression_method != GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS) {
|
696
|
-
grpc_slice_buffer_destroy_internal(&compressed_data_buffer);
|
697
|
-
}
|
698
|
-
if (stream_decompression_method !=
|
699
|
-
GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS) {
|
700
|
-
grpc_slice_buffer_destroy_internal(&decompressed_data_buffer);
|
701
|
-
}
|
738
|
+
grpc_slice_buffer_destroy(&frame_storage);
|
702
739
|
|
703
740
|
for (int i = 0; i < STREAM_LIST_COUNT; i++) {
|
704
|
-
if (GPR_UNLIKELY(included
|
705
|
-
|
706
|
-
|
707
|
-
|
741
|
+
if (GPR_UNLIKELY(included.is_set(i))) {
|
742
|
+
grpc_core::Crash(absl::StrFormat("%s stream %d still included in list %d",
|
743
|
+
t->is_client ? "client" : "server", id,
|
744
|
+
i));
|
708
745
|
}
|
709
746
|
}
|
710
747
|
|
711
748
|
GPR_ASSERT(send_initial_metadata_finished == nullptr);
|
712
|
-
GPR_ASSERT(fetching_send_message == nullptr);
|
713
749
|
GPR_ASSERT(send_trailing_metadata_finished == nullptr);
|
714
750
|
GPR_ASSERT(recv_initial_metadata_ready == nullptr);
|
715
751
|
GPR_ASSERT(recv_message_ready == nullptr);
|
716
752
|
GPR_ASSERT(recv_trailing_metadata_finished == nullptr);
|
717
|
-
|
718
|
-
GRPC_ERROR_UNREF(read_closed_error);
|
719
|
-
GRPC_ERROR_UNREF(write_closed_error);
|
720
|
-
GRPC_ERROR_UNREF(byte_stream_error);
|
721
|
-
flow_control.Destroy();
|
753
|
+
grpc_slice_buffer_destroy(&flow_controlled_buffer);
|
722
754
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "stream");
|
723
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, destroy_stream_arg,
|
755
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, destroy_stream_arg, absl::OkStatus());
|
724
756
|
}
|
725
757
|
|
726
758
|
static int init_stream(grpc_transport* gt, grpc_stream* gs,
|
727
759
|
grpc_stream_refcount* refcount, const void* server_data,
|
728
760
|
grpc_core::Arena* arena) {
|
729
|
-
GPR_TIMER_SCOPE("init_stream", 0);
|
730
761
|
grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
|
731
762
|
new (gs) grpc_chttp2_stream(t, refcount, server_data, arena);
|
732
763
|
return 0;
|
733
764
|
}
|
734
765
|
|
735
766
|
static void destroy_stream_locked(void* sp, grpc_error_handle /*error*/) {
|
736
|
-
GPR_TIMER_SCOPE("destroy_stream", 0);
|
737
767
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(sp);
|
738
768
|
s->~grpc_chttp2_stream();
|
739
769
|
}
|
740
770
|
|
741
771
|
static void destroy_stream(grpc_transport* gt, grpc_stream* gs,
|
742
772
|
grpc_closure* then_schedule_closure) {
|
743
|
-
GPR_TIMER_SCOPE("destroy_stream", 0);
|
744
773
|
grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
|
745
774
|
grpc_chttp2_stream* s = reinterpret_cast<grpc_chttp2_stream*>(gs);
|
746
|
-
if (s->stream_compression_method !=
|
747
|
-
GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS &&
|
748
|
-
s->stream_compression_ctx != nullptr) {
|
749
|
-
grpc_stream_compression_context_destroy(s->stream_compression_ctx);
|
750
|
-
s->stream_compression_ctx = nullptr;
|
751
|
-
}
|
752
|
-
if (s->stream_decompression_method !=
|
753
|
-
GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS &&
|
754
|
-
s->stream_decompression_ctx != nullptr) {
|
755
|
-
grpc_stream_compression_context_destroy(s->stream_decompression_ctx);
|
756
|
-
s->stream_decompression_ctx = nullptr;
|
757
|
-
}
|
758
775
|
|
759
776
|
s->destroy_stream_arg = then_schedule_closure;
|
760
777
|
t->combiner->Run(
|
761
778
|
GRPC_CLOSURE_INIT(&s->destroy_stream, destroy_stream_locked, s, nullptr),
|
762
|
-
|
779
|
+
absl::OkStatus());
|
763
780
|
}
|
764
781
|
|
765
782
|
grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream(grpc_chttp2_transport* t,
|
@@ -807,90 +824,18 @@ static void set_write_state(grpc_chttp2_transport* t,
|
|
807
824
|
// from peer while we had some pending writes)
|
808
825
|
if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
|
809
826
|
grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &t->run_after_write);
|
810
|
-
if (t->close_transport_on_writes_finished
|
827
|
+
if (!t->close_transport_on_writes_finished.ok()) {
|
811
828
|
grpc_error_handle err = t->close_transport_on_writes_finished;
|
812
|
-
t->close_transport_on_writes_finished =
|
829
|
+
t->close_transport_on_writes_finished = absl::OkStatus();
|
813
830
|
close_transport_locked(t, err);
|
814
831
|
}
|
815
832
|
}
|
816
833
|
}
|
817
834
|
|
818
|
-
static void inc_initiate_write_reason(
|
819
|
-
grpc_chttp2_initiate_write_reason reason) {
|
820
|
-
switch (reason) {
|
821
|
-
case GRPC_CHTTP2_INITIATE_WRITE_INITIAL_WRITE:
|
822
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_INITIAL_WRITE();
|
823
|
-
break;
|
824
|
-
case GRPC_CHTTP2_INITIATE_WRITE_START_NEW_STREAM:
|
825
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_START_NEW_STREAM();
|
826
|
-
break;
|
827
|
-
case GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE:
|
828
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_MESSAGE();
|
829
|
-
break;
|
830
|
-
case GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA:
|
831
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_INITIAL_METADATA();
|
832
|
-
break;
|
833
|
-
case GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA:
|
834
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_TRAILING_METADATA();
|
835
|
-
break;
|
836
|
-
case GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING:
|
837
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_RETRY_SEND_PING();
|
838
|
-
break;
|
839
|
-
case GRPC_CHTTP2_INITIATE_WRITE_CONTINUE_PINGS:
|
840
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_CONTINUE_PINGS();
|
841
|
-
break;
|
842
|
-
case GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT:
|
843
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_GOAWAY_SENT();
|
844
|
-
break;
|
845
|
-
case GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM:
|
846
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_RST_STREAM();
|
847
|
-
break;
|
848
|
-
case GRPC_CHTTP2_INITIATE_WRITE_CLOSE_FROM_API:
|
849
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_CLOSE_FROM_API();
|
850
|
-
break;
|
851
|
-
case GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL:
|
852
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_STREAM_FLOW_CONTROL();
|
853
|
-
break;
|
854
|
-
case GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL:
|
855
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_TRANSPORT_FLOW_CONTROL();
|
856
|
-
break;
|
857
|
-
case GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS:
|
858
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_SETTINGS();
|
859
|
-
break;
|
860
|
-
case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_SETTING:
|
861
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FLOW_CONTROL_UNSTALLED_BY_SETTING();
|
862
|
-
break;
|
863
|
-
case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_UPDATE:
|
864
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FLOW_CONTROL_UNSTALLED_BY_UPDATE();
|
865
|
-
break;
|
866
|
-
case GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING:
|
867
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_APPLICATION_PING();
|
868
|
-
break;
|
869
|
-
case GRPC_CHTTP2_INITIATE_WRITE_BDP_PING:
|
870
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_BDP_ESTIMATOR_PING();
|
871
|
-
break;
|
872
|
-
case GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING:
|
873
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_KEEPALIVE_PING();
|
874
|
-
break;
|
875
|
-
case GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL_UNSTALLED:
|
876
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_TRANSPORT_FLOW_CONTROL_UNSTALLED();
|
877
|
-
break;
|
878
|
-
case GRPC_CHTTP2_INITIATE_WRITE_PING_RESPONSE:
|
879
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_PING_RESPONSE();
|
880
|
-
break;
|
881
|
-
case GRPC_CHTTP2_INITIATE_WRITE_FORCE_RST_STREAM:
|
882
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FORCE_RST_STREAM();
|
883
|
-
break;
|
884
|
-
}
|
885
|
-
}
|
886
|
-
|
887
835
|
void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
|
888
836
|
grpc_chttp2_initiate_write_reason reason) {
|
889
|
-
GPR_TIMER_SCOPE("grpc_chttp2_initiate_write", 0);
|
890
|
-
|
891
837
|
switch (t->write_state) {
|
892
838
|
case GRPC_CHTTP2_WRITE_STATE_IDLE:
|
893
|
-
inc_initiate_write_reason(reason);
|
894
839
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING,
|
895
840
|
grpc_chttp2_initiate_write_reason_string(reason));
|
896
841
|
GRPC_CHTTP2_REF_TRANSPORT(t, "writing");
|
@@ -913,7 +858,7 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
|
|
913
858
|
t->combiner->FinallyRun(
|
914
859
|
GRPC_CLOSURE_INIT(&t->write_action_begin_locked,
|
915
860
|
write_action_begin_locked, t, nullptr),
|
916
|
-
|
861
|
+
absl::OkStatus());
|
917
862
|
break;
|
918
863
|
case GRPC_CHTTP2_WRITE_STATE_WRITING:
|
919
864
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE,
|
@@ -926,8 +871,7 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
|
|
926
871
|
|
927
872
|
void grpc_chttp2_mark_stream_writable(grpc_chttp2_transport* t,
|
928
873
|
grpc_chttp2_stream* s) {
|
929
|
-
if (t->closed_with_error
|
930
|
-
grpc_chttp2_list_add_writable_stream(t, s)) {
|
874
|
+
if (t->closed_with_error.ok() && grpc_chttp2_list_add_writable_stream(t, s)) {
|
931
875
|
GRPC_CHTTP2_STREAM_REF(s, "chttp2_writing:become");
|
932
876
|
}
|
933
877
|
}
|
@@ -942,24 +886,20 @@ static const char* begin_writing_desc(bool partial) {
|
|
942
886
|
|
943
887
|
static void write_action_begin_locked(void* gt,
|
944
888
|
grpc_error_handle /*error_ignored*/) {
|
945
|
-
GPR_TIMER_SCOPE("write_action_begin_locked", 0);
|
946
889
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
|
947
890
|
GPR_ASSERT(t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE);
|
948
891
|
grpc_chttp2_begin_write_result r;
|
949
|
-
if (t->closed_with_error
|
892
|
+
if (!t->closed_with_error.ok()) {
|
950
893
|
r.writing = false;
|
951
894
|
} else {
|
952
895
|
r = grpc_chttp2_begin_write(t);
|
953
896
|
}
|
954
897
|
if (r.writing) {
|
955
|
-
if (r.partial) {
|
956
|
-
GRPC_STATS_INC_HTTP2_PARTIAL_WRITES();
|
957
|
-
}
|
958
898
|
set_write_state(t,
|
959
899
|
r.partial ? GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE
|
960
900
|
: GRPC_CHTTP2_WRITE_STATE_WRITING,
|
961
901
|
begin_writing_desc(r.partial));
|
962
|
-
write_action(t,
|
902
|
+
write_action(t, absl::OkStatus());
|
963
903
|
if (t->reading_paused_on_pending_induced_frames) {
|
964
904
|
GPR_ASSERT(t->num_pending_induced_frames == 0);
|
965
905
|
// We had paused reading, because we had many induced frames (SETTINGS
|
@@ -974,49 +914,56 @@ static void write_action_begin_locked(void* gt,
|
|
974
914
|
continue_read_action_locked(t);
|
975
915
|
}
|
976
916
|
} else {
|
977
|
-
GRPC_STATS_INC_HTTP2_SPURIOUS_WRITES_BEGUN();
|
978
917
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_IDLE, "begin writing nothing");
|
979
918
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "writing");
|
980
919
|
}
|
981
920
|
}
|
982
921
|
|
983
922
|
static void write_action(void* gt, grpc_error_handle /*error*/) {
|
984
|
-
GPR_TIMER_SCOPE("write_action", 0);
|
985
923
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
|
986
924
|
void* cl = t->cl;
|
987
925
|
t->cl = nullptr;
|
926
|
+
// Choose max_frame_size as the prefered rx crypto frame size indicated by the
|
927
|
+
// peer.
|
928
|
+
int max_frame_size =
|
929
|
+
t->settings
|
930
|
+
[GRPC_PEER_SETTINGS]
|
931
|
+
[GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE];
|
932
|
+
// Note: max frame size is 0 if the remote peer does not support adjusting the
|
933
|
+
// sending frame size.
|
934
|
+
if (max_frame_size == 0) {
|
935
|
+
max_frame_size = INT_MAX;
|
936
|
+
}
|
988
937
|
grpc_endpoint_write(
|
989
938
|
t->ep, &t->outbuf,
|
990
939
|
GRPC_CLOSURE_INIT(&t->write_action_end_locked, write_action_end, t,
|
991
940
|
grpc_schedule_on_exec_ctx),
|
992
|
-
cl);
|
941
|
+
cl, max_frame_size);
|
993
942
|
}
|
994
943
|
|
995
944
|
static void write_action_end(void* tp, grpc_error_handle error) {
|
996
945
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
997
946
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->write_action_end_locked,
|
998
947
|
write_action_end_locked, t, nullptr),
|
999
|
-
|
948
|
+
error);
|
1000
949
|
}
|
1001
950
|
|
1002
951
|
// Callback from the grpc_endpoint after bytes have been written by calling
|
1003
952
|
// sendmsg
|
1004
953
|
static void write_action_end_locked(void* tp, grpc_error_handle error) {
|
1005
|
-
GPR_TIMER_SCOPE("terminate_writing_with_lock", 0);
|
1006
954
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
1007
955
|
|
1008
956
|
bool closed = false;
|
1009
|
-
if (error
|
1010
|
-
close_transport_locked(t,
|
957
|
+
if (!error.ok()) {
|
958
|
+
close_transport_locked(t, error);
|
1011
959
|
closed = true;
|
1012
960
|
}
|
1013
961
|
|
1014
|
-
if (t->sent_goaway_state ==
|
1015
|
-
t->sent_goaway_state =
|
962
|
+
if (t->sent_goaway_state == GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED) {
|
963
|
+
t->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SENT;
|
1016
964
|
closed = true;
|
1017
965
|
if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
1018
|
-
close_transport_locked(
|
1019
|
-
t, GRPC_ERROR_CREATE_FROM_STATIC_STRING("goaway sent"));
|
966
|
+
close_transport_locked(t, GRPC_ERROR_CREATE("goaway sent"));
|
1020
967
|
}
|
1021
968
|
}
|
1022
969
|
|
@@ -1024,11 +971,9 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
|
|
1024
971
|
case GRPC_CHTTP2_WRITE_STATE_IDLE:
|
1025
972
|
GPR_UNREACHABLE_CODE(break);
|
1026
973
|
case GRPC_CHTTP2_WRITE_STATE_WRITING:
|
1027
|
-
GPR_TIMER_MARK("state=writing", 0);
|
1028
974
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_IDLE, "finish writing");
|
1029
975
|
break;
|
1030
976
|
case GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE:
|
1031
|
-
GPR_TIMER_MARK("state=writing_stale_no_poller", 0);
|
1032
977
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING, "continue writing");
|
1033
978
|
GRPC_CHTTP2_REF_TRANSPORT(t, "writing");
|
1034
979
|
// If the transport is closed, we will retry writing on the endpoint
|
@@ -1042,11 +987,11 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
|
|
1042
987
|
t->combiner->FinallyRun(
|
1043
988
|
GRPC_CLOSURE_INIT(&t->write_action_begin_locked,
|
1044
989
|
write_action_begin_locked, t, nullptr),
|
1045
|
-
|
990
|
+
absl::OkStatus());
|
1046
991
|
break;
|
1047
992
|
}
|
1048
993
|
|
1049
|
-
grpc_chttp2_end_write(t,
|
994
|
+
grpc_chttp2_end_write(t, error);
|
1050
995
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "writing");
|
1051
996
|
}
|
1052
997
|
|
@@ -1067,21 +1012,35 @@ static void queue_setting_update(grpc_chttp2_transport* t,
|
|
1067
1012
|
}
|
1068
1013
|
}
|
1069
1014
|
|
1015
|
+
// Cancel out streams that haven't yet started if we have received a GOAWAY
|
1016
|
+
static void cancel_unstarted_streams(grpc_chttp2_transport* t,
|
1017
|
+
grpc_error_handle error) {
|
1018
|
+
grpc_chttp2_stream* s;
|
1019
|
+
while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
|
1020
|
+
s->trailing_metadata_buffer.Set(
|
1021
|
+
grpc_core::GrpcStreamNetworkState(),
|
1022
|
+
grpc_core::GrpcStreamNetworkState::kNotSentOnWire);
|
1023
|
+
grpc_chttp2_cancel_stream(t, s, error);
|
1024
|
+
}
|
1025
|
+
}
|
1026
|
+
|
1070
1027
|
void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
1071
1028
|
uint32_t goaway_error,
|
1072
1029
|
uint32_t last_stream_id,
|
1073
1030
|
absl::string_view goaway_text) {
|
1074
|
-
// Discard the error from a previous goaway frame (if any)
|
1075
|
-
if (t->goaway_error != GRPC_ERROR_NONE) {
|
1076
|
-
GRPC_ERROR_UNREF(t->goaway_error);
|
1077
|
-
}
|
1078
1031
|
t->goaway_error = grpc_error_set_str(
|
1079
1032
|
grpc_error_set_int(
|
1080
1033
|
grpc_error_set_int(
|
1081
|
-
|
1082
|
-
|
1083
|
-
|
1084
|
-
|
1034
|
+
grpc_core::StatusCreate(
|
1035
|
+
absl::StatusCode::kUnavailable,
|
1036
|
+
absl::StrFormat(
|
1037
|
+
"GOAWAY received; Error code: %u; Debug Text: %s",
|
1038
|
+
goaway_error, goaway_text),
|
1039
|
+
DEBUG_LOCATION, {}),
|
1040
|
+
grpc_core::StatusIntProperty::kHttp2Error,
|
1041
|
+
static_cast<intptr_t>(goaway_error)),
|
1042
|
+
grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE),
|
1043
|
+
grpc_core::StatusStrProperty::kRawBytes, goaway_text);
|
1085
1044
|
|
1086
1045
|
GRPC_CHTTP2_IF_TRACING(
|
1087
1046
|
gpr_log(GPR_INFO, "transport %p got goaway with last stream id %d", t,
|
@@ -1090,7 +1049,24 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
|
1090
1049
|
// received a GOAWAY with a non NO_ERROR code.
|
1091
1050
|
if (goaway_error != GRPC_HTTP2_NO_ERROR) {
|
1092
1051
|
gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string.c_str(),
|
1093
|
-
goaway_error,
|
1052
|
+
goaway_error, grpc_core::StatusToString(t->goaway_error).c_str());
|
1053
|
+
}
|
1054
|
+
if (t->is_client) {
|
1055
|
+
cancel_unstarted_streams(t, t->goaway_error);
|
1056
|
+
// Cancel all unseen streams
|
1057
|
+
grpc_chttp2_stream_map_for_each(
|
1058
|
+
&t->stream_map,
|
1059
|
+
[](void* user_data, uint32_t /* key */, void* stream) {
|
1060
|
+
uint32_t last_stream_id = *(static_cast<uint32_t*>(user_data));
|
1061
|
+
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(stream);
|
1062
|
+
if (s->id > last_stream_id) {
|
1063
|
+
s->trailing_metadata_buffer.Set(
|
1064
|
+
grpc_core::GrpcStreamNetworkState(),
|
1065
|
+
grpc_core::GrpcStreamNetworkState::kNotSeenByServer);
|
1066
|
+
grpc_chttp2_cancel_stream(s->t, s, s->t->goaway_error);
|
1067
|
+
}
|
1068
|
+
},
|
1069
|
+
&last_stream_id);
|
1094
1070
|
}
|
1095
1071
|
absl::Status status = grpc_error_to_absl_status(t->goaway_error);
|
1096
1072
|
// When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
|
@@ -1101,36 +1077,33 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
|
1101
1077
|
goaway_error == GRPC_HTTP2_ENHANCE_YOUR_CALM &&
|
1102
1078
|
goaway_text == "too_many_pings")) {
|
1103
1079
|
gpr_log(GPR_ERROR,
|
1104
|
-
"Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
|
1105
|
-
"data equal to \"too_many_pings\""
|
1106
|
-
|
1107
|
-
|
1080
|
+
"%s: Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
|
1081
|
+
"data equal to \"too_many_pings\". Current keepalive time (before "
|
1082
|
+
"throttling): %s",
|
1083
|
+
t->peer_string.c_str(), t->keepalive_time.ToString().c_str());
|
1084
|
+
constexpr int max_keepalive_time_millis =
|
1108
1085
|
INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
|
1109
|
-
|
1110
|
-
|
1111
|
-
?
|
1112
|
-
:
|
1113
|
-
KEEPALIVE_TIME_BACKOFF_MULTIPLIER);
|
1086
|
+
int64_t throttled_keepalive_time =
|
1087
|
+
t->keepalive_time.millis() > max_keepalive_time_millis
|
1088
|
+
? INT_MAX
|
1089
|
+
: t->keepalive_time.millis() * KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
|
1114
1090
|
status.SetPayload(grpc_core::kKeepaliveThrottlingKey,
|
1115
|
-
absl::Cord(std::to_string(
|
1091
|
+
absl::Cord(std::to_string(throttled_keepalive_time)));
|
1116
1092
|
}
|
1117
1093
|
// lie: use transient failure from the transport to indicate goaway has been
|
1118
1094
|
// received.
|
1119
|
-
|
1120
|
-
|
1095
|
+
if (!grpc_core::test_only_disable_transient_failure_state_notification) {
|
1096
|
+
connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
1097
|
+
"got_goaway");
|
1098
|
+
}
|
1121
1099
|
}
|
1122
1100
|
|
1123
1101
|
static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
1124
1102
|
grpc_chttp2_stream* s;
|
1125
|
-
// cancel out streams that haven't yet started if we have received a
|
1126
|
-
|
1127
|
-
|
1128
|
-
|
1129
|
-
t, s,
|
1130
|
-
grpc_error_set_int(
|
1131
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("GOAWAY received"),
|
1132
|
-
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
|
1133
|
-
}
|
1103
|
+
// maybe cancel out streams that haven't yet started if we have received a
|
1104
|
+
// GOAWAY
|
1105
|
+
if (!t->goaway_error.ok()) {
|
1106
|
+
cancel_unstarted_streams(t, t->goaway_error);
|
1134
1107
|
return;
|
1135
1108
|
}
|
1136
1109
|
// start streams where we have free grpc_chttp2_stream ids and free
|
@@ -1165,11 +1138,14 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
|
1165
1138
|
// cancel out streams that will never be started
|
1166
1139
|
if (t->next_stream_id >= MAX_CLIENT_STREAM_ID) {
|
1167
1140
|
while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
|
1141
|
+
s->trailing_metadata_buffer.Set(
|
1142
|
+
grpc_core::GrpcStreamNetworkState(),
|
1143
|
+
grpc_core::GrpcStreamNetworkState::kNotSentOnWire);
|
1168
1144
|
grpc_chttp2_cancel_stream(
|
1169
1145
|
t, s,
|
1170
|
-
grpc_error_set_int(
|
1171
|
-
|
1172
|
-
|
1146
|
+
grpc_error_set_int(GRPC_ERROR_CREATE("Stream IDs exhausted"),
|
1147
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
1148
|
+
GRPC_STATUS_UNAVAILABLE));
|
1173
1149
|
}
|
1174
1150
|
}
|
1175
1151
|
}
|
@@ -1190,7 +1166,13 @@ static grpc_closure* add_closure_barrier(grpc_closure* closure) {
|
|
1190
1166
|
static void null_then_sched_closure(grpc_closure** closure) {
|
1191
1167
|
grpc_closure* c = *closure;
|
1192
1168
|
*closure = nullptr;
|
1193
|
-
|
1169
|
+
// null_then_schedule_closure might be run during a start_batch which might
|
1170
|
+
// subsequently examine the batch for more operations contained within.
|
1171
|
+
// However, the closure run might make it back to the call object, push a
|
1172
|
+
// completion, have the application see it, and make a new operation on the
|
1173
|
+
// call which recycles the batch BEFORE the call to start_batch completes,
|
1174
|
+
// forcing a race.
|
1175
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, c, absl::OkStatus());
|
1194
1176
|
}
|
1195
1177
|
|
1196
1178
|
void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
|
@@ -1201,7 +1183,6 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
|
|
1201
1183
|
grpc_closure* closure = *pclosure;
|
1202
1184
|
*pclosure = nullptr;
|
1203
1185
|
if (closure == nullptr) {
|
1204
|
-
GRPC_ERROR_UNREF(error);
|
1205
1186
|
return;
|
1206
1187
|
}
|
1207
1188
|
closure->next_data.scratch -= CLOSURE_BARRIER_FIRST_REF_BIT;
|
@@ -1215,147 +1196,56 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
|
|
1215
1196
|
CLOSURE_BARRIER_FIRST_REF_BIT),
|
1216
1197
|
static_cast<int>(closure->next_data.scratch %
|
1217
1198
|
CLOSURE_BARRIER_FIRST_REF_BIT),
|
1218
|
-
desc,
|
1199
|
+
desc, grpc_core::StatusToString(error).c_str(),
|
1219
1200
|
write_state_name(t->write_state));
|
1220
1201
|
}
|
1221
|
-
if (error
|
1222
|
-
|
1223
|
-
|
1224
|
-
|
1225
|
-
|
1226
|
-
|
1227
|
-
|
1228
|
-
|
1229
|
-
|
1230
|
-
|
1202
|
+
if (!error.ok()) {
|
1203
|
+
grpc_error_handle cl_err =
|
1204
|
+
grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
|
1205
|
+
if (cl_err.ok()) {
|
1206
|
+
cl_err = GRPC_ERROR_CREATE(absl::StrCat(
|
1207
|
+
"Error in HTTP transport completing operation: ", desc,
|
1208
|
+
" write_state=", write_state_name(t->write_state), " refs=",
|
1209
|
+
closure->next_data.scratch / CLOSURE_BARRIER_FIRST_REF_BIT, " flags=",
|
1210
|
+
closure->next_data.scratch % CLOSURE_BARRIER_FIRST_REF_BIT));
|
1211
|
+
cl_err = grpc_error_set_str(
|
1212
|
+
cl_err, grpc_core::StatusStrProperty::kTargetAddress, t->peer_string);
|
1213
|
+
}
|
1214
|
+
cl_err = grpc_error_add_child(cl_err, error);
|
1215
|
+
closure->error_data.error = grpc_core::internal::StatusAllocHeapPtr(cl_err);
|
1231
1216
|
}
|
1232
1217
|
if (closure->next_data.scratch < CLOSURE_BARRIER_FIRST_REF_BIT) {
|
1233
1218
|
if ((t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE) ||
|
1234
1219
|
!(closure->next_data.scratch & CLOSURE_BARRIER_MAY_COVER_WRITE)) {
|
1235
1220
|
// Using GRPC_CLOSURE_SCHED instead of GRPC_CLOSURE_RUN to avoid running
|
1236
1221
|
// closures earlier than when it is safe to do so.
|
1237
|
-
|
1238
|
-
|
1222
|
+
grpc_error_handle run_error =
|
1223
|
+
grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
|
1224
|
+
closure->error_data.error = 0;
|
1225
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, run_error);
|
1239
1226
|
} else {
|
1240
|
-
grpc_closure_list_append(&t->run_after_write, closure
|
1241
|
-
closure->error_data.error);
|
1227
|
+
grpc_closure_list_append(&t->run_after_write, closure);
|
1242
1228
|
}
|
1243
1229
|
}
|
1244
1230
|
}
|
1245
1231
|
|
1246
1232
|
static bool contains_non_ok_status(grpc_metadata_batch* batch) {
|
1247
|
-
|
1248
|
-
|
1249
|
-
batch->legacy_index()->named.grpc_status->md,
|
1250
|
-
GRPC_MDELEM_GRPC_STATUS_0);
|
1251
|
-
}
|
1252
|
-
return false;
|
1253
|
-
}
|
1254
|
-
|
1255
|
-
static void maybe_become_writable_due_to_send_msg(grpc_chttp2_transport* t,
|
1256
|
-
grpc_chttp2_stream* s) {
|
1257
|
-
if (s->id != 0 && (!s->write_buffering ||
|
1258
|
-
s->flow_controlled_buffer.length > t->write_buffer_size)) {
|
1259
|
-
grpc_chttp2_mark_stream_writable(t, s);
|
1260
|
-
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE);
|
1261
|
-
}
|
1262
|
-
}
|
1263
|
-
|
1264
|
-
static void add_fetched_slice_locked(grpc_chttp2_transport* t,
|
1265
|
-
grpc_chttp2_stream* s) {
|
1266
|
-
s->fetched_send_message_length +=
|
1267
|
-
static_cast<uint32_t> GRPC_SLICE_LENGTH(s->fetching_slice);
|
1268
|
-
grpc_slice_buffer_add(&s->flow_controlled_buffer, s->fetching_slice);
|
1269
|
-
maybe_become_writable_due_to_send_msg(t, s);
|
1270
|
-
}
|
1271
|
-
|
1272
|
-
static void continue_fetching_send_locked(grpc_chttp2_transport* t,
|
1273
|
-
grpc_chttp2_stream* s) {
|
1274
|
-
for (;;) {
|
1275
|
-
if (s->fetching_send_message == nullptr) {
|
1276
|
-
// Stream was cancelled before message fetch completed
|
1277
|
-
abort(); /* TODO(ctiller): what cleanup here? */
|
1278
|
-
}
|
1279
|
-
if (s->fetched_send_message_length == s->fetching_send_message->length()) {
|
1280
|
-
int64_t notify_offset = s->next_message_end_offset;
|
1281
|
-
if (notify_offset <= s->flow_controlled_bytes_written) {
|
1282
|
-
grpc_chttp2_complete_closure_step(
|
1283
|
-
t, s, &s->fetching_send_message_finished, GRPC_ERROR_NONE,
|
1284
|
-
"fetching_send_message_finished");
|
1285
|
-
} else {
|
1286
|
-
grpc_chttp2_write_cb* cb = t->write_cb_pool;
|
1287
|
-
if (cb == nullptr) {
|
1288
|
-
cb = static_cast<grpc_chttp2_write_cb*>(gpr_malloc(sizeof(*cb)));
|
1289
|
-
} else {
|
1290
|
-
t->write_cb_pool = cb->next;
|
1291
|
-
}
|
1292
|
-
cb->call_at_byte = notify_offset;
|
1293
|
-
cb->closure = s->fetching_send_message_finished;
|
1294
|
-
s->fetching_send_message_finished = nullptr;
|
1295
|
-
grpc_chttp2_write_cb** list =
|
1296
|
-
s->fetching_send_message->flags() & GRPC_WRITE_THROUGH
|
1297
|
-
? &s->on_write_finished_cbs
|
1298
|
-
: &s->on_flow_controlled_cbs;
|
1299
|
-
cb->next = *list;
|
1300
|
-
*list = cb;
|
1301
|
-
}
|
1302
|
-
s->fetching_send_message.reset();
|
1303
|
-
return; /* early out */
|
1304
|
-
} else if (s->fetching_send_message->Next(
|
1305
|
-
UINT32_MAX, GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
|
1306
|
-
::complete_fetch, s,
|
1307
|
-
grpc_schedule_on_exec_ctx))) {
|
1308
|
-
grpc_error_handle error =
|
1309
|
-
s->fetching_send_message->Pull(&s->fetching_slice);
|
1310
|
-
if (error != GRPC_ERROR_NONE) {
|
1311
|
-
s->fetching_send_message.reset();
|
1312
|
-
grpc_chttp2_cancel_stream(t, s, error);
|
1313
|
-
} else {
|
1314
|
-
add_fetched_slice_locked(t, s);
|
1315
|
-
}
|
1316
|
-
}
|
1317
|
-
}
|
1318
|
-
}
|
1319
|
-
|
1320
|
-
static void complete_fetch(void* gs, grpc_error_handle error) {
|
1321
|
-
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
|
1322
|
-
s->t->combiner->Run(GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
|
1323
|
-
::complete_fetch_locked, s, nullptr),
|
1324
|
-
GRPC_ERROR_REF(error));
|
1325
|
-
}
|
1326
|
-
|
1327
|
-
static void complete_fetch_locked(void* gs, grpc_error_handle error) {
|
1328
|
-
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
|
1329
|
-
grpc_chttp2_transport* t = s->t;
|
1330
|
-
if (error == GRPC_ERROR_NONE) {
|
1331
|
-
error = s->fetching_send_message->Pull(&s->fetching_slice);
|
1332
|
-
if (error == GRPC_ERROR_NONE) {
|
1333
|
-
add_fetched_slice_locked(t, s);
|
1334
|
-
continue_fetching_send_locked(t, s);
|
1335
|
-
}
|
1336
|
-
}
|
1337
|
-
if (error != GRPC_ERROR_NONE) {
|
1338
|
-
s->fetching_send_message.reset();
|
1339
|
-
grpc_chttp2_cancel_stream(t, s, error);
|
1340
|
-
}
|
1233
|
+
return batch->get(grpc_core::GrpcStatusMetadata()).value_or(GRPC_STATUS_OK) !=
|
1234
|
+
GRPC_STATUS_OK;
|
1341
1235
|
}
|
1342
1236
|
|
1343
1237
|
static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
|
1344
1238
|
bool is_client, bool is_initial) {
|
1345
|
-
|
1346
|
-
|
1347
|
-
|
1348
|
-
|
1349
|
-
|
1350
|
-
gpr_free(key);
|
1351
|
-
gpr_free(value);
|
1239
|
+
gpr_log(GPR_INFO, "--metadata--");
|
1240
|
+
const std::string prefix = absl::StrCat(
|
1241
|
+
"HTTP:", id, is_initial ? ":HDR" : ":TRL", is_client ? ":CLI:" : ":SVR:");
|
1242
|
+
md_batch->Log([&prefix](absl::string_view key, absl::string_view value) {
|
1243
|
+
gpr_log(GPR_INFO, "%s", absl::StrCat(prefix, key, ": ", value).c_str());
|
1352
1244
|
});
|
1353
1245
|
}
|
1354
1246
|
|
1355
1247
|
static void perform_stream_op_locked(void* stream_op,
|
1356
1248
|
grpc_error_handle /*error_ignored*/) {
|
1357
|
-
GPR_TIMER_SCOPE("perform_stream_op_locked", 0);
|
1358
|
-
|
1359
1249
|
grpc_transport_stream_op_batch* op =
|
1360
1250
|
static_cast<grpc_transport_stream_op_batch*>(stream_op);
|
1361
1251
|
grpc_chttp2_stream* s =
|
@@ -1363,13 +1253,13 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1363
1253
|
grpc_transport_stream_op_batch_payload* op_payload = op->payload;
|
1364
1254
|
grpc_chttp2_transport* t = s->t;
|
1365
1255
|
|
1366
|
-
GRPC_STATS_INC_HTTP2_OP_BATCHES();
|
1367
|
-
|
1368
1256
|
s->context = op->payload->context;
|
1369
1257
|
s->traced = op->is_traced;
|
1370
1258
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
1371
|
-
gpr_log(GPR_INFO,
|
1372
|
-
|
1259
|
+
gpr_log(GPR_INFO,
|
1260
|
+
"perform_stream_op_locked[s=%p; op=%p]: %s; on_complete = %p", s,
|
1261
|
+
op, grpc_transport_stream_op_batch_string(op).c_str(),
|
1262
|
+
op->on_complete);
|
1373
1263
|
if (op->send_initial_metadata) {
|
1374
1264
|
log_metadata(op_payload->send_initial_metadata.send_initial_metadata,
|
1375
1265
|
s->id, t->is_client, true);
|
@@ -1386,11 +1276,10 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1386
1276
|
// This batch has send ops. Use final_data as a barrier until enqueue time;
|
1387
1277
|
// the initial counter is dropped at the end of this function.
|
1388
1278
|
on_complete->next_data.scratch = CLOSURE_BARRIER_FIRST_REF_BIT;
|
1389
|
-
on_complete->error_data.error =
|
1279
|
+
on_complete->error_data.error = 0;
|
1390
1280
|
}
|
1391
1281
|
|
1392
1282
|
if (op->cancel_stream) {
|
1393
|
-
GRPC_STATS_INC_HTTP2_OP_CANCEL();
|
1394
1283
|
grpc_chttp2_cancel_stream(t, s, op_payload->cancel_stream.cancel_error);
|
1395
1284
|
}
|
1396
1285
|
|
@@ -1398,27 +1287,9 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1398
1287
|
if (t->is_client && t->channelz_socket != nullptr) {
|
1399
1288
|
t->channelz_socket->RecordStreamStartedFromLocal();
|
1400
1289
|
}
|
1401
|
-
GRPC_STATS_INC_HTTP2_OP_SEND_INITIAL_METADATA();
|
1402
1290
|
GPR_ASSERT(s->send_initial_metadata_finished == nullptr);
|
1403
1291
|
on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
|
1404
1292
|
|
1405
|
-
// Identify stream compression
|
1406
|
-
if (op_payload->send_initial_metadata.send_initial_metadata->legacy_index()
|
1407
|
-
->named.content_encoding == nullptr ||
|
1408
|
-
grpc_stream_compression_method_parse(
|
1409
|
-
GRPC_MDVALUE(
|
1410
|
-
op_payload->send_initial_metadata.send_initial_metadata
|
1411
|
-
->legacy_index()
|
1412
|
-
->named.content_encoding->md),
|
1413
|
-
true, &s->stream_compression_method) == 0) {
|
1414
|
-
s->stream_compression_method = GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS;
|
1415
|
-
}
|
1416
|
-
if (s->stream_compression_method !=
|
1417
|
-
GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS) {
|
1418
|
-
s->uncompressed_data_size = 0;
|
1419
|
-
s->stream_compression_ctx = nullptr;
|
1420
|
-
grpc_slice_buffer_init(&s->compressed_data_buffer);
|
1421
|
-
}
|
1422
1293
|
s->send_initial_metadata_finished = add_closure_barrier(on_complete);
|
1423
1294
|
s->send_initial_metadata =
|
1424
1295
|
op_payload->send_initial_metadata.send_initial_metadata;
|
@@ -1426,31 +1297,34 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1426
1297
|
s->deadline = std::min(
|
1427
1298
|
s->deadline,
|
1428
1299
|
s->send_initial_metadata->get(grpc_core::GrpcTimeoutMetadata())
|
1429
|
-
.value_or(
|
1300
|
+
.value_or(grpc_core::Timestamp::InfFuture()));
|
1430
1301
|
}
|
1431
1302
|
if (contains_non_ok_status(s->send_initial_metadata)) {
|
1432
1303
|
s->seen_error = true;
|
1433
1304
|
}
|
1434
1305
|
if (!s->write_closed) {
|
1435
1306
|
if (t->is_client) {
|
1436
|
-
if (t->closed_with_error
|
1307
|
+
if (t->closed_with_error.ok()) {
|
1437
1308
|
GPR_ASSERT(s->id == 0);
|
1438
1309
|
grpc_chttp2_list_add_waiting_for_concurrency(t, s);
|
1439
1310
|
maybe_start_some_streams(t);
|
1440
1311
|
} else {
|
1312
|
+
s->trailing_metadata_buffer.Set(
|
1313
|
+
grpc_core::GrpcStreamNetworkState(),
|
1314
|
+
grpc_core::GrpcStreamNetworkState::kNotSentOnWire);
|
1441
1315
|
grpc_chttp2_cancel_stream(
|
1442
1316
|
t, s,
|
1443
1317
|
grpc_error_set_int(
|
1444
|
-
|
1445
|
-
|
1446
|
-
|
1318
|
+
GRPC_ERROR_CREATE_REFERENCING("Transport closed",
|
1319
|
+
&t->closed_with_error, 1),
|
1320
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
1321
|
+
GRPC_STATUS_UNAVAILABLE));
|
1447
1322
|
}
|
1448
1323
|
} else {
|
1449
1324
|
GPR_ASSERT(s->id != 0);
|
1450
1325
|
grpc_chttp2_mark_stream_writable(t, s);
|
1451
1326
|
if (!(op->send_message &&
|
1452
|
-
(op->payload->send_message.
|
1453
|
-
GRPC_WRITE_BUFFER_HINT))) {
|
1327
|
+
(op->payload->send_message.flags & GRPC_WRITE_BUFFER_HINT))) {
|
1454
1328
|
grpc_chttp2_initiate_write(
|
1455
1329
|
t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
|
1456
1330
|
}
|
@@ -1459,7 +1333,7 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1459
1333
|
s->send_initial_metadata = nullptr;
|
1460
1334
|
grpc_chttp2_complete_closure_step(
|
1461
1335
|
t, s, &s->send_initial_metadata_finished,
|
1462
|
-
|
1336
|
+
GRPC_ERROR_CREATE_REFERENCING(
|
1463
1337
|
"Attempt to send initial metadata after stream was closed",
|
1464
1338
|
&s->write_closed_error, 1),
|
1465
1339
|
"send_initial_metadata_finished");
|
@@ -1471,35 +1345,30 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1471
1345
|
}
|
1472
1346
|
|
1473
1347
|
if (op->send_message) {
|
1474
|
-
GRPC_STATS_INC_HTTP2_OP_SEND_MESSAGE();
|
1475
1348
|
t->num_messages_in_next_write++;
|
1476
|
-
|
1477
|
-
op->payload->send_message.send_message->
|
1349
|
+
grpc_core::global_stats().IncrementHttp2SendMessageSize(
|
1350
|
+
op->payload->send_message.send_message->Length());
|
1478
1351
|
on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
|
1479
|
-
s->
|
1352
|
+
s->send_message_finished = add_closure_barrier(op->on_complete);
|
1353
|
+
const uint32_t flags = op_payload->send_message.flags;
|
1480
1354
|
if (s->write_closed) {
|
1481
1355
|
op->payload->send_message.stream_write_closed = true;
|
1482
1356
|
// We should NOT return an error here, so as to avoid a cancel OP being
|
1483
1357
|
// started. The surface layer will notice that the stream has been closed
|
1484
1358
|
// for writes and fail the send message op.
|
1485
|
-
|
1486
|
-
|
1487
|
-
|
1488
|
-
"fetching_send_message_finished");
|
1359
|
+
grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
|
1360
|
+
absl::OkStatus(),
|
1361
|
+
"fetching_send_message_finished");
|
1489
1362
|
} else {
|
1490
|
-
GPR_ASSERT(s->fetching_send_message == nullptr);
|
1491
1363
|
uint8_t* frame_hdr = grpc_slice_buffer_tiny_add(
|
1492
1364
|
&s->flow_controlled_buffer, GRPC_HEADER_SIZE_IN_BYTES);
|
1493
|
-
uint32_t flags = op_payload->send_message.send_message->flags();
|
1494
1365
|
frame_hdr[0] = (flags & GRPC_WRITE_INTERNAL_COMPRESS) != 0;
|
1495
|
-
size_t len = op_payload->send_message.send_message->
|
1366
|
+
size_t len = op_payload->send_message.send_message->Length();
|
1496
1367
|
frame_hdr[1] = static_cast<uint8_t>(len >> 24);
|
1497
1368
|
frame_hdr[2] = static_cast<uint8_t>(len >> 16);
|
1498
1369
|
frame_hdr[3] = static_cast<uint8_t>(len >> 8);
|
1499
1370
|
frame_hdr[4] = static_cast<uint8_t>(len);
|
1500
|
-
|
1501
|
-
std::move(op_payload->send_message.send_message);
|
1502
|
-
s->fetched_send_message_length = 0;
|
1371
|
+
|
1503
1372
|
s->next_message_end_offset =
|
1504
1373
|
s->flow_controlled_bytes_written +
|
1505
1374
|
static_cast<int64_t>(s->flow_controlled_buffer.length) +
|
@@ -1510,13 +1379,48 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1510
1379
|
} else {
|
1511
1380
|
s->write_buffering = false;
|
1512
1381
|
}
|
1513
|
-
|
1514
|
-
|
1382
|
+
|
1383
|
+
grpc_slice* const slices =
|
1384
|
+
op_payload->send_message.send_message->c_slice_buffer()->slices;
|
1385
|
+
grpc_slice* const end =
|
1386
|
+
slices + op_payload->send_message.send_message->Count();
|
1387
|
+
for (grpc_slice* slice = slices; slice != end; slice++) {
|
1388
|
+
grpc_slice_buffer_add(&s->flow_controlled_buffer,
|
1389
|
+
grpc_core::CSliceRef(*slice));
|
1390
|
+
}
|
1391
|
+
|
1392
|
+
int64_t notify_offset = s->next_message_end_offset;
|
1393
|
+
if (notify_offset <= s->flow_controlled_bytes_written) {
|
1394
|
+
grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
|
1395
|
+
absl::OkStatus(),
|
1396
|
+
"fetching_send_message_finished");
|
1397
|
+
} else {
|
1398
|
+
grpc_chttp2_write_cb* cb = t->write_cb_pool;
|
1399
|
+
if (cb == nullptr) {
|
1400
|
+
cb = static_cast<grpc_chttp2_write_cb*>(gpr_malloc(sizeof(*cb)));
|
1401
|
+
} else {
|
1402
|
+
t->write_cb_pool = cb->next;
|
1403
|
+
}
|
1404
|
+
cb->call_at_byte = notify_offset;
|
1405
|
+
cb->closure = s->send_message_finished;
|
1406
|
+
s->send_message_finished = nullptr;
|
1407
|
+
grpc_chttp2_write_cb** list = flags & GRPC_WRITE_THROUGH
|
1408
|
+
? &s->on_write_finished_cbs
|
1409
|
+
: &s->on_flow_controlled_cbs;
|
1410
|
+
cb->next = *list;
|
1411
|
+
*list = cb;
|
1412
|
+
}
|
1413
|
+
|
1414
|
+
if (s->id != 0 &&
|
1415
|
+
(!s->write_buffering ||
|
1416
|
+
s->flow_controlled_buffer.length > t->write_buffer_size)) {
|
1417
|
+
grpc_chttp2_mark_stream_writable(t, s);
|
1418
|
+
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE);
|
1419
|
+
}
|
1515
1420
|
}
|
1516
1421
|
}
|
1517
1422
|
|
1518
1423
|
if (op->send_trailing_metadata) {
|
1519
|
-
GRPC_STATS_INC_HTTP2_OP_SEND_TRAILING_METADATA();
|
1520
1424
|
GPR_ASSERT(s->send_trailing_metadata_finished == nullptr);
|
1521
1425
|
on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
|
1522
1426
|
s->send_trailing_metadata_finished = add_closure_barrier(on_complete);
|
@@ -1533,10 +1437,9 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1533
1437
|
grpc_chttp2_complete_closure_step(
|
1534
1438
|
t, s, &s->send_trailing_metadata_finished,
|
1535
1439
|
op->payload->send_trailing_metadata.send_trailing_metadata->empty()
|
1536
|
-
?
|
1537
|
-
:
|
1538
|
-
|
1539
|
-
"stream was closed"),
|
1440
|
+
? absl::OkStatus()
|
1441
|
+
: GRPC_ERROR_CREATE("Attempt to send trailing metadata after "
|
1442
|
+
"stream was closed"),
|
1540
1443
|
"send_trailing_metadata_finished");
|
1541
1444
|
} else if (s->id != 0) {
|
1542
1445
|
// TODO(ctiller): check if there's flow control for any outstanding
|
@@ -1548,7 +1451,6 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1548
1451
|
}
|
1549
1452
|
|
1550
1453
|
if (op->recv_initial_metadata) {
|
1551
|
-
GRPC_STATS_INC_HTTP2_OP_RECV_INITIAL_METADATA();
|
1552
1454
|
GPR_ASSERT(s->recv_initial_metadata_ready == nullptr);
|
1553
1455
|
s->recv_initial_metadata_ready =
|
1554
1456
|
op_payload->recv_initial_metadata.recv_initial_metadata_ready;
|
@@ -1556,6 +1458,9 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1556
1458
|
op_payload->recv_initial_metadata.recv_initial_metadata;
|
1557
1459
|
s->trailing_metadata_available =
|
1558
1460
|
op_payload->recv_initial_metadata.trailing_metadata_available;
|
1461
|
+
if (s->parsed_trailers_only && s->trailing_metadata_available != nullptr) {
|
1462
|
+
*s->trailing_metadata_available = true;
|
1463
|
+
}
|
1559
1464
|
if (op_payload->recv_initial_metadata.peer_string != nullptr) {
|
1560
1465
|
gpr_atm_rel_store(op_payload->recv_initial_metadata.peer_string,
|
1561
1466
|
(gpr_atm)t->peer_string.c_str());
|
@@ -1564,33 +1469,17 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1564
1469
|
}
|
1565
1470
|
|
1566
1471
|
if (op->recv_message) {
|
1567
|
-
GRPC_STATS_INC_HTTP2_OP_RECV_MESSAGE();
|
1568
|
-
size_t before = 0;
|
1569
1472
|
GPR_ASSERT(s->recv_message_ready == nullptr);
|
1570
|
-
GPR_ASSERT(!s->pending_byte_stream);
|
1571
1473
|
s->recv_message_ready = op_payload->recv_message.recv_message_ready;
|
1572
1474
|
s->recv_message = op_payload->recv_message.recv_message;
|
1475
|
+
s->recv_message->emplace();
|
1476
|
+
s->recv_message_flags = op_payload->recv_message.flags;
|
1573
1477
|
s->call_failed_before_recv_message =
|
1574
1478
|
op_payload->recv_message.call_failed_before_recv_message;
|
1575
|
-
|
1576
|
-
if (!s->read_closed) {
|
1577
|
-
before = s->frame_storage.length +
|
1578
|
-
s->unprocessed_incoming_frames_buffer.length;
|
1579
|
-
}
|
1580
|
-
}
|
1581
|
-
grpc_chttp2_maybe_complete_recv_message(t, s);
|
1582
|
-
if (s->id != 0) {
|
1583
|
-
if (!s->read_closed && s->frame_storage.length == 0) {
|
1584
|
-
size_t after = s->unprocessed_incoming_frames_buffer_cached_length;
|
1585
|
-
s->flow_control->IncomingByteStreamUpdate(GRPC_HEADER_SIZE_IN_BYTES,
|
1586
|
-
before - after);
|
1587
|
-
grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
|
1588
|
-
}
|
1589
|
-
}
|
1479
|
+
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
1590
1480
|
}
|
1591
1481
|
|
1592
1482
|
if (op->recv_trailing_metadata) {
|
1593
|
-
GRPC_STATS_INC_HTTP2_OP_RECV_TRAILING_METADATA();
|
1594
1483
|
GPR_ASSERT(s->collecting_stats == nullptr);
|
1595
1484
|
s->collecting_stats = op_payload->recv_trailing_metadata.collect_stats;
|
1596
1485
|
GPR_ASSERT(s->recv_trailing_metadata_finished == nullptr);
|
@@ -1603,7 +1492,7 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1603
1492
|
}
|
1604
1493
|
|
1605
1494
|
if (on_complete != nullptr) {
|
1606
|
-
grpc_chttp2_complete_closure_step(t, s, &on_complete,
|
1495
|
+
grpc_chttp2_complete_closure_step(t, s, &on_complete, absl::OkStatus(),
|
1607
1496
|
"op->on_complete");
|
1608
1497
|
}
|
1609
1498
|
|
@@ -1612,7 +1501,6 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1612
1501
|
|
1613
1502
|
static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
|
1614
1503
|
grpc_transport_stream_op_batch* op) {
|
1615
|
-
GPR_TIMER_SCOPE("perform_stream_op", 0);
|
1616
1504
|
grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
|
1617
1505
|
grpc_chttp2_stream* s = reinterpret_cast<grpc_chttp2_stream*>(gs);
|
1618
1506
|
|
@@ -1630,7 +1518,7 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
|
|
1630
1518
|
}
|
1631
1519
|
|
1632
1520
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
1633
|
-
gpr_log(GPR_INFO, "perform_stream_op[s=%p]: %s", s,
|
1521
|
+
gpr_log(GPR_INFO, "perform_stream_op[s=%p; op=%p]: %s", s, op,
|
1634
1522
|
grpc_transport_stream_op_batch_string(op).c_str());
|
1635
1523
|
}
|
1636
1524
|
|
@@ -1638,49 +1526,46 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
|
|
1638
1526
|
op->handler_private.extra_arg = gs;
|
1639
1527
|
t->combiner->Run(GRPC_CLOSURE_INIT(&op->handler_private.closure,
|
1640
1528
|
perform_stream_op_locked, op, nullptr),
|
1641
|
-
|
1529
|
+
absl::OkStatus());
|
1642
1530
|
}
|
1643
1531
|
|
1644
1532
|
static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
|
1645
1533
|
// callback remaining pings: they're not allowed to call into the transport,
|
1646
1534
|
// and maybe they hold resources that need to be freed
|
1647
1535
|
grpc_chttp2_ping_queue* pq = &t->ping_queue;
|
1648
|
-
GPR_ASSERT(error
|
1536
|
+
GPR_ASSERT(!error.ok());
|
1649
1537
|
for (size_t j = 0; j < GRPC_CHTTP2_PCL_COUNT; j++) {
|
1650
|
-
grpc_closure_list_fail_all(&pq->lists[j],
|
1538
|
+
grpc_closure_list_fail_all(&pq->lists[j], error);
|
1651
1539
|
grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &pq->lists[j]);
|
1652
1540
|
}
|
1653
|
-
GRPC_ERROR_UNREF(error);
|
1654
1541
|
}
|
1655
1542
|
|
1656
1543
|
static void send_ping_locked(grpc_chttp2_transport* t,
|
1657
1544
|
grpc_closure* on_initiate, grpc_closure* on_ack) {
|
1658
|
-
if (t->closed_with_error
|
1659
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_initiate,
|
1660
|
-
|
1661
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_ack,
|
1662
|
-
GRPC_ERROR_REF(t->closed_with_error));
|
1545
|
+
if (!t->closed_with_error.ok()) {
|
1546
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_initiate, t->closed_with_error);
|
1547
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_ack, t->closed_with_error);
|
1663
1548
|
return;
|
1664
1549
|
}
|
1665
1550
|
grpc_chttp2_ping_queue* pq = &t->ping_queue;
|
1666
1551
|
grpc_closure_list_append(&pq->lists[GRPC_CHTTP2_PCL_INITIATE], on_initiate,
|
1667
|
-
|
1552
|
+
absl::OkStatus());
|
1668
1553
|
grpc_closure_list_append(&pq->lists[GRPC_CHTTP2_PCL_NEXT], on_ack,
|
1669
|
-
|
1554
|
+
absl::OkStatus());
|
1670
1555
|
}
|
1671
1556
|
|
1672
1557
|
// Specialized form of send_ping_locked for keepalive ping. If there is already
|
1673
1558
|
// a ping in progress, the keepalive ping would piggyback onto that ping,
|
1674
1559
|
// instead of waiting for that ping to complete and then starting a new ping.
|
1675
1560
|
static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
|
1676
|
-
if (t->closed_with_error
|
1561
|
+
if (!t->closed_with_error.ok()) {
|
1677
1562
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
|
1678
1563
|
start_keepalive_ping_locked, t, nullptr),
|
1679
|
-
|
1564
|
+
t->closed_with_error);
|
1680
1565
|
t->combiner->Run(
|
1681
1566
|
GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
|
1682
1567
|
finish_keepalive_ping_locked, t, nullptr),
|
1683
|
-
|
1568
|
+
t->closed_with_error);
|
1684
1569
|
return;
|
1685
1570
|
}
|
1686
1571
|
grpc_chttp2_ping_queue* pq = &t->ping_queue;
|
@@ -1688,39 +1573,39 @@ static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
|
|
1688
1573
|
// There is a ping in flight. Add yourself to the inflight closure list.
|
1689
1574
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
|
1690
1575
|
start_keepalive_ping_locked, t, nullptr),
|
1691
|
-
|
1576
|
+
t->closed_with_error);
|
1692
1577
|
grpc_closure_list_append(
|
1693
1578
|
&pq->lists[GRPC_CHTTP2_PCL_INFLIGHT],
|
1694
1579
|
GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
|
1695
1580
|
finish_keepalive_ping, t, grpc_schedule_on_exec_ctx),
|
1696
|
-
|
1581
|
+
absl::OkStatus());
|
1697
1582
|
return;
|
1698
1583
|
}
|
1699
1584
|
grpc_closure_list_append(
|
1700
1585
|
&pq->lists[GRPC_CHTTP2_PCL_INITIATE],
|
1701
1586
|
GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked, start_keepalive_ping,
|
1702
1587
|
t, grpc_schedule_on_exec_ctx),
|
1703
|
-
|
1588
|
+
absl::OkStatus());
|
1704
1589
|
grpc_closure_list_append(
|
1705
1590
|
&pq->lists[GRPC_CHTTP2_PCL_NEXT],
|
1706
1591
|
GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked, finish_keepalive_ping,
|
1707
1592
|
t, grpc_schedule_on_exec_ctx),
|
1708
|
-
|
1593
|
+
absl::OkStatus());
|
1709
1594
|
}
|
1710
1595
|
|
1711
|
-
void grpc_chttp2_retry_initiate_ping(
|
1712
|
-
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
1596
|
+
void grpc_chttp2_retry_initiate_ping(grpc_chttp2_transport* t) {
|
1713
1597
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->retry_initiate_ping_locked,
|
1714
1598
|
retry_initiate_ping_locked, t, nullptr),
|
1715
|
-
|
1599
|
+
absl::OkStatus());
|
1716
1600
|
}
|
1717
1601
|
|
1718
|
-
static void retry_initiate_ping_locked(void* tp,
|
1602
|
+
static void retry_initiate_ping_locked(void* tp,
|
1603
|
+
GRPC_UNUSED grpc_error_handle error) {
|
1604
|
+
GPR_DEBUG_ASSERT(error.ok());
|
1719
1605
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
1720
|
-
t->ping_state.
|
1721
|
-
|
1722
|
-
|
1723
|
-
}
|
1606
|
+
GPR_ASSERT(t->ping_state.delayed_ping_timer_handle.has_value());
|
1607
|
+
t->ping_state.delayed_ping_timer_handle.reset();
|
1608
|
+
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING);
|
1724
1609
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "retry_initiate_ping_locked");
|
1725
1610
|
}
|
1726
1611
|
|
@@ -1738,40 +1623,150 @@ void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
|
|
1738
1623
|
}
|
1739
1624
|
}
|
1740
1625
|
|
1741
|
-
|
1742
|
-
|
1743
|
-
|
1744
|
-
|
1745
|
-
|
1626
|
+
namespace {
|
1627
|
+
|
1628
|
+
// Fire and forget (deletes itself on completion). Does a graceful shutdown by
|
1629
|
+
// sending a GOAWAY frame with the last stream id set to 2^31-1, sending a ping
|
1630
|
+
// and waiting for an ack (effective waiting for an RTT) and then sending a
|
1631
|
+
// final GOAWAY freame with an updated last stream identifier. This helps ensure
|
1632
|
+
// that a connection can be cleanly shut down without losing requests.
|
1633
|
+
// In the event, that the client does not respond to the ping for some reason,
|
1634
|
+
// we add a 20 second deadline, after which we send the second goaway.
|
1635
|
+
class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
|
1636
|
+
public:
|
1637
|
+
static void Start(grpc_chttp2_transport* t) { new GracefulGoaway(t); }
|
1638
|
+
|
1639
|
+
~GracefulGoaway() override {
|
1640
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t_, "graceful goaway");
|
1641
|
+
}
|
1642
|
+
|
1643
|
+
private:
|
1644
|
+
explicit GracefulGoaway(grpc_chttp2_transport* t) : t_(t) {
|
1645
|
+
t->sent_goaway_state = GRPC_CHTTP2_GRACEFUL_GOAWAY;
|
1646
|
+
GRPC_CHTTP2_REF_TRANSPORT(t_, "graceful goaway");
|
1647
|
+
grpc_chttp2_goaway_append((1u << 31) - 1, 0, grpc_empty_slice(), &t->qbuf);
|
1648
|
+
send_ping_locked(
|
1649
|
+
t, nullptr, GRPC_CLOSURE_INIT(&on_ping_ack_, OnPingAck, this, nullptr));
|
1650
|
+
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
|
1651
|
+
Ref().release(); // Ref for the timer
|
1652
|
+
grpc_timer_init(
|
1653
|
+
&timer_, grpc_core::Timestamp::Now() + grpc_core::Duration::Seconds(20),
|
1654
|
+
GRPC_CLOSURE_INIT(&on_timer_, OnTimer, this, nullptr));
|
1655
|
+
}
|
1656
|
+
|
1657
|
+
void MaybeSendFinalGoawayLocked() {
|
1658
|
+
if (t_->sent_goaway_state != GRPC_CHTTP2_GRACEFUL_GOAWAY) {
|
1659
|
+
// We already sent the final GOAWAY.
|
1660
|
+
return;
|
1661
|
+
}
|
1662
|
+
if (t_->destroying || !t_->closed_with_error.ok()) {
|
1663
|
+
GRPC_CHTTP2_IF_TRACING(gpr_log(
|
1664
|
+
GPR_INFO,
|
1665
|
+
"transport:%p %s peer:%s Transport already shutting down. "
|
1666
|
+
"Graceful GOAWAY abandoned.",
|
1667
|
+
t_, t_->is_client ? "CLIENT" : "SERVER", t_->peer_string.c_str()));
|
1668
|
+
return;
|
1669
|
+
}
|
1670
|
+
// Ping completed. Send final goaway.
|
1671
|
+
GRPC_CHTTP2_IF_TRACING(
|
1672
|
+
gpr_log(GPR_INFO,
|
1673
|
+
"transport:%p %s peer:%s Graceful shutdown: Ping received. "
|
1674
|
+
"Sending final GOAWAY with stream_id:%d",
|
1675
|
+
t_, t_->is_client ? "CLIENT" : "SERVER",
|
1676
|
+
t_->peer_string.c_str(), t_->last_new_stream_id));
|
1677
|
+
t_->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED;
|
1678
|
+
grpc_chttp2_goaway_append(t_->last_new_stream_id, 0, grpc_empty_slice(),
|
1679
|
+
&t_->qbuf);
|
1680
|
+
grpc_chttp2_initiate_write(t_, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
|
1681
|
+
}
|
1682
|
+
|
1683
|
+
static void OnPingAck(void* arg, grpc_error_handle /* error */) {
|
1684
|
+
auto* self = static_cast<GracefulGoaway*>(arg);
|
1685
|
+
self->t_->combiner->Run(
|
1686
|
+
GRPC_CLOSURE_INIT(&self->on_ping_ack_, OnPingAckLocked, self, nullptr),
|
1687
|
+
absl::OkStatus());
|
1688
|
+
}
|
1689
|
+
|
1690
|
+
static void OnPingAckLocked(void* arg, grpc_error_handle /* error */) {
|
1691
|
+
auto* self = static_cast<GracefulGoaway*>(arg);
|
1692
|
+
grpc_timer_cancel(&self->timer_);
|
1693
|
+
self->MaybeSendFinalGoawayLocked();
|
1694
|
+
self->Unref();
|
1695
|
+
}
|
1696
|
+
|
1697
|
+
static void OnTimer(void* arg, grpc_error_handle error) {
|
1698
|
+
auto* self = static_cast<GracefulGoaway*>(arg);
|
1699
|
+
if (!error.ok()) {
|
1700
|
+
self->Unref();
|
1701
|
+
return;
|
1702
|
+
}
|
1703
|
+
self->t_->combiner->Run(
|
1704
|
+
GRPC_CLOSURE_INIT(&self->on_timer_, OnTimerLocked, self, nullptr),
|
1705
|
+
absl::OkStatus());
|
1706
|
+
}
|
1707
|
+
|
1708
|
+
static void OnTimerLocked(void* arg, grpc_error_handle /* error */) {
|
1709
|
+
auto* self = static_cast<GracefulGoaway*>(arg);
|
1710
|
+
self->MaybeSendFinalGoawayLocked();
|
1711
|
+
self->Unref();
|
1712
|
+
}
|
1713
|
+
|
1714
|
+
grpc_chttp2_transport* t_;
|
1715
|
+
grpc_closure on_ping_ack_;
|
1716
|
+
grpc_timer timer_;
|
1717
|
+
grpc_closure on_timer_;
|
1718
|
+
};
|
1719
|
+
|
1720
|
+
} // namespace
|
1721
|
+
|
1722
|
+
static void send_goaway(grpc_chttp2_transport* t, grpc_error_handle error,
|
1723
|
+
bool immediate_disconnect_hint) {
|
1746
1724
|
grpc_http2_error_code http_error;
|
1747
1725
|
std::string message;
|
1748
|
-
grpc_error_get_status(error,
|
1749
|
-
&http_error, nullptr);
|
1750
|
-
|
1751
|
-
|
1752
|
-
|
1726
|
+
grpc_error_get_status(error, grpc_core::Timestamp::InfFuture(), nullptr,
|
1727
|
+
&message, &http_error, nullptr);
|
1728
|
+
if (!t->is_client && http_error == GRPC_HTTP2_NO_ERROR &&
|
1729
|
+
!immediate_disconnect_hint) {
|
1730
|
+
// Do a graceful shutdown.
|
1731
|
+
if (t->sent_goaway_state == GRPC_CHTTP2_NO_GOAWAY_SEND) {
|
1732
|
+
GracefulGoaway::Start(t);
|
1733
|
+
} else {
|
1734
|
+
// Graceful GOAWAY is already in progress.
|
1735
|
+
}
|
1736
|
+
} else if (t->sent_goaway_state == GRPC_CHTTP2_NO_GOAWAY_SEND ||
|
1737
|
+
t->sent_goaway_state == GRPC_CHTTP2_GRACEFUL_GOAWAY) {
|
1738
|
+
// We want to log this irrespective of whether http tracing is enabled
|
1739
|
+
gpr_log(GPR_DEBUG, "%s: Sending goaway err=%s", t->peer_string.c_str(),
|
1740
|
+
grpc_core::StatusToString(error).c_str());
|
1741
|
+
t->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED;
|
1742
|
+
grpc_chttp2_goaway_append(
|
1743
|
+
t->last_new_stream_id, static_cast<uint32_t>(http_error),
|
1744
|
+
grpc_slice_from_cpp_string(std::move(message)), &t->qbuf);
|
1745
|
+
} else {
|
1746
|
+
// Final GOAWAY has already been sent.
|
1747
|
+
}
|
1753
1748
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
|
1754
|
-
GRPC_ERROR_UNREF(error);
|
1755
1749
|
}
|
1756
1750
|
|
1757
1751
|
void grpc_chttp2_add_ping_strike(grpc_chttp2_transport* t) {
|
1758
1752
|
if (++t->ping_recv_state.ping_strikes > t->ping_policy.max_ping_strikes &&
|
1759
1753
|
t->ping_policy.max_ping_strikes != 0) {
|
1760
1754
|
send_goaway(t,
|
1761
|
-
grpc_error_set_int(
|
1762
|
-
|
1763
|
-
|
1755
|
+
grpc_error_set_int(GRPC_ERROR_CREATE("too_many_pings"),
|
1756
|
+
grpc_core::StatusIntProperty::kHttp2Error,
|
1757
|
+
GRPC_HTTP2_ENHANCE_YOUR_CALM),
|
1758
|
+
/*immediate_disconnect_hint=*/true);
|
1764
1759
|
// The transport will be closed after the write is done
|
1765
1760
|
close_transport_locked(
|
1766
|
-
t, grpc_error_set_int(
|
1767
|
-
|
1768
|
-
|
1761
|
+
t, grpc_error_set_int(GRPC_ERROR_CREATE("Too many pings"),
|
1762
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
1763
|
+
GRPC_STATUS_UNAVAILABLE));
|
1769
1764
|
}
|
1770
1765
|
}
|
1771
1766
|
|
1772
1767
|
void grpc_chttp2_reset_ping_clock(grpc_chttp2_transport* t) {
|
1773
1768
|
if (!t->is_client) {
|
1774
|
-
t->ping_recv_state.last_ping_recv_time =
|
1769
|
+
t->ping_recv_state.last_ping_recv_time = grpc_core::Timestamp::InfPast();
|
1775
1770
|
t->ping_recv_state.ping_strikes = 0;
|
1776
1771
|
}
|
1777
1772
|
t->ping_state.pings_before_data_required =
|
@@ -1784,8 +1779,8 @@ static void perform_transport_op_locked(void* stream_op,
|
|
1784
1779
|
grpc_chttp2_transport* t =
|
1785
1780
|
static_cast<grpc_chttp2_transport*>(op->handler_private.extra_arg);
|
1786
1781
|
|
1787
|
-
if (op->goaway_error
|
1788
|
-
send_goaway(t, op->goaway_error);
|
1782
|
+
if (!op->goaway_error.ok()) {
|
1783
|
+
send_goaway(t, op->goaway_error, /*immediate_disconnect_hint=*/false);
|
1789
1784
|
}
|
1790
1785
|
|
1791
1786
|
if (op->set_accept_stream) {
|
@@ -1814,11 +1809,13 @@ static void perform_transport_op_locked(void* stream_op,
|
|
1814
1809
|
t->state_tracker.RemoveWatcher(op->stop_connectivity_watch);
|
1815
1810
|
}
|
1816
1811
|
|
1817
|
-
if (op->disconnect_with_error
|
1812
|
+
if (!op->disconnect_with_error.ok()) {
|
1813
|
+
send_goaway(t, op->disconnect_with_error,
|
1814
|
+
/*immediate_disconnect_hint=*/true);
|
1818
1815
|
close_transport_locked(t, op->disconnect_with_error);
|
1819
1816
|
}
|
1820
1817
|
|
1821
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, op->on_consumed,
|
1818
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, absl::OkStatus());
|
1822
1819
|
|
1823
1820
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "transport_op");
|
1824
1821
|
}
|
@@ -1833,179 +1830,137 @@ static void perform_transport_op(grpc_transport* gt, grpc_transport_op* op) {
|
|
1833
1830
|
GRPC_CHTTP2_REF_TRANSPORT(t, "transport_op");
|
1834
1831
|
t->combiner->Run(GRPC_CLOSURE_INIT(&op->handler_private.closure,
|
1835
1832
|
perform_transport_op_locked, op, nullptr),
|
1836
|
-
|
1833
|
+
absl::OkStatus());
|
1837
1834
|
}
|
1838
1835
|
|
1839
1836
|
//
|
1840
1837
|
// INPUT PROCESSING - GENERAL
|
1841
1838
|
//
|
1842
1839
|
|
1843
|
-
void grpc_chttp2_maybe_complete_recv_initial_metadata(
|
1844
|
-
|
1840
|
+
void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_chttp2_transport* t,
|
1841
|
+
grpc_chttp2_stream* s) {
|
1845
1842
|
if (s->recv_initial_metadata_ready != nullptr &&
|
1846
1843
|
s->published_metadata[0] != GRPC_METADATA_NOT_PUBLISHED) {
|
1847
1844
|
if (s->seen_error) {
|
1848
|
-
|
1849
|
-
if (!s->pending_byte_stream) {
|
1850
|
-
grpc_slice_buffer_reset_and_unref_internal(
|
1851
|
-
&s->unprocessed_incoming_frames_buffer);
|
1852
|
-
}
|
1845
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
1853
1846
|
}
|
1854
1847
|
*s->recv_initial_metadata = std::move(s->initial_metadata_buffer);
|
1848
|
+
s->recv_initial_metadata->Set(grpc_core::PeerString(), t->peer_string);
|
1849
|
+
// If we didn't receive initial metadata from the wire and instead faked a
|
1850
|
+
// status (due to stream cancellations for example), let upper layers know
|
1851
|
+
// that trailing metadata is immediately available.
|
1852
|
+
if (s->trailing_metadata_available != nullptr &&
|
1853
|
+
s->published_metadata[0] != GRPC_METADATA_PUBLISHED_FROM_WIRE &&
|
1854
|
+
s->published_metadata[1] == GRPC_METADATA_SYNTHESIZED_FROM_FAKE) {
|
1855
|
+
*s->trailing_metadata_available = true;
|
1856
|
+
s->trailing_metadata_available = nullptr;
|
1857
|
+
}
|
1855
1858
|
null_then_sched_closure(&s->recv_initial_metadata_ready);
|
1856
1859
|
}
|
1857
1860
|
}
|
1858
1861
|
|
1859
|
-
void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport*
|
1862
|
+
void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* t,
|
1860
1863
|
grpc_chttp2_stream* s) {
|
1861
|
-
|
1862
|
-
|
1863
|
-
|
1864
|
-
|
1865
|
-
|
1866
|
-
|
1867
|
-
|
1868
|
-
|
1869
|
-
|
1864
|
+
if (s->recv_message_ready == nullptr) return;
|
1865
|
+
|
1866
|
+
grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext upd(
|
1867
|
+
&s->flow_control);
|
1868
|
+
grpc_error_handle error;
|
1869
|
+
|
1870
|
+
// Lambda is immediately invoked as a big scoped section that can be
|
1871
|
+
// exited out of at any point by returning.
|
1872
|
+
[&]() {
|
1873
|
+
if (grpc_http_trace.enabled()) {
|
1874
|
+
gpr_log(GPR_DEBUG,
|
1875
|
+
"maybe_complete_recv_message %p final_metadata_requested=%d "
|
1876
|
+
"seen_error=%d",
|
1877
|
+
s, s->final_metadata_requested, s->seen_error);
|
1870
1878
|
}
|
1871
|
-
if (
|
1872
|
-
|
1873
|
-
|
1874
|
-
|
1875
|
-
|
1876
|
-
|
1877
|
-
s->
|
1878
|
-
|
1879
|
-
|
1880
|
-
|
1881
|
-
|
1882
|
-
|
1883
|
-
|
1884
|
-
|
1885
|
-
|
1886
|
-
grpc_stream_compression_context_create(
|
1887
|
-
s->stream_decompression_method);
|
1879
|
+
if (s->final_metadata_requested && s->seen_error) {
|
1880
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
1881
|
+
s->recv_message->reset();
|
1882
|
+
} else {
|
1883
|
+
if (s->frame_storage.length != 0) {
|
1884
|
+
while (true) {
|
1885
|
+
GPR_ASSERT(s->frame_storage.length > 0);
|
1886
|
+
int64_t min_progress_size;
|
1887
|
+
auto r = grpc_deframe_unprocessed_incoming_frames(
|
1888
|
+
s, &min_progress_size, &**s->recv_message, s->recv_message_flags);
|
1889
|
+
if (grpc_http_trace.enabled()) {
|
1890
|
+
gpr_log(GPR_DEBUG, "Deframe data frame: %s",
|
1891
|
+
grpc_core::PollToString(r, [](absl::Status r) {
|
1892
|
+
return r.ToString();
|
1893
|
+
}).c_str());
|
1888
1894
|
}
|
1889
|
-
if (
|
1890
|
-
|
1891
|
-
|
1892
|
-
|
1893
|
-
|
1894
|
-
|
1895
|
-
|
1896
|
-
|
1897
|
-
&s->unprocessed_incoming_frames_buffer);
|
1898
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1899
|
-
"Stream decompression error.");
|
1900
|
-
} else {
|
1901
|
-
s->decompressed_header_bytes += s->decompressed_data_buffer.length;
|
1902
|
-
if (s->decompressed_header_bytes == GRPC_HEADER_SIZE_IN_BYTES) {
|
1903
|
-
s->decompressed_header_bytes = 0;
|
1895
|
+
if (r.pending()) {
|
1896
|
+
if (s->read_closed) {
|
1897
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
1898
|
+
s->recv_message->reset();
|
1899
|
+
break;
|
1900
|
+
} else {
|
1901
|
+
upd.SetMinProgressSize(min_progress_size);
|
1902
|
+
return; // Out of lambda to enclosing function
|
1904
1903
|
}
|
1905
|
-
|
1906
|
-
|
1907
|
-
|
1908
|
-
|
1909
|
-
|
1910
|
-
|
1911
|
-
|
1904
|
+
} else {
|
1905
|
+
error = std::move(r.value());
|
1906
|
+
if (!error.ok()) {
|
1907
|
+
s->seen_error = true;
|
1908
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
1909
|
+
break;
|
1910
|
+
} else {
|
1911
|
+
if (t->channelz_socket != nullptr) {
|
1912
|
+
t->channelz_socket->RecordMessageReceived();
|
1913
|
+
}
|
1914
|
+
break;
|
1912
1915
|
}
|
1913
1916
|
}
|
1914
|
-
} else {
|
1915
|
-
error = grpc_deframe_unprocessed_incoming_frames(
|
1916
|
-
&s->data_parser, s, &s->unprocessed_incoming_frames_buffer,
|
1917
|
-
nullptr, s->recv_message);
|
1918
|
-
}
|
1919
|
-
if (error != GRPC_ERROR_NONE) {
|
1920
|
-
s->seen_error = true;
|
1921
|
-
grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
|
1922
|
-
grpc_slice_buffer_reset_and_unref_internal(
|
1923
|
-
&s->unprocessed_incoming_frames_buffer);
|
1924
|
-
break;
|
1925
|
-
} else if (*s->recv_message != nullptr) {
|
1926
|
-
break;
|
1927
1917
|
}
|
1918
|
+
} else if (s->read_closed) {
|
1919
|
+
s->recv_message->reset();
|
1920
|
+
} else {
|
1921
|
+
upd.SetMinProgressSize(GRPC_HEADER_SIZE_IN_BYTES);
|
1922
|
+
return; // Out of lambda to enclosing function
|
1928
1923
|
}
|
1929
1924
|
}
|
1930
1925
|
// save the length of the buffer before handing control back to application
|
1931
1926
|
// threads. Needed to support correct flow control bookkeeping
|
1932
|
-
s->
|
1933
|
-
s->unprocessed_incoming_frames_buffer.length;
|
1934
|
-
if (error == GRPC_ERROR_NONE && *s->recv_message != nullptr) {
|
1927
|
+
if (error.ok() && s->recv_message->has_value()) {
|
1935
1928
|
null_then_sched_closure(&s->recv_message_ready);
|
1936
1929
|
} else if (s->published_metadata[1] != GRPC_METADATA_NOT_PUBLISHED) {
|
1937
|
-
*s->recv_message = nullptr;
|
1938
1930
|
if (s->call_failed_before_recv_message != nullptr) {
|
1939
1931
|
*s->call_failed_before_recv_message =
|
1940
1932
|
(s->published_metadata[1] != GRPC_METADATA_PUBLISHED_AT_CLOSE);
|
1941
1933
|
}
|
1942
1934
|
null_then_sched_closure(&s->recv_message_ready);
|
1943
1935
|
}
|
1944
|
-
|
1945
|
-
|
1936
|
+
}();
|
1937
|
+
|
1938
|
+
upd.SetPendingSize(s->frame_storage.length);
|
1939
|
+
grpc_chttp2_act_on_flowctl_action(upd.MakeAction(), t, s);
|
1946
1940
|
}
|
1947
1941
|
|
1948
1942
|
void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
|
1949
1943
|
grpc_chttp2_stream* s) {
|
1950
1944
|
grpc_chttp2_maybe_complete_recv_message(t, s);
|
1945
|
+
if (grpc_http_trace.enabled()) {
|
1946
|
+
gpr_log(GPR_DEBUG,
|
1947
|
+
"maybe_complete_recv_trailing_metadata cli=%d s=%p closure=%p "
|
1948
|
+
"read_closed=%d "
|
1949
|
+
"write_closed=%d %" PRIdPTR,
|
1950
|
+
t->is_client, s, s->recv_trailing_metadata_finished, s->read_closed,
|
1951
|
+
s->write_closed, s->frame_storage.length);
|
1952
|
+
}
|
1951
1953
|
if (s->recv_trailing_metadata_finished != nullptr && s->read_closed &&
|
1952
1954
|
s->write_closed) {
|
1953
1955
|
if (s->seen_error || !t->is_client) {
|
1954
|
-
|
1955
|
-
if (!s->pending_byte_stream) {
|
1956
|
-
grpc_slice_buffer_reset_and_unref_internal(
|
1957
|
-
&s->unprocessed_incoming_frames_buffer);
|
1958
|
-
}
|
1959
|
-
}
|
1960
|
-
bool pending_data = s->pending_byte_stream ||
|
1961
|
-
s->unprocessed_incoming_frames_buffer.length > 0;
|
1962
|
-
if (s->read_closed && s->frame_storage.length > 0 && !pending_data &&
|
1963
|
-
!s->seen_error && s->recv_trailing_metadata_finished != nullptr) {
|
1964
|
-
// Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
|
1965
|
-
// maybe decompress the next 5 bytes in the stream.
|
1966
|
-
if (s->stream_decompression_method ==
|
1967
|
-
GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS) {
|
1968
|
-
grpc_slice_buffer_move_first(
|
1969
|
-
&s->frame_storage,
|
1970
|
-
std::min(s->frame_storage.length,
|
1971
|
-
size_t(GRPC_HEADER_SIZE_IN_BYTES)),
|
1972
|
-
&s->unprocessed_incoming_frames_buffer);
|
1973
|
-
if (s->unprocessed_incoming_frames_buffer.length > 0) {
|
1974
|
-
s->unprocessed_incoming_frames_decompressed = true;
|
1975
|
-
pending_data = true;
|
1976
|
-
}
|
1977
|
-
} else {
|
1978
|
-
bool end_of_context;
|
1979
|
-
if (!s->stream_decompression_ctx) {
|
1980
|
-
s->stream_decompression_ctx = grpc_stream_compression_context_create(
|
1981
|
-
s->stream_decompression_method);
|
1982
|
-
}
|
1983
|
-
if (!grpc_stream_decompress(
|
1984
|
-
s->stream_decompression_ctx, &s->frame_storage,
|
1985
|
-
&s->unprocessed_incoming_frames_buffer, nullptr,
|
1986
|
-
GRPC_HEADER_SIZE_IN_BYTES, &end_of_context)) {
|
1987
|
-
grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
|
1988
|
-
grpc_slice_buffer_reset_and_unref_internal(
|
1989
|
-
&s->unprocessed_incoming_frames_buffer);
|
1990
|
-
s->seen_error = true;
|
1991
|
-
} else {
|
1992
|
-
if (s->unprocessed_incoming_frames_buffer.length > 0) {
|
1993
|
-
s->unprocessed_incoming_frames_decompressed = true;
|
1994
|
-
pending_data = true;
|
1995
|
-
}
|
1996
|
-
if (end_of_context) {
|
1997
|
-
grpc_stream_compression_context_destroy(
|
1998
|
-
s->stream_decompression_ctx);
|
1999
|
-
s->stream_decompression_ctx = nullptr;
|
2000
|
-
}
|
2001
|
-
}
|
2002
|
-
}
|
1956
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
2003
1957
|
}
|
2004
|
-
if (s->read_closed && s->frame_storage.length == 0 &&
|
1958
|
+
if (s->read_closed && s->frame_storage.length == 0 &&
|
2005
1959
|
s->recv_trailing_metadata_finished != nullptr) {
|
2006
1960
|
grpc_transport_move_stats(&s->stats, s->collecting_stats);
|
2007
1961
|
s->collecting_stats = nullptr;
|
2008
1962
|
*s->recv_trailing_metadata = std::move(s->trailing_metadata_buffer);
|
1963
|
+
s->recv_trailing_metadata->Set(grpc_core::PeerString(), t->peer_string);
|
2009
1964
|
null_then_sched_closure(&s->recv_trailing_metadata_finished);
|
2010
1965
|
}
|
2011
1966
|
}
|
@@ -2020,26 +1975,12 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
|
|
2020
1975
|
t->incoming_stream = nullptr;
|
2021
1976
|
grpc_chttp2_parsing_become_skip_parser(t);
|
2022
1977
|
}
|
2023
|
-
if (s->pending_byte_stream) {
|
2024
|
-
if (s->on_next != nullptr) {
|
2025
|
-
grpc_core::Chttp2IncomingByteStream* bs = s->data_parser.parsing_frame;
|
2026
|
-
if (error == GRPC_ERROR_NONE) {
|
2027
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
|
2028
|
-
}
|
2029
|
-
bs->PublishError(error);
|
2030
|
-
bs->Unref();
|
2031
|
-
s->data_parser.parsing_frame = nullptr;
|
2032
|
-
} else {
|
2033
|
-
GRPC_ERROR_UNREF(s->byte_stream_error);
|
2034
|
-
s->byte_stream_error = GRPC_ERROR_REF(error);
|
2035
|
-
}
|
2036
|
-
}
|
2037
1978
|
|
2038
1979
|
if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
2039
1980
|
post_benign_reclaimer(t);
|
2040
|
-
if (t->sent_goaway_state ==
|
1981
|
+
if (t->sent_goaway_state == GRPC_CHTTP2_FINAL_GOAWAY_SENT) {
|
2041
1982
|
close_transport_locked(
|
2042
|
-
t,
|
1983
|
+
t, GRPC_ERROR_CREATE_REFERENCING(
|
2043
1984
|
"Last stream closed after sending GOAWAY", &error, 1));
|
2044
1985
|
}
|
2045
1986
|
}
|
@@ -2049,8 +1990,6 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
|
|
2049
1990
|
grpc_chttp2_list_remove_stalled_by_stream(t, s);
|
2050
1991
|
grpc_chttp2_list_remove_stalled_by_transport(t, s);
|
2051
1992
|
|
2052
|
-
GRPC_ERROR_UNREF(error);
|
2053
|
-
|
2054
1993
|
maybe_start_some_streams(t);
|
2055
1994
|
}
|
2056
1995
|
|
@@ -2072,7 +2011,7 @@ void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2072
2011
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
|
2073
2012
|
}
|
2074
2013
|
}
|
2075
|
-
if (due_to_error
|
2014
|
+
if (!due_to_error.ok() && !s->seen_error) {
|
2076
2015
|
s->seen_error = true;
|
2077
2016
|
}
|
2078
2017
|
grpc_chttp2_mark_stream_closed(t, s, 1, 1, due_to_error);
|
@@ -2094,13 +2033,9 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2094
2033
|
// what we want - which is safe because we haven't told anyone
|
2095
2034
|
// about the metadata yet
|
2096
2035
|
if (s->published_metadata[1] == GRPC_METADATA_NOT_PUBLISHED ||
|
2097
|
-
s->recv_trailing_metadata_finished != nullptr
|
2098
|
-
|
2099
|
-
|
2100
|
-
GRPC_LOG_IF_ERROR("add_status",
|
2101
|
-
s->trailing_metadata_buffer.ReplaceOrAppend(
|
2102
|
-
GRPC_MDSTR_GRPC_STATUS,
|
2103
|
-
grpc_core::UnmanagedMemorySlice(status_string)));
|
2036
|
+
s->recv_trailing_metadata_finished != nullptr ||
|
2037
|
+
!s->final_metadata_requested) {
|
2038
|
+
s->trailing_metadata_buffer.Set(grpc_core::GrpcStatusMetadata(), status);
|
2104
2039
|
if (!message.empty()) {
|
2105
2040
|
s->trailing_metadata_buffer.Set(
|
2106
2041
|
grpc_core::GrpcMessageMetadata(),
|
@@ -2109,13 +2044,11 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2109
2044
|
s->published_metadata[1] = GRPC_METADATA_SYNTHESIZED_FROM_FAKE;
|
2110
2045
|
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
2111
2046
|
}
|
2112
|
-
|
2113
|
-
GRPC_ERROR_UNREF(error);
|
2114
2047
|
}
|
2115
2048
|
|
2116
2049
|
static void add_error(grpc_error_handle error, grpc_error_handle* refs,
|
2117
2050
|
size_t* nrefs) {
|
2118
|
-
if (error
|
2051
|
+
if (error.ok()) return;
|
2119
2052
|
for (size_t i = 0; i < *nrefs; i++) {
|
2120
2053
|
if (error == refs[i]) {
|
2121
2054
|
return;
|
@@ -2133,12 +2066,10 @@ static grpc_error_handle removal_error(grpc_error_handle extra_error,
|
|
2133
2066
|
add_error(s->read_closed_error, refs, &nrefs);
|
2134
2067
|
add_error(s->write_closed_error, refs, &nrefs);
|
2135
2068
|
add_error(extra_error, refs, &nrefs);
|
2136
|
-
grpc_error_handle error
|
2069
|
+
grpc_error_handle error;
|
2137
2070
|
if (nrefs > 0) {
|
2138
|
-
error =
|
2139
|
-
refs, nrefs);
|
2071
|
+
error = GRPC_ERROR_CREATE_REFERENCING(main_error_msg, refs, nrefs);
|
2140
2072
|
}
|
2141
|
-
GRPC_ERROR_UNREF(extra_error);
|
2142
2073
|
return error;
|
2143
2074
|
}
|
2144
2075
|
|
@@ -2148,12 +2079,11 @@ static void flush_write_list(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2148
2079
|
while (*list) {
|
2149
2080
|
grpc_chttp2_write_cb* cb = *list;
|
2150
2081
|
*list = cb->next;
|
2151
|
-
grpc_chttp2_complete_closure_step(t, s, &cb->closure,
|
2082
|
+
grpc_chttp2_complete_closure_step(t, s, &cb->closure, error,
|
2152
2083
|
"on_write_finished_cb");
|
2153
2084
|
cb->next = t->write_cb_pool;
|
2154
2085
|
t->write_cb_pool = cb;
|
2155
2086
|
}
|
2156
|
-
GRPC_ERROR_UNREF(error);
|
2157
2087
|
}
|
2158
2088
|
|
2159
2089
|
void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
|
@@ -2163,30 +2093,34 @@ void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
|
|
2163
2093
|
removal_error(error, s, "Pending writes failed due to stream closure");
|
2164
2094
|
s->send_initial_metadata = nullptr;
|
2165
2095
|
grpc_chttp2_complete_closure_step(t, s, &s->send_initial_metadata_finished,
|
2166
|
-
|
2167
|
-
"send_initial_metadata_finished");
|
2096
|
+
error, "send_initial_metadata_finished");
|
2168
2097
|
|
2169
2098
|
s->send_trailing_metadata = nullptr;
|
2170
2099
|
s->sent_trailing_metadata_op = nullptr;
|
2171
2100
|
grpc_chttp2_complete_closure_step(t, s, &s->send_trailing_metadata_finished,
|
2172
|
-
|
2173
|
-
"send_trailing_metadata_finished");
|
2101
|
+
error, "send_trailing_metadata_finished");
|
2174
2102
|
|
2175
|
-
s->
|
2176
|
-
grpc_chttp2_complete_closure_step(t, s, &s->fetching_send_message_finished,
|
2177
|
-
GRPC_ERROR_REF(error),
|
2103
|
+
grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished, error,
|
2178
2104
|
"fetching_send_message_finished");
|
2179
|
-
flush_write_list(t, s, &s->on_write_finished_cbs,
|
2105
|
+
flush_write_list(t, s, &s->on_write_finished_cbs, error);
|
2180
2106
|
flush_write_list(t, s, &s->on_flow_controlled_cbs, error);
|
2181
2107
|
}
|
2182
2108
|
|
2183
2109
|
void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
|
2184
2110
|
grpc_chttp2_stream* s, int close_reads,
|
2185
2111
|
int close_writes, grpc_error_handle error) {
|
2112
|
+
if (grpc_http_trace.enabled()) {
|
2113
|
+
gpr_log(
|
2114
|
+
GPR_DEBUG, "MARK_STREAM_CLOSED: t=%p s=%p(id=%d) %s [%s]", t, s, s->id,
|
2115
|
+
(close_reads && close_writes)
|
2116
|
+
? "read+write"
|
2117
|
+
: (close_reads ? "read" : (close_writes ? "write" : "nothing??")),
|
2118
|
+
error.ToString().c_str());
|
2119
|
+
}
|
2186
2120
|
if (s->read_closed && s->write_closed) {
|
2187
2121
|
// already closed, but we should still fake the status if needed.
|
2188
2122
|
grpc_error_handle overall_error = removal_error(error, s, "Stream removed");
|
2189
|
-
if (overall_error
|
2123
|
+
if (!overall_error.ok()) {
|
2190
2124
|
grpc_chttp2_fake_status(t, s, overall_error);
|
2191
2125
|
}
|
2192
2126
|
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
@@ -2195,26 +2129,25 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
|
|
2195
2129
|
bool closed_read = false;
|
2196
2130
|
bool became_closed = false;
|
2197
2131
|
if (close_reads && !s->read_closed) {
|
2198
|
-
s->read_closed_error =
|
2132
|
+
s->read_closed_error = error;
|
2199
2133
|
s->read_closed = true;
|
2200
2134
|
closed_read = true;
|
2201
2135
|
}
|
2202
2136
|
if (close_writes && !s->write_closed) {
|
2203
|
-
s->write_closed_error =
|
2137
|
+
s->write_closed_error = error;
|
2204
2138
|
s->write_closed = true;
|
2205
|
-
grpc_chttp2_fail_pending_writes(t, s,
|
2139
|
+
grpc_chttp2_fail_pending_writes(t, s, error);
|
2206
2140
|
}
|
2207
2141
|
if (s->read_closed && s->write_closed) {
|
2208
2142
|
became_closed = true;
|
2209
|
-
grpc_error_handle overall_error =
|
2210
|
-
removal_error(GRPC_ERROR_REF(error), s, "Stream removed");
|
2143
|
+
grpc_error_handle overall_error = removal_error(error, s, "Stream removed");
|
2211
2144
|
if (s->id != 0) {
|
2212
|
-
remove_stream(t, s->id,
|
2145
|
+
remove_stream(t, s->id, overall_error);
|
2213
2146
|
} else {
|
2214
2147
|
// Purge streams waiting on concurrency still waiting for id assignment
|
2215
2148
|
grpc_chttp2_list_remove_waiting_for_concurrency(t, s);
|
2216
2149
|
}
|
2217
|
-
if (overall_error
|
2150
|
+
if (!overall_error.ok()) {
|
2218
2151
|
grpc_chttp2_fake_status(t, s, overall_error);
|
2219
2152
|
}
|
2220
2153
|
}
|
@@ -2228,10 +2161,11 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
|
|
2228
2161
|
grpc_chttp2_maybe_complete_recv_message(t, s);
|
2229
2162
|
}
|
2230
2163
|
if (became_closed) {
|
2164
|
+
s->stats.latency =
|
2165
|
+
gpr_time_sub(gpr_now(GPR_CLOCK_MONOTONIC), s->creation_time);
|
2231
2166
|
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
2232
2167
|
GRPC_CHTTP2_STREAM_UNREF(s, "chttp2");
|
2233
2168
|
}
|
2234
|
-
GRPC_ERROR_UNREF(error);
|
2235
2169
|
}
|
2236
2170
|
|
2237
2171
|
static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
@@ -2314,8 +2248,8 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2314
2248
|
|
2315
2249
|
status_hdr = GRPC_SLICE_MALLOC(15 + (grpc_status >= 10));
|
2316
2250
|
p = GRPC_SLICE_START_PTR(status_hdr);
|
2317
|
-
*p++ = 0x00;
|
2318
|
-
*p++ = 11;
|
2251
|
+
*p++ = 0x00; // literal header, not indexed
|
2252
|
+
*p++ = 11; // len(grpc-status)
|
2319
2253
|
*p++ = 'g';
|
2320
2254
|
*p++ = 'r';
|
2321
2255
|
*p++ = 'p';
|
@@ -2340,11 +2274,11 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2340
2274
|
|
2341
2275
|
size_t msg_len = message.length();
|
2342
2276
|
GPR_ASSERT(msg_len <= UINT32_MAX);
|
2343
|
-
grpc_core::VarintWriter<1> msg_len_writer(msg_len);
|
2277
|
+
grpc_core::VarintWriter<1> msg_len_writer(static_cast<uint32_t>(msg_len));
|
2344
2278
|
message_pfx = GRPC_SLICE_MALLOC(14 + msg_len_writer.length());
|
2345
2279
|
p = GRPC_SLICE_START_PTR(message_pfx);
|
2346
|
-
*p++ = 0x00;
|
2347
|
-
*p++ = 12;
|
2280
|
+
*p++ = 0x00; // literal header, not indexed
|
2281
|
+
*p++ = 12; // len(grpc-message)
|
2348
2282
|
*p++ = 'g';
|
2349
2283
|
*p++ = 'r';
|
2350
2284
|
*p++ = 'p';
|
@@ -2401,7 +2335,7 @@ struct cancel_stream_cb_args {
|
|
2401
2335
|
static void cancel_stream_cb(void* user_data, uint32_t /*key*/, void* stream) {
|
2402
2336
|
cancel_stream_cb_args* args = static_cast<cancel_stream_cb_args*>(user_data);
|
2403
2337
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(stream);
|
2404
|
-
grpc_chttp2_cancel_stream(args->t, s,
|
2338
|
+
grpc_chttp2_cancel_stream(args->t, s, args->error);
|
2405
2339
|
}
|
2406
2340
|
|
2407
2341
|
static void end_all_the_calls(grpc_chttp2_transport* t,
|
@@ -2409,13 +2343,14 @@ static void end_all_the_calls(grpc_chttp2_transport* t,
|
|
2409
2343
|
intptr_t http2_error;
|
2410
2344
|
// If there is no explicit grpc or HTTP/2 error, set to UNAVAILABLE on server.
|
2411
2345
|
if (!t->is_client && !grpc_error_has_clear_grpc_status(error) &&
|
2412
|
-
!grpc_error_get_int(error,
|
2413
|
-
|
2346
|
+
!grpc_error_get_int(error, grpc_core::StatusIntProperty::kHttp2Error,
|
2347
|
+
&http2_error)) {
|
2348
|
+
error = grpc_error_set_int(error, grpc_core::StatusIntProperty::kRpcStatus,
|
2414
2349
|
GRPC_STATUS_UNAVAILABLE);
|
2415
2350
|
}
|
2351
|
+
cancel_unstarted_streams(t, error);
|
2416
2352
|
cancel_stream_cb_args args = {error, t};
|
2417
2353
|
grpc_chttp2_stream_map_for_each(&t->stream_map, cancel_stream_cb, &args);
|
2418
|
-
GRPC_ERROR_UNREF(error);
|
2419
2354
|
}
|
2420
2355
|
|
2421
2356
|
//
|
@@ -2442,8 +2377,11 @@ void grpc_chttp2_act_on_flowctl_action(
|
|
2442
2377
|
const grpc_core::chttp2::FlowControlAction& action,
|
2443
2378
|
grpc_chttp2_transport* t, grpc_chttp2_stream* s) {
|
2444
2379
|
WithUrgency(t, action.send_stream_update(),
|
2445
|
-
GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL,
|
2446
|
-
|
2380
|
+
GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL, [t, s]() {
|
2381
|
+
if (s->id != 0 && !s->read_closed) {
|
2382
|
+
grpc_chttp2_mark_stream_writable(t, s);
|
2383
|
+
}
|
2384
|
+
});
|
2447
2385
|
WithUrgency(t, action.send_transport_update(),
|
2448
2386
|
GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL, []() {});
|
2449
2387
|
WithUrgency(t, action.send_initial_window_update(),
|
@@ -2457,31 +2395,39 @@ void grpc_chttp2_act_on_flowctl_action(
|
|
2457
2395
|
queue_setting_update(t, GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
|
2458
2396
|
action.max_frame_size());
|
2459
2397
|
});
|
2398
|
+
if (t->enable_preferred_rx_crypto_frame_advertisement) {
|
2399
|
+
WithUrgency(
|
2400
|
+
t, action.preferred_rx_crypto_frame_size_update(),
|
2401
|
+
GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS, [t, &action]() {
|
2402
|
+
queue_setting_update(
|
2403
|
+
t, GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE,
|
2404
|
+
action.preferred_rx_crypto_frame_size());
|
2405
|
+
});
|
2406
|
+
}
|
2460
2407
|
}
|
2461
2408
|
|
2462
2409
|
static grpc_error_handle try_http_parsing(grpc_chttp2_transport* t) {
|
2463
2410
|
grpc_http_parser parser;
|
2464
2411
|
size_t i = 0;
|
2465
|
-
grpc_error_handle error
|
2412
|
+
grpc_error_handle error;
|
2466
2413
|
grpc_http_response response;
|
2467
2414
|
|
2468
2415
|
grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response);
|
2469
2416
|
|
2470
|
-
grpc_error_handle parse_error
|
2471
|
-
for (; i < t->read_buffer.count && parse_error
|
2417
|
+
grpc_error_handle parse_error;
|
2418
|
+
for (; i < t->read_buffer.count && parse_error.ok(); i++) {
|
2472
2419
|
parse_error =
|
2473
2420
|
grpc_http_parser_parse(&parser, t->read_buffer.slices[i], nullptr);
|
2474
2421
|
}
|
2475
|
-
if (parse_error
|
2476
|
-
(parse_error = grpc_http_parser_eof(&parser)) ==
|
2422
|
+
if (parse_error.ok() &&
|
2423
|
+
(parse_error = grpc_http_parser_eof(&parser)) == absl::OkStatus()) {
|
2477
2424
|
error = grpc_error_set_int(
|
2478
|
-
grpc_error_set_int(
|
2479
|
-
|
2480
|
-
|
2481
|
-
|
2425
|
+
grpc_error_set_int(
|
2426
|
+
GRPC_ERROR_CREATE("Trying to connect an http1.x server"),
|
2427
|
+
grpc_core::StatusIntProperty::kHttpStatus, response.status),
|
2428
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
2482
2429
|
grpc_http2_status_to_grpc_status(response.status));
|
2483
2430
|
}
|
2484
|
-
GRPC_ERROR_UNREF(parse_error);
|
2485
2431
|
|
2486
2432
|
grpc_http_parser_destroy(&parser);
|
2487
2433
|
grpc_http_response_destroy(&response);
|
@@ -2492,44 +2438,31 @@ static void read_action(void* tp, grpc_error_handle error) {
|
|
2492
2438
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2493
2439
|
t->combiner->Run(
|
2494
2440
|
GRPC_CLOSURE_INIT(&t->read_action_locked, read_action_locked, t, nullptr),
|
2495
|
-
|
2441
|
+
error);
|
2496
2442
|
}
|
2497
2443
|
|
2498
2444
|
static void read_action_locked(void* tp, grpc_error_handle error) {
|
2499
|
-
GPR_TIMER_SCOPE("reading_action_locked", 0);
|
2500
|
-
|
2501
2445
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2502
2446
|
|
2503
|
-
(void)GRPC_ERROR_REF(error);
|
2504
|
-
|
2505
2447
|
grpc_error_handle err = error;
|
2506
|
-
if (err
|
2507
|
-
err = grpc_error_set_int(
|
2508
|
-
|
2509
|
-
|
2510
|
-
t->write_state);
|
2448
|
+
if (!err.ok()) {
|
2449
|
+
err = grpc_error_set_int(
|
2450
|
+
GRPC_ERROR_CREATE_REFERENCING("Endpoint read failed", &err, 1),
|
2451
|
+
grpc_core::StatusIntProperty::kOccurredDuringWrite, t->write_state);
|
2511
2452
|
}
|
2512
2453
|
std::swap(err, error);
|
2513
|
-
|
2514
|
-
if (t->closed_with_error == GRPC_ERROR_NONE) {
|
2515
|
-
GPR_TIMER_SCOPE("reading_action.parse", 0);
|
2454
|
+
if (t->closed_with_error.ok()) {
|
2516
2455
|
size_t i = 0;
|
2517
|
-
grpc_error_handle errors[3] = {
|
2518
|
-
|
2519
|
-
for (; i < t->read_buffer.count && errors[1] == GRPC_ERROR_NONE; i++) {
|
2456
|
+
grpc_error_handle errors[3] = {error, absl::OkStatus(), absl::OkStatus()};
|
2457
|
+
for (; i < t->read_buffer.count && errors[1] == absl::OkStatus(); i++) {
|
2520
2458
|
errors[1] = grpc_chttp2_perform_read(t, t->read_buffer.slices[i]);
|
2521
2459
|
}
|
2522
|
-
if (errors[1] !=
|
2460
|
+
if (errors[1] != absl::OkStatus()) {
|
2523
2461
|
errors[2] = try_http_parsing(t);
|
2524
|
-
|
2525
|
-
|
2526
|
-
"Failed parsing HTTP/2", errors, GPR_ARRAY_SIZE(errors));
|
2527
|
-
}
|
2528
|
-
for (i = 0; i < GPR_ARRAY_SIZE(errors); i++) {
|
2529
|
-
GRPC_ERROR_UNREF(errors[i]);
|
2462
|
+
error = GRPC_ERROR_CREATE_REFERENCING("Failed parsing HTTP/2", errors,
|
2463
|
+
GPR_ARRAY_SIZE(errors));
|
2530
2464
|
}
|
2531
2465
|
|
2532
|
-
GPR_TIMER_SCOPE("post_parse_locked", 0);
|
2533
2466
|
if (t->initial_window_update != 0) {
|
2534
2467
|
if (t->initial_window_update > 0) {
|
2535
2468
|
grpc_chttp2_stream* s;
|
@@ -2543,29 +2476,28 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
|
|
2543
2476
|
}
|
2544
2477
|
}
|
2545
2478
|
|
2546
|
-
GPR_TIMER_SCOPE("post_reading_action_locked", 0);
|
2547
2479
|
bool keep_reading = false;
|
2548
|
-
if (error
|
2549
|
-
error =
|
2550
|
-
|
2480
|
+
if (error.ok() && !t->closed_with_error.ok()) {
|
2481
|
+
error = GRPC_ERROR_CREATE_REFERENCING("Transport closed",
|
2482
|
+
&t->closed_with_error, 1);
|
2551
2483
|
}
|
2552
|
-
if (error
|
2484
|
+
if (!error.ok()) {
|
2553
2485
|
// If a goaway frame was received, this might be the reason why the read
|
2554
2486
|
// failed. Add this info to the error
|
2555
|
-
if (t->goaway_error
|
2556
|
-
error = grpc_error_add_child(error,
|
2487
|
+
if (!t->goaway_error.ok()) {
|
2488
|
+
error = grpc_error_add_child(error, t->goaway_error);
|
2557
2489
|
}
|
2558
2490
|
|
2559
|
-
close_transport_locked(t,
|
2491
|
+
close_transport_locked(t, error);
|
2560
2492
|
t->endpoint_reading = 0;
|
2561
|
-
} else if (t->closed_with_error
|
2493
|
+
} else if (t->closed_with_error.ok()) {
|
2562
2494
|
keep_reading = true;
|
2563
2495
|
// Since we have read a byte, reset the keepalive timer
|
2564
2496
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
|
2565
|
-
|
2497
|
+
maybe_reset_keepalive_ping_timer_locked(t);
|
2566
2498
|
}
|
2567
2499
|
}
|
2568
|
-
|
2500
|
+
grpc_slice_buffer_reset_and_unref(&t->read_buffer);
|
2569
2501
|
|
2570
2502
|
if (keep_reading) {
|
2571
2503
|
if (t->num_pending_induced_frames >= DEFAULT_MAX_PENDING_INDUCED_FRAMES) {
|
@@ -2581,22 +2513,20 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
|
|
2581
2513
|
} else {
|
2582
2514
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "reading_action");
|
2583
2515
|
}
|
2584
|
-
|
2585
|
-
GRPC_ERROR_UNREF(error);
|
2586
2516
|
}
|
2587
2517
|
|
2588
2518
|
static void continue_read_action_locked(grpc_chttp2_transport* t) {
|
2589
|
-
const bool urgent = t->goaway_error
|
2519
|
+
const bool urgent = !t->goaway_error.ok();
|
2590
2520
|
GRPC_CLOSURE_INIT(&t->read_action_locked, read_action, t,
|
2591
2521
|
grpc_schedule_on_exec_ctx);
|
2592
|
-
grpc_endpoint_read(t->ep, &t->read_buffer, &t->read_action_locked, urgent
|
2593
|
-
|
2522
|
+
grpc_endpoint_read(t->ep, &t->read_buffer, &t->read_action_locked, urgent,
|
2523
|
+
grpc_chttp2_min_read_progress_size(t));
|
2594
2524
|
}
|
2595
2525
|
|
2596
2526
|
// t is reffed prior to calling the first time, and once the callback chain
|
2597
2527
|
// that kicks off finishes, it's unreffed
|
2598
2528
|
void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
|
2599
|
-
t->flow_control
|
2529
|
+
t->flow_control.bdp_estimator()->SchedulePing();
|
2600
2530
|
send_ping_locked(
|
2601
2531
|
t,
|
2602
2532
|
GRPC_CLOSURE_INIT(&t->start_bdp_ping_locked, start_bdp_ping, t,
|
@@ -2610,23 +2540,23 @@ static void start_bdp_ping(void* tp, grpc_error_handle error) {
|
|
2610
2540
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2611
2541
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_bdp_ping_locked,
|
2612
2542
|
start_bdp_ping_locked, t, nullptr),
|
2613
|
-
|
2543
|
+
error);
|
2614
2544
|
}
|
2615
2545
|
|
2616
2546
|
static void start_bdp_ping_locked(void* tp, grpc_error_handle error) {
|
2617
2547
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2618
2548
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
2619
2549
|
gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string.c_str(),
|
2620
|
-
|
2550
|
+
grpc_core::StatusToString(error).c_str());
|
2621
2551
|
}
|
2622
|
-
if (error
|
2552
|
+
if (!error.ok() || !t->closed_with_error.ok()) {
|
2623
2553
|
return;
|
2624
2554
|
}
|
2625
2555
|
// Reset the keepalive ping timer
|
2626
2556
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
|
2627
|
-
|
2557
|
+
maybe_reset_keepalive_ping_timer_locked(t);
|
2628
2558
|
}
|
2629
|
-
t->flow_control
|
2559
|
+
t->flow_control.bdp_estimator()->StartPing();
|
2630
2560
|
t->bdp_ping_started = true;
|
2631
2561
|
}
|
2632
2562
|
|
@@ -2634,16 +2564,16 @@ static void finish_bdp_ping(void* tp, grpc_error_handle error) {
|
|
2634
2564
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2635
2565
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
|
2636
2566
|
finish_bdp_ping_locked, t, nullptr),
|
2637
|
-
|
2567
|
+
error);
|
2638
2568
|
}
|
2639
2569
|
|
2640
2570
|
static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
|
2641
2571
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2642
2572
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
2643
2573
|
gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string.c_str(),
|
2644
|
-
|
2574
|
+
grpc_core::StatusToString(error).c_str());
|
2645
2575
|
}
|
2646
|
-
if (error
|
2576
|
+
if (!error.ok() || !t->closed_with_error.ok()) {
|
2647
2577
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
2648
2578
|
return;
|
2649
2579
|
}
|
@@ -2652,39 +2582,37 @@ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
|
|
2652
2582
|
// finish_bdp_ping_locked to be run later.
|
2653
2583
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
|
2654
2584
|
finish_bdp_ping_locked, t, nullptr),
|
2655
|
-
|
2585
|
+
error);
|
2656
2586
|
return;
|
2657
2587
|
}
|
2658
2588
|
t->bdp_ping_started = false;
|
2659
|
-
|
2660
|
-
|
2589
|
+
grpc_core::Timestamp next_ping =
|
2590
|
+
t->flow_control.bdp_estimator()->CompletePing();
|
2591
|
+
grpc_chttp2_act_on_flowctl_action(t->flow_control.PeriodicUpdate(), t,
|
2661
2592
|
nullptr);
|
2662
|
-
GPR_ASSERT(!t->
|
2663
|
-
t->
|
2664
|
-
|
2665
|
-
|
2666
|
-
|
2667
|
-
|
2593
|
+
GPR_ASSERT(!t->next_bdp_ping_timer_handle.has_value());
|
2594
|
+
t->next_bdp_ping_timer_handle =
|
2595
|
+
t->event_engine->RunAfter(next_ping - grpc_core::Timestamp::Now(), [t] {
|
2596
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2597
|
+
grpc_core::ExecCtx exec_ctx;
|
2598
|
+
next_bdp_ping_timer_expired(t);
|
2599
|
+
});
|
2668
2600
|
}
|
2669
2601
|
|
2670
|
-
static void next_bdp_ping_timer_expired(
|
2671
|
-
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2602
|
+
static void next_bdp_ping_timer_expired(grpc_chttp2_transport* t) {
|
2672
2603
|
t->combiner->Run(
|
2673
2604
|
GRPC_CLOSURE_INIT(&t->next_bdp_ping_timer_expired_locked,
|
2674
2605
|
next_bdp_ping_timer_expired_locked, t, nullptr),
|
2675
|
-
|
2606
|
+
absl::OkStatus());
|
2676
2607
|
}
|
2677
2608
|
|
2678
|
-
static void next_bdp_ping_timer_expired_locked(
|
2679
|
-
|
2609
|
+
static void next_bdp_ping_timer_expired_locked(
|
2610
|
+
void* tp, GRPC_UNUSED grpc_error_handle error) {
|
2611
|
+
GPR_DEBUG_ASSERT(error.ok());
|
2680
2612
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2681
|
-
GPR_ASSERT(t->
|
2682
|
-
t->
|
2683
|
-
if (
|
2684
|
-
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
2685
|
-
return;
|
2686
|
-
}
|
2687
|
-
if (t->flow_control->bdp_estimator()->accumulator() == 0) {
|
2613
|
+
GPR_ASSERT(t->next_bdp_ping_timer_handle.has_value());
|
2614
|
+
t->next_bdp_ping_timer_handle.reset();
|
2615
|
+
if (t->flow_control.bdp_estimator()->accumulator() == 0) {
|
2688
2616
|
// Block the bdp ping till we receive more data.
|
2689
2617
|
t->bdp_ping_blocked = true;
|
2690
2618
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
@@ -2752,42 +2680,37 @@ void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
|
|
2752
2680
|
}
|
2753
2681
|
}
|
2754
2682
|
|
2755
|
-
static void init_keepalive_ping(
|
2756
|
-
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2683
|
+
static void init_keepalive_ping(grpc_chttp2_transport* t) {
|
2757
2684
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked,
|
2758
2685
|
init_keepalive_ping_locked, t, nullptr),
|
2759
|
-
|
2686
|
+
absl::OkStatus());
|
2760
2687
|
}
|
2761
2688
|
|
2762
|
-
static void init_keepalive_ping_locked(void* arg,
|
2689
|
+
static void init_keepalive_ping_locked(void* arg,
|
2690
|
+
GRPC_UNUSED grpc_error_handle error) {
|
2691
|
+
GPR_DEBUG_ASSERT(error.ok());
|
2763
2692
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2764
2693
|
GPR_ASSERT(t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING);
|
2765
|
-
|
2694
|
+
GPR_ASSERT(t->keepalive_ping_timer_handle.has_value());
|
2695
|
+
t->keepalive_ping_timer_handle.reset();
|
2696
|
+
if (t->destroying || !t->closed_with_error.ok()) {
|
2766
2697
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
|
2767
|
-
} else
|
2698
|
+
} else {
|
2768
2699
|
if (t->keepalive_permit_without_calls ||
|
2769
2700
|
grpc_chttp2_stream_map_size(&t->stream_map) > 0) {
|
2770
2701
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_PINGING;
|
2771
2702
|
GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive ping end");
|
2772
|
-
grpc_timer_init_unset(&t->keepalive_watchdog_timer);
|
2773
2703
|
send_keepalive_ping_locked(t);
|
2774
2704
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING);
|
2775
2705
|
} else {
|
2776
2706
|
GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
|
2777
|
-
|
2778
|
-
|
2779
|
-
|
2780
|
-
|
2781
|
-
|
2782
|
-
|
2783
|
-
|
2784
|
-
// The keepalive ping timer may be cancelled by bdp
|
2785
|
-
GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
|
2786
|
-
GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked, init_keepalive_ping, t,
|
2787
|
-
grpc_schedule_on_exec_ctx);
|
2788
|
-
grpc_timer_init(&t->keepalive_ping_timer,
|
2789
|
-
grpc_core::ExecCtx::Get()->Now() + t->keepalive_time,
|
2790
|
-
&t->init_keepalive_ping_locked);
|
2707
|
+
t->keepalive_ping_timer_handle =
|
2708
|
+
t->event_engine->RunAfter(t->keepalive_time, [t] {
|
2709
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2710
|
+
grpc_core::ExecCtx exec_ctx;
|
2711
|
+
init_keepalive_ping(t);
|
2712
|
+
});
|
2713
|
+
}
|
2791
2714
|
}
|
2792
2715
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
|
2793
2716
|
}
|
@@ -2796,12 +2719,12 @@ static void start_keepalive_ping(void* arg, grpc_error_handle error) {
|
|
2796
2719
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2797
2720
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
|
2798
2721
|
start_keepalive_ping_locked, t, nullptr),
|
2799
|
-
|
2722
|
+
error);
|
2800
2723
|
}
|
2801
2724
|
|
2802
2725
|
static void start_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
2803
2726
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2804
|
-
if (error
|
2727
|
+
if (!error.ok()) {
|
2805
2728
|
return;
|
2806
2729
|
}
|
2807
2730
|
if (t->channelz_socket != nullptr) {
|
@@ -2812,11 +2735,12 @@ static void start_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
|
2812
2735
|
gpr_log(GPR_INFO, "%s: Start keepalive ping", t->peer_string.c_str());
|
2813
2736
|
}
|
2814
2737
|
GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive watchdog");
|
2815
|
-
|
2816
|
-
|
2817
|
-
|
2818
|
-
|
2819
|
-
|
2738
|
+
t->keepalive_watchdog_timer_handle =
|
2739
|
+
t->event_engine->RunAfter(t->keepalive_timeout, [t] {
|
2740
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2741
|
+
grpc_core::ExecCtx exec_ctx;
|
2742
|
+
keepalive_watchdog_fired(t);
|
2743
|
+
});
|
2820
2744
|
t->keepalive_ping_started = true;
|
2821
2745
|
}
|
2822
2746
|
|
@@ -2824,13 +2748,13 @@ static void finish_keepalive_ping(void* arg, grpc_error_handle error) {
|
|
2824
2748
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2825
2749
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
|
2826
2750
|
finish_keepalive_ping_locked, t, nullptr),
|
2827
|
-
|
2751
|
+
error);
|
2828
2752
|
}
|
2829
2753
|
|
2830
2754
|
static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
2831
2755
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2832
2756
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
|
2833
|
-
if (error
|
2757
|
+
if (error.ok()) {
|
2834
2758
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
|
2835
2759
|
GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
|
2836
2760
|
gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string.c_str());
|
@@ -2841,56 +2765,81 @@ static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
|
2841
2765
|
t->combiner->Run(
|
2842
2766
|
GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
|
2843
2767
|
finish_keepalive_ping_locked, t, nullptr),
|
2844
|
-
|
2768
|
+
error);
|
2845
2769
|
return;
|
2846
2770
|
}
|
2847
2771
|
t->keepalive_ping_started = false;
|
2848
2772
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_WAITING;
|
2849
|
-
|
2773
|
+
if (t->keepalive_watchdog_timer_handle.has_value()) {
|
2774
|
+
if (t->event_engine->Cancel(*t->keepalive_watchdog_timer_handle)) {
|
2775
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
|
2776
|
+
t->keepalive_watchdog_timer_handle.reset();
|
2777
|
+
}
|
2778
|
+
}
|
2779
|
+
GPR_ASSERT(!t->keepalive_ping_timer_handle.has_value());
|
2850
2780
|
GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
|
2851
|
-
|
2852
|
-
|
2853
|
-
|
2854
|
-
|
2855
|
-
|
2781
|
+
t->keepalive_ping_timer_handle =
|
2782
|
+
t->event_engine->RunAfter(t->keepalive_time, [t] {
|
2783
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2784
|
+
grpc_core::ExecCtx exec_ctx;
|
2785
|
+
init_keepalive_ping(t);
|
2786
|
+
});
|
2856
2787
|
}
|
2857
2788
|
}
|
2858
2789
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive ping end");
|
2859
2790
|
}
|
2860
2791
|
|
2861
|
-
static void keepalive_watchdog_fired(
|
2862
|
-
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2792
|
+
static void keepalive_watchdog_fired(grpc_chttp2_transport* t) {
|
2863
2793
|
t->combiner->Run(
|
2864
2794
|
GRPC_CLOSURE_INIT(&t->keepalive_watchdog_fired_locked,
|
2865
2795
|
keepalive_watchdog_fired_locked, t, nullptr),
|
2866
|
-
|
2796
|
+
absl::OkStatus());
|
2867
2797
|
}
|
2868
2798
|
|
2869
|
-
static void keepalive_watchdog_fired_locked(
|
2870
|
-
|
2799
|
+
static void keepalive_watchdog_fired_locked(
|
2800
|
+
void* arg, GRPC_UNUSED grpc_error_handle error) {
|
2801
|
+
GPR_DEBUG_ASSERT(error.ok());
|
2871
2802
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2803
|
+
GPR_ASSERT(t->keepalive_watchdog_timer_handle.has_value());
|
2804
|
+
t->keepalive_watchdog_timer_handle.reset();
|
2872
2805
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
|
2873
|
-
|
2874
|
-
|
2875
|
-
|
2876
|
-
|
2877
|
-
|
2878
|
-
|
2879
|
-
|
2880
|
-
GRPC_ERROR_INT_GRPC_STATUS,
|
2881
|
-
GRPC_STATUS_UNAVAILABLE));
|
2882
|
-
}
|
2806
|
+
gpr_log(GPR_INFO, "%s: Keepalive watchdog fired. Closing transport.",
|
2807
|
+
t->peer_string.c_str());
|
2808
|
+
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
|
2809
|
+
close_transport_locked(
|
2810
|
+
t, grpc_error_set_int(GRPC_ERROR_CREATE("keepalive watchdog timeout"),
|
2811
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
2812
|
+
GRPC_STATUS_UNAVAILABLE));
|
2883
2813
|
} else {
|
2884
|
-
//
|
2885
|
-
// finish_keepalive_ping_locked.
|
2886
|
-
|
2887
|
-
|
2888
|
-
|
2889
|
-
}
|
2814
|
+
// If keepalive_state is not PINGING, we consider it as an error. Maybe the
|
2815
|
+
// cancellation failed in finish_keepalive_ping_locked. Users have seen
|
2816
|
+
// other states: https://github.com/grpc/grpc/issues/32085.
|
2817
|
+
gpr_log(GPR_ERROR, "keepalive_ping_end state error: %d (expect: %d)",
|
2818
|
+
t->keepalive_state, GRPC_CHTTP2_KEEPALIVE_STATE_PINGING);
|
2890
2819
|
}
|
2891
2820
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
|
2892
2821
|
}
|
2893
2822
|
|
2823
|
+
static void maybe_reset_keepalive_ping_timer_locked(grpc_chttp2_transport* t) {
|
2824
|
+
if (t->keepalive_ping_timer_handle.has_value()) {
|
2825
|
+
if (t->event_engine->Cancel(*t->keepalive_ping_timer_handle)) {
|
2826
|
+
// Cancel succeeds, resets the keepalive ping timer. Note that we don't
|
2827
|
+
// need to Ref or Unref here since we still hold the Ref.
|
2828
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
|
2829
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
|
2830
|
+
gpr_log(GPR_INFO, "%s: Keepalive ping cancelled. Resetting timer.",
|
2831
|
+
t->peer_string.c_str());
|
2832
|
+
}
|
2833
|
+
t->keepalive_ping_timer_handle =
|
2834
|
+
t->event_engine->RunAfter(t->keepalive_time, [t] {
|
2835
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2836
|
+
grpc_core::ExecCtx exec_ctx;
|
2837
|
+
init_keepalive_ping(t);
|
2838
|
+
});
|
2839
|
+
}
|
2840
|
+
}
|
2841
|
+
}
|
2842
|
+
|
2894
2843
|
//
|
2895
2844
|
// CALLBACK LOOP
|
2896
2845
|
//
|
@@ -2920,223 +2869,6 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* /*gs*/,
|
|
2920
2869
|
grpc_endpoint_add_to_pollset_set(t->ep, pollset_set);
|
2921
2870
|
}
|
2922
2871
|
|
2923
|
-
//
|
2924
|
-
// BYTE STREAM
|
2925
|
-
//
|
2926
|
-
|
2927
|
-
static void reset_byte_stream(void* arg, grpc_error_handle error) {
|
2928
|
-
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
|
2929
|
-
s->pending_byte_stream = false;
|
2930
|
-
if (error == GRPC_ERROR_NONE) {
|
2931
|
-
grpc_chttp2_maybe_complete_recv_message(s->t, s);
|
2932
|
-
grpc_chttp2_maybe_complete_recv_trailing_metadata(s->t, s);
|
2933
|
-
} else {
|
2934
|
-
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
2935
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, s->on_next, GRPC_ERROR_REF(error));
|
2936
|
-
s->on_next = nullptr;
|
2937
|
-
GRPC_ERROR_UNREF(s->byte_stream_error);
|
2938
|
-
s->byte_stream_error = GRPC_ERROR_NONE;
|
2939
|
-
grpc_chttp2_cancel_stream(s->t, s, GRPC_ERROR_REF(error));
|
2940
|
-
s->byte_stream_error = GRPC_ERROR_REF(error);
|
2941
|
-
}
|
2942
|
-
}
|
2943
|
-
|
2944
|
-
namespace grpc_core {
|
2945
|
-
|
2946
|
-
Chttp2IncomingByteStream::Chttp2IncomingByteStream(
|
2947
|
-
grpc_chttp2_transport* transport, grpc_chttp2_stream* stream,
|
2948
|
-
uint32_t frame_size, uint32_t flags)
|
2949
|
-
: ByteStream(frame_size, flags),
|
2950
|
-
transport_(transport),
|
2951
|
-
stream_(stream),
|
2952
|
-
refs_(2),
|
2953
|
-
remaining_bytes_(frame_size) {
|
2954
|
-
GRPC_ERROR_UNREF(stream->byte_stream_error);
|
2955
|
-
stream->byte_stream_error = GRPC_ERROR_NONE;
|
2956
|
-
}
|
2957
|
-
|
2958
|
-
void Chttp2IncomingByteStream::OrphanLocked(
|
2959
|
-
void* arg, grpc_error_handle /*error_ignored*/) {
|
2960
|
-
Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
|
2961
|
-
grpc_chttp2_stream* s = bs->stream_;
|
2962
|
-
grpc_chttp2_transport* t = s->t;
|
2963
|
-
bs->Unref();
|
2964
|
-
s->pending_byte_stream = false;
|
2965
|
-
grpc_chttp2_maybe_complete_recv_message(t, s);
|
2966
|
-
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
2967
|
-
}
|
2968
|
-
|
2969
|
-
void Chttp2IncomingByteStream::Orphan() {
|
2970
|
-
GPR_TIMER_SCOPE("incoming_byte_stream_destroy", 0);
|
2971
|
-
transport_->combiner->Run(
|
2972
|
-
GRPC_CLOSURE_INIT(&destroy_action_,
|
2973
|
-
&Chttp2IncomingByteStream::OrphanLocked, this, nullptr),
|
2974
|
-
GRPC_ERROR_NONE);
|
2975
|
-
}
|
2976
|
-
|
2977
|
-
void Chttp2IncomingByteStream::NextLocked(void* arg,
|
2978
|
-
grpc_error_handle /*error_ignored*/) {
|
2979
|
-
Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
|
2980
|
-
grpc_chttp2_transport* t = bs->transport_;
|
2981
|
-
grpc_chttp2_stream* s = bs->stream_;
|
2982
|
-
size_t cur_length = s->frame_storage.length;
|
2983
|
-
if (!s->read_closed) {
|
2984
|
-
s->flow_control->IncomingByteStreamUpdate(bs->next_action_.max_size_hint,
|
2985
|
-
cur_length);
|
2986
|
-
grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
|
2987
|
-
}
|
2988
|
-
GPR_ASSERT(s->unprocessed_incoming_frames_buffer.length == 0);
|
2989
|
-
if (s->frame_storage.length > 0) {
|
2990
|
-
grpc_slice_buffer_swap(&s->frame_storage,
|
2991
|
-
&s->unprocessed_incoming_frames_buffer);
|
2992
|
-
s->unprocessed_incoming_frames_decompressed = false;
|
2993
|
-
ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete, GRPC_ERROR_NONE);
|
2994
|
-
} else if (s->byte_stream_error != GRPC_ERROR_NONE) {
|
2995
|
-
ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete,
|
2996
|
-
GRPC_ERROR_REF(s->byte_stream_error));
|
2997
|
-
if (s->data_parser.parsing_frame != nullptr) {
|
2998
|
-
s->data_parser.parsing_frame->Unref();
|
2999
|
-
s->data_parser.parsing_frame = nullptr;
|
3000
|
-
}
|
3001
|
-
} else if (s->read_closed) {
|
3002
|
-
if (bs->remaining_bytes_ != 0) {
|
3003
|
-
s->byte_stream_error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
3004
|
-
"Truncated message", &s->read_closed_error, 1);
|
3005
|
-
ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete,
|
3006
|
-
GRPC_ERROR_REF(s->byte_stream_error));
|
3007
|
-
if (s->data_parser.parsing_frame != nullptr) {
|
3008
|
-
s->data_parser.parsing_frame->Unref();
|
3009
|
-
s->data_parser.parsing_frame = nullptr;
|
3010
|
-
}
|
3011
|
-
} else {
|
3012
|
-
// Should never reach here.
|
3013
|
-
GPR_ASSERT(false);
|
3014
|
-
}
|
3015
|
-
} else {
|
3016
|
-
s->on_next = bs->next_action_.on_complete;
|
3017
|
-
}
|
3018
|
-
bs->Unref();
|
3019
|
-
}
|
3020
|
-
|
3021
|
-
bool Chttp2IncomingByteStream::Next(size_t max_size_hint,
|
3022
|
-
grpc_closure* on_complete) {
|
3023
|
-
GPR_TIMER_SCOPE("incoming_byte_stream_next", 0);
|
3024
|
-
if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
|
3025
|
-
return true;
|
3026
|
-
} else {
|
3027
|
-
Ref();
|
3028
|
-
next_action_.max_size_hint = max_size_hint;
|
3029
|
-
next_action_.on_complete = on_complete;
|
3030
|
-
transport_->combiner->Run(
|
3031
|
-
GRPC_CLOSURE_INIT(&next_action_.closure,
|
3032
|
-
&Chttp2IncomingByteStream::NextLocked, this, nullptr),
|
3033
|
-
GRPC_ERROR_NONE);
|
3034
|
-
return false;
|
3035
|
-
}
|
3036
|
-
}
|
3037
|
-
|
3038
|
-
void Chttp2IncomingByteStream::MaybeCreateStreamDecompressionCtx() {
|
3039
|
-
GPR_DEBUG_ASSERT(stream_->stream_decompression_method !=
|
3040
|
-
GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS);
|
3041
|
-
if (!stream_->stream_decompression_ctx) {
|
3042
|
-
stream_->stream_decompression_ctx = grpc_stream_compression_context_create(
|
3043
|
-
stream_->stream_decompression_method);
|
3044
|
-
}
|
3045
|
-
}
|
3046
|
-
|
3047
|
-
grpc_error_handle Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
|
3048
|
-
GPR_TIMER_SCOPE("incoming_byte_stream_pull", 0);
|
3049
|
-
grpc_error_handle error;
|
3050
|
-
if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
|
3051
|
-
if (!stream_->unprocessed_incoming_frames_decompressed &&
|
3052
|
-
stream_->stream_decompression_method !=
|
3053
|
-
GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS) {
|
3054
|
-
bool end_of_context;
|
3055
|
-
MaybeCreateStreamDecompressionCtx();
|
3056
|
-
if (!grpc_stream_decompress(stream_->stream_decompression_ctx,
|
3057
|
-
&stream_->unprocessed_incoming_frames_buffer,
|
3058
|
-
&stream_->decompressed_data_buffer, nullptr,
|
3059
|
-
MAX_SIZE_T, &end_of_context)) {
|
3060
|
-
error =
|
3061
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Stream decompression error.");
|
3062
|
-
return error;
|
3063
|
-
}
|
3064
|
-
GPR_ASSERT(stream_->unprocessed_incoming_frames_buffer.length == 0);
|
3065
|
-
grpc_slice_buffer_swap(&stream_->unprocessed_incoming_frames_buffer,
|
3066
|
-
&stream_->decompressed_data_buffer);
|
3067
|
-
stream_->unprocessed_incoming_frames_decompressed = true;
|
3068
|
-
if (end_of_context) {
|
3069
|
-
grpc_stream_compression_context_destroy(
|
3070
|
-
stream_->stream_decompression_ctx);
|
3071
|
-
stream_->stream_decompression_ctx = nullptr;
|
3072
|
-
}
|
3073
|
-
if (stream_->unprocessed_incoming_frames_buffer.length == 0) {
|
3074
|
-
*slice = grpc_empty_slice();
|
3075
|
-
}
|
3076
|
-
}
|
3077
|
-
error = grpc_deframe_unprocessed_incoming_frames(
|
3078
|
-
&stream_->data_parser, stream_,
|
3079
|
-
&stream_->unprocessed_incoming_frames_buffer, slice, nullptr);
|
3080
|
-
if (error != GRPC_ERROR_NONE) {
|
3081
|
-
return error;
|
3082
|
-
}
|
3083
|
-
} else {
|
3084
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
|
3085
|
-
stream_->t->combiner->Run(&stream_->reset_byte_stream,
|
3086
|
-
GRPC_ERROR_REF(error));
|
3087
|
-
return error;
|
3088
|
-
}
|
3089
|
-
return GRPC_ERROR_NONE;
|
3090
|
-
}
|
3091
|
-
|
3092
|
-
void Chttp2IncomingByteStream::PublishError(grpc_error_handle error) {
|
3093
|
-
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
3094
|
-
ExecCtx::Run(DEBUG_LOCATION, stream_->on_next, GRPC_ERROR_REF(error));
|
3095
|
-
stream_->on_next = nullptr;
|
3096
|
-
GRPC_ERROR_UNREF(stream_->byte_stream_error);
|
3097
|
-
stream_->byte_stream_error = GRPC_ERROR_REF(error);
|
3098
|
-
grpc_chttp2_cancel_stream(transport_, stream_, GRPC_ERROR_REF(error));
|
3099
|
-
}
|
3100
|
-
|
3101
|
-
grpc_error_handle Chttp2IncomingByteStream::Push(const grpc_slice& slice,
|
3102
|
-
grpc_slice* slice_out) {
|
3103
|
-
if (remaining_bytes_ < GRPC_SLICE_LENGTH(slice)) {
|
3104
|
-
grpc_error_handle error =
|
3105
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many bytes in stream");
|
3106
|
-
transport_->combiner->Run(&stream_->reset_byte_stream,
|
3107
|
-
GRPC_ERROR_REF(error));
|
3108
|
-
grpc_slice_unref_internal(slice);
|
3109
|
-
return error;
|
3110
|
-
} else {
|
3111
|
-
remaining_bytes_ -= static_cast<uint32_t> GRPC_SLICE_LENGTH(slice);
|
3112
|
-
if (slice_out != nullptr) {
|
3113
|
-
*slice_out = slice;
|
3114
|
-
}
|
3115
|
-
return GRPC_ERROR_NONE;
|
3116
|
-
}
|
3117
|
-
}
|
3118
|
-
|
3119
|
-
grpc_error_handle Chttp2IncomingByteStream::Finished(grpc_error_handle error,
|
3120
|
-
bool reset_on_error) {
|
3121
|
-
if (error == GRPC_ERROR_NONE) {
|
3122
|
-
if (remaining_bytes_ != 0) {
|
3123
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
|
3124
|
-
}
|
3125
|
-
}
|
3126
|
-
if (error != GRPC_ERROR_NONE && reset_on_error) {
|
3127
|
-
transport_->combiner->Run(&stream_->reset_byte_stream,
|
3128
|
-
GRPC_ERROR_REF(error));
|
3129
|
-
}
|
3130
|
-
Unref();
|
3131
|
-
return error;
|
3132
|
-
}
|
3133
|
-
|
3134
|
-
void Chttp2IncomingByteStream::Shutdown(grpc_error_handle error) {
|
3135
|
-
GRPC_ERROR_UNREF(Finished(error, true /* reset_on_error */));
|
3136
|
-
}
|
3137
|
-
|
3138
|
-
} // namespace grpc_core
|
3139
|
-
|
3140
2872
|
//
|
3141
2873
|
// RESOURCE QUOTAS
|
3142
2874
|
//
|
@@ -3153,7 +2885,7 @@ static void post_benign_reclaimer(grpc_chttp2_transport* t) {
|
|
3153
2885
|
benign_reclaimer_locked, t,
|
3154
2886
|
grpc_schedule_on_exec_ctx);
|
3155
2887
|
t->active_reclamation = std::move(*sweep);
|
3156
|
-
t->combiner->Run(&t->benign_reclaimer_locked,
|
2888
|
+
t->combiner->Run(&t->benign_reclaimer_locked, absl::OkStatus());
|
3157
2889
|
} else {
|
3158
2890
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
|
3159
2891
|
}
|
@@ -3173,9 +2905,10 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
|
|
3173
2905
|
destructive_reclaimer_locked, t,
|
3174
2906
|
grpc_schedule_on_exec_ctx);
|
3175
2907
|
t->active_reclamation = std::move(*sweep);
|
3176
|
-
t->combiner->Run(&t->destructive_reclaimer_locked,
|
2908
|
+
t->combiner->Run(&t->destructive_reclaimer_locked,
|
2909
|
+
absl::OkStatus());
|
3177
2910
|
} else {
|
3178
|
-
GRPC_CHTTP2_UNREF_TRANSPORT(t, "
|
2911
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "destructive_reclaimer");
|
3179
2912
|
}
|
3180
2913
|
});
|
3181
2914
|
}
|
@@ -3183,8 +2916,7 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
|
|
3183
2916
|
|
3184
2917
|
static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
|
3185
2918
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
3186
|
-
if (error ==
|
3187
|
-
grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
2919
|
+
if (error.ok() && grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
3188
2920
|
// Channel with no active streams: send a goaway to try and make it
|
3189
2921
|
// disconnect cleanly
|
3190
2922
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
@@ -3192,11 +2924,11 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3192
2924
|
t->peer_string.c_str());
|
3193
2925
|
}
|
3194
2926
|
send_goaway(t,
|
3195
|
-
grpc_error_set_int(
|
3196
|
-
|
3197
|
-
|
3198
|
-
|
3199
|
-
|
2927
|
+
grpc_error_set_int(GRPC_ERROR_CREATE("Buffers full"),
|
2928
|
+
grpc_core::StatusIntProperty::kHttp2Error,
|
2929
|
+
GRPC_HTTP2_ENHANCE_YOUR_CALM),
|
2930
|
+
/*immediate_disconnect_hint=*/true);
|
2931
|
+
} else if (error.ok() && GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
3200
2932
|
gpr_log(GPR_INFO,
|
3201
2933
|
"HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
|
3202
2934
|
" streams",
|
@@ -3204,7 +2936,7 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3204
2936
|
grpc_chttp2_stream_map_size(&t->stream_map));
|
3205
2937
|
}
|
3206
2938
|
t->benign_reclaimer_registered = false;
|
3207
|
-
if (error !=
|
2939
|
+
if (error != absl::CancelledError()) {
|
3208
2940
|
t->active_reclamation.Finish();
|
3209
2941
|
}
|
3210
2942
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
|
@@ -3214,7 +2946,7 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3214
2946
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
3215
2947
|
size_t n = grpc_chttp2_stream_map_size(&t->stream_map);
|
3216
2948
|
t->destructive_reclaimer_registered = false;
|
3217
|
-
if (error
|
2949
|
+
if (error.ok() && n > 0) {
|
3218
2950
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
|
3219
2951
|
grpc_chttp2_stream_map_rand(&t->stream_map));
|
3220
2952
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
@@ -3223,8 +2955,8 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3223
2955
|
}
|
3224
2956
|
grpc_chttp2_cancel_stream(
|
3225
2957
|
t, s,
|
3226
|
-
grpc_error_set_int(
|
3227
|
-
|
2958
|
+
grpc_error_set_int(GRPC_ERROR_CREATE("Buffers full"),
|
2959
|
+
grpc_core::StatusIntProperty::kHttp2Error,
|
3228
2960
|
GRPC_HTTP2_ENHANCE_YOUR_CALM));
|
3229
2961
|
if (n > 1) {
|
3230
2962
|
// Since we cancel one stream per destructive reclamation, if
|
@@ -3234,7 +2966,7 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3234
2966
|
post_destructive_reclaimer(t);
|
3235
2967
|
}
|
3236
2968
|
}
|
3237
|
-
if (error !=
|
2969
|
+
if (error != absl::CancelledError()) {
|
3238
2970
|
t->active_reclamation.Finish();
|
3239
2971
|
}
|
3240
2972
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "destructive_reclaimer");
|
@@ -3273,6 +3005,8 @@ const char* grpc_chttp2_initiate_write_reason_string(
|
|
3273
3005
|
return "TRANSPORT_FLOW_CONTROL";
|
3274
3006
|
case GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS:
|
3275
3007
|
return "SEND_SETTINGS";
|
3008
|
+
case GRPC_CHTTP2_INITIATE_WRITE_SETTINGS_ACK:
|
3009
|
+
return "SETTINGS_ACK";
|
3276
3010
|
case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_SETTING:
|
3277
3011
|
return "FLOW_CONTROL_UNSTALLED_BY_SETTING";
|
3278
3012
|
case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_UPDATE:
|
@@ -3300,6 +3034,7 @@ static grpc_endpoint* chttp2_get_endpoint(grpc_transport* t) {
|
|
3300
3034
|
static const grpc_transport_vtable vtable = {sizeof(grpc_chttp2_stream),
|
3301
3035
|
"chttp2",
|
3302
3036
|
init_stream,
|
3037
|
+
nullptr,
|
3303
3038
|
set_pollset,
|
3304
3039
|
set_pollset_set,
|
3305
3040
|
perform_stream_op,
|
@@ -3318,7 +3053,8 @@ grpc_chttp2_transport_get_socket_node(grpc_transport* transport) {
|
|
3318
3053
|
}
|
3319
3054
|
|
3320
3055
|
grpc_transport* grpc_create_chttp2_transport(
|
3321
|
-
const
|
3056
|
+
const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
|
3057
|
+
bool is_client) {
|
3322
3058
|
auto t = new grpc_chttp2_transport(channel_args, ep, is_client);
|
3323
3059
|
return &t->base;
|
3324
3060
|
}
|
@@ -3329,7 +3065,7 @@ void grpc_chttp2_transport_start_reading(
|
|
3329
3065
|
grpc_chttp2_transport* t =
|
3330
3066
|
reinterpret_cast<grpc_chttp2_transport*>(transport);
|
3331
3067
|
GRPC_CHTTP2_REF_TRANSPORT(
|
3332
|
-
t, "reading_action");
|
3068
|
+
t, "reading_action"); // matches unref inside reading_action
|
3333
3069
|
if (read_buffer != nullptr) {
|
3334
3070
|
grpc_slice_buffer_move_into(read_buffer, &t->read_buffer);
|
3335
3071
|
gpr_free(read_buffer);
|
@@ -3338,5 +3074,5 @@ void grpc_chttp2_transport_start_reading(
|
|
3338
3074
|
t->notify_on_close = notify_on_close;
|
3339
3075
|
t->combiner->Run(
|
3340
3076
|
GRPC_CLOSURE_INIT(&t->read_action_locked, read_action_locked, t, nullptr),
|
3341
|
-
|
3077
|
+
absl::OkStatus());
|
3342
3078
|
}
|