grpc 1.47.0-x86_64-linux → 1.49.0.pre1-x86_64-linux
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 +183 -62
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +37 -25
- data/include/grpc/event_engine/slice_buffer.h +8 -2
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +5 -9
- data/include/grpc/impl/codegen/port_platform.h +2 -7
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +20 -8
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -2
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +164 -261
- data/src/core/ext/filters/client_channel/client_channel.h +34 -12
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
- data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +13 -5
- data/src/core/ext/filters/client_channel/connector.h +5 -6
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/http_proxy.cc +53 -65
- data/src/core/ext/filters/client_channel/http_proxy.h +12 -9
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +170 -164
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +13 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +200 -96
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +25 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +121 -131
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +153 -116
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +220 -181
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -6
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +110 -119
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +133 -117
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +97 -87
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +114 -131
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +40 -49
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +84 -102
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +64 -76
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +172 -103
- data/src/core/ext/filters/client_channel/proxy_mapper.h +13 -14
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +18 -16
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -7
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +7 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +434 -148
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +179 -103
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -18
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +8 -18
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +16 -18
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +4 -5
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +5 -6
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -13
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +181 -175
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +39 -32
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
- data/src/core/ext/filters/client_channel/retry_filter.cc +35 -43
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
- data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +7 -7
- data/src/core/ext/filters/client_channel/subchannel.cc +101 -138
- data/src/core/ext/filters/client_channel/subchannel.h +14 -30
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +15 -101
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +18 -13
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +20 -3
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +9 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +19 -11
- data/src/core/ext/filters/fault_injection/service_config_parser.h +19 -6
- data/src/core/ext/filters/http/client/http_client_filter.cc +17 -7
- data/src/core/ext/filters/http/client/http_client_filter.h +9 -2
- data/src/core/ext/filters/http/client_authority_filter.cc +11 -11
- data/src/core/ext/filters/http/client_authority_filter.h +6 -3
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +17 -11
- data/src/core/ext/filters/http/server/http_server_filter.h +7 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +37 -21
- data/src/core/ext/filters/message_size/message_size_filter.h +13 -3
- data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +25 -10
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +15 -5
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +14 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +23 -5
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +39 -66
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +77 -104
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +320 -635
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +4 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +207 -262
- data/src/core/ext/transport/chttp2/transport/flow_control.h +177 -289
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +25 -8
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +9 -16
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +11 -112
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +124 -154
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
- data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
- data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
- data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
- data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
- 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/google/protobuf/descriptor.upbdefs.c +92 -90
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +2 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +0 -22
- data/src/core/ext/xds/xds_api.cc +68 -103
- data/src/core/ext/xds/xds_api.h +30 -32
- data/src/core/ext/xds/xds_bootstrap.cc +69 -69
- data/src/core/ext/xds/xds_bootstrap.h +37 -19
- data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
- data/src/core/ext/xds/xds_certificate_provider.h +25 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +15 -4
- data/src/core/ext/xds/xds_channel_stack_modifier.h +13 -1
- data/src/core/ext/xds/xds_client.cc +583 -1193
- data/src/core/ext/xds/xds_client.h +28 -42
- data/src/core/ext/xds/xds_client_grpc.cc +291 -0
- data/src/core/ext/xds/xds_client_grpc.h +102 -0
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +107 -107
- data/src/core/ext/xds/xds_cluster.h +14 -5
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +23 -18
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +2 -8
- data/src/core/ext/xds/xds_common_types.cc +161 -123
- data/src/core/ext/xds/xds_common_types.h +16 -9
- data/src/core/ext/xds/xds_endpoint.cc +95 -85
- data/src/core/ext/xds/xds_endpoint.h +16 -8
- data/src/core/ext/xds/xds_http_fault_filter.cc +11 -16
- data/src/core/ext/xds/xds_http_fault_filter.h +5 -3
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +5 -5
- data/src/core/ext/xds/xds_http_rbac_filter.cc +52 -55
- data/src/core/ext/xds/xds_http_rbac_filter.h +8 -1
- data/src/core/ext/xds/xds_lb_policy_registry.cc +288 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +355 -307
- data/src/core/ext/xds/xds_listener.h +13 -4
- data/src/core/ext/xds/xds_resource_type.h +16 -5
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +215 -184
- data/src/core/ext/xds/xds_route_config.h +39 -16
- data/src/core/ext/xds/xds_routing.cc +19 -6
- data/src/core/ext/xds/xds_routing.h +12 -9
- data/src/core/ext/xds/xds_server_config_fetcher.cc +124 -81
- data/src/core/ext/xds/xds_transport.h +86 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
- data/src/core/ext/xds/xds_transport_grpc.h +135 -0
- data/src/core/lib/address_utils/parse_address.cc +24 -25
- data/src/core/lib/address_utils/parse_address.h +11 -7
- data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
- data/src/core/lib/avl/avl.h +47 -25
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_tracer.h +4 -4
- data/src/core/lib/channel/channel_args.cc +88 -19
- data/src/core/lib/channel/channel_args.h +114 -62
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +4 -5
- data/src/core/lib/channel/channel_stack.h +1 -11
- data/src/core/lib/channel/channel_stack_builder.cc +3 -3
- data/src/core/lib/channel/channel_stack_builder.h +4 -7
- data/src/core/lib/channel/channel_stack_builder_impl.cc +3 -5
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
- data/src/core/lib/channel/channelz.cc +28 -37
- data/src/core/lib/channel/channelz.h +11 -3
- data/src/core/lib/channel/channelz_registry.cc +4 -5
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +11 -5
- data/src/core/lib/channel/promise_based_filter.h +2 -1
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +3 -6
- data/src/core/lib/compression/compression_internal.h +3 -2
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/config/core_configuration.h +48 -35
- data/src/core/lib/debug/stats.cc +15 -18
- data/src/core/lib/debug/stats.h +13 -4
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/default_event_engine.cc +71 -0
- data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +6 -10
- data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
- data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
- data/src/core/lib/event_engine/executor/executor.h +38 -0
- data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
- data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
- data/src/core/lib/event_engine/forkable.cc +98 -0
- data/src/core/lib/event_engine/forkable.h +61 -0
- data/src/core/lib/event_engine/poller.h +54 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +142 -0
- data/src/core/lib/event_engine/{iomgr_engine.h → posix_engine/posix_engine.h} +35 -32
- data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +193 -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 +290 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +120 -0
- data/src/core/lib/event_engine/promise.h +78 -0
- data/src/core/lib/event_engine/socket_notifier.h +55 -0
- data/src/core/lib/event_engine/thread_pool.cc +158 -0
- data/src/core/lib/event_engine/thread_pool.h +81 -0
- data/src/core/lib/event_engine/utils.cc +49 -0
- data/src/core/lib/event_engine/utils.h +40 -0
- data/src/core/lib/event_engine/windows/iocp.cc +149 -0
- data/src/core/lib/event_engine/windows/iocp.h +68 -0
- data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
- data/src/core/lib/event_engine/windows/win_socket.h +120 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
- data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
- data/src/core/lib/gpr/time.cc +11 -9
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gpr/useful.h +29 -0
- data/src/core/lib/gprpp/bitset.h +3 -13
- data/src/core/lib/gprpp/debug_location.h +39 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -68
- data/src/core/lib/gprpp/no_destruct.h +94 -0
- data/src/core/lib/gprpp/ref_counted_ptr.h +0 -1
- data/src/core/lib/gprpp/status_helper.cc +45 -30
- data/src/core/lib/gprpp/table.h +0 -1
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +4 -0
- data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
- data/src/core/lib/{iomgr → gprpp}/time_averaged_stats.h +29 -22
- data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
- data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
- data/src/core/lib/http/format_request.cc +5 -4
- data/src/core/lib/http/format_request.h +1 -1
- data/src/core/lib/http/httpcli.cc +29 -35
- data/src/core/lib/http/httpcli.h +19 -3
- data/src/core/lib/http/httpcli_security_connector.cc +26 -14
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -28
- data/src/core/lib/iomgr/closure.h +0 -9
- data/src/core/lib/iomgr/combiner.cc +0 -20
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
- data/src/core/lib/iomgr/error.cc +6 -777
- data/src/core/lib/iomgr/error.h +6 -147
- data/src/core/lib/iomgr/error_cfstream.cc +0 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +94 -61
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +54 -92
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/exec_ctx.cc +0 -12
- data/src/core/lib/iomgr/executor.cc +0 -10
- data/src/core/lib/iomgr/executor.h +0 -3
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +7 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/lockfree_event.cc +0 -17
- data/src/core/lib/iomgr/port.h +3 -0
- data/src/core/lib/iomgr/resolve_address.h +29 -6
- data/src/core/lib/iomgr/resolve_address_posix.cc +39 -9
- data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
- data/src/core/lib/iomgr/resolve_address_windows.cc +41 -11
- data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
- data/src/core/lib/iomgr/socket_windows.h +0 -2
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
- data/src/core/lib/iomgr/tcp_posix.cc +207 -33
- data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
- data/src/core/lib/iomgr/tcp_windows.cc +5 -5
- data/src/core/lib/iomgr/timer_generic.cc +6 -8
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/json/json.h +19 -22
- data/src/core/lib/json/json_args.h +34 -0
- data/src/core/lib/json/json_object_loader.cc +233 -0
- data/src/core/lib/json/json_object_loader.h +618 -0
- data/src/core/lib/json/json_reader.cc +86 -62
- data/src/core/lib/json/json_util.cc +8 -36
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +15 -31
- data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.cc +48 -73
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +27 -27
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +16 -24
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +0 -1
- data/src/core/lib/promise/activity.h +56 -14
- data/src/core/lib/promise/arena_promise.h +84 -81
- data/src/core/lib/promise/context.h +0 -1
- data/src/core/lib/promise/detail/basic_seq.h +43 -23
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/map.h +0 -1
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/seq.h +25 -4
- data/src/core/lib/promise/sleep.cc +43 -42
- data/src/core/lib/promise/sleep.h +31 -28
- data/src/core/lib/promise/try_seq.h +26 -6
- data/src/core/lib/resolver/resolver.cc +0 -42
- data/src/core/lib/resolver/resolver.h +5 -12
- data/src/core/lib/resolver/resolver_factory.h +6 -4
- data/src/core/lib/resolver/resolver_registry.cc +3 -10
- data/src/core/lib/resolver/resolver_registry.h +12 -2
- data/src/core/lib/resolver/server_address.cc +19 -15
- data/src/core/lib/resolver/server_address.h +11 -8
- data/src/core/lib/resource_quota/api.cc +1 -1
- data/src/core/lib/resource_quota/arena.cc +21 -1
- data/src/core/lib/resource_quota/arena.h +24 -2
- data/src/core/lib/resource_quota/memory_quota.cc +171 -73
- data/src/core/lib/resource_quota/memory_quota.h +109 -42
- data/src/core/lib/resource_quota/periodic_update.cc +79 -0
- data/src/core/lib/resource_quota/periodic_update.h +71 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -1
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +13 -2
- data/src/core/lib/security/authorization/matchers.cc +20 -9
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +4 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
- data/src/core/lib/security/credentials/alts/alts_credentials.h +8 -4
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -9
- data/src/core/lib/security/credentials/composite/composite_credentials.h +17 -5
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +26 -20
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +45 -20
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +53 -29
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +15 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +23 -9
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +10 -17
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -5
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +55 -35
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +7 -3
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +7 -3
- data/src/core/lib/security/credentials/jwt/json_token.cc +17 -5
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +12 -10
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +37 -14
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +7 -7
- data/src/core/lib/security/credentials/local/local_credentials.h +9 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +41 -29
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +7 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +18 -21
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +15 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +15 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +19 -26
- data/src/core/lib/security/credentials/tls/tls_credentials.h +7 -4
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -31
- data/src/core/lib/security/credentials/xds/xds_credentials.h +16 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +30 -18
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +42 -38
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +13 -4
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +21 -5
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +34 -13
- data/src/core/lib/security/security_connector/local/local_security_connector.h +7 -3
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +23 -9
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +21 -8
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +25 -17
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -7
- data/src/core/lib/security/transport/auth_filters.h +8 -1
- data/src/core/lib/security/transport/client_auth_filter.cc +19 -11
- data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +70 -49
- data/src/core/lib/security/transport/security_handshaker.h +6 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config.h +11 -0
- data/src/core/lib/service_config/service_config_call_data.h +2 -1
- data/src/core/lib/service_config/service_config_impl.cc +98 -97
- data/src/core/lib/service_config/service_config_impl.h +12 -16
- data/src/core/lib/service_config/service_config_parser.cc +26 -29
- data/src/core/lib/service_config/service_config_parser.h +10 -22
- data/src/core/lib/slice/percent_encoding.cc +4 -13
- data/src/core/lib/slice/slice.cc +10 -4
- data/src/core/lib/slice/slice_buffer.cc +30 -1
- data/src/core/lib/slice/slice_buffer.h +37 -6
- data/src/core/lib/slice/slice_string_helpers.cc +0 -20
- data/src/core/lib/slice/slice_string_helpers.h +0 -4
- data/src/core/lib/surface/call.cc +61 -117
- data/src/core/lib/surface/call.h +5 -1
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +3 -1
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +15 -16
- data/src/core/lib/surface/completion_queue.h +2 -4
- data/src/core/lib/surface/init.cc +2 -7
- data/src/core/lib/surface/lame_client.cc +3 -4
- data/src/core/lib/surface/lame_client.h +2 -2
- data/src/core/lib/surface/server.cc +21 -20
- data/src/core/lib/surface/server.h +11 -8
- data/src/core/lib/surface/validate_metadata.cc +5 -15
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/connectivity_state.cc +0 -1
- data/src/core/lib/transport/connectivity_state.h +1 -1
- data/src/core/lib/transport/error_utils.cc +9 -39
- data/src/core/lib/transport/handshaker.cc +10 -12
- data/src/core/lib/transport/handshaker.h +4 -5
- data/src/core/lib/transport/handshaker_factory.h +2 -3
- data/src/core/lib/transport/handshaker_registry.cc +2 -1
- data/src/core/lib/transport/handshaker_registry.h +2 -4
- data/src/core/lib/transport/http_connect_handshaker.cc +20 -20
- data/src/core/lib/transport/metadata_batch.cc +5 -0
- data/src/core/lib/transport/metadata_batch.h +52 -7
- data/src/core/lib/transport/parsed_metadata.h +0 -1
- data/src/core/lib/transport/tcp_connect_handshaker.cc +14 -20
- data/src/core/lib/transport/transport.cc +0 -3
- data/src/core/lib/transport/transport.h +20 -21
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +1 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -9
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +15 -8
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +66 -31
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/local_transport_security.cc +9 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
- data/src/core/tsi/ssl_transport_security.cc +48 -24
- data/src/core/tsi/transport_security.cc +18 -6
- data/src/core/tsi/transport_security.h +2 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/core/tsi/transport_security_interface.h +17 -5
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +51 -18
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/ext/grpc/rb_loader.c +6 -2
- data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- 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 +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- 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/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- 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 +8 -3
- 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_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -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 +857 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- 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 +572 -0
- 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 +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- 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 +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -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_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- 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.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- 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 +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- 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/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 +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
- data/third_party/upb/upb/arena.c +277 -0
- data/third_party/upb/upb/arena.h +225 -0
- data/third_party/upb/upb/array.c +114 -0
- data/third_party/upb/upb/array.h +83 -0
- data/third_party/upb/upb/collections.h +36 -0
- data/third_party/upb/upb/decode.c +161 -65
- data/third_party/upb/upb/decode.h +1 -0
- data/third_party/upb/upb/decode_fast.c +1 -1
- data/third_party/upb/upb/def.c +10 -2
- data/third_party/upb/upb/def.h +8 -1
- data/third_party/upb/upb/def.hpp +7 -4
- data/third_party/upb/upb/encode.c +29 -20
- data/third_party/upb/upb/encode.h +16 -6
- data/third_party/upb/upb/extension_registry.c +93 -0
- data/third_party/upb/upb/extension_registry.h +84 -0
- data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
- data/third_party/upb/upb/internal/table.h +385 -0
- data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
- data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
- data/third_party/upb/upb/json_decode.c +1512 -0
- data/third_party/upb/upb/json_decode.h +47 -0
- data/third_party/upb/upb/json_encode.c +7 -3
- data/third_party/upb/upb/json_encode.h +6 -3
- data/third_party/upb/upb/map.c +108 -0
- data/third_party/upb/upb/map.h +117 -0
- data/third_party/upb/upb/message_value.h +66 -0
- data/third_party/upb/upb/mini_table.c +1147 -0
- data/third_party/upb/upb/mini_table.h +189 -0
- data/third_party/upb/upb/mini_table.hpp +112 -0
- data/third_party/upb/upb/msg.c +2 -62
- data/third_party/upb/upb/msg.h +2 -45
- data/third_party/upb/upb/msg_internal.h +28 -22
- data/third_party/upb/upb/port_def.inc +2 -1
- data/third_party/upb/upb/port_undef.inc +1 -0
- data/third_party/upb/upb/reflection.c +2 -159
- data/third_party/upb/upb/reflection.h +2 -112
- data/third_party/upb/upb/status.c +86 -0
- data/third_party/upb/upb/status.h +66 -0
- data/third_party/upb/upb/table.c +2 -2
- data/third_party/upb/upb/table_internal.h +3 -352
- data/third_party/upb/upb/text_encode.c +3 -2
- data/third_party/upb/upb/upb.c +4 -290
- data/third_party/upb/upb/upb.h +7 -196
- metadata +113 -37
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
- data/src/core/lib/event_engine/event_engine.cc +0 -62
- data/src/core/lib/event_engine/iomgr_engine.cc +0 -206
- data/src/core/lib/iomgr/error_internal.h +0 -66
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
- data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
- data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
- data/src/core/lib/iomgr/executor/threadpool.h +0 -150
- data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
- data/src/core/lib/promise/detail/switch.h +0 -1455
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -37,8 +37,10 @@
|
|
37
37
|
#include "absl/strings/str_format.h"
|
38
38
|
#include "absl/strings/string_view.h"
|
39
39
|
#include "absl/types/optional.h"
|
40
|
+
#include "absl/types/variant.h"
|
40
41
|
|
41
42
|
#include <grpc/impl/codegen/connectivity_state.h>
|
43
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
42
44
|
#include <grpc/slice_buffer.h>
|
43
45
|
#include <grpc/status.h>
|
44
46
|
#include <grpc/support/alloc.h>
|
@@ -57,15 +59,13 @@
|
|
57
59
|
#include "src/core/ext/transport/chttp2/transport/stream_map.h"
|
58
60
|
#include "src/core/ext/transport/chttp2/transport/varint.h"
|
59
61
|
#include "src/core/lib/channel/channel_args.h"
|
60
|
-
#include "src/core/lib/channel/channel_stack_builder.h"
|
61
62
|
#include "src/core/lib/debug/stats.h"
|
62
63
|
#include "src/core/lib/gpr/useful.h"
|
63
64
|
#include "src/core/lib/gprpp/bitset.h"
|
64
65
|
#include "src/core/lib/gprpp/debug_location.h"
|
65
66
|
#include "src/core/lib/gprpp/global_config_env.h"
|
66
|
-
#include "src/core/lib/gprpp/manual_constructor.h"
|
67
|
-
#include "src/core/lib/gprpp/orphanable.h"
|
68
67
|
#include "src/core/lib/gprpp/ref_counted.h"
|
68
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
69
69
|
#include "src/core/lib/gprpp/time.h"
|
70
70
|
#include "src/core/lib/http/parser.h"
|
71
71
|
#include "src/core/lib/iomgr/combiner.h"
|
@@ -75,16 +75,16 @@
|
|
75
75
|
#include "src/core/lib/iomgr/pollset.h"
|
76
76
|
#include "src/core/lib/iomgr/timer.h"
|
77
77
|
#include "src/core/lib/profiling/timers.h"
|
78
|
-
#include "src/core/lib/
|
78
|
+
#include "src/core/lib/promise/poll.h"
|
79
79
|
#include "src/core/lib/resource_quota/arena.h"
|
80
80
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
81
81
|
#include "src/core/lib/resource_quota/resource_quota.h"
|
82
82
|
#include "src/core/lib/resource_quota/trace.h"
|
83
83
|
#include "src/core/lib/slice/slice.h"
|
84
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
84
85
|
#include "src/core/lib/slice/slice_internal.h"
|
85
86
|
#include "src/core/lib/slice/slice_refcount.h"
|
86
87
|
#include "src/core/lib/transport/bdp_estimator.h"
|
87
|
-
#include "src/core/lib/transport/byte_stream.h"
|
88
88
|
#include "src/core/lib/transport/connectivity_state.h"
|
89
89
|
#include "src/core/lib/transport/error_utils.h"
|
90
90
|
#include "src/core/lib/transport/http2_errors.h"
|
@@ -94,10 +94,10 @@
|
|
94
94
|
#include "src/core/lib/transport/transport_impl.h"
|
95
95
|
|
96
96
|
GPR_GLOBAL_CONFIG_DEFINE_BOOL(
|
97
|
-
|
98
|
-
"If set,
|
99
|
-
"
|
100
|
-
"
|
97
|
+
grpc_experimental_enable_peer_state_based_framing, false,
|
98
|
+
"If set, the max sizes of frames sent to lower layers is controlled based "
|
99
|
+
"on the peer's memory pressure which is reflected in its max http2 frame "
|
100
|
+
"size.");
|
101
101
|
|
102
102
|
#define DEFAULT_CONNECTION_WINDOW_TARGET (1024 * 1024)
|
103
103
|
#define MAX_WINDOW 0x7fffffffu
|
@@ -151,8 +151,6 @@ static void read_action(void* t, grpc_error_handle error);
|
|
151
151
|
static void read_action_locked(void* t, grpc_error_handle error);
|
152
152
|
static void continue_read_action_locked(grpc_chttp2_transport* t);
|
153
153
|
|
154
|
-
static void complete_fetch(void* gs, grpc_error_handle error);
|
155
|
-
static void complete_fetch_locked(void* gs, grpc_error_handle error);
|
156
154
|
// Set a transport level setting, and push it to our peer
|
157
155
|
static void queue_setting_update(grpc_chttp2_transport* t,
|
158
156
|
grpc_chttp2_setting_id id, uint32_t value);
|
@@ -202,8 +200,6 @@ static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error);
|
|
202
200
|
static void keepalive_watchdog_fired(void* arg, grpc_error_handle error);
|
203
201
|
static void keepalive_watchdog_fired_locked(void* arg, grpc_error_handle error);
|
204
202
|
|
205
|
-
static void reset_byte_stream(void* arg, grpc_error_handle error);
|
206
|
-
|
207
203
|
namespace grpc_core {
|
208
204
|
|
209
205
|
namespace {
|
@@ -280,8 +276,6 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
|
|
280
276
|
write_cb_pool = next;
|
281
277
|
}
|
282
278
|
|
283
|
-
flow_control.Destroy();
|
284
|
-
|
285
279
|
GRPC_ERROR_UNREF(closed_with_error);
|
286
280
|
gpr_free(ping_acks);
|
287
281
|
if (grpc_core::test_only_destruct_callback != nullptr) {
|
@@ -291,155 +285,128 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
|
|
291
285
|
|
292
286
|
static const grpc_transport_vtable* get_vtable(void);
|
293
287
|
|
294
|
-
|
295
|
-
|
296
|
-
const grpc_channel_args* channel_args,
|
288
|
+
static void read_channel_args(grpc_chttp2_transport* t,
|
289
|
+
const grpc_core::ChannelArgs& channel_args,
|
297
290
|
bool is_client) {
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER)) {
|
306
|
-
const grpc_integer_options options = {-1, 0, INT_MAX};
|
307
|
-
const int value =
|
308
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
309
|
-
if (value >= 0) {
|
310
|
-
if ((t->next_stream_id & 1) != (value & 1)) {
|
311
|
-
gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
|
312
|
-
GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
|
313
|
-
is_client ? "client" : "server");
|
314
|
-
} else {
|
315
|
-
t->next_stream_id = static_cast<uint32_t>(value);
|
316
|
-
}
|
317
|
-
}
|
318
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
319
|
-
GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER)) {
|
320
|
-
const grpc_integer_options options = {-1, 0, INT_MAX};
|
321
|
-
const int value =
|
322
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
323
|
-
if (value >= 0) {
|
324
|
-
t->hpack_compressor.SetMaxUsableSize(value);
|
325
|
-
}
|
326
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
327
|
-
GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)) {
|
328
|
-
t->ping_policy.max_pings_without_data = grpc_channel_arg_get_integer(
|
329
|
-
&channel_args->args[i],
|
330
|
-
{g_default_max_pings_without_data, 0, INT_MAX});
|
331
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
332
|
-
GRPC_ARG_HTTP2_MAX_PING_STRIKES)) {
|
333
|
-
t->ping_policy.max_ping_strikes = grpc_channel_arg_get_integer(
|
334
|
-
&channel_args->args[i], {g_default_max_ping_strikes, 0, INT_MAX});
|
335
|
-
} else if (0 ==
|
336
|
-
strcmp(channel_args->args[i].key,
|
337
|
-
GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)) {
|
338
|
-
t->ping_policy.min_recv_ping_interval_without_data =
|
339
|
-
grpc_core::Duration::Milliseconds(grpc_channel_arg_get_integer(
|
340
|
-
&channel_args->args[i],
|
341
|
-
grpc_integer_options{
|
342
|
-
g_default_min_recv_ping_interval_without_data_ms, 0,
|
343
|
-
INT_MAX}));
|
344
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
345
|
-
GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)) {
|
346
|
-
t->write_buffer_size = static_cast<uint32_t>(grpc_channel_arg_get_integer(
|
347
|
-
&channel_args->args[i], {0, 0, MAX_WRITE_BUFFER_SIZE}));
|
348
|
-
} else if (0 ==
|
349
|
-
strcmp(channel_args->args[i].key, GRPC_ARG_HTTP2_BDP_PROBE)) {
|
350
|
-
enable_bdp = grpc_channel_arg_get_bool(&channel_args->args[i], true);
|
351
|
-
} else if (0 ==
|
352
|
-
strcmp(channel_args->args[i].key, GRPC_ARG_KEEPALIVE_TIME_MS)) {
|
353
|
-
const int value = grpc_channel_arg_get_integer(
|
354
|
-
&channel_args->args[i],
|
355
|
-
grpc_integer_options{t->is_client
|
356
|
-
? g_default_client_keepalive_time_ms
|
357
|
-
: g_default_server_keepalive_time_ms,
|
358
|
-
1, INT_MAX});
|
359
|
-
t->keepalive_time = value == INT_MAX
|
360
|
-
? grpc_core::Duration::Infinity()
|
361
|
-
: grpc_core::Duration::Milliseconds(value);
|
362
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
363
|
-
GRPC_ARG_KEEPALIVE_TIMEOUT_MS)) {
|
364
|
-
const int value = grpc_channel_arg_get_integer(
|
365
|
-
&channel_args->args[i],
|
366
|
-
grpc_integer_options{t->is_client
|
367
|
-
? g_default_client_keepalive_timeout_ms
|
368
|
-
: g_default_server_keepalive_timeout_ms,
|
369
|
-
0, INT_MAX});
|
370
|
-
t->keepalive_timeout = value == INT_MAX
|
371
|
-
? grpc_core::Duration::Infinity()
|
372
|
-
: grpc_core::Duration::Milliseconds(value);
|
373
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
374
|
-
GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)) {
|
375
|
-
t->keepalive_permit_without_calls = static_cast<uint32_t>(
|
376
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], {0, 0, 1}));
|
377
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
378
|
-
GRPC_ARG_OPTIMIZATION_TARGET)) {
|
379
|
-
gpr_log(GPR_INFO, "GRPC_ARG_OPTIMIZATION_TARGET is deprecated");
|
380
|
-
} else if (0 ==
|
381
|
-
strcmp(channel_args->args[i].key, GRPC_ARG_ENABLE_CHANNELZ)) {
|
382
|
-
channelz_enabled = grpc_channel_arg_get_bool(
|
383
|
-
&channel_args->args[i], GRPC_ENABLE_CHANNELZ_DEFAULT);
|
291
|
+
const int initial_sequence_number =
|
292
|
+
channel_args.GetInt(GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER).value_or(-1);
|
293
|
+
if (initial_sequence_number > 0) {
|
294
|
+
if ((t->next_stream_id & 1) != (initial_sequence_number & 1)) {
|
295
|
+
gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
|
296
|
+
GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
|
297
|
+
is_client ? "client" : "server");
|
384
298
|
} else {
|
385
|
-
|
386
|
-
const char* channel_arg_name;
|
387
|
-
grpc_chttp2_setting_id setting_id;
|
388
|
-
grpc_integer_options integer_options;
|
389
|
-
bool availability[2] /* server, client */;
|
390
|
-
} settings_map[] = {{GRPC_ARG_MAX_CONCURRENT_STREAMS,
|
391
|
-
GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
|
392
|
-
{-1, 0, INT32_MAX},
|
393
|
-
{true, false}},
|
394
|
-
{GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER,
|
395
|
-
GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
|
396
|
-
{-1, 0, INT32_MAX},
|
397
|
-
{true, true}},
|
398
|
-
{GRPC_ARG_MAX_METADATA_SIZE,
|
399
|
-
GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
|
400
|
-
{-1, 0, INT32_MAX},
|
401
|
-
{true, true}},
|
402
|
-
{GRPC_ARG_HTTP2_MAX_FRAME_SIZE,
|
403
|
-
GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
|
404
|
-
{-1, 16384, 16777215},
|
405
|
-
{true, true}},
|
406
|
-
{GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY,
|
407
|
-
GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA,
|
408
|
-
{1, 0, 1},
|
409
|
-
{true, true}},
|
410
|
-
{GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES,
|
411
|
-
GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
|
412
|
-
{-1, 5, INT32_MAX},
|
413
|
-
{true, true}}};
|
414
|
-
for (j = 0; j < static_cast<int> GPR_ARRAY_SIZE(settings_map); j++) {
|
415
|
-
if (0 == strcmp(channel_args->args[i].key,
|
416
|
-
settings_map[j].channel_arg_name)) {
|
417
|
-
if (!settings_map[j].availability[is_client]) {
|
418
|
-
gpr_log(GPR_DEBUG, "%s is not available on %s",
|
419
|
-
settings_map[j].channel_arg_name,
|
420
|
-
is_client ? "clients" : "servers");
|
421
|
-
} else {
|
422
|
-
int value = grpc_channel_arg_get_integer(
|
423
|
-
&channel_args->args[i], settings_map[j].integer_options);
|
424
|
-
if (value >= 0) {
|
425
|
-
queue_setting_update(t, settings_map[j].setting_id,
|
426
|
-
static_cast<uint32_t>(value));
|
427
|
-
}
|
428
|
-
}
|
429
|
-
break;
|
430
|
-
}
|
431
|
-
}
|
299
|
+
t->next_stream_id = static_cast<uint32_t>(initial_sequence_number);
|
432
300
|
}
|
433
301
|
}
|
434
|
-
|
302
|
+
|
303
|
+
const int max_hpack_table_size =
|
304
|
+
channel_args.GetInt(GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER).value_or(-1);
|
305
|
+
if (max_hpack_table_size >= 0) {
|
306
|
+
t->hpack_compressor.SetMaxUsableSize(max_hpack_table_size);
|
307
|
+
}
|
308
|
+
|
309
|
+
t->ping_policy.max_pings_without_data =
|
310
|
+
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)
|
311
|
+
.value_or(g_default_max_pings_without_data));
|
312
|
+
t->ping_policy.max_ping_strikes =
|
313
|
+
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PING_STRIKES)
|
314
|
+
.value_or(g_default_max_ping_strikes));
|
315
|
+
t->ping_policy.min_recv_ping_interval_without_data =
|
316
|
+
std::max(grpc_core::Duration::Zero(),
|
317
|
+
channel_args
|
318
|
+
.GetDurationFromIntMillis(
|
319
|
+
GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)
|
320
|
+
.value_or(grpc_core::Duration::Milliseconds(
|
321
|
+
g_default_min_recv_ping_interval_without_data_ms)));
|
322
|
+
t->write_buffer_size =
|
323
|
+
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)
|
324
|
+
.value_or(grpc_core::chttp2::kDefaultWindow));
|
325
|
+
t->keepalive_time =
|
326
|
+
std::max(grpc_core::Duration::Milliseconds(1),
|
327
|
+
channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIME_MS)
|
328
|
+
.value_or(grpc_core::Duration::Milliseconds(
|
329
|
+
t->is_client ? g_default_client_keepalive_time_ms
|
330
|
+
: g_default_server_keepalive_time_ms)));
|
331
|
+
t->keepalive_timeout = std::max(
|
332
|
+
grpc_core::Duration::Zero(),
|
333
|
+
channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIMEOUT_MS)
|
334
|
+
.value_or(grpc_core::Duration::Milliseconds(
|
335
|
+
t->is_client ? g_default_client_keepalive_timeout_ms
|
336
|
+
: g_default_server_keepalive_timeout_ms)));
|
337
|
+
t->keepalive_permit_without_calls =
|
338
|
+
channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
|
339
|
+
.value_or(false);
|
340
|
+
|
341
|
+
if (channel_args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
|
342
|
+
.value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
|
435
343
|
t->channelz_socket =
|
436
344
|
grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>(
|
437
345
|
std::string(grpc_endpoint_get_local_address(t->ep)), t->peer_string,
|
438
346
|
absl::StrFormat("%s %s", get_vtable()->name, t->peer_string),
|
439
|
-
|
440
|
-
|
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
|
+
}
|
441
409
|
}
|
442
|
-
return enable_bdp;
|
443
410
|
}
|
444
411
|
|
445
412
|
static void init_transport_keepalive_settings(grpc_chttp2_transport* t) {
|
@@ -493,13 +460,14 @@ static void init_keepalive_pings_if_enabled(grpc_chttp2_transport* t) {
|
|
493
460
|
}
|
494
461
|
|
495
462
|
grpc_chttp2_transport::grpc_chttp2_transport(
|
496
|
-
const
|
463
|
+
const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
|
464
|
+
bool is_client)
|
497
465
|
: refs(1, GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_refcount)
|
498
466
|
? "chttp2_refcount"
|
499
467
|
: nullptr),
|
500
468
|
ep(ep),
|
501
469
|
peer_string(grpc_endpoint_get_peer(ep)),
|
502
|
-
memory_owner(grpc_core::
|
470
|
+
memory_owner(channel_args.GetObject<grpc_core::ResourceQuota>()
|
503
471
|
->memory_quota()
|
504
472
|
->CreateMemoryOwner(absl::StrCat(
|
505
473
|
grpc_endpoint_get_peer(ep), ":client_transport"))),
|
@@ -510,6 +478,10 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
510
478
|
GRPC_CHANNEL_READY),
|
511
479
|
is_client(is_client),
|
512
480
|
next_stream_id(is_client ? 1 : 2),
|
481
|
+
flow_control(
|
482
|
+
peer_string.c_str(),
|
483
|
+
channel_args.GetBool(GRPC_ARG_HTTP2_BDP_PROBE).value_or(true),
|
484
|
+
&memory_owner),
|
513
485
|
deframe_state(is_client ? GRPC_DTS_FH_0 : GRPC_DTS_CLIENT_PREFIX_0) {
|
514
486
|
GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
|
515
487
|
GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
|
@@ -551,20 +523,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
551
523
|
configure_transport_ping_policy(this);
|
552
524
|
init_transport_keepalive_settings(this);
|
553
525
|
|
554
|
-
|
555
|
-
if (channel_args) {
|
556
|
-
enable_bdp = read_channel_args(this, channel_args, is_client);
|
557
|
-
}
|
558
|
-
|
559
|
-
static const bool kEnableFlowControl =
|
560
|
-
!GPR_GLOBAL_CONFIG_GET(grpc_experimental_disable_flow_control);
|
561
|
-
if (kEnableFlowControl) {
|
562
|
-
flow_control.Init<grpc_core::chttp2::TransportFlowControl>(this,
|
563
|
-
enable_bdp);
|
564
|
-
} else {
|
565
|
-
flow_control.Init<grpc_core::chttp2::TransportFlowControlDisabled>(this);
|
566
|
-
enable_bdp = false;
|
567
|
-
}
|
526
|
+
read_channel_args(this, channel_args, is_client);
|
568
527
|
|
569
528
|
// No pings allowed before receiving a header or data frame.
|
570
529
|
ping_state.pings_before_data_required = 0;
|
@@ -576,9 +535,9 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
576
535
|
|
577
536
|
init_keepalive_pings_if_enabled(this);
|
578
537
|
|
579
|
-
if (
|
538
|
+
if (flow_control.bdp_probe()) {
|
580
539
|
bdp_ping_blocked = true;
|
581
|
-
grpc_chttp2_act_on_flowctl_action(flow_control
|
540
|
+
grpc_chttp2_act_on_flowctl_action(flow_control.PeriodicUpdate(), this,
|
582
541
|
nullptr);
|
583
542
|
}
|
584
543
|
|
@@ -611,13 +570,13 @@ static void close_transport_locked(grpc_chttp2_transport* t,
|
|
611
570
|
grpc_error_handle error) {
|
612
571
|
end_all_the_calls(t, GRPC_ERROR_REF(error));
|
613
572
|
cancel_pings(t, GRPC_ERROR_REF(error));
|
614
|
-
if (t->closed_with_error
|
573
|
+
if (GRPC_ERROR_IS_NONE(t->closed_with_error)) {
|
615
574
|
if (!grpc_error_has_clear_grpc_status(error)) {
|
616
575
|
error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
|
617
576
|
GRPC_STATUS_UNAVAILABLE);
|
618
577
|
}
|
619
578
|
if (t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE) {
|
620
|
-
if (t->close_transport_on_writes_finished
|
579
|
+
if (GRPC_ERROR_IS_NONE(t->close_transport_on_writes_finished)) {
|
621
580
|
t->close_transport_on_writes_finished =
|
622
581
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
623
582
|
"Delayed close due to in-progress write");
|
@@ -626,7 +585,7 @@ static void close_transport_locked(grpc_chttp2_transport* t,
|
|
626
585
|
grpc_error_add_child(t->close_transport_on_writes_finished, error);
|
627
586
|
return;
|
628
587
|
}
|
629
|
-
GPR_ASSERT(error
|
588
|
+
GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
|
630
589
|
t->closed_with_error = GRPC_ERROR_REF(error);
|
631
590
|
connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, absl::Status(),
|
632
591
|
"close_transport");
|
@@ -703,29 +662,23 @@ grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
|
|
703
662
|
refcount(refcount),
|
704
663
|
reffer(this),
|
705
664
|
initial_metadata_buffer(arena),
|
706
|
-
trailing_metadata_buffer(arena)
|
665
|
+
trailing_metadata_buffer(arena),
|
666
|
+
flow_control(&t->flow_control) {
|
707
667
|
if (server_data) {
|
708
668
|
id = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(server_data));
|
709
669
|
*t->accepting_stream = this;
|
710
670
|
grpc_chttp2_stream_map_add(&t->stream_map, id, this);
|
711
671
|
post_destructive_reclaimer(t);
|
712
672
|
}
|
713
|
-
if (t->flow_control->flow_control_enabled()) {
|
714
|
-
flow_control.Init<grpc_core::chttp2::StreamFlowControl>(
|
715
|
-
static_cast<grpc_core::chttp2::TransportFlowControl*>(
|
716
|
-
t->flow_control.get()),
|
717
|
-
this);
|
718
|
-
} else {
|
719
|
-
flow_control.Init<grpc_core::chttp2::StreamFlowControlDisabled>();
|
720
|
-
}
|
721
673
|
|
722
674
|
grpc_slice_buffer_init(&frame_storage);
|
723
|
-
grpc_slice_buffer_init(&unprocessed_incoming_frames_buffer);
|
724
675
|
grpc_slice_buffer_init(&flow_controlled_buffer);
|
725
|
-
GRPC_CLOSURE_INIT(&reset_byte_stream, ::reset_byte_stream, this, nullptr);
|
726
676
|
}
|
727
677
|
|
728
678
|
grpc_chttp2_stream::~grpc_chttp2_stream() {
|
679
|
+
grpc_chttp2_list_remove_stalled_by_stream(t, this);
|
680
|
+
grpc_chttp2_list_remove_stalled_by_transport(t, this);
|
681
|
+
|
729
682
|
if (t->channelz_socket != nullptr) {
|
730
683
|
if ((t->is_client && eos_received) || (!t->is_client && eos_sent)) {
|
731
684
|
t->channelz_socket->RecordStreamSucceeded();
|
@@ -739,7 +692,6 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
|
|
739
692
|
GPR_ASSERT(grpc_chttp2_stream_map_find(&t->stream_map, id) == nullptr);
|
740
693
|
}
|
741
694
|
|
742
|
-
grpc_slice_buffer_destroy_internal(&unprocessed_incoming_frames_buffer);
|
743
695
|
grpc_slice_buffer_destroy_internal(&frame_storage);
|
744
696
|
|
745
697
|
for (int i = 0; i < STREAM_LIST_COUNT; i++) {
|
@@ -751,7 +703,6 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
|
|
751
703
|
}
|
752
704
|
|
753
705
|
GPR_ASSERT(send_initial_metadata_finished == nullptr);
|
754
|
-
GPR_ASSERT(fetching_send_message == nullptr);
|
755
706
|
GPR_ASSERT(send_trailing_metadata_finished == nullptr);
|
756
707
|
GPR_ASSERT(recv_initial_metadata_ready == nullptr);
|
757
708
|
GPR_ASSERT(recv_message_ready == nullptr);
|
@@ -759,8 +710,6 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
|
|
759
710
|
grpc_slice_buffer_destroy_internal(&flow_controlled_buffer);
|
760
711
|
GRPC_ERROR_UNREF(read_closed_error);
|
761
712
|
GRPC_ERROR_UNREF(write_closed_error);
|
762
|
-
GRPC_ERROR_UNREF(byte_stream_error);
|
763
|
-
flow_control.Destroy();
|
764
713
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "stream");
|
765
714
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, destroy_stream_arg, GRPC_ERROR_NONE);
|
766
715
|
}
|
@@ -837,7 +786,7 @@ static void set_write_state(grpc_chttp2_transport* t,
|
|
837
786
|
// from peer while we had some pending writes)
|
838
787
|
if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
|
839
788
|
grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &t->run_after_write);
|
840
|
-
if (t->close_transport_on_writes_finished
|
789
|
+
if (!GRPC_ERROR_IS_NONE(t->close_transport_on_writes_finished)) {
|
841
790
|
grpc_error_handle err = t->close_transport_on_writes_finished;
|
842
791
|
t->close_transport_on_writes_finished = GRPC_ERROR_NONE;
|
843
792
|
close_transport_locked(t, err);
|
@@ -959,7 +908,7 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
|
|
959
908
|
|
960
909
|
void grpc_chttp2_mark_stream_writable(grpc_chttp2_transport* t,
|
961
910
|
grpc_chttp2_stream* s) {
|
962
|
-
if (t->closed_with_error
|
911
|
+
if (GRPC_ERROR_IS_NONE(t->closed_with_error) &&
|
963
912
|
grpc_chttp2_list_add_writable_stream(t, s)) {
|
964
913
|
GRPC_CHTTP2_STREAM_REF(s, "chttp2_writing:become");
|
965
914
|
}
|
@@ -979,7 +928,7 @@ static void write_action_begin_locked(void* gt,
|
|
979
928
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
|
980
929
|
GPR_ASSERT(t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE);
|
981
930
|
grpc_chttp2_begin_write_result r;
|
982
|
-
if (t->closed_with_error
|
931
|
+
if (!GRPC_ERROR_IS_NONE(t->closed_with_error)) {
|
983
932
|
r.writing = false;
|
984
933
|
} else {
|
985
934
|
r = grpc_chttp2_begin_write(t);
|
@@ -1015,14 +964,26 @@ static void write_action_begin_locked(void* gt,
|
|
1015
964
|
|
1016
965
|
static void write_action(void* gt, grpc_error_handle /*error*/) {
|
1017
966
|
GPR_TIMER_SCOPE("write_action", 0);
|
967
|
+
static bool kEnablePeerStateBasedFraming =
|
968
|
+
GPR_GLOBAL_CONFIG_GET(grpc_experimental_enable_peer_state_based_framing);
|
1018
969
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
|
1019
970
|
void* cl = t->cl;
|
1020
971
|
t->cl = nullptr;
|
972
|
+
// If grpc_experimental_enable_peer_state_based_framing is set to true,
|
973
|
+
// choose max_frame_size as 2 * max http2 frame size of peer. If peer is under
|
974
|
+
// high memory pressure, then it would advertise a smaller max http2 frame
|
975
|
+
// size. With this logic, the sender would automatically reduce the sending
|
976
|
+
// frame size as well.
|
977
|
+
int max_frame_size =
|
978
|
+
kEnablePeerStateBasedFraming
|
979
|
+
? 2 * t->settings[GRPC_PEER_SETTINGS]
|
980
|
+
[GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]
|
981
|
+
: INT_MAX;
|
1021
982
|
grpc_endpoint_write(
|
1022
983
|
t->ep, &t->outbuf,
|
1023
984
|
GRPC_CLOSURE_INIT(&t->write_action_end_locked, write_action_end, t,
|
1024
985
|
grpc_schedule_on_exec_ctx),
|
1025
|
-
cl,
|
986
|
+
cl, max_frame_size);
|
1026
987
|
}
|
1027
988
|
|
1028
989
|
static void write_action_end(void* tp, grpc_error_handle error) {
|
@@ -1039,7 +1000,7 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
|
|
1039
1000
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
1040
1001
|
|
1041
1002
|
bool closed = false;
|
1042
|
-
if (error
|
1003
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
1043
1004
|
close_transport_locked(t, GRPC_ERROR_REF(error));
|
1044
1005
|
closed = true;
|
1045
1006
|
}
|
@@ -1118,7 +1079,7 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
|
1118
1079
|
uint32_t last_stream_id,
|
1119
1080
|
absl::string_view goaway_text) {
|
1120
1081
|
// Discard the error from a previous goaway frame (if any)
|
1121
|
-
if (t->goaway_error
|
1082
|
+
if (!GRPC_ERROR_IS_NONE(t->goaway_error)) {
|
1122
1083
|
GRPC_ERROR_UNREF(t->goaway_error);
|
1123
1084
|
}
|
1124
1085
|
t->goaway_error = grpc_error_set_str(
|
@@ -1167,14 +1128,14 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
|
1167
1128
|
gpr_log(GPR_ERROR,
|
1168
1129
|
"Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
|
1169
1130
|
"data equal to \"too_many_pings\"");
|
1170
|
-
constexpr
|
1171
|
-
INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER
|
1172
|
-
|
1173
|
-
t->keepalive_time >
|
1174
|
-
?
|
1175
|
-
: t->keepalive_time * KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
|
1131
|
+
constexpr int max_keepalive_time_millis =
|
1132
|
+
INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
|
1133
|
+
int throttled_keepalive_time =
|
1134
|
+
t->keepalive_time.millis() > max_keepalive_time_millis
|
1135
|
+
? INT_MAX
|
1136
|
+
: t->keepalive_time.millis() * KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
|
1176
1137
|
status.SetPayload(grpc_core::kKeepaliveThrottlingKey,
|
1177
|
-
absl::Cord(std::to_string(
|
1138
|
+
absl::Cord(std::to_string(throttled_keepalive_time)));
|
1178
1139
|
}
|
1179
1140
|
// lie: use transient failure from the transport to indicate goaway has been
|
1180
1141
|
// received.
|
@@ -1188,7 +1149,7 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
|
1188
1149
|
grpc_chttp2_stream* s;
|
1189
1150
|
// maybe cancel out streams that haven't yet started if we have received a
|
1190
1151
|
// GOAWAY
|
1191
|
-
if (t->goaway_error
|
1152
|
+
if (!GRPC_ERROR_IS_NONE(t->goaway_error)) {
|
1192
1153
|
cancel_unstarted_streams(t, GRPC_ERROR_REF(t->goaway_error));
|
1193
1154
|
return;
|
1194
1155
|
}
|
@@ -1252,6 +1213,12 @@ static grpc_closure* add_closure_barrier(grpc_closure* closure) {
|
|
1252
1213
|
static void null_then_sched_closure(grpc_closure** closure) {
|
1253
1214
|
grpc_closure* c = *closure;
|
1254
1215
|
*closure = nullptr;
|
1216
|
+
// null_then_schedule_closure might be run during a start_batch which might
|
1217
|
+
// subsequently examine the batch for more operations contained within.
|
1218
|
+
// However, the closure run might make it back to the call object, push a
|
1219
|
+
// completion, have the application see it, and make a new operation on the
|
1220
|
+
// call which recycles the batch BEFORE the call to start_batch completes,
|
1221
|
+
// forcing a race.
|
1255
1222
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, c, GRPC_ERROR_NONE);
|
1256
1223
|
}
|
1257
1224
|
|
@@ -1280,39 +1247,25 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
|
|
1280
1247
|
desc, grpc_error_std_string(error).c_str(),
|
1281
1248
|
write_state_name(t->write_state));
|
1282
1249
|
}
|
1283
|
-
if (error
|
1284
|
-
#ifdef GRPC_ERROR_IS_ABSEIL_STATUS
|
1250
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
1285
1251
|
grpc_error_handle cl_err =
|
1286
1252
|
grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
|
1287
|
-
|
1288
|
-
grpc_error_handle cl_err =
|
1289
|
-
reinterpret_cast<grpc_error_handle>(closure->error_data.error);
|
1290
|
-
#endif
|
1291
|
-
if (cl_err == GRPC_ERROR_NONE) {
|
1253
|
+
if (GRPC_ERROR_IS_NONE(cl_err)) {
|
1292
1254
|
cl_err = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1293
1255
|
"Error in HTTP transport completing operation");
|
1294
1256
|
cl_err = grpc_error_set_str(cl_err, GRPC_ERROR_STR_TARGET_ADDRESS,
|
1295
1257
|
t->peer_string);
|
1296
1258
|
}
|
1297
1259
|
cl_err = grpc_error_add_child(cl_err, error);
|
1298
|
-
#ifdef GRPC_ERROR_IS_ABSEIL_STATUS
|
1299
1260
|
closure->error_data.error = grpc_core::internal::StatusAllocHeapPtr(cl_err);
|
1300
|
-
#else
|
1301
|
-
closure->error_data.error = reinterpret_cast<intptr_t>(cl_err);
|
1302
|
-
#endif
|
1303
1261
|
}
|
1304
1262
|
if (closure->next_data.scratch < CLOSURE_BARRIER_FIRST_REF_BIT) {
|
1305
1263
|
if ((t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE) ||
|
1306
1264
|
!(closure->next_data.scratch & CLOSURE_BARRIER_MAY_COVER_WRITE)) {
|
1307
1265
|
// Using GRPC_CLOSURE_SCHED instead of GRPC_CLOSURE_RUN to avoid running
|
1308
1266
|
// closures earlier than when it is safe to do so.
|
1309
|
-
#ifdef GRPC_ERROR_IS_ABSEIL_STATUS
|
1310
1267
|
grpc_error_handle run_error =
|
1311
1268
|
grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
|
1312
|
-
#else
|
1313
|
-
grpc_error_handle run_error =
|
1314
|
-
reinterpret_cast<grpc_error_handle>(closure->error_data.error);
|
1315
|
-
#endif
|
1316
1269
|
closure->error_data.error = 0;
|
1317
1270
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, run_error);
|
1318
1271
|
} else {
|
@@ -1326,94 +1279,6 @@ static bool contains_non_ok_status(grpc_metadata_batch* batch) {
|
|
1326
1279
|
GRPC_STATUS_OK;
|
1327
1280
|
}
|
1328
1281
|
|
1329
|
-
static void maybe_become_writable_due_to_send_msg(grpc_chttp2_transport* t,
|
1330
|
-
grpc_chttp2_stream* s) {
|
1331
|
-
if (s->id != 0 && (!s->write_buffering ||
|
1332
|
-
s->flow_controlled_buffer.length > t->write_buffer_size)) {
|
1333
|
-
grpc_chttp2_mark_stream_writable(t, s);
|
1334
|
-
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE);
|
1335
|
-
}
|
1336
|
-
}
|
1337
|
-
|
1338
|
-
static void add_fetched_slice_locked(grpc_chttp2_transport* t,
|
1339
|
-
grpc_chttp2_stream* s) {
|
1340
|
-
s->fetched_send_message_length +=
|
1341
|
-
static_cast<uint32_t> GRPC_SLICE_LENGTH(s->fetching_slice);
|
1342
|
-
grpc_slice_buffer_add(&s->flow_controlled_buffer, s->fetching_slice);
|
1343
|
-
maybe_become_writable_due_to_send_msg(t, s);
|
1344
|
-
}
|
1345
|
-
|
1346
|
-
static void continue_fetching_send_locked(grpc_chttp2_transport* t,
|
1347
|
-
grpc_chttp2_stream* s) {
|
1348
|
-
for (;;) {
|
1349
|
-
if (s->fetching_send_message == nullptr) {
|
1350
|
-
// Stream was cancelled before message fetch completed
|
1351
|
-
abort(); /* TODO(ctiller): what cleanup here? */
|
1352
|
-
}
|
1353
|
-
if (s->fetched_send_message_length == s->fetching_send_message->length()) {
|
1354
|
-
int64_t notify_offset = s->next_message_end_offset;
|
1355
|
-
if (notify_offset <= s->flow_controlled_bytes_written) {
|
1356
|
-
grpc_chttp2_complete_closure_step(
|
1357
|
-
t, s, &s->fetching_send_message_finished, GRPC_ERROR_NONE,
|
1358
|
-
"fetching_send_message_finished");
|
1359
|
-
} else {
|
1360
|
-
grpc_chttp2_write_cb* cb = t->write_cb_pool;
|
1361
|
-
if (cb == nullptr) {
|
1362
|
-
cb = static_cast<grpc_chttp2_write_cb*>(gpr_malloc(sizeof(*cb)));
|
1363
|
-
} else {
|
1364
|
-
t->write_cb_pool = cb->next;
|
1365
|
-
}
|
1366
|
-
cb->call_at_byte = notify_offset;
|
1367
|
-
cb->closure = s->fetching_send_message_finished;
|
1368
|
-
s->fetching_send_message_finished = nullptr;
|
1369
|
-
grpc_chttp2_write_cb** list =
|
1370
|
-
s->fetching_send_message->flags() & GRPC_WRITE_THROUGH
|
1371
|
-
? &s->on_write_finished_cbs
|
1372
|
-
: &s->on_flow_controlled_cbs;
|
1373
|
-
cb->next = *list;
|
1374
|
-
*list = cb;
|
1375
|
-
}
|
1376
|
-
s->fetching_send_message.reset();
|
1377
|
-
return; /* early out */
|
1378
|
-
} else if (s->fetching_send_message->Next(
|
1379
|
-
UINT32_MAX, GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
|
1380
|
-
::complete_fetch, s,
|
1381
|
-
grpc_schedule_on_exec_ctx))) {
|
1382
|
-
grpc_error_handle error =
|
1383
|
-
s->fetching_send_message->Pull(&s->fetching_slice);
|
1384
|
-
if (error != GRPC_ERROR_NONE) {
|
1385
|
-
s->fetching_send_message.reset();
|
1386
|
-
grpc_chttp2_cancel_stream(t, s, error);
|
1387
|
-
} else {
|
1388
|
-
add_fetched_slice_locked(t, s);
|
1389
|
-
}
|
1390
|
-
}
|
1391
|
-
}
|
1392
|
-
}
|
1393
|
-
|
1394
|
-
static void complete_fetch(void* gs, grpc_error_handle error) {
|
1395
|
-
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
|
1396
|
-
s->t->combiner->Run(GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
|
1397
|
-
::complete_fetch_locked, s, nullptr),
|
1398
|
-
GRPC_ERROR_REF(error));
|
1399
|
-
}
|
1400
|
-
|
1401
|
-
static void complete_fetch_locked(void* gs, grpc_error_handle error) {
|
1402
|
-
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
|
1403
|
-
grpc_chttp2_transport* t = s->t;
|
1404
|
-
if (error == GRPC_ERROR_NONE) {
|
1405
|
-
error = s->fetching_send_message->Pull(&s->fetching_slice);
|
1406
|
-
if (error == GRPC_ERROR_NONE) {
|
1407
|
-
add_fetched_slice_locked(t, s);
|
1408
|
-
continue_fetching_send_locked(t, s);
|
1409
|
-
}
|
1410
|
-
}
|
1411
|
-
if (error != GRPC_ERROR_NONE) {
|
1412
|
-
s->fetching_send_message.reset();
|
1413
|
-
grpc_chttp2_cancel_stream(t, s, error);
|
1414
|
-
}
|
1415
|
-
}
|
1416
|
-
|
1417
1282
|
static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
|
1418
1283
|
bool is_client, bool is_initial) {
|
1419
1284
|
const std::string prefix = absl::StrCat(
|
@@ -1489,7 +1354,7 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1489
1354
|
}
|
1490
1355
|
if (!s->write_closed) {
|
1491
1356
|
if (t->is_client) {
|
1492
|
-
if (t->closed_with_error
|
1357
|
+
if (GRPC_ERROR_IS_NONE(t->closed_with_error)) {
|
1493
1358
|
GPR_ASSERT(s->id == 0);
|
1494
1359
|
grpc_chttp2_list_add_waiting_for_concurrency(t, s);
|
1495
1360
|
maybe_start_some_streams(t);
|
@@ -1508,8 +1373,7 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1508
1373
|
GPR_ASSERT(s->id != 0);
|
1509
1374
|
grpc_chttp2_mark_stream_writable(t, s);
|
1510
1375
|
if (!(op->send_message &&
|
1511
|
-
(op->payload->send_message.
|
1512
|
-
GRPC_WRITE_BUFFER_HINT))) {
|
1376
|
+
(op->payload->send_message.flags & GRPC_WRITE_BUFFER_HINT))) {
|
1513
1377
|
grpc_chttp2_initiate_write(
|
1514
1378
|
t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
|
1515
1379
|
}
|
@@ -1533,32 +1397,28 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1533
1397
|
GRPC_STATS_INC_HTTP2_OP_SEND_MESSAGE();
|
1534
1398
|
t->num_messages_in_next_write++;
|
1535
1399
|
GRPC_STATS_INC_HTTP2_SEND_MESSAGE_SIZE(
|
1536
|
-
op->payload->send_message.send_message->
|
1400
|
+
op->payload->send_message.send_message->Length());
|
1537
1401
|
on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
|
1538
|
-
s->
|
1402
|
+
s->send_message_finished = add_closure_barrier(op->on_complete);
|
1403
|
+
const uint32_t flags = op_payload->send_message.flags;
|
1539
1404
|
if (s->write_closed) {
|
1540
1405
|
op->payload->send_message.stream_write_closed = true;
|
1541
1406
|
// We should NOT return an error here, so as to avoid a cancel OP being
|
1542
1407
|
// started. The surface layer will notice that the stream has been closed
|
1543
1408
|
// for writes and fail the send message op.
|
1544
|
-
|
1545
|
-
|
1546
|
-
|
1547
|
-
"fetching_send_message_finished");
|
1409
|
+
grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
|
1410
|
+
GRPC_ERROR_NONE,
|
1411
|
+
"fetching_send_message_finished");
|
1548
1412
|
} else {
|
1549
|
-
GPR_ASSERT(s->fetching_send_message == nullptr);
|
1550
1413
|
uint8_t* frame_hdr = grpc_slice_buffer_tiny_add(
|
1551
1414
|
&s->flow_controlled_buffer, GRPC_HEADER_SIZE_IN_BYTES);
|
1552
|
-
uint32_t flags = op_payload->send_message.send_message->flags();
|
1553
1415
|
frame_hdr[0] = (flags & GRPC_WRITE_INTERNAL_COMPRESS) != 0;
|
1554
|
-
size_t len = op_payload->send_message.send_message->
|
1416
|
+
size_t len = op_payload->send_message.send_message->Length();
|
1555
1417
|
frame_hdr[1] = static_cast<uint8_t>(len >> 24);
|
1556
1418
|
frame_hdr[2] = static_cast<uint8_t>(len >> 16);
|
1557
1419
|
frame_hdr[3] = static_cast<uint8_t>(len >> 8);
|
1558
1420
|
frame_hdr[4] = static_cast<uint8_t>(len);
|
1559
|
-
|
1560
|
-
std::move(op_payload->send_message.send_message);
|
1561
|
-
s->fetched_send_message_length = 0;
|
1421
|
+
|
1562
1422
|
s->next_message_end_offset =
|
1563
1423
|
s->flow_controlled_bytes_written +
|
1564
1424
|
static_cast<int64_t>(s->flow_controlled_buffer.length) +
|
@@ -1569,8 +1429,44 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1569
1429
|
} else {
|
1570
1430
|
s->write_buffering = false;
|
1571
1431
|
}
|
1572
|
-
|
1573
|
-
|
1432
|
+
|
1433
|
+
grpc_slice* const slices =
|
1434
|
+
op_payload->send_message.send_message->c_slice_buffer()->slices;
|
1435
|
+
grpc_slice* const end =
|
1436
|
+
slices + op_payload->send_message.send_message->Count();
|
1437
|
+
for (grpc_slice* slice = slices; slice != end; slice++) {
|
1438
|
+
grpc_slice_buffer_add(&s->flow_controlled_buffer,
|
1439
|
+
grpc_slice_ref_internal(*slice));
|
1440
|
+
}
|
1441
|
+
|
1442
|
+
int64_t notify_offset = s->next_message_end_offset;
|
1443
|
+
if (notify_offset <= s->flow_controlled_bytes_written) {
|
1444
|
+
grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
|
1445
|
+
GRPC_ERROR_NONE,
|
1446
|
+
"fetching_send_message_finished");
|
1447
|
+
} else {
|
1448
|
+
grpc_chttp2_write_cb* cb = t->write_cb_pool;
|
1449
|
+
if (cb == nullptr) {
|
1450
|
+
cb = static_cast<grpc_chttp2_write_cb*>(gpr_malloc(sizeof(*cb)));
|
1451
|
+
} else {
|
1452
|
+
t->write_cb_pool = cb->next;
|
1453
|
+
}
|
1454
|
+
cb->call_at_byte = notify_offset;
|
1455
|
+
cb->closure = s->send_message_finished;
|
1456
|
+
s->send_message_finished = nullptr;
|
1457
|
+
grpc_chttp2_write_cb** list = flags & GRPC_WRITE_THROUGH
|
1458
|
+
? &s->on_write_finished_cbs
|
1459
|
+
: &s->on_flow_controlled_cbs;
|
1460
|
+
cb->next = *list;
|
1461
|
+
*list = cb;
|
1462
|
+
}
|
1463
|
+
|
1464
|
+
if (s->id != 0 &&
|
1465
|
+
(!s->write_buffering ||
|
1466
|
+
s->flow_controlled_buffer.length > t->write_buffer_size)) {
|
1467
|
+
grpc_chttp2_mark_stream_writable(t, s);
|
1468
|
+
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE);
|
1469
|
+
}
|
1574
1470
|
}
|
1575
1471
|
}
|
1576
1472
|
|
@@ -1624,28 +1520,14 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1624
1520
|
|
1625
1521
|
if (op->recv_message) {
|
1626
1522
|
GRPC_STATS_INC_HTTP2_OP_RECV_MESSAGE();
|
1627
|
-
size_t before = 0;
|
1628
1523
|
GPR_ASSERT(s->recv_message_ready == nullptr);
|
1629
|
-
GPR_ASSERT(!s->pending_byte_stream);
|
1630
1524
|
s->recv_message_ready = op_payload->recv_message.recv_message_ready;
|
1631
1525
|
s->recv_message = op_payload->recv_message.recv_message;
|
1526
|
+
s->recv_message->emplace();
|
1527
|
+
s->recv_message_flags = op_payload->recv_message.flags;
|
1632
1528
|
s->call_failed_before_recv_message =
|
1633
1529
|
op_payload->recv_message.call_failed_before_recv_message;
|
1634
|
-
|
1635
|
-
if (!s->read_closed) {
|
1636
|
-
before = s->frame_storage.length +
|
1637
|
-
s->unprocessed_incoming_frames_buffer.length;
|
1638
|
-
}
|
1639
|
-
}
|
1640
|
-
grpc_chttp2_maybe_complete_recv_message(t, s);
|
1641
|
-
if (s->id != 0) {
|
1642
|
-
if (!s->read_closed && s->frame_storage.length == 0) {
|
1643
|
-
size_t after = s->unprocessed_incoming_frames_buffer_cached_length;
|
1644
|
-
s->flow_control->IncomingByteStreamUpdate(GRPC_HEADER_SIZE_IN_BYTES,
|
1645
|
-
before - after);
|
1646
|
-
grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
|
1647
|
-
}
|
1648
|
-
}
|
1530
|
+
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
1649
1531
|
}
|
1650
1532
|
|
1651
1533
|
if (op->recv_trailing_metadata) {
|
@@ -1704,7 +1586,7 @@ static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
|
|
1704
1586
|
// callback remaining pings: they're not allowed to call into the transport,
|
1705
1587
|
// and maybe they hold resources that need to be freed
|
1706
1588
|
grpc_chttp2_ping_queue* pq = &t->ping_queue;
|
1707
|
-
GPR_ASSERT(error
|
1589
|
+
GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
|
1708
1590
|
for (size_t j = 0; j < GRPC_CHTTP2_PCL_COUNT; j++) {
|
1709
1591
|
grpc_closure_list_fail_all(&pq->lists[j], GRPC_ERROR_REF(error));
|
1710
1592
|
grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &pq->lists[j]);
|
@@ -1714,7 +1596,7 @@ static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
|
|
1714
1596
|
|
1715
1597
|
static void send_ping_locked(grpc_chttp2_transport* t,
|
1716
1598
|
grpc_closure* on_initiate, grpc_closure* on_ack) {
|
1717
|
-
if (t->closed_with_error
|
1599
|
+
if (!GRPC_ERROR_IS_NONE(t->closed_with_error)) {
|
1718
1600
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_initiate,
|
1719
1601
|
GRPC_ERROR_REF(t->closed_with_error));
|
1720
1602
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_ack,
|
@@ -1732,7 +1614,7 @@ static void send_ping_locked(grpc_chttp2_transport* t,
|
|
1732
1614
|
// a ping in progress, the keepalive ping would piggyback onto that ping,
|
1733
1615
|
// instead of waiting for that ping to complete and then starting a new ping.
|
1734
1616
|
static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
|
1735
|
-
if (t->closed_with_error
|
1617
|
+
if (!GRPC_ERROR_IS_NONE(t->closed_with_error)) {
|
1736
1618
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
|
1737
1619
|
start_keepalive_ping_locked, t, nullptr),
|
1738
1620
|
GRPC_ERROR_REF(t->closed_with_error));
|
@@ -1777,7 +1659,7 @@ void grpc_chttp2_retry_initiate_ping(void* tp, grpc_error_handle error) {
|
|
1777
1659
|
static void retry_initiate_ping_locked(void* tp, grpc_error_handle error) {
|
1778
1660
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
1779
1661
|
t->ping_state.is_delayed_ping_timer_set = false;
|
1780
|
-
if (error
|
1662
|
+
if (GRPC_ERROR_IS_NONE(error)) {
|
1781
1663
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING);
|
1782
1664
|
}
|
1783
1665
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "retry_initiate_ping_locked");
|
@@ -1834,7 +1716,7 @@ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
|
|
1834
1716
|
// We already sent the final GOAWAY.
|
1835
1717
|
return;
|
1836
1718
|
}
|
1837
|
-
if (t_->destroying || t_->closed_with_error
|
1719
|
+
if (t_->destroying || !GRPC_ERROR_IS_NONE(t_->closed_with_error)) {
|
1838
1720
|
GRPC_CHTTP2_IF_TRACING(gpr_log(
|
1839
1721
|
GPR_INFO,
|
1840
1722
|
"transport:%p %s peer:%s Transport already shutting down. "
|
@@ -1871,7 +1753,7 @@ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
|
|
1871
1753
|
|
1872
1754
|
static void OnTimer(void* arg, grpc_error_handle error) {
|
1873
1755
|
auto* self = static_cast<GracefulGoaway*>(arg);
|
1874
|
-
if (error
|
1756
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
1875
1757
|
self->Unref();
|
1876
1758
|
return;
|
1877
1759
|
}
|
@@ -1955,7 +1837,7 @@ static void perform_transport_op_locked(void* stream_op,
|
|
1955
1837
|
grpc_chttp2_transport* t =
|
1956
1838
|
static_cast<grpc_chttp2_transport*>(op->handler_private.extra_arg);
|
1957
1839
|
|
1958
|
-
if (op->goaway_error
|
1840
|
+
if (!GRPC_ERROR_IS_NONE(op->goaway_error)) {
|
1959
1841
|
send_goaway(t, op->goaway_error, /*immediate_disconnect_hint=*/false);
|
1960
1842
|
}
|
1961
1843
|
|
@@ -1985,7 +1867,7 @@ static void perform_transport_op_locked(void* stream_op,
|
|
1985
1867
|
t->state_tracker.RemoveWatcher(op->stop_connectivity_watch);
|
1986
1868
|
}
|
1987
1869
|
|
1988
|
-
if (op->disconnect_with_error
|
1870
|
+
if (!GRPC_ERROR_IS_NONE(op->disconnect_with_error)) {
|
1989
1871
|
send_goaway(t, GRPC_ERROR_REF(op->disconnect_with_error),
|
1990
1872
|
/*immediate_disconnect_hint=*/true);
|
1991
1873
|
close_transport_locked(t, op->disconnect_with_error);
|
@@ -2019,10 +1901,6 @@ void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_chttp2_transport* t,
|
|
2019
1901
|
s->published_metadata[0] != GRPC_METADATA_NOT_PUBLISHED) {
|
2020
1902
|
if (s->seen_error) {
|
2021
1903
|
grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
|
2022
|
-
if (!s->pending_byte_stream) {
|
2023
|
-
grpc_slice_buffer_reset_and_unref_internal(
|
2024
|
-
&s->unprocessed_incoming_frames_buffer);
|
2025
|
-
}
|
2026
1904
|
}
|
2027
1905
|
*s->recv_initial_metadata = std::move(s->initial_metadata_buffer);
|
2028
1906
|
s->recv_initial_metadata->Set(grpc_core::PeerString(), t->peer_string);
|
@@ -2039,47 +1917,62 @@ void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_chttp2_transport* t,
|
|
2039
1917
|
}
|
2040
1918
|
}
|
2041
1919
|
|
2042
|
-
void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport*
|
1920
|
+
void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* t,
|
2043
1921
|
grpc_chttp2_stream* s) {
|
1922
|
+
if (s->recv_message_ready == nullptr) return;
|
1923
|
+
|
1924
|
+
grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext upd(
|
1925
|
+
&s->flow_control);
|
2044
1926
|
grpc_error_handle error = GRPC_ERROR_NONE;
|
2045
|
-
|
2046
|
-
|
1927
|
+
|
1928
|
+
// Lambda is immediately invoked as a big scoped section that can be
|
1929
|
+
// exited out of at any point by returning.
|
1930
|
+
[&]() {
|
2047
1931
|
if (s->final_metadata_requested && s->seen_error) {
|
2048
1932
|
grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
|
2049
|
-
|
2050
|
-
|
2051
|
-
|
2052
|
-
|
2053
|
-
|
2054
|
-
|
2055
|
-
|
2056
|
-
|
2057
|
-
|
2058
|
-
|
2059
|
-
|
2060
|
-
|
2061
|
-
|
2062
|
-
|
2063
|
-
|
2064
|
-
|
2065
|
-
|
2066
|
-
|
2067
|
-
|
2068
|
-
|
2069
|
-
|
2070
|
-
|
2071
|
-
|
1933
|
+
s->recv_message->reset();
|
1934
|
+
} else {
|
1935
|
+
if (s->frame_storage.length != 0) {
|
1936
|
+
while (true) {
|
1937
|
+
GPR_ASSERT(s->frame_storage.length > 0);
|
1938
|
+
uint32_t min_progress_size;
|
1939
|
+
auto r = grpc_deframe_unprocessed_incoming_frames(
|
1940
|
+
s, &min_progress_size, &**s->recv_message, s->recv_message_flags);
|
1941
|
+
if (absl::holds_alternative<grpc_core::Pending>(r)) {
|
1942
|
+
if (s->read_closed) {
|
1943
|
+
grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
|
1944
|
+
s->recv_message->reset();
|
1945
|
+
break;
|
1946
|
+
} else {
|
1947
|
+
upd.SetMinProgressSize(min_progress_size);
|
1948
|
+
return; // Out of lambda to enclosing function
|
1949
|
+
}
|
1950
|
+
} else {
|
1951
|
+
error = absl::get<grpc_error_handle>(r);
|
1952
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
1953
|
+
s->seen_error = true;
|
1954
|
+
grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
|
1955
|
+
break;
|
1956
|
+
} else {
|
1957
|
+
if (t->channelz_socket != nullptr) {
|
1958
|
+
t->channelz_socket->RecordMessageReceived();
|
1959
|
+
}
|
1960
|
+
break;
|
1961
|
+
}
|
1962
|
+
}
|
2072
1963
|
}
|
1964
|
+
} else if (s->read_closed) {
|
1965
|
+
s->recv_message->reset();
|
1966
|
+
} else {
|
1967
|
+
upd.SetMinProgressSize(GRPC_HEADER_SIZE_IN_BYTES);
|
1968
|
+
return; // Out of lambda to enclosing function
|
2073
1969
|
}
|
2074
1970
|
}
|
2075
1971
|
// save the length of the buffer before handing control back to application
|
2076
1972
|
// threads. Needed to support correct flow control bookkeeping
|
2077
|
-
s->
|
2078
|
-
s->unprocessed_incoming_frames_buffer.length;
|
2079
|
-
if (error == GRPC_ERROR_NONE && *s->recv_message != nullptr) {
|
1973
|
+
if (GRPC_ERROR_IS_NONE(error) && s->recv_message->has_value()) {
|
2080
1974
|
null_then_sched_closure(&s->recv_message_ready);
|
2081
1975
|
} else if (s->published_metadata[1] != GRPC_METADATA_NOT_PUBLISHED) {
|
2082
|
-
*s->recv_message = nullptr;
|
2083
1976
|
if (s->call_failed_before_recv_message != nullptr) {
|
2084
1977
|
*s->call_failed_before_recv_message =
|
2085
1978
|
(s->published_metadata[1] != GRPC_METADATA_PUBLISHED_AT_CLOSE);
|
@@ -2087,7 +1980,10 @@ void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* /*t*/,
|
|
2087
1980
|
null_then_sched_closure(&s->recv_message_ready);
|
2088
1981
|
}
|
2089
1982
|
GRPC_ERROR_UNREF(error);
|
2090
|
-
}
|
1983
|
+
}();
|
1984
|
+
|
1985
|
+
upd.SetPendingSize(s->frame_storage.length);
|
1986
|
+
grpc_chttp2_act_on_flowctl_action(upd.MakeAction(), t, s);
|
2091
1987
|
}
|
2092
1988
|
|
2093
1989
|
void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
|
@@ -2097,26 +1993,8 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
|
|
2097
1993
|
s->write_closed) {
|
2098
1994
|
if (s->seen_error || !t->is_client) {
|
2099
1995
|
grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
|
2100
|
-
if (!s->pending_byte_stream) {
|
2101
|
-
grpc_slice_buffer_reset_and_unref_internal(
|
2102
|
-
&s->unprocessed_incoming_frames_buffer);
|
2103
|
-
}
|
2104
1996
|
}
|
2105
|
-
|
2106
|
-
s->unprocessed_incoming_frames_buffer.length > 0;
|
2107
|
-
if (s->read_closed && s->frame_storage.length > 0 && !pending_data &&
|
2108
|
-
!s->seen_error && s->recv_trailing_metadata_finished != nullptr) {
|
2109
|
-
// Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
|
2110
|
-
// maybe decompress the next 5 bytes in the stream.
|
2111
|
-
grpc_slice_buffer_move_first(
|
2112
|
-
&s->frame_storage,
|
2113
|
-
std::min(s->frame_storage.length, size_t(GRPC_HEADER_SIZE_IN_BYTES)),
|
2114
|
-
&s->unprocessed_incoming_frames_buffer);
|
2115
|
-
if (s->unprocessed_incoming_frames_buffer.length > 0) {
|
2116
|
-
pending_data = true;
|
2117
|
-
}
|
2118
|
-
}
|
2119
|
-
if (s->read_closed && s->frame_storage.length == 0 && !pending_data &&
|
1997
|
+
if (s->read_closed && s->frame_storage.length == 0 &&
|
2120
1998
|
s->recv_trailing_metadata_finished != nullptr) {
|
2121
1999
|
grpc_transport_move_stats(&s->stats, s->collecting_stats);
|
2122
2000
|
s->collecting_stats = nullptr;
|
@@ -2136,20 +2014,6 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
|
|
2136
2014
|
t->incoming_stream = nullptr;
|
2137
2015
|
grpc_chttp2_parsing_become_skip_parser(t);
|
2138
2016
|
}
|
2139
|
-
if (s->pending_byte_stream) {
|
2140
|
-
if (s->on_next != nullptr) {
|
2141
|
-
grpc_core::Chttp2IncomingByteStream* bs = s->data_parser.parsing_frame;
|
2142
|
-
if (error == GRPC_ERROR_NONE) {
|
2143
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
|
2144
|
-
}
|
2145
|
-
bs->PublishError(error);
|
2146
|
-
bs->Unref();
|
2147
|
-
s->data_parser.parsing_frame = nullptr;
|
2148
|
-
} else {
|
2149
|
-
GRPC_ERROR_UNREF(s->byte_stream_error);
|
2150
|
-
s->byte_stream_error = GRPC_ERROR_REF(error);
|
2151
|
-
}
|
2152
|
-
}
|
2153
2017
|
|
2154
2018
|
if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
2155
2019
|
post_benign_reclaimer(t);
|
@@ -2188,7 +2052,7 @@ void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2188
2052
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
|
2189
2053
|
}
|
2190
2054
|
}
|
2191
|
-
if (due_to_error
|
2055
|
+
if (!GRPC_ERROR_IS_NONE(due_to_error) && !s->seen_error) {
|
2192
2056
|
s->seen_error = true;
|
2193
2057
|
}
|
2194
2058
|
grpc_chttp2_mark_stream_closed(t, s, 1, 1, due_to_error);
|
@@ -2226,7 +2090,7 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2226
2090
|
|
2227
2091
|
static void add_error(grpc_error_handle error, grpc_error_handle* refs,
|
2228
2092
|
size_t* nrefs) {
|
2229
|
-
if (error
|
2093
|
+
if (GRPC_ERROR_IS_NONE(error)) return;
|
2230
2094
|
for (size_t i = 0; i < *nrefs; i++) {
|
2231
2095
|
if (error == refs[i]) {
|
2232
2096
|
return;
|
@@ -2283,8 +2147,7 @@ void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
|
|
2283
2147
|
GRPC_ERROR_REF(error),
|
2284
2148
|
"send_trailing_metadata_finished");
|
2285
2149
|
|
2286
|
-
s->
|
2287
|
-
grpc_chttp2_complete_closure_step(t, s, &s->fetching_send_message_finished,
|
2150
|
+
grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
|
2288
2151
|
GRPC_ERROR_REF(error),
|
2289
2152
|
"fetching_send_message_finished");
|
2290
2153
|
flush_write_list(t, s, &s->on_write_finished_cbs, GRPC_ERROR_REF(error));
|
@@ -2297,7 +2160,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
|
|
2297
2160
|
if (s->read_closed && s->write_closed) {
|
2298
2161
|
// already closed, but we should still fake the status if needed.
|
2299
2162
|
grpc_error_handle overall_error = removal_error(error, s, "Stream removed");
|
2300
|
-
if (overall_error
|
2163
|
+
if (!GRPC_ERROR_IS_NONE(overall_error)) {
|
2301
2164
|
grpc_chttp2_fake_status(t, s, overall_error);
|
2302
2165
|
}
|
2303
2166
|
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
@@ -2325,7 +2188,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
|
|
2325
2188
|
// Purge streams waiting on concurrency still waiting for id assignment
|
2326
2189
|
grpc_chttp2_list_remove_waiting_for_concurrency(t, s);
|
2327
2190
|
}
|
2328
|
-
if (overall_error
|
2191
|
+
if (!GRPC_ERROR_IS_NONE(overall_error)) {
|
2329
2192
|
grpc_chttp2_fake_status(t, s, overall_error);
|
2330
2193
|
}
|
2331
2194
|
}
|
@@ -2554,8 +2417,11 @@ void grpc_chttp2_act_on_flowctl_action(
|
|
2554
2417
|
const grpc_core::chttp2::FlowControlAction& action,
|
2555
2418
|
grpc_chttp2_transport* t, grpc_chttp2_stream* s) {
|
2556
2419
|
WithUrgency(t, action.send_stream_update(),
|
2557
|
-
GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL,
|
2558
|
-
|
2420
|
+
GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL, [t, s]() {
|
2421
|
+
if (s->id != 0) {
|
2422
|
+
grpc_chttp2_mark_stream_writable(t, s);
|
2423
|
+
}
|
2424
|
+
});
|
2559
2425
|
WithUrgency(t, action.send_transport_update(),
|
2560
2426
|
GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL, []() {});
|
2561
2427
|
WithUrgency(t, action.send_initial_window_update(),
|
@@ -2580,11 +2446,11 @@ static grpc_error_handle try_http_parsing(grpc_chttp2_transport* t) {
|
|
2580
2446
|
grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response);
|
2581
2447
|
|
2582
2448
|
grpc_error_handle parse_error = GRPC_ERROR_NONE;
|
2583
|
-
for (; i < t->read_buffer.count && parse_error
|
2449
|
+
for (; i < t->read_buffer.count && GRPC_ERROR_IS_NONE(parse_error); i++) {
|
2584
2450
|
parse_error =
|
2585
2451
|
grpc_http_parser_parse(&parser, t->read_buffer.slices[i], nullptr);
|
2586
2452
|
}
|
2587
|
-
if (parse_error
|
2453
|
+
if (GRPC_ERROR_IS_NONE(parse_error) &&
|
2588
2454
|
(parse_error = grpc_http_parser_eof(&parser)) == GRPC_ERROR_NONE) {
|
2589
2455
|
error = grpc_error_set_int(
|
2590
2456
|
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
@@ -2615,7 +2481,7 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
|
|
2615
2481
|
(void)GRPC_ERROR_REF(error);
|
2616
2482
|
|
2617
2483
|
grpc_error_handle err = error;
|
2618
|
-
if (err
|
2484
|
+
if (!GRPC_ERROR_IS_NONE(err)) {
|
2619
2485
|
err = grpc_error_set_int(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
2620
2486
|
"Endpoint read failed", &err, 1),
|
2621
2487
|
GRPC_ERROR_INT_OCCURRED_DURING_WRITE,
|
@@ -2623,7 +2489,7 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
|
|
2623
2489
|
}
|
2624
2490
|
std::swap(err, error);
|
2625
2491
|
GRPC_ERROR_UNREF(err);
|
2626
|
-
if (t->closed_with_error
|
2492
|
+
if (GRPC_ERROR_IS_NONE(t->closed_with_error)) {
|
2627
2493
|
GPR_TIMER_SCOPE("reading_action.parse", 0);
|
2628
2494
|
size_t i = 0;
|
2629
2495
|
grpc_error_handle errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
|
@@ -2657,20 +2523,20 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
|
|
2657
2523
|
|
2658
2524
|
GPR_TIMER_SCOPE("post_reading_action_locked", 0);
|
2659
2525
|
bool keep_reading = false;
|
2660
|
-
if (error
|
2526
|
+
if (GRPC_ERROR_IS_NONE(error) && !GRPC_ERROR_IS_NONE(t->closed_with_error)) {
|
2661
2527
|
error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
2662
2528
|
"Transport closed", &t->closed_with_error, 1);
|
2663
2529
|
}
|
2664
|
-
if (error
|
2530
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
2665
2531
|
// If a goaway frame was received, this might be the reason why the read
|
2666
2532
|
// failed. Add this info to the error
|
2667
|
-
if (t->goaway_error
|
2533
|
+
if (!GRPC_ERROR_IS_NONE(t->goaway_error)) {
|
2668
2534
|
error = grpc_error_add_child(error, GRPC_ERROR_REF(t->goaway_error));
|
2669
2535
|
}
|
2670
2536
|
|
2671
2537
|
close_transport_locked(t, GRPC_ERROR_REF(error));
|
2672
2538
|
t->endpoint_reading = 0;
|
2673
|
-
} else if (t->closed_with_error
|
2539
|
+
} else if (GRPC_ERROR_IS_NONE(t->closed_with_error)) {
|
2674
2540
|
keep_reading = true;
|
2675
2541
|
// Since we have read a byte, reset the keepalive timer
|
2676
2542
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
|
@@ -2698,18 +2564,17 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
|
|
2698
2564
|
}
|
2699
2565
|
|
2700
2566
|
static void continue_read_action_locked(grpc_chttp2_transport* t) {
|
2701
|
-
const bool urgent = t->goaway_error
|
2567
|
+
const bool urgent = !GRPC_ERROR_IS_NONE(t->goaway_error);
|
2702
2568
|
GRPC_CLOSURE_INIT(&t->read_action_locked, read_action, t,
|
2703
2569
|
grpc_schedule_on_exec_ctx);
|
2704
2570
|
grpc_endpoint_read(t->ep, &t->read_buffer, &t->read_action_locked, urgent,
|
2705
2571
|
/*min_progress_size=*/1);
|
2706
|
-
grpc_chttp2_act_on_flowctl_action(t->flow_control->MakeAction(), t, nullptr);
|
2707
2572
|
}
|
2708
2573
|
|
2709
2574
|
// t is reffed prior to calling the first time, and once the callback chain
|
2710
2575
|
// that kicks off finishes, it's unreffed
|
2711
2576
|
void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
|
2712
|
-
t->flow_control
|
2577
|
+
t->flow_control.bdp_estimator()->SchedulePing();
|
2713
2578
|
send_ping_locked(
|
2714
2579
|
t,
|
2715
2580
|
GRPC_CLOSURE_INIT(&t->start_bdp_ping_locked, start_bdp_ping, t,
|
@@ -2732,14 +2597,14 @@ static void start_bdp_ping_locked(void* tp, grpc_error_handle error) {
|
|
2732
2597
|
gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string.c_str(),
|
2733
2598
|
grpc_error_std_string(error).c_str());
|
2734
2599
|
}
|
2735
|
-
if (error
|
2600
|
+
if (!GRPC_ERROR_IS_NONE(error) || !GRPC_ERROR_IS_NONE(t->closed_with_error)) {
|
2736
2601
|
return;
|
2737
2602
|
}
|
2738
2603
|
// Reset the keepalive ping timer
|
2739
2604
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
|
2740
2605
|
grpc_timer_cancel(&t->keepalive_ping_timer);
|
2741
2606
|
}
|
2742
|
-
t->flow_control
|
2607
|
+
t->flow_control.bdp_estimator()->StartPing();
|
2743
2608
|
t->bdp_ping_started = true;
|
2744
2609
|
}
|
2745
2610
|
|
@@ -2756,7 +2621,7 @@ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
|
|
2756
2621
|
gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string.c_str(),
|
2757
2622
|
grpc_error_std_string(error).c_str());
|
2758
2623
|
}
|
2759
|
-
if (error
|
2624
|
+
if (!GRPC_ERROR_IS_NONE(error) || !GRPC_ERROR_IS_NONE(t->closed_with_error)) {
|
2760
2625
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
2761
2626
|
return;
|
2762
2627
|
}
|
@@ -2770,8 +2635,8 @@ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
|
|
2770
2635
|
}
|
2771
2636
|
t->bdp_ping_started = false;
|
2772
2637
|
grpc_core::Timestamp next_ping =
|
2773
|
-
t->flow_control
|
2774
|
-
grpc_chttp2_act_on_flowctl_action(t->flow_control
|
2638
|
+
t->flow_control.bdp_estimator()->CompletePing();
|
2639
|
+
grpc_chttp2_act_on_flowctl_action(t->flow_control.PeriodicUpdate(), t,
|
2775
2640
|
nullptr);
|
2776
2641
|
GPR_ASSERT(!t->have_next_bdp_ping_timer);
|
2777
2642
|
t->have_next_bdp_ping_timer = true;
|
@@ -2794,11 +2659,11 @@ static void next_bdp_ping_timer_expired_locked(void* tp,
|
|
2794
2659
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2795
2660
|
GPR_ASSERT(t->have_next_bdp_ping_timer);
|
2796
2661
|
t->have_next_bdp_ping_timer = false;
|
2797
|
-
if (error
|
2662
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
2798
2663
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
2799
2664
|
return;
|
2800
2665
|
}
|
2801
|
-
if (t->flow_control
|
2666
|
+
if (t->flow_control.bdp_estimator()->accumulator() == 0) {
|
2802
2667
|
// Block the bdp ping till we receive more data.
|
2803
2668
|
t->bdp_ping_blocked = true;
|
2804
2669
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
@@ -2876,9 +2741,9 @@ static void init_keepalive_ping(void* arg, grpc_error_handle error) {
|
|
2876
2741
|
static void init_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
2877
2742
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2878
2743
|
GPR_ASSERT(t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING);
|
2879
|
-
if (t->destroying || t->closed_with_error
|
2744
|
+
if (t->destroying || !GRPC_ERROR_IS_NONE(t->closed_with_error)) {
|
2880
2745
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
|
2881
|
-
} else if (error
|
2746
|
+
} else if (GRPC_ERROR_IS_NONE(error)) {
|
2882
2747
|
if (t->keepalive_permit_without_calls ||
|
2883
2748
|
grpc_chttp2_stream_map_size(&t->stream_map) > 0) {
|
2884
2749
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_PINGING;
|
@@ -2915,7 +2780,7 @@ static void start_keepalive_ping(void* arg, grpc_error_handle error) {
|
|
2915
2780
|
|
2916
2781
|
static void start_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
2917
2782
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2918
|
-
if (error
|
2783
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
2919
2784
|
return;
|
2920
2785
|
}
|
2921
2786
|
if (t->channelz_socket != nullptr) {
|
@@ -2944,7 +2809,7 @@ static void finish_keepalive_ping(void* arg, grpc_error_handle error) {
|
|
2944
2809
|
static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
2945
2810
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2946
2811
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
|
2947
|
-
if (error
|
2812
|
+
if (GRPC_ERROR_IS_NONE(error)) {
|
2948
2813
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
|
2949
2814
|
GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
|
2950
2815
|
gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string.c_str());
|
@@ -2984,7 +2849,7 @@ static void keepalive_watchdog_fired_locked(void* arg,
|
|
2984
2849
|
grpc_error_handle error) {
|
2985
2850
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2986
2851
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
|
2987
|
-
if (error
|
2852
|
+
if (GRPC_ERROR_IS_NONE(error)) {
|
2988
2853
|
gpr_log(GPR_INFO, "%s: Keepalive watchdog fired. Closing transport.",
|
2989
2854
|
t->peer_string.c_str());
|
2990
2855
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
|
@@ -3034,187 +2899,6 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* /*gs*/,
|
|
3034
2899
|
grpc_endpoint_add_to_pollset_set(t->ep, pollset_set);
|
3035
2900
|
}
|
3036
2901
|
|
3037
|
-
//
|
3038
|
-
// BYTE STREAM
|
3039
|
-
//
|
3040
|
-
|
3041
|
-
static void reset_byte_stream(void* arg, grpc_error_handle error) {
|
3042
|
-
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
|
3043
|
-
s->pending_byte_stream = false;
|
3044
|
-
if (error == GRPC_ERROR_NONE) {
|
3045
|
-
grpc_chttp2_maybe_complete_recv_message(s->t, s);
|
3046
|
-
grpc_chttp2_maybe_complete_recv_trailing_metadata(s->t, s);
|
3047
|
-
} else {
|
3048
|
-
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
3049
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, s->on_next, GRPC_ERROR_REF(error));
|
3050
|
-
s->on_next = nullptr;
|
3051
|
-
GRPC_ERROR_UNREF(s->byte_stream_error);
|
3052
|
-
s->byte_stream_error = GRPC_ERROR_NONE;
|
3053
|
-
grpc_chttp2_cancel_stream(s->t, s, GRPC_ERROR_REF(error));
|
3054
|
-
s->byte_stream_error = GRPC_ERROR_REF(error);
|
3055
|
-
}
|
3056
|
-
}
|
3057
|
-
|
3058
|
-
namespace grpc_core {
|
3059
|
-
|
3060
|
-
Chttp2IncomingByteStream::Chttp2IncomingByteStream(
|
3061
|
-
grpc_chttp2_transport* transport, grpc_chttp2_stream* stream,
|
3062
|
-
uint32_t frame_size, uint32_t flags)
|
3063
|
-
: ByteStream(frame_size, flags),
|
3064
|
-
transport_(transport),
|
3065
|
-
stream_(stream),
|
3066
|
-
refs_(2),
|
3067
|
-
remaining_bytes_(frame_size) {
|
3068
|
-
GRPC_ERROR_UNREF(stream->byte_stream_error);
|
3069
|
-
stream->byte_stream_error = GRPC_ERROR_NONE;
|
3070
|
-
}
|
3071
|
-
|
3072
|
-
void Chttp2IncomingByteStream::OrphanLocked(
|
3073
|
-
void* arg, grpc_error_handle /*error_ignored*/) {
|
3074
|
-
Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
|
3075
|
-
grpc_chttp2_stream* s = bs->stream_;
|
3076
|
-
grpc_chttp2_transport* t = s->t;
|
3077
|
-
bs->Unref();
|
3078
|
-
s->pending_byte_stream = false;
|
3079
|
-
grpc_chttp2_maybe_complete_recv_message(t, s);
|
3080
|
-
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
3081
|
-
}
|
3082
|
-
|
3083
|
-
void Chttp2IncomingByteStream::Orphan() {
|
3084
|
-
GPR_TIMER_SCOPE("incoming_byte_stream_destroy", 0);
|
3085
|
-
transport_->combiner->Run(
|
3086
|
-
GRPC_CLOSURE_INIT(&destroy_action_,
|
3087
|
-
&Chttp2IncomingByteStream::OrphanLocked, this, nullptr),
|
3088
|
-
GRPC_ERROR_NONE);
|
3089
|
-
}
|
3090
|
-
|
3091
|
-
void Chttp2IncomingByteStream::NextLocked(void* arg,
|
3092
|
-
grpc_error_handle /*error_ignored*/) {
|
3093
|
-
Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
|
3094
|
-
grpc_chttp2_transport* t = bs->transport_;
|
3095
|
-
grpc_chttp2_stream* s = bs->stream_;
|
3096
|
-
size_t cur_length = s->frame_storage.length;
|
3097
|
-
if (!s->read_closed) {
|
3098
|
-
s->flow_control->IncomingByteStreamUpdate(bs->next_action_.max_size_hint,
|
3099
|
-
cur_length);
|
3100
|
-
grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
|
3101
|
-
}
|
3102
|
-
GPR_ASSERT(s->unprocessed_incoming_frames_buffer.length == 0);
|
3103
|
-
if (s->frame_storage.length > 0) {
|
3104
|
-
grpc_slice_buffer_swap(&s->frame_storage,
|
3105
|
-
&s->unprocessed_incoming_frames_buffer);
|
3106
|
-
ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete, GRPC_ERROR_NONE);
|
3107
|
-
} else if (s->byte_stream_error != GRPC_ERROR_NONE) {
|
3108
|
-
ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete,
|
3109
|
-
GRPC_ERROR_REF(s->byte_stream_error));
|
3110
|
-
if (s->data_parser.parsing_frame != nullptr) {
|
3111
|
-
s->data_parser.parsing_frame->Unref();
|
3112
|
-
s->data_parser.parsing_frame = nullptr;
|
3113
|
-
}
|
3114
|
-
} else if (s->read_closed) {
|
3115
|
-
if (bs->remaining_bytes_ != 0) {
|
3116
|
-
s->byte_stream_error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
3117
|
-
"Truncated message", &s->read_closed_error, 1);
|
3118
|
-
ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete,
|
3119
|
-
GRPC_ERROR_REF(s->byte_stream_error));
|
3120
|
-
if (s->data_parser.parsing_frame != nullptr) {
|
3121
|
-
s->data_parser.parsing_frame->Unref();
|
3122
|
-
s->data_parser.parsing_frame = nullptr;
|
3123
|
-
}
|
3124
|
-
} else {
|
3125
|
-
// Should never reach here.
|
3126
|
-
GPR_ASSERT(false);
|
3127
|
-
}
|
3128
|
-
} else {
|
3129
|
-
s->on_next = bs->next_action_.on_complete;
|
3130
|
-
}
|
3131
|
-
bs->Unref();
|
3132
|
-
}
|
3133
|
-
|
3134
|
-
bool Chttp2IncomingByteStream::Next(size_t max_size_hint,
|
3135
|
-
grpc_closure* on_complete) {
|
3136
|
-
GPR_TIMER_SCOPE("incoming_byte_stream_next", 0);
|
3137
|
-
if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
|
3138
|
-
return true;
|
3139
|
-
} else {
|
3140
|
-
Ref();
|
3141
|
-
next_action_.max_size_hint = max_size_hint;
|
3142
|
-
next_action_.on_complete = on_complete;
|
3143
|
-
transport_->combiner->Run(
|
3144
|
-
GRPC_CLOSURE_INIT(&next_action_.closure,
|
3145
|
-
&Chttp2IncomingByteStream::NextLocked, this, nullptr),
|
3146
|
-
GRPC_ERROR_NONE);
|
3147
|
-
return false;
|
3148
|
-
}
|
3149
|
-
}
|
3150
|
-
|
3151
|
-
grpc_error_handle Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
|
3152
|
-
GPR_TIMER_SCOPE("incoming_byte_stream_pull", 0);
|
3153
|
-
grpc_error_handle error;
|
3154
|
-
if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
|
3155
|
-
error = grpc_deframe_unprocessed_incoming_frames(
|
3156
|
-
&stream_->data_parser, stream_,
|
3157
|
-
&stream_->unprocessed_incoming_frames_buffer, slice, nullptr);
|
3158
|
-
if (error != GRPC_ERROR_NONE) {
|
3159
|
-
return error;
|
3160
|
-
}
|
3161
|
-
} else {
|
3162
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
|
3163
|
-
stream_->t->combiner->Run(&stream_->reset_byte_stream,
|
3164
|
-
GRPC_ERROR_REF(error));
|
3165
|
-
return error;
|
3166
|
-
}
|
3167
|
-
return GRPC_ERROR_NONE;
|
3168
|
-
}
|
3169
|
-
|
3170
|
-
void Chttp2IncomingByteStream::PublishError(grpc_error_handle error) {
|
3171
|
-
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
3172
|
-
ExecCtx::Run(DEBUG_LOCATION, stream_->on_next, GRPC_ERROR_REF(error));
|
3173
|
-
stream_->on_next = nullptr;
|
3174
|
-
GRPC_ERROR_UNREF(stream_->byte_stream_error);
|
3175
|
-
stream_->byte_stream_error = GRPC_ERROR_REF(error);
|
3176
|
-
grpc_chttp2_cancel_stream(transport_, stream_, GRPC_ERROR_REF(error));
|
3177
|
-
}
|
3178
|
-
|
3179
|
-
grpc_error_handle Chttp2IncomingByteStream::Push(const grpc_slice& slice,
|
3180
|
-
grpc_slice* slice_out) {
|
3181
|
-
if (remaining_bytes_ < GRPC_SLICE_LENGTH(slice)) {
|
3182
|
-
grpc_error_handle error =
|
3183
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many bytes in stream");
|
3184
|
-
transport_->combiner->Run(&stream_->reset_byte_stream,
|
3185
|
-
GRPC_ERROR_REF(error));
|
3186
|
-
grpc_slice_unref_internal(slice);
|
3187
|
-
return error;
|
3188
|
-
} else {
|
3189
|
-
remaining_bytes_ -= static_cast<uint32_t> GRPC_SLICE_LENGTH(slice);
|
3190
|
-
if (slice_out != nullptr) {
|
3191
|
-
*slice_out = slice;
|
3192
|
-
}
|
3193
|
-
return GRPC_ERROR_NONE;
|
3194
|
-
}
|
3195
|
-
}
|
3196
|
-
|
3197
|
-
grpc_error_handle Chttp2IncomingByteStream::Finished(grpc_error_handle error,
|
3198
|
-
bool reset_on_error) {
|
3199
|
-
if (error == GRPC_ERROR_NONE) {
|
3200
|
-
if (remaining_bytes_ != 0) {
|
3201
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
|
3202
|
-
}
|
3203
|
-
}
|
3204
|
-
if (error != GRPC_ERROR_NONE && reset_on_error) {
|
3205
|
-
transport_->combiner->Run(&stream_->reset_byte_stream,
|
3206
|
-
GRPC_ERROR_REF(error));
|
3207
|
-
}
|
3208
|
-
Unref();
|
3209
|
-
return error;
|
3210
|
-
}
|
3211
|
-
|
3212
|
-
void Chttp2IncomingByteStream::Shutdown(grpc_error_handle error) {
|
3213
|
-
GRPC_ERROR_UNREF(Finished(error, true /* reset_on_error */));
|
3214
|
-
}
|
3215
|
-
|
3216
|
-
} // namespace grpc_core
|
3217
|
-
|
3218
2902
|
//
|
3219
2903
|
// RESOURCE QUOTAS
|
3220
2904
|
//
|
@@ -3261,7 +2945,7 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
|
|
3261
2945
|
|
3262
2946
|
static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
|
3263
2947
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
3264
|
-
if (error
|
2948
|
+
if (GRPC_ERROR_IS_NONE(error) &&
|
3265
2949
|
grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
3266
2950
|
// Channel with no active streams: send a goaway to try and make it
|
3267
2951
|
// disconnect cleanly
|
@@ -3274,7 +2958,7 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3274
2958
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Buffers full"),
|
3275
2959
|
GRPC_ERROR_INT_HTTP2_ERROR, GRPC_HTTP2_ENHANCE_YOUR_CALM),
|
3276
2960
|
/*immediate_disconnect_hint=*/true);
|
3277
|
-
} else if (error
|
2961
|
+
} else if (GRPC_ERROR_IS_NONE(error) &&
|
3278
2962
|
GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
3279
2963
|
gpr_log(GPR_INFO,
|
3280
2964
|
"HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
|
@@ -3293,7 +2977,7 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3293
2977
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
3294
2978
|
size_t n = grpc_chttp2_stream_map_size(&t->stream_map);
|
3295
2979
|
t->destructive_reclaimer_registered = false;
|
3296
|
-
if (error
|
2980
|
+
if (GRPC_ERROR_IS_NONE(error) && n > 0) {
|
3297
2981
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
|
3298
2982
|
grpc_chttp2_stream_map_rand(&t->stream_map));
|
3299
2983
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
@@ -3400,7 +3084,8 @@ grpc_chttp2_transport_get_socket_node(grpc_transport* transport) {
|
|
3400
3084
|
}
|
3401
3085
|
|
3402
3086
|
grpc_transport* grpc_create_chttp2_transport(
|
3403
|
-
const
|
3087
|
+
const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
|
3088
|
+
bool is_client) {
|
3404
3089
|
auto t = new grpc_chttp2_transport(channel_args, ep, is_client);
|
3405
3090
|
return &t->base;
|
3406
3091
|
}
|