grpc 1.26.0 → 1.30.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +7860 -11139
- data/etc/roots.pem +44 -0
- data/include/grpc/grpc.h +2 -2
- data/include/grpc/grpc_security.h +59 -24
- data/include/grpc/grpc_security_constants.h +28 -0
- data/include/grpc/impl/codegen/grpc_types.h +38 -21
- data/include/grpc/impl/codegen/port_platform.h +14 -3
- data/include/grpc/impl/codegen/sync.h +5 -3
- data/include/grpc/impl/codegen/sync_abseil.h +36 -0
- data/include/grpc/module.modulemap +25 -37
- data/include/grpc/support/sync_abseil.h +26 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +273 -264
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +31 -47
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -3
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/http_proxy.cc +25 -15
- data/src/core/ext/filters/client_channel/lb_policy.cc +20 -18
- data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +297 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +423 -627
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +88 -121
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +28 -57
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +18 -21
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -14
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +150 -101
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +49 -77
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
- data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
- data/src/core/ext/filters/client_channel/resolver.cc +5 -8
- data/src/core/ext/filters/client_channel/resolver.h +12 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +129 -128
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +17 -21
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +186 -135
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +42 -45
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +94 -103
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +61 -10
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
- data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +242 -300
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +21 -18
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +56 -206
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +11 -14
- data/src/core/ext/filters/client_channel/server_address.cc +6 -9
- data/src/core/ext/filters/client_channel/server_address.h +6 -12
- data/src/core/ext/filters/client_channel/service_config.cc +144 -253
- data/src/core/ext/filters/client_channel/service_config.h +32 -109
- data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
- data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
- data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
- data/src/core/ext/filters/client_channel/subchannel.h +35 -11
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +1556 -232
- data/src/core/ext/filters/client_channel/xds/xds_api.h +213 -114
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +237 -345
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +34 -46
- data/src/core/ext/filters/client_channel/xds/xds_channel.h +3 -1
- data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +18 -11
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +1326 -399
- data/src/core/ext/filters/client_channel/xds/xds_client.h +124 -41
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +59 -138
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +133 -154
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
- data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +38 -44
- data/src/core/ext/filters/message_size/message_size_filter.h +5 -5
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +7 -10
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +28 -29
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
- data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +16 -9
- data/src/core/ext/transport/inproc/inproc_transport.cc +41 -42
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +30 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +5 -205
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -788
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +5 -362
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +14 -1337
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +403 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +1447 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +30 -8
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +60 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +2 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +2 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +87 -23
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +262 -62
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +20 -15
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +46 -32
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +27 -4
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +70 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +46 -25
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +98 -25
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +2 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +77 -21
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +201 -4
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +2 -0
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +8 -68
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +14 -201
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +92 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +240 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +2 -71
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +3 -228
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +266 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +2 -0
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +31 -0
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +53 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +109 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +399 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +18 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +33 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +145 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +527 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +112 -0
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +30 -0
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +53 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +199 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +18 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +33 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +815 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +3032 -0
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +59 -0
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +134 -0
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +28 -0
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +53 -0
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +228 -0
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +725 -0
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +316 -0
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +1132 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +33 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +65 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
- data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +144 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +133 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +88 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +258 -0
- data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.c +12 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +27 -0
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +29 -0
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +62 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +89 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +249 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +30 -27
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +64 -52
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +13 -5
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +34 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +104 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +30 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +44 -39
- data/src/core/ext/upb-generated/validate/validate.upb.h +155 -119
- data/src/core/lib/channel/channel_args.cc +15 -14
- data/src/core/lib/channel/channel_args.h +3 -1
- data/src/core/lib/channel/channel_stack.h +20 -13
- data/src/core/lib/channel/channel_trace.cc +32 -41
- data/src/core/lib/channel/channel_trace.h +3 -3
- data/src/core/lib/channel/channelz.cc +163 -254
- data/src/core/lib/channel/channelz.h +20 -12
- data/src/core/lib/channel/channelz_registry.cc +52 -77
- data/src/core/lib/channel/channelz_registry.h +4 -4
- data/src/core/lib/channel/connected_channel.cc +7 -5
- data/src/core/lib/channel/context.h +1 -1
- data/src/core/lib/channel/handshaker.cc +11 -13
- data/src/core/lib/channel/handshaker.h +4 -2
- data/src/core/lib/channel/handshaker_registry.cc +5 -17
- data/src/core/lib/channel/status_util.cc +2 -3
- data/src/core/lib/compression/message_compress.cc +5 -1
- data/src/core/lib/debug/stats.cc +21 -27
- data/src/core/lib/debug/stats.h +3 -1
- data/src/core/lib/gpr/spinlock.h +2 -3
- data/src/core/lib/gpr/string.cc +2 -26
- data/src/core/lib/gpr/string.h +0 -16
- data/src/core/lib/gpr/sync_abseil.cc +116 -0
- data/src/core/lib/gpr/sync_posix.cc +8 -5
- data/src/core/lib/gpr/sync_windows.cc +4 -2
- data/src/core/lib/gpr/time.cc +4 -0
- data/src/core/lib/gpr/time_posix.cc +1 -1
- data/src/core/lib/gpr/time_precise.cc +1 -1
- data/src/core/lib/gprpp/atomic.h +6 -6
- data/src/core/lib/gprpp/fork.cc +1 -1
- data/src/core/lib/gprpp/host_port.cc +30 -36
- data/src/core/lib/gprpp/host_port.h +14 -17
- data/src/core/lib/gprpp/map.h +5 -11
- data/src/core/lib/gprpp/memory.h +2 -6
- data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
- data/src/core/lib/gprpp/sync.h +9 -0
- data/src/core/lib/http/format_request.cc +46 -65
- data/src/core/lib/http/httpcli.cc +2 -3
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/http/parser.h +2 -3
- data/src/core/lib/iomgr/buffer_list.cc +36 -35
- data/src/core/lib/iomgr/buffer_list.h +22 -21
- data/src/core/lib/iomgr/call_combiner.h +3 -2
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
- data/src/core/lib/iomgr/closure.h +2 -3
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
- data/src/core/lib/iomgr/endpoint_pair.h +2 -3
- data/src/core/lib/iomgr/error.cc +6 -9
- data/src/core/lib/iomgr/error.h +4 -5
- data/src/core/lib/iomgr/ev_apple.cc +356 -0
- data/src/core/lib/iomgr/ev_apple.h +43 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
- data/src/core/lib/iomgr/ev_epollex_linux.cc +14 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
- data/src/core/lib/iomgr/ev_posix.cc +2 -3
- data/src/core/lib/iomgr/exec_ctx.h +14 -2
- data/src/core/lib/iomgr/executor.cc +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +4 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
- data/src/core/lib/iomgr/load_file.cc +1 -0
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +87 -0
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +88 -0
- data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
- data/src/core/lib/iomgr/pollset_uv.h +32 -0
- data/src/core/lib/iomgr/port.h +1 -0
- data/src/core/lib/iomgr/python_util.h +46 -0
- data/src/core/lib/iomgr/resolve_address.h +4 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
- data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
- data/src/core/lib/iomgr/resource_quota.cc +4 -6
- data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
- data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
- data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
- data/src/core/lib/iomgr/socket_mutator.h +2 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +21 -26
- data/src/core/lib/iomgr/socket_utils_posix.h +15 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
- data/src/core/lib/iomgr/tcp_client_posix.cc +25 -22
- data/src/core/lib/iomgr/tcp_client_posix.h +6 -6
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_custom.cc +2 -3
- data/src/core/lib/iomgr/tcp_custom.h +3 -0
- data/src/core/lib/iomgr/tcp_posix.cc +608 -56
- data/src/core/lib/iomgr/tcp_server_custom.cc +20 -11
- data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +13 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
- data/src/core/lib/iomgr/tcp_uv.cc +3 -2
- data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
- data/src/core/lib/iomgr/timer_generic.cc +2 -3
- data/src/core/lib/iomgr/timer_generic.h +39 -0
- data/src/core/lib/iomgr/timer_heap.h +2 -3
- data/src/core/lib/iomgr/udp_server.cc +9 -14
- data/src/core/lib/iomgr/work_serializer.cc +155 -0
- data/src/core/lib/iomgr/work_serializer.h +65 -0
- data/src/core/lib/json/json.h +209 -68
- data/src/core/lib/json/json_reader.cc +511 -319
- data/src/core/lib/json/json_writer.cc +202 -110
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +19 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.h +11 -4
- data/src/core/lib/security/credentials/credentials.cc +0 -84
- data/src/core/lib/security/credentials/credentials.h +18 -60
- data/src/core/lib/security/credentials/fake/fake_credentials.h +6 -1
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -12
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
- data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +26 -56
- data/src/core/lib/security/credentials/jwt/json_token.h +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +8 -18
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +151 -168
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +92 -61
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +10 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +19 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +4 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +43 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +47 -11
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +128 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.h +62 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +34 -6
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +29 -9
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +2 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +5 -4
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +32 -7
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -37
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +107 -16
- data/src/core/lib/security/security_connector/ssl_utils.h +24 -11
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +603 -0
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +183 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +34 -2
- data/src/core/lib/security/transport/security_handshaker.cc +2 -2
- data/src/core/lib/security/util/json_util.cc +22 -15
- data/src/core/lib/security/util/json_util.h +2 -2
- data/src/core/lib/slice/slice_intern.cc +2 -3
- data/src/core/lib/slice/slice_internal.h +14 -0
- data/src/core/lib/slice/slice_utils.h +9 -0
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
- data/src/core/lib/surface/call.cc +2 -3
- data/src/core/lib/surface/call_log_batch.cc +50 -58
- data/src/core/lib/surface/channel.cc +53 -31
- data/src/core/lib/surface/channel.h +35 -4
- data/src/core/lib/surface/channel_ping.cc +2 -3
- data/src/core/lib/surface/completion_queue.cc +55 -34
- data/src/core/lib/surface/event_string.cc +18 -25
- data/src/core/lib/surface/event_string.h +3 -1
- data/src/core/lib/surface/init_secure.cc +1 -4
- data/src/core/lib/surface/server.cc +570 -369
- data/src/core/lib/surface/server.h +32 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/byte_stream.h +7 -2
- data/src/core/lib/transport/connectivity_state.cc +7 -6
- data/src/core/lib/transport/connectivity_state.h +5 -3
- data/src/core/lib/transport/metadata.cc +3 -3
- data/src/core/lib/transport/metadata_batch.h +2 -3
- data/src/core/lib/transport/static_metadata.h +1 -1
- data/src/core/lib/transport/status_conversion.cc +6 -14
- data/src/core/lib/transport/transport.cc +2 -3
- data/src/core/lib/transport/transport.h +3 -2
- data/src/core/lib/transport/transport_op_string.cc +61 -102
- data/src/core/lib/uri/uri_parser.h +2 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +9 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +44 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +10 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +3 -3
- data/src/core/tsi/fake_transport_security.cc +17 -18
- data/src/core/tsi/fake_transport_security.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +197 -47
- data/src/core/tsi/ssl_transport_security.h +23 -9
- data/src/core/tsi/ssl_types.h +0 -2
- data/src/core/tsi/transport_security.cc +13 -0
- data/src/core/tsi/transport_security.h +6 -9
- data/src/core/tsi/transport_security_grpc.cc +2 -2
- data/src/core/tsi/transport_security_grpc.h +4 -5
- data/src/core/tsi/transport_security_interface.h +15 -3
- data/src/ruby/bin/math_pb.rb +5 -5
- data/src/ruby/ext/grpc/rb_call.c +9 -1
- data/src/ruby/ext/grpc/rb_call_credentials.c +4 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
- data/src/ruby/lib/grpc/errors.rb +103 -42
- data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
- data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
- data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
- data/src/ruby/lib/grpc/generic/service.rb +5 -4
- data/src/ruby/lib/grpc/structs.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +5 -3
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +3 -3
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +34 -13
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
- data/src/ruby/spec/debug_message_spec.rb +134 -0
- data/src/ruby/spec/generic/service_spec.rb +2 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
- data/src/ruby/spec/testdata/ca.pem +18 -13
- data/src/ruby/spec/testdata/client.key +26 -14
- data/src/ruby/spec/testdata/client.pem +18 -12
- data/src/ruby/spec/testdata/server1.key +26 -14
- data/src/ruby/spec/testdata/server1.pem +20 -14
- data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
- data/third_party/abseil-cpp/absl/base/attributes.h +621 -0
- data/third_party/abseil-cpp/absl/base/call_once.h +226 -0
- data/third_party/abseil-cpp/absl/base/casts.h +184 -0
- data/third_party/abseil-cpp/absl/base/config.h +671 -0
- data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +129 -0
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +389 -0
- data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
- data/third_party/abseil-cpp/absl/base/internal/bits.h +218 -0
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
- data/third_party/abseil-cpp/absl/base/internal/endian.h +266 -0
- data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
- data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
- data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +107 -0
- data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +240 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +183 -0
- data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +233 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +243 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +66 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +93 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +416 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +66 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +152 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +259 -0
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +108 -0
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
- data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +66 -0
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +158 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +140 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
- data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
- data/third_party/abseil-cpp/absl/base/macros.h +220 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +181 -0
- data/third_party/abseil-cpp/absl/base/options.h +211 -0
- data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
- data/third_party/abseil-cpp/absl/base/port.h +26 -0
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +280 -0
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +848 -0
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +265 -0
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +892 -0
- data/third_party/abseil-cpp/absl/memory/memory.h +695 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +759 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +404 -0
- data/third_party/abseil-cpp/absl/numeric/int128.h +1091 -0
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +302 -0
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +308 -0
- data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
- data/third_party/abseil-cpp/absl/strings/ascii.h +242 -0
- data/third_party/abseil-cpp/absl/strings/charconv.cc +984 -0
- data/third_party/abseil-cpp/absl/strings/charconv.h +119 -0
- data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
- data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +423 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +73 -0
- data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +455 -0
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +40 -0
- data/third_party/abseil-cpp/absl/strings/match.h +90 -0
- data/third_party/abseil-cpp/absl/strings/numbers.cc +965 -0
- data/third_party/abseil-cpp/absl/strings/numbers.h +266 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
- data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
- data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
- data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
- data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
- data/third_party/abseil-cpp/absl/strings/str_split.h +513 -0
- data/third_party/abseil-cpp/absl/strings/string_view.cc +235 -0
- data/third_party/abseil-cpp/absl/strings/string_view.h +622 -0
- data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
- data/third_party/abseil-cpp/absl/strings/substitute.cc +171 -0
- data/third_party/abseil-cpp/absl/strings/substitute.h +693 -0
- data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
- data/third_party/abseil-cpp/absl/time/clock.h +74 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
- data/third_party/abseil-cpp/absl/time/format.cc +153 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
- data/third_party/abseil-cpp/absl/time/time.cc +499 -0
- data/third_party/abseil-cpp/absl/time/time.h +1584 -0
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
- data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
- data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
- data/third_party/abseil-cpp/absl/types/optional.h +776 -0
- data/third_party/abseil-cpp/absl/types/span.h +713 -0
- data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
- data/third_party/boringssl-with-bazel/err_data.c +1439 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_bitstr.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_bool.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_d2i_fp.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_dup.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_enum.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_gentm.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_i2d_fp.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_int.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_mbstr.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_object.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_octet.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_print.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_strnid.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +212 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_type.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utctm.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utf8.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_lib.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_locl.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_par.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn_pack.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_enum.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_int.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_string.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_dec.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_enc.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_fre.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_new.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_typ.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_utl.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/time_support.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/base64/base64.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio_mem.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +545 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +279 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +317 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/hexdump.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/internal.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +488 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/printf.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/socket.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/socket_helper.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/bn_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/convert.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +172 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/asn1_compat.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/ber.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +719 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +688 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/unicode.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/chacha/chacha.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/chacha/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/cipher_extra.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_aesccm.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_aesctrhmac.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_chacha20poly1305.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_null.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc2.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc4.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_tls.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/tls_cbc.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cmac/cmac.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf_def.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-fuchsia.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-linux.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +220 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm-linux.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +291 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-ppc64le.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/crypto.c +226 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +2159 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +7872 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +146 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +539 -0
- data/third_party/boringssl-with-bazel/src/crypto/dh/check.c +217 -0
- data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +533 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/params.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/digest_extra/digest_extra.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +980 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dsa/dsa_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ec_extra/ec_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +95 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +124 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ecdsa_extra/ecdsa_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/engine/engine.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +850 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/err/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/digestsign.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/evp.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/evp_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/evp_ctx.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_dsa_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_ec_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_ed25519.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_ed25519_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_rsa_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_x25519.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +248 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/pbkdf.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/print.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/scrypt.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/sign.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ex_data.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +238 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/aes/key_wrap.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +106 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +263 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/add.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/asm/x86_64-gcc.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bn.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bytes.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/cmp.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/ctx.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/div.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/div_extra.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/gcd.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/gcd_extra.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/generic.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +694 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/jacobi.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +502 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/montgomery_inv.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +749 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1068 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/random.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/rsaz_exp.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/rsaz_exp.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/shift.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/sqrt.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/aead.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/cipher.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1302 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/e_des.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/delocate.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/des.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/digest.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +296 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/md32_common.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1252 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +465 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +524 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +100 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +775 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +328 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +1178 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +632 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/p256-x86_64.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +357 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/util.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +270 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +122 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +328 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/fips_shared_support.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/hmac/hmac.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/is_fips.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/md4/md4.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/md5/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/md5/md5.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/cbc.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/cfb.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/ctr.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +729 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +441 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/ofb.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/polyval.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rand/ctrdrbg.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +163 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +378 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +391 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +243 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +127 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/padding.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +898 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +1358 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/self_check/self_check.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1-altivec.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha256.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +544 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/kdf.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hkdf/hkdf.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +2100 -0
- data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +61 -0
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +834 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/lhash/lhash.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +359 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +549 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +11585 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_xref.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_all.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +360 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +777 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +87 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +257 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +218 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_x509.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_xaux.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/pkcs7.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +385 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/p5_pbev2.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/pkcs8.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/pkcs8_x509.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/internal.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +318 -0
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +305 -0
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +856 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pool/internal.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +220 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +52 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/forkunsafe.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/fuchsia.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/rand_extra.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +69 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rc4/rc4.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_c11.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_lock.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_print.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/stack/stack.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread_none.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +210 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +260 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_digest.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_sign.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_strex.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +114 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/algorithm.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/asn1_gen.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +458 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +275 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/charmap.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/i2d_pr.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/rsa_pss.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_crl.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_req.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509a.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/vpm_int.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_att.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +476 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_d2.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_def.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_ext.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_lu.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +198 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +116 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +341 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +185 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +326 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_txt.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_v3.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +2487 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +671 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509cset.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +389 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509rset.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509spki.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_algor.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +399 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_attrib.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_crl.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_exten.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_info.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_name.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pkey.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pubkey.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_req.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_sig.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_spki.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_val.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509a.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/ext_dat.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_cache.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_data.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_int.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_lib.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_map.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_node.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_tree.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akey.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akeya.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +629 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bcons.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bitst.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_conf.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_cpols.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_crld.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +100 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_extku.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_genn.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ia5.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +218 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_int.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_lib.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ncons.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ocsp.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pci.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcia.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcons.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pku.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pmaps.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_prn.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +843 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_skey.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_sxnet.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1395 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/aead.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/aes.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/arm_arch.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1_mac.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1t.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +575 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/base64.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/bio.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/blowfish.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1057 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +137 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buffer.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +561 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cast.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/chacha.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cipher.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cmac.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/conf.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cpu.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +149 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/curve25519.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/des.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +319 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +331 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +457 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dtls1.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/e_os2.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +424 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +372 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ecdh.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +205 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/engine.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +465 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1050 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ex_data.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hkdf.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hmac.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hrss.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/is_boringssl.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/lhash.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/md4.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/md5.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +175 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +4259 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj_mac.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/objects.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslconf.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslv.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ossl_typ.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pem.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs12.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs7.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs8.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pool.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +111 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rc4.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ripemd.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +818 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/safestack.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +294 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/siphash.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/span.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/srtp.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +5198 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ssl3.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/stack.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/thread.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +632 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/type_check.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1207 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +681 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/x509v3.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/bio_ssl.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +837 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +268 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +273 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/d1_srtp.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/dtls_record.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +675 -0
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +703 -0
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1890 -0
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1805 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +3572 -0
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +724 -0
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +221 -0
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +458 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_aead_ctx.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +856 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +306 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +1019 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +1718 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_file.cc +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_key_share.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +3015 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +835 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +1333 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +230 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_transcript.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +394 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_x509.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +365 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +3870 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +689 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1017 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +513 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1096 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +317 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +703 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +981 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +619 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1226 -0
- data/third_party/upb/upb/decode.c +4 -0
- data/third_party/upb/upb/port.c +0 -1
- data/third_party/upb/upb/port_def.inc +1 -3
- data/third_party/upb/upb/table.c +2 -1
- metadata +758 -509
- data/src/boringssl/err_data.c +0 -1407
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1898
- data/src/core/lib/gprpp/inlined_vector.h +0 -246
- data/src/core/lib/gprpp/optional.h +0 -48
- data/src/core/lib/gprpp/string_view.h +0 -165
- data/src/core/lib/iomgr/logical_thread.cc +0 -103
- data/src/core/lib/iomgr/logical_thread.h +0 -52
- data/src/core/lib/json/json.cc +0 -94
- data/src/core/lib/json/json_common.h +0 -34
- data/src/core/lib/json/json_reader.h +0 -146
- data/src/core/lib/json/json_string.cc +0 -367
- data/src/core/lib/json/json_writer.h +0 -84
- data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +0 -129
- data/src/core/lib/security/credentials/tls/spiffe_credentials.h +0 -62
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +0 -541
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +0 -158
- data/src/core/tsi/grpc_shadow_boringssl.h +0 -3297
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -213
- data/third_party/boringssl/crypto/bio/connect.c +0 -546
- data/third_party/boringssl/crypto/bio/fd.c +0 -280
- data/third_party/boringssl/crypto/bio/file.c +0 -318
- data/third_party/boringssl/crypto/bio/pair.c +0 -489
- data/third_party/boringssl/crypto/buf/buf.c +0 -231
- data/third_party/boringssl/crypto/bytestring/cbb.c +0 -680
- data/third_party/boringssl/crypto/bytestring/cbs.c +0 -631
- data/third_party/boringssl/crypto/cipher_extra/derive_key.c +0 -152
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +0 -883
- data/third_party/boringssl/crypto/cpu-arm-linux.c +0 -219
- data/third_party/boringssl/crypto/cpu-intel.c +0 -282
- data/third_party/boringssl/crypto/crypto.c +0 -215
- data/third_party/boringssl/crypto/curve25519/spake25519.c +0 -539
- data/third_party/boringssl/crypto/dh/check.c +0 -217
- data/third_party/boringssl/crypto/dh/dh.c +0 -519
- data/third_party/boringssl/crypto/dsa/dsa.c +0 -970
- data/third_party/boringssl/crypto/ec_extra/ec_derive.c +0 -96
- data/third_party/boringssl/crypto/ecdh_extra/ecdh_extra.c +0 -124
- data/third_party/boringssl/crypto/err/err.c +0 -849
- data/third_party/boringssl/crypto/evp/p_ec.c +0 -287
- data/third_party/boringssl/crypto/evp/p_rsa.c +0 -636
- data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +0 -249
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +0 -860
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +0 -240
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +0 -108
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +0 -260
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +0 -1288
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +0 -691
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +0 -502
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +0 -873
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +0 -1069
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +0 -1304
- data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +0 -280
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +0 -1080
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +0 -479
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +0 -483
- data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +0 -82
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +0 -503
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +0 -336
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +0 -1187
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +0 -9501
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +0 -651
- data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +0 -96
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +0 -380
- data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +0 -84
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +0 -227
- data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +0 -122
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +0 -313
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +0 -877
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +0 -451
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +0 -127
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +0 -363
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +0 -481
- data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +0 -239
- data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +0 -126
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +0 -879
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +0 -1335
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +0 -535
- data/third_party/boringssl/crypto/hrss/hrss.c +0 -2201
- data/third_party/boringssl/crypto/hrss/internal.h +0 -62
- data/third_party/boringssl/crypto/internal.h +0 -814
- data/third_party/boringssl/crypto/mem.c +0 -272
- data/third_party/boringssl/crypto/obj/obj.c +0 -554
- data/third_party/boringssl/crypto/obj/obj_dat.h +0 -11550
- data/third_party/boringssl/crypto/pem/pem_info.c +0 -361
- data/third_party/boringssl/crypto/pem/pem_lib.c +0 -777
- data/third_party/boringssl/crypto/pem/pem_oth.c +0 -88
- data/third_party/boringssl/crypto/pem/pem_pk8.c +0 -258
- data/third_party/boringssl/crypto/pem/pem_pkey.c +0 -219
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +0 -385
- data/third_party/boringssl/crypto/poly1305/poly1305.c +0 -318
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +0 -304
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +0 -839
- data/third_party/boringssl/crypto/pool/pool.c +0 -221
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +0 -56
- data/third_party/boringssl/crypto/rand_extra/windows.c +0 -53
- data/third_party/boringssl/crypto/siphash/siphash.c +0 -80
- data/third_party/boringssl/crypto/thread_pthread.c +0 -206
- data/third_party/boringssl/crypto/thread_win.c +0 -256
- data/third_party/boringssl/crypto/x509/a_verify.c +0 -115
- data/third_party/boringssl/crypto/x509/by_dir.c +0 -458
- data/third_party/boringssl/crypto/x509/by_file.c +0 -276
- data/third_party/boringssl/crypto/x509/x509_cmp.c +0 -477
- data/third_party/boringssl/crypto/x509/x509_obj.c +0 -198
- data/third_party/boringssl/crypto/x509/x509_r2x.c +0 -117
- data/third_party/boringssl/crypto/x509/x509_req.c +0 -342
- data/third_party/boringssl/crypto/x509/x509_set.c +0 -169
- data/third_party/boringssl/crypto/x509/x509_trs.c +0 -327
- data/third_party/boringssl/crypto/x509/x509_vfy.c +0 -2483
- data/third_party/boringssl/crypto/x509/x509_vpm.c +0 -672
- data/third_party/boringssl/crypto/x509/x509name.c +0 -388
- data/third_party/boringssl/crypto/x509/x_all.c +0 -400
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +0 -629
- data/third_party/boringssl/crypto/x509v3/v3_enum.c +0 -100
- data/third_party/boringssl/crypto/x509v3/v3_info.c +0 -219
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +0 -844
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +0 -1396
- data/third_party/boringssl/include/openssl/base.h +0 -571
- data/third_party/boringssl/include/openssl/bn.h +0 -1045
- data/third_party/boringssl/include/openssl/buf.h +0 -137
- data/third_party/boringssl/include/openssl/bytestring.h +0 -527
- data/third_party/boringssl/include/openssl/crypto.h +0 -144
- data/third_party/boringssl/include/openssl/dh.h +0 -299
- data/third_party/boringssl/include/openssl/digest.h +0 -330
- data/third_party/boringssl/include/openssl/dsa.h +0 -441
- data/third_party/boringssl/include/openssl/ec.h +0 -417
- data/third_party/boringssl/include/openssl/ec_key.h +0 -370
- data/third_party/boringssl/include/openssl/ecdsa.h +0 -199
- data/third_party/boringssl/include/openssl/err.h +0 -461
- data/third_party/boringssl/include/openssl/evp.h +0 -1030
- data/third_party/boringssl/include/openssl/mem.h +0 -160
- data/third_party/boringssl/include/openssl/nid.h +0 -4245
- data/third_party/boringssl/include/openssl/poly1305.h +0 -51
- data/third_party/boringssl/include/openssl/rand.h +0 -125
- data/third_party/boringssl/include/openssl/rsa.h +0 -787
- data/third_party/boringssl/include/openssl/sha.h +0 -268
- data/third_party/boringssl/include/openssl/ssl.h +0 -5113
- data/third_party/boringssl/include/openssl/tls1.h +0 -634
- data/third_party/boringssl/include/openssl/x509.h +0 -1205
- data/third_party/boringssl/include/openssl/x509_vfy.h +0 -680
- data/third_party/boringssl/ssl/d1_both.cc +0 -842
- data/third_party/boringssl/ssl/d1_lib.cc +0 -268
- data/third_party/boringssl/ssl/d1_pkt.cc +0 -274
- data/third_party/boringssl/ssl/dtls_method.cc +0 -192
- data/third_party/boringssl/ssl/handoff.cc +0 -489
- data/third_party/boringssl/ssl/handshake.cc +0 -691
- data/third_party/boringssl/ssl/handshake_client.cc +0 -1871
- data/third_party/boringssl/ssl/handshake_server.cc +0 -1801
- data/third_party/boringssl/ssl/internal.h +0 -3549
- data/third_party/boringssl/ssl/s3_both.cc +0 -724
- data/third_party/boringssl/ssl/s3_lib.cc +0 -222
- data/third_party/boringssl/ssl/s3_pkt.cc +0 -459
- data/third_party/boringssl/ssl/ssl_asn1.cc +0 -828
- data/third_party/boringssl/ssl/ssl_buffer.cc +0 -287
- data/third_party/boringssl/ssl/ssl_cert.cc +0 -1016
- data/third_party/boringssl/ssl/ssl_cipher.cc +0 -1719
- data/third_party/boringssl/ssl/ssl_lib.cc +0 -3011
- data/third_party/boringssl/ssl/ssl_privkey.cc +0 -824
- data/third_party/boringssl/ssl/ssl_session.cc +0 -1273
- data/third_party/boringssl/ssl/ssl_stat.cc +0 -224
- data/third_party/boringssl/ssl/ssl_versions.cc +0 -394
- data/third_party/boringssl/ssl/t1_enc.cc +0 -361
- data/third_party/boringssl/ssl/t1_lib.cc +0 -4036
- data/third_party/boringssl/ssl/tls13_both.cc +0 -689
- data/third_party/boringssl/ssl/tls13_client.cc +0 -947
- data/third_party/boringssl/ssl/tls13_enc.cc +0 -561
- data/third_party/boringssl/ssl/tls13_server.cc +0 -1089
- data/third_party/boringssl/ssl/tls_method.cc +0 -279
- data/third_party/boringssl/ssl/tls_record.cc +0 -698
- data/third_party/boringssl/third_party/fiat/curve25519.c +0 -2167
- data/third_party/boringssl/third_party/fiat/curve25519_32.h +0 -911
- data/third_party/boringssl/third_party/fiat/curve25519_64.h +0 -559
- data/third_party/boringssl/third_party/fiat/curve25519_tables.h +0 -7880
- data/third_party/boringssl/third_party/fiat/internal.h +0 -154
- data/third_party/boringssl/third_party/fiat/p256.c +0 -1063
- data/third_party/boringssl/third_party/fiat/p256_32.h +0 -3226
- data/third_party/boringssl/third_party/fiat/p256_64.h +0 -1217
@@ -21,6 +21,8 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
+
#include <deque>
|
25
|
+
|
24
26
|
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
|
25
27
|
#include "src/core/ext/filters/client_channel/connector.h"
|
26
28
|
#include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
|
@@ -176,24 +178,44 @@ class SubchannelCall {
|
|
176
178
|
class Subchannel {
|
177
179
|
public:
|
178
180
|
class ConnectivityStateWatcherInterface
|
179
|
-
: public
|
181
|
+
: public RefCounted<ConnectivityStateWatcherInterface> {
|
180
182
|
public:
|
183
|
+
struct ConnectivityStateChange {
|
184
|
+
grpc_connectivity_state state;
|
185
|
+
RefCountedPtr<ConnectedSubchannel> connected_subchannel;
|
186
|
+
};
|
187
|
+
|
181
188
|
virtual ~ConnectivityStateWatcherInterface() = default;
|
182
189
|
|
183
190
|
// Will be invoked whenever the subchannel's connectivity state
|
184
191
|
// changes. There will be only one invocation of this method on a
|
185
192
|
// given watcher instance at any given time.
|
186
|
-
//
|
193
|
+
// Implementations should call PopConnectivityStateChange to get the next
|
194
|
+
// connectivity state change.
|
195
|
+
virtual void OnConnectivityStateChange() = 0;
|
196
|
+
|
197
|
+
virtual grpc_pollset_set* interested_parties() = 0;
|
198
|
+
|
199
|
+
// Enqueues connectivity state change notifications.
|
187
200
|
// When the state changes to READY, connected_subchannel will
|
188
201
|
// contain a ref to the connected subchannel. When it changes from
|
189
202
|
// READY to some other state, the implementation must release its
|
190
203
|
// ref to the connected subchannel.
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
204
|
+
// TODO(yashkt): This is currently needed to send the state updates in the
|
205
|
+
// right order when asynchronously notifying. This will no longer be
|
206
|
+
// necessary when we have access to EventManager.
|
207
|
+
void PushConnectivityStateChange(ConnectivityStateChange state_change);
|
195
208
|
|
196
|
-
|
209
|
+
// Dequeues connectivity state change notifications.
|
210
|
+
ConnectivityStateChange PopConnectivityStateChange();
|
211
|
+
|
212
|
+
private:
|
213
|
+
// Keeps track of the updates that the watcher instance must be notified of.
|
214
|
+
// TODO(yashkt): This is currently needed to send the state updates in the
|
215
|
+
// right order when asynchronously notifying. This will no longer be
|
216
|
+
// necessary when we have access to EventManager.
|
217
|
+
std::deque<ConnectivityStateChange> connectivity_state_queue_;
|
218
|
+
Mutex mu_; // protects the queue
|
197
219
|
};
|
198
220
|
|
199
221
|
// The ctor and dtor are not intended to use directly.
|
@@ -243,7 +265,7 @@ class Subchannel {
|
|
243
265
|
void WatchConnectivityState(
|
244
266
|
grpc_connectivity_state initial_state,
|
245
267
|
grpc_core::UniquePtr<char> health_check_service_name,
|
246
|
-
|
268
|
+
RefCountedPtr<ConnectivityStateWatcherInterface> watcher);
|
247
269
|
|
248
270
|
// Cancels a connectivity state watch.
|
249
271
|
// If the watcher has already been destroyed, this is a no-op.
|
@@ -280,7 +302,7 @@ class Subchannel {
|
|
280
302
|
~ConnectivityStateWatcherList() { Clear(); }
|
281
303
|
|
282
304
|
void AddWatcherLocked(
|
283
|
-
|
305
|
+
RefCountedPtr<ConnectivityStateWatcherInterface> watcher);
|
284
306
|
void RemoveWatcherLocked(ConnectivityStateWatcherInterface* watcher);
|
285
307
|
|
286
308
|
// Notifies all watchers in the list about a change to state.
|
@@ -294,7 +316,7 @@ class Subchannel {
|
|
294
316
|
// TODO(roth): Once we can use C++-14 heterogeneous lookups, this can
|
295
317
|
// be a set instead of a map.
|
296
318
|
std::map<ConnectivityStateWatcherInterface*,
|
297
|
-
|
319
|
+
RefCountedPtr<ConnectivityStateWatcherInterface>>
|
298
320
|
watchers_;
|
299
321
|
};
|
300
322
|
|
@@ -312,7 +334,7 @@ class Subchannel {
|
|
312
334
|
void AddWatcherLocked(
|
313
335
|
Subchannel* subchannel, grpc_connectivity_state initial_state,
|
314
336
|
grpc_core::UniquePtr<char> health_check_service_name,
|
315
|
-
|
337
|
+
RefCountedPtr<ConnectivityStateWatcherInterface> watcher);
|
316
338
|
void RemoveWatcherLocked(const char* health_check_service_name,
|
317
339
|
ConnectivityStateWatcherInterface* watcher);
|
318
340
|
|
@@ -332,6 +354,8 @@ class Subchannel {
|
|
332
354
|
|
333
355
|
class ConnectedSubchannelStateWatcher;
|
334
356
|
|
357
|
+
class AsyncWatcherNotifierLocked;
|
358
|
+
|
335
359
|
// Sets the subchannel's connectivity state to \a state.
|
336
360
|
void SetConnectivityStateLocked(grpc_connectivity_state state);
|
337
361
|
|
@@ -19,42 +19,55 @@
|
|
19
19
|
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
21
|
#include <algorithm>
|
22
|
+
#include <cctype>
|
23
|
+
#include <cstdlib>
|
24
|
+
|
25
|
+
#include "absl/strings/str_cat.h"
|
26
|
+
#include "absl/strings/str_join.h"
|
27
|
+
#include "absl/strings/str_split.h"
|
22
28
|
|
23
29
|
#include <grpc/impl/codegen/log.h>
|
24
30
|
#include <grpc/support/alloc.h>
|
25
31
|
#include <grpc/support/string_util.h>
|
26
32
|
|
27
33
|
#include "src/core/ext/filters/client_channel/xds/xds_api.h"
|
34
|
+
#include "src/core/lib/gpr/env.h"
|
35
|
+
#include "src/core/lib/gpr/string.h"
|
36
|
+
#include "src/core/lib/gpr/useful.h"
|
28
37
|
#include "src/core/lib/iomgr/error.h"
|
29
38
|
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
30
39
|
|
40
|
+
#include "envoy/api/v2/cds.upb.h"
|
31
41
|
#include "envoy/api/v2/core/address.upb.h"
|
32
42
|
#include "envoy/api/v2/core/base.upb.h"
|
43
|
+
#include "envoy/api/v2/core/config_source.upb.h"
|
33
44
|
#include "envoy/api/v2/core/health_check.upb.h"
|
34
45
|
#include "envoy/api/v2/discovery.upb.h"
|
35
46
|
#include "envoy/api/v2/eds.upb.h"
|
36
47
|
#include "envoy/api/v2/endpoint/endpoint.upb.h"
|
37
48
|
#include "envoy/api/v2/endpoint/load_report.upb.h"
|
49
|
+
#include "envoy/api/v2/lds.upb.h"
|
50
|
+
#include "envoy/api/v2/rds.upb.h"
|
51
|
+
#include "envoy/api/v2/route/route.upb.h"
|
52
|
+
#include "envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h"
|
53
|
+
#include "envoy/config/listener/v2/api_listener.upb.h"
|
38
54
|
#include "envoy/service/load_stats/v2/lrs.upb.h"
|
39
55
|
#include "envoy/type/percent.upb.h"
|
40
56
|
#include "google/protobuf/any.upb.h"
|
41
57
|
#include "google/protobuf/duration.upb.h"
|
42
58
|
#include "google/protobuf/struct.upb.h"
|
43
|
-
#include "google/protobuf/timestamp.upb.h"
|
44
59
|
#include "google/protobuf/wrappers.upb.h"
|
60
|
+
#include "google/rpc/status.upb.h"
|
45
61
|
#include "upb/upb.h"
|
46
62
|
|
47
63
|
namespace grpc_core {
|
48
64
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
"type.googleapis.com/envoy.api.v2.ClusterLoadAssignment";
|
53
|
-
|
54
|
-
} // namespace
|
65
|
+
//
|
66
|
+
// XdsApi::PriorityListUpdate
|
67
|
+
//
|
55
68
|
|
56
|
-
bool
|
57
|
-
const
|
69
|
+
bool XdsApi::PriorityListUpdate::operator==(
|
70
|
+
const XdsApi::PriorityListUpdate& other) const {
|
58
71
|
if (priorities_.size() != other.priorities_.size()) return false;
|
59
72
|
for (size_t i = 0; i < priorities_.size(); ++i) {
|
60
73
|
if (priorities_[i].localities != other.priorities_[i].localities) {
|
@@ -64,8 +77,8 @@ bool XdsPriorityListUpdate::operator==(
|
|
64
77
|
return true;
|
65
78
|
}
|
66
79
|
|
67
|
-
void
|
68
|
-
|
80
|
+
void XdsApi::PriorityListUpdate::Add(
|
81
|
+
XdsApi::PriorityListUpdate::LocalityMap::Locality locality) {
|
69
82
|
// Pad the missing priorities in case the localities are not ordered by
|
70
83
|
// priority.
|
71
84
|
if (!Contains(locality.priority)) priorities_.resize(locality.priority + 1);
|
@@ -73,13 +86,13 @@ void XdsPriorityListUpdate::Add(
|
|
73
86
|
locality_map.localities.emplace(locality.name, std::move(locality));
|
74
87
|
}
|
75
88
|
|
76
|
-
const
|
89
|
+
const XdsApi::PriorityListUpdate::LocalityMap* XdsApi::PriorityListUpdate::Find(
|
77
90
|
uint32_t priority) const {
|
78
91
|
if (!Contains(priority)) return nullptr;
|
79
92
|
return &priorities_[priority];
|
80
93
|
}
|
81
94
|
|
82
|
-
bool
|
95
|
+
bool XdsApi::PriorityListUpdate::Contains(
|
83
96
|
const RefCountedPtr<XdsLocalityName>& name) {
|
84
97
|
for (size_t i = 0; i < priorities_.size(); ++i) {
|
85
98
|
const LocalityMap& locality_map = priorities_[i];
|
@@ -88,8 +101,11 @@ bool XdsPriorityListUpdate::Contains(
|
|
88
101
|
return false;
|
89
102
|
}
|
90
103
|
|
91
|
-
|
92
|
-
|
104
|
+
//
|
105
|
+
// XdsApi::DropConfig
|
106
|
+
//
|
107
|
+
|
108
|
+
bool XdsApi::DropConfig::ShouldDrop(const std::string** category_name) const {
|
93
109
|
for (size_t i = 0; i < drop_category_list_.size(); ++i) {
|
94
110
|
const auto& drop_category = drop_category_list_[i];
|
95
111
|
// Generate a random number in [0, 1000000).
|
@@ -102,13 +118,46 @@ bool XdsDropConfig::ShouldDrop(
|
|
102
118
|
return false;
|
103
119
|
}
|
104
120
|
|
121
|
+
//
|
122
|
+
// XdsApi
|
123
|
+
//
|
124
|
+
|
125
|
+
const char* XdsApi::kLdsTypeUrl = "type.googleapis.com/envoy.api.v2.Listener";
|
126
|
+
const char* XdsApi::kRdsTypeUrl =
|
127
|
+
"type.googleapis.com/envoy.api.v2.RouteConfiguration";
|
128
|
+
const char* XdsApi::kCdsTypeUrl = "type.googleapis.com/envoy.api.v2.Cluster";
|
129
|
+
const char* XdsApi::kEdsTypeUrl =
|
130
|
+
"type.googleapis.com/envoy.api.v2.ClusterLoadAssignment";
|
131
|
+
|
132
|
+
namespace {
|
133
|
+
|
134
|
+
bool XdsRoutingEnabled() {
|
135
|
+
char* value = gpr_getenv("GRPC_XDS_EXPERIMENTAL_ROUTING");
|
136
|
+
bool parsed_value;
|
137
|
+
bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
|
138
|
+
gpr_free(value);
|
139
|
+
return parse_succeeded && parsed_value;
|
140
|
+
}
|
141
|
+
|
142
|
+
} // namespace
|
143
|
+
|
144
|
+
XdsApi::XdsApi(XdsClient* client, TraceFlag* tracer,
|
145
|
+
const XdsBootstrap::Node* node)
|
146
|
+
: client_(client),
|
147
|
+
tracer_(tracer),
|
148
|
+
xds_routing_enabled_(XdsRoutingEnabled()),
|
149
|
+
node_(node),
|
150
|
+
build_version_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING, " ",
|
151
|
+
grpc_version_string())),
|
152
|
+
user_agent_name_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING)) {}
|
153
|
+
|
105
154
|
namespace {
|
106
155
|
|
107
156
|
void PopulateMetadataValue(upb_arena* arena, google_protobuf_Value* value_pb,
|
108
|
-
const
|
157
|
+
const Json& value);
|
109
158
|
|
110
159
|
void PopulateListValue(upb_arena* arena, google_protobuf_ListValue* list_value,
|
111
|
-
const
|
160
|
+
const Json::Array& values) {
|
112
161
|
for (const auto& value : values) {
|
113
162
|
auto* value_pb = google_protobuf_ListValue_add_values(list_value, arena);
|
114
163
|
PopulateMetadataValue(arena, value_pb, value);
|
@@ -116,13 +165,12 @@ void PopulateListValue(upb_arena* arena, google_protobuf_ListValue* list_value,
|
|
116
165
|
}
|
117
166
|
|
118
167
|
void PopulateMetadata(upb_arena* arena, google_protobuf_Struct* metadata_pb,
|
119
|
-
const
|
120
|
-
StringLess>& metadata) {
|
168
|
+
const Json::Object& metadata) {
|
121
169
|
for (const auto& p : metadata) {
|
122
170
|
google_protobuf_Struct_FieldsEntry* field =
|
123
171
|
google_protobuf_Struct_add_fields(metadata_pb, arena);
|
124
|
-
google_protobuf_Struct_FieldsEntry_set_key(
|
125
|
-
|
172
|
+
google_protobuf_Struct_FieldsEntry_set_key(
|
173
|
+
field, upb_strview_makez(p.first.c_str()));
|
126
174
|
google_protobuf_Value* value =
|
127
175
|
google_protobuf_Struct_FieldsEntry_mutable_value(field, arena);
|
128
176
|
PopulateMetadataValue(arena, value, p.second);
|
@@ -130,98 +178,1187 @@ void PopulateMetadata(upb_arena* arena, google_protobuf_Struct* metadata_pb,
|
|
130
178
|
}
|
131
179
|
|
132
180
|
void PopulateMetadataValue(upb_arena* arena, google_protobuf_Value* value_pb,
|
133
|
-
const
|
134
|
-
switch (value.type) {
|
135
|
-
case
|
181
|
+
const Json& value) {
|
182
|
+
switch (value.type()) {
|
183
|
+
case Json::Type::JSON_NULL:
|
136
184
|
google_protobuf_Value_set_null_value(value_pb, 0);
|
137
185
|
break;
|
138
|
-
case
|
139
|
-
google_protobuf_Value_set_number_value(
|
186
|
+
case Json::Type::NUMBER:
|
187
|
+
google_protobuf_Value_set_number_value(
|
188
|
+
value_pb, strtod(value.string_value().c_str(), nullptr));
|
140
189
|
break;
|
141
|
-
case
|
190
|
+
case Json::Type::STRING:
|
142
191
|
google_protobuf_Value_set_string_value(
|
143
|
-
value_pb, upb_strview_makez(value.string_value));
|
192
|
+
value_pb, upb_strview_makez(value.string_value().c_str()));
|
193
|
+
break;
|
194
|
+
case Json::Type::JSON_TRUE:
|
195
|
+
google_protobuf_Value_set_bool_value(value_pb, true);
|
144
196
|
break;
|
145
|
-
case
|
146
|
-
google_protobuf_Value_set_bool_value(value_pb,
|
197
|
+
case Json::Type::JSON_FALSE:
|
198
|
+
google_protobuf_Value_set_bool_value(value_pb, false);
|
147
199
|
break;
|
148
|
-
case
|
200
|
+
case Json::Type::OBJECT: {
|
149
201
|
google_protobuf_Struct* struct_value =
|
150
202
|
google_protobuf_Value_mutable_struct_value(value_pb, arena);
|
151
|
-
PopulateMetadata(arena, struct_value, value.
|
203
|
+
PopulateMetadata(arena, struct_value, value.object_value());
|
152
204
|
break;
|
153
205
|
}
|
154
|
-
case
|
206
|
+
case Json::Type::ARRAY: {
|
155
207
|
google_protobuf_ListValue* list_value =
|
156
208
|
google_protobuf_Value_mutable_list_value(value_pb, arena);
|
157
|
-
PopulateListValue(arena, list_value, value.
|
209
|
+
PopulateListValue(arena, list_value, value.array_value());
|
158
210
|
break;
|
159
211
|
}
|
160
212
|
}
|
161
213
|
}
|
162
214
|
|
163
215
|
void PopulateNode(upb_arena* arena, const XdsBootstrap::Node* node,
|
164
|
-
const
|
216
|
+
const std::string& build_version,
|
217
|
+
const std::string& user_agent_name,
|
218
|
+
const std::string& server_name,
|
219
|
+
envoy_api_v2_core_Node* node_msg) {
|
165
220
|
if (node != nullptr) {
|
166
|
-
if (node->id
|
167
|
-
envoy_api_v2_core_Node_set_id(node_msg,
|
221
|
+
if (!node->id.empty()) {
|
222
|
+
envoy_api_v2_core_Node_set_id(node_msg,
|
223
|
+
upb_strview_makez(node->id.c_str()));
|
168
224
|
}
|
169
|
-
if (node->cluster
|
170
|
-
envoy_api_v2_core_Node_set_cluster(
|
171
|
-
|
225
|
+
if (!node->cluster.empty()) {
|
226
|
+
envoy_api_v2_core_Node_set_cluster(
|
227
|
+
node_msg, upb_strview_makez(node->cluster.c_str()));
|
228
|
+
}
|
229
|
+
if (!node->metadata.object_value().empty()) {
|
230
|
+
google_protobuf_Struct* metadata =
|
231
|
+
envoy_api_v2_core_Node_mutable_metadata(node_msg, arena);
|
232
|
+
PopulateMetadata(arena, metadata, node->metadata.object_value());
|
172
233
|
}
|
173
|
-
if (!
|
234
|
+
if (!server_name.empty()) {
|
174
235
|
google_protobuf_Struct* metadata =
|
175
236
|
envoy_api_v2_core_Node_mutable_metadata(node_msg, arena);
|
176
|
-
|
237
|
+
google_protobuf_Struct_FieldsEntry* field =
|
238
|
+
google_protobuf_Struct_add_fields(metadata, arena);
|
239
|
+
google_protobuf_Struct_FieldsEntry_set_key(
|
240
|
+
field, upb_strview_makez("PROXYLESS_CLIENT_HOSTNAME"));
|
241
|
+
google_protobuf_Value* value =
|
242
|
+
google_protobuf_Struct_FieldsEntry_mutable_value(field, arena);
|
243
|
+
google_protobuf_Value_set_string_value(
|
244
|
+
value, upb_strview_make(server_name.data(), server_name.size()));
|
177
245
|
}
|
178
|
-
if (node->locality_region
|
179
|
-
node->locality_subzone
|
246
|
+
if (!node->locality_region.empty() || !node->locality_zone.empty() ||
|
247
|
+
!node->locality_subzone.empty()) {
|
180
248
|
envoy_api_v2_core_Locality* locality =
|
181
249
|
envoy_api_v2_core_Node_mutable_locality(node_msg, arena);
|
182
|
-
if (node->locality_region
|
250
|
+
if (!node->locality_region.empty()) {
|
183
251
|
envoy_api_v2_core_Locality_set_region(
|
184
|
-
locality, upb_strview_makez(node->locality_region));
|
252
|
+
locality, upb_strview_makez(node->locality_region.c_str()));
|
185
253
|
}
|
186
|
-
if (node->locality_zone
|
254
|
+
if (!node->locality_zone.empty()) {
|
187
255
|
envoy_api_v2_core_Locality_set_zone(
|
188
|
-
locality, upb_strview_makez(node->locality_zone));
|
256
|
+
locality, upb_strview_makez(node->locality_zone.c_str()));
|
189
257
|
}
|
190
|
-
if (node->locality_subzone
|
258
|
+
if (!node->locality_subzone.empty()) {
|
191
259
|
envoy_api_v2_core_Locality_set_sub_zone(
|
192
|
-
locality, upb_strview_makez(node->locality_subzone));
|
260
|
+
locality, upb_strview_makez(node->locality_subzone.c_str()));
|
261
|
+
}
|
262
|
+
}
|
263
|
+
}
|
264
|
+
envoy_api_v2_core_Node_set_build_version(
|
265
|
+
node_msg, upb_strview_make(build_version.data(), build_version.size()));
|
266
|
+
envoy_api_v2_core_Node_set_user_agent_name(
|
267
|
+
node_msg,
|
268
|
+
upb_strview_make(user_agent_name.data(), user_agent_name.size()));
|
269
|
+
envoy_api_v2_core_Node_set_user_agent_version(
|
270
|
+
node_msg, upb_strview_makez(grpc_version_string()));
|
271
|
+
envoy_api_v2_core_Node_add_client_features(
|
272
|
+
node_msg, upb_strview_makez("envoy.lb.does_not_support_overprovisioning"),
|
273
|
+
arena);
|
274
|
+
}
|
275
|
+
|
276
|
+
inline absl::string_view UpbStringToAbsl(const upb_strview& str) {
|
277
|
+
return absl::string_view(str.data, str.size);
|
278
|
+
}
|
279
|
+
|
280
|
+
inline std::string UpbStringToStdString(const upb_strview& str) {
|
281
|
+
return std::string(str.data, str.size);
|
282
|
+
}
|
283
|
+
|
284
|
+
inline void AddStringField(const char* name, const upb_strview& value,
|
285
|
+
std::vector<std::string>* fields,
|
286
|
+
bool add_if_empty = false) {
|
287
|
+
if (value.size > 0 || add_if_empty) {
|
288
|
+
fields->emplace_back(
|
289
|
+
absl::StrCat(name, ": \"", UpbStringToAbsl(value), "\""));
|
290
|
+
}
|
291
|
+
}
|
292
|
+
|
293
|
+
inline void AddUInt32ValueField(const char* name,
|
294
|
+
const google_protobuf_UInt32Value* value,
|
295
|
+
std::vector<std::string>* fields) {
|
296
|
+
if (value != nullptr) {
|
297
|
+
fields->emplace_back(absl::StrCat(
|
298
|
+
name, " { value: ", google_protobuf_UInt32Value_value(value), " }"));
|
299
|
+
}
|
300
|
+
}
|
301
|
+
|
302
|
+
inline void AddLocalityField(int indent_level,
|
303
|
+
const envoy_api_v2_core_Locality* locality,
|
304
|
+
std::vector<std::string>* fields) {
|
305
|
+
std::string indent =
|
306
|
+
absl::StrJoin(std::vector<std::string>(indent_level, " "), "");
|
307
|
+
// region
|
308
|
+
std::string field = absl::StrCat(indent, "region");
|
309
|
+
AddStringField(field.c_str(), envoy_api_v2_core_Locality_region(locality),
|
310
|
+
fields);
|
311
|
+
// zone
|
312
|
+
field = absl::StrCat(indent, "zone");
|
313
|
+
AddStringField(field.c_str(), envoy_api_v2_core_Locality_zone(locality),
|
314
|
+
fields);
|
315
|
+
// sub_zone
|
316
|
+
field = absl::StrCat(indent, "sub_zone");
|
317
|
+
AddStringField(field.c_str(), envoy_api_v2_core_Locality_sub_zone(locality),
|
318
|
+
fields);
|
319
|
+
}
|
320
|
+
|
321
|
+
void AddNodeLogFields(const envoy_api_v2_core_Node* node,
|
322
|
+
std::vector<std::string>* fields) {
|
323
|
+
fields->emplace_back("node {");
|
324
|
+
// id
|
325
|
+
AddStringField(" id", envoy_api_v2_core_Node_id(node), fields);
|
326
|
+
// metadata
|
327
|
+
const google_protobuf_Struct* metadata =
|
328
|
+
envoy_api_v2_core_Node_metadata(node);
|
329
|
+
if (metadata != nullptr) {
|
330
|
+
fields->emplace_back(" metadata {");
|
331
|
+
size_t num_entries;
|
332
|
+
const google_protobuf_Struct_FieldsEntry* const* entries =
|
333
|
+
google_protobuf_Struct_fields(metadata, &num_entries);
|
334
|
+
for (size_t i = 0; i < num_entries; ++i) {
|
335
|
+
fields->emplace_back(" field {");
|
336
|
+
// key
|
337
|
+
AddStringField(" key",
|
338
|
+
google_protobuf_Struct_FieldsEntry_key(entries[i]),
|
339
|
+
fields);
|
340
|
+
// value
|
341
|
+
const google_protobuf_Value* value =
|
342
|
+
google_protobuf_Struct_FieldsEntry_value(entries[i]);
|
343
|
+
if (value != nullptr) {
|
344
|
+
std::string value_str;
|
345
|
+
if (google_protobuf_Value_has_string_value(value)) {
|
346
|
+
value_str = absl::StrCat(
|
347
|
+
"string_value: \"",
|
348
|
+
UpbStringToAbsl(google_protobuf_Value_string_value(value)), "\"");
|
349
|
+
} else if (google_protobuf_Value_has_null_value(value)) {
|
350
|
+
value_str = "null_value: NULL_VALUE";
|
351
|
+
} else if (google_protobuf_Value_has_number_value(value)) {
|
352
|
+
value_str = absl::StrCat("double_value: ",
|
353
|
+
google_protobuf_Value_number_value(value));
|
354
|
+
} else if (google_protobuf_Value_has_bool_value(value)) {
|
355
|
+
value_str = absl::StrCat("bool_value: ",
|
356
|
+
google_protobuf_Value_bool_value(value));
|
357
|
+
} else if (google_protobuf_Value_has_struct_value(value)) {
|
358
|
+
value_str = "struct_value: <not printed>";
|
359
|
+
} else if (google_protobuf_Value_has_list_value(value)) {
|
360
|
+
value_str = "list_value: <not printed>";
|
361
|
+
} else {
|
362
|
+
value_str = "<unknown>";
|
363
|
+
}
|
364
|
+
fields->emplace_back(absl::StrCat(" value { ", value_str, " }"));
|
193
365
|
}
|
366
|
+
fields->emplace_back(" }");
|
367
|
+
}
|
368
|
+
fields->emplace_back(" }");
|
369
|
+
}
|
370
|
+
// locality
|
371
|
+
const envoy_api_v2_core_Locality* locality =
|
372
|
+
envoy_api_v2_core_Node_locality(node);
|
373
|
+
if (locality != nullptr) {
|
374
|
+
fields->emplace_back(" locality {");
|
375
|
+
AddLocalityField(2, locality, fields);
|
376
|
+
fields->emplace_back(" }");
|
377
|
+
}
|
378
|
+
// build_version
|
379
|
+
AddStringField(" build_version", envoy_api_v2_core_Node_build_version(node),
|
380
|
+
fields);
|
381
|
+
// user_agent_name
|
382
|
+
AddStringField(" user_agent_name",
|
383
|
+
envoy_api_v2_core_Node_user_agent_name(node), fields);
|
384
|
+
// user_agent_version
|
385
|
+
AddStringField(" user_agent_version",
|
386
|
+
envoy_api_v2_core_Node_user_agent_version(node), fields);
|
387
|
+
// client_features
|
388
|
+
size_t num_client_features;
|
389
|
+
const upb_strview* client_features =
|
390
|
+
envoy_api_v2_core_Node_client_features(node, &num_client_features);
|
391
|
+
for (size_t i = 0; i < num_client_features; ++i) {
|
392
|
+
AddStringField(" client_features", client_features[i], fields);
|
393
|
+
}
|
394
|
+
fields->emplace_back("}");
|
395
|
+
}
|
396
|
+
|
397
|
+
void MaybeLogDiscoveryRequest(XdsClient* client, TraceFlag* tracer,
|
398
|
+
const envoy_api_v2_DiscoveryRequest* request) {
|
399
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
400
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
401
|
+
// TODO(roth): When we can upgrade upb, use upb textformat code to dump
|
402
|
+
// the raw proto instead of doing this manually.
|
403
|
+
std::vector<std::string> fields;
|
404
|
+
// version_info
|
405
|
+
AddStringField("version_info",
|
406
|
+
envoy_api_v2_DiscoveryRequest_version_info(request),
|
407
|
+
&fields);
|
408
|
+
// node
|
409
|
+
const envoy_api_v2_core_Node* node =
|
410
|
+
envoy_api_v2_DiscoveryRequest_node(request);
|
411
|
+
if (node != nullptr) AddNodeLogFields(node, &fields);
|
412
|
+
// resource_names
|
413
|
+
size_t num_resource_names;
|
414
|
+
const upb_strview* resource_names =
|
415
|
+
envoy_api_v2_DiscoveryRequest_resource_names(request,
|
416
|
+
&num_resource_names);
|
417
|
+
for (size_t i = 0; i < num_resource_names; ++i) {
|
418
|
+
AddStringField("resource_names", resource_names[i], &fields);
|
419
|
+
}
|
420
|
+
// type_url
|
421
|
+
AddStringField("type_url", envoy_api_v2_DiscoveryRequest_type_url(request),
|
422
|
+
&fields);
|
423
|
+
// response_nonce
|
424
|
+
AddStringField("response_nonce",
|
425
|
+
envoy_api_v2_DiscoveryRequest_response_nonce(request),
|
426
|
+
&fields);
|
427
|
+
// error_detail
|
428
|
+
const struct google_rpc_Status* error_detail =
|
429
|
+
envoy_api_v2_DiscoveryRequest_error_detail(request);
|
430
|
+
if (error_detail != nullptr) {
|
431
|
+
fields.emplace_back("error_detail {");
|
432
|
+
// code
|
433
|
+
int32_t code = google_rpc_Status_code(error_detail);
|
434
|
+
if (code != 0) fields.emplace_back(absl::StrCat(" code: ", code));
|
435
|
+
// message
|
436
|
+
AddStringField(" message", google_rpc_Status_message(error_detail),
|
437
|
+
&fields);
|
438
|
+
fields.emplace_back("}");
|
194
439
|
}
|
440
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] constructed ADS request: %s", client,
|
441
|
+
absl::StrJoin(fields, "\n").c_str());
|
195
442
|
}
|
196
|
-
|
197
|
-
|
443
|
+
}
|
444
|
+
|
445
|
+
grpc_slice SerializeDiscoveryRequest(upb_arena* arena,
|
446
|
+
envoy_api_v2_DiscoveryRequest* request) {
|
447
|
+
size_t output_length;
|
448
|
+
char* output =
|
449
|
+
envoy_api_v2_DiscoveryRequest_serialize(request, arena, &output_length);
|
450
|
+
return grpc_slice_from_copied_buffer(output, output_length);
|
198
451
|
}
|
199
452
|
|
200
453
|
} // namespace
|
201
454
|
|
202
|
-
grpc_slice
|
203
|
-
|
204
|
-
|
455
|
+
grpc_slice XdsApi::CreateAdsRequest(
|
456
|
+
const std::string& type_url,
|
457
|
+
const std::set<absl::string_view>& resource_names,
|
458
|
+
const std::string& version, const std::string& nonce, grpc_error* error,
|
459
|
+
bool populate_node) {
|
205
460
|
upb::Arena arena;
|
206
461
|
// Create a request.
|
207
462
|
envoy_api_v2_DiscoveryRequest* request =
|
208
463
|
envoy_api_v2_DiscoveryRequest_new(arena.ptr());
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
464
|
+
// Set type_url.
|
465
|
+
envoy_api_v2_DiscoveryRequest_set_type_url(
|
466
|
+
request, upb_strview_make(type_url.data(), type_url.size()));
|
467
|
+
// Set version_info.
|
468
|
+
if (!version.empty()) {
|
469
|
+
envoy_api_v2_DiscoveryRequest_set_version_info(
|
470
|
+
request, upb_strview_make(version.data(), version.size()));
|
471
|
+
}
|
472
|
+
// Set nonce.
|
473
|
+
if (!nonce.empty()) {
|
474
|
+
envoy_api_v2_DiscoveryRequest_set_response_nonce(
|
475
|
+
request, upb_strview_make(nonce.data(), nonce.size()));
|
476
|
+
}
|
477
|
+
// Set error_detail if it's a NACK.
|
478
|
+
if (error != GRPC_ERROR_NONE) {
|
479
|
+
grpc_slice error_description_slice;
|
480
|
+
GPR_ASSERT(grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION,
|
481
|
+
&error_description_slice));
|
482
|
+
upb_strview error_description_strview =
|
483
|
+
upb_strview_make(reinterpret_cast<const char*>(
|
484
|
+
GPR_SLICE_START_PTR(error_description_slice)),
|
485
|
+
GPR_SLICE_LENGTH(error_description_slice));
|
486
|
+
google_rpc_Status* error_detail =
|
487
|
+
envoy_api_v2_DiscoveryRequest_mutable_error_detail(request,
|
488
|
+
arena.ptr());
|
489
|
+
google_rpc_Status_set_message(error_detail, error_description_strview);
|
490
|
+
GRPC_ERROR_UNREF(error);
|
491
|
+
}
|
492
|
+
// Populate node.
|
493
|
+
if (populate_node) {
|
494
|
+
envoy_api_v2_core_Node* node_msg =
|
495
|
+
envoy_api_v2_DiscoveryRequest_mutable_node(request, arena.ptr());
|
496
|
+
PopulateNode(arena.ptr(), node_, build_version_, user_agent_name_, "",
|
497
|
+
node_msg);
|
498
|
+
}
|
499
|
+
// Add resource_names.
|
500
|
+
for (const auto& resource_name : resource_names) {
|
501
|
+
envoy_api_v2_DiscoveryRequest_add_resource_names(
|
502
|
+
request, upb_strview_make(resource_name.data(), resource_name.size()),
|
503
|
+
arena.ptr());
|
504
|
+
}
|
505
|
+
MaybeLogDiscoveryRequest(client_, tracer_, request);
|
506
|
+
return SerializeDiscoveryRequest(arena.ptr(), request);
|
221
507
|
}
|
222
508
|
|
223
509
|
namespace {
|
224
510
|
|
511
|
+
void MaybeLogDiscoveryResponse(XdsClient* client, TraceFlag* tracer,
|
512
|
+
const envoy_api_v2_DiscoveryResponse* response) {
|
513
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
514
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
515
|
+
// TODO(roth): When we can upgrade upb, use upb textformat code to dump
|
516
|
+
// the raw proto instead of doing this manually.
|
517
|
+
std::vector<std::string> fields;
|
518
|
+
// version_info
|
519
|
+
AddStringField("version_info",
|
520
|
+
envoy_api_v2_DiscoveryResponse_version_info(response),
|
521
|
+
&fields);
|
522
|
+
// resources
|
523
|
+
size_t num_resources;
|
524
|
+
envoy_api_v2_DiscoveryResponse_resources(response, &num_resources);
|
525
|
+
fields.emplace_back(
|
526
|
+
absl::StrCat("resources: <", num_resources, " element(s)>"));
|
527
|
+
// type_url
|
528
|
+
AddStringField("type_url",
|
529
|
+
envoy_api_v2_DiscoveryResponse_type_url(response), &fields);
|
530
|
+
// nonce
|
531
|
+
AddStringField("nonce", envoy_api_v2_DiscoveryResponse_nonce(response),
|
532
|
+
&fields);
|
533
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] received response: %s", client,
|
534
|
+
absl::StrJoin(fields, "\n").c_str());
|
535
|
+
}
|
536
|
+
}
|
537
|
+
|
538
|
+
void MaybeLogRouteConfiguration(
|
539
|
+
XdsClient* client, TraceFlag* tracer,
|
540
|
+
const envoy_api_v2_RouteConfiguration* route_config) {
|
541
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
542
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
543
|
+
// TODO(roth): When we can upgrade upb, use upb textformat code to dump
|
544
|
+
// the raw proto instead of doing this manually.
|
545
|
+
std::vector<std::string> fields;
|
546
|
+
// name
|
547
|
+
AddStringField("name", envoy_api_v2_RouteConfiguration_name(route_config),
|
548
|
+
&fields);
|
549
|
+
// virtual_hosts
|
550
|
+
size_t num_virtual_hosts;
|
551
|
+
const envoy_api_v2_route_VirtualHost* const* virtual_hosts =
|
552
|
+
envoy_api_v2_RouteConfiguration_virtual_hosts(route_config,
|
553
|
+
&num_virtual_hosts);
|
554
|
+
for (size_t i = 0; i < num_virtual_hosts; ++i) {
|
555
|
+
const auto* virtual_host = virtual_hosts[i];
|
556
|
+
fields.push_back("virtual_hosts {");
|
557
|
+
// name
|
558
|
+
AddStringField(
|
559
|
+
" name", envoy_api_v2_route_VirtualHost_name(virtual_host), &fields);
|
560
|
+
// domains
|
561
|
+
size_t num_domains;
|
562
|
+
const upb_strview* const domains =
|
563
|
+
envoy_api_v2_route_VirtualHost_domains(virtual_host, &num_domains);
|
564
|
+
for (size_t j = 0; j < num_domains; ++j) {
|
565
|
+
AddStringField(" domains", domains[j], &fields);
|
566
|
+
}
|
567
|
+
// routes
|
568
|
+
size_t num_routes;
|
569
|
+
const envoy_api_v2_route_Route* const* routes =
|
570
|
+
envoy_api_v2_route_VirtualHost_routes(virtual_host, &num_routes);
|
571
|
+
for (size_t j = 0; j < num_routes; ++j) {
|
572
|
+
const auto* route = routes[j];
|
573
|
+
fields.push_back(" route {");
|
574
|
+
// name
|
575
|
+
AddStringField(" name", envoy_api_v2_route_Route_name(route),
|
576
|
+
&fields);
|
577
|
+
// match
|
578
|
+
const envoy_api_v2_route_RouteMatch* match =
|
579
|
+
envoy_api_v2_route_Route_match(route);
|
580
|
+
if (match != nullptr) {
|
581
|
+
fields.emplace_back(" match {");
|
582
|
+
// path matching
|
583
|
+
if (envoy_api_v2_route_RouteMatch_has_prefix(match)) {
|
584
|
+
AddStringField(" prefix",
|
585
|
+
envoy_api_v2_route_RouteMatch_prefix(match), &fields,
|
586
|
+
/*add_if_empty=*/true);
|
587
|
+
} else if (envoy_api_v2_route_RouteMatch_has_path(match)) {
|
588
|
+
AddStringField(" path",
|
589
|
+
envoy_api_v2_route_RouteMatch_path(match), &fields,
|
590
|
+
/*add_if_empty=*/true);
|
591
|
+
} else if (envoy_api_v2_route_RouteMatch_has_regex(match)) {
|
592
|
+
AddStringField(" regex",
|
593
|
+
envoy_api_v2_route_RouteMatch_regex(match), &fields,
|
594
|
+
/*add_if_empty=*/true);
|
595
|
+
} else if (envoy_api_v2_route_RouteMatch_has_safe_regex(match)) {
|
596
|
+
fields.emplace_back(" safe_regex: <not printed>");
|
597
|
+
} else {
|
598
|
+
fields.emplace_back(" <unknown path matching type>");
|
599
|
+
}
|
600
|
+
// header matching
|
601
|
+
size_t num_headers;
|
602
|
+
envoy_api_v2_route_RouteMatch_headers(match, &num_headers);
|
603
|
+
if (num_headers > 0) {
|
604
|
+
fields.emplace_back(
|
605
|
+
absl::StrCat(" headers: <", num_headers, " element(s)>"));
|
606
|
+
}
|
607
|
+
fields.emplace_back(" }");
|
608
|
+
}
|
609
|
+
// action
|
610
|
+
if (envoy_api_v2_route_Route_has_route(route)) {
|
611
|
+
const envoy_api_v2_route_RouteAction* action =
|
612
|
+
envoy_api_v2_route_Route_route(route);
|
613
|
+
fields.emplace_back(" route {");
|
614
|
+
if (envoy_api_v2_route_RouteAction_has_cluster(action)) {
|
615
|
+
AddStringField(" cluster",
|
616
|
+
envoy_api_v2_route_RouteAction_cluster(action),
|
617
|
+
&fields);
|
618
|
+
} else if (envoy_api_v2_route_RouteAction_has_cluster_header(
|
619
|
+
action)) {
|
620
|
+
AddStringField(
|
621
|
+
" cluster_header",
|
622
|
+
envoy_api_v2_route_RouteAction_cluster_header(action), &fields);
|
623
|
+
} else if (envoy_api_v2_route_RouteAction_has_weighted_clusters(
|
624
|
+
action)) {
|
625
|
+
const envoy_api_v2_route_WeightedCluster* weighted_clusters =
|
626
|
+
envoy_api_v2_route_RouteAction_weighted_clusters(action);
|
627
|
+
fields.emplace_back(" weighted_clusters {");
|
628
|
+
size_t num_cluster_weights;
|
629
|
+
const envoy_api_v2_route_WeightedCluster_ClusterWeight* const*
|
630
|
+
cluster_weights = envoy_api_v2_route_WeightedCluster_clusters(
|
631
|
+
weighted_clusters, &num_cluster_weights);
|
632
|
+
for (size_t i = 0; i < num_cluster_weights; ++i) {
|
633
|
+
const envoy_api_v2_route_WeightedCluster_ClusterWeight*
|
634
|
+
cluster_weight = cluster_weights[i];
|
635
|
+
fields.emplace_back(" clusters {");
|
636
|
+
AddStringField(
|
637
|
+
" name",
|
638
|
+
envoy_api_v2_route_WeightedCluster_ClusterWeight_name(
|
639
|
+
cluster_weight),
|
640
|
+
&fields);
|
641
|
+
AddUInt32ValueField(
|
642
|
+
" weight",
|
643
|
+
envoy_api_v2_route_WeightedCluster_ClusterWeight_weight(
|
644
|
+
cluster_weight),
|
645
|
+
&fields);
|
646
|
+
fields.emplace_back(" }");
|
647
|
+
}
|
648
|
+
AddUInt32ValueField(" total_weight",
|
649
|
+
envoy_api_v2_route_WeightedCluster_total_weight(
|
650
|
+
weighted_clusters),
|
651
|
+
&fields);
|
652
|
+
fields.emplace_back(" }");
|
653
|
+
}
|
654
|
+
fields.emplace_back(" }");
|
655
|
+
} else if (envoy_api_v2_route_Route_has_redirect(route)) {
|
656
|
+
fields.emplace_back(" redirect: <not printed>");
|
657
|
+
} else if (envoy_api_v2_route_Route_has_direct_response(route)) {
|
658
|
+
fields.emplace_back(" direct_response: <not printed>");
|
659
|
+
} else if (envoy_api_v2_route_Route_has_filter_action(route)) {
|
660
|
+
fields.emplace_back(" filter_action: <not printed>");
|
661
|
+
}
|
662
|
+
fields.push_back(" }");
|
663
|
+
}
|
664
|
+
fields.push_back("}");
|
665
|
+
}
|
666
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] RouteConfiguration: %s", client,
|
667
|
+
absl::StrJoin(fields, "\n").c_str());
|
668
|
+
}
|
669
|
+
}
|
670
|
+
|
671
|
+
void MaybeLogCluster(XdsClient* client, TraceFlag* tracer,
|
672
|
+
const envoy_api_v2_Cluster* cluster) {
|
673
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
674
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
675
|
+
// TODO(roth): When we can upgrade upb, use upb textformat code to dump
|
676
|
+
// the raw proto instead of doing this manually.
|
677
|
+
std::vector<std::string> fields;
|
678
|
+
// name
|
679
|
+
AddStringField("name", envoy_api_v2_Cluster_name(cluster), &fields);
|
680
|
+
// type
|
681
|
+
if (envoy_api_v2_Cluster_has_type(cluster)) {
|
682
|
+
fields.emplace_back(
|
683
|
+
absl::StrCat("type: ", envoy_api_v2_Cluster_type(cluster)));
|
684
|
+
} else if (envoy_api_v2_Cluster_has_cluster_type(cluster)) {
|
685
|
+
fields.emplace_back("cluster_type: <not printed>");
|
686
|
+
} else {
|
687
|
+
fields.emplace_back("<unknown type>");
|
688
|
+
}
|
689
|
+
// eds_cluster_config
|
690
|
+
const envoy_api_v2_Cluster_EdsClusterConfig* eds_cluster_config =
|
691
|
+
envoy_api_v2_Cluster_eds_cluster_config(cluster);
|
692
|
+
if (eds_cluster_config != nullptr) {
|
693
|
+
fields.emplace_back("eds_cluster_config {");
|
694
|
+
// eds_config
|
695
|
+
const struct envoy_api_v2_core_ConfigSource* eds_config =
|
696
|
+
envoy_api_v2_Cluster_EdsClusterConfig_eds_config(eds_cluster_config);
|
697
|
+
if (eds_config != nullptr) {
|
698
|
+
if (envoy_api_v2_core_ConfigSource_has_ads(eds_config)) {
|
699
|
+
fields.emplace_back(" eds_config { ads {} }");
|
700
|
+
} else {
|
701
|
+
fields.emplace_back(" eds_config: <non-ADS type>");
|
702
|
+
}
|
703
|
+
}
|
704
|
+
// service_name
|
705
|
+
AddStringField(" service_name",
|
706
|
+
envoy_api_v2_Cluster_EdsClusterConfig_service_name(
|
707
|
+
eds_cluster_config),
|
708
|
+
&fields);
|
709
|
+
fields.emplace_back("}");
|
710
|
+
}
|
711
|
+
// lb_policy
|
712
|
+
fields.emplace_back(
|
713
|
+
absl::StrCat("lb_policy: ", envoy_api_v2_Cluster_lb_policy(cluster)));
|
714
|
+
// lrs_server
|
715
|
+
const envoy_api_v2_core_ConfigSource* lrs_server =
|
716
|
+
envoy_api_v2_Cluster_lrs_server(cluster);
|
717
|
+
if (lrs_server != nullptr) {
|
718
|
+
if (envoy_api_v2_core_ConfigSource_has_self(lrs_server)) {
|
719
|
+
fields.emplace_back("lrs_server { self {} }");
|
720
|
+
} else {
|
721
|
+
fields.emplace_back("lrs_server: <non-self type>");
|
722
|
+
}
|
723
|
+
}
|
724
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] Cluster: %s", client,
|
725
|
+
absl::StrJoin(fields, "\n").c_str());
|
726
|
+
}
|
727
|
+
}
|
728
|
+
|
729
|
+
void MaybeLogClusterLoadAssignment(
|
730
|
+
XdsClient* client, TraceFlag* tracer,
|
731
|
+
const envoy_api_v2_ClusterLoadAssignment* cla) {
|
732
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
733
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
734
|
+
// TODO(roth): When we can upgrade upb, use upb textformat code to dump
|
735
|
+
// the raw proto instead of doing this manually.
|
736
|
+
std::vector<std::string> fields;
|
737
|
+
// cluster_name
|
738
|
+
AddStringField("cluster_name",
|
739
|
+
envoy_api_v2_ClusterLoadAssignment_cluster_name(cla),
|
740
|
+
&fields);
|
741
|
+
// endpoints
|
742
|
+
size_t num_localities;
|
743
|
+
const struct envoy_api_v2_endpoint_LocalityLbEndpoints* const*
|
744
|
+
locality_endpoints =
|
745
|
+
envoy_api_v2_ClusterLoadAssignment_endpoints(cla, &num_localities);
|
746
|
+
for (size_t i = 0; i < num_localities; ++i) {
|
747
|
+
const auto* locality_endpoint = locality_endpoints[i];
|
748
|
+
fields.emplace_back("endpoints {");
|
749
|
+
// locality
|
750
|
+
const auto* locality =
|
751
|
+
envoy_api_v2_endpoint_LocalityLbEndpoints_locality(locality_endpoint);
|
752
|
+
if (locality != nullptr) {
|
753
|
+
fields.emplace_back(" locality {");
|
754
|
+
AddLocalityField(2, locality, &fields);
|
755
|
+
fields.emplace_back(" }");
|
756
|
+
}
|
757
|
+
// lb_endpoints
|
758
|
+
size_t num_lb_endpoints;
|
759
|
+
const envoy_api_v2_endpoint_LbEndpoint* const* lb_endpoints =
|
760
|
+
envoy_api_v2_endpoint_LocalityLbEndpoints_lb_endpoints(
|
761
|
+
locality_endpoint, &num_lb_endpoints);
|
762
|
+
for (size_t j = 0; j < num_lb_endpoints; ++j) {
|
763
|
+
const auto* lb_endpoint = lb_endpoints[j];
|
764
|
+
fields.emplace_back(" lb_endpoints {");
|
765
|
+
// health_status
|
766
|
+
uint32_t health_status =
|
767
|
+
envoy_api_v2_endpoint_LbEndpoint_health_status(lb_endpoint);
|
768
|
+
if (health_status > 0) {
|
769
|
+
fields.emplace_back(
|
770
|
+
absl::StrCat(" health_status: ", health_status));
|
771
|
+
}
|
772
|
+
// endpoint
|
773
|
+
const envoy_api_v2_endpoint_Endpoint* endpoint =
|
774
|
+
envoy_api_v2_endpoint_LbEndpoint_endpoint(lb_endpoint);
|
775
|
+
if (endpoint != nullptr) {
|
776
|
+
fields.emplace_back(" endpoint {");
|
777
|
+
// address
|
778
|
+
const auto* address =
|
779
|
+
envoy_api_v2_endpoint_Endpoint_address(endpoint);
|
780
|
+
if (address != nullptr) {
|
781
|
+
fields.emplace_back(" address {");
|
782
|
+
// socket_address
|
783
|
+
const auto* socket_address =
|
784
|
+
envoy_api_v2_core_Address_socket_address(address);
|
785
|
+
if (socket_address != nullptr) {
|
786
|
+
fields.emplace_back(" socket_address {");
|
787
|
+
// address
|
788
|
+
AddStringField(
|
789
|
+
" address",
|
790
|
+
envoy_api_v2_core_SocketAddress_address(socket_address),
|
791
|
+
&fields);
|
792
|
+
// port_value
|
793
|
+
if (envoy_api_v2_core_SocketAddress_has_port_value(
|
794
|
+
socket_address)) {
|
795
|
+
fields.emplace_back(
|
796
|
+
absl::StrCat(" port_value: ",
|
797
|
+
envoy_api_v2_core_SocketAddress_port_value(
|
798
|
+
socket_address)));
|
799
|
+
} else {
|
800
|
+
fields.emplace_back(" <non-numeric port>");
|
801
|
+
}
|
802
|
+
fields.emplace_back(" }");
|
803
|
+
} else {
|
804
|
+
fields.emplace_back(" <non-socket address>");
|
805
|
+
}
|
806
|
+
fields.emplace_back(" }");
|
807
|
+
}
|
808
|
+
fields.emplace_back(" }");
|
809
|
+
}
|
810
|
+
fields.emplace_back(" }");
|
811
|
+
}
|
812
|
+
// load_balancing_weight
|
813
|
+
AddUInt32ValueField(
|
814
|
+
" load_balancing_weight",
|
815
|
+
envoy_api_v2_endpoint_LocalityLbEndpoints_load_balancing_weight(
|
816
|
+
locality_endpoint),
|
817
|
+
&fields);
|
818
|
+
// priority
|
819
|
+
uint32_t priority =
|
820
|
+
envoy_api_v2_endpoint_LocalityLbEndpoints_priority(locality_endpoint);
|
821
|
+
if (priority > 0) {
|
822
|
+
fields.emplace_back(absl::StrCat(" priority: ", priority));
|
823
|
+
}
|
824
|
+
fields.emplace_back("}");
|
825
|
+
}
|
826
|
+
// policy
|
827
|
+
const envoy_api_v2_ClusterLoadAssignment_Policy* policy =
|
828
|
+
envoy_api_v2_ClusterLoadAssignment_policy(cla);
|
829
|
+
if (policy != nullptr) {
|
830
|
+
fields.emplace_back("policy {");
|
831
|
+
// drop_overloads
|
832
|
+
size_t num_drop_overloads;
|
833
|
+
const envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload* const*
|
834
|
+
drop_overloads =
|
835
|
+
envoy_api_v2_ClusterLoadAssignment_Policy_drop_overloads(
|
836
|
+
policy, &num_drop_overloads);
|
837
|
+
for (size_t i = 0; i < num_drop_overloads; ++i) {
|
838
|
+
auto* drop_overload = drop_overloads[i];
|
839
|
+
fields.emplace_back(" drop_overloads {");
|
840
|
+
// category
|
841
|
+
AddStringField(
|
842
|
+
" category",
|
843
|
+
envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload_category(
|
844
|
+
drop_overload),
|
845
|
+
&fields);
|
846
|
+
// drop_percentage
|
847
|
+
const auto* drop_percentage =
|
848
|
+
envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload_drop_percentage(
|
849
|
+
drop_overload);
|
850
|
+
if (drop_percentage != nullptr) {
|
851
|
+
fields.emplace_back(" drop_percentage {");
|
852
|
+
fields.emplace_back(absl::StrCat(
|
853
|
+
" numerator: ",
|
854
|
+
envoy_type_FractionalPercent_numerator(drop_percentage)));
|
855
|
+
fields.emplace_back(absl::StrCat(
|
856
|
+
" denominator: ",
|
857
|
+
envoy_type_FractionalPercent_denominator(drop_percentage)));
|
858
|
+
fields.emplace_back(" }");
|
859
|
+
}
|
860
|
+
fields.emplace_back(" }");
|
861
|
+
}
|
862
|
+
// overprovisioning_factor
|
863
|
+
fields.emplace_back("}");
|
864
|
+
}
|
865
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] ClusterLoadAssignment: %s", client,
|
866
|
+
absl::StrJoin(fields, "\n").c_str());
|
867
|
+
}
|
868
|
+
}
|
869
|
+
|
870
|
+
// Better match type has smaller value.
|
871
|
+
enum MatchType {
|
872
|
+
EXACT_MATCH,
|
873
|
+
SUFFIX_MATCH,
|
874
|
+
PREFIX_MATCH,
|
875
|
+
UNIVERSE_MATCH,
|
876
|
+
INVALID_MATCH,
|
877
|
+
};
|
878
|
+
|
879
|
+
// Returns true if match succeeds.
|
880
|
+
bool DomainMatch(MatchType match_type, std::string domain_pattern,
|
881
|
+
std::string expected_host_name) {
|
882
|
+
// Normalize the args to lower-case. Domain matching is case-insensitive.
|
883
|
+
std::transform(domain_pattern.begin(), domain_pattern.end(),
|
884
|
+
domain_pattern.begin(),
|
885
|
+
[](unsigned char c) { return std::tolower(c); });
|
886
|
+
std::transform(expected_host_name.begin(), expected_host_name.end(),
|
887
|
+
expected_host_name.begin(),
|
888
|
+
[](unsigned char c) { return std::tolower(c); });
|
889
|
+
if (match_type == EXACT_MATCH) {
|
890
|
+
return domain_pattern == expected_host_name;
|
891
|
+
} else if (match_type == SUFFIX_MATCH) {
|
892
|
+
// Asterisk must match at least one char.
|
893
|
+
if (expected_host_name.size() < domain_pattern.size()) return false;
|
894
|
+
absl::string_view pattern_suffix(domain_pattern.c_str() + 1);
|
895
|
+
absl::string_view host_suffix(expected_host_name.c_str() +
|
896
|
+
expected_host_name.size() -
|
897
|
+
pattern_suffix.size());
|
898
|
+
return pattern_suffix == host_suffix;
|
899
|
+
} else if (match_type == PREFIX_MATCH) {
|
900
|
+
// Asterisk must match at least one char.
|
901
|
+
if (expected_host_name.size() < domain_pattern.size()) return false;
|
902
|
+
absl::string_view pattern_prefix(domain_pattern.c_str(),
|
903
|
+
domain_pattern.size() - 1);
|
904
|
+
absl::string_view host_prefix(expected_host_name.c_str(),
|
905
|
+
pattern_prefix.size());
|
906
|
+
return pattern_prefix == host_prefix;
|
907
|
+
} else {
|
908
|
+
return match_type == UNIVERSE_MATCH;
|
909
|
+
}
|
910
|
+
}
|
911
|
+
|
912
|
+
MatchType DomainPatternMatchType(const std::string& domain_pattern) {
|
913
|
+
if (domain_pattern.empty()) return INVALID_MATCH;
|
914
|
+
if (domain_pattern.find('*') == std::string::npos) return EXACT_MATCH;
|
915
|
+
if (domain_pattern == "*") return UNIVERSE_MATCH;
|
916
|
+
if (domain_pattern[0] == '*') return SUFFIX_MATCH;
|
917
|
+
if (domain_pattern[domain_pattern.size() - 1] == '*') return PREFIX_MATCH;
|
918
|
+
return INVALID_MATCH;
|
919
|
+
}
|
920
|
+
|
921
|
+
grpc_error* RouteActionParse(const envoy_api_v2_route_Route* route,
|
922
|
+
XdsApi::RdsUpdate::RdsRoute* rds_route) {
|
923
|
+
if (!envoy_api_v2_route_Route_has_route(route)) {
|
924
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
925
|
+
"No RouteAction found in route.");
|
926
|
+
}
|
927
|
+
const envoy_api_v2_route_RouteAction* route_action =
|
928
|
+
envoy_api_v2_route_Route_route(route);
|
929
|
+
// Get the cluster or weighted_clusters in the RouteAction.
|
930
|
+
if (envoy_api_v2_route_RouteAction_has_cluster(route_action)) {
|
931
|
+
const upb_strview cluster_name =
|
932
|
+
envoy_api_v2_route_RouteAction_cluster(route_action);
|
933
|
+
if (cluster_name.size == 0) {
|
934
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
935
|
+
"RouteAction cluster contains empty cluster name.");
|
936
|
+
}
|
937
|
+
rds_route->cluster_name = UpbStringToStdString(cluster_name);
|
938
|
+
} else if (envoy_api_v2_route_RouteAction_has_weighted_clusters(
|
939
|
+
route_action)) {
|
940
|
+
const envoy_api_v2_route_WeightedCluster* weighted_cluster =
|
941
|
+
envoy_api_v2_route_RouteAction_weighted_clusters(route_action);
|
942
|
+
uint32_t total_weight = 100;
|
943
|
+
const google_protobuf_UInt32Value* weight =
|
944
|
+
envoy_api_v2_route_WeightedCluster_total_weight(weighted_cluster);
|
945
|
+
if (weight != nullptr) {
|
946
|
+
total_weight = google_protobuf_UInt32Value_value(weight);
|
947
|
+
}
|
948
|
+
size_t clusters_size;
|
949
|
+
const envoy_api_v2_route_WeightedCluster_ClusterWeight* const* clusters =
|
950
|
+
envoy_api_v2_route_WeightedCluster_clusters(weighted_cluster,
|
951
|
+
&clusters_size);
|
952
|
+
uint32_t sum_of_weights = 0;
|
953
|
+
for (size_t j = 0; j < clusters_size; ++j) {
|
954
|
+
const envoy_api_v2_route_WeightedCluster_ClusterWeight* cluster_weight =
|
955
|
+
clusters[j];
|
956
|
+
XdsApi::RdsUpdate::RdsRoute::ClusterWeight cluster;
|
957
|
+
cluster.name = UpbStringToStdString(
|
958
|
+
envoy_api_v2_route_WeightedCluster_ClusterWeight_name(
|
959
|
+
cluster_weight));
|
960
|
+
if (cluster.name.empty()) {
|
961
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
962
|
+
"RouteAction weighted_cluster cluster contains empty cluster "
|
963
|
+
"name.");
|
964
|
+
}
|
965
|
+
const google_protobuf_UInt32Value* weight =
|
966
|
+
envoy_api_v2_route_WeightedCluster_ClusterWeight_weight(
|
967
|
+
cluster_weight);
|
968
|
+
if (weight == nullptr) {
|
969
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
970
|
+
"RouteAction weighted_cluster cluster missing weight");
|
971
|
+
}
|
972
|
+
cluster.weight = google_protobuf_UInt32Value_value(weight);
|
973
|
+
sum_of_weights += cluster.weight;
|
974
|
+
rds_route->weighted_clusters.emplace_back(std::move(cluster));
|
975
|
+
}
|
976
|
+
if (total_weight != sum_of_weights) {
|
977
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
978
|
+
"RouteAction weighted_cluster has incorrect total weight");
|
979
|
+
}
|
980
|
+
if (rds_route->weighted_clusters.empty()) {
|
981
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
982
|
+
"RouteAction weighted_cluster has no valid clusters specified.");
|
983
|
+
}
|
984
|
+
} else {
|
985
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
986
|
+
"No cluster or weighted_clusters found in RouteAction.");
|
987
|
+
}
|
988
|
+
return GRPC_ERROR_NONE;
|
989
|
+
}
|
990
|
+
|
991
|
+
grpc_error* RouteConfigParse(
|
992
|
+
XdsClient* client, TraceFlag* tracer,
|
993
|
+
const envoy_api_v2_RouteConfiguration* route_config,
|
994
|
+
const std::string& expected_server_name, const bool xds_routing_enabled,
|
995
|
+
XdsApi::RdsUpdate* rds_update) {
|
996
|
+
MaybeLogRouteConfiguration(client, tracer, route_config);
|
997
|
+
// Get the virtual hosts.
|
998
|
+
size_t size;
|
999
|
+
const envoy_api_v2_route_VirtualHost* const* virtual_hosts =
|
1000
|
+
envoy_api_v2_RouteConfiguration_virtual_hosts(route_config, &size);
|
1001
|
+
// Find the best matched virtual host.
|
1002
|
+
// The search order for 4 groups of domain patterns:
|
1003
|
+
// 1. Exact match.
|
1004
|
+
// 2. Suffix match (e.g., "*ABC").
|
1005
|
+
// 3. Prefix match (e.g., "ABC*").
|
1006
|
+
// 4. Universe match (i.e., "*").
|
1007
|
+
// Within each group, longest match wins.
|
1008
|
+
// If the same best matched domain pattern appears in multiple virtual hosts,
|
1009
|
+
// the first matched virtual host wins.
|
1010
|
+
const envoy_api_v2_route_VirtualHost* target_virtual_host = nullptr;
|
1011
|
+
MatchType best_match_type = INVALID_MATCH;
|
1012
|
+
size_t longest_match = 0;
|
1013
|
+
// Check each domain pattern in each virtual host to determine the best
|
1014
|
+
// matched virtual host.
|
1015
|
+
for (size_t i = 0; i < size; ++i) {
|
1016
|
+
size_t domain_size;
|
1017
|
+
upb_strview const* domains =
|
1018
|
+
envoy_api_v2_route_VirtualHost_domains(virtual_hosts[i], &domain_size);
|
1019
|
+
for (size_t j = 0; j < domain_size; ++j) {
|
1020
|
+
const std::string domain_pattern(domains[j].data, domains[j].size);
|
1021
|
+
// Check the match type first. Skip the pattern if it's not better than
|
1022
|
+
// current match.
|
1023
|
+
const MatchType match_type = DomainPatternMatchType(domain_pattern);
|
1024
|
+
if (match_type == INVALID_MATCH) {
|
1025
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid domain pattern.");
|
1026
|
+
}
|
1027
|
+
if (match_type > best_match_type) continue;
|
1028
|
+
if (match_type == best_match_type &&
|
1029
|
+
domain_pattern.size() <= longest_match) {
|
1030
|
+
continue;
|
1031
|
+
}
|
1032
|
+
// Skip if match fails.
|
1033
|
+
if (!DomainMatch(match_type, domain_pattern, expected_server_name)) {
|
1034
|
+
continue;
|
1035
|
+
}
|
1036
|
+
// Choose this match.
|
1037
|
+
target_virtual_host = virtual_hosts[i];
|
1038
|
+
best_match_type = match_type;
|
1039
|
+
longest_match = domain_pattern.size();
|
1040
|
+
if (best_match_type == EXACT_MATCH) break;
|
1041
|
+
}
|
1042
|
+
if (best_match_type == EXACT_MATCH) break;
|
1043
|
+
}
|
1044
|
+
if (target_virtual_host == nullptr) {
|
1045
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1046
|
+
"No matched virtual host found in the route config.");
|
1047
|
+
}
|
1048
|
+
// Get the route list from the matched virtual host.
|
1049
|
+
const envoy_api_v2_route_Route* const* routes =
|
1050
|
+
envoy_api_v2_route_VirtualHost_routes(target_virtual_host, &size);
|
1051
|
+
if (size < 1) {
|
1052
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1053
|
+
"No route found in the virtual host.");
|
1054
|
+
}
|
1055
|
+
// If xds_routing is not configured, only look at the last one in the route
|
1056
|
+
// list (the default route)
|
1057
|
+
if (!xds_routing_enabled) {
|
1058
|
+
const envoy_api_v2_route_Route* route = routes[size - 1];
|
1059
|
+
const envoy_api_v2_route_RouteMatch* match =
|
1060
|
+
envoy_api_v2_route_Route_match(route);
|
1061
|
+
XdsApi::RdsUpdate::RdsRoute rds_route;
|
1062
|
+
// if xds routing is not enabled, we must be working on the default route;
|
1063
|
+
// in this case, we must have an empty or single slash prefix.
|
1064
|
+
if (!envoy_api_v2_route_RouteMatch_has_prefix(match)) {
|
1065
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1066
|
+
"No prefix field found in Default RouteMatch.");
|
1067
|
+
}
|
1068
|
+
const upb_strview prefix = envoy_api_v2_route_RouteMatch_prefix(match);
|
1069
|
+
if (!upb_strview_eql(prefix, upb_strview_makez("")) &&
|
1070
|
+
!upb_strview_eql(prefix, upb_strview_makez("/"))) {
|
1071
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1072
|
+
"Default route must have empty prefix.");
|
1073
|
+
}
|
1074
|
+
grpc_error* error = RouteActionParse(route, &rds_route);
|
1075
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1076
|
+
rds_update->routes.emplace_back(std::move(rds_route));
|
1077
|
+
return GRPC_ERROR_NONE;
|
1078
|
+
}
|
1079
|
+
// Loop over the whole list of routes
|
1080
|
+
for (size_t i = 0; i < size; ++i) {
|
1081
|
+
const envoy_api_v2_route_Route* route = routes[i];
|
1082
|
+
const envoy_api_v2_route_RouteMatch* match =
|
1083
|
+
envoy_api_v2_route_Route_match(route);
|
1084
|
+
XdsApi::RdsUpdate::RdsRoute rds_route;
|
1085
|
+
if (envoy_api_v2_route_RouteMatch_has_prefix(match)) {
|
1086
|
+
upb_strview prefix = envoy_api_v2_route_RouteMatch_prefix(match);
|
1087
|
+
// Empty prefix "" is accepted.
|
1088
|
+
if (prefix.size > 0) {
|
1089
|
+
// Prefix "/" is accepted.
|
1090
|
+
if (prefix.data[0] != '/') {
|
1091
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1092
|
+
"Prefix does not start with a /");
|
1093
|
+
}
|
1094
|
+
if (prefix.size > 1) {
|
1095
|
+
std::vector<absl::string_view> prefix_elements = absl::StrSplit(
|
1096
|
+
absl::string_view(prefix.data, prefix.size).substr(1),
|
1097
|
+
absl::MaxSplits('/', 1));
|
1098
|
+
if (prefix_elements.size() != 2) {
|
1099
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1100
|
+
"Prefix not in the required format of /service/");
|
1101
|
+
} else if (!prefix_elements[1].empty()) {
|
1102
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1103
|
+
"Prefix does not end with a /");
|
1104
|
+
} else if (prefix_elements[0].empty()) {
|
1105
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1106
|
+
"Prefix contains empty service name");
|
1107
|
+
}
|
1108
|
+
rds_route.service = std::string(prefix_elements[0]);
|
1109
|
+
}
|
1110
|
+
}
|
1111
|
+
} else if (envoy_api_v2_route_RouteMatch_has_path(match)) {
|
1112
|
+
upb_strview path = envoy_api_v2_route_RouteMatch_path(match);
|
1113
|
+
if (path.size == 0) {
|
1114
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1115
|
+
"Path if set cannot be empty");
|
1116
|
+
}
|
1117
|
+
if (path.data[0] != '/') {
|
1118
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1119
|
+
"Path does not start with a /");
|
1120
|
+
}
|
1121
|
+
std::vector<absl::string_view> path_elements = absl::StrSplit(
|
1122
|
+
absl::string_view(path.data, path.size).substr(1), '/');
|
1123
|
+
if (path_elements.size() != 2) {
|
1124
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1125
|
+
"Path not in the required format of /service/method");
|
1126
|
+
} else if (path_elements[0].empty()) {
|
1127
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1128
|
+
"Path contains empty service name");
|
1129
|
+
} else if (path_elements[1].empty()) {
|
1130
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1131
|
+
"Path contains empty method name");
|
1132
|
+
}
|
1133
|
+
rds_route.service = std::string(path_elements[0]);
|
1134
|
+
rds_route.method = std::string(path_elements[1]);
|
1135
|
+
} else {
|
1136
|
+
// Path specifier types will be supported, ignore but not reject until
|
1137
|
+
// they are implemented.
|
1138
|
+
continue;
|
1139
|
+
}
|
1140
|
+
grpc_error* error = RouteActionParse(route, &rds_route);
|
1141
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1142
|
+
rds_update->routes.emplace_back(std::move(rds_route));
|
1143
|
+
}
|
1144
|
+
if (rds_update->routes.empty()) {
|
1145
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No valid routes specified.");
|
1146
|
+
}
|
1147
|
+
return GRPC_ERROR_NONE;
|
1148
|
+
}
|
1149
|
+
|
1150
|
+
grpc_error* LdsResponseParse(XdsClient* client, TraceFlag* tracer,
|
1151
|
+
const envoy_api_v2_DiscoveryResponse* response,
|
1152
|
+
const std::string& expected_server_name,
|
1153
|
+
const bool xds_routing_enabled,
|
1154
|
+
absl::optional<XdsApi::LdsUpdate>* lds_update,
|
1155
|
+
upb_arena* arena) {
|
1156
|
+
// Get the resources from the response.
|
1157
|
+
size_t size;
|
1158
|
+
const google_protobuf_Any* const* resources =
|
1159
|
+
envoy_api_v2_DiscoveryResponse_resources(response, &size);
|
1160
|
+
for (size_t i = 0; i < size; ++i) {
|
1161
|
+
// Check the type_url of the resource.
|
1162
|
+
const upb_strview type_url = google_protobuf_Any_type_url(resources[i]);
|
1163
|
+
if (!upb_strview_eql(type_url, upb_strview_makez(XdsApi::kLdsTypeUrl))) {
|
1164
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not LDS.");
|
1165
|
+
}
|
1166
|
+
// Decode the listener.
|
1167
|
+
const upb_strview encoded_listener =
|
1168
|
+
google_protobuf_Any_value(resources[i]);
|
1169
|
+
const envoy_api_v2_Listener* listener = envoy_api_v2_Listener_parse(
|
1170
|
+
encoded_listener.data, encoded_listener.size, arena);
|
1171
|
+
if (listener == nullptr) {
|
1172
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode listener.");
|
1173
|
+
}
|
1174
|
+
// Check listener name. Ignore unexpected listeners.
|
1175
|
+
const upb_strview name = envoy_api_v2_Listener_name(listener);
|
1176
|
+
const upb_strview expected_name =
|
1177
|
+
upb_strview_makez(expected_server_name.c_str());
|
1178
|
+
if (!upb_strview_eql(name, expected_name)) continue;
|
1179
|
+
// Get api_listener and decode it to http_connection_manager.
|
1180
|
+
const envoy_config_listener_v2_ApiListener* api_listener =
|
1181
|
+
envoy_api_v2_Listener_api_listener(listener);
|
1182
|
+
if (api_listener == nullptr) {
|
1183
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1184
|
+
"Listener has no ApiListener.");
|
1185
|
+
}
|
1186
|
+
const upb_strview encoded_api_listener = google_protobuf_Any_value(
|
1187
|
+
envoy_config_listener_v2_ApiListener_api_listener(api_listener));
|
1188
|
+
const envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager*
|
1189
|
+
http_connection_manager =
|
1190
|
+
envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_parse(
|
1191
|
+
encoded_api_listener.data, encoded_api_listener.size, arena);
|
1192
|
+
// Found inlined route_config. Parse it to find the cluster_name.
|
1193
|
+
if (envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_has_route_config(
|
1194
|
+
http_connection_manager)) {
|
1195
|
+
const envoy_api_v2_RouteConfiguration* route_config =
|
1196
|
+
envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_route_config(
|
1197
|
+
http_connection_manager);
|
1198
|
+
XdsApi::RdsUpdate rds_update;
|
1199
|
+
grpc_error* error =
|
1200
|
+
RouteConfigParse(client, tracer, route_config, expected_server_name,
|
1201
|
+
xds_routing_enabled, &rds_update);
|
1202
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1203
|
+
lds_update->emplace();
|
1204
|
+
(*lds_update)->rds_update.emplace(std::move(rds_update));
|
1205
|
+
return GRPC_ERROR_NONE;
|
1206
|
+
}
|
1207
|
+
// Validate that RDS must be used to get the route_config dynamically.
|
1208
|
+
if (!envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_has_rds(
|
1209
|
+
http_connection_manager)) {
|
1210
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1211
|
+
"HttpConnectionManager neither has inlined route_config nor RDS.");
|
1212
|
+
}
|
1213
|
+
const envoy_config_filter_network_http_connection_manager_v2_Rds* rds =
|
1214
|
+
envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_rds(
|
1215
|
+
http_connection_manager);
|
1216
|
+
// Check that the ConfigSource specifies ADS.
|
1217
|
+
const envoy_api_v2_core_ConfigSource* config_source =
|
1218
|
+
envoy_config_filter_network_http_connection_manager_v2_Rds_config_source(
|
1219
|
+
rds);
|
1220
|
+
if (config_source == nullptr) {
|
1221
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1222
|
+
"HttpConnectionManager missing config_source for RDS.");
|
1223
|
+
}
|
1224
|
+
if (!envoy_api_v2_core_ConfigSource_has_ads(config_source)) {
|
1225
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1226
|
+
"HttpConnectionManager ConfigSource for RDS does not specify ADS.");
|
1227
|
+
}
|
1228
|
+
// Get the route_config_name.
|
1229
|
+
lds_update->emplace();
|
1230
|
+
(*lds_update)->route_config_name = UpbStringToStdString(
|
1231
|
+
envoy_config_filter_network_http_connection_manager_v2_Rds_route_config_name(
|
1232
|
+
rds));
|
1233
|
+
return GRPC_ERROR_NONE;
|
1234
|
+
}
|
1235
|
+
return GRPC_ERROR_NONE;
|
1236
|
+
}
|
1237
|
+
|
1238
|
+
grpc_error* RdsResponseParse(
|
1239
|
+
XdsClient* client, TraceFlag* tracer,
|
1240
|
+
const envoy_api_v2_DiscoveryResponse* response,
|
1241
|
+
const std::string& expected_server_name,
|
1242
|
+
const std::set<absl::string_view>& expected_route_configuration_names,
|
1243
|
+
const bool xds_routing_enabled,
|
1244
|
+
absl::optional<XdsApi::RdsUpdate>* rds_update, upb_arena* arena) {
|
1245
|
+
// Get the resources from the response.
|
1246
|
+
size_t size;
|
1247
|
+
const google_protobuf_Any* const* resources =
|
1248
|
+
envoy_api_v2_DiscoveryResponse_resources(response, &size);
|
1249
|
+
for (size_t i = 0; i < size; ++i) {
|
1250
|
+
// Check the type_url of the resource.
|
1251
|
+
const upb_strview type_url = google_protobuf_Any_type_url(resources[i]);
|
1252
|
+
if (!upb_strview_eql(type_url, upb_strview_makez(XdsApi::kRdsTypeUrl))) {
|
1253
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not RDS.");
|
1254
|
+
}
|
1255
|
+
// Decode the route_config.
|
1256
|
+
const upb_strview encoded_route_config =
|
1257
|
+
google_protobuf_Any_value(resources[i]);
|
1258
|
+
const envoy_api_v2_RouteConfiguration* route_config =
|
1259
|
+
envoy_api_v2_RouteConfiguration_parse(encoded_route_config.data,
|
1260
|
+
encoded_route_config.size, arena);
|
1261
|
+
if (route_config == nullptr) {
|
1262
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode route_config.");
|
1263
|
+
}
|
1264
|
+
// Check route_config_name. Ignore unexpected route_config.
|
1265
|
+
const upb_strview route_config_name =
|
1266
|
+
envoy_api_v2_RouteConfiguration_name(route_config);
|
1267
|
+
absl::string_view route_config_name_strview(route_config_name.data,
|
1268
|
+
route_config_name.size);
|
1269
|
+
if (expected_route_configuration_names.find(route_config_name_strview) ==
|
1270
|
+
expected_route_configuration_names.end()) {
|
1271
|
+
continue;
|
1272
|
+
}
|
1273
|
+
// Parse the route_config.
|
1274
|
+
XdsApi::RdsUpdate local_rds_update;
|
1275
|
+
grpc_error* error =
|
1276
|
+
RouteConfigParse(client, tracer, route_config, expected_server_name,
|
1277
|
+
xds_routing_enabled, &local_rds_update);
|
1278
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1279
|
+
rds_update->emplace(std::move(local_rds_update));
|
1280
|
+
return GRPC_ERROR_NONE;
|
1281
|
+
}
|
1282
|
+
return GRPC_ERROR_NONE;
|
1283
|
+
}
|
1284
|
+
|
1285
|
+
grpc_error* CdsResponseParse(
|
1286
|
+
XdsClient* client, TraceFlag* tracer,
|
1287
|
+
const envoy_api_v2_DiscoveryResponse* response,
|
1288
|
+
const std::set<absl::string_view>& expected_cluster_names,
|
1289
|
+
XdsApi::CdsUpdateMap* cds_update_map, upb_arena* arena) {
|
1290
|
+
// Get the resources from the response.
|
1291
|
+
size_t size;
|
1292
|
+
const google_protobuf_Any* const* resources =
|
1293
|
+
envoy_api_v2_DiscoveryResponse_resources(response, &size);
|
1294
|
+
// Parse all the resources in the CDS response.
|
1295
|
+
for (size_t i = 0; i < size; ++i) {
|
1296
|
+
XdsApi::CdsUpdate cds_update;
|
1297
|
+
// Check the type_url of the resource.
|
1298
|
+
const upb_strview type_url = google_protobuf_Any_type_url(resources[i]);
|
1299
|
+
if (!upb_strview_eql(type_url, upb_strview_makez(XdsApi::kCdsTypeUrl))) {
|
1300
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not CDS.");
|
1301
|
+
}
|
1302
|
+
// Decode the cluster.
|
1303
|
+
const upb_strview encoded_cluster = google_protobuf_Any_value(resources[i]);
|
1304
|
+
const envoy_api_v2_Cluster* cluster = envoy_api_v2_Cluster_parse(
|
1305
|
+
encoded_cluster.data, encoded_cluster.size, arena);
|
1306
|
+
if (cluster == nullptr) {
|
1307
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode cluster.");
|
1308
|
+
}
|
1309
|
+
MaybeLogCluster(client, tracer, cluster);
|
1310
|
+
// Ignore unexpected cluster names.
|
1311
|
+
upb_strview cluster_name = envoy_api_v2_Cluster_name(cluster);
|
1312
|
+
absl::string_view cluster_name_strview(cluster_name.data,
|
1313
|
+
cluster_name.size);
|
1314
|
+
if (expected_cluster_names.find(cluster_name_strview) ==
|
1315
|
+
expected_cluster_names.end()) {
|
1316
|
+
continue;
|
1317
|
+
}
|
1318
|
+
// Check the cluster_discovery_type.
|
1319
|
+
if (!envoy_api_v2_Cluster_has_type(cluster)) {
|
1320
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType not found.");
|
1321
|
+
}
|
1322
|
+
if (envoy_api_v2_Cluster_type(cluster) != envoy_api_v2_Cluster_EDS) {
|
1323
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType is not EDS.");
|
1324
|
+
}
|
1325
|
+
// Check the EDS config source.
|
1326
|
+
const envoy_api_v2_Cluster_EdsClusterConfig* eds_cluster_config =
|
1327
|
+
envoy_api_v2_Cluster_eds_cluster_config(cluster);
|
1328
|
+
const envoy_api_v2_core_ConfigSource* eds_config =
|
1329
|
+
envoy_api_v2_Cluster_EdsClusterConfig_eds_config(eds_cluster_config);
|
1330
|
+
if (!envoy_api_v2_core_ConfigSource_has_ads(eds_config)) {
|
1331
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1332
|
+
"EDS ConfigSource is not ADS.");
|
1333
|
+
}
|
1334
|
+
// Record EDS service_name (if any).
|
1335
|
+
upb_strview service_name =
|
1336
|
+
envoy_api_v2_Cluster_EdsClusterConfig_service_name(eds_cluster_config);
|
1337
|
+
if (service_name.size != 0) {
|
1338
|
+
cds_update.eds_service_name = UpbStringToStdString(service_name);
|
1339
|
+
}
|
1340
|
+
// Check the LB policy.
|
1341
|
+
if (envoy_api_v2_Cluster_lb_policy(cluster) !=
|
1342
|
+
envoy_api_v2_Cluster_ROUND_ROBIN) {
|
1343
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1344
|
+
"LB policy is not ROUND_ROBIN.");
|
1345
|
+
}
|
1346
|
+
// Record LRS server name (if any).
|
1347
|
+
const envoy_api_v2_core_ConfigSource* lrs_server =
|
1348
|
+
envoy_api_v2_Cluster_lrs_server(cluster);
|
1349
|
+
if (lrs_server != nullptr) {
|
1350
|
+
if (!envoy_api_v2_core_ConfigSource_has_self(lrs_server)) {
|
1351
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1352
|
+
"LRS ConfigSource is not self.");
|
1353
|
+
}
|
1354
|
+
cds_update.lrs_load_reporting_server_name.emplace("");
|
1355
|
+
}
|
1356
|
+
cds_update_map->emplace(UpbStringToStdString(cluster_name),
|
1357
|
+
std::move(cds_update));
|
1358
|
+
}
|
1359
|
+
return GRPC_ERROR_NONE;
|
1360
|
+
}
|
1361
|
+
|
225
1362
|
grpc_error* ServerAddressParseAndAppend(
|
226
1363
|
const envoy_api_v2_endpoint_LbEndpoint* lb_endpoint,
|
227
1364
|
ServerAddressList* list) {
|
@@ -257,20 +1394,9 @@ grpc_error* ServerAddressParseAndAppend(
|
|
257
1394
|
return GRPC_ERROR_NONE;
|
258
1395
|
}
|
259
1396
|
|
260
|
-
namespace {
|
261
|
-
|
262
|
-
grpc_core::UniquePtr<char> StringCopy(const upb_strview& strview) {
|
263
|
-
char* str = static_cast<char*>(gpr_malloc(strview.size + 1));
|
264
|
-
memcpy(str, strview.data, strview.size);
|
265
|
-
str[strview.size] = '\0';
|
266
|
-
return grpc_core::UniquePtr<char>(str);
|
267
|
-
}
|
268
|
-
|
269
|
-
} // namespace
|
270
|
-
|
271
1397
|
grpc_error* LocalityParse(
|
272
1398
|
const envoy_api_v2_endpoint_LocalityLbEndpoints* locality_lb_endpoints,
|
273
|
-
|
1399
|
+
XdsApi::PriorityListUpdate::LocalityMap::Locality* output_locality) {
|
274
1400
|
// Parse LB weight.
|
275
1401
|
const google_protobuf_UInt32Value* lb_weight =
|
276
1402
|
envoy_api_v2_endpoint_LocalityLbEndpoints_load_balancing_weight(
|
@@ -284,10 +1410,12 @@ grpc_error* LocalityParse(
|
|
284
1410
|
// Parse locality name.
|
285
1411
|
const envoy_api_v2_core_Locality* locality =
|
286
1412
|
envoy_api_v2_endpoint_LocalityLbEndpoints_locality(locality_lb_endpoints);
|
1413
|
+
upb_strview region = envoy_api_v2_core_Locality_region(locality);
|
1414
|
+
upb_strview zone = envoy_api_v2_core_Locality_region(locality);
|
1415
|
+
upb_strview sub_zone = envoy_api_v2_core_Locality_sub_zone(locality);
|
287
1416
|
output_locality->name = MakeRefCounted<XdsLocalityName>(
|
288
|
-
|
289
|
-
|
290
|
-
StringCopy(envoy_api_v2_core_Locality_sub_zone(locality)));
|
1417
|
+
UpbStringToStdString(region), UpbStringToStdString(zone),
|
1418
|
+
UpbStringToStdString(sub_zone));
|
291
1419
|
// Parse the addresses.
|
292
1420
|
size_t size;
|
293
1421
|
const envoy_api_v2_endpoint_LbEndpoint* const* lb_endpoints =
|
@@ -306,7 +1434,7 @@ grpc_error* LocalityParse(
|
|
306
1434
|
|
307
1435
|
grpc_error* DropParseAndAppend(
|
308
1436
|
const envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload* drop_overload,
|
309
|
-
|
1437
|
+
XdsApi::DropConfig* drop_config) {
|
310
1438
|
// Get the category.
|
311
1439
|
upb_strview category =
|
312
1440
|
envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload_category(
|
@@ -337,84 +1465,263 @@ grpc_error* DropParseAndAppend(
|
|
337
1465
|
}
|
338
1466
|
// Cap numerator to 1000000.
|
339
1467
|
numerator = GPR_MIN(numerator, 1000000);
|
340
|
-
|
341
|
-
|
1468
|
+
drop_config->AddCategory(UpbStringToStdString(category), numerator);
|
1469
|
+
return GRPC_ERROR_NONE;
|
1470
|
+
}
|
1471
|
+
|
1472
|
+
grpc_error* EdsResponseParse(
|
1473
|
+
XdsClient* client, TraceFlag* tracer,
|
1474
|
+
const envoy_api_v2_DiscoveryResponse* response,
|
1475
|
+
const std::set<absl::string_view>& expected_eds_service_names,
|
1476
|
+
XdsApi::EdsUpdateMap* eds_update_map, upb_arena* arena) {
|
1477
|
+
// Get the resources from the response.
|
1478
|
+
size_t size;
|
1479
|
+
const google_protobuf_Any* const* resources =
|
1480
|
+
envoy_api_v2_DiscoveryResponse_resources(response, &size);
|
1481
|
+
for (size_t i = 0; i < size; ++i) {
|
1482
|
+
XdsApi::EdsUpdate eds_update;
|
1483
|
+
// Check the type_url of the resource.
|
1484
|
+
upb_strview type_url = google_protobuf_Any_type_url(resources[i]);
|
1485
|
+
if (!upb_strview_eql(type_url, upb_strview_makez(XdsApi::kEdsTypeUrl))) {
|
1486
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not EDS.");
|
1487
|
+
}
|
1488
|
+
// Get the cluster_load_assignment.
|
1489
|
+
upb_strview encoded_cluster_load_assignment =
|
1490
|
+
google_protobuf_Any_value(resources[i]);
|
1491
|
+
envoy_api_v2_ClusterLoadAssignment* cluster_load_assignment =
|
1492
|
+
envoy_api_v2_ClusterLoadAssignment_parse(
|
1493
|
+
encoded_cluster_load_assignment.data,
|
1494
|
+
encoded_cluster_load_assignment.size, arena);
|
1495
|
+
if (cluster_load_assignment == nullptr) {
|
1496
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1497
|
+
"Can't parse cluster_load_assignment.");
|
1498
|
+
}
|
1499
|
+
MaybeLogClusterLoadAssignment(client, tracer, cluster_load_assignment);
|
1500
|
+
// Check the cluster name (which actually means eds_service_name). Ignore
|
1501
|
+
// unexpected names.
|
1502
|
+
upb_strview cluster_name = envoy_api_v2_ClusterLoadAssignment_cluster_name(
|
1503
|
+
cluster_load_assignment);
|
1504
|
+
absl::string_view cluster_name_strview(cluster_name.data,
|
1505
|
+
cluster_name.size);
|
1506
|
+
if (expected_eds_service_names.find(cluster_name_strview) ==
|
1507
|
+
expected_eds_service_names.end()) {
|
1508
|
+
continue;
|
1509
|
+
}
|
1510
|
+
// Get the endpoints.
|
1511
|
+
size_t locality_size;
|
1512
|
+
const envoy_api_v2_endpoint_LocalityLbEndpoints* const* endpoints =
|
1513
|
+
envoy_api_v2_ClusterLoadAssignment_endpoints(cluster_load_assignment,
|
1514
|
+
&locality_size);
|
1515
|
+
for (size_t j = 0; j < locality_size; ++j) {
|
1516
|
+
XdsApi::PriorityListUpdate::LocalityMap::Locality locality;
|
1517
|
+
grpc_error* error = LocalityParse(endpoints[j], &locality);
|
1518
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1519
|
+
// Filter out locality with weight 0.
|
1520
|
+
if (locality.lb_weight == 0) continue;
|
1521
|
+
eds_update.priority_list_update.Add(locality);
|
1522
|
+
}
|
1523
|
+
for (uint32_t priority = 0;
|
1524
|
+
priority < eds_update.priority_list_update.size(); ++priority) {
|
1525
|
+
auto* locality_map = eds_update.priority_list_update.Find(priority);
|
1526
|
+
if (locality_map == nullptr || locality_map->size() == 0) {
|
1527
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1528
|
+
"EDS update includes sparse priority list");
|
1529
|
+
}
|
1530
|
+
}
|
1531
|
+
// Get the drop config.
|
1532
|
+
eds_update.drop_config = MakeRefCounted<XdsApi::DropConfig>();
|
1533
|
+
const envoy_api_v2_ClusterLoadAssignment_Policy* policy =
|
1534
|
+
envoy_api_v2_ClusterLoadAssignment_policy(cluster_load_assignment);
|
1535
|
+
if (policy != nullptr) {
|
1536
|
+
size_t drop_size;
|
1537
|
+
const envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload* const*
|
1538
|
+
drop_overload =
|
1539
|
+
envoy_api_v2_ClusterLoadAssignment_Policy_drop_overloads(
|
1540
|
+
policy, &drop_size);
|
1541
|
+
for (size_t j = 0; j < drop_size; ++j) {
|
1542
|
+
grpc_error* error =
|
1543
|
+
DropParseAndAppend(drop_overload[j], eds_update.drop_config.get());
|
1544
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1545
|
+
}
|
1546
|
+
}
|
1547
|
+
eds_update_map->emplace(UpbStringToStdString(cluster_name),
|
1548
|
+
std::move(eds_update));
|
1549
|
+
}
|
342
1550
|
return GRPC_ERROR_NONE;
|
343
1551
|
}
|
344
1552
|
|
345
1553
|
} // namespace
|
346
1554
|
|
347
|
-
grpc_error*
|
348
|
-
|
1555
|
+
grpc_error* XdsApi::ParseAdsResponse(
|
1556
|
+
const grpc_slice& encoded_response, const std::string& expected_server_name,
|
1557
|
+
const std::set<absl::string_view>& expected_route_configuration_names,
|
1558
|
+
const std::set<absl::string_view>& expected_cluster_names,
|
1559
|
+
const std::set<absl::string_view>& expected_eds_service_names,
|
1560
|
+
absl::optional<LdsUpdate>* lds_update,
|
1561
|
+
absl::optional<RdsUpdate>* rds_update, CdsUpdateMap* cds_update_map,
|
1562
|
+
EdsUpdateMap* eds_update_map, std::string* version, std::string* nonce,
|
1563
|
+
std::string* type_url) {
|
349
1564
|
upb::Arena arena;
|
350
1565
|
// Decode the response.
|
351
1566
|
const envoy_api_v2_DiscoveryResponse* response =
|
352
1567
|
envoy_api_v2_DiscoveryResponse_parse(
|
353
1568
|
reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(encoded_response)),
|
354
1569
|
GRPC_SLICE_LENGTH(encoded_response), arena.ptr());
|
355
|
-
//
|
1570
|
+
// If decoding fails, output an empty type_url and return.
|
356
1571
|
if (response == nullptr) {
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
upb_strview type_url = envoy_api_v2_DiscoveryResponse_type_url(response);
|
361
|
-
upb_strview expected_type_url = upb_strview_makez(kEdsTypeUrl);
|
362
|
-
if (!upb_strview_eql(type_url, expected_type_url)) {
|
363
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not EDS.");
|
1572
|
+
*type_url = "";
|
1573
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1574
|
+
"Can't decode the whole response.");
|
364
1575
|
}
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
1576
|
+
MaybeLogDiscoveryResponse(client_, tracer_, response);
|
1577
|
+
// Record the type_url, the version_info, and the nonce of the response.
|
1578
|
+
upb_strview type_url_strview =
|
1579
|
+
envoy_api_v2_DiscoveryResponse_type_url(response);
|
1580
|
+
*type_url = UpbStringToStdString(type_url_strview);
|
1581
|
+
upb_strview version_info =
|
1582
|
+
envoy_api_v2_DiscoveryResponse_version_info(response);
|
1583
|
+
*version = UpbStringToStdString(version_info);
|
1584
|
+
upb_strview nonce_strview = envoy_api_v2_DiscoveryResponse_nonce(response);
|
1585
|
+
*nonce = UpbStringToStdString(nonce_strview);
|
1586
|
+
// Parse the response according to the resource type.
|
1587
|
+
if (*type_url == kLdsTypeUrl) {
|
1588
|
+
return LdsResponseParse(client_, tracer_, response, expected_server_name,
|
1589
|
+
xds_routing_enabled_, lds_update, arena.ptr());
|
1590
|
+
} else if (*type_url == kRdsTypeUrl) {
|
1591
|
+
return RdsResponseParse(client_, tracer_, response, expected_server_name,
|
1592
|
+
expected_route_configuration_names,
|
1593
|
+
xds_routing_enabled_, rds_update, arena.ptr());
|
1594
|
+
} else if (*type_url == kCdsTypeUrl) {
|
1595
|
+
return CdsResponseParse(client_, tracer_, response, expected_cluster_names,
|
1596
|
+
cds_update_map, arena.ptr());
|
1597
|
+
} else if (*type_url == kEdsTypeUrl) {
|
1598
|
+
return EdsResponseParse(client_, tracer_, response,
|
1599
|
+
expected_eds_service_names, eds_update_map,
|
1600
|
+
arena.ptr());
|
1601
|
+
} else {
|
370
1602
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
371
|
-
"
|
372
|
-
}
|
373
|
-
// Check the type_url of the resource.
|
374
|
-
type_url = google_protobuf_Any_type_url(resources[0]);
|
375
|
-
if (!upb_strview_eql(type_url, expected_type_url)) {
|
376
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not EDS.");
|
377
|
-
}
|
378
|
-
// Get the cluster_load_assignment.
|
379
|
-
upb_strview encoded_cluster_load_assignment =
|
380
|
-
google_protobuf_Any_value(resources[0]);
|
381
|
-
envoy_api_v2_ClusterLoadAssignment* cluster_load_assignment =
|
382
|
-
envoy_api_v2_ClusterLoadAssignment_parse(
|
383
|
-
encoded_cluster_load_assignment.data,
|
384
|
-
encoded_cluster_load_assignment.size, arena.ptr());
|
385
|
-
// Get the endpoints.
|
386
|
-
const envoy_api_v2_endpoint_LocalityLbEndpoints* const* endpoints =
|
387
|
-
envoy_api_v2_ClusterLoadAssignment_endpoints(cluster_load_assignment,
|
388
|
-
&size);
|
389
|
-
for (size_t i = 0; i < size; ++i) {
|
390
|
-
XdsPriorityListUpdate::LocalityMap::Locality locality;
|
391
|
-
grpc_error* error = LocalityParse(endpoints[i], &locality);
|
392
|
-
if (error != GRPC_ERROR_NONE) return error;
|
393
|
-
// Filter out locality with weight 0.
|
394
|
-
if (locality.lb_weight == 0) continue;
|
395
|
-
update->priority_list_update.Add(locality);
|
396
|
-
}
|
397
|
-
// Get the drop config.
|
398
|
-
update->drop_config = MakeRefCounted<XdsDropConfig>();
|
399
|
-
const envoy_api_v2_ClusterLoadAssignment_Policy* policy =
|
400
|
-
envoy_api_v2_ClusterLoadAssignment_policy(cluster_load_assignment);
|
401
|
-
if (policy != nullptr) {
|
402
|
-
const envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload* const*
|
403
|
-
drop_overload =
|
404
|
-
envoy_api_v2_ClusterLoadAssignment_Policy_drop_overloads(policy,
|
405
|
-
&size);
|
406
|
-
for (size_t i = 0; i < size; ++i) {
|
407
|
-
grpc_error* error = DropParseAndAppend(
|
408
|
-
drop_overload[i], update->drop_config.get(), &update->drop_all);
|
409
|
-
if (error != GRPC_ERROR_NONE) return error;
|
410
|
-
}
|
1603
|
+
"Unsupported ADS resource type.");
|
411
1604
|
}
|
412
|
-
return GRPC_ERROR_NONE;
|
413
1605
|
}
|
414
1606
|
|
415
1607
|
namespace {
|
416
1608
|
|
417
|
-
|
1609
|
+
void MaybeLogLrsRequest(
|
1610
|
+
XdsClient* client, TraceFlag* tracer,
|
1611
|
+
const envoy_service_load_stats_v2_LoadStatsRequest* request) {
|
1612
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
1613
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1614
|
+
// TODO(roth): When we can upgrade upb, use upb textformat code to dump
|
1615
|
+
// the raw proto instead of doing this manually.
|
1616
|
+
std::vector<std::string> fields;
|
1617
|
+
// node
|
1618
|
+
const auto* node =
|
1619
|
+
envoy_service_load_stats_v2_LoadStatsRequest_node(request);
|
1620
|
+
if (node != nullptr) {
|
1621
|
+
AddNodeLogFields(node, &fields);
|
1622
|
+
}
|
1623
|
+
// cluster_stats
|
1624
|
+
size_t num_cluster_stats;
|
1625
|
+
const struct envoy_api_v2_endpoint_ClusterStats* const* cluster_stats =
|
1626
|
+
envoy_service_load_stats_v2_LoadStatsRequest_cluster_stats(
|
1627
|
+
request, &num_cluster_stats);
|
1628
|
+
for (size_t i = 0; i < num_cluster_stats; ++i) {
|
1629
|
+
const auto* cluster_stat = cluster_stats[i];
|
1630
|
+
fields.emplace_back("cluster_stats {");
|
1631
|
+
// cluster_name
|
1632
|
+
AddStringField(
|
1633
|
+
" cluster_name",
|
1634
|
+
envoy_api_v2_endpoint_ClusterStats_cluster_name(cluster_stat),
|
1635
|
+
&fields);
|
1636
|
+
// cluster_service_name
|
1637
|
+
AddStringField(
|
1638
|
+
" cluster_service_name",
|
1639
|
+
envoy_api_v2_endpoint_ClusterStats_cluster_service_name(cluster_stat),
|
1640
|
+
&fields);
|
1641
|
+
// upstream_locality_stats
|
1642
|
+
size_t num_stats;
|
1643
|
+
const envoy_api_v2_endpoint_UpstreamLocalityStats* const* stats =
|
1644
|
+
envoy_api_v2_endpoint_ClusterStats_upstream_locality_stats(
|
1645
|
+
cluster_stat, &num_stats);
|
1646
|
+
for (size_t j = 0; j < num_stats; ++j) {
|
1647
|
+
const auto* stat = stats[j];
|
1648
|
+
fields.emplace_back(" upstream_locality_stats {");
|
1649
|
+
// locality
|
1650
|
+
const auto* locality =
|
1651
|
+
envoy_api_v2_endpoint_UpstreamLocalityStats_locality(stat);
|
1652
|
+
if (locality != nullptr) {
|
1653
|
+
fields.emplace_back(" locality {");
|
1654
|
+
AddLocalityField(3, locality, &fields);
|
1655
|
+
fields.emplace_back(" }");
|
1656
|
+
}
|
1657
|
+
// total_successful_requests
|
1658
|
+
fields.emplace_back(absl::StrCat(
|
1659
|
+
" total_successful_requests: ",
|
1660
|
+
envoy_api_v2_endpoint_UpstreamLocalityStats_total_successful_requests(
|
1661
|
+
stat)));
|
1662
|
+
// total_requests_in_progress
|
1663
|
+
fields.emplace_back(absl::StrCat(
|
1664
|
+
" total_requests_in_progress: ",
|
1665
|
+
envoy_api_v2_endpoint_UpstreamLocalityStats_total_requests_in_progress(
|
1666
|
+
stat)));
|
1667
|
+
// total_error_requests
|
1668
|
+
fields.emplace_back(absl::StrCat(
|
1669
|
+
" total_error_requests: ",
|
1670
|
+
envoy_api_v2_endpoint_UpstreamLocalityStats_total_error_requests(
|
1671
|
+
stat)));
|
1672
|
+
// total_issued_requests
|
1673
|
+
fields.emplace_back(absl::StrCat(
|
1674
|
+
" total_issued_requests: ",
|
1675
|
+
envoy_api_v2_endpoint_UpstreamLocalityStats_total_issued_requests(
|
1676
|
+
stat)));
|
1677
|
+
fields.emplace_back(" }");
|
1678
|
+
}
|
1679
|
+
// total_dropped_requests
|
1680
|
+
fields.emplace_back(absl::StrCat(
|
1681
|
+
" total_dropped_requests: ",
|
1682
|
+
envoy_api_v2_endpoint_ClusterStats_total_dropped_requests(
|
1683
|
+
cluster_stat)));
|
1684
|
+
// dropped_requests
|
1685
|
+
size_t num_drops;
|
1686
|
+
const envoy_api_v2_endpoint_ClusterStats_DroppedRequests* const* drops =
|
1687
|
+
envoy_api_v2_endpoint_ClusterStats_dropped_requests(cluster_stat,
|
1688
|
+
&num_drops);
|
1689
|
+
for (size_t j = 0; j < num_drops; ++j) {
|
1690
|
+
const auto* drop = drops[j];
|
1691
|
+
fields.emplace_back(" dropped_requests {");
|
1692
|
+
// category
|
1693
|
+
AddStringField(
|
1694
|
+
" category",
|
1695
|
+
envoy_api_v2_endpoint_ClusterStats_DroppedRequests_category(drop),
|
1696
|
+
&fields);
|
1697
|
+
// dropped_count
|
1698
|
+
fields.emplace_back(absl::StrCat(
|
1699
|
+
" dropped_count: ",
|
1700
|
+
envoy_api_v2_endpoint_ClusterStats_DroppedRequests_dropped_count(
|
1701
|
+
drop)));
|
1702
|
+
fields.emplace_back(" }");
|
1703
|
+
}
|
1704
|
+
// load_report_interval
|
1705
|
+
const auto* load_report_interval =
|
1706
|
+
envoy_api_v2_endpoint_ClusterStats_load_report_interval(cluster_stat);
|
1707
|
+
if (load_report_interval != nullptr) {
|
1708
|
+
fields.emplace_back(" load_report_interval {");
|
1709
|
+
fields.emplace_back(absl::StrCat(
|
1710
|
+
" seconds: ",
|
1711
|
+
google_protobuf_Duration_seconds(load_report_interval)));
|
1712
|
+
fields.emplace_back(
|
1713
|
+
absl::StrCat(" nanos: ",
|
1714
|
+
google_protobuf_Duration_nanos(load_report_interval)));
|
1715
|
+
fields.emplace_back(" }");
|
1716
|
+
}
|
1717
|
+
fields.emplace_back("}");
|
1718
|
+
}
|
1719
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] constructed LRS request: %s", client,
|
1720
|
+
absl::StrJoin(fields, "\n").c_str());
|
1721
|
+
}
|
1722
|
+
}
|
1723
|
+
|
1724
|
+
grpc_slice SerializeLrsRequest(
|
418
1725
|
const envoy_service_load_stats_v2_LoadStatsRequest* request,
|
419
1726
|
upb_arena* arena) {
|
420
1727
|
size_t output_length;
|
@@ -425,9 +1732,7 @@ grpc_slice LrsRequestEncode(
|
|
425
1732
|
|
426
1733
|
} // namespace
|
427
1734
|
|
428
|
-
grpc_slice
|
429
|
-
const XdsBootstrap::Node* node,
|
430
|
-
const char* build_version) {
|
1735
|
+
grpc_slice XdsApi::CreateLrsInitialRequest(const std::string& server_name) {
|
431
1736
|
upb::Arena arena;
|
432
1737
|
// Create a request.
|
433
1738
|
envoy_service_load_stats_v2_LoadStatsRequest* request =
|
@@ -436,33 +1741,38 @@ grpc_slice XdsLrsRequestCreateAndEncode(const char* server_name,
|
|
436
1741
|
envoy_api_v2_core_Node* node_msg =
|
437
1742
|
envoy_service_load_stats_v2_LoadStatsRequest_mutable_node(request,
|
438
1743
|
arena.ptr());
|
439
|
-
PopulateNode(arena.ptr(),
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
envoy_api_v2_endpoint_ClusterStats_set_cluster_name(
|
447
|
-
cluster_stats, upb_strview_makez(server_name));
|
448
|
-
return LrsRequestEncode(request, arena.ptr());
|
1744
|
+
PopulateNode(arena.ptr(), node_, build_version_, user_agent_name_,
|
1745
|
+
server_name, node_msg);
|
1746
|
+
envoy_api_v2_core_Node_add_client_features(
|
1747
|
+
node_msg, upb_strview_makez("envoy.lrs.supports_send_all_clusters"),
|
1748
|
+
arena.ptr());
|
1749
|
+
MaybeLogLrsRequest(client_, tracer_, request);
|
1750
|
+
return SerializeLrsRequest(request, arena.ptr());
|
449
1751
|
}
|
450
1752
|
|
451
1753
|
namespace {
|
452
1754
|
|
453
|
-
void LocalityStatsPopulate(
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
// Set sub_zone.
|
1755
|
+
void LocalityStatsPopulate(envoy_api_v2_endpoint_UpstreamLocalityStats* output,
|
1756
|
+
const XdsLocalityName& locality_name,
|
1757
|
+
const XdsClusterLocalityStats::Snapshot& snapshot,
|
1758
|
+
upb_arena* arena) {
|
1759
|
+
// Set locality.
|
459
1760
|
envoy_api_v2_core_Locality* locality =
|
460
1761
|
envoy_api_v2_endpoint_UpstreamLocalityStats_mutable_locality(output,
|
461
1762
|
arena);
|
462
|
-
|
463
|
-
|
1763
|
+
if (!locality_name.region().empty()) {
|
1764
|
+
envoy_api_v2_core_Locality_set_region(
|
1765
|
+
locality, upb_strview_makez(locality_name.region().c_str()));
|
1766
|
+
}
|
1767
|
+
if (!locality_name.zone().empty()) {
|
1768
|
+
envoy_api_v2_core_Locality_set_zone(
|
1769
|
+
locality, upb_strview_makez(locality_name.zone().c_str()));
|
1770
|
+
}
|
1771
|
+
if (!locality_name.sub_zone().empty()) {
|
1772
|
+
envoy_api_v2_core_Locality_set_sub_zone(
|
1773
|
+
locality, upb_strview_makez(locality_name.sub_zone().c_str()));
|
1774
|
+
}
|
464
1775
|
// Set total counts.
|
465
|
-
XdsClientStats::LocalityStats::Snapshot& snapshot = input.second;
|
466
1776
|
envoy_api_v2_endpoint_UpstreamLocalityStats_set_total_successful_requests(
|
467
1777
|
output, snapshot.total_successful_requests);
|
468
1778
|
envoy_api_v2_endpoint_UpstreamLocalityStats_set_total_requests_in_progress(
|
@@ -471,16 +1781,15 @@ void LocalityStatsPopulate(
|
|
471
1781
|
output, snapshot.total_error_requests);
|
472
1782
|
envoy_api_v2_endpoint_UpstreamLocalityStats_set_total_issued_requests(
|
473
1783
|
output, snapshot.total_issued_requests);
|
474
|
-
// Add
|
475
|
-
for (auto& p : snapshot.
|
476
|
-
const
|
477
|
-
const
|
478
|
-
p.second;
|
1784
|
+
// Add backend metrics.
|
1785
|
+
for (const auto& p : snapshot.backend_metrics) {
|
1786
|
+
const std::string& metric_name = p.first;
|
1787
|
+
const XdsClusterLocalityStats::BackendMetric& metric_value = p.second;
|
479
1788
|
envoy_api_v2_endpoint_EndpointLoadMetricStats* load_metric =
|
480
1789
|
envoy_api_v2_endpoint_UpstreamLocalityStats_add_load_metric_stats(
|
481
1790
|
output, arena);
|
482
1791
|
envoy_api_v2_endpoint_EndpointLoadMetricStats_set_metric_name(
|
483
|
-
load_metric,
|
1792
|
+
load_metric, upb_strview_make(metric_name.data(), metric_name.size()));
|
484
1793
|
envoy_api_v2_endpoint_EndpointLoadMetricStats_set_num_requests_finished_with_metric(
|
485
1794
|
load_metric, metric_value.num_requests_finished_with_metric);
|
486
1795
|
envoy_api_v2_endpoint_EndpointLoadMetricStats_set_total_metric_value(
|
@@ -490,62 +1799,74 @@ void LocalityStatsPopulate(
|
|
490
1799
|
|
491
1800
|
} // namespace
|
492
1801
|
|
493
|
-
grpc_slice
|
494
|
-
|
1802
|
+
grpc_slice XdsApi::CreateLrsRequest(
|
1803
|
+
ClusterLoadReportMap cluster_load_report_map) {
|
495
1804
|
upb::Arena arena;
|
496
|
-
XdsClientStats::Snapshot snapshot = client_stats->GetSnapshotAndReset();
|
497
|
-
// Prune unused locality stats.
|
498
|
-
client_stats->PruneLocalityStats();
|
499
|
-
// When all the counts are zero, return empty slice.
|
500
|
-
if (snapshot.IsAllZero()) return grpc_empty_slice();
|
501
1805
|
// Create a request.
|
502
1806
|
envoy_service_load_stats_v2_LoadStatsRequest* request =
|
503
1807
|
envoy_service_load_stats_v2_LoadStatsRequest_new(arena.ptr());
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
1808
|
+
for (auto& p : cluster_load_report_map) {
|
1809
|
+
const std::string& cluster_name = p.first.first;
|
1810
|
+
const std::string& eds_service_name = p.first.second;
|
1811
|
+
const ClusterLoadReport& load_report = p.second;
|
1812
|
+
// Add cluster stats.
|
1813
|
+
envoy_api_v2_endpoint_ClusterStats* cluster_stats =
|
1814
|
+
envoy_service_load_stats_v2_LoadStatsRequest_add_cluster_stats(
|
1815
|
+
request, arena.ptr());
|
1816
|
+
// Set the cluster name.
|
1817
|
+
envoy_api_v2_endpoint_ClusterStats_set_cluster_name(
|
1818
|
+
cluster_stats,
|
1819
|
+
upb_strview_make(cluster_name.data(), cluster_name.size()));
|
1820
|
+
// Set EDS service name, if non-empty.
|
1821
|
+
if (!eds_service_name.empty()) {
|
1822
|
+
envoy_api_v2_endpoint_ClusterStats_set_cluster_service_name(
|
1823
|
+
cluster_stats,
|
1824
|
+
upb_strview_make(eds_service_name.data(), eds_service_name.size()));
|
1825
|
+
}
|
1826
|
+
// Add locality stats.
|
1827
|
+
for (const auto& p : load_report.locality_stats) {
|
1828
|
+
const XdsLocalityName& locality_name = *p.first;
|
1829
|
+
const auto& snapshot = p.second;
|
1830
|
+
envoy_api_v2_endpoint_UpstreamLocalityStats* locality_stats =
|
1831
|
+
envoy_api_v2_endpoint_ClusterStats_add_upstream_locality_stats(
|
1832
|
+
cluster_stats, arena.ptr());
|
1833
|
+
LocalityStatsPopulate(locality_stats, locality_name, snapshot,
|
1834
|
+
arena.ptr());
|
1835
|
+
}
|
1836
|
+
// Add dropped requests.
|
1837
|
+
uint64_t total_dropped_requests = 0;
|
1838
|
+
for (const auto& p : load_report.dropped_requests) {
|
1839
|
+
const char* category = p.first.c_str();
|
1840
|
+
const uint64_t count = p.second;
|
1841
|
+
envoy_api_v2_endpoint_ClusterStats_DroppedRequests* dropped_requests =
|
1842
|
+
envoy_api_v2_endpoint_ClusterStats_add_dropped_requests(cluster_stats,
|
1843
|
+
arena.ptr());
|
1844
|
+
envoy_api_v2_endpoint_ClusterStats_DroppedRequests_set_category(
|
1845
|
+
dropped_requests, upb_strview_makez(category));
|
1846
|
+
envoy_api_v2_endpoint_ClusterStats_DroppedRequests_set_dropped_count(
|
1847
|
+
dropped_requests, count);
|
1848
|
+
total_dropped_requests += count;
|
1849
|
+
}
|
1850
|
+
// Set total dropped requests.
|
1851
|
+
envoy_api_v2_endpoint_ClusterStats_set_total_dropped_requests(
|
1852
|
+
cluster_stats, total_dropped_requests);
|
1853
|
+
// Set real load report interval.
|
1854
|
+
gpr_timespec timespec =
|
1855
|
+
grpc_millis_to_timespec(load_report.load_report_interval, GPR_TIMESPAN);
|
1856
|
+
google_protobuf_Duration* load_report_interval =
|
1857
|
+
envoy_api_v2_endpoint_ClusterStats_mutable_load_report_interval(
|
516
1858
|
cluster_stats, arena.ptr());
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
envoy_api_v2_endpoint_ClusterStats_DroppedRequests_set_dropped_count(
|
529
|
-
dropped_requests, count);
|
530
|
-
}
|
531
|
-
// Set total dropped requests.
|
532
|
-
envoy_api_v2_endpoint_ClusterStats_set_total_dropped_requests(
|
533
|
-
cluster_stats, snapshot.total_dropped_requests);
|
534
|
-
// Set real load report interval.
|
535
|
-
gpr_timespec timespec =
|
536
|
-
grpc_millis_to_timespec(snapshot.load_report_interval, GPR_TIMESPAN);
|
537
|
-
google_protobuf_Duration* load_report_interval =
|
538
|
-
envoy_api_v2_endpoint_ClusterStats_mutable_load_report_interval(
|
539
|
-
cluster_stats, arena.ptr());
|
540
|
-
google_protobuf_Duration_set_seconds(load_report_interval, timespec.tv_sec);
|
541
|
-
google_protobuf_Duration_set_nanos(load_report_interval, timespec.tv_nsec);
|
542
|
-
return LrsRequestEncode(request, arena.ptr());
|
543
|
-
}
|
544
|
-
|
545
|
-
grpc_error* XdsLrsResponseDecodeAndParse(
|
546
|
-
const grpc_slice& encoded_response,
|
547
|
-
grpc_core::UniquePtr<char>* cluster_name,
|
548
|
-
grpc_millis* load_reporting_interval) {
|
1859
|
+
google_protobuf_Duration_set_seconds(load_report_interval, timespec.tv_sec);
|
1860
|
+
google_protobuf_Duration_set_nanos(load_report_interval, timespec.tv_nsec);
|
1861
|
+
}
|
1862
|
+
MaybeLogLrsRequest(client_, tracer_, request);
|
1863
|
+
return SerializeLrsRequest(request, arena.ptr());
|
1864
|
+
}
|
1865
|
+
|
1866
|
+
grpc_error* XdsApi::ParseLrsResponse(const grpc_slice& encoded_response,
|
1867
|
+
bool* send_all_clusters,
|
1868
|
+
std::set<std::string>* cluster_names,
|
1869
|
+
grpc_millis* load_reporting_interval) {
|
549
1870
|
upb::Arena arena;
|
550
1871
|
// Decode the response.
|
551
1872
|
const envoy_service_load_stats_v2_LoadStatsResponse* decoded_response =
|
@@ -554,19 +1875,22 @@ grpc_error* XdsLrsResponseDecodeAndParse(
|
|
554
1875
|
GRPC_SLICE_LENGTH(encoded_response), arena.ptr());
|
555
1876
|
// Parse the response.
|
556
1877
|
if (decoded_response == nullptr) {
|
557
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("
|
1878
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode response.");
|
558
1879
|
}
|
559
|
-
// Check
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
1880
|
+
// Check send_all_clusters.
|
1881
|
+
if (envoy_service_load_stats_v2_LoadStatsResponse_send_all_clusters(
|
1882
|
+
decoded_response)) {
|
1883
|
+
*send_all_clusters = true;
|
1884
|
+
} else {
|
1885
|
+
// Store the cluster names.
|
1886
|
+
size_t size;
|
1887
|
+
const upb_strview* clusters =
|
1888
|
+
envoy_service_load_stats_v2_LoadStatsResponse_clusters(decoded_response,
|
1889
|
+
&size);
|
1890
|
+
for (size_t i = 0; i < size; ++i) {
|
1891
|
+
cluster_names->emplace(clusters[i].data, clusters[i].size);
|
1892
|
+
}
|
567
1893
|
}
|
568
|
-
// Get the cluster name for reporting loads.
|
569
|
-
*cluster_name = StringCopy(clusters[0]);
|
570
1894
|
// Get the load report interval.
|
571
1895
|
const google_protobuf_Duration* load_reporting_interval_duration =
|
572
1896
|
envoy_service_load_stats_v2_LoadStatsResponse_load_reporting_interval(
|