grpc 1.56.2 → 1.57.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Makefile +29 -22
- data/include/grpc/event_engine/event_engine.h +22 -32
- data/include/grpc/impl/grpc_types.h +3 -0
- data/include/grpc/support/port_platform.h +29 -23
- data/src/core/ext/filters/client_channel/client_channel.cc +44 -8
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/http_proxy.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +21 -52
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +19 -7
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +25 -35
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +78 -132
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +38 -15
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +3 -5
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +22 -6
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +97 -71
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -16
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +56 -11
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.h +25 -0
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -32
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +4 -6
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +20 -79
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +31 -19
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -41
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +3 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +8 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +31 -74
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +7 -51
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +16 -87
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +16 -50
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -74
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -4
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +69 -59
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +7 -2
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +25 -13
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +366 -311
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +17 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +39 -2498
- data/src/core/ext/filters/client_channel/retry_filter.h +91 -1
- data/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.cc +2052 -0
- data/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.h +442 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +38 -58
- data/src/core/ext/filters/client_channel/subchannel.h +3 -3
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +3 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +40 -111
- data/src/core/ext/filters/rbac/rbac_filter.h +12 -30
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +162 -86
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +0 -6
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +7 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +131 -186
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +6569 -174
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +2278 -441
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +9 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +3 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +8 -4
- data/src/core/ext/transport/chttp2/transport/parsing.cc +15 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +2 -3
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -6
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +143 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +0 -39
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +13 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +35 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +17 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +85 -20
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +26 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +45 -3
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +4 -3
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +21 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +30 -6
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +180 -0
- data/src/core/ext/upb-generated/envoy/data/accesslog/v3/accesslog.upb.c +558 -0
- data/src/core/ext/upb-generated/envoy/data/accesslog/v3/accesslog.upb.h +2710 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +30 -11
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +53 -24
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +30 -5
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +110 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +41 -15
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +150 -27
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +93 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +88 -76
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +11 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +162 -160
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +129 -118
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +141 -135
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +19 -12
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +38 -30
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/data/accesslog/v3/accesslog.upbdefs.c +402 -0
- data/src/core/ext/upbdefs-generated/envoy/data/accesslog/v3/accesslog.upbdefs.h +111 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +80 -74
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +63 -47
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +315 -293
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -29
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +33 -30
- data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -13
- data/src/core/ext/xds/xds_client_grpc.cc +11 -6
- data/src/core/ext/xds/xds_client_grpc.h +16 -2
- data/src/core/ext/xds/xds_client_stats.h +10 -0
- data/src/core/ext/xds/xds_cluster.cc +26 -16
- data/src/core/ext/xds/xds_endpoint.cc +4 -7
- data/src/core/ext/xds/xds_health_status.cc +0 -17
- data/src/core/ext/xds/xds_health_status.h +5 -25
- data/src/core/ext/xds/xds_lb_policy_registry.cc +39 -0
- data/src/core/ext/xds/xds_route_config.cc +4 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +1 -3
- data/src/core/lib/address_utils/parse_address.cc +63 -1
- data/src/core/lib/address_utils/parse_address.h +8 -0
- data/src/core/lib/address_utils/sockaddr_utils.cc +46 -1
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -2
- data/src/core/lib/channel/channel_args.cc +21 -10
- data/src/core/lib/channel/channel_args.h +3 -0
- data/src/core/lib/channel/connected_channel.cc +4 -1
- data/src/core/lib/channel/promise_based_filter.h +1 -0
- data/src/core/lib/debug/trace.cc +1 -4
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +2 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -1
- data/src/core/lib/event_engine/event_engine.cc +0 -12
- data/src/core/lib/event_engine/forkable.cc +47 -42
- data/src/core/lib/event_engine/handle_containers.h +0 -4
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +4 -6
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +4 -6
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +25 -11
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +2 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +8 -12
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +37 -27
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +2 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +4 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +42 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +6 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +10 -37
- data/src/core/lib/event_engine/tcp_socket_utils.cc +67 -7
- data/src/core/lib/event_engine/tcp_socket_utils.h +3 -0
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +90 -37
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +32 -12
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +12 -21
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +8 -12
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +55 -54
- data/src/core/lib/event_engine/windows/windows_endpoint.h +15 -12
- data/src/core/lib/event_engine/windows/windows_engine.cc +2 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +8 -12
- data/src/core/lib/experiments/config.cc +60 -22
- data/src/core/lib/experiments/config.h +20 -8
- data/src/core/lib/experiments/experiments.cc +278 -0
- data/src/core/lib/experiments/experiments.h +59 -1
- data/src/core/lib/gprpp/dual_ref_counted.h +9 -9
- data/src/core/lib/gprpp/fork.cc +8 -9
- data/src/core/lib/gprpp/fork.h +6 -5
- data/src/core/lib/gprpp/if_list.h +4530 -0
- data/src/core/lib/gprpp/orphanable.h +3 -3
- data/src/core/lib/gprpp/ref_counted.h +6 -6
- data/src/core/lib/gprpp/sorted_pack.h +3 -12
- data/src/core/lib/gprpp/status_helper.h +16 -15
- data/src/core/lib/gprpp/time.h +12 -0
- data/src/core/lib/gprpp/type_list.h +32 -0
- data/src/core/lib/http/httpcli.h +6 -9
- data/src/core/lib/iomgr/error.cc +32 -2
- data/src/core/lib/iomgr/error.h +9 -10
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
- data/src/core/lib/iomgr/exec_ctx.h +11 -0
- data/src/core/lib/iomgr/pollset.h +4 -5
- data/src/core/lib/iomgr/port.h +10 -0
- data/src/core/lib/iomgr/resolve_address.cc +13 -1
- data/src/core/lib/iomgr/resolve_address.h +17 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +7 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -0
- data/src/core/lib/iomgr/socket_utils_posix.cc +2 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +6 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -1
- data/src/core/lib/iomgr/tcp_posix.cc +21 -4
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -2
- data/src/core/lib/iomgr/tcp_windows.cc +1 -3
- data/src/core/lib/iomgr/vsock.cc +59 -0
- data/src/core/lib/iomgr/vsock.h +38 -0
- data/src/core/lib/iomgr/wakeup_fd_posix.h +3 -6
- data/src/core/lib/load_balancing/delegating_helper.h +115 -0
- data/src/core/lib/load_balancing/lb_policy.h +20 -0
- data/src/core/lib/load_balancing/subchannel_interface.h +6 -0
- data/src/core/lib/promise/party.h +1 -1
- data/src/core/lib/resolver/resolver_factory.h +3 -2
- data/src/core/lib/resolver/server_address.cc +9 -94
- data/src/core/lib/resolver/server_address.h +10 -64
- data/src/core/lib/resource_quota/memory_quota.h +1 -1
- data/src/core/lib/security/credentials/channel_creds_registry.h +51 -27
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +169 -9
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/composite/composite_credentials.h +3 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +30 -38
- data/src/core/lib/security/credentials/fake/fake_credentials.h +28 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +1 -1
- data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -1
- data/src/core/lib/service_config/service_config_call_data.h +5 -0
- data/src/core/lib/slice/slice.h +16 -0
- data/src/core/lib/surface/call.cc +31 -29
- data/src/core/lib/surface/server.h +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/metadata_batch.cc +7 -7
- data/src/core/lib/transport/metadata_batch.h +86 -48
- data/src/core/lib/transport/parsed_metadata.h +34 -20
- data/src/core/lib/transport/simple_slice_based_metadata.h +9 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +4 -6
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -2
- data/src/core/tsi/ssl_transport_security.cc +28 -7
- data/src/ruby/bin/math_pb.rb +24 -18
- data/src/ruby/ext/grpc/extconf.rb +19 -18
- data/src/ruby/ext/grpc/rb_call.c +62 -39
- data/src/ruby/ext/grpc/rb_call_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_channel.c +126 -49
- data/src/ruby/ext/grpc/rb_channel.h +1 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +16 -2
- data/src/ruby/ext/grpc/rb_channel_args.h +4 -0
- data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
- data/src/ruby/ext/grpc/rb_event_thread.c +22 -6
- data/src/ruby/ext/grpc/rb_event_thread.h +1 -0
- data/src/ruby/ext/grpc/rb_grpc.c +192 -30
- data/src/ruby/ext/grpc/rb_grpc.h +8 -2
- data/src/ruby/ext/grpc/rb_server.c +62 -45
- data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +24 -13
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +24 -3
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +25 -111
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +25 -2
- data/third_party/boringssl-with-bazel/err_data.c +552 -552
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +34 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +4 -1
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +7 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +19 -1
- data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +8 -1
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +28 -185
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +3 -7
- data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +49 -46
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_64_adx.c +18 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +2809 -7417
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +27 -5
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +20 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +110 -72
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +4 -3
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +15 -14
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +13 -10
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +35 -12
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +3 -7
- data/third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +7 -6
- data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +34 -72
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +12 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +5 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +12 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +17 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +51 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +5 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/builtin_curves.h +277 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +180 -404
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +24 -57
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +33 -71
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +18 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +15 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +9 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +24 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +11 -27
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +9 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hkdf/hkdf.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +40 -26
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +21 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +38 -19
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +2 -29
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +55 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +33 -52
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +3 -8
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +198 -79
- data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +5 -4
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +7 -8
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -23
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +8 -5
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +7 -6
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c +6 -12
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/getentropy.c +48 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{fuchsia.c → ios.c} +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/{refcount_no_threads.c → rand_extra/trusty.c} +15 -19
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +41 -19
- data/third_party/boringssl-with-bazel/src/crypto/{refcount_c11.c → refcount.c} +11 -17
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +147 -72
- data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +0 -8
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +6 -35
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +5 -26
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +14 -18
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +54 -143
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +7 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +8 -12
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +19 -20
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -15
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +2 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +4 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +4 -119
- data/third_party/boringssl-with-bazel/src/include/openssl/asm_base.h +207 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -116
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +0 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +5 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +0 -21
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +21 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +19 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +11 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +13 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +0 -61
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +127 -81
- data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +224 -209
- data/third_party/boringssl-with-bazel/src/include/openssl/target.h +154 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +1 -29
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +4 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +3 -2
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +9 -65
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +20 -20
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -11
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +24 -18
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +37 -30
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +125 -26
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -3
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_adx.h +691 -0
- data/third_party/upb/upb/collections/map.c +3 -3
- metadata +27 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +0 -42
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h +0 -64
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +0 -177
- data/src/core/ext/transport/chttp2/transport/stream_map.h +0 -68
- data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +0 -89
@@ -32,6 +32,9 @@
|
|
32
32
|
#include <vector>
|
33
33
|
|
34
34
|
#include "absl/base/attributes.h"
|
35
|
+
#include "absl/container/flat_hash_map.h"
|
36
|
+
#include "absl/hash/hash.h"
|
37
|
+
#include "absl/meta/type_traits.h"
|
35
38
|
#include "absl/status/status.h"
|
36
39
|
#include "absl/strings/cord.h"
|
37
40
|
#include "absl/strings/str_cat.h"
|
@@ -58,7 +61,6 @@
|
|
58
61
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
59
62
|
#include "src/core/ext/transport/chttp2/transport/http_trace.h"
|
60
63
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
61
|
-
#include "src/core/ext/transport/chttp2/transport/stream_map.h"
|
62
64
|
#include "src/core/ext/transport/chttp2/transport/varint.h"
|
63
65
|
#include "src/core/lib/channel/call_tracer.h"
|
64
66
|
#include "src/core/lib/channel/channel_args.h"
|
@@ -106,36 +108,25 @@
|
|
106
108
|
#define DEFAULT_MAX_HEADER_LIST_SIZE (16 * 1024)
|
107
109
|
#define DEFAULT_MAX_HEADER_LIST_SIZE_SOFT_LIMIT (8 * 1024)
|
108
110
|
|
109
|
-
#define DEFAULT_CLIENT_KEEPALIVE_TIME_MS INT_MAX
|
110
|
-
#define DEFAULT_CLIENT_KEEPALIVE_TIMEOUT_MS 20000 // 20 seconds
|
111
|
-
#define DEFAULT_SERVER_KEEPALIVE_TIME_MS 7200000 // 2 hours
|
112
|
-
#define DEFAULT_SERVER_KEEPALIVE_TIMEOUT_MS 20000 // 20 seconds
|
113
|
-
#define DEFAULT_KEEPALIVE_PERMIT_WITHOUT_CALLS false
|
114
111
|
#define KEEPALIVE_TIME_BACKOFF_MULTIPLIER 2
|
115
112
|
|
116
|
-
#define DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS 300000 // 5 minutes
|
117
|
-
#define DEFAULT_MAX_PINGS_BETWEEN_DATA 2
|
118
|
-
#define DEFAULT_MAX_PING_STRIKES 2
|
119
|
-
|
120
113
|
#define DEFAULT_MAX_PENDING_INDUCED_FRAMES 10000
|
121
114
|
|
122
|
-
static
|
123
|
-
|
124
|
-
static
|
125
|
-
|
126
|
-
static
|
127
|
-
|
128
|
-
static
|
129
|
-
|
130
|
-
static bool g_default_client_keepalive_permit_without_calls =
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
static int
|
136
|
-
|
137
|
-
static int g_default_max_pings_without_data = DEFAULT_MAX_PINGS_BETWEEN_DATA;
|
138
|
-
static int g_default_max_ping_strikes = DEFAULT_MAX_PING_STRIKES;
|
115
|
+
static grpc_core::Duration g_default_client_keepalive_time =
|
116
|
+
grpc_core::Duration::Infinity();
|
117
|
+
static grpc_core::Duration g_default_client_keepalive_timeout =
|
118
|
+
grpc_core::Duration::Seconds(20);
|
119
|
+
static grpc_core::Duration g_default_server_keepalive_time =
|
120
|
+
grpc_core::Duration::Hours(2);
|
121
|
+
static grpc_core::Duration g_default_server_keepalive_timeout =
|
122
|
+
grpc_core::Duration::Seconds(20);
|
123
|
+
static bool g_default_client_keepalive_permit_without_calls = false;
|
124
|
+
static bool g_default_server_keepalive_permit_without_calls = false;
|
125
|
+
|
126
|
+
static grpc_core::Duration g_default_min_recv_ping_interval_without_data =
|
127
|
+
grpc_core::Duration::Minutes(5);
|
128
|
+
static int g_default_max_pings_without_data = 2;
|
129
|
+
static int g_default_max_ping_strikes = 2;
|
139
130
|
|
140
131
|
#define MAX_CLIENT_STREAM_ID 0x7fffffffu
|
141
132
|
grpc_core::TraceFlag grpc_keepalive_trace(false, "http_keepalive");
|
@@ -315,10 +306,7 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
|
|
315
306
|
GPR_ASSERT(lists[i].tail == nullptr);
|
316
307
|
}
|
317
308
|
|
318
|
-
GPR_ASSERT(
|
319
|
-
|
320
|
-
grpc_chttp2_stream_map_destroy(&stream_map);
|
321
|
-
|
309
|
+
GPR_ASSERT(stream_map.empty());
|
322
310
|
GRPC_COMBINER_UNREF(combiner, "chttp2_transport");
|
323
311
|
|
324
312
|
cancel_pings(this, GRPC_ERROR_CREATE("Transport destroyed"));
|
@@ -369,26 +357,32 @@ static void read_channel_args(grpc_chttp2_transport* t,
|
|
369
357
|
channel_args
|
370
358
|
.GetDurationFromIntMillis(
|
371
359
|
GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)
|
372
|
-
.value_or(
|
373
|
-
g_default_min_recv_ping_interval_without_data_ms)));
|
360
|
+
.value_or(g_default_min_recv_ping_interval_without_data));
|
374
361
|
t->write_buffer_size =
|
375
362
|
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)
|
376
363
|
.value_or(grpc_core::chttp2::kDefaultWindow));
|
377
364
|
t->keepalive_time =
|
378
365
|
std::max(grpc_core::Duration::Milliseconds(1),
|
379
366
|
channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIME_MS)
|
380
|
-
.value_or(
|
381
|
-
|
382
|
-
: g_default_server_keepalive_time_ms)));
|
367
|
+
.value_or(t->is_client ? g_default_client_keepalive_time
|
368
|
+
: g_default_server_keepalive_time));
|
383
369
|
t->keepalive_timeout = std::max(
|
384
370
|
grpc_core::Duration::Zero(),
|
385
371
|
channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIMEOUT_MS)
|
386
|
-
.value_or(
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
372
|
+
.value_or(t->is_client ? g_default_client_keepalive_timeout
|
373
|
+
: g_default_server_keepalive_timeout));
|
374
|
+
if (grpc_core::IsKeepaliveFixEnabled()) {
|
375
|
+
t->keepalive_permit_without_calls =
|
376
|
+
channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
|
377
|
+
.value_or(t->is_client
|
378
|
+
? g_default_client_keepalive_permit_without_calls
|
379
|
+
: g_default_server_keepalive_permit_without_calls);
|
380
|
+
} else {
|
381
|
+
t->keepalive_permit_without_calls =
|
382
|
+
channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
|
383
|
+
.value_or(false);
|
384
|
+
}
|
385
|
+
|
392
386
|
// Only send the prefered rx frame size http2 setting if we are instructed
|
393
387
|
// to auto size the buffers allocated at tcp level and we also can adjust
|
394
388
|
// sending frame size.
|
@@ -512,40 +506,6 @@ static void read_channel_args(grpc_chttp2_transport* t,
|
|
512
506
|
}
|
513
507
|
}
|
514
508
|
|
515
|
-
static void init_transport_keepalive_settings(grpc_chttp2_transport* t) {
|
516
|
-
if (t->is_client) {
|
517
|
-
t->keepalive_time = g_default_client_keepalive_time_ms == INT_MAX
|
518
|
-
? grpc_core::Duration::Infinity()
|
519
|
-
: grpc_core::Duration::Milliseconds(
|
520
|
-
g_default_client_keepalive_time_ms);
|
521
|
-
t->keepalive_timeout = g_default_client_keepalive_timeout_ms == INT_MAX
|
522
|
-
? grpc_core::Duration::Infinity()
|
523
|
-
: grpc_core::Duration::Milliseconds(
|
524
|
-
g_default_client_keepalive_timeout_ms);
|
525
|
-
t->keepalive_permit_without_calls =
|
526
|
-
g_default_client_keepalive_permit_without_calls;
|
527
|
-
} else {
|
528
|
-
t->keepalive_time = g_default_server_keepalive_time_ms == INT_MAX
|
529
|
-
? grpc_core::Duration::Infinity()
|
530
|
-
: grpc_core::Duration::Milliseconds(
|
531
|
-
g_default_server_keepalive_time_ms);
|
532
|
-
t->keepalive_timeout = g_default_server_keepalive_timeout_ms == INT_MAX
|
533
|
-
? grpc_core::Duration::Infinity()
|
534
|
-
: grpc_core::Duration::Milliseconds(
|
535
|
-
g_default_server_keepalive_timeout_ms);
|
536
|
-
t->keepalive_permit_without_calls =
|
537
|
-
g_default_server_keepalive_permit_without_calls;
|
538
|
-
}
|
539
|
-
}
|
540
|
-
|
541
|
-
static void configure_transport_ping_policy(grpc_chttp2_transport* t) {
|
542
|
-
t->ping_policy.max_pings_without_data = g_default_max_pings_without_data;
|
543
|
-
t->ping_policy.max_ping_strikes = g_default_max_ping_strikes;
|
544
|
-
t->ping_policy.min_recv_ping_interval_without_data =
|
545
|
-
grpc_core::Duration::Milliseconds(
|
546
|
-
g_default_min_recv_ping_interval_without_data_ms);
|
547
|
-
}
|
548
|
-
|
549
509
|
static void init_keepalive_pings_if_enabled_locked(
|
550
510
|
void* arg, GRPC_UNUSED grpc_error_handle error) {
|
551
511
|
GPR_DEBUG_ASSERT(error.ok());
|
@@ -598,12 +558,6 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
598
558
|
GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
|
599
559
|
GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
|
600
560
|
base.vtable = get_vtable();
|
601
|
-
// 8 is a random stab in the dark as to a good initial size: it's small enough
|
602
|
-
// that it shouldn't waste memory for infrequently used connections, yet
|
603
|
-
// large enough that the exponential growth should happen nicely when it's
|
604
|
-
// needed.
|
605
|
-
// TODO(ctiller): tune this
|
606
|
-
grpc_chttp2_stream_map_init(&stream_map, 8);
|
607
561
|
|
608
562
|
grpc_slice_buffer_init(&read_buffer);
|
609
563
|
grpc_slice_buffer_init(&outbuf);
|
@@ -632,9 +586,6 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
632
586
|
queue_setting_update(this,
|
633
587
|
GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA, 1);
|
634
588
|
|
635
|
-
configure_transport_ping_policy(this);
|
636
|
-
init_transport_keepalive_settings(this);
|
637
|
-
|
638
589
|
read_channel_args(this, channel_args, is_client);
|
639
590
|
|
640
591
|
// No pings allowed before receiving a header or data frame.
|
@@ -813,7 +764,7 @@ grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
|
|
813
764
|
this, id, server_data);
|
814
765
|
}
|
815
766
|
*t->accepting_stream = this;
|
816
|
-
|
767
|
+
t->stream_map.emplace(id, this);
|
817
768
|
post_destructive_reclaimer(t);
|
818
769
|
}
|
819
770
|
|
@@ -835,7 +786,7 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
|
|
835
786
|
|
836
787
|
GPR_ASSERT((write_closed && read_closed) || id == 0);
|
837
788
|
if (id != 0) {
|
838
|
-
GPR_ASSERT(
|
789
|
+
GPR_ASSERT(t->stream_map.count(id) == 0);
|
839
790
|
}
|
840
791
|
|
841
792
|
grpc_slice_buffer_destroy(&frame_storage);
|
@@ -1076,7 +1027,7 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
|
|
1076
1027
|
if (t->sent_goaway_state == GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED) {
|
1077
1028
|
t->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SENT;
|
1078
1029
|
closed = true;
|
1079
|
-
if (
|
1030
|
+
if (t->stream_map.empty()) {
|
1080
1031
|
close_transport_locked(t, GRPC_ERROR_CREATE("goaway sent"));
|
1081
1032
|
}
|
1082
1033
|
}
|
@@ -1169,19 +1120,18 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
|
1169
1120
|
if (t->is_client) {
|
1170
1121
|
cancel_unstarted_streams(t, t->goaway_error);
|
1171
1122
|
// Cancel all unseen streams
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1184
|
-
&last_stream_id);
|
1123
|
+
std::vector<grpc_chttp2_stream*> to_cancel;
|
1124
|
+
for (auto id_stream : t->stream_map) {
|
1125
|
+
if (id_stream.first > last_stream_id) {
|
1126
|
+
to_cancel.push_back(id_stream.second);
|
1127
|
+
}
|
1128
|
+
}
|
1129
|
+
for (auto s : to_cancel) {
|
1130
|
+
s->trailing_metadata_buffer.Set(
|
1131
|
+
grpc_core::GrpcStreamNetworkState(),
|
1132
|
+
grpc_core::GrpcStreamNetworkState::kNotSeenByServer);
|
1133
|
+
grpc_chttp2_cancel_stream(s->t, s, s->t->goaway_error);
|
1134
|
+
}
|
1185
1135
|
}
|
1186
1136
|
absl::Status status = grpc_error_to_absl_status(t->goaway_error);
|
1187
1137
|
// When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
|
@@ -1225,7 +1175,7 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
|
1225
1175
|
// start streams where we have free grpc_chttp2_stream ids and free
|
1226
1176
|
// * concurrency
|
1227
1177
|
while (t->next_stream_id <= MAX_CLIENT_STREAM_ID &&
|
1228
|
-
|
1178
|
+
t->stream_map.size() <
|
1229
1179
|
t->settings[GRPC_PEER_SETTINGS]
|
1230
1180
|
[GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] &&
|
1231
1181
|
grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
|
@@ -1246,7 +1196,7 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
|
1246
1196
|
"no_more_stream_ids");
|
1247
1197
|
}
|
1248
1198
|
|
1249
|
-
|
1199
|
+
t->stream_map.emplace(s->id, s);
|
1250
1200
|
post_destructive_reclaimer(t);
|
1251
1201
|
grpc_chttp2_mark_stream_writable(t, s);
|
1252
1202
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_START_NEW_STREAM);
|
@@ -1648,6 +1598,8 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
|
|
1648
1598
|
}
|
1649
1599
|
|
1650
1600
|
static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
|
1601
|
+
GRPC_CHTTP2_IF_TRACING(gpr_log(GPR_INFO, "%p CANCEL PINGS: %s", t,
|
1602
|
+
grpc_core::StatusToString(error).c_str()));
|
1651
1603
|
// callback remaining pings: they're not allowed to call into the transport,
|
1652
1604
|
// and maybe they hold resources that need to be freed
|
1653
1605
|
grpc_chttp2_ping_queue* pq = &t->ping_queue;
|
@@ -1859,8 +1811,9 @@ static void send_goaway(grpc_chttp2_transport* t, grpc_error_handle error,
|
|
1859
1811
|
} else if (t->sent_goaway_state == GRPC_CHTTP2_NO_GOAWAY_SEND ||
|
1860
1812
|
t->sent_goaway_state == GRPC_CHTTP2_GRACEFUL_GOAWAY) {
|
1861
1813
|
// We want to log this irrespective of whether http tracing is enabled
|
1862
|
-
gpr_log(GPR_DEBUG, "%s: Sending goaway err=%s",
|
1814
|
+
gpr_log(GPR_DEBUG, "%s %s: Sending goaway last_new_stream_id=%d err=%s",
|
1863
1815
|
std::string(t->peer_string.as_string_view()).c_str(),
|
1816
|
+
t->is_client ? "CLIENT" : "SERVER", t->last_new_stream_id,
|
1864
1817
|
grpc_core::StatusToString(error).c_str());
|
1865
1818
|
t->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED;
|
1866
1819
|
grpc_chttp2_goaway_append(
|
@@ -2092,15 +2045,14 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
|
|
2092
2045
|
|
2093
2046
|
static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
|
2094
2047
|
grpc_error_handle error) {
|
2095
|
-
grpc_chttp2_stream* s =
|
2096
|
-
grpc_chttp2_stream_map_delete(&t->stream_map, id));
|
2048
|
+
grpc_chttp2_stream* s = t->stream_map.extract(id).mapped();
|
2097
2049
|
GPR_DEBUG_ASSERT(s);
|
2098
2050
|
if (t->incoming_stream == s) {
|
2099
2051
|
t->incoming_stream = nullptr;
|
2100
2052
|
grpc_chttp2_parsing_become_skip_parser(t);
|
2101
2053
|
}
|
2102
2054
|
|
2103
|
-
if (
|
2055
|
+
if (t->stream_map.empty()) {
|
2104
2056
|
post_benign_reclaimer(t);
|
2105
2057
|
if (t->sent_goaway_state == GRPC_CHTTP2_FINAL_GOAWAY_SENT) {
|
2106
2058
|
close_transport_locked(
|
@@ -2239,7 +2191,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
|
|
2239
2191
|
(close_reads && close_writes)
|
2240
2192
|
? "read+write"
|
2241
2193
|
: (close_reads ? "read" : (close_writes ? "write" : "nothing??")),
|
2242
|
-
error
|
2194
|
+
grpc_core::StatusToString(error).c_str());
|
2243
2195
|
}
|
2244
2196
|
if (s->read_closed && s->write_closed) {
|
2245
2197
|
// already closed, but we should still fake the status if needed.
|
@@ -2451,17 +2403,6 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2451
2403
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_CLOSE_FROM_API);
|
2452
2404
|
}
|
2453
2405
|
|
2454
|
-
struct cancel_stream_cb_args {
|
2455
|
-
grpc_error_handle error;
|
2456
|
-
grpc_chttp2_transport* t;
|
2457
|
-
};
|
2458
|
-
|
2459
|
-
static void cancel_stream_cb(void* user_data, uint32_t /*key*/, void* stream) {
|
2460
|
-
cancel_stream_cb_args* args = static_cast<cancel_stream_cb_args*>(user_data);
|
2461
|
-
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(stream);
|
2462
|
-
grpc_chttp2_cancel_stream(args->t, s, args->error);
|
2463
|
-
}
|
2464
|
-
|
2465
2406
|
static void end_all_the_calls(grpc_chttp2_transport* t,
|
2466
2407
|
grpc_error_handle error) {
|
2467
2408
|
intptr_t http2_error;
|
@@ -2473,8 +2414,13 @@ static void end_all_the_calls(grpc_chttp2_transport* t,
|
|
2473
2414
|
GRPC_STATUS_UNAVAILABLE);
|
2474
2415
|
}
|
2475
2416
|
cancel_unstarted_streams(t, error);
|
2476
|
-
|
2477
|
-
|
2417
|
+
std::vector<grpc_chttp2_stream*> to_cancel;
|
2418
|
+
for (auto id_stream : t->stream_map) {
|
2419
|
+
to_cancel.push_back(id_stream.second);
|
2420
|
+
}
|
2421
|
+
for (auto s : to_cancel) {
|
2422
|
+
grpc_chttp2_cancel_stream(t, s, error);
|
2423
|
+
}
|
2478
2424
|
}
|
2479
2425
|
|
2480
2426
|
//
|
@@ -2749,61 +2695,61 @@ static void next_bdp_ping_timer_expired_locked(
|
|
2749
2695
|
|
2750
2696
|
void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
|
2751
2697
|
bool is_client) {
|
2752
|
-
|
2753
|
-
|
2754
|
-
|
2755
|
-
|
2756
|
-
|
2757
|
-
|
2758
|
-
|
2759
|
-
|
2760
|
-
|
2761
|
-
|
2762
|
-
|
2763
|
-
|
2764
|
-
|
2765
|
-
|
2766
|
-
|
2767
|
-
|
2768
|
-
|
2769
|
-
|
2770
|
-
|
2771
|
-
|
2772
|
-
|
2773
|
-
|
2774
|
-
|
2775
|
-
|
2776
|
-
|
2777
|
-
|
2778
|
-
const bool value = static_cast<uint32_t>(grpc_channel_arg_get_integer(
|
2779
|
-
&args->args[i],
|
2780
|
-
{is_client ? g_default_client_keepalive_permit_without_calls
|
2781
|
-
: g_default_server_keepalive_timeout_ms,
|
2782
|
-
0, 1}));
|
2783
|
-
if (is_client) {
|
2784
|
-
g_default_client_keepalive_permit_without_calls = value;
|
2785
|
-
} else {
|
2786
|
-
g_default_server_keepalive_permit_without_calls = value;
|
2787
|
-
}
|
2788
|
-
} else if (0 ==
|
2789
|
-
strcmp(args->args[i].key, GRPC_ARG_HTTP2_MAX_PING_STRIKES)) {
|
2790
|
-
g_default_max_ping_strikes = grpc_channel_arg_get_integer(
|
2791
|
-
&args->args[i], {g_default_max_ping_strikes, 0, INT_MAX});
|
2792
|
-
} else if (0 == strcmp(args->args[i].key,
|
2793
|
-
GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)) {
|
2794
|
-
g_default_max_pings_without_data = grpc_channel_arg_get_integer(
|
2795
|
-
&args->args[i], {g_default_max_pings_without_data, 0, INT_MAX});
|
2796
|
-
} else if (0 ==
|
2797
|
-
strcmp(
|
2798
|
-
args->args[i].key,
|
2799
|
-
GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)) {
|
2800
|
-
g_default_min_recv_ping_interval_without_data_ms =
|
2801
|
-
grpc_channel_arg_get_integer(
|
2802
|
-
&args->args[i],
|
2803
|
-
{g_default_min_recv_ping_interval_without_data_ms, 0, INT_MAX});
|
2804
|
-
}
|
2805
|
-
}
|
2698
|
+
grpc_chttp2_config_default_keepalive_args(grpc_core::ChannelArgs::FromC(args),
|
2699
|
+
is_client);
|
2700
|
+
}
|
2701
|
+
|
2702
|
+
void grpc_chttp2_config_default_keepalive_args(
|
2703
|
+
const grpc_core::ChannelArgs& channel_args, bool is_client) {
|
2704
|
+
const auto keepalive_time =
|
2705
|
+
std::max(grpc_core::Duration::Milliseconds(1),
|
2706
|
+
channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIME_MS)
|
2707
|
+
.value_or(is_client ? g_default_client_keepalive_time
|
2708
|
+
: g_default_server_keepalive_time));
|
2709
|
+
if (is_client) {
|
2710
|
+
g_default_client_keepalive_time = keepalive_time;
|
2711
|
+
} else {
|
2712
|
+
g_default_server_keepalive_time = keepalive_time;
|
2713
|
+
}
|
2714
|
+
|
2715
|
+
const auto keepalive_timeout = std::max(
|
2716
|
+
grpc_core::Duration::Zero(),
|
2717
|
+
channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIMEOUT_MS)
|
2718
|
+
.value_or(is_client ? g_default_client_keepalive_timeout
|
2719
|
+
: g_default_server_keepalive_timeout));
|
2720
|
+
if (is_client) {
|
2721
|
+
g_default_client_keepalive_timeout = keepalive_timeout;
|
2722
|
+
} else {
|
2723
|
+
g_default_server_keepalive_timeout = keepalive_timeout;
|
2806
2724
|
}
|
2725
|
+
|
2726
|
+
const bool keepalive_permit_without_calls =
|
2727
|
+
channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
|
2728
|
+
.value_or(is_client
|
2729
|
+
? g_default_client_keepalive_permit_without_calls
|
2730
|
+
: g_default_server_keepalive_permit_without_calls);
|
2731
|
+
if (is_client) {
|
2732
|
+
g_default_client_keepalive_permit_without_calls =
|
2733
|
+
keepalive_permit_without_calls;
|
2734
|
+
} else {
|
2735
|
+
g_default_server_keepalive_permit_without_calls =
|
2736
|
+
keepalive_permit_without_calls;
|
2737
|
+
}
|
2738
|
+
|
2739
|
+
g_default_max_ping_strikes =
|
2740
|
+
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PING_STRIKES)
|
2741
|
+
.value_or(g_default_max_ping_strikes));
|
2742
|
+
|
2743
|
+
g_default_max_pings_without_data =
|
2744
|
+
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)
|
2745
|
+
.value_or(g_default_max_pings_without_data));
|
2746
|
+
|
2747
|
+
g_default_min_recv_ping_interval_without_data =
|
2748
|
+
std::max(grpc_core::Duration::Zero(),
|
2749
|
+
channel_args
|
2750
|
+
.GetDurationFromIntMillis(
|
2751
|
+
GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)
|
2752
|
+
.value_or(g_default_min_recv_ping_interval_without_data));
|
2807
2753
|
}
|
2808
2754
|
|
2809
2755
|
static void init_keepalive_ping(grpc_chttp2_transport* t) {
|
@@ -2822,8 +2768,7 @@ static void init_keepalive_ping_locked(void* arg,
|
|
2822
2768
|
if (t->destroying || !t->closed_with_error.ok()) {
|
2823
2769
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
|
2824
2770
|
} else {
|
2825
|
-
if (t->keepalive_permit_without_calls ||
|
2826
|
-
grpc_chttp2_stream_map_size(&t->stream_map) > 0) {
|
2771
|
+
if (t->keepalive_permit_without_calls || !t->stream_map.empty()) {
|
2827
2772
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_PINGING;
|
2828
2773
|
GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive ping end");
|
2829
2774
|
send_keepalive_ping_locked(t);
|
@@ -2976,8 +2921,9 @@ static void connectivity_state_set(grpc_chttp2_transport* t,
|
|
2976
2921
|
grpc_connectivity_state state,
|
2977
2922
|
const absl::Status& status,
|
2978
2923
|
const char* reason) {
|
2979
|
-
GRPC_CHTTP2_IF_TRACING(
|
2980
|
-
|
2924
|
+
GRPC_CHTTP2_IF_TRACING(gpr_log(
|
2925
|
+
GPR_INFO, "transport %p set connectivity_state=%d; status=%s; reason=%s",
|
2926
|
+
t, state, status.ToString().c_str(), reason));
|
2981
2927
|
t->state_tracker.SetState(state, status, reason);
|
2982
2928
|
}
|
2983
2929
|
|
@@ -3044,7 +2990,7 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
|
|
3044
2990
|
|
3045
2991
|
static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
|
3046
2992
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
3047
|
-
if (error.ok() &&
|
2993
|
+
if (error.ok() && t->stream_map.empty()) {
|
3048
2994
|
// Channel with no active streams: send a goaway to try and make it
|
3049
2995
|
// disconnect cleanly
|
3050
2996
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
@@ -3061,7 +3007,7 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3061
3007
|
"HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
|
3062
3008
|
" streams",
|
3063
3009
|
std::string(t->peer_string.as_string_view()).c_str(),
|
3064
|
-
|
3010
|
+
t->stream_map.size());
|
3065
3011
|
}
|
3066
3012
|
t->benign_reclaimer_registered = false;
|
3067
3013
|
if (error != absl::CancelledError()) {
|
@@ -3072,11 +3018,10 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3072
3018
|
|
3073
3019
|
static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
|
3074
3020
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
3075
|
-
size_t n = grpc_chttp2_stream_map_size(&t->stream_map);
|
3076
3021
|
t->destructive_reclaimer_registered = false;
|
3077
|
-
if (error.ok() &&
|
3078
|
-
|
3079
|
-
|
3022
|
+
if (error.ok() && !t->stream_map.empty()) {
|
3023
|
+
// As stream_map is a hash map, this selects effectively a random stream.
|
3024
|
+
grpc_chttp2_stream* s = t->stream_map.begin()->second;
|
3080
3025
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
3081
3026
|
gpr_log(GPR_INFO, "HTTP2: %s - abandon stream id %d",
|
3082
3027
|
std::string(t->peer_string.as_string_view()).c_str(), s->id);
|
@@ -3086,7 +3031,7 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3086
3031
|
grpc_error_set_int(GRPC_ERROR_CREATE("Buffers full"),
|
3087
3032
|
grpc_core::StatusIntProperty::kHttp2Error,
|
3088
3033
|
GRPC_HTTP2_ENHANCE_YOUR_CALM));
|
3089
|
-
if (
|
3034
|
+
if (!t->stream_map.empty()) {
|
3090
3035
|
// Since we cancel one stream per destructive reclamation, if
|
3091
3036
|
// there are more streams left, we can immediately post a new
|
3092
3037
|
// reclaimer in case the resource quota needs to free more
|