grpc 1.31.1 → 1.32.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 +595 -15723
- data/include/grpc/grpc_security.h +31 -14
- data/include/grpc/impl/codegen/README.md +22 -0
- 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 +64 -20
- 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/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 +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +20 -13
- 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 +19 -13
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +29 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -4
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +20 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +18 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +22 -14
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +18 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +54 -56
- 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 +363 -14
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -1
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +5 -4
- data/src/core/ext/filters/client_channel/server_address.cc +40 -7
- data/src/core/ext/filters/client_channel/server_address.h +42 -4
- 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/max_age/max_age_filter.cc +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 +239 -277
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +5 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +1 -28
- 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 +224 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -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 +380 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -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 +112 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -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 +309 -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 +96 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -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/grpc_service.upb.c +195 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -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 +152 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -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/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 +108 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -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 +174 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -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 +773 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -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 +312 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -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 +111 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -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 +129 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -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 +53 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -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/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/versioning.upb.c +27 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -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/{filters/client_channel/xds → xds}/xds_api.cc +1045 -767
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.h +114 -99
- 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.h +4 -4
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +3 -3
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_secure.cc +2 -5
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +85 -417
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +12 -45
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +2 -2
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +3 -3
- data/src/core/lib/channel/channelz.cc +14 -15
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/channelz_registry.cc +3 -1
- data/src/core/lib/gpr/sync_posix.cc +2 -8
- 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 +32 -11
- data/src/core/lib/iomgr/ev_posix.cc +0 -2
- 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/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/credentials/google_default/google_default_credentials.cc +56 -38
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -2
- 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 +28 -20
- data/src/core/lib/surface/channel.h +12 -2
- 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 +1 -3
- 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/connectivity_state.cc +18 -13
- data/src/core/lib/transport/connectivity_state.h +18 -6
- 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/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/tsi/alts/handshaker/alts_tsi_handshaker.cc +22 -0
- data/src/core/tsi/ssl_transport_security.cc +3 -9
- data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +10 -0
- data/src/ruby/spec/generic/active_call_spec.rb +19 -8
- 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 +263 -257
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +39 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +11 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
- 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_server.cc +5 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
- 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 +257 -155
- 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/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
@@ -114,10 +114,11 @@ class ResolvingLoadBalancingPolicy::ResolvingControlHelper
|
|
114
114
|
return parent_->channel_control_helper()->CreateSubchannel(args);
|
115
115
|
}
|
116
116
|
|
117
|
-
void UpdateState(grpc_connectivity_state state,
|
117
|
+
void UpdateState(grpc_connectivity_state state, const absl::Status& status,
|
118
118
|
std::unique_ptr<SubchannelPicker> picker) override {
|
119
119
|
if (parent_->resolver_ == nullptr) return; // Shutting down.
|
120
|
-
parent_->channel_control_helper()->UpdateState(state,
|
120
|
+
parent_->channel_control_helper()->UpdateState(state, status,
|
121
|
+
std::move(picker));
|
121
122
|
}
|
122
123
|
|
123
124
|
void RequestReresolution() override {
|
@@ -160,7 +161,7 @@ ResolvingLoadBalancingPolicy::ResolvingLoadBalancingPolicy(
|
|
160
161
|
if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
|
161
162
|
gpr_log(GPR_INFO, "resolving_lb=%p: starting name resolution", this);
|
162
163
|
}
|
163
|
-
channel_control_helper()->UpdateState(GRPC_CHANNEL_CONNECTING,
|
164
|
+
channel_control_helper()->UpdateState(GRPC_CHANNEL_CONNECTING, absl::Status(),
|
164
165
|
absl::make_unique<QueuePicker>(Ref()));
|
165
166
|
resolver_->StartLocked();
|
166
167
|
}
|
@@ -214,7 +215,7 @@ void ResolvingLoadBalancingPolicy::OnResolverError(grpc_error* error) {
|
|
214
215
|
"Resolver transient failure", &error, 1);
|
215
216
|
helper_->ResolverTransientFailure(GRPC_ERROR_REF(state_error));
|
216
217
|
channel_control_helper()->UpdateState(
|
217
|
-
GRPC_CHANNEL_TRANSIENT_FAILURE,
|
218
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(state_error),
|
218
219
|
absl::make_unique<TransientFailurePicker>(state_error));
|
219
220
|
}
|
220
221
|
GRPC_ERROR_UNREF(error);
|
@@ -26,23 +26,56 @@ namespace grpc_core {
|
|
26
26
|
// ServerAddress
|
27
27
|
//
|
28
28
|
|
29
|
-
ServerAddress::ServerAddress(
|
30
|
-
|
31
|
-
|
29
|
+
ServerAddress::ServerAddress(
|
30
|
+
const grpc_resolved_address& address, grpc_channel_args* args,
|
31
|
+
std::map<const char*, std::unique_ptr<AttributeInterface>> attributes)
|
32
|
+
: address_(address), args_(args), attributes_(std::move(attributes)) {}
|
32
33
|
|
33
|
-
ServerAddress::ServerAddress(
|
34
|
-
|
35
|
-
|
34
|
+
ServerAddress::ServerAddress(
|
35
|
+
const void* address, size_t address_len, grpc_channel_args* args,
|
36
|
+
std::map<const char*, std::unique_ptr<AttributeInterface>> attributes)
|
37
|
+
: args_(args), attributes_(std::move(attributes)) {
|
36
38
|
memcpy(address_.addr, address, address_len);
|
37
39
|
address_.len = static_cast<socklen_t>(address_len);
|
38
40
|
}
|
39
41
|
|
42
|
+
namespace {
|
43
|
+
|
44
|
+
int CompareAttributes(
|
45
|
+
const std::map<const char*,
|
46
|
+
std::unique_ptr<ServerAddress::AttributeInterface>>&
|
47
|
+
attributes1,
|
48
|
+
const std::map<const char*,
|
49
|
+
std::unique_ptr<ServerAddress::AttributeInterface>>&
|
50
|
+
attributes2) {
|
51
|
+
auto it2 = attributes2.begin();
|
52
|
+
for (auto it1 = attributes1.begin(); it1 != attributes1.end(); ++it1) {
|
53
|
+
// attributes2 has fewer elements than attributes1
|
54
|
+
if (it2 == attributes2.end()) return -1;
|
55
|
+
// compare keys
|
56
|
+
int retval = strcmp(it1->first, it2->first);
|
57
|
+
if (retval != 0) return retval;
|
58
|
+
// compare values
|
59
|
+
retval = it1->second->Cmp(it2->second.get());
|
60
|
+
if (retval != 0) return retval;
|
61
|
+
++it2;
|
62
|
+
}
|
63
|
+
// attributes1 has fewer elements than attributes2
|
64
|
+
if (it2 != attributes2.end()) return 1;
|
65
|
+
// equal
|
66
|
+
return 0;
|
67
|
+
}
|
68
|
+
|
69
|
+
} // namespace
|
70
|
+
|
40
71
|
int ServerAddress::Cmp(const ServerAddress& other) const {
|
41
72
|
if (address_.len > other.address_.len) return 1;
|
42
73
|
if (address_.len < other.address_.len) return -1;
|
43
74
|
int retval = memcmp(address_.addr, other.address_.addr, address_.len);
|
44
75
|
if (retval != 0) return retval;
|
45
|
-
|
76
|
+
retval = grpc_channel_args_compare(args_, other.args_);
|
77
|
+
if (retval != 0) return retval;
|
78
|
+
return CompareAttributes(attributes_, other.attributes_);
|
46
79
|
}
|
47
80
|
|
48
81
|
} // namespace grpc_core
|
@@ -21,6 +21,8 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
+
#include <map>
|
25
|
+
|
24
26
|
#include "absl/container/inlined_vector.h"
|
25
27
|
|
26
28
|
#include "src/core/lib/channel/channel_args.h"
|
@@ -37,26 +39,54 @@ namespace grpc_core {
|
|
37
39
|
// args when a subchannel is created for this address.
|
38
40
|
class ServerAddress {
|
39
41
|
public:
|
42
|
+
// Base class for resolver-supplied attributes.
|
43
|
+
// Unlike channel args, these attributes don't affect subchannel
|
44
|
+
// uniqueness or behavior. They are for use by LB policies only.
|
45
|
+
class AttributeInterface {
|
46
|
+
public:
|
47
|
+
virtual ~AttributeInterface();
|
48
|
+
|
49
|
+
// Creates a copy of the attribute.
|
50
|
+
virtual std::unique_ptr<AttributeInterface> Copy() const = 0;
|
51
|
+
|
52
|
+
// Compares this attribute with another.
|
53
|
+
virtual int Cmp(const AttributeInterface* other) const = 0;
|
54
|
+
};
|
55
|
+
|
40
56
|
// Takes ownership of args.
|
41
|
-
ServerAddress(const grpc_resolved_address& address, grpc_channel_args* args
|
57
|
+
ServerAddress(const grpc_resolved_address& address, grpc_channel_args* args,
|
58
|
+
std::map<const char*, std::unique_ptr<AttributeInterface>>
|
59
|
+
attributes = {});
|
42
60
|
ServerAddress(const void* address, size_t address_len,
|
43
|
-
grpc_channel_args* args
|
61
|
+
grpc_channel_args* args,
|
62
|
+
std::map<const char*, std::unique_ptr<AttributeInterface>>
|
63
|
+
attributes = {});
|
44
64
|
|
45
65
|
~ServerAddress() { grpc_channel_args_destroy(args_); }
|
46
66
|
|
47
67
|
// Copyable.
|
48
68
|
ServerAddress(const ServerAddress& other)
|
49
|
-
: address_(other.address_), args_(grpc_channel_args_copy(other.args_)) {
|
69
|
+
: address_(other.address_), args_(grpc_channel_args_copy(other.args_)) {
|
70
|
+
for (const auto& p : other.attributes_) {
|
71
|
+
attributes_[p.first] = p.second->Copy();
|
72
|
+
}
|
73
|
+
}
|
50
74
|
ServerAddress& operator=(const ServerAddress& other) {
|
51
75
|
address_ = other.address_;
|
52
76
|
grpc_channel_args_destroy(args_);
|
53
77
|
args_ = grpc_channel_args_copy(other.args_);
|
78
|
+
attributes_.clear();
|
79
|
+
for (const auto& p : other.attributes_) {
|
80
|
+
attributes_[p.first] = p.second->Copy();
|
81
|
+
}
|
54
82
|
return *this;
|
55
83
|
}
|
56
84
|
|
57
85
|
// Movable.
|
58
86
|
ServerAddress(ServerAddress&& other)
|
59
|
-
: address_(other.address_),
|
87
|
+
: address_(other.address_),
|
88
|
+
args_(other.args_),
|
89
|
+
attributes_(std::move(other.attributes_)) {
|
60
90
|
other.args_ = nullptr;
|
61
91
|
}
|
62
92
|
ServerAddress& operator=(ServerAddress&& other) {
|
@@ -64,6 +94,7 @@ class ServerAddress {
|
|
64
94
|
grpc_channel_args_destroy(args_);
|
65
95
|
args_ = other.args_;
|
66
96
|
other.args_ = nullptr;
|
97
|
+
attributes_ = std::move(other.attributes_);
|
67
98
|
return *this;
|
68
99
|
}
|
69
100
|
|
@@ -74,9 +105,16 @@ class ServerAddress {
|
|
74
105
|
const grpc_resolved_address& address() const { return address_; }
|
75
106
|
const grpc_channel_args* args() const { return args_; }
|
76
107
|
|
108
|
+
const AttributeInterface* GetAttribute(const char* key) const {
|
109
|
+
auto it = attributes_.find(key);
|
110
|
+
if (it == attributes_.end()) return nullptr;
|
111
|
+
return it->second.get();
|
112
|
+
}
|
113
|
+
|
77
114
|
private:
|
78
115
|
grpc_resolved_address address_;
|
79
116
|
grpc_channel_args* args_;
|
117
|
+
std::map<const char*, std::unique_ptr<AttributeInterface>> attributes_;
|
80
118
|
};
|
81
119
|
|
82
120
|
//
|
@@ -26,12 +26,13 @@
|
|
26
26
|
#include <algorithm>
|
27
27
|
#include <cstring>
|
28
28
|
|
29
|
+
#include "absl/strings/str_format.h"
|
30
|
+
|
29
31
|
#include <grpc/support/alloc.h>
|
30
32
|
#include <grpc/support/string_util.h>
|
31
33
|
|
32
34
|
#include "src/core/ext/filters/client_channel/client_channel.h"
|
33
35
|
#include "src/core/ext/filters/client_channel/health/health_check_client.h"
|
34
|
-
#include "src/core/ext/filters/client_channel/parse_address.h"
|
35
36
|
#include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
|
36
37
|
#include "src/core/ext/filters/client_channel/service_config.h"
|
37
38
|
#include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
|
@@ -44,6 +45,7 @@
|
|
44
45
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
45
46
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
46
47
|
#include "src/core/lib/gprpp/sync.h"
|
48
|
+
#include "src/core/lib/iomgr/parse_address.h"
|
47
49
|
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
48
50
|
#include "src/core/lib/profiling/timers.h"
|
49
51
|
#include "src/core/lib/slice/slice_internal.h"
|
@@ -325,7 +327,8 @@ class Subchannel::ConnectedSubchannelStateWatcher
|
|
325
327
|
}
|
326
328
|
|
327
329
|
private:
|
328
|
-
void OnConnectivityStateChange(grpc_connectivity_state new_state
|
330
|
+
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
331
|
+
const absl::Status& status) override {
|
329
332
|
Subchannel* c = subchannel_;
|
330
333
|
MutexLock lock(&c->mu_);
|
331
334
|
switch (new_state) {
|
@@ -343,7 +346,15 @@ class Subchannel::ConnectedSubchannelStateWatcher
|
|
343
346
|
if (c->channelz_node() != nullptr) {
|
344
347
|
c->channelz_node()->SetChildSocket(nullptr);
|
345
348
|
}
|
346
|
-
|
349
|
+
// We need to construct our own status if the underlying state was
|
350
|
+
// shutdown since the accompanying status will be StatusCode::OK
|
351
|
+
// otherwise.
|
352
|
+
c->SetConnectivityStateLocked(
|
353
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE,
|
354
|
+
new_state == GRPC_CHANNEL_SHUTDOWN
|
355
|
+
? absl::Status(absl::StatusCode::kUnavailable,
|
356
|
+
"Subchannel has disconnected.")
|
357
|
+
: status);
|
347
358
|
c->backoff_begun_ = false;
|
348
359
|
c->backoff_.Reset();
|
349
360
|
}
|
@@ -354,7 +365,7 @@ class Subchannel::ConnectedSubchannelStateWatcher
|
|
354
365
|
// a callback for READY, because that was the state we started
|
355
366
|
// this watch from. And a connected subchannel should never go
|
356
367
|
// from READY to CONNECTING or IDLE.
|
357
|
-
c->SetConnectivityStateLocked(new_state);
|
368
|
+
c->SetConnectivityStateLocked(new_state, status);
|
358
369
|
}
|
359
370
|
}
|
360
371
|
}
|
@@ -368,14 +379,15 @@ class Subchannel::AsyncWatcherNotifierLocked {
|
|
368
379
|
public:
|
369
380
|
AsyncWatcherNotifierLocked(
|
370
381
|
RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface> watcher,
|
371
|
-
Subchannel* subchannel, grpc_connectivity_state state
|
382
|
+
Subchannel* subchannel, grpc_connectivity_state state,
|
383
|
+
const absl::Status& status)
|
372
384
|
: watcher_(std::move(watcher)) {
|
373
385
|
RefCountedPtr<ConnectedSubchannel> connected_subchannel;
|
374
386
|
if (state == GRPC_CHANNEL_READY) {
|
375
387
|
connected_subchannel = subchannel->connected_subchannel_;
|
376
388
|
}
|
377
389
|
watcher_->PushConnectivityStateChange(
|
378
|
-
{state, std::move(connected_subchannel)});
|
390
|
+
{state, status, std::move(connected_subchannel)});
|
379
391
|
ExecCtx::Run(
|
380
392
|
DEBUG_LOCATION,
|
381
393
|
GRPC_CLOSURE_INIT(&closure_,
|
@@ -409,9 +421,10 @@ void Subchannel::ConnectivityStateWatcherList::RemoveWatcherLocked(
|
|
409
421
|
}
|
410
422
|
|
411
423
|
void Subchannel::ConnectivityStateWatcherList::NotifyLocked(
|
412
|
-
Subchannel* subchannel, grpc_connectivity_state state
|
424
|
+
Subchannel* subchannel, grpc_connectivity_state state,
|
425
|
+
const absl::Status& status) {
|
413
426
|
for (const auto& p : watchers_) {
|
414
|
-
new AsyncWatcherNotifierLocked(p.second, subchannel, state);
|
427
|
+
new AsyncWatcherNotifierLocked(p.second, subchannel, state, status);
|
415
428
|
}
|
416
429
|
}
|
417
430
|
|
@@ -450,7 +463,7 @@ class Subchannel::HealthWatcherMap::HealthWatcher
|
|
450
463
|
grpc_connectivity_state initial_state,
|
451
464
|
RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface> watcher) {
|
452
465
|
if (state_ != initial_state) {
|
453
|
-
new AsyncWatcherNotifierLocked(watcher, subchannel_, state_);
|
466
|
+
new AsyncWatcherNotifierLocked(watcher, subchannel_, state_, status_);
|
454
467
|
}
|
455
468
|
watcher_list_.AddWatcherLocked(std::move(watcher));
|
456
469
|
}
|
@@ -462,7 +475,7 @@ class Subchannel::HealthWatcherMap::HealthWatcher
|
|
462
475
|
|
463
476
|
bool HasWatchers() const { return !watcher_list_.empty(); }
|
464
477
|
|
465
|
-
void NotifyLocked(grpc_connectivity_state state) {
|
478
|
+
void NotifyLocked(grpc_connectivity_state state, const absl::Status& status) {
|
466
479
|
if (state == GRPC_CHANNEL_READY) {
|
467
480
|
// If we had not already notified for CONNECTING state, do so now.
|
468
481
|
// (We may have missed this earlier, because if the transition
|
@@ -470,13 +483,15 @@ class Subchannel::HealthWatcherMap::HealthWatcher
|
|
470
483
|
// subchannel may not have sent us a notification for CONNECTING.)
|
471
484
|
if (state_ != GRPC_CHANNEL_CONNECTING) {
|
472
485
|
state_ = GRPC_CHANNEL_CONNECTING;
|
473
|
-
|
486
|
+
status_ = status;
|
487
|
+
watcher_list_.NotifyLocked(subchannel_, state_, status);
|
474
488
|
}
|
475
489
|
// If we've become connected, start health checking.
|
476
490
|
StartHealthCheckingLocked();
|
477
491
|
} else {
|
478
492
|
state_ = state;
|
479
|
-
|
493
|
+
status_ = status;
|
494
|
+
watcher_list_.NotifyLocked(subchannel_, state_, status);
|
480
495
|
// We're not connected, so stop health checking.
|
481
496
|
health_check_client_.reset();
|
482
497
|
}
|
@@ -489,11 +504,13 @@ class Subchannel::HealthWatcherMap::HealthWatcher
|
|
489
504
|
}
|
490
505
|
|
491
506
|
private:
|
492
|
-
void OnConnectivityStateChange(grpc_connectivity_state new_state
|
507
|
+
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
508
|
+
const absl::Status& status) override {
|
493
509
|
MutexLock lock(&subchannel_->mu_);
|
494
510
|
if (new_state != GRPC_CHANNEL_SHUTDOWN && health_check_client_ != nullptr) {
|
495
511
|
state_ = new_state;
|
496
|
-
|
512
|
+
status_ = status;
|
513
|
+
watcher_list_.NotifyLocked(subchannel_, new_state, status);
|
497
514
|
}
|
498
515
|
}
|
499
516
|
|
@@ -508,6 +525,7 @@ class Subchannel::HealthWatcherMap::HealthWatcher
|
|
508
525
|
grpc_core::UniquePtr<char> health_check_service_name_;
|
509
526
|
OrphanablePtr<HealthCheckClient> health_check_client_;
|
510
527
|
grpc_connectivity_state state_;
|
528
|
+
absl::Status status_;
|
511
529
|
ConnectivityStateWatcherList watcher_list_;
|
512
530
|
};
|
513
531
|
|
@@ -547,9 +565,10 @@ void Subchannel::HealthWatcherMap::RemoveWatcherLocked(
|
|
547
565
|
if (!it->second->HasWatchers()) map_.erase(it);
|
548
566
|
}
|
549
567
|
|
550
|
-
void Subchannel::HealthWatcherMap::NotifyLocked(grpc_connectivity_state state
|
568
|
+
void Subchannel::HealthWatcherMap::NotifyLocked(grpc_connectivity_state state,
|
569
|
+
const absl::Status& status) {
|
551
570
|
for (const auto& p : map_) {
|
552
|
-
p.second->NotifyLocked(state);
|
571
|
+
p.second->NotifyLocked(state, status);
|
553
572
|
}
|
554
573
|
}
|
555
574
|
|
@@ -724,6 +743,25 @@ Subchannel* Subchannel::Create(OrphanablePtr<SubchannelConnector> connector,
|
|
724
743
|
return registered;
|
725
744
|
}
|
726
745
|
|
746
|
+
void Subchannel::ThrottleKeepaliveTime(int new_keepalive_time) {
|
747
|
+
MutexLock lock(&mu_);
|
748
|
+
// Only update the value if the new keepalive time is larger.
|
749
|
+
if (new_keepalive_time > keepalive_time_) {
|
750
|
+
keepalive_time_ = new_keepalive_time;
|
751
|
+
if (grpc_trace_subchannel.enabled()) {
|
752
|
+
gpr_log(GPR_INFO, "Subchannel=%p: Throttling keepalive time to %d", this,
|
753
|
+
new_keepalive_time);
|
754
|
+
}
|
755
|
+
const grpc_arg arg_to_add = grpc_channel_arg_integer_create(
|
756
|
+
const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS), new_keepalive_time);
|
757
|
+
const char* arg_to_remove = GRPC_ARG_KEEPALIVE_TIME_MS;
|
758
|
+
grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
|
759
|
+
args_, &arg_to_remove, 1, &arg_to_add, 1);
|
760
|
+
grpc_channel_args_destroy(args_);
|
761
|
+
args_ = new_args;
|
762
|
+
}
|
763
|
+
}
|
764
|
+
|
727
765
|
Subchannel* Subchannel::Ref(GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
|
728
766
|
gpr_atm old_refs;
|
729
767
|
old_refs = RefMutate((1 << INTERNAL_REF_BITS),
|
@@ -826,7 +864,7 @@ void Subchannel::WatchConnectivityState(
|
|
826
864
|
}
|
827
865
|
if (health_check_service_name == nullptr) {
|
828
866
|
if (state_ != initial_state) {
|
829
|
-
new AsyncWatcherNotifierLocked(watcher, this, state_);
|
867
|
+
new AsyncWatcherNotifierLocked(watcher, this, state_, status_);
|
830
868
|
}
|
831
869
|
watcher_list_.AddWatcherLocked(std::move(watcher));
|
832
870
|
} else {
|
@@ -928,8 +966,10 @@ const char* SubchannelConnectivityStateChangeString(
|
|
928
966
|
} // namespace
|
929
967
|
|
930
968
|
// Note: Must be called with a state that is different from the current state.
|
931
|
-
void Subchannel::SetConnectivityStateLocked(grpc_connectivity_state state
|
969
|
+
void Subchannel::SetConnectivityStateLocked(grpc_connectivity_state state,
|
970
|
+
const absl::Status& status) {
|
932
971
|
state_ = state;
|
972
|
+
status_ = status;
|
933
973
|
if (channelz_node_ != nullptr) {
|
934
974
|
channelz_node_->UpdateConnectivityState(state);
|
935
975
|
channelz_node_->AddTraceEvent(
|
@@ -938,9 +978,9 @@ void Subchannel::SetConnectivityStateLocked(grpc_connectivity_state state) {
|
|
938
978
|
SubchannelConnectivityStateChangeString(state)));
|
939
979
|
}
|
940
980
|
// Notify non-health watchers.
|
941
|
-
watcher_list_.NotifyLocked(this, state);
|
981
|
+
watcher_list_.NotifyLocked(this, state, status);
|
942
982
|
// Notify health watchers.
|
943
|
-
health_watcher_map_.NotifyLocked(state);
|
983
|
+
health_watcher_map_.NotifyLocked(state, status);
|
944
984
|
}
|
945
985
|
|
946
986
|
void Subchannel::MaybeStartConnectingLocked() {
|
@@ -1012,7 +1052,7 @@ void Subchannel::ContinueConnectingLocked() {
|
|
1012
1052
|
next_attempt_deadline_ = backoff_.NextAttemptTime();
|
1013
1053
|
args.deadline = std::max(next_attempt_deadline_, min_deadline);
|
1014
1054
|
args.channel_args = args_;
|
1015
|
-
SetConnectivityStateLocked(GRPC_CHANNEL_CONNECTING);
|
1055
|
+
SetConnectivityStateLocked(GRPC_CHANNEL_CONNECTING, absl::Status());
|
1016
1056
|
connector_->Connect(args, &connecting_result_, &on_connecting_finished_);
|
1017
1057
|
}
|
1018
1058
|
|
@@ -1031,7 +1071,8 @@ void Subchannel::OnConnectingFinished(void* arg, grpc_error* error) {
|
|
1031
1071
|
GRPC_SUBCHANNEL_WEAK_UNREF(c, "connecting");
|
1032
1072
|
} else {
|
1033
1073
|
gpr_log(GPR_INFO, "Connect failed: %s", grpc_error_string(error));
|
1034
|
-
c->SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE
|
1074
|
+
c->SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE,
|
1075
|
+
grpc_error_to_absl_status(error));
|
1035
1076
|
GRPC_SUBCHANNEL_WEAK_UNREF(c, "connecting");
|
1036
1077
|
}
|
1037
1078
|
}
|
@@ -1091,7 +1132,7 @@ bool Subchannel::PublishTransportLocked() {
|
|
1091
1132
|
connected_subchannel_->StartWatch(
|
1092
1133
|
pollset_set_, MakeOrphanable<ConnectedSubchannelStateWatcher>(this));
|
1093
1134
|
// Report initial state.
|
1094
|
-
SetConnectivityStateLocked(GRPC_CHANNEL_READY);
|
1135
|
+
SetConnectivityStateLocked(GRPC_CHANNEL_READY, absl::Status());
|
1095
1136
|
return true;
|
1096
1137
|
}
|
1097
1138
|
|
@@ -39,7 +39,7 @@
|
|
39
39
|
#include "src/core/lib/transport/connectivity_state.h"
|
40
40
|
#include "src/core/lib/transport/metadata.h"
|
41
41
|
|
42
|
-
// Channel arg containing a
|
42
|
+
// Channel arg containing a URI indicating the address to connect to.
|
43
43
|
#define GRPC_ARG_SUBCHANNEL_ADDRESS "grpc.subchannel_address"
|
44
44
|
|
45
45
|
// For debugging refcounting.
|
@@ -182,6 +182,7 @@ class Subchannel {
|
|
182
182
|
public:
|
183
183
|
struct ConnectivityStateChange {
|
184
184
|
grpc_connectivity_state state;
|
185
|
+
absl::Status status;
|
185
186
|
RefCountedPtr<ConnectedSubchannel> connected_subchannel;
|
186
187
|
};
|
187
188
|
|
@@ -227,6 +228,11 @@ class Subchannel {
|
|
227
228
|
static Subchannel* Create(OrphanablePtr<SubchannelConnector> connector,
|
228
229
|
const grpc_channel_args* args);
|
229
230
|
|
231
|
+
// Throttles keepalive time to \a new_keepalive_time iff \a new_keepalive_time
|
232
|
+
// is larger than the subchannel's current keepalive time. The updated value
|
233
|
+
// will have an affect when the subchannel creates a new ConnectedSubchannel.
|
234
|
+
void ThrottleKeepaliveTime(int new_keepalive_time);
|
235
|
+
|
230
236
|
// Strong and weak refcounting.
|
231
237
|
Subchannel* Ref(GRPC_SUBCHANNEL_REF_EXTRA_ARGS);
|
232
238
|
void Unref(GRPC_SUBCHANNEL_REF_EXTRA_ARGS);
|
@@ -306,7 +312,8 @@ class Subchannel {
|
|
306
312
|
void RemoveWatcherLocked(ConnectivityStateWatcherInterface* watcher);
|
307
313
|
|
308
314
|
// Notifies all watchers in the list about a change to state.
|
309
|
-
void NotifyLocked(Subchannel* subchannel, grpc_connectivity_state state
|
315
|
+
void NotifyLocked(Subchannel* subchannel, grpc_connectivity_state state,
|
316
|
+
const absl::Status& status);
|
310
317
|
|
311
318
|
void Clear() { watchers_.clear(); }
|
312
319
|
|
@@ -339,7 +346,8 @@ class Subchannel {
|
|
339
346
|
ConnectivityStateWatcherInterface* watcher);
|
340
347
|
|
341
348
|
// Notifies the watcher when the subchannel's state changes.
|
342
|
-
void NotifyLocked(grpc_connectivity_state state
|
349
|
+
void NotifyLocked(grpc_connectivity_state state,
|
350
|
+
const absl::Status& status);
|
343
351
|
|
344
352
|
grpc_connectivity_state CheckConnectivityStateLocked(
|
345
353
|
Subchannel* subchannel, const char* health_check_service_name);
|
@@ -357,7 +365,8 @@ class Subchannel {
|
|
357
365
|
class AsyncWatcherNotifierLocked;
|
358
366
|
|
359
367
|
// Sets the subchannel's connectivity state to \a state.
|
360
|
-
void SetConnectivityStateLocked(grpc_connectivity_state state
|
368
|
+
void SetConnectivityStateLocked(grpc_connectivity_state state,
|
369
|
+
const absl::Status& status);
|
361
370
|
|
362
371
|
// Methods for connection.
|
363
372
|
void MaybeStartConnectingLocked();
|
@@ -400,6 +409,7 @@ class Subchannel {
|
|
400
409
|
|
401
410
|
// Connectivity state tracking.
|
402
411
|
grpc_connectivity_state state_ = GRPC_CHANNEL_IDLE;
|
412
|
+
absl::Status status_;
|
403
413
|
// The list of watchers without a health check service name.
|
404
414
|
ConnectivityStateWatcherList watcher_list_;
|
405
415
|
// The map of watchers with health check service names.
|
@@ -417,6 +427,8 @@ class Subchannel {
|
|
417
427
|
bool have_retry_alarm_ = false;
|
418
428
|
// reset_backoff() was called while alarm was pending.
|
419
429
|
bool retry_immediately_ = false;
|
430
|
+
// Keepalive time period (-1 for unset)
|
431
|
+
int keepalive_time_ = -1;
|
420
432
|
|
421
433
|
// Channelz tracking.
|
422
434
|
RefCountedPtr<channelz::SubchannelNode> channelz_node_;
|