grpc 1.31.0.pre1 → 1.33.0.pre1
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 +693 -16022
- data/include/grpc/grpc.h +0 -5
- data/include/grpc/grpc_security.h +47 -14
- data/include/grpc/impl/codegen/README.md +22 -0
- data/include/grpc/impl/codegen/grpc_types.h +0 -5
- data/include/grpc/impl/codegen/port_platform.h +6 -1
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +264 -186
- data/src/core/ext/filters/client_channel/client_channel.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
- data/src/core/ext/filters/client_channel/config_selector.cc +0 -4
- data/src/core/ext/filters/client_channel/config_selector.h +34 -5
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -1
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +9 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +126 -119
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +21 -15
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +32 -13
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +8 -7
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -32
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +26 -16
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +207 -129
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +453 -255
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +571 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +727 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +602 -58
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +8 -39
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +4 -3
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +49 -47
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +5 -9
- data/src/core/ext/filters/client_channel/server_address.cc +120 -7
- data/src/core/ext/filters/client_channel/server_address.h +48 -21
- data/src/core/ext/filters/client_channel/service_config.cc +16 -13
- data/src/core/ext/filters/client_channel/service_config.h +7 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/service_config_parser.cc +8 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +8 -5
- data/src/core/ext/filters/client_channel/subchannel.cc +64 -23
- data/src/core/ext/filters/client_channel/subchannel.h +16 -4
- data/src/core/ext/filters/client_channel/subchannel_interface.h +44 -0
- data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +2 -1
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +19 -25
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +256 -287
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +11 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +10 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +10 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +17 -30
- data/src/core/ext/transport/chttp2/transport/writing.cc +6 -5
- data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +244 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +766 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +458 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1635 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +379 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +310 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +351 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +133 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +752 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +176 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +645 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +36 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +85 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
- data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +128 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +467 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +155 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +539 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +178 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +616 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +900 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3290 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +139 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +364 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1336 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +110 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +387 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +76 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +214 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +147 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +570 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +139 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +449 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +54 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +133 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
- data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
- data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
- data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
- data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
- data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +753 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +57 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +28 -0
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +53 -0
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +52 -0
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +129 -0
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +42 -0
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +77 -0
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +36 -0
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +85 -0
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +54 -0
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +160 -0
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +36 -0
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +84 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
- data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
- data/src/core/ext/xds/certificate_provider_factory.h +59 -0
- data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
- data/src/core/ext/xds/certificate_provider_registry.h +57 -0
- data/src/core/ext/xds/certificate_provider_store.h +50 -0
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +377 -0
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +102 -0
- data/src/core/ext/xds/xds_api.cc +2596 -0
- data/src/core/ext/xds/xds_api.h +397 -0
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +44 -2
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +9 -6
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +541 -785
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +114 -93
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +20 -14
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +36 -8
- data/src/core/lib/channel/channel_args.h +0 -1
- data/src/core/lib/channel/channelz.cc +24 -60
- data/src/core/lib/channel/channelz.h +12 -20
- data/src/core/lib/channel/channelz_registry.cc +15 -12
- data/src/core/lib/channel/channelz_registry.h +3 -0
- data/src/core/lib/gpr/sync_posix.cc +2 -8
- data/src/core/lib/gpr/time_precise.cc +2 -0
- data/src/core/lib/gpr/time_precise.h +6 -2
- data/src/core/lib/gprpp/dual_ref_counted.h +336 -0
- data/src/core/lib/gprpp/ref_counted.h +51 -22
- data/src/core/lib/gprpp/ref_counted_ptr.h +153 -0
- data/src/core/lib/iomgr/endpoint.cc +5 -1
- data/src/core/lib/iomgr/endpoint.h +7 -3
- data/src/core/lib/iomgr/endpoint_cfstream.cc +36 -11
- data/src/core/lib/iomgr/ev_posix.cc +0 -2
- data/src/core/lib/iomgr/exec_ctx.h +10 -8
- data/src/core/lib/iomgr/iomgr.cc +0 -10
- data/src/core/lib/iomgr/iomgr.h +0 -10
- data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
- data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
- data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
- data/src/core/lib/iomgr/tcp_custom.cc +32 -16
- data/src/core/lib/iomgr/tcp_posix.cc +31 -13
- data/src/core/lib/iomgr/tcp_windows.cc +26 -10
- data/src/core/lib/json/json_util.cc +58 -0
- data/src/core/lib/json/json_util.h +37 -0
- data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
- data/src/core/lib/security/authorization/authorization_engine.h +84 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
- data/src/core/lib/security/authorization/evaluate_args.h +59 -0
- data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
- data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
- data/src/core/lib/security/certificate_provider.h +60 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +321 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +214 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +45 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.h +51 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -12
- data/src/core/lib/security/security_connector/ssl_utils.h +5 -0
- data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
- data/src/core/lib/surface/call.cc +12 -12
- data/src/core/lib/surface/call.h +2 -1
- data/src/core/lib/surface/channel.cc +37 -51
- data/src/core/lib/surface/channel.h +18 -3
- data/src/core/lib/surface/completion_queue.cc +10 -272
- data/src/core/lib/surface/completion_queue.h +0 -8
- data/src/core/lib/surface/init.cc +27 -12
- data/src/core/lib/surface/server.cc +1066 -1244
- data/src/core/lib/surface/server.h +363 -87
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/authority_override.cc +38 -0
- data/src/core/lib/transport/authority_override.h +32 -0
- data/src/core/lib/transport/bdp_estimator.h +2 -1
- data/src/core/lib/transport/connectivity_state.cc +18 -13
- data/src/core/lib/transport/connectivity_state.h +20 -8
- data/src/core/lib/transport/error_utils.cc +13 -0
- data/src/core/lib/transport/error_utils.h +6 -0
- data/src/core/lib/transport/metadata.cc +11 -1
- data/src/core/lib/transport/static_metadata.cc +295 -276
- data/src/core/lib/transport/static_metadata.h +80 -73
- data/src/core/lib/transport/transport.h +7 -0
- data/src/core/lib/uri/uri_parser.cc +23 -21
- data/src/core/lib/uri/uri_parser.h +3 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +35 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +22 -0
- data/src/core/tsi/ssl_transport_security.cc +2 -2
- data/src/ruby/bin/math_services_pb.rb +4 -4
- data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -4
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +7 -7
- data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
- data/src/ruby/spec/channel_credentials_spec.rb +10 -0
- data/src/ruby/spec/generic/active_call_spec.rb +19 -8
- data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +20 -0
- data/src/ruby/spec/user_agent_spec.rb +74 -0
- data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
- data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
- data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
- data/third_party/abseil-cpp/absl/status/status.cc +447 -0
- data/third_party/abseil-cpp/absl/status/status.h +428 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
- data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
- data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
- data/third_party/abseil-cpp/absl/types/variant.h +861 -0
- data/third_party/boringssl-with-bazel/err_data.c +475 -467
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +0 -6
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +30 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -15
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +543 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +237 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +44 -2
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +221 -49
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +64 -20
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +0 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +7 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +21 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +24 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +29 -35
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +13 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +7 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +55 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +12 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +4 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +48 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +26 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +199 -78
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +52 -43
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +18 -18
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +13 -9
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +10 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -2
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +4 -8
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +7 -2
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
- data/third_party/re2/re2/bitmap256.h +117 -0
- data/third_party/re2/re2/bitstate.cc +385 -0
- data/third_party/re2/re2/compile.cc +1279 -0
- data/third_party/re2/re2/dfa.cc +2130 -0
- data/third_party/re2/re2/filtered_re2.cc +121 -0
- data/third_party/re2/re2/filtered_re2.h +109 -0
- data/third_party/re2/re2/mimics_pcre.cc +197 -0
- data/third_party/re2/re2/nfa.cc +713 -0
- data/third_party/re2/re2/onepass.cc +623 -0
- data/third_party/re2/re2/parse.cc +2464 -0
- data/third_party/re2/re2/perl_groups.cc +119 -0
- data/third_party/re2/re2/pod_array.h +55 -0
- data/third_party/re2/re2/prefilter.cc +710 -0
- data/third_party/re2/re2/prefilter.h +108 -0
- data/third_party/re2/re2/prefilter_tree.cc +407 -0
- data/third_party/re2/re2/prefilter_tree.h +139 -0
- data/third_party/re2/re2/prog.cc +988 -0
- data/third_party/re2/re2/prog.h +436 -0
- data/third_party/re2/re2/re2.cc +1362 -0
- data/third_party/re2/re2/re2.h +1002 -0
- data/third_party/re2/re2/regexp.cc +980 -0
- data/third_party/re2/re2/regexp.h +659 -0
- data/third_party/re2/re2/set.cc +154 -0
- data/third_party/re2/re2/set.h +80 -0
- data/third_party/re2/re2/simplify.cc +657 -0
- data/third_party/re2/re2/sparse_array.h +392 -0
- data/third_party/re2/re2/sparse_set.h +264 -0
- data/third_party/re2/re2/stringpiece.cc +65 -0
- data/third_party/re2/re2/stringpiece.h +210 -0
- data/third_party/re2/re2/tostring.cc +351 -0
- data/third_party/re2/re2/unicode_casefold.cc +582 -0
- data/third_party/re2/re2/unicode_casefold.h +78 -0
- data/third_party/re2/re2/unicode_groups.cc +6269 -0
- data/third_party/re2/re2/unicode_groups.h +67 -0
- data/third_party/re2/re2/walker-inl.h +246 -0
- data/third_party/re2/util/benchmark.h +156 -0
- data/third_party/re2/util/flags.h +26 -0
- data/third_party/re2/util/logging.h +109 -0
- data/third_party/re2/util/malloc_counter.h +19 -0
- data/third_party/re2/util/mix.h +41 -0
- data/third_party/re2/util/mutex.h +148 -0
- data/third_party/re2/util/pcre.cc +1025 -0
- data/third_party/re2/util/pcre.h +681 -0
- data/third_party/re2/util/rune.cc +260 -0
- data/third_party/re2/util/strutil.cc +149 -0
- data/third_party/re2/util/strutil.h +21 -0
- data/third_party/re2/util/test.h +50 -0
- data/third_party/re2/util/utf.h +44 -0
- data/third_party/re2/util/util.h +42 -0
- data/third_party/upb/upb/decode.c +64 -15
- data/third_party/upb/upb/encode.c +2 -2
- data/third_party/upb/upb/msg.h +2 -2
- data/third_party/upb/upb/port_def.inc +1 -1
- data/third_party/upb/upb/table.c +0 -11
- data/third_party/upb/upb/table.int.h +0 -9
- data/third_party/upb/upb/upb.c +16 -14
- data/third_party/upb/upb/upb.h +26 -0
- data/third_party/upb/upb/upb.hpp +2 -0
- metadata +340 -153
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -528
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1142
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -2110
- data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -345
- data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
- data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -106
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
- data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -29
- data/src/core/lib/security/transport/target_authority_table.cc +0 -75
- data/src/core/lib/security/transport/target_authority_table.h +0 -40
- data/src/core/lib/slice/slice_hash_table.h +0 -199
- data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
@@ -24,12 +24,13 @@
|
|
24
24
|
#include <grpc/impl/codegen/grpc_types.h>
|
25
25
|
|
26
26
|
#include "src/core/lib/iomgr/error.h"
|
27
|
+
#include "src/core/lib/surface/server.h"
|
27
28
|
|
28
29
|
namespace grpc_core {
|
29
30
|
|
30
31
|
/// Adds a port to \a server. Sets \a port_num to the port number.
|
31
32
|
/// Takes ownership of \a args.
|
32
|
-
grpc_error* Chttp2ServerAddPort(
|
33
|
+
grpc_error* Chttp2ServerAddPort(Server* server, const char* addr,
|
33
34
|
grpc_channel_args* args, int* port_num);
|
34
35
|
|
35
36
|
} // namespace grpc_core
|
@@ -33,8 +33,8 @@ int grpc_server_add_insecure_http2_port(grpc_server* server, const char* addr) {
|
|
33
33
|
GRPC_API_TRACE("grpc_server_add_insecure_http2_port(server=%p, addr=%s)", 2,
|
34
34
|
(server, addr));
|
35
35
|
grpc_error* err = grpc_core::Chttp2ServerAddPort(
|
36
|
-
server, addr,
|
37
|
-
grpc_channel_args_copy(
|
36
|
+
server->core_server.get(), addr,
|
37
|
+
grpc_channel_args_copy(server->core_server->channel_args()), &port_num);
|
38
38
|
if (err != GRPC_ERROR_NONE) {
|
39
39
|
const char* msg = grpc_error_string(err);
|
40
40
|
gpr_log(GPR_ERROR, "%s", msg);
|
@@ -41,21 +41,21 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
|
|
41
41
|
GPR_ASSERT(reserved == nullptr);
|
42
42
|
|
43
43
|
grpc_core::ExecCtx exec_ctx;
|
44
|
+
grpc_core::Server* core_server = server->core_server.get();
|
44
45
|
|
46
|
+
const grpc_channel_args* server_args = core_server->channel_args();
|
45
47
|
std::string name = absl::StrCat("fd:", fd);
|
46
|
-
grpc_endpoint* server_endpoint =
|
47
|
-
|
48
|
-
grpc_server_get_channel_args(server), name.c_str());
|
48
|
+
grpc_endpoint* server_endpoint = grpc_tcp_create(
|
49
|
+
grpc_fd_create(fd, name.c_str(), true), server_args, name.c_str());
|
49
50
|
|
50
|
-
const grpc_channel_args* server_args = grpc_server_get_channel_args(server);
|
51
51
|
grpc_transport* transport = grpc_create_chttp2_transport(
|
52
52
|
server_args, server_endpoint, false /* is_client */);
|
53
53
|
|
54
|
-
for (grpc_pollset* pollset :
|
54
|
+
for (grpc_pollset* pollset : core_server->pollsets()) {
|
55
55
|
grpc_endpoint_add_to_pollset(server_endpoint, pollset);
|
56
56
|
}
|
57
57
|
|
58
|
-
|
58
|
+
core_server->SetupTransport(transport, nullptr, server_args, nullptr);
|
59
59
|
grpc_chttp2_transport_start_reading(transport, nullptr, nullptr);
|
60
60
|
}
|
61
61
|
|
@@ -68,10 +68,11 @@ int grpc_server_add_secure_http2_port(grpc_server* server, const char* addr,
|
|
68
68
|
args_to_add[0] = grpc_server_credentials_to_arg(creds);
|
69
69
|
args_to_add[1] = grpc_security_connector_to_arg(sc.get());
|
70
70
|
args =
|
71
|
-
grpc_channel_args_copy_and_add(
|
71
|
+
grpc_channel_args_copy_and_add(server->core_server->channel_args(),
|
72
72
|
args_to_add, GPR_ARRAY_SIZE(args_to_add));
|
73
73
|
// Add server port.
|
74
|
-
err = grpc_core::Chttp2ServerAddPort(server, addr, args,
|
74
|
+
err = grpc_core::Chttp2ServerAddPort(server->core_server.get(), addr, args,
|
75
|
+
&port_num);
|
75
76
|
done:
|
76
77
|
sc.reset(DEBUG_LOCATION, "server");
|
77
78
|
|
@@ -1,25 +1,25 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
*
|
17
|
-
*/
|
1
|
+
//
|
2
|
+
// Copyright 2018 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
18
16
|
|
19
17
|
#include <grpc/support/port_platform.h>
|
20
18
|
|
21
19
|
#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
|
22
20
|
|
21
|
+
#include "absl/strings/str_format.h"
|
22
|
+
|
23
23
|
#include <grpc/slice_buffer.h>
|
24
24
|
#include <grpc/support/alloc.h>
|
25
25
|
#include <grpc/support/log.h>
|
@@ -31,7 +31,6 @@
|
|
31
31
|
#include <stdio.h>
|
32
32
|
#include <string.h>
|
33
33
|
|
34
|
-
#include "absl/strings/str_format.h"
|
35
34
|
#include "src/core/ext/transport/chttp2/transport/context_list.h"
|
36
35
|
#include "src/core/ext/transport/chttp2/transport/frame_data.h"
|
37
36
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
@@ -103,7 +102,7 @@ grpc_core::TraceFlag grpc_keepalive_trace(false, "http_keepalive");
|
|
103
102
|
grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_refcount(false,
|
104
103
|
"chttp2_refcount");
|
105
104
|
|
106
|
-
|
105
|
+
// forward declarations of various callbacks that we'll build closures around
|
107
106
|
static void write_action_begin_locked(void* t, grpc_error* error);
|
108
107
|
static void write_action(void* t, grpc_error* error);
|
109
108
|
static void write_action_end(void* t, grpc_error* error);
|
@@ -115,18 +114,19 @@ static void continue_read_action_locked(grpc_chttp2_transport* t);
|
|
115
114
|
|
116
115
|
static void complete_fetch(void* gs, grpc_error* error);
|
117
116
|
static void complete_fetch_locked(void* gs, grpc_error* error);
|
118
|
-
|
117
|
+
// Set a transport level setting, and push it to our peer
|
119
118
|
static void queue_setting_update(grpc_chttp2_transport* t,
|
120
119
|
grpc_chttp2_setting_id id, uint32_t value);
|
121
120
|
|
122
121
|
static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
123
122
|
grpc_error* error);
|
124
123
|
|
125
|
-
|
124
|
+
// Start new streams that have been created if we can
|
126
125
|
static void maybe_start_some_streams(grpc_chttp2_transport* t);
|
127
126
|
|
128
127
|
static void connectivity_state_set(grpc_chttp2_transport* t,
|
129
128
|
grpc_connectivity_state state,
|
129
|
+
const absl::Status& status,
|
130
130
|
const char* reason);
|
131
131
|
|
132
132
|
static void benign_reclaimer(void* t, grpc_error* error);
|
@@ -140,7 +140,6 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t);
|
|
140
140
|
static void close_transport_locked(grpc_chttp2_transport* t, grpc_error* error);
|
141
141
|
static void end_all_the_calls(grpc_chttp2_transport* t, grpc_error* error);
|
142
142
|
|
143
|
-
static void schedule_bdp_ping_locked(grpc_chttp2_transport* t);
|
144
143
|
static void start_bdp_ping(void* tp, grpc_error* error);
|
145
144
|
static void finish_bdp_ping(void* tp, grpc_error* error);
|
146
145
|
static void start_bdp_ping_locked(void* tp, grpc_error* error);
|
@@ -154,7 +153,7 @@ static void send_ping_locked(grpc_chttp2_transport* t,
|
|
154
153
|
grpc_closure* on_complete);
|
155
154
|
static void retry_initiate_ping_locked(void* tp, grpc_error* error);
|
156
155
|
|
157
|
-
|
156
|
+
// keepalive-relevant functions
|
158
157
|
static void init_keepalive_ping(void* arg, grpc_error* error);
|
159
158
|
static void init_keepalive_ping_locked(void* arg, grpc_error* error);
|
160
159
|
static void start_keepalive_ping(void* arg, grpc_error* error);
|
@@ -170,9 +169,9 @@ static void reset_byte_stream(void* arg, grpc_error* error);
|
|
170
169
|
// GRPC_EXPERIMENTAL_DISABLE_FLOW_CONTROL
|
171
170
|
bool g_flow_control_enabled = true;
|
172
171
|
|
173
|
-
|
174
|
-
|
175
|
-
|
172
|
+
//
|
173
|
+
// CONSTRUCTION/DESTRUCTION/REFCOUNTING
|
174
|
+
//
|
176
175
|
|
177
176
|
grpc_chttp2_transport::~grpc_chttp2_transport() {
|
178
177
|
size_t i;
|
@@ -226,12 +225,11 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
|
|
226
225
|
|
227
226
|
GRPC_ERROR_UNREF(closed_with_error);
|
228
227
|
gpr_free(ping_acks);
|
229
|
-
gpr_free(peer_string);
|
230
228
|
}
|
231
229
|
|
232
230
|
static const grpc_transport_vtable* get_vtable(void);
|
233
231
|
|
234
|
-
|
232
|
+
// Returns whether bdp is enabled
|
235
233
|
static bool read_channel_args(grpc_chttp2_transport* t,
|
236
234
|
const grpc_channel_args* channel_args,
|
237
235
|
bool is_client) {
|
@@ -378,11 +376,9 @@ static bool read_channel_args(grpc_chttp2_transport* t,
|
|
378
376
|
}
|
379
377
|
}
|
380
378
|
if (channelz_enabled) {
|
381
|
-
// TODO(ncteisen): add an API to endpoint to query for local addr, and pass
|
382
|
-
// it in here, so SocketNode knows its own address.
|
383
379
|
t->channelz_socket =
|
384
380
|
grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>(
|
385
|
-
|
381
|
+
std::string(grpc_endpoint_get_local_address(t->ep)), t->peer_string,
|
386
382
|
absl::StrFormat("%s %s", get_vtable()->name, t->peer_string));
|
387
383
|
}
|
388
384
|
return enable_bdp;
|
@@ -429,8 +425,8 @@ static void init_keepalive_pings_if_enabled(grpc_chttp2_transport* t) {
|
|
429
425
|
grpc_core::ExecCtx::Get()->Now() + t->keepalive_time,
|
430
426
|
&t->init_keepalive_ping_locked);
|
431
427
|
} else {
|
432
|
-
|
433
|
-
|
428
|
+
// Use GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED to indicate there are no
|
429
|
+
// inflight keeaplive timers
|
434
430
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED;
|
435
431
|
}
|
436
432
|
}
|
@@ -451,11 +447,11 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
451
447
|
GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
|
452
448
|
GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
|
453
449
|
base.vtable = get_vtable();
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
450
|
+
// 8 is a random stab in the dark as to a good initial size: it's small enough
|
451
|
+
// that it shouldn't waste memory for infrequently used connections, yet
|
452
|
+
// large enough that the exponential growth should happen nicely when it's
|
453
|
+
// needed.
|
454
|
+
// TODO(ctiller): tune this
|
459
455
|
grpc_chttp2_stream_map_init(&stream_map, 8);
|
460
456
|
|
461
457
|
grpc_slice_buffer_init(&read_buffer);
|
@@ -466,7 +462,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
466
462
|
}
|
467
463
|
grpc_chttp2_hpack_compressor_init(&hpack_compressor);
|
468
464
|
grpc_slice_buffer_init(&qbuf);
|
469
|
-
|
465
|
+
// copy in initial settings to all setting sets
|
470
466
|
size_t i;
|
471
467
|
int j;
|
472
468
|
for (i = 0; i < GRPC_CHTTP2_NUM_SETTINGS; i++) {
|
@@ -477,7 +473,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
477
473
|
grpc_chttp2_hpack_parser_init(&hpack_parser);
|
478
474
|
grpc_chttp2_goaway_parser_init(&goaway_parser);
|
479
475
|
|
480
|
-
|
476
|
+
// configure http2 the way we like it
|
481
477
|
if (is_client) {
|
482
478
|
queue_setting_update(this, GRPC_CHTTP2_SETTINGS_ENABLE_PUSH, 0);
|
483
479
|
queue_setting_update(this, GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 0);
|
@@ -503,7 +499,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
503
499
|
enable_bdp = false;
|
504
500
|
}
|
505
501
|
|
506
|
-
|
502
|
+
// No pings allowed before receiving a header or data frame.
|
507
503
|
ping_state.pings_before_data_required = 0;
|
508
504
|
ping_state.is_delayed_ping_timer_set = false;
|
509
505
|
ping_state.last_ping_sent_time = GRPC_MILLIS_INF_PAST;
|
@@ -514,8 +510,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
514
510
|
init_keepalive_pings_if_enabled(this);
|
515
511
|
|
516
512
|
if (enable_bdp) {
|
517
|
-
|
518
|
-
schedule_bdp_ping_locked(this);
|
513
|
+
bdp_ping_blocked = true;
|
519
514
|
grpc_chttp2_act_on_flowctl_action(flow_control->PeriodicUpdate(), this,
|
520
515
|
nullptr);
|
521
516
|
}
|
@@ -562,7 +557,8 @@ static void close_transport_locked(grpc_chttp2_transport* t,
|
|
562
557
|
}
|
563
558
|
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
564
559
|
t->closed_with_error = GRPC_ERROR_REF(error);
|
565
|
-
connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN,
|
560
|
+
connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, absl::Status(),
|
561
|
+
"close_transport");
|
566
562
|
if (t->ping_state.is_delayed_ping_timer_set) {
|
567
563
|
grpc_timer_cancel(&t->ping_state.delayed_ping_timer);
|
568
564
|
}
|
@@ -579,11 +575,11 @@ static void close_transport_locked(grpc_chttp2_transport* t,
|
|
579
575
|
break;
|
580
576
|
case GRPC_CHTTP2_KEEPALIVE_STATE_DYING:
|
581
577
|
case GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED:
|
582
|
-
|
578
|
+
// keepalive timers are not set in these two states
|
583
579
|
break;
|
584
580
|
}
|
585
581
|
|
586
|
-
|
582
|
+
// flush writable stream list to avoid dangling references
|
587
583
|
grpc_chttp2_stream* s;
|
588
584
|
while (grpc_chttp2_list_pop_writable_stream(t, &s)) {
|
589
585
|
GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:close");
|
@@ -593,7 +589,7 @@ static void close_transport_locked(grpc_chttp2_transport* t,
|
|
593
589
|
}
|
594
590
|
if (t->notify_on_receive_settings != nullptr) {
|
595
591
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_receive_settings,
|
596
|
-
|
592
|
+
GRPC_ERROR_REF(error));
|
597
593
|
t->notify_on_receive_settings = nullptr;
|
598
594
|
}
|
599
595
|
GRPC_ERROR_UNREF(error);
|
@@ -616,9 +612,9 @@ void grpc_chttp2_stream_unref(grpc_chttp2_stream* s) {
|
|
616
612
|
#endif
|
617
613
|
|
618
614
|
grpc_chttp2_stream::Reffer::Reffer(grpc_chttp2_stream* s) {
|
619
|
-
|
620
|
-
|
621
|
-
|
615
|
+
// We reserve one 'active stream' that's dropped when the stream is
|
616
|
+
// read-closed. The others are for Chttp2IncomingByteStreams that are
|
617
|
+
// actively reading
|
622
618
|
GRPC_CHTTP2_STREAM_REF(s, "chttp2");
|
623
619
|
GRPC_CHTTP2_REF_TRANSPORT(s->t, "stream");
|
624
620
|
}
|
@@ -677,9 +673,6 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
|
|
677
673
|
grpc_slice_buffer_destroy_internal(&decompressed_data_buffer);
|
678
674
|
}
|
679
675
|
|
680
|
-
grpc_chttp2_list_remove_stalled_by_transport(t, this);
|
681
|
-
grpc_chttp2_list_remove_stalled_by_stream(t, this);
|
682
|
-
|
683
676
|
for (int i = 0; i < STREAM_LIST_COUNT; i++) {
|
684
677
|
if (GPR_UNLIKELY(included[i])) {
|
685
678
|
gpr_log(GPR_ERROR, "%s stream %d still included in list %d",
|
@@ -774,9 +767,9 @@ grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream(grpc_chttp2_transport* t,
|
|
774
767
|
return accepting;
|
775
768
|
}
|
776
769
|
|
777
|
-
|
778
|
-
|
779
|
-
|
770
|
+
//
|
771
|
+
// OUTPUT PROCESSING
|
772
|
+
//
|
780
773
|
|
781
774
|
static const char* write_state_name(grpc_chttp2_write_state st) {
|
782
775
|
switch (st) {
|
@@ -794,15 +787,15 @@ static void set_write_state(grpc_chttp2_transport* t,
|
|
794
787
|
grpc_chttp2_write_state st, const char* reason) {
|
795
788
|
GRPC_CHTTP2_IF_TRACING(
|
796
789
|
gpr_log(GPR_INFO, "W:%p %s [%s] state %s -> %s [%s]", t,
|
797
|
-
t->is_client ? "CLIENT" : "SERVER", t->peer_string,
|
790
|
+
t->is_client ? "CLIENT" : "SERVER", t->peer_string.c_str(),
|
798
791
|
write_state_name(t->write_state), write_state_name(st), reason));
|
799
792
|
t->write_state = st;
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
793
|
+
// If the state is being reset back to idle, it means a write was just
|
794
|
+
// finished. Make sure all the run_after_write closures are scheduled.
|
795
|
+
//
|
796
|
+
// This is also our chance to close the transport if the transport was marked
|
797
|
+
// to be closed after all writes finish (for example, if we received a go-away
|
798
|
+
// from peer while we had some pending writes)
|
806
799
|
if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
|
807
800
|
grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &t->run_after_write);
|
808
801
|
if (t->close_transport_on_writes_finished != nullptr) {
|
@@ -864,6 +857,9 @@ static void inc_initiate_write_reason(
|
|
864
857
|
case GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING:
|
865
858
|
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_APPLICATION_PING();
|
866
859
|
break;
|
860
|
+
case GRPC_CHTTP2_INITIATE_WRITE_BDP_PING:
|
861
|
+
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_BDP_ESTIMATOR_PING();
|
862
|
+
break;
|
867
863
|
case GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING:
|
868
864
|
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_KEEPALIVE_PING();
|
869
865
|
break;
|
@@ -889,22 +885,22 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
|
|
889
885
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING,
|
890
886
|
grpc_chttp2_initiate_write_reason_string(reason));
|
891
887
|
GRPC_CHTTP2_REF_TRANSPORT(t, "writing");
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
|
907
|
-
|
888
|
+
// Note that the 'write_action_begin_locked' closure is being scheduled
|
889
|
+
// on the 'finally_scheduler' of t->combiner. This means that
|
890
|
+
// 'write_action_begin_locked' is called only *after* all the other
|
891
|
+
// closures (some of which are potentially initiating more writes on the
|
892
|
+
// transport) are executed on the t->combiner.
|
893
|
+
//
|
894
|
+
// The reason for scheduling on finally_scheduler is to make sure we batch
|
895
|
+
// as many writes as possible. 'write_action_begin_locked' is the function
|
896
|
+
// that gathers all the relevant bytes (which are at various places in the
|
897
|
+
// grpc_chttp2_transport structure) and append them to 'outbuf' field in
|
898
|
+
// grpc_chttp2_transport thereby batching what would have been potentially
|
899
|
+
// multiple write operations.
|
900
|
+
//
|
901
|
+
// Also, 'write_action_begin_locked' only gathers the bytes into outbuf.
|
902
|
+
// It does not call the endpoint to write the bytes. That is done by the
|
903
|
+
// 'write_action' (which is scheduled by 'write_action_begin_locked')
|
908
904
|
t->combiner->FinallyRun(
|
909
905
|
GRPC_CLOSURE_INIT(&t->write_action_begin_locked,
|
910
906
|
write_action_begin_locked, t, nullptr),
|
@@ -956,9 +952,9 @@ static void write_action_begin_locked(void* gt, grpc_error* /*error_ignored*/) {
|
|
956
952
|
write_action(t, GRPC_ERROR_NONE);
|
957
953
|
if (t->reading_paused_on_pending_induced_frames) {
|
958
954
|
GPR_ASSERT(t->num_pending_induced_frames == 0);
|
959
|
-
|
960
|
-
|
961
|
-
|
955
|
+
// We had paused reading, because we had many induced frames (SETTINGS
|
956
|
+
// ACK, PINGS ACK and RST_STREAMS) pending in t->qbuf. Now that we have
|
957
|
+
// been able to flush qbuf, we can resume reading.
|
962
958
|
GRPC_CHTTP2_IF_TRACING(gpr_log(
|
963
959
|
GPR_INFO,
|
964
960
|
"transport %p : Resuming reading after being paused due to too "
|
@@ -993,8 +989,8 @@ static void write_action_end(void* tp, grpc_error* error) {
|
|
993
989
|
GRPC_ERROR_REF(error));
|
994
990
|
}
|
995
991
|
|
996
|
-
|
997
|
-
|
992
|
+
// Callback from the grpc_endpoint after bytes have been written by calling
|
993
|
+
// sendmsg
|
998
994
|
static void write_action_end_locked(void* tp, grpc_error* error) {
|
999
995
|
GPR_TIMER_SCOPE("terminate_writing_with_lock", 0);
|
1000
996
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
@@ -1080,16 +1076,17 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
|
1080
1076
|
GRPC_CHTTP2_IF_TRACING(
|
1081
1077
|
gpr_log(GPR_INFO, "transport %p got goaway with last stream id %d", t,
|
1082
1078
|
last_stream_id));
|
1083
|
-
|
1084
|
-
|
1079
|
+
// We want to log this irrespective of whether http tracing is enabled if we
|
1080
|
+
// received a GOAWAY with a non NO_ERROR code.
|
1085
1081
|
if (goaway_error != GRPC_HTTP2_NO_ERROR) {
|
1086
|
-
gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string,
|
1082
|
+
gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string.c_str(),
|
1087
1083
|
goaway_error, grpc_error_string(t->goaway_error));
|
1088
1084
|
}
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
1092
|
-
|
1085
|
+
absl::Status status = grpc_error_to_absl_status(t->goaway_error);
|
1086
|
+
// When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
|
1087
|
+
// data equal to "too_many_pings", it should log the occurrence at a log level
|
1088
|
+
// that is enabled by default and double the configured KEEPALIVE_TIME used
|
1089
|
+
// for new connections on that channel.
|
1093
1090
|
if (GPR_UNLIKELY(t->is_client &&
|
1094
1091
|
goaway_error == GRPC_HTTP2_ENHANCE_YOUR_CALM &&
|
1095
1092
|
grpc_slice_str_cmp(goaway_text, "too_many_pings") == 0)) {
|
@@ -1104,15 +1101,18 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
|
1104
1101
|
? GRPC_MILLIS_INF_FUTURE
|
1105
1102
|
: static_cast<grpc_millis>(current_keepalive_time_ms *
|
1106
1103
|
KEEPALIVE_TIME_BACKOFF_MULTIPLIER);
|
1104
|
+
status.SetPayload(grpc_core::kKeepaliveThrottlingKey,
|
1105
|
+
absl::Cord(std::to_string(t->keepalive_time)));
|
1107
1106
|
}
|
1108
|
-
|
1109
|
-
|
1110
|
-
connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE,
|
1107
|
+
// lie: use transient failure from the transport to indicate goaway has been
|
1108
|
+
// received.
|
1109
|
+
connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
1110
|
+
"got_goaway");
|
1111
1111
|
}
|
1112
1112
|
|
1113
1113
|
static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
1114
1114
|
grpc_chttp2_stream* s;
|
1115
|
-
|
1115
|
+
// cancel out streams that haven't yet started if we have received a GOAWAY
|
1116
1116
|
if (t->goaway_error != GRPC_ERROR_NONE) {
|
1117
1117
|
while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
|
1118
1118
|
grpc_chttp2_cancel_stream(
|
@@ -1123,14 +1123,14 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
|
1123
1123
|
}
|
1124
1124
|
return;
|
1125
1125
|
}
|
1126
|
-
|
1127
|
-
|
1126
|
+
// start streams where we have free grpc_chttp2_stream ids and free
|
1127
|
+
// * concurrency
|
1128
1128
|
while (t->next_stream_id <= MAX_CLIENT_STREAM_ID &&
|
1129
1129
|
grpc_chttp2_stream_map_size(&t->stream_map) <
|
1130
1130
|
t->settings[GRPC_PEER_SETTINGS]
|
1131
1131
|
[GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] &&
|
1132
1132
|
grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
|
1133
|
-
|
1133
|
+
// safe since we can't (legally) be parsing this stream yet
|
1134
1134
|
GRPC_CHTTP2_IF_TRACING(gpr_log(
|
1135
1135
|
GPR_INFO,
|
1136
1136
|
"HTTP:%s: Transport %p allocating new grpc_chttp2_stream %p to id %d",
|
@@ -1142,6 +1142,8 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
|
1142
1142
|
|
1143
1143
|
if (t->next_stream_id >= MAX_CLIENT_STREAM_ID) {
|
1144
1144
|
connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE,
|
1145
|
+
absl::Status(absl::StatusCode::kUnavailable,
|
1146
|
+
"Transport Stream IDs exhausted"),
|
1145
1147
|
"no_more_stream_ids");
|
1146
1148
|
}
|
1147
1149
|
|
@@ -1150,7 +1152,7 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
|
1150
1152
|
grpc_chttp2_mark_stream_writable(t, s);
|
1151
1153
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_START_NEW_STREAM);
|
1152
1154
|
}
|
1153
|
-
|
1155
|
+
// cancel out streams that will never be started
|
1154
1156
|
if (t->next_stream_id >= MAX_CLIENT_STREAM_ID) {
|
1155
1157
|
while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
|
1156
1158
|
grpc_chttp2_cancel_stream(
|
@@ -1162,12 +1164,12 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
|
1162
1164
|
}
|
1163
1165
|
}
|
1164
1166
|
|
1165
|
-
|
1166
|
-
we should not complete this closure until we can prove that the write got
|
1167
|
-
scheduled
|
1167
|
+
// Flag that this closure barrier may be covering a write in a pollset, and so
|
1168
|
+
// we should not complete this closure until we can prove that the write got
|
1169
|
+
// scheduled
|
1168
1170
|
#define CLOSURE_BARRIER_MAY_COVER_WRITE (1 << 0)
|
1169
|
-
|
1170
|
-
bits being used for flags defined above)
|
1171
|
+
// First bit of the reference count, stored in the high order bits (with the low
|
1172
|
+
// bits being used for flags defined above)
|
1171
1173
|
#define CLOSURE_BARRIER_FIRST_REF_BIT (1 << 16)
|
1172
1174
|
|
1173
1175
|
static grpc_closure* add_closure_barrier(grpc_closure* closure) {
|
@@ -1211,7 +1213,7 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
|
|
1211
1213
|
"Error in HTTP transport completing operation");
|
1212
1214
|
closure->error_data.error = grpc_error_set_str(
|
1213
1215
|
closure->error_data.error, GRPC_ERROR_STR_TARGET_ADDRESS,
|
1214
|
-
grpc_slice_from_copied_string(t->peer_string));
|
1216
|
+
grpc_slice_from_copied_string(t->peer_string.c_str()));
|
1215
1217
|
}
|
1216
1218
|
closure->error_data.error =
|
1217
1219
|
grpc_error_add_child(closure->error_data.error, error);
|
@@ -1259,7 +1261,7 @@ static void continue_fetching_send_locked(grpc_chttp2_transport* t,
|
|
1259
1261
|
grpc_chttp2_stream* s) {
|
1260
1262
|
for (;;) {
|
1261
1263
|
if (s->fetching_send_message == nullptr) {
|
1262
|
-
|
1264
|
+
// Stream was cancelled before message fetch completed
|
1263
1265
|
abort(); /* TODO(ctiller): what cleanup here? */
|
1264
1266
|
return; /* early out */
|
1265
1267
|
}
|
@@ -1389,7 +1391,7 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1389
1391
|
GPR_ASSERT(s->send_initial_metadata_finished == nullptr);
|
1390
1392
|
on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
|
1391
1393
|
|
1392
|
-
|
1394
|
+
// Identify stream compression
|
1393
1395
|
if (op_payload->send_initial_metadata.send_initial_metadata->idx.named
|
1394
1396
|
.content_encoding == nullptr ||
|
1395
1397
|
grpc_stream_compression_method_parse(
|
@@ -1408,68 +1410,48 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1408
1410
|
s->send_initial_metadata_finished = add_closure_barrier(on_complete);
|
1409
1411
|
s->send_initial_metadata =
|
1410
1412
|
op_payload->send_initial_metadata.send_initial_metadata;
|
1411
|
-
const size_t metadata_size =
|
1412
|
-
grpc_metadata_batch_size(s->send_initial_metadata);
|
1413
|
-
const size_t metadata_peer_limit =
|
1414
|
-
t->settings[GRPC_PEER_SETTINGS]
|
1415
|
-
[GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
|
1416
1413
|
if (t->is_client) {
|
1417
1414
|
s->deadline = GPR_MIN(s->deadline, s->send_initial_metadata->deadline);
|
1418
1415
|
}
|
1419
|
-
if (
|
1420
|
-
|
1421
|
-
|
1422
|
-
|
1423
|
-
|
1424
|
-
|
1425
|
-
|
1426
|
-
|
1427
|
-
|
1428
|
-
static_cast<intptr_t>(metadata_size)),
|
1429
|
-
GRPC_ERROR_INT_LIMIT,
|
1430
|
-
static_cast<intptr_t>(metadata_peer_limit)),
|
1431
|
-
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED));
|
1432
|
-
} else {
|
1433
|
-
if (contains_non_ok_status(s->send_initial_metadata)) {
|
1434
|
-
s->seen_error = true;
|
1435
|
-
}
|
1436
|
-
if (!s->write_closed) {
|
1437
|
-
if (t->is_client) {
|
1438
|
-
if (t->closed_with_error == GRPC_ERROR_NONE) {
|
1439
|
-
GPR_ASSERT(s->id == 0);
|
1440
|
-
grpc_chttp2_list_add_waiting_for_concurrency(t, s);
|
1441
|
-
maybe_start_some_streams(t);
|
1442
|
-
} else {
|
1443
|
-
grpc_chttp2_cancel_stream(
|
1444
|
-
t, s,
|
1445
|
-
grpc_error_set_int(
|
1446
|
-
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
1447
|
-
"Transport closed", &t->closed_with_error, 1),
|
1448
|
-
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
|
1449
|
-
}
|
1416
|
+
if (contains_non_ok_status(s->send_initial_metadata)) {
|
1417
|
+
s->seen_error = true;
|
1418
|
+
}
|
1419
|
+
if (!s->write_closed) {
|
1420
|
+
if (t->is_client) {
|
1421
|
+
if (t->closed_with_error == GRPC_ERROR_NONE) {
|
1422
|
+
GPR_ASSERT(s->id == 0);
|
1423
|
+
grpc_chttp2_list_add_waiting_for_concurrency(t, s);
|
1424
|
+
maybe_start_some_streams(t);
|
1450
1425
|
} else {
|
1451
|
-
|
1452
|
-
|
1453
|
-
|
1454
|
-
|
1455
|
-
|
1456
|
-
|
1457
|
-
t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
|
1458
|
-
}
|
1426
|
+
grpc_chttp2_cancel_stream(
|
1427
|
+
t, s,
|
1428
|
+
grpc_error_set_int(
|
1429
|
+
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
1430
|
+
"Transport closed", &t->closed_with_error, 1),
|
1431
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
|
1459
1432
|
}
|
1460
1433
|
} else {
|
1461
|
-
s->
|
1462
|
-
|
1463
|
-
|
1464
|
-
|
1465
|
-
|
1466
|
-
|
1467
|
-
|
1434
|
+
GPR_ASSERT(s->id != 0);
|
1435
|
+
grpc_chttp2_mark_stream_writable(t, s);
|
1436
|
+
if (!(op->send_message &&
|
1437
|
+
(op->payload->send_message.send_message->flags() &
|
1438
|
+
GRPC_WRITE_BUFFER_HINT))) {
|
1439
|
+
grpc_chttp2_initiate_write(
|
1440
|
+
t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
|
1441
|
+
}
|
1468
1442
|
}
|
1443
|
+
} else {
|
1444
|
+
s->send_initial_metadata = nullptr;
|
1445
|
+
grpc_chttp2_complete_closure_step(
|
1446
|
+
t, s, &s->send_initial_metadata_finished,
|
1447
|
+
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
1448
|
+
"Attempt to send initial metadata after stream was closed",
|
1449
|
+
&s->write_closed_error, 1),
|
1450
|
+
"send_initial_metadata_finished");
|
1469
1451
|
}
|
1470
1452
|
if (op_payload->send_initial_metadata.peer_string != nullptr) {
|
1471
1453
|
gpr_atm_rel_store(op_payload->send_initial_metadata.peer_string,
|
1472
|
-
(gpr_atm)t->peer_string);
|
1454
|
+
(gpr_atm)t->peer_string.c_str());
|
1473
1455
|
}
|
1474
1456
|
}
|
1475
1457
|
|
@@ -1527,47 +1509,27 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1527
1509
|
op_payload->send_trailing_metadata.send_trailing_metadata;
|
1528
1510
|
s->sent_trailing_metadata_op = op_payload->send_trailing_metadata.sent;
|
1529
1511
|
s->write_buffering = false;
|
1530
|
-
|
1531
|
-
|
1532
|
-
|
1533
|
-
|
1534
|
-
|
1535
|
-
|
1536
|
-
|
1537
|
-
t, s,
|
1538
|
-
|
1539
|
-
|
1540
|
-
|
1541
|
-
|
1542
|
-
|
1543
|
-
|
1544
|
-
|
1545
|
-
|
1546
|
-
|
1547
|
-
|
1548
|
-
|
1549
|
-
|
1550
|
-
|
1551
|
-
}
|
1552
|
-
if (s->write_closed) {
|
1553
|
-
s->send_trailing_metadata = nullptr;
|
1554
|
-
s->sent_trailing_metadata_op = nullptr;
|
1555
|
-
grpc_chttp2_complete_closure_step(
|
1556
|
-
t, s, &s->send_trailing_metadata_finished,
|
1557
|
-
grpc_metadata_batch_is_empty(
|
1558
|
-
op->payload->send_trailing_metadata.send_trailing_metadata)
|
1559
|
-
? GRPC_ERROR_NONE
|
1560
|
-
: GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1561
|
-
"Attempt to send trailing metadata after "
|
1562
|
-
"stream was closed"),
|
1563
|
-
"send_trailing_metadata_finished");
|
1564
|
-
} else if (s->id != 0) {
|
1565
|
-
/* TODO(ctiller): check if there's flow control for any outstanding
|
1566
|
-
bytes before going writable */
|
1567
|
-
grpc_chttp2_mark_stream_writable(t, s);
|
1568
|
-
grpc_chttp2_initiate_write(
|
1569
|
-
t, GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA);
|
1570
|
-
}
|
1512
|
+
if (contains_non_ok_status(s->send_trailing_metadata)) {
|
1513
|
+
s->seen_error = true;
|
1514
|
+
}
|
1515
|
+
if (s->write_closed) {
|
1516
|
+
s->send_trailing_metadata = nullptr;
|
1517
|
+
s->sent_trailing_metadata_op = nullptr;
|
1518
|
+
grpc_chttp2_complete_closure_step(
|
1519
|
+
t, s, &s->send_trailing_metadata_finished,
|
1520
|
+
grpc_metadata_batch_is_empty(
|
1521
|
+
op->payload->send_trailing_metadata.send_trailing_metadata)
|
1522
|
+
? GRPC_ERROR_NONE
|
1523
|
+
: GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1524
|
+
"Attempt to send trailing metadata after "
|
1525
|
+
"stream was closed"),
|
1526
|
+
"send_trailing_metadata_finished");
|
1527
|
+
} else if (s->id != 0) {
|
1528
|
+
// TODO(ctiller): check if there's flow control for any outstanding
|
1529
|
+
// bytes before going writable
|
1530
|
+
grpc_chttp2_mark_stream_writable(t, s);
|
1531
|
+
grpc_chttp2_initiate_write(
|
1532
|
+
t, GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA);
|
1571
1533
|
}
|
1572
1534
|
}
|
1573
1535
|
|
@@ -1582,7 +1544,7 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1582
1544
|
op_payload->recv_initial_metadata.trailing_metadata_available;
|
1583
1545
|
if (op_payload->recv_initial_metadata.peer_string != nullptr) {
|
1584
1546
|
gpr_atm_rel_store(op_payload->recv_initial_metadata.peer_string,
|
1585
|
-
(gpr_atm)t->peer_string);
|
1547
|
+
(gpr_atm)t->peer_string.c_str());
|
1586
1548
|
}
|
1587
1549
|
grpc_chttp2_maybe_complete_recv_initial_metadata(t, s);
|
1588
1550
|
}
|
@@ -1665,8 +1627,8 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
|
|
1665
1627
|
}
|
1666
1628
|
|
1667
1629
|
static void cancel_pings(grpc_chttp2_transport* t, grpc_error* error) {
|
1668
|
-
|
1669
|
-
|
1630
|
+
// callback remaining pings: they're not allowed to call into the transport,
|
1631
|
+
// and maybe they hold resources that need to be freed
|
1670
1632
|
grpc_chttp2_ping_queue* pq = &t->ping_queue;
|
1671
1633
|
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
1672
1634
|
for (size_t j = 0; j < GRPC_CHTTP2_PCL_COUNT; j++) {
|
@@ -1692,11 +1654,9 @@ static void send_ping_locked(grpc_chttp2_transport* t,
|
|
1692
1654
|
GRPC_ERROR_NONE);
|
1693
1655
|
}
|
1694
1656
|
|
1695
|
-
|
1696
|
-
|
1697
|
-
|
1698
|
-
* instead of waiting for that ping to complete and then starting a new ping.
|
1699
|
-
*/
|
1657
|
+
// Specialized form of send_ping_locked for keepalive ping. If there is already
|
1658
|
+
// a ping in progress, the keepalive ping would piggyback onto that ping,
|
1659
|
+
// instead of waiting for that ping to complete and then starting a new ping.
|
1700
1660
|
static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
|
1701
1661
|
if (t->closed_with_error != GRPC_ERROR_NONE) {
|
1702
1662
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
|
@@ -1710,7 +1670,7 @@ static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
|
|
1710
1670
|
}
|
1711
1671
|
grpc_chttp2_ping_queue* pq = &t->ping_queue;
|
1712
1672
|
if (!grpc_closure_list_empty(pq->lists[GRPC_CHTTP2_PCL_INFLIGHT])) {
|
1713
|
-
|
1673
|
+
// There is a ping in flight. Add yourself to the inflight closure list.
|
1714
1674
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
|
1715
1675
|
start_keepalive_ping_locked, t, nullptr),
|
1716
1676
|
GRPC_ERROR_REF(t->closed_with_error));
|
@@ -1752,9 +1712,8 @@ static void retry_initiate_ping_locked(void* tp, grpc_error* error) {
|
|
1752
1712
|
void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
|
1753
1713
|
grpc_chttp2_ping_queue* pq = &t->ping_queue;
|
1754
1714
|
if (pq->inflight_id != id) {
|
1755
|
-
|
1756
|
-
|
1757
|
-
gpr_free(from);
|
1715
|
+
gpr_log(GPR_DEBUG, "Unknown ping response from %s: %" PRIx64,
|
1716
|
+
t->peer_string.c_str(), id);
|
1758
1717
|
return;
|
1759
1718
|
}
|
1760
1719
|
grpc_core::ExecCtx::RunList(DEBUG_LOCATION,
|
@@ -1765,8 +1724,8 @@ void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
|
|
1765
1724
|
}
|
1766
1725
|
|
1767
1726
|
static void send_goaway(grpc_chttp2_transport* t, grpc_error* error) {
|
1768
|
-
|
1769
|
-
gpr_log(GPR_INFO, "%s: Sending goaway err=%s", t->peer_string,
|
1727
|
+
// We want to log this irrespective of whether http tracing is enabled
|
1728
|
+
gpr_log(GPR_INFO, "%s: Sending goaway err=%s", t->peer_string.c_str(),
|
1770
1729
|
grpc_error_string(error));
|
1771
1730
|
t->sent_goaway_state = GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED;
|
1772
1731
|
grpc_http2_error_code http_error;
|
@@ -1787,7 +1746,7 @@ void grpc_chttp2_add_ping_strike(grpc_chttp2_transport* t) {
|
|
1787
1746
|
grpc_error_set_int(
|
1788
1747
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("too_many_pings"),
|
1789
1748
|
GRPC_ERROR_INT_HTTP2_ERROR, GRPC_HTTP2_ENHANCE_YOUR_CALM));
|
1790
|
-
|
1749
|
+
// The transport will be closed after the write is done
|
1791
1750
|
close_transport_locked(
|
1792
1751
|
t, grpc_error_set_int(
|
1793
1752
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many pings"),
|
@@ -1862,9 +1821,9 @@ static void perform_transport_op(grpc_transport* gt, grpc_transport_op* op) {
|
|
1862
1821
|
GRPC_ERROR_NONE);
|
1863
1822
|
}
|
1864
1823
|
|
1865
|
-
|
1866
|
-
|
1867
|
-
|
1824
|
+
//
|
1825
|
+
// INPUT PROCESSING - GENERAL
|
1826
|
+
//
|
1868
1827
|
|
1869
1828
|
void grpc_chttp2_maybe_complete_recv_initial_metadata(
|
1870
1829
|
grpc_chttp2_transport* /*t*/, grpc_chttp2_stream* s) {
|
@@ -1984,8 +1943,8 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
|
|
1984
1943
|
s->unprocessed_incoming_frames_buffer.length > 0;
|
1985
1944
|
if (s->read_closed && s->frame_storage.length > 0 && !pending_data &&
|
1986
1945
|
!s->seen_error && s->recv_trailing_metadata_finished != nullptr) {
|
1987
|
-
|
1988
|
-
|
1946
|
+
// Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
|
1947
|
+
// maybe decompress the next 5 bytes in the stream.
|
1989
1948
|
if (s->stream_decompression_method ==
|
1990
1949
|
GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS) {
|
1991
1950
|
grpc_slice_buffer_move_first(
|
@@ -2069,6 +2028,8 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
|
|
2069
2028
|
if (grpc_chttp2_list_remove_writable_stream(t, s)) {
|
2070
2029
|
GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:remove_stream");
|
2071
2030
|
}
|
2031
|
+
grpc_chttp2_list_remove_stalled_by_stream(t, s);
|
2032
|
+
grpc_chttp2_list_remove_stalled_by_transport(t, s);
|
2072
2033
|
|
2073
2034
|
GRPC_ERROR_UNREF(error);
|
2074
2035
|
|
@@ -2107,12 +2068,12 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2107
2068
|
if (status != GRPC_STATUS_OK) {
|
2108
2069
|
s->seen_error = true;
|
2109
2070
|
}
|
2110
|
-
|
2111
|
-
|
2112
|
-
|
2113
|
-
|
2114
|
-
|
2115
|
-
|
2071
|
+
// stream_global->recv_trailing_metadata_finished gives us a
|
2072
|
+
// last chance replacement: we've received trailing metadata,
|
2073
|
+
// but something more important has become available to signal
|
2074
|
+
// to the upper layers - drop what we've got, and then publish
|
2075
|
+
// what we want - which is safe because we haven't told anyone
|
2076
|
+
// about the metadata yet
|
2116
2077
|
if (s->published_metadata[1] == GRPC_METADATA_NOT_PUBLISHED ||
|
2117
2078
|
s->recv_trailing_metadata_finished != nullptr) {
|
2118
2079
|
char status_string[GPR_LTOA_MIN_BUFSIZE];
|
@@ -2204,7 +2165,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
|
|
2204
2165
|
grpc_chttp2_stream* s, int close_reads,
|
2205
2166
|
int close_writes, grpc_error* error) {
|
2206
2167
|
if (s->read_closed && s->write_closed) {
|
2207
|
-
|
2168
|
+
// already closed, but we should still fake the status if needed.
|
2208
2169
|
grpc_error* overall_error = removal_error(error, s, "Stream removed");
|
2209
2170
|
if (overall_error != GRPC_ERROR_NONE) {
|
2210
2171
|
grpc_chttp2_fake_status(t, s, overall_error);
|
@@ -2231,7 +2192,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
|
|
2231
2192
|
if (s->id != 0) {
|
2232
2193
|
remove_stream(t, s->id, GRPC_ERROR_REF(overall_error));
|
2233
2194
|
} else {
|
2234
|
-
|
2195
|
+
// Purge streams waiting on concurrency still waiting for id assignment
|
2235
2196
|
grpc_chttp2_list_remove_waiting_for_concurrency(t, s);
|
2236
2197
|
}
|
2237
2198
|
if (overall_error != GRPC_ERROR_NONE) {
|
@@ -2270,12 +2231,12 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2270
2231
|
|
2271
2232
|
GPR_ASSERT(grpc_status >= 0 && (int)grpc_status < 100);
|
2272
2233
|
|
2273
|
-
|
2274
|
-
|
2275
|
-
|
2276
|
-
|
2277
|
-
|
2278
|
-
|
2234
|
+
// Hand roll a header block.
|
2235
|
+
// This is unnecessarily ugly - at some point we should find a more
|
2236
|
+
// elegant solution.
|
2237
|
+
// It's complicated by the fact that our send machinery would be dead by
|
2238
|
+
// the time we got around to sending this, so instead we ignore HPACK
|
2239
|
+
// compression and just write the uncompressed bytes onto the wire.
|
2279
2240
|
if (!s->sent_initial_metadata) {
|
2280
2241
|
http_status_hdr = GRPC_SLICE_MALLOC(13);
|
2281
2242
|
p = GRPC_SLICE_START_PTR(http_status_hdr);
|
@@ -2436,9 +2397,9 @@ static void end_all_the_calls(grpc_chttp2_transport* t, grpc_error* error) {
|
|
2436
2397
|
GRPC_ERROR_UNREF(error);
|
2437
2398
|
}
|
2438
2399
|
|
2439
|
-
|
2440
|
-
|
2441
|
-
|
2400
|
+
//
|
2401
|
+
// INPUT PROCESSING - PARSING
|
2402
|
+
//
|
2442
2403
|
|
2443
2404
|
template <class F>
|
2444
2405
|
static void WithUrgency(grpc_chttp2_transport* t,
|
@@ -2535,11 +2496,6 @@ static void read_action_locked(void* tp, grpc_error* error) {
|
|
2535
2496
|
grpc_error* errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
|
2536
2497
|
GRPC_ERROR_NONE};
|
2537
2498
|
for (; i < t->read_buffer.count && errors[1] == GRPC_ERROR_NONE; i++) {
|
2538
|
-
grpc_core::BdpEstimator* bdp_est = t->flow_control->bdp_estimator();
|
2539
|
-
if (bdp_est) {
|
2540
|
-
bdp_est->AddIncomingBytes(
|
2541
|
-
static_cast<int64_t> GRPC_SLICE_LENGTH(t->read_buffer.slices[i]));
|
2542
|
-
}
|
2543
2499
|
errors[1] = grpc_chttp2_perform_read(t, t->read_buffer.slices[i]);
|
2544
2500
|
}
|
2545
2501
|
if (errors[1] != GRPC_ERROR_NONE) {
|
@@ -2573,8 +2529,8 @@ static void read_action_locked(void* tp, grpc_error* error) {
|
|
2573
2529
|
"Transport closed", &t->closed_with_error, 1);
|
2574
2530
|
}
|
2575
2531
|
if (error != GRPC_ERROR_NONE) {
|
2576
|
-
|
2577
|
-
|
2532
|
+
// If a goaway frame was received, this might be the reason why the read
|
2533
|
+
// failed. Add this info to the error
|
2578
2534
|
if (t->goaway_error != GRPC_ERROR_NONE) {
|
2579
2535
|
error = grpc_error_add_child(error, GRPC_ERROR_REF(t->goaway_error));
|
2580
2536
|
}
|
@@ -2583,7 +2539,7 @@ static void read_action_locked(void* tp, grpc_error* error) {
|
|
2583
2539
|
t->endpoint_reading = 0;
|
2584
2540
|
} else if (t->closed_with_error == GRPC_ERROR_NONE) {
|
2585
2541
|
keep_reading = true;
|
2586
|
-
|
2542
|
+
// Since we have read a byte, reset the keepalive timer
|
2587
2543
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
|
2588
2544
|
grpc_timer_cancel(&t->keepalive_ping_timer);
|
2589
2545
|
}
|
@@ -2618,7 +2574,7 @@ static void continue_read_action_locked(grpc_chttp2_transport* t) {
|
|
2618
2574
|
|
2619
2575
|
// t is reffed prior to calling the first time, and once the callback chain
|
2620
2576
|
// that kicks off finishes, it's unreffed
|
2621
|
-
|
2577
|
+
void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
|
2622
2578
|
t->flow_control->bdp_estimator()->SchedulePing();
|
2623
2579
|
send_ping_locked(
|
2624
2580
|
t,
|
@@ -2626,6 +2582,9 @@ static void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
|
|
2626
2582
|
grpc_schedule_on_exec_ctx),
|
2627
2583
|
GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked, finish_bdp_ping, t,
|
2628
2584
|
grpc_schedule_on_exec_ctx));
|
2585
|
+
// TODO(yashykt): Enabling this causes internal b/168345569. Re-enable once
|
2586
|
+
// fixed.
|
2587
|
+
// grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_BDP_PING);
|
2629
2588
|
}
|
2630
2589
|
|
2631
2590
|
static void start_bdp_ping(void* tp, grpc_error* error) {
|
@@ -2638,13 +2597,13 @@ static void start_bdp_ping(void* tp, grpc_error* error) {
|
|
2638
2597
|
static void start_bdp_ping_locked(void* tp, grpc_error* error) {
|
2639
2598
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2640
2599
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
2641
|
-
gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string,
|
2600
|
+
gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string.c_str(),
|
2642
2601
|
grpc_error_string(error));
|
2643
2602
|
}
|
2644
2603
|
if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
|
2645
2604
|
return;
|
2646
2605
|
}
|
2647
|
-
|
2606
|
+
// Reset the keepalive ping timer
|
2648
2607
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
|
2649
2608
|
grpc_timer_cancel(&t->keepalive_ping_timer);
|
2650
2609
|
}
|
@@ -2662,7 +2621,7 @@ static void finish_bdp_ping(void* tp, grpc_error* error) {
|
|
2662
2621
|
static void finish_bdp_ping_locked(void* tp, grpc_error* error) {
|
2663
2622
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2664
2623
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
2665
|
-
gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string,
|
2624
|
+
gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string.c_str(),
|
2666
2625
|
grpc_error_string(error));
|
2667
2626
|
}
|
2668
2627
|
if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
|
@@ -2670,8 +2629,8 @@ static void finish_bdp_ping_locked(void* tp, grpc_error* error) {
|
|
2670
2629
|
return;
|
2671
2630
|
}
|
2672
2631
|
if (!t->bdp_ping_started) {
|
2673
|
-
|
2674
|
-
|
2632
|
+
// start_bdp_ping_locked has not been run yet. Schedule
|
2633
|
+
// finish_bdp_ping_locked to be run later.
|
2675
2634
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
|
2676
2635
|
finish_bdp_ping_locked, t, nullptr),
|
2677
2636
|
GRPC_ERROR_REF(error));
|
@@ -2705,7 +2664,13 @@ static void next_bdp_ping_timer_expired_locked(void* tp, grpc_error* error) {
|
|
2705
2664
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
2706
2665
|
return;
|
2707
2666
|
}
|
2708
|
-
|
2667
|
+
if (t->flow_control->bdp_estimator()->accumulator() == 0) {
|
2668
|
+
// Block the bdp ping till we receive more data.
|
2669
|
+
t->bdp_ping_blocked = true;
|
2670
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
2671
|
+
} else {
|
2672
|
+
schedule_bdp_ping_locked(t);
|
2673
|
+
}
|
2709
2674
|
}
|
2710
2675
|
|
2711
2676
|
void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
|
@@ -2804,7 +2769,7 @@ static void init_keepalive_ping_locked(void* arg, grpc_error* error) {
|
|
2804
2769
|
&t->init_keepalive_ping_locked);
|
2805
2770
|
}
|
2806
2771
|
} else if (error == GRPC_ERROR_CANCELLED) {
|
2807
|
-
|
2772
|
+
// The keepalive ping timer may be cancelled by bdp
|
2808
2773
|
GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
|
2809
2774
|
GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked, init_keepalive_ping, t,
|
2810
2775
|
grpc_schedule_on_exec_ctx);
|
@@ -2832,7 +2797,7 @@ static void start_keepalive_ping_locked(void* arg, grpc_error* error) {
|
|
2832
2797
|
}
|
2833
2798
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
|
2834
2799
|
GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
|
2835
|
-
gpr_log(GPR_INFO, "%s: Start keepalive ping", t->peer_string);
|
2800
|
+
gpr_log(GPR_INFO, "%s: Start keepalive ping", t->peer_string.c_str());
|
2836
2801
|
}
|
2837
2802
|
GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive watchdog");
|
2838
2803
|
GRPC_CLOSURE_INIT(&t->keepalive_watchdog_fired_locked,
|
@@ -2856,11 +2821,11 @@ static void finish_keepalive_ping_locked(void* arg, grpc_error* error) {
|
|
2856
2821
|
if (error == GRPC_ERROR_NONE) {
|
2857
2822
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
|
2858
2823
|
GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
|
2859
|
-
gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string);
|
2824
|
+
gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string.c_str());
|
2860
2825
|
}
|
2861
2826
|
if (!t->keepalive_ping_started) {
|
2862
|
-
|
2863
|
-
|
2827
|
+
// start_keepalive_ping_locked has not run yet. Reschedule
|
2828
|
+
// finish_keepalive_ping_locked for it to be run later.
|
2864
2829
|
t->combiner->Run(
|
2865
2830
|
GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
|
2866
2831
|
finish_keepalive_ping_locked, t, nullptr),
|
@@ -2894,7 +2859,7 @@ static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
|
|
2894
2859
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
|
2895
2860
|
if (error == GRPC_ERROR_NONE) {
|
2896
2861
|
gpr_log(GPR_INFO, "%s: Keepalive watchdog fired. Closing transport.",
|
2897
|
-
t->peer_string);
|
2862
|
+
t->peer_string.c_str());
|
2898
2863
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
|
2899
2864
|
close_transport_locked(
|
2900
2865
|
t, grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
@@ -2903,8 +2868,8 @@ static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
|
|
2903
2868
|
GRPC_STATUS_UNAVAILABLE));
|
2904
2869
|
}
|
2905
2870
|
} else {
|
2906
|
-
|
2907
|
-
|
2871
|
+
// The watchdog timer should have been cancelled by
|
2872
|
+
// finish_keepalive_ping_locked.
|
2908
2873
|
if (GPR_UNLIKELY(error != GRPC_ERROR_CANCELLED)) {
|
2909
2874
|
gpr_log(GPR_ERROR, "keepalive_ping_end state error: %d (expect: %d)",
|
2910
2875
|
t->keepalive_state, GRPC_CHTTP2_KEEPALIVE_STATE_PINGING);
|
@@ -2913,21 +2878,22 @@ static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
|
|
2913
2878
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
|
2914
2879
|
}
|
2915
2880
|
|
2916
|
-
|
2917
|
-
|
2918
|
-
|
2881
|
+
//
|
2882
|
+
// CALLBACK LOOP
|
2883
|
+
//
|
2919
2884
|
|
2920
2885
|
static void connectivity_state_set(grpc_chttp2_transport* t,
|
2921
2886
|
grpc_connectivity_state state,
|
2887
|
+
const absl::Status& status,
|
2922
2888
|
const char* reason) {
|
2923
2889
|
GRPC_CHTTP2_IF_TRACING(
|
2924
2890
|
gpr_log(GPR_INFO, "transport %p set connectivity_state=%d", t, state));
|
2925
|
-
t->state_tracker.SetState(state, reason);
|
2891
|
+
t->state_tracker.SetState(state, status, reason);
|
2926
2892
|
}
|
2927
2893
|
|
2928
|
-
|
2929
|
-
|
2930
|
-
|
2894
|
+
//
|
2895
|
+
// POLLSET STUFF
|
2896
|
+
//
|
2931
2897
|
|
2932
2898
|
static void set_pollset(grpc_transport* gt, grpc_stream* /*gs*/,
|
2933
2899
|
grpc_pollset* pollset) {
|
@@ -2941,9 +2907,9 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* /*gs*/,
|
|
2941
2907
|
grpc_endpoint_add_to_pollset_set(t->ep, pollset_set);
|
2942
2908
|
}
|
2943
2909
|
|
2944
|
-
|
2945
|
-
|
2946
|
-
|
2910
|
+
//
|
2911
|
+
// BYTE STREAM
|
2912
|
+
//
|
2947
2913
|
|
2948
2914
|
static void reset_byte_stream(void* arg, grpc_error* error) {
|
2949
2915
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
|
@@ -3031,7 +2997,7 @@ void Chttp2IncomingByteStream::NextLocked(void* arg,
|
|
3031
2997
|
s->data_parser.parsing_frame = nullptr;
|
3032
2998
|
}
|
3033
2999
|
} else {
|
3034
|
-
|
3000
|
+
// Should never reach here.
|
3035
3001
|
GPR_ASSERT(false);
|
3036
3002
|
}
|
3037
3003
|
} else {
|
@@ -3160,9 +3126,9 @@ void Chttp2IncomingByteStream::Shutdown(grpc_error* error) {
|
|
3160
3126
|
|
3161
3127
|
} // namespace grpc_core
|
3162
3128
|
|
3163
|
-
|
3164
|
-
|
3165
|
-
|
3129
|
+
//
|
3130
|
+
// RESOURCE QUOTAS
|
3131
|
+
//
|
3166
3132
|
|
3167
3133
|
static void post_benign_reclaimer(grpc_chttp2_transport* t) {
|
3168
3134
|
if (!t->benign_reclaimer_registered) {
|
@@ -3197,11 +3163,11 @@ static void benign_reclaimer_locked(void* arg, grpc_error* error) {
|
|
3197
3163
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
3198
3164
|
if (error == GRPC_ERROR_NONE &&
|
3199
3165
|
grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
3200
|
-
|
3201
|
-
|
3166
|
+
// Channel with no active streams: send a goaway to try and make it
|
3167
|
+
// disconnect cleanly
|
3202
3168
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
3203
3169
|
gpr_log(GPR_INFO, "HTTP2: %s - send goaway to free memory",
|
3204
|
-
t->peer_string);
|
3170
|
+
t->peer_string.c_str());
|
3205
3171
|
}
|
3206
3172
|
send_goaway(t,
|
3207
3173
|
grpc_error_set_int(
|
@@ -3212,7 +3178,8 @@ static void benign_reclaimer_locked(void* arg, grpc_error* error) {
|
|
3212
3178
|
gpr_log(GPR_INFO,
|
3213
3179
|
"HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
|
3214
3180
|
" streams",
|
3215
|
-
t->peer_string
|
3181
|
+
t->peer_string.c_str(),
|
3182
|
+
grpc_chttp2_stream_map_size(&t->stream_map));
|
3216
3183
|
}
|
3217
3184
|
t->benign_reclaimer_registered = false;
|
3218
3185
|
if (error != GRPC_ERROR_CANCELLED) {
|
@@ -3237,8 +3204,8 @@ static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
|
|
3237
3204
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
|
3238
3205
|
grpc_chttp2_stream_map_rand(&t->stream_map));
|
3239
3206
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
3240
|
-
gpr_log(GPR_INFO, "HTTP2: %s - abandon stream id %d",
|
3241
|
-
s->id);
|
3207
|
+
gpr_log(GPR_INFO, "HTTP2: %s - abandon stream id %d",
|
3208
|
+
t->peer_string.c_str(), s->id);
|
3242
3209
|
}
|
3243
3210
|
grpc_chttp2_cancel_stream(
|
3244
3211
|
t, s,
|
@@ -3246,10 +3213,10 @@ static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
|
|
3246
3213
|
GRPC_ERROR_INT_HTTP2_ERROR,
|
3247
3214
|
GRPC_HTTP2_ENHANCE_YOUR_CALM));
|
3248
3215
|
if (n > 1) {
|
3249
|
-
|
3250
|
-
|
3251
|
-
|
3252
|
-
|
3216
|
+
// Since we cancel one stream per destructive reclamation, if
|
3217
|
+
// there are more streams left, we can immediately post a new
|
3218
|
+
// reclaimer in case the resource quota needs to free more
|
3219
|
+
// memory
|
3253
3220
|
post_destructive_reclaimer(t);
|
3254
3221
|
}
|
3255
3222
|
}
|
@@ -3260,9 +3227,9 @@ static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
|
|
3260
3227
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "destructive_reclaimer");
|
3261
3228
|
}
|
3262
3229
|
|
3263
|
-
|
3264
|
-
|
3265
|
-
|
3230
|
+
//
|
3231
|
+
// MONITORING
|
3232
|
+
//
|
3266
3233
|
|
3267
3234
|
const char* grpc_chttp2_initiate_write_reason_string(
|
3268
3235
|
grpc_chttp2_initiate_write_reason reason) {
|
@@ -3299,6 +3266,8 @@ const char* grpc_chttp2_initiate_write_reason_string(
|
|
3299
3266
|
return "FLOW_CONTROL_UNSTALLED_BY_UPDATE";
|
3300
3267
|
case GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING:
|
3301
3268
|
return "APPLICATION_PING";
|
3269
|
+
case GRPC_CHTTP2_INITIATE_WRITE_BDP_PING:
|
3270
|
+
return "BDP_PING";
|
3302
3271
|
case GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING:
|
3303
3272
|
return "KEEPALIVE_PING";
|
3304
3273
|
case GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL_UNSTALLED:
|