grpc 1.26.0 → 1.28.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 +1699 -1482
- data/etc/roots.pem +44 -0
- data/include/grpc/grpc_security.h +37 -15
- data/include/grpc/grpc_security_constants.h +27 -0
- data/include/grpc/impl/codegen/grpc_types.h +19 -0
- data/include/grpc/impl/codegen/port_platform.h +8 -1
- data/include/grpc/impl/codegen/sync.h +5 -3
- data/include/grpc/impl/codegen/sync_abseil.h +36 -0
- data/include/grpc/module.modulemap +3 -0
- data/{src/core/lib/json/json_common.h → include/grpc/support/sync_abseil.h} +7 -15
- data/src/core/ext/filters/client_channel/client_channel.cc +74 -32
- 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/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/http_proxy.cc +8 -5
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +291 -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 +224 -367
- 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/round_robin/round_robin.cc +9 -13
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +85 -83
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +623 -767
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +43 -75
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +57 -70
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +31 -7
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +228 -286
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +37 -176
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +7 -11
- data/src/core/ext/filters/client_channel/service_config.cc +91 -160
- data/src/core/ext/filters/client_channel/service_config.h +14 -21
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +1426 -229
- data/src/core/ext/filters/client_channel/xds/xds_api.h +214 -115
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +236 -339
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +32 -45
- 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 +14 -9
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +986 -252
- data/src/core/ext/filters/client_channel/xds/xds_client.h +84 -36
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +53 -131
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +119 -152
- data/src/core/ext/filters/message_size/message_size_filter.cc +32 -35
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +3 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +6 -8
- data/src/core/ext/transport/chttp2/transport/writing.cc +1 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +22 -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 +46 -21
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +116 -29
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +4 -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 +390 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +1411 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +29 -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 +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +5 -3
- 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/base.upb.c +48 -5
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +154 -4
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +19 -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/grpc_service.upb.c +26 -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 +42 -25
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +83 -25
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +43 -7
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +115 -0
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +7 -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 +91 -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 +1 -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 +88 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +258 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +30 -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 +104 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +383 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +17 -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 +144 -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 +42 -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 +29 -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 +62 -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 +17 -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 +793 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +2936 -0
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +58 -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 +27 -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 +227 -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 +296 -0
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +1072 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +32 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +65 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +108 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +52 -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 +87 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +258 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.c +11 -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 +28 -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 +88 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +249 -0
- 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/validate/validate.upb.c +38 -34
- data/src/core/ext/upb-generated/validate/validate.upb.h +129 -99
- 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 +158 -248
- data/src/core/lib/channel/channelz.h +17 -10
- data/src/core/lib/channel/channelz_registry.cc +47 -74
- data/src/core/lib/channel/channelz_registry.h +4 -4
- data/src/core/lib/gpr/sync_abseil.cc +114 -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_precise.cc +1 -1
- data/src/core/lib/gprpp/host_port.cc +1 -1
- data/src/core/lib/gprpp/inlined_vector.h +1 -210
- data/src/core/lib/gprpp/memory.h +2 -6
- data/src/core/lib/gprpp/optional.h +6 -21
- data/src/core/lib/gprpp/string_view.h +5 -110
- data/src/core/lib/gprpp/sync.h +9 -0
- data/src/core/lib/iomgr/buffer_list.cc +36 -35
- data/src/core/lib/iomgr/error.h +4 -4
- data/src/core/lib/iomgr/ev_epollex_linux.cc +12 -4
- data/src/core/lib/iomgr/executor.cc +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +4 -0
- 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/socket_utils_common_posix.cc +14 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +12 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +17 -17
- data/src/core/lib/iomgr/tcp_client_posix.h +6 -6
- 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 +15 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +8 -0
- 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 +208 -68
- data/src/core/lib/json/json_reader.cc +511 -319
- data/src/core/lib/json/json_writer.cc +201 -110
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -1
- data/src/core/lib/security/credentials/credentials.h +10 -1
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -1
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +10 -8
- data/src/core/lib/security/credentials/jwt/json_token.cc +26 -56
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +8 -18
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +149 -159
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +38 -35
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +20 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +9 -0
- data/src/core/lib/security/credentials/tls/{spiffe_credentials.cc → tls_credentials.cc} +23 -24
- data/src/core/lib/security/credentials/tls/{spiffe_credentials.h → tls_credentials.h} +9 -9
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +22 -2
- 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 +2 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +31 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +3 -15
- data/src/core/lib/security/security_connector/ssl_utils.cc +48 -4
- data/src/core/lib/security/security_connector/ssl_utils.h +12 -1
- data/src/core/lib/security/security_connector/tls/{spiffe_security_connector.cc → tls_security_connector.cc} +106 -70
- data/src/core/lib/security/security_connector/tls/{spiffe_security_connector.h → tls_security_connector.h} +22 -19
- data/src/core/lib/security/transport/client_auth_filter.cc +33 -0
- 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/surface/completion_queue.cc +22 -1
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
- 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 +7 -3
- data/src/core/tsi/fake_transport_security.h +2 -0
- data/src/core/tsi/grpc_shadow_boringssl.h +1333 -1319
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +145 -8
- data/src/core/tsi/ssl_transport_security.h +15 -1
- data/src/core/tsi/transport_security.cc +13 -0
- data/src/core/tsi/transport_security_grpc.cc +2 -2
- data/src/core/tsi/transport_security_grpc.h +2 -2
- data/src/core/tsi/transport_security_interface.h +12 -0
- data/src/ruby/bin/math_pb.rb +5 -5
- 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/version.rb +1 -1
- 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 +23 -13
- 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/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/{src/boringssl → third_party/boringssl-with-bazel}/err_data.c +0 -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 → boringssl-with-bazel/src}/crypto/asn1/a_time.c +3 -4
- 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 → boringssl-with-bazel/src}/crypto/bio/connect.c +3 -4
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/fd.c +0 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/file.c +5 -6
- 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 → boringssl-with-bazel/src}/crypto/bio/pair.c +0 -1
- 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 → boringssl-with-bazel/src}/crypto/buf/buf.c +10 -69
- 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 → boringssl-with-bazel/src}/crypto/bytestring/cbb.c +41 -2
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/cbs.c +60 -3
- 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 → boringssl-with-bazel/src}/crypto/cipher_extra/derive_key.c +0 -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 → boringssl-with-bazel/src}/crypto/cipher_extra/e_aesgcmsiv.c +8 -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 → boringssl-with-bazel/src}/crypto/cpu-arm-linux.c +0 -1
- 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 → boringssl-with-bazel/src}/crypto/cpu-intel.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-ppc64le.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/crypto.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/curve25519/spake25519.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/check.c +3 -3
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh.c +1 -2
- 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 → boringssl-with-bazel/src}/crypto/dsa/dsa.c +0 -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 → boringssl-with-bazel/src}/crypto/ec_extra/ec_derive.c +2 -3
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ecdh_extra/ecdh_extra.c +0 -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 → boringssl-with-bazel/src}/crypto/err/err.c +6 -6
- 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 → boringssl-with-bazel/src}/crypto/evp/p_ec.c +0 -1
- 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 → boringssl-with-bazel/src}/crypto/evp/p_rsa.c +14 -2
- 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 → boringssl-with-bazel/src}/crypto/evp/p_x25519_asn1.c +1 -2
- 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 → boringssl-with-bazel/src}/crypto/fipsmodule/aes/internal.h +5 -7
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/aes/key_wrap.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/aes/mode_wrappers.c +0 -2
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bcm.c +2 -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 → boringssl-with-bazel/src}/crypto/fipsmodule/bn/exponentiation.c +0 -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 → boringssl-with-bazel/src}/crypto/fipsmodule/bn/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/jacobi.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/montgomery.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/montgomery_inv.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/mul.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/prime.c +11 -12
- 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 → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/e_aes.c +3 -5
- 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 → boringssl-with-bazel/src}/crypto/fipsmodule/digest/digests.c +0 -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 → boringssl-with-bazel/src}/crypto/fipsmodule/ec/ec.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/ec_key.c +1 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/ec_montgomery.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/felem.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/oct.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/p224-64.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/p256-x86_64-table.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/p256-x86_64.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/p256-x86_64.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/scalar.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/simple.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/simple_mul.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/util.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/wnaf.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ecdh/ecdh.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ecdsa/ecdsa.c +0 -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 → boringssl-with-bazel/src}/crypto/fipsmodule/modes/gcm.c +45 -193
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/internal.h +8 -18
- 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 → boringssl-with-bazel/src}/crypto/fipsmodule/rand/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rand/rand.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rand/urandom.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/blinding.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/padding.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/rsa.c +7 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/rsa_impl.c +60 -51
- 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 → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha512.c +0 -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 → boringssl-with-bazel/src}/crypto/hrss/hrss.c +210 -311
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hrss/internal.h +0 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/internal.h +21 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/lhash/lhash.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/mem.c +70 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj.c +16 -21
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_dat.h +27 -6
- 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 → boringssl-with-bazel/src}/crypto/pem/pem_info.c +0 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_lib.c +7 -7
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_oth.c +0 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_pk8.c +0 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_pkey.c +0 -1
- 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 → boringssl-with-bazel/src}/crypto/pkcs7/pkcs7_x509.c +1 -1
- 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 → boringssl-with-bazel/src}/crypto/poly1305/poly1305.c +2 -2
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/poly1305_arm.c +21 -20
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/poly1305_vec.c +34 -17
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pool/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pool/pool.c +1 -2
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/deterministic.c +0 -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 → boringssl-with-bazel/src}/crypto/rand_extra/windows.c +0 -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 → boringssl-with-bazel/src}/crypto/siphash/siphash.c +3 -1
- 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 → boringssl-with-bazel/src}/crypto/thread_pthread.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread_win.c +0 -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 → boringssl-with-bazel/src}/crypto/x509/a_verify.c +0 -1
- 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 → boringssl-with-bazel/src}/crypto/x509/by_dir.c +1 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/by_file.c +0 -1
- 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 → boringssl-with-bazel/src}/crypto/x509/x509_cmp.c +0 -1
- 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 → boringssl-with-bazel/src}/crypto/x509/x509_obj.c +1 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_r2x.c +0 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_req.c +0 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_set.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_trs.c +1 -2
- 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 → boringssl-with-bazel/src}/crypto/x509/x509_vfy.c +0 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_vpm.c +3 -4
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509cset.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509name.c +0 -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 → boringssl-with-bazel/src}/crypto/x509/x_all.c +0 -1
- 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 → boringssl-with-bazel/src}/crypto/x509v3/v3_alt.c +3 -3
- 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 → boringssl-with-bazel/src}/crypto/x509v3/v3_enum.c +2 -2
- 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 → boringssl-with-bazel/src}/crypto/x509v3/v3_info.c +4 -5
- 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 → boringssl-with-bazel/src}/crypto/x509v3/v3_purp.c +2 -3
- 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 → boringssl-with-bazel/src}/crypto/x509v3/v3_utl.c +11 -12
- 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 → boringssl-with-bazel/src}/include/openssl/base.h +0 -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 → boringssl-with-bazel/src}/include/openssl/bn.h +32 -20
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buf.h +9 -9
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buffer.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/bytestring.h +34 -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 → boringssl-with-bazel/src}/include/openssl/crypto.h +0 -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 → boringssl-with-bazel/src}/include/openssl/dh.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/digest.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dsa.h +0 -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 → boringssl-with-bazel/src}/include/openssl/ec.h +11 -4
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ec_key.h +4 -2
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ecdh.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ecdsa.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/engine.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/err.h +11 -9
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/evp.h +20 -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 → boringssl-with-bazel/src}/include/openssl/mem.h +17 -2
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/nid.h +9 -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 → boringssl-with-bazel/src}/include/openssl/poly1305.h +5 -7
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pool.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rand.h +0 -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 → boringssl-with-bazel/src}/include/openssl/rsa.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/safestack.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/sha.h +0 -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 → boringssl-with-bazel/src}/include/openssl/ssl.h +10 -20
- 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 → boringssl-with-bazel/src}/include/openssl/tls1.h +0 -3
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/type_check.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/x509.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/x509_vfy.h +0 -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 → boringssl-with-bazel/src}/ssl/d1_both.cc +0 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/d1_lib.cc +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/d1_pkt.cc +0 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/d1_srtp.cc +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/dtls_method.cc +0 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/dtls_record.cc +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/handoff.cc +126 -29
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/handshake.cc +5 -4
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/handshake_client.cc +24 -13
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/handshake_server.cc +1 -5
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/internal.h +32 -26
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/s3_both.cc +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/s3_lib.cc +2 -3
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/s3_pkt.cc +0 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_aead_ctx.cc +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_asn1.cc +1 -2
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_buffer.cc +34 -15
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_cert.cc +0 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_cipher.cc +0 -1
- 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 → boringssl-with-bazel/src}/ssl/ssl_lib.cc +13 -14
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_privkey.cc +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_session.cc +2 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_stat.cc +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_transcript.cc +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_versions.cc +1 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_x509.cc +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/t1_enc.cc +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/t1_lib.cc +11 -171
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls13_both.cc +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls13_client.cc +3 -4
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls13_enc.cc +5 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls13_server.cc +78 -101
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls_method.cc +1 -1
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls_record.cc +7 -2
- data/third_party/{boringssl → boringssl-with-bazel/src}/third_party/fiat/curve25519.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/third_party/fiat/curve25519_32.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/third_party/fiat/curve25519_64.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/third_party/fiat/curve25519_tables.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/third_party/fiat/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/third_party/fiat/p256.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/third_party/fiat/p256_32.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/third_party/fiat/p256_64.h +0 -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 +680 -505
- 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_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/third_party/boringssl/crypto/fipsmodule/aes/aes.c +0 -860
@@ -70,7 +70,7 @@ class ServiceConfig : public RefCounted<ServiceConfig> {
|
|
70
70
|
virtual ~Parser() = default;
|
71
71
|
|
72
72
|
virtual std::unique_ptr<ParsedConfig> ParseGlobalParams(
|
73
|
-
const
|
73
|
+
const Json& /* json */, grpc_error** error) {
|
74
74
|
// Avoid unused parameter warning on debug-only parameter
|
75
75
|
(void)error;
|
76
76
|
GPR_DEBUG_ASSERT(error != nullptr);
|
@@ -78,7 +78,7 @@ class ServiceConfig : public RefCounted<ServiceConfig> {
|
|
78
78
|
}
|
79
79
|
|
80
80
|
virtual std::unique_ptr<ParsedConfig> ParsePerMethodParams(
|
81
|
-
const
|
81
|
+
const Json& /* json */, grpc_error** error) {
|
82
82
|
// Avoid unused parameter warning on debug-only parameter
|
83
83
|
(void)error;
|
84
84
|
GPR_DEBUG_ASSERT(error != nullptr);
|
@@ -125,16 +125,12 @@ class ServiceConfig : public RefCounted<ServiceConfig> {
|
|
125
125
|
|
126
126
|
/// Creates a new service config from parsing \a json_string.
|
127
127
|
/// Returns null on parse error.
|
128
|
-
static RefCountedPtr<ServiceConfig> Create(
|
128
|
+
static RefCountedPtr<ServiceConfig> Create(StringView json_string,
|
129
129
|
grpc_error** error);
|
130
130
|
|
131
|
-
|
132
|
-
ServiceConfig(grpc_core::UniquePtr<char> service_config_json,
|
133
|
-
grpc_core::UniquePtr<char> json_string, grpc_json* json_tree,
|
134
|
-
grpc_error** error);
|
135
|
-
~ServiceConfig();
|
131
|
+
ServiceConfig(std::string json_string, Json json, grpc_error** error);
|
136
132
|
|
137
|
-
const
|
133
|
+
const std::string& json_string() const { return json_string_; }
|
138
134
|
|
139
135
|
/// Retrieves the global parsed config at index \a index. The
|
140
136
|
/// lifetime of the returned object is tied to the lifetime of the
|
@@ -163,24 +159,21 @@ class ServiceConfig : public RefCounted<ServiceConfig> {
|
|
163
159
|
|
164
160
|
private:
|
165
161
|
// Helper functions to parse the service config
|
166
|
-
grpc_error* ParseGlobalParams(
|
167
|
-
grpc_error* ParsePerMethodParams(
|
168
|
-
|
169
|
-
// Returns the number of names specified in the method config \a json.
|
170
|
-
static int CountNamesInMethodConfig(grpc_json* json);
|
162
|
+
grpc_error* ParseGlobalParams();
|
163
|
+
grpc_error* ParsePerMethodParams();
|
171
164
|
|
172
165
|
// Returns a path string for the JSON name object specified by \a json.
|
173
166
|
// Returns null on error, and stores error in \a error.
|
174
|
-
static
|
175
|
-
|
167
|
+
static UniquePtr<char> ParseJsonMethodName(const Json& json,
|
168
|
+
grpc_error** error);
|
176
169
|
|
177
170
|
grpc_error* ParseJsonMethodConfigToServiceConfigVectorTable(
|
178
|
-
const
|
179
|
-
SliceHashTable<const ParsedConfigVector*>::Entry
|
171
|
+
const Json& json,
|
172
|
+
InlinedVector<SliceHashTable<const ParsedConfigVector*>::Entry, 10>*
|
173
|
+
entries);
|
180
174
|
|
181
|
-
|
182
|
-
|
183
|
-
grpc_json* json_tree_;
|
175
|
+
std::string json_string_;
|
176
|
+
Json json_;
|
184
177
|
|
185
178
|
InlinedVector<std::unique_ptr<ParsedConfig>, kNumPreallocatedParsers>
|
186
179
|
parsed_global_configs_;
|
@@ -19,42 +19,52 @@
|
|
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"
|
22
27
|
|
23
28
|
#include <grpc/impl/codegen/log.h>
|
24
29
|
#include <grpc/support/alloc.h>
|
25
30
|
#include <grpc/support/string_util.h>
|
26
31
|
|
27
32
|
#include "src/core/ext/filters/client_channel/xds/xds_api.h"
|
33
|
+
#include "src/core/lib/gprpp/inlined_vector.h"
|
28
34
|
#include "src/core/lib/iomgr/error.h"
|
29
35
|
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
30
36
|
|
37
|
+
#include "envoy/api/v2/cds.upb.h"
|
31
38
|
#include "envoy/api/v2/core/address.upb.h"
|
32
39
|
#include "envoy/api/v2/core/base.upb.h"
|
40
|
+
#include "envoy/api/v2/core/config_source.upb.h"
|
33
41
|
#include "envoy/api/v2/core/health_check.upb.h"
|
34
42
|
#include "envoy/api/v2/discovery.upb.h"
|
35
43
|
#include "envoy/api/v2/eds.upb.h"
|
36
44
|
#include "envoy/api/v2/endpoint/endpoint.upb.h"
|
37
45
|
#include "envoy/api/v2/endpoint/load_report.upb.h"
|
46
|
+
#include "envoy/api/v2/lds.upb.h"
|
47
|
+
#include "envoy/api/v2/rds.upb.h"
|
48
|
+
#include "envoy/api/v2/route/route.upb.h"
|
49
|
+
#include "envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h"
|
50
|
+
#include "envoy/config/listener/v2/api_listener.upb.h"
|
38
51
|
#include "envoy/service/load_stats/v2/lrs.upb.h"
|
39
52
|
#include "envoy/type/percent.upb.h"
|
40
53
|
#include "google/protobuf/any.upb.h"
|
41
54
|
#include "google/protobuf/duration.upb.h"
|
42
55
|
#include "google/protobuf/struct.upb.h"
|
43
|
-
#include "google/protobuf/timestamp.upb.h"
|
44
56
|
#include "google/protobuf/wrappers.upb.h"
|
57
|
+
#include "google/rpc/status.upb.h"
|
45
58
|
#include "upb/upb.h"
|
46
59
|
|
47
60
|
namespace grpc_core {
|
48
61
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
"type.googleapis.com/envoy.api.v2.ClusterLoadAssignment";
|
53
|
-
|
54
|
-
} // namespace
|
62
|
+
//
|
63
|
+
// XdsApi::PriorityListUpdate
|
64
|
+
//
|
55
65
|
|
56
|
-
bool
|
57
|
-
const
|
66
|
+
bool XdsApi::PriorityListUpdate::operator==(
|
67
|
+
const XdsApi::PriorityListUpdate& other) const {
|
58
68
|
if (priorities_.size() != other.priorities_.size()) return false;
|
59
69
|
for (size_t i = 0; i < priorities_.size(); ++i) {
|
60
70
|
if (priorities_[i].localities != other.priorities_[i].localities) {
|
@@ -64,8 +74,8 @@ bool XdsPriorityListUpdate::operator==(
|
|
64
74
|
return true;
|
65
75
|
}
|
66
76
|
|
67
|
-
void
|
68
|
-
|
77
|
+
void XdsApi::PriorityListUpdate::Add(
|
78
|
+
XdsApi::PriorityListUpdate::LocalityMap::Locality locality) {
|
69
79
|
// Pad the missing priorities in case the localities are not ordered by
|
70
80
|
// priority.
|
71
81
|
if (!Contains(locality.priority)) priorities_.resize(locality.priority + 1);
|
@@ -73,13 +83,13 @@ void XdsPriorityListUpdate::Add(
|
|
73
83
|
locality_map.localities.emplace(locality.name, std::move(locality));
|
74
84
|
}
|
75
85
|
|
76
|
-
const
|
86
|
+
const XdsApi::PriorityListUpdate::LocalityMap* XdsApi::PriorityListUpdate::Find(
|
77
87
|
uint32_t priority) const {
|
78
88
|
if (!Contains(priority)) return nullptr;
|
79
89
|
return &priorities_[priority];
|
80
90
|
}
|
81
91
|
|
82
|
-
bool
|
92
|
+
bool XdsApi::PriorityListUpdate::Contains(
|
83
93
|
const RefCountedPtr<XdsLocalityName>& name) {
|
84
94
|
for (size_t i = 0; i < priorities_.size(); ++i) {
|
85
95
|
const LocalityMap& locality_map = priorities_[i];
|
@@ -88,8 +98,11 @@ bool XdsPriorityListUpdate::Contains(
|
|
88
98
|
return false;
|
89
99
|
}
|
90
100
|
|
91
|
-
|
92
|
-
|
101
|
+
//
|
102
|
+
// XdsApi::DropConfig
|
103
|
+
//
|
104
|
+
|
105
|
+
bool XdsApi::DropConfig::ShouldDrop(const std::string** category_name) const {
|
93
106
|
for (size_t i = 0; i < drop_category_list_.size(); ++i) {
|
94
107
|
const auto& drop_category = drop_category_list_[i];
|
95
108
|
// Generate a random number in [0, 1000000).
|
@@ -102,13 +115,33 @@ bool XdsDropConfig::ShouldDrop(
|
|
102
115
|
return false;
|
103
116
|
}
|
104
117
|
|
118
|
+
//
|
119
|
+
// XdsApi
|
120
|
+
//
|
121
|
+
|
122
|
+
const char* XdsApi::kLdsTypeUrl = "type.googleapis.com/envoy.api.v2.Listener";
|
123
|
+
const char* XdsApi::kRdsTypeUrl =
|
124
|
+
"type.googleapis.com/envoy.api.v2.RouteConfiguration";
|
125
|
+
const char* XdsApi::kCdsTypeUrl = "type.googleapis.com/envoy.api.v2.Cluster";
|
126
|
+
const char* XdsApi::kEdsTypeUrl =
|
127
|
+
"type.googleapis.com/envoy.api.v2.ClusterLoadAssignment";
|
128
|
+
|
129
|
+
XdsApi::XdsApi(XdsClient* client, TraceFlag* tracer,
|
130
|
+
const XdsBootstrap::Node* node)
|
131
|
+
: client_(client),
|
132
|
+
tracer_(tracer),
|
133
|
+
node_(node),
|
134
|
+
build_version_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING, " ",
|
135
|
+
grpc_version_string())),
|
136
|
+
user_agent_name_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING)) {}
|
137
|
+
|
105
138
|
namespace {
|
106
139
|
|
107
140
|
void PopulateMetadataValue(upb_arena* arena, google_protobuf_Value* value_pb,
|
108
|
-
const
|
141
|
+
const Json& value);
|
109
142
|
|
110
143
|
void PopulateListValue(upb_arena* arena, google_protobuf_ListValue* list_value,
|
111
|
-
const
|
144
|
+
const Json::Array& values) {
|
112
145
|
for (const auto& value : values) {
|
113
146
|
auto* value_pb = google_protobuf_ListValue_add_values(list_value, arena);
|
114
147
|
PopulateMetadataValue(arena, value_pb, value);
|
@@ -116,13 +149,12 @@ void PopulateListValue(upb_arena* arena, google_protobuf_ListValue* list_value,
|
|
116
149
|
}
|
117
150
|
|
118
151
|
void PopulateMetadata(upb_arena* arena, google_protobuf_Struct* metadata_pb,
|
119
|
-
const
|
120
|
-
StringLess>& metadata) {
|
152
|
+
const Json::Object& metadata) {
|
121
153
|
for (const auto& p : metadata) {
|
122
154
|
google_protobuf_Struct_FieldsEntry* field =
|
123
155
|
google_protobuf_Struct_add_fields(metadata_pb, arena);
|
124
|
-
google_protobuf_Struct_FieldsEntry_set_key(
|
125
|
-
|
156
|
+
google_protobuf_Struct_FieldsEntry_set_key(
|
157
|
+
field, upb_strview_makez(p.first.c_str()));
|
126
158
|
google_protobuf_Value* value =
|
127
159
|
google_protobuf_Struct_FieldsEntry_mutable_value(field, arena);
|
128
160
|
PopulateMetadataValue(arena, value, p.second);
|
@@ -130,98 +162,1079 @@ void PopulateMetadata(upb_arena* arena, google_protobuf_Struct* metadata_pb,
|
|
130
162
|
}
|
131
163
|
|
132
164
|
void PopulateMetadataValue(upb_arena* arena, google_protobuf_Value* value_pb,
|
133
|
-
const
|
134
|
-
switch (value.type) {
|
135
|
-
case
|
165
|
+
const Json& value) {
|
166
|
+
switch (value.type()) {
|
167
|
+
case Json::Type::JSON_NULL:
|
136
168
|
google_protobuf_Value_set_null_value(value_pb, 0);
|
137
169
|
break;
|
138
|
-
case
|
139
|
-
google_protobuf_Value_set_number_value(
|
170
|
+
case Json::Type::NUMBER:
|
171
|
+
google_protobuf_Value_set_number_value(
|
172
|
+
value_pb, strtod(value.string_value().c_str(), nullptr));
|
140
173
|
break;
|
141
|
-
case
|
174
|
+
case Json::Type::STRING:
|
142
175
|
google_protobuf_Value_set_string_value(
|
143
|
-
value_pb, upb_strview_makez(value.string_value));
|
176
|
+
value_pb, upb_strview_makez(value.string_value().c_str()));
|
177
|
+
break;
|
178
|
+
case Json::Type::JSON_TRUE:
|
179
|
+
google_protobuf_Value_set_bool_value(value_pb, true);
|
144
180
|
break;
|
145
|
-
case
|
146
|
-
google_protobuf_Value_set_bool_value(value_pb,
|
181
|
+
case Json::Type::JSON_FALSE:
|
182
|
+
google_protobuf_Value_set_bool_value(value_pb, false);
|
147
183
|
break;
|
148
|
-
case
|
184
|
+
case Json::Type::OBJECT: {
|
149
185
|
google_protobuf_Struct* struct_value =
|
150
186
|
google_protobuf_Value_mutable_struct_value(value_pb, arena);
|
151
|
-
PopulateMetadata(arena, struct_value, value.
|
187
|
+
PopulateMetadata(arena, struct_value, value.object_value());
|
152
188
|
break;
|
153
189
|
}
|
154
|
-
case
|
190
|
+
case Json::Type::ARRAY: {
|
155
191
|
google_protobuf_ListValue* list_value =
|
156
192
|
google_protobuf_Value_mutable_list_value(value_pb, arena);
|
157
|
-
PopulateListValue(arena, list_value, value.
|
193
|
+
PopulateListValue(arena, list_value, value.array_value());
|
158
194
|
break;
|
159
195
|
}
|
160
196
|
}
|
161
197
|
}
|
162
198
|
|
163
199
|
void PopulateNode(upb_arena* arena, const XdsBootstrap::Node* node,
|
164
|
-
const
|
200
|
+
const std::string& build_version,
|
201
|
+
const std::string& user_agent_name,
|
202
|
+
const std::string& server_name,
|
203
|
+
envoy_api_v2_core_Node* node_msg) {
|
165
204
|
if (node != nullptr) {
|
166
|
-
if (node->id
|
167
|
-
envoy_api_v2_core_Node_set_id(node_msg,
|
205
|
+
if (!node->id.empty()) {
|
206
|
+
envoy_api_v2_core_Node_set_id(node_msg,
|
207
|
+
upb_strview_makez(node->id.c_str()));
|
168
208
|
}
|
169
|
-
if (node->cluster
|
170
|
-
envoy_api_v2_core_Node_set_cluster(
|
171
|
-
|
209
|
+
if (!node->cluster.empty()) {
|
210
|
+
envoy_api_v2_core_Node_set_cluster(
|
211
|
+
node_msg, upb_strview_makez(node->cluster.c_str()));
|
172
212
|
}
|
173
|
-
if (!node->metadata.empty()) {
|
213
|
+
if (!node->metadata.object_value().empty()) {
|
174
214
|
google_protobuf_Struct* metadata =
|
175
215
|
envoy_api_v2_core_Node_mutable_metadata(node_msg, arena);
|
176
|
-
PopulateMetadata(arena, metadata, node->metadata);
|
216
|
+
PopulateMetadata(arena, metadata, node->metadata.object_value());
|
217
|
+
}
|
218
|
+
if (!server_name.empty()) {
|
219
|
+
google_protobuf_Struct* metadata =
|
220
|
+
envoy_api_v2_core_Node_mutable_metadata(node_msg, arena);
|
221
|
+
google_protobuf_Struct_FieldsEntry* field =
|
222
|
+
google_protobuf_Struct_add_fields(metadata, arena);
|
223
|
+
google_protobuf_Struct_FieldsEntry_set_key(
|
224
|
+
field, upb_strview_makez("PROXYLESS_CLIENT_HOSTNAME"));
|
225
|
+
google_protobuf_Value* value =
|
226
|
+
google_protobuf_Struct_FieldsEntry_mutable_value(field, arena);
|
227
|
+
google_protobuf_Value_set_string_value(
|
228
|
+
value, upb_strview_make(server_name.data(), server_name.size()));
|
177
229
|
}
|
178
|
-
if (node->locality_region
|
179
|
-
node->locality_subzone
|
230
|
+
if (!node->locality_region.empty() || !node->locality_zone.empty() ||
|
231
|
+
!node->locality_subzone.empty()) {
|
180
232
|
envoy_api_v2_core_Locality* locality =
|
181
233
|
envoy_api_v2_core_Node_mutable_locality(node_msg, arena);
|
182
|
-
if (node->locality_region
|
234
|
+
if (!node->locality_region.empty()) {
|
183
235
|
envoy_api_v2_core_Locality_set_region(
|
184
|
-
locality, upb_strview_makez(node->locality_region));
|
236
|
+
locality, upb_strview_makez(node->locality_region.c_str()));
|
185
237
|
}
|
186
|
-
if (node->locality_zone
|
238
|
+
if (!node->locality_zone.empty()) {
|
187
239
|
envoy_api_v2_core_Locality_set_zone(
|
188
|
-
locality, upb_strview_makez(node->locality_zone));
|
240
|
+
locality, upb_strview_makez(node->locality_zone.c_str()));
|
189
241
|
}
|
190
|
-
if (node->locality_subzone
|
242
|
+
if (!node->locality_subzone.empty()) {
|
191
243
|
envoy_api_v2_core_Locality_set_sub_zone(
|
192
|
-
locality, upb_strview_makez(node->locality_subzone));
|
244
|
+
locality, upb_strview_makez(node->locality_subzone.c_str()));
|
193
245
|
}
|
194
246
|
}
|
195
247
|
}
|
196
|
-
envoy_api_v2_core_Node_set_build_version(
|
197
|
-
|
248
|
+
envoy_api_v2_core_Node_set_build_version(
|
249
|
+
node_msg, upb_strview_make(build_version.data(), build_version.size()));
|
250
|
+
envoy_api_v2_core_Node_set_user_agent_name(
|
251
|
+
node_msg,
|
252
|
+
upb_strview_make(user_agent_name.data(), user_agent_name.size()));
|
253
|
+
envoy_api_v2_core_Node_set_user_agent_version(
|
254
|
+
node_msg, upb_strview_makez(grpc_version_string()));
|
255
|
+
envoy_api_v2_core_Node_add_client_features(
|
256
|
+
node_msg, upb_strview_makez("envoy.lb.does_not_support_overprovisioning"),
|
257
|
+
arena);
|
198
258
|
}
|
199
259
|
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
const XdsBootstrap::Node* node,
|
204
|
-
const char* build_version) {
|
205
|
-
upb::Arena arena;
|
260
|
+
envoy_api_v2_DiscoveryRequest* CreateDiscoveryRequest(
|
261
|
+
upb_arena* arena, const char* type_url, const std::string& version,
|
262
|
+
const std::string& nonce, grpc_error* error) {
|
206
263
|
// Create a request.
|
207
264
|
envoy_api_v2_DiscoveryRequest* request =
|
208
|
-
envoy_api_v2_DiscoveryRequest_new(arena
|
209
|
-
|
210
|
-
envoy_api_v2_DiscoveryRequest_mutable_node(request, arena.ptr());
|
211
|
-
PopulateNode(arena.ptr(), node, build_version, node_msg);
|
212
|
-
envoy_api_v2_DiscoveryRequest_add_resource_names(
|
213
|
-
request, upb_strview_makez(server_name), arena.ptr());
|
265
|
+
envoy_api_v2_DiscoveryRequest_new(arena);
|
266
|
+
// Set type_url.
|
214
267
|
envoy_api_v2_DiscoveryRequest_set_type_url(request,
|
215
|
-
upb_strview_makez(
|
216
|
-
//
|
268
|
+
upb_strview_makez(type_url));
|
269
|
+
// Set version_info.
|
270
|
+
if (!version.empty()) {
|
271
|
+
envoy_api_v2_DiscoveryRequest_set_version_info(
|
272
|
+
request, upb_strview_makez(version.c_str()));
|
273
|
+
}
|
274
|
+
// Set nonce.
|
275
|
+
if (!nonce.empty()) {
|
276
|
+
envoy_api_v2_DiscoveryRequest_set_response_nonce(
|
277
|
+
request, upb_strview_makez(nonce.c_str()));
|
278
|
+
}
|
279
|
+
// Set error_detail if it's a NACK.
|
280
|
+
if (error != GRPC_ERROR_NONE) {
|
281
|
+
grpc_slice error_description_slice;
|
282
|
+
GPR_ASSERT(grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION,
|
283
|
+
&error_description_slice));
|
284
|
+
upb_strview error_description_strview =
|
285
|
+
upb_strview_make(reinterpret_cast<const char*>(
|
286
|
+
GPR_SLICE_START_PTR(error_description_slice)),
|
287
|
+
GPR_SLICE_LENGTH(error_description_slice));
|
288
|
+
google_rpc_Status* error_detail =
|
289
|
+
envoy_api_v2_DiscoveryRequest_mutable_error_detail(request, arena);
|
290
|
+
google_rpc_Status_set_message(error_detail, error_description_strview);
|
291
|
+
GRPC_ERROR_UNREF(error);
|
292
|
+
}
|
293
|
+
return request;
|
294
|
+
}
|
295
|
+
|
296
|
+
inline absl::string_view UpbStringToAbsl(const upb_strview& str) {
|
297
|
+
return absl::string_view(str.data, str.size);
|
298
|
+
}
|
299
|
+
|
300
|
+
inline void AddStringField(const char* name, const upb_strview& value,
|
301
|
+
std::vector<std::string>* fields,
|
302
|
+
bool add_if_empty = false) {
|
303
|
+
if (value.size > 0 || add_if_empty) {
|
304
|
+
fields->emplace_back(
|
305
|
+
absl::StrCat(name, ": \"", UpbStringToAbsl(value), "\""));
|
306
|
+
}
|
307
|
+
}
|
308
|
+
|
309
|
+
inline void AddLocalityField(int indent_level,
|
310
|
+
const envoy_api_v2_core_Locality* locality,
|
311
|
+
std::vector<std::string>* fields) {
|
312
|
+
std::string indent =
|
313
|
+
absl::StrJoin(std::vector<std::string>(indent_level, " "), "");
|
314
|
+
// region
|
315
|
+
std::string field = absl::StrCat(indent, "region");
|
316
|
+
AddStringField(field.c_str(), envoy_api_v2_core_Locality_region(locality),
|
317
|
+
fields);
|
318
|
+
// zone
|
319
|
+
field = absl::StrCat(indent, "zone");
|
320
|
+
AddStringField(field.c_str(), envoy_api_v2_core_Locality_zone(locality),
|
321
|
+
fields);
|
322
|
+
// sub_zone
|
323
|
+
field = absl::StrCat(indent, "sub_zone");
|
324
|
+
AddStringField(field.c_str(), envoy_api_v2_core_Locality_sub_zone(locality),
|
325
|
+
fields);
|
326
|
+
}
|
327
|
+
|
328
|
+
void AddNodeLogFields(const envoy_api_v2_core_Node* node,
|
329
|
+
std::vector<std::string>* fields) {
|
330
|
+
fields->emplace_back("node {");
|
331
|
+
// id
|
332
|
+
AddStringField(" id", envoy_api_v2_core_Node_id(node), fields);
|
333
|
+
// metadata
|
334
|
+
const google_protobuf_Struct* metadata =
|
335
|
+
envoy_api_v2_core_Node_metadata(node);
|
336
|
+
if (metadata != nullptr) {
|
337
|
+
fields->emplace_back(" metadata {");
|
338
|
+
size_t num_entries;
|
339
|
+
const google_protobuf_Struct_FieldsEntry* const* entries =
|
340
|
+
google_protobuf_Struct_fields(metadata, &num_entries);
|
341
|
+
for (size_t i = 0; i < num_entries; ++i) {
|
342
|
+
fields->emplace_back(" field {");
|
343
|
+
// key
|
344
|
+
AddStringField(" key",
|
345
|
+
google_protobuf_Struct_FieldsEntry_key(entries[i]),
|
346
|
+
fields);
|
347
|
+
// value
|
348
|
+
const google_protobuf_Value* value =
|
349
|
+
google_protobuf_Struct_FieldsEntry_value(entries[i]);
|
350
|
+
if (value != nullptr) {
|
351
|
+
std::string value_str;
|
352
|
+
if (google_protobuf_Value_has_string_value(value)) {
|
353
|
+
value_str = absl::StrCat(
|
354
|
+
"string_value: \"",
|
355
|
+
UpbStringToAbsl(google_protobuf_Value_string_value(value)), "\"");
|
356
|
+
} else if (google_protobuf_Value_has_null_value(value)) {
|
357
|
+
value_str = "null_value: NULL_VALUE";
|
358
|
+
} else if (google_protobuf_Value_has_number_value(value)) {
|
359
|
+
value_str = absl::StrCat("double_value: ",
|
360
|
+
google_protobuf_Value_number_value(value));
|
361
|
+
} else if (google_protobuf_Value_has_bool_value(value)) {
|
362
|
+
value_str = absl::StrCat("bool_value: ",
|
363
|
+
google_protobuf_Value_bool_value(value));
|
364
|
+
} else if (google_protobuf_Value_has_struct_value(value)) {
|
365
|
+
value_str = "struct_value: <not printed>";
|
366
|
+
} else if (google_protobuf_Value_has_list_value(value)) {
|
367
|
+
value_str = "list_value: <not printed>";
|
368
|
+
} else {
|
369
|
+
value_str = "<unknown>";
|
370
|
+
}
|
371
|
+
fields->emplace_back(absl::StrCat(" value { ", value_str, " }"));
|
372
|
+
}
|
373
|
+
fields->emplace_back(" }");
|
374
|
+
}
|
375
|
+
fields->emplace_back(" }");
|
376
|
+
}
|
377
|
+
// locality
|
378
|
+
const envoy_api_v2_core_Locality* locality =
|
379
|
+
envoy_api_v2_core_Node_locality(node);
|
380
|
+
if (locality != nullptr) {
|
381
|
+
fields->emplace_back(" locality {");
|
382
|
+
AddLocalityField(2, locality, fields);
|
383
|
+
fields->emplace_back(" }");
|
384
|
+
}
|
385
|
+
// build_version
|
386
|
+
AddStringField(" build_version", envoy_api_v2_core_Node_build_version(node),
|
387
|
+
fields);
|
388
|
+
// user_agent_name
|
389
|
+
AddStringField(" user_agent_name",
|
390
|
+
envoy_api_v2_core_Node_user_agent_name(node), fields);
|
391
|
+
// user_agent_version
|
392
|
+
AddStringField(" user_agent_version",
|
393
|
+
envoy_api_v2_core_Node_user_agent_version(node), fields);
|
394
|
+
// client_features
|
395
|
+
size_t num_client_features;
|
396
|
+
const upb_strview* client_features =
|
397
|
+
envoy_api_v2_core_Node_client_features(node, &num_client_features);
|
398
|
+
for (size_t i = 0; i < num_client_features; ++i) {
|
399
|
+
AddStringField(" client_features", client_features[i], fields);
|
400
|
+
}
|
401
|
+
fields->emplace_back("}");
|
402
|
+
}
|
403
|
+
|
404
|
+
void MaybeLogDiscoveryRequest(XdsClient* client, TraceFlag* tracer,
|
405
|
+
const envoy_api_v2_DiscoveryRequest* request) {
|
406
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
407
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
408
|
+
// TODO(roth): When we can upgrade upb, use upb textformat code to dump
|
409
|
+
// the raw proto instead of doing this manually.
|
410
|
+
std::vector<std::string> fields;
|
411
|
+
// version_info
|
412
|
+
AddStringField("version_info",
|
413
|
+
envoy_api_v2_DiscoveryRequest_version_info(request),
|
414
|
+
&fields);
|
415
|
+
// node
|
416
|
+
const envoy_api_v2_core_Node* node =
|
417
|
+
envoy_api_v2_DiscoveryRequest_node(request);
|
418
|
+
if (node != nullptr) AddNodeLogFields(node, &fields);
|
419
|
+
// resource_names
|
420
|
+
size_t num_resource_names;
|
421
|
+
const upb_strview* resource_names =
|
422
|
+
envoy_api_v2_DiscoveryRequest_resource_names(request,
|
423
|
+
&num_resource_names);
|
424
|
+
for (size_t i = 0; i < num_resource_names; ++i) {
|
425
|
+
AddStringField("resource_names", resource_names[i], &fields);
|
426
|
+
}
|
427
|
+
// type_url
|
428
|
+
AddStringField("type_url", envoy_api_v2_DiscoveryRequest_type_url(request),
|
429
|
+
&fields);
|
430
|
+
// response_nonce
|
431
|
+
AddStringField("response_nonce",
|
432
|
+
envoy_api_v2_DiscoveryRequest_response_nonce(request),
|
433
|
+
&fields);
|
434
|
+
// error_detail
|
435
|
+
const struct google_rpc_Status* error_detail =
|
436
|
+
envoy_api_v2_DiscoveryRequest_error_detail(request);
|
437
|
+
if (error_detail != nullptr) {
|
438
|
+
fields.emplace_back("error_detail {");
|
439
|
+
// code
|
440
|
+
int32_t code = google_rpc_Status_code(error_detail);
|
441
|
+
if (code != 0) fields.emplace_back(absl::StrCat(" code: ", code));
|
442
|
+
// message
|
443
|
+
AddStringField(" message", google_rpc_Status_message(error_detail),
|
444
|
+
&fields);
|
445
|
+
fields.emplace_back("}");
|
446
|
+
}
|
447
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] constructed ADS request: %s", client,
|
448
|
+
absl::StrJoin(fields, "\n").c_str());
|
449
|
+
}
|
450
|
+
}
|
451
|
+
|
452
|
+
grpc_slice SerializeDiscoveryRequest(upb_arena* arena,
|
453
|
+
envoy_api_v2_DiscoveryRequest* request) {
|
217
454
|
size_t output_length;
|
218
|
-
char* output =
|
219
|
-
|
455
|
+
char* output =
|
456
|
+
envoy_api_v2_DiscoveryRequest_serialize(request, arena, &output_length);
|
220
457
|
return grpc_slice_from_copied_buffer(output, output_length);
|
221
458
|
}
|
222
459
|
|
460
|
+
} // namespace
|
461
|
+
|
462
|
+
grpc_slice XdsApi::CreateUnsupportedTypeNackRequest(const std::string& type_url,
|
463
|
+
const std::string& nonce,
|
464
|
+
grpc_error* error) {
|
465
|
+
upb::Arena arena;
|
466
|
+
envoy_api_v2_DiscoveryRequest* request = CreateDiscoveryRequest(
|
467
|
+
arena.ptr(), type_url.c_str(), /*version=*/"", nonce, error);
|
468
|
+
MaybeLogDiscoveryRequest(client_, tracer_, request);
|
469
|
+
return SerializeDiscoveryRequest(arena.ptr(), request);
|
470
|
+
}
|
471
|
+
|
472
|
+
grpc_slice XdsApi::CreateLdsRequest(const std::string& server_name,
|
473
|
+
const std::string& version,
|
474
|
+
const std::string& nonce, grpc_error* error,
|
475
|
+
bool populate_node) {
|
476
|
+
upb::Arena arena;
|
477
|
+
envoy_api_v2_DiscoveryRequest* request =
|
478
|
+
CreateDiscoveryRequest(arena.ptr(), kLdsTypeUrl, version, nonce, error);
|
479
|
+
// Populate node.
|
480
|
+
if (populate_node) {
|
481
|
+
envoy_api_v2_core_Node* node_msg =
|
482
|
+
envoy_api_v2_DiscoveryRequest_mutable_node(request, arena.ptr());
|
483
|
+
PopulateNode(arena.ptr(), node_, build_version_, user_agent_name_, "",
|
484
|
+
node_msg);
|
485
|
+
}
|
486
|
+
// Add resource_name.
|
487
|
+
envoy_api_v2_DiscoveryRequest_add_resource_names(
|
488
|
+
request, upb_strview_make(server_name.data(), server_name.size()),
|
489
|
+
arena.ptr());
|
490
|
+
MaybeLogDiscoveryRequest(client_, tracer_, request);
|
491
|
+
return SerializeDiscoveryRequest(arena.ptr(), request);
|
492
|
+
}
|
493
|
+
|
494
|
+
grpc_slice XdsApi::CreateRdsRequest(const std::string& route_config_name,
|
495
|
+
const std::string& version,
|
496
|
+
const std::string& nonce, grpc_error* error,
|
497
|
+
bool populate_node) {
|
498
|
+
upb::Arena arena;
|
499
|
+
envoy_api_v2_DiscoveryRequest* request =
|
500
|
+
CreateDiscoveryRequest(arena.ptr(), kRdsTypeUrl, version, nonce, error);
|
501
|
+
// Populate node.
|
502
|
+
if (populate_node) {
|
503
|
+
envoy_api_v2_core_Node* node_msg =
|
504
|
+
envoy_api_v2_DiscoveryRequest_mutable_node(request, arena.ptr());
|
505
|
+
PopulateNode(arena.ptr(), node_, build_version_, user_agent_name_, "",
|
506
|
+
node_msg);
|
507
|
+
}
|
508
|
+
// Add resource_name.
|
509
|
+
envoy_api_v2_DiscoveryRequest_add_resource_names(
|
510
|
+
request,
|
511
|
+
upb_strview_make(route_config_name.data(), route_config_name.size()),
|
512
|
+
arena.ptr());
|
513
|
+
MaybeLogDiscoveryRequest(client_, tracer_, request);
|
514
|
+
return SerializeDiscoveryRequest(arena.ptr(), request);
|
515
|
+
}
|
516
|
+
|
517
|
+
grpc_slice XdsApi::CreateCdsRequest(const std::set<StringView>& cluster_names,
|
518
|
+
const std::string& version,
|
519
|
+
const std::string& nonce, grpc_error* error,
|
520
|
+
bool populate_node) {
|
521
|
+
upb::Arena arena;
|
522
|
+
envoy_api_v2_DiscoveryRequest* request =
|
523
|
+
CreateDiscoveryRequest(arena.ptr(), kCdsTypeUrl, version, nonce, error);
|
524
|
+
// Populate node.
|
525
|
+
if (populate_node) {
|
526
|
+
envoy_api_v2_core_Node* node_msg =
|
527
|
+
envoy_api_v2_DiscoveryRequest_mutable_node(request, arena.ptr());
|
528
|
+
PopulateNode(arena.ptr(), node_, build_version_, user_agent_name_, "",
|
529
|
+
node_msg);
|
530
|
+
}
|
531
|
+
// Add resource_names.
|
532
|
+
for (const auto& cluster_name : cluster_names) {
|
533
|
+
envoy_api_v2_DiscoveryRequest_add_resource_names(
|
534
|
+
request, upb_strview_make(cluster_name.data(), cluster_name.size()),
|
535
|
+
arena.ptr());
|
536
|
+
}
|
537
|
+
MaybeLogDiscoveryRequest(client_, tracer_, request);
|
538
|
+
return SerializeDiscoveryRequest(arena.ptr(), request);
|
539
|
+
}
|
540
|
+
|
541
|
+
grpc_slice XdsApi::CreateEdsRequest(
|
542
|
+
const std::set<StringView>& eds_service_names, const std::string& version,
|
543
|
+
const std::string& nonce, grpc_error* error, bool populate_node) {
|
544
|
+
upb::Arena arena;
|
545
|
+
envoy_api_v2_DiscoveryRequest* request =
|
546
|
+
CreateDiscoveryRequest(arena.ptr(), kEdsTypeUrl, version, nonce, error);
|
547
|
+
// Populate node.
|
548
|
+
if (populate_node) {
|
549
|
+
envoy_api_v2_core_Node* node_msg =
|
550
|
+
envoy_api_v2_DiscoveryRequest_mutable_node(request, arena.ptr());
|
551
|
+
PopulateNode(arena.ptr(), node_, build_version_, user_agent_name_, "",
|
552
|
+
node_msg);
|
553
|
+
}
|
554
|
+
// Add resource_names.
|
555
|
+
for (const auto& eds_service_name : eds_service_names) {
|
556
|
+
envoy_api_v2_DiscoveryRequest_add_resource_names(
|
557
|
+
request,
|
558
|
+
upb_strview_make(eds_service_name.data(), eds_service_name.size()),
|
559
|
+
arena.ptr());
|
560
|
+
}
|
561
|
+
MaybeLogDiscoveryRequest(client_, tracer_, request);
|
562
|
+
return SerializeDiscoveryRequest(arena.ptr(), request);
|
563
|
+
}
|
564
|
+
|
223
565
|
namespace {
|
224
566
|
|
567
|
+
void MaybeLogDiscoveryResponse(XdsClient* client, TraceFlag* tracer,
|
568
|
+
const envoy_api_v2_DiscoveryResponse* response) {
|
569
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
570
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
571
|
+
// TODO(roth): When we can upgrade upb, use upb textformat code to dump
|
572
|
+
// the raw proto instead of doing this manually.
|
573
|
+
std::vector<std::string> fields;
|
574
|
+
// version_info
|
575
|
+
AddStringField("version_info",
|
576
|
+
envoy_api_v2_DiscoveryResponse_version_info(response),
|
577
|
+
&fields);
|
578
|
+
// resources
|
579
|
+
size_t num_resources;
|
580
|
+
envoy_api_v2_DiscoveryResponse_resources(response, &num_resources);
|
581
|
+
fields.emplace_back(
|
582
|
+
absl::StrCat("resources: <", num_resources, " element(s)>"));
|
583
|
+
// type_url
|
584
|
+
AddStringField("type_url",
|
585
|
+
envoy_api_v2_DiscoveryResponse_type_url(response), &fields);
|
586
|
+
// nonce
|
587
|
+
AddStringField("nonce", envoy_api_v2_DiscoveryResponse_nonce(response),
|
588
|
+
&fields);
|
589
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] received response: %s", client,
|
590
|
+
absl::StrJoin(fields, "\n").c_str());
|
591
|
+
}
|
592
|
+
}
|
593
|
+
|
594
|
+
void MaybeLogRouteConfiguration(
|
595
|
+
XdsClient* client, TraceFlag* tracer,
|
596
|
+
const envoy_api_v2_RouteConfiguration* route_config) {
|
597
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
598
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
599
|
+
// TODO(roth): When we can upgrade upb, use upb textformat code to dump
|
600
|
+
// the raw proto instead of doing this manually.
|
601
|
+
std::vector<std::string> fields;
|
602
|
+
// name
|
603
|
+
AddStringField("name", envoy_api_v2_RouteConfiguration_name(route_config),
|
604
|
+
&fields);
|
605
|
+
// virtual_hosts
|
606
|
+
size_t num_virtual_hosts;
|
607
|
+
const envoy_api_v2_route_VirtualHost* const* virtual_hosts =
|
608
|
+
envoy_api_v2_RouteConfiguration_virtual_hosts(route_config,
|
609
|
+
&num_virtual_hosts);
|
610
|
+
for (size_t i = 0; i < num_virtual_hosts; ++i) {
|
611
|
+
const auto* virtual_host = virtual_hosts[i];
|
612
|
+
fields.push_back("virtual_hosts {");
|
613
|
+
// name
|
614
|
+
AddStringField(
|
615
|
+
" name", envoy_api_v2_route_VirtualHost_name(virtual_host), &fields);
|
616
|
+
// domains
|
617
|
+
size_t num_domains;
|
618
|
+
const upb_strview* const domains =
|
619
|
+
envoy_api_v2_route_VirtualHost_domains(virtual_host, &num_domains);
|
620
|
+
for (size_t j = 0; j < num_domains; ++j) {
|
621
|
+
AddStringField(" domains", domains[j], &fields);
|
622
|
+
}
|
623
|
+
// routes
|
624
|
+
size_t num_routes;
|
625
|
+
const envoy_api_v2_route_Route* const* routes =
|
626
|
+
envoy_api_v2_route_VirtualHost_routes(virtual_host, &num_routes);
|
627
|
+
for (size_t j = 0; j < num_routes; ++j) {
|
628
|
+
const auto* route = routes[j];
|
629
|
+
fields.push_back(" route {");
|
630
|
+
// name
|
631
|
+
AddStringField(" name", envoy_api_v2_route_Route_name(route),
|
632
|
+
&fields);
|
633
|
+
// match
|
634
|
+
const envoy_api_v2_route_RouteMatch* match =
|
635
|
+
envoy_api_v2_route_Route_match(route);
|
636
|
+
if (match != nullptr) {
|
637
|
+
fields.emplace_back(" match {");
|
638
|
+
// path matching
|
639
|
+
if (envoy_api_v2_route_RouteMatch_has_prefix(match)) {
|
640
|
+
AddStringField(" prefix",
|
641
|
+
envoy_api_v2_route_RouteMatch_prefix(match), &fields,
|
642
|
+
/*add_if_empty=*/true);
|
643
|
+
} else if (envoy_api_v2_route_RouteMatch_has_path(match)) {
|
644
|
+
AddStringField(" path",
|
645
|
+
envoy_api_v2_route_RouteMatch_path(match), &fields,
|
646
|
+
/*add_if_empty=*/true);
|
647
|
+
} else if (envoy_api_v2_route_RouteMatch_has_regex(match)) {
|
648
|
+
AddStringField(" regex",
|
649
|
+
envoy_api_v2_route_RouteMatch_regex(match), &fields,
|
650
|
+
/*add_if_empty=*/true);
|
651
|
+
} else if (envoy_api_v2_route_RouteMatch_has_safe_regex(match)) {
|
652
|
+
fields.emplace_back(" safe_regex: <not printed>");
|
653
|
+
} else {
|
654
|
+
fields.emplace_back(" <unknown path matching type>");
|
655
|
+
}
|
656
|
+
// header matching
|
657
|
+
size_t num_headers;
|
658
|
+
envoy_api_v2_route_RouteMatch_headers(match, &num_headers);
|
659
|
+
if (num_headers > 0) {
|
660
|
+
fields.emplace_back(
|
661
|
+
absl::StrCat(" headers: <", num_headers, " element(s)>"));
|
662
|
+
}
|
663
|
+
fields.emplace_back(" }");
|
664
|
+
}
|
665
|
+
// action
|
666
|
+
if (envoy_api_v2_route_Route_has_route(route)) {
|
667
|
+
const envoy_api_v2_route_RouteAction* action =
|
668
|
+
envoy_api_v2_route_Route_route(route);
|
669
|
+
fields.emplace_back(" route {");
|
670
|
+
if (envoy_api_v2_route_RouteAction_has_cluster(action)) {
|
671
|
+
AddStringField(" cluster",
|
672
|
+
envoy_api_v2_route_RouteAction_cluster(action),
|
673
|
+
&fields);
|
674
|
+
} else if (envoy_api_v2_route_RouteAction_has_cluster_header(
|
675
|
+
action)) {
|
676
|
+
AddStringField(
|
677
|
+
" cluster_header",
|
678
|
+
envoy_api_v2_route_RouteAction_cluster_header(action), &fields);
|
679
|
+
} else if (envoy_api_v2_route_RouteAction_has_weighted_clusters(
|
680
|
+
action)) {
|
681
|
+
fields.emplace_back(" weighted_clusters: <not printed>");
|
682
|
+
}
|
683
|
+
fields.emplace_back(" }");
|
684
|
+
} else if (envoy_api_v2_route_Route_has_redirect(route)) {
|
685
|
+
fields.emplace_back(" redirect: <not printed>");
|
686
|
+
} else if (envoy_api_v2_route_Route_has_direct_response(route)) {
|
687
|
+
fields.emplace_back(" direct_response: <not printed>");
|
688
|
+
} else if (envoy_api_v2_route_Route_has_filter_action(route)) {
|
689
|
+
fields.emplace_back(" filter_action: <not printed>");
|
690
|
+
}
|
691
|
+
fields.push_back(" }");
|
692
|
+
}
|
693
|
+
fields.push_back("}");
|
694
|
+
}
|
695
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] RouteConfiguration: %s", client,
|
696
|
+
absl::StrJoin(fields, "\n").c_str());
|
697
|
+
}
|
698
|
+
}
|
699
|
+
|
700
|
+
void MaybeLogCluster(XdsClient* client, TraceFlag* tracer,
|
701
|
+
const envoy_api_v2_Cluster* cluster) {
|
702
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
703
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
704
|
+
// TODO(roth): When we can upgrade upb, use upb textformat code to dump
|
705
|
+
// the raw proto instead of doing this manually.
|
706
|
+
std::vector<std::string> fields;
|
707
|
+
// name
|
708
|
+
AddStringField("name", envoy_api_v2_Cluster_name(cluster), &fields);
|
709
|
+
// type
|
710
|
+
if (envoy_api_v2_Cluster_has_type(cluster)) {
|
711
|
+
fields.emplace_back(
|
712
|
+
absl::StrCat("type: ", envoy_api_v2_Cluster_type(cluster)));
|
713
|
+
} else if (envoy_api_v2_Cluster_has_cluster_type(cluster)) {
|
714
|
+
fields.emplace_back("cluster_type: <not printed>");
|
715
|
+
} else {
|
716
|
+
fields.emplace_back("<unknown type>");
|
717
|
+
}
|
718
|
+
// eds_cluster_config
|
719
|
+
const envoy_api_v2_Cluster_EdsClusterConfig* eds_cluster_config =
|
720
|
+
envoy_api_v2_Cluster_eds_cluster_config(cluster);
|
721
|
+
if (eds_cluster_config != nullptr) {
|
722
|
+
fields.emplace_back("eds_cluster_config {");
|
723
|
+
// eds_config
|
724
|
+
const struct envoy_api_v2_core_ConfigSource* eds_config =
|
725
|
+
envoy_api_v2_Cluster_EdsClusterConfig_eds_config(eds_cluster_config);
|
726
|
+
if (eds_config != nullptr) {
|
727
|
+
if (envoy_api_v2_core_ConfigSource_has_ads(eds_config)) {
|
728
|
+
fields.emplace_back(" eds_config { ads {} }");
|
729
|
+
} else {
|
730
|
+
fields.emplace_back(" eds_config: <non-ADS type>");
|
731
|
+
}
|
732
|
+
}
|
733
|
+
// service_name
|
734
|
+
AddStringField(" service_name",
|
735
|
+
envoy_api_v2_Cluster_EdsClusterConfig_service_name(
|
736
|
+
eds_cluster_config),
|
737
|
+
&fields);
|
738
|
+
fields.emplace_back("}");
|
739
|
+
}
|
740
|
+
// lb_policy
|
741
|
+
fields.emplace_back(
|
742
|
+
absl::StrCat("lb_policy: ", envoy_api_v2_Cluster_lb_policy(cluster)));
|
743
|
+
// lrs_server
|
744
|
+
const envoy_api_v2_core_ConfigSource* lrs_server =
|
745
|
+
envoy_api_v2_Cluster_lrs_server(cluster);
|
746
|
+
if (lrs_server != nullptr) {
|
747
|
+
if (envoy_api_v2_core_ConfigSource_has_self(lrs_server)) {
|
748
|
+
fields.emplace_back("lrs_server { self {} }");
|
749
|
+
} else {
|
750
|
+
fields.emplace_back("lrs_server: <non-self type>");
|
751
|
+
}
|
752
|
+
}
|
753
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] Cluster: %s", client,
|
754
|
+
absl::StrJoin(fields, "\n").c_str());
|
755
|
+
}
|
756
|
+
}
|
757
|
+
|
758
|
+
void MaybeLogClusterLoadAssignment(
|
759
|
+
XdsClient* client, TraceFlag* tracer,
|
760
|
+
const envoy_api_v2_ClusterLoadAssignment* cla) {
|
761
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
762
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
763
|
+
// TODO(roth): When we can upgrade upb, use upb textformat code to dump
|
764
|
+
// the raw proto instead of doing this manually.
|
765
|
+
std::vector<std::string> fields;
|
766
|
+
// cluster_name
|
767
|
+
AddStringField("cluster_name",
|
768
|
+
envoy_api_v2_ClusterLoadAssignment_cluster_name(cla),
|
769
|
+
&fields);
|
770
|
+
// endpoints
|
771
|
+
size_t num_localities;
|
772
|
+
const struct envoy_api_v2_endpoint_LocalityLbEndpoints* const*
|
773
|
+
locality_endpoints =
|
774
|
+
envoy_api_v2_ClusterLoadAssignment_endpoints(cla, &num_localities);
|
775
|
+
for (size_t i = 0; i < num_localities; ++i) {
|
776
|
+
const auto* locality_endpoint = locality_endpoints[i];
|
777
|
+
fields.emplace_back("endpoints {");
|
778
|
+
// locality
|
779
|
+
const auto* locality =
|
780
|
+
envoy_api_v2_endpoint_LocalityLbEndpoints_locality(locality_endpoint);
|
781
|
+
if (locality != nullptr) {
|
782
|
+
fields.emplace_back(" locality {");
|
783
|
+
AddLocalityField(2, locality, &fields);
|
784
|
+
fields.emplace_back(" }");
|
785
|
+
}
|
786
|
+
// lb_endpoints
|
787
|
+
size_t num_lb_endpoints;
|
788
|
+
const envoy_api_v2_endpoint_LbEndpoint* const* lb_endpoints =
|
789
|
+
envoy_api_v2_endpoint_LocalityLbEndpoints_lb_endpoints(
|
790
|
+
locality_endpoint, &num_lb_endpoints);
|
791
|
+
for (size_t j = 0; j < num_lb_endpoints; ++j) {
|
792
|
+
const auto* lb_endpoint = lb_endpoints[j];
|
793
|
+
fields.emplace_back(" lb_endpoints {");
|
794
|
+
// health_status
|
795
|
+
uint32_t health_status =
|
796
|
+
envoy_api_v2_endpoint_LbEndpoint_health_status(lb_endpoint);
|
797
|
+
if (health_status > 0) {
|
798
|
+
fields.emplace_back(
|
799
|
+
absl::StrCat(" health_status: ", health_status));
|
800
|
+
}
|
801
|
+
// endpoint
|
802
|
+
const envoy_api_v2_endpoint_Endpoint* endpoint =
|
803
|
+
envoy_api_v2_endpoint_LbEndpoint_endpoint(lb_endpoint);
|
804
|
+
if (endpoint != nullptr) {
|
805
|
+
fields.emplace_back(" endpoint {");
|
806
|
+
// address
|
807
|
+
const auto* address =
|
808
|
+
envoy_api_v2_endpoint_Endpoint_address(endpoint);
|
809
|
+
if (address != nullptr) {
|
810
|
+
fields.emplace_back(" address {");
|
811
|
+
// socket_address
|
812
|
+
const auto* socket_address =
|
813
|
+
envoy_api_v2_core_Address_socket_address(address);
|
814
|
+
if (socket_address != nullptr) {
|
815
|
+
fields.emplace_back(" socket_address {");
|
816
|
+
// address
|
817
|
+
AddStringField(
|
818
|
+
" address",
|
819
|
+
envoy_api_v2_core_SocketAddress_address(socket_address),
|
820
|
+
&fields);
|
821
|
+
// port_value
|
822
|
+
if (envoy_api_v2_core_SocketAddress_has_port_value(
|
823
|
+
socket_address)) {
|
824
|
+
fields.emplace_back(
|
825
|
+
absl::StrCat(" port_value: ",
|
826
|
+
envoy_api_v2_core_SocketAddress_port_value(
|
827
|
+
socket_address)));
|
828
|
+
} else {
|
829
|
+
fields.emplace_back(" <non-numeric port>");
|
830
|
+
}
|
831
|
+
fields.emplace_back(" }");
|
832
|
+
} else {
|
833
|
+
fields.emplace_back(" <non-socket address>");
|
834
|
+
}
|
835
|
+
fields.emplace_back(" }");
|
836
|
+
}
|
837
|
+
fields.emplace_back(" }");
|
838
|
+
}
|
839
|
+
fields.emplace_back(" }");
|
840
|
+
}
|
841
|
+
// load_balancing_weight
|
842
|
+
const google_protobuf_UInt32Value* lb_weight =
|
843
|
+
envoy_api_v2_endpoint_LocalityLbEndpoints_load_balancing_weight(
|
844
|
+
locality_endpoint);
|
845
|
+
if (lb_weight != nullptr) {
|
846
|
+
fields.emplace_back(
|
847
|
+
absl::StrCat(" load_balancing_weight { value: ",
|
848
|
+
google_protobuf_UInt32Value_value(lb_weight), " }"));
|
849
|
+
}
|
850
|
+
// priority
|
851
|
+
uint32_t priority =
|
852
|
+
envoy_api_v2_endpoint_LocalityLbEndpoints_priority(locality_endpoint);
|
853
|
+
if (priority > 0) {
|
854
|
+
fields.emplace_back(absl::StrCat(" priority: ", priority));
|
855
|
+
}
|
856
|
+
fields.emplace_back("}");
|
857
|
+
}
|
858
|
+
// policy
|
859
|
+
const envoy_api_v2_ClusterLoadAssignment_Policy* policy =
|
860
|
+
envoy_api_v2_ClusterLoadAssignment_policy(cla);
|
861
|
+
if (policy != nullptr) {
|
862
|
+
fields.emplace_back("policy {");
|
863
|
+
// drop_overloads
|
864
|
+
size_t num_drop_overloads;
|
865
|
+
const envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload* const*
|
866
|
+
drop_overloads =
|
867
|
+
envoy_api_v2_ClusterLoadAssignment_Policy_drop_overloads(
|
868
|
+
policy, &num_drop_overloads);
|
869
|
+
for (size_t i = 0; i < num_drop_overloads; ++i) {
|
870
|
+
auto* drop_overload = drop_overloads[i];
|
871
|
+
fields.emplace_back(" drop_overloads {");
|
872
|
+
// category
|
873
|
+
AddStringField(
|
874
|
+
" category",
|
875
|
+
envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload_category(
|
876
|
+
drop_overload),
|
877
|
+
&fields);
|
878
|
+
// drop_percentage
|
879
|
+
const auto* drop_percentage =
|
880
|
+
envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload_drop_percentage(
|
881
|
+
drop_overload);
|
882
|
+
if (drop_percentage != nullptr) {
|
883
|
+
fields.emplace_back(" drop_percentage {");
|
884
|
+
fields.emplace_back(absl::StrCat(
|
885
|
+
" numerator: ",
|
886
|
+
envoy_type_FractionalPercent_numerator(drop_percentage)));
|
887
|
+
fields.emplace_back(absl::StrCat(
|
888
|
+
" denominator: ",
|
889
|
+
envoy_type_FractionalPercent_denominator(drop_percentage)));
|
890
|
+
fields.emplace_back(" }");
|
891
|
+
}
|
892
|
+
fields.emplace_back(" }");
|
893
|
+
}
|
894
|
+
// overprovisioning_factor
|
895
|
+
fields.emplace_back("}");
|
896
|
+
}
|
897
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] ClusterLoadAssignment: %s", client,
|
898
|
+
absl::StrJoin(fields, "\n").c_str());
|
899
|
+
}
|
900
|
+
}
|
901
|
+
|
902
|
+
// Better match type has smaller value.
|
903
|
+
enum MatchType {
|
904
|
+
EXACT_MATCH,
|
905
|
+
SUFFIX_MATCH,
|
906
|
+
PREFIX_MATCH,
|
907
|
+
UNIVERSE_MATCH,
|
908
|
+
INVALID_MATCH,
|
909
|
+
};
|
910
|
+
|
911
|
+
// Returns true if match succeeds.
|
912
|
+
bool DomainMatch(MatchType match_type, std::string domain_pattern,
|
913
|
+
std::string expected_host_name) {
|
914
|
+
// Normalize the args to lower-case. Domain matching is case-insensitive.
|
915
|
+
std::transform(domain_pattern.begin(), domain_pattern.end(),
|
916
|
+
domain_pattern.begin(),
|
917
|
+
[](unsigned char c) { return std::tolower(c); });
|
918
|
+
std::transform(expected_host_name.begin(), expected_host_name.end(),
|
919
|
+
expected_host_name.begin(),
|
920
|
+
[](unsigned char c) { return std::tolower(c); });
|
921
|
+
if (match_type == EXACT_MATCH) {
|
922
|
+
return domain_pattern == expected_host_name;
|
923
|
+
} else if (match_type == SUFFIX_MATCH) {
|
924
|
+
// Asterisk must match at least one char.
|
925
|
+
if (expected_host_name.size() < domain_pattern.size()) return false;
|
926
|
+
StringView pattern_suffix(domain_pattern.c_str() + 1);
|
927
|
+
StringView host_suffix(expected_host_name.c_str() +
|
928
|
+
expected_host_name.size() - pattern_suffix.size());
|
929
|
+
return pattern_suffix == host_suffix;
|
930
|
+
} else if (match_type == PREFIX_MATCH) {
|
931
|
+
// Asterisk must match at least one char.
|
932
|
+
if (expected_host_name.size() < domain_pattern.size()) return false;
|
933
|
+
StringView pattern_prefix(domain_pattern.c_str(),
|
934
|
+
domain_pattern.size() - 1);
|
935
|
+
StringView host_prefix(expected_host_name.c_str(), pattern_prefix.size());
|
936
|
+
return pattern_prefix == host_prefix;
|
937
|
+
} else {
|
938
|
+
return match_type == UNIVERSE_MATCH;
|
939
|
+
}
|
940
|
+
}
|
941
|
+
|
942
|
+
MatchType DomainPatternMatchType(const std::string& domain_pattern) {
|
943
|
+
if (domain_pattern.empty()) return INVALID_MATCH;
|
944
|
+
if (domain_pattern.find('*') == std::string::npos) return EXACT_MATCH;
|
945
|
+
if (domain_pattern == "*") return UNIVERSE_MATCH;
|
946
|
+
if (domain_pattern[0] == '*') return SUFFIX_MATCH;
|
947
|
+
if (domain_pattern[domain_pattern.size() - 1] == '*') return PREFIX_MATCH;
|
948
|
+
return INVALID_MATCH;
|
949
|
+
}
|
950
|
+
|
951
|
+
grpc_error* RouteConfigParse(
|
952
|
+
XdsClient* client, TraceFlag* tracer,
|
953
|
+
const envoy_api_v2_RouteConfiguration* route_config,
|
954
|
+
const std::string& expected_server_name, XdsApi::RdsUpdate* rds_update) {
|
955
|
+
MaybeLogRouteConfiguration(client, tracer, route_config);
|
956
|
+
// Get the virtual hosts.
|
957
|
+
size_t size;
|
958
|
+
const envoy_api_v2_route_VirtualHost* const* virtual_hosts =
|
959
|
+
envoy_api_v2_RouteConfiguration_virtual_hosts(route_config, &size);
|
960
|
+
// Find the best matched virtual host.
|
961
|
+
// The search order for 4 groups of domain patterns:
|
962
|
+
// 1. Exact match.
|
963
|
+
// 2. Suffix match (e.g., "*ABC").
|
964
|
+
// 3. Prefix match (e.g., "ABC*").
|
965
|
+
// 4. Universe match (i.e., "*").
|
966
|
+
// Within each group, longest match wins.
|
967
|
+
// If the same best matched domain pattern appears in multiple virtual hosts,
|
968
|
+
// the first matched virtual host wins.
|
969
|
+
const envoy_api_v2_route_VirtualHost* target_virtual_host = nullptr;
|
970
|
+
MatchType best_match_type = INVALID_MATCH;
|
971
|
+
size_t longest_match = 0;
|
972
|
+
// Check each domain pattern in each virtual host to determine the best
|
973
|
+
// matched virtual host.
|
974
|
+
for (size_t i = 0; i < size; ++i) {
|
975
|
+
size_t domain_size;
|
976
|
+
upb_strview const* domains =
|
977
|
+
envoy_api_v2_route_VirtualHost_domains(virtual_hosts[i], &domain_size);
|
978
|
+
for (size_t j = 0; j < domain_size; ++j) {
|
979
|
+
const std::string domain_pattern(domains[j].data, domains[j].size);
|
980
|
+
// Check the match type first. Skip the pattern if it's not better than
|
981
|
+
// current match.
|
982
|
+
const MatchType match_type = DomainPatternMatchType(domain_pattern);
|
983
|
+
if (match_type == INVALID_MATCH) {
|
984
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid domain pattern.");
|
985
|
+
}
|
986
|
+
if (match_type > best_match_type) continue;
|
987
|
+
if (match_type == best_match_type &&
|
988
|
+
domain_pattern.size() <= longest_match) {
|
989
|
+
continue;
|
990
|
+
}
|
991
|
+
// Skip if match fails.
|
992
|
+
if (!DomainMatch(match_type, domain_pattern, expected_server_name)) {
|
993
|
+
continue;
|
994
|
+
}
|
995
|
+
// Choose this match.
|
996
|
+
target_virtual_host = virtual_hosts[i];
|
997
|
+
best_match_type = match_type;
|
998
|
+
longest_match = domain_pattern.size();
|
999
|
+
if (best_match_type == EXACT_MATCH) break;
|
1000
|
+
}
|
1001
|
+
if (best_match_type == EXACT_MATCH) break;
|
1002
|
+
}
|
1003
|
+
if (target_virtual_host == nullptr) {
|
1004
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1005
|
+
"No matched virtual host found in the route config.");
|
1006
|
+
}
|
1007
|
+
// Get the route list from the matched virtual host.
|
1008
|
+
const envoy_api_v2_route_Route* const* routes =
|
1009
|
+
envoy_api_v2_route_VirtualHost_routes(target_virtual_host, &size);
|
1010
|
+
if (size < 1) {
|
1011
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1012
|
+
"No route found in the virtual host.");
|
1013
|
+
}
|
1014
|
+
// Only look at the last one in the route list (the default route),
|
1015
|
+
const envoy_api_v2_route_Route* route = routes[size - 1];
|
1016
|
+
// Validate that the match field must have a prefix field which is an empty
|
1017
|
+
// string.
|
1018
|
+
const envoy_api_v2_route_RouteMatch* match =
|
1019
|
+
envoy_api_v2_route_Route_match(route);
|
1020
|
+
if (!envoy_api_v2_route_RouteMatch_has_prefix(match)) {
|
1021
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1022
|
+
"No prefix field found in RouteMatch.");
|
1023
|
+
}
|
1024
|
+
const upb_strview prefix = envoy_api_v2_route_RouteMatch_prefix(match);
|
1025
|
+
if (!upb_strview_eql(prefix, upb_strview_makez(""))) {
|
1026
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Prefix is not empty string.");
|
1027
|
+
}
|
1028
|
+
if (!envoy_api_v2_route_Route_has_route(route)) {
|
1029
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1030
|
+
"No RouteAction found in route.");
|
1031
|
+
}
|
1032
|
+
const envoy_api_v2_route_RouteAction* route_action =
|
1033
|
+
envoy_api_v2_route_Route_route(route);
|
1034
|
+
// Get the cluster in the RouteAction.
|
1035
|
+
if (!envoy_api_v2_route_RouteAction_has_cluster(route_action)) {
|
1036
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1037
|
+
"No cluster found in RouteAction.");
|
1038
|
+
}
|
1039
|
+
const upb_strview cluster =
|
1040
|
+
envoy_api_v2_route_RouteAction_cluster(route_action);
|
1041
|
+
rds_update->cluster_name = std::string(cluster.data, cluster.size);
|
1042
|
+
return GRPC_ERROR_NONE;
|
1043
|
+
}
|
1044
|
+
|
1045
|
+
grpc_error* LdsResponseParse(XdsClient* client, TraceFlag* tracer,
|
1046
|
+
const envoy_api_v2_DiscoveryResponse* response,
|
1047
|
+
const std::string& expected_server_name,
|
1048
|
+
absl::optional<XdsApi::LdsUpdate>* lds_update,
|
1049
|
+
upb_arena* arena) {
|
1050
|
+
// Get the resources from the response.
|
1051
|
+
size_t size;
|
1052
|
+
const google_protobuf_Any* const* resources =
|
1053
|
+
envoy_api_v2_DiscoveryResponse_resources(response, &size);
|
1054
|
+
for (size_t i = 0; i < size; ++i) {
|
1055
|
+
// Check the type_url of the resource.
|
1056
|
+
const upb_strview type_url = google_protobuf_Any_type_url(resources[i]);
|
1057
|
+
if (!upb_strview_eql(type_url, upb_strview_makez(XdsApi::kLdsTypeUrl))) {
|
1058
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not LDS.");
|
1059
|
+
}
|
1060
|
+
// Decode the listener.
|
1061
|
+
const upb_strview encoded_listener =
|
1062
|
+
google_protobuf_Any_value(resources[i]);
|
1063
|
+
const envoy_api_v2_Listener* listener = envoy_api_v2_Listener_parse(
|
1064
|
+
encoded_listener.data, encoded_listener.size, arena);
|
1065
|
+
if (listener == nullptr) {
|
1066
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode listener.");
|
1067
|
+
}
|
1068
|
+
// Check listener name. Ignore unexpected listeners.
|
1069
|
+
const upb_strview name = envoy_api_v2_Listener_name(listener);
|
1070
|
+
const upb_strview expected_name =
|
1071
|
+
upb_strview_makez(expected_server_name.c_str());
|
1072
|
+
if (!upb_strview_eql(name, expected_name)) continue;
|
1073
|
+
// Get api_listener and decode it to http_connection_manager.
|
1074
|
+
const envoy_config_listener_v2_ApiListener* api_listener =
|
1075
|
+
envoy_api_v2_Listener_api_listener(listener);
|
1076
|
+
if (api_listener == nullptr) {
|
1077
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1078
|
+
"Listener doesn't have ApiListener.");
|
1079
|
+
}
|
1080
|
+
const upb_strview encoded_api_listener = google_protobuf_Any_value(
|
1081
|
+
envoy_config_listener_v2_ApiListener_api_listener(api_listener));
|
1082
|
+
const envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager*
|
1083
|
+
http_connection_manager =
|
1084
|
+
envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_parse(
|
1085
|
+
encoded_api_listener.data, encoded_api_listener.size, arena);
|
1086
|
+
// Found inlined route_config. Parse it to find the cluster_name.
|
1087
|
+
if (envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_has_route_config(
|
1088
|
+
http_connection_manager)) {
|
1089
|
+
const envoy_api_v2_RouteConfiguration* route_config =
|
1090
|
+
envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_route_config(
|
1091
|
+
http_connection_manager);
|
1092
|
+
XdsApi::RdsUpdate rds_update;
|
1093
|
+
grpc_error* error = RouteConfigParse(client, tracer, route_config,
|
1094
|
+
expected_server_name, &rds_update);
|
1095
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1096
|
+
lds_update->emplace();
|
1097
|
+
(*lds_update)->rds_update.emplace(std::move(rds_update));
|
1098
|
+
return GRPC_ERROR_NONE;
|
1099
|
+
}
|
1100
|
+
// Validate that RDS must be used to get the route_config dynamically.
|
1101
|
+
if (!envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_has_rds(
|
1102
|
+
http_connection_manager)) {
|
1103
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1104
|
+
"HttpConnectionManager neither has inlined route_config nor RDS.");
|
1105
|
+
}
|
1106
|
+
// Get the route_config_name.
|
1107
|
+
const envoy_config_filter_network_http_connection_manager_v2_Rds* rds =
|
1108
|
+
envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_rds(
|
1109
|
+
http_connection_manager);
|
1110
|
+
const upb_strview route_config_name =
|
1111
|
+
envoy_config_filter_network_http_connection_manager_v2_Rds_route_config_name(
|
1112
|
+
rds);
|
1113
|
+
lds_update->emplace();
|
1114
|
+
(*lds_update)->route_config_name =
|
1115
|
+
std::string(route_config_name.data, route_config_name.size);
|
1116
|
+
return GRPC_ERROR_NONE;
|
1117
|
+
}
|
1118
|
+
return GRPC_ERROR_NONE;
|
1119
|
+
}
|
1120
|
+
|
1121
|
+
grpc_error* RdsResponseParse(XdsClient* client, TraceFlag* tracer,
|
1122
|
+
const envoy_api_v2_DiscoveryResponse* response,
|
1123
|
+
const std::string& expected_server_name,
|
1124
|
+
const std::string& expected_route_config_name,
|
1125
|
+
absl::optional<XdsApi::RdsUpdate>* rds_update,
|
1126
|
+
upb_arena* arena) {
|
1127
|
+
// Get the resources from the response.
|
1128
|
+
size_t size;
|
1129
|
+
const google_protobuf_Any* const* resources =
|
1130
|
+
envoy_api_v2_DiscoveryResponse_resources(response, &size);
|
1131
|
+
for (size_t i = 0; i < size; ++i) {
|
1132
|
+
// Check the type_url of the resource.
|
1133
|
+
const upb_strview type_url = google_protobuf_Any_type_url(resources[i]);
|
1134
|
+
if (!upb_strview_eql(type_url, upb_strview_makez(XdsApi::kRdsTypeUrl))) {
|
1135
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not RDS.");
|
1136
|
+
}
|
1137
|
+
// Decode the route_config.
|
1138
|
+
const upb_strview encoded_route_config =
|
1139
|
+
google_protobuf_Any_value(resources[i]);
|
1140
|
+
const envoy_api_v2_RouteConfiguration* route_config =
|
1141
|
+
envoy_api_v2_RouteConfiguration_parse(encoded_route_config.data,
|
1142
|
+
encoded_route_config.size, arena);
|
1143
|
+
if (route_config == nullptr) {
|
1144
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode route_config.");
|
1145
|
+
}
|
1146
|
+
// Check route_config_name. Ignore unexpected route_config.
|
1147
|
+
const upb_strview name = envoy_api_v2_RouteConfiguration_name(route_config);
|
1148
|
+
const upb_strview expected_name =
|
1149
|
+
upb_strview_makez(expected_route_config_name.c_str());
|
1150
|
+
if (!upb_strview_eql(name, expected_name)) continue;
|
1151
|
+
// Parse the route_config.
|
1152
|
+
XdsApi::RdsUpdate local_rds_update;
|
1153
|
+
grpc_error* error = RouteConfigParse(
|
1154
|
+
client, tracer, route_config, expected_server_name, &local_rds_update);
|
1155
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1156
|
+
rds_update->emplace(std::move(local_rds_update));
|
1157
|
+
return GRPC_ERROR_NONE;
|
1158
|
+
}
|
1159
|
+
return GRPC_ERROR_NONE;
|
1160
|
+
}
|
1161
|
+
|
1162
|
+
grpc_error* CdsResponseParse(XdsClient* client, TraceFlag* tracer,
|
1163
|
+
const envoy_api_v2_DiscoveryResponse* response,
|
1164
|
+
const std::set<StringView>& expected_cluster_names,
|
1165
|
+
XdsApi::CdsUpdateMap* cds_update_map,
|
1166
|
+
upb_arena* arena) {
|
1167
|
+
// Get the resources from the response.
|
1168
|
+
size_t size;
|
1169
|
+
const google_protobuf_Any* const* resources =
|
1170
|
+
envoy_api_v2_DiscoveryResponse_resources(response, &size);
|
1171
|
+
// Parse all the resources in the CDS response.
|
1172
|
+
for (size_t i = 0; i < size; ++i) {
|
1173
|
+
XdsApi::CdsUpdate cds_update;
|
1174
|
+
// Check the type_url of the resource.
|
1175
|
+
const upb_strview type_url = google_protobuf_Any_type_url(resources[i]);
|
1176
|
+
if (!upb_strview_eql(type_url, upb_strview_makez(XdsApi::kCdsTypeUrl))) {
|
1177
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not CDS.");
|
1178
|
+
}
|
1179
|
+
// Decode the cluster.
|
1180
|
+
const upb_strview encoded_cluster = google_protobuf_Any_value(resources[i]);
|
1181
|
+
const envoy_api_v2_Cluster* cluster = envoy_api_v2_Cluster_parse(
|
1182
|
+
encoded_cluster.data, encoded_cluster.size, arena);
|
1183
|
+
if (cluster == nullptr) {
|
1184
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode cluster.");
|
1185
|
+
}
|
1186
|
+
MaybeLogCluster(client, tracer, cluster);
|
1187
|
+
// Ignore unexpected cluster names.
|
1188
|
+
upb_strview cluster_name = envoy_api_v2_Cluster_name(cluster);
|
1189
|
+
StringView cluster_name_strview(cluster_name.data, cluster_name.size);
|
1190
|
+
if (expected_cluster_names.find(cluster_name_strview) ==
|
1191
|
+
expected_cluster_names.end()) {
|
1192
|
+
continue;
|
1193
|
+
}
|
1194
|
+
// Check the cluster_discovery_type.
|
1195
|
+
if (!envoy_api_v2_Cluster_has_type(cluster)) {
|
1196
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType not found.");
|
1197
|
+
}
|
1198
|
+
if (envoy_api_v2_Cluster_type(cluster) != envoy_api_v2_Cluster_EDS) {
|
1199
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType is not EDS.");
|
1200
|
+
}
|
1201
|
+
// Check the EDS config source.
|
1202
|
+
const envoy_api_v2_Cluster_EdsClusterConfig* eds_cluster_config =
|
1203
|
+
envoy_api_v2_Cluster_eds_cluster_config(cluster);
|
1204
|
+
const envoy_api_v2_core_ConfigSource* eds_config =
|
1205
|
+
envoy_api_v2_Cluster_EdsClusterConfig_eds_config(eds_cluster_config);
|
1206
|
+
if (!envoy_api_v2_core_ConfigSource_has_ads(eds_config)) {
|
1207
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("ConfigSource is not ADS.");
|
1208
|
+
}
|
1209
|
+
// Record EDS service_name (if any).
|
1210
|
+
upb_strview service_name =
|
1211
|
+
envoy_api_v2_Cluster_EdsClusterConfig_service_name(eds_cluster_config);
|
1212
|
+
if (service_name.size != 0) {
|
1213
|
+
cds_update.eds_service_name =
|
1214
|
+
std::string(service_name.data, service_name.size);
|
1215
|
+
}
|
1216
|
+
// Check the LB policy.
|
1217
|
+
if (envoy_api_v2_Cluster_lb_policy(cluster) !=
|
1218
|
+
envoy_api_v2_Cluster_ROUND_ROBIN) {
|
1219
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1220
|
+
"LB policy is not ROUND_ROBIN.");
|
1221
|
+
}
|
1222
|
+
// Record LRS server name (if any).
|
1223
|
+
const envoy_api_v2_core_ConfigSource* lrs_server =
|
1224
|
+
envoy_api_v2_Cluster_lrs_server(cluster);
|
1225
|
+
if (lrs_server != nullptr) {
|
1226
|
+
if (!envoy_api_v2_core_ConfigSource_has_self(lrs_server)) {
|
1227
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1228
|
+
"ConfigSource is not self.");
|
1229
|
+
}
|
1230
|
+
cds_update.lrs_load_reporting_server_name.emplace("");
|
1231
|
+
}
|
1232
|
+
cds_update_map->emplace(std::string(cluster_name.data, cluster_name.size),
|
1233
|
+
std::move(cds_update));
|
1234
|
+
}
|
1235
|
+
return GRPC_ERROR_NONE;
|
1236
|
+
}
|
1237
|
+
|
225
1238
|
grpc_error* ServerAddressParseAndAppend(
|
226
1239
|
const envoy_api_v2_endpoint_LbEndpoint* lb_endpoint,
|
227
1240
|
ServerAddressList* list) {
|
@@ -257,20 +1270,9 @@ grpc_error* ServerAddressParseAndAppend(
|
|
257
1270
|
return GRPC_ERROR_NONE;
|
258
1271
|
}
|
259
1272
|
|
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
1273
|
grpc_error* LocalityParse(
|
272
1274
|
const envoy_api_v2_endpoint_LocalityLbEndpoints* locality_lb_endpoints,
|
273
|
-
|
1275
|
+
XdsApi::PriorityListUpdate::LocalityMap::Locality* output_locality) {
|
274
1276
|
// Parse LB weight.
|
275
1277
|
const google_protobuf_UInt32Value* lb_weight =
|
276
1278
|
envoy_api_v2_endpoint_LocalityLbEndpoints_load_balancing_weight(
|
@@ -284,10 +1286,12 @@ grpc_error* LocalityParse(
|
|
284
1286
|
// Parse locality name.
|
285
1287
|
const envoy_api_v2_core_Locality* locality =
|
286
1288
|
envoy_api_v2_endpoint_LocalityLbEndpoints_locality(locality_lb_endpoints);
|
1289
|
+
upb_strview region = envoy_api_v2_core_Locality_region(locality);
|
1290
|
+
upb_strview zone = envoy_api_v2_core_Locality_region(locality);
|
1291
|
+
upb_strview sub_zone = envoy_api_v2_core_Locality_sub_zone(locality);
|
287
1292
|
output_locality->name = MakeRefCounted<XdsLocalityName>(
|
288
|
-
|
289
|
-
|
290
|
-
StringCopy(envoy_api_v2_core_Locality_sub_zone(locality)));
|
1293
|
+
std::string(region.data, region.size), std::string(zone.data, zone.size),
|
1294
|
+
std::string(sub_zone.data, sub_zone.size));
|
291
1295
|
// Parse the addresses.
|
292
1296
|
size_t size;
|
293
1297
|
const envoy_api_v2_endpoint_LbEndpoint* const* lb_endpoints =
|
@@ -306,7 +1310,7 @@ grpc_error* LocalityParse(
|
|
306
1310
|
|
307
1311
|
grpc_error* DropParseAndAppend(
|
308
1312
|
const envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload* drop_overload,
|
309
|
-
|
1313
|
+
XdsApi::DropConfig* drop_config) {
|
310
1314
|
// Get the category.
|
311
1315
|
upb_strview category =
|
312
1316
|
envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload_category(
|
@@ -337,84 +1341,270 @@ grpc_error* DropParseAndAppend(
|
|
337
1341
|
}
|
338
1342
|
// Cap numerator to 1000000.
|
339
1343
|
numerator = GPR_MIN(numerator, 1000000);
|
340
|
-
|
341
|
-
|
1344
|
+
drop_config->AddCategory(std::string(category.data, category.size),
|
1345
|
+
numerator);
|
1346
|
+
return GRPC_ERROR_NONE;
|
1347
|
+
}
|
1348
|
+
|
1349
|
+
grpc_error* EdsResponseParse(
|
1350
|
+
XdsClient* client, TraceFlag* tracer,
|
1351
|
+
const envoy_api_v2_DiscoveryResponse* response,
|
1352
|
+
const std::set<StringView>& expected_eds_service_names,
|
1353
|
+
XdsApi::EdsUpdateMap* eds_update_map, upb_arena* arena) {
|
1354
|
+
// Get the resources from the response.
|
1355
|
+
size_t size;
|
1356
|
+
const google_protobuf_Any* const* resources =
|
1357
|
+
envoy_api_v2_DiscoveryResponse_resources(response, &size);
|
1358
|
+
for (size_t i = 0; i < size; ++i) {
|
1359
|
+
XdsApi::EdsUpdate eds_update;
|
1360
|
+
// Check the type_url of the resource.
|
1361
|
+
upb_strview type_url = google_protobuf_Any_type_url(resources[i]);
|
1362
|
+
if (!upb_strview_eql(type_url, upb_strview_makez(XdsApi::kEdsTypeUrl))) {
|
1363
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not EDS.");
|
1364
|
+
}
|
1365
|
+
// Get the cluster_load_assignment.
|
1366
|
+
upb_strview encoded_cluster_load_assignment =
|
1367
|
+
google_protobuf_Any_value(resources[i]);
|
1368
|
+
envoy_api_v2_ClusterLoadAssignment* cluster_load_assignment =
|
1369
|
+
envoy_api_v2_ClusterLoadAssignment_parse(
|
1370
|
+
encoded_cluster_load_assignment.data,
|
1371
|
+
encoded_cluster_load_assignment.size, arena);
|
1372
|
+
if (cluster_load_assignment == nullptr) {
|
1373
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1374
|
+
"Can't parse cluster_load_assignment.");
|
1375
|
+
}
|
1376
|
+
MaybeLogClusterLoadAssignment(client, tracer, cluster_load_assignment);
|
1377
|
+
// Check the cluster name (which actually means eds_service_name). Ignore
|
1378
|
+
// unexpected names.
|
1379
|
+
upb_strview cluster_name = envoy_api_v2_ClusterLoadAssignment_cluster_name(
|
1380
|
+
cluster_load_assignment);
|
1381
|
+
StringView cluster_name_strview(cluster_name.data, cluster_name.size);
|
1382
|
+
if (expected_eds_service_names.find(cluster_name_strview) ==
|
1383
|
+
expected_eds_service_names.end()) {
|
1384
|
+
continue;
|
1385
|
+
}
|
1386
|
+
// Get the endpoints.
|
1387
|
+
size_t locality_size;
|
1388
|
+
const envoy_api_v2_endpoint_LocalityLbEndpoints* const* endpoints =
|
1389
|
+
envoy_api_v2_ClusterLoadAssignment_endpoints(cluster_load_assignment,
|
1390
|
+
&locality_size);
|
1391
|
+
for (size_t j = 0; j < locality_size; ++j) {
|
1392
|
+
XdsApi::PriorityListUpdate::LocalityMap::Locality locality;
|
1393
|
+
grpc_error* error = LocalityParse(endpoints[j], &locality);
|
1394
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1395
|
+
// Filter out locality with weight 0.
|
1396
|
+
if (locality.lb_weight == 0) continue;
|
1397
|
+
eds_update.priority_list_update.Add(locality);
|
1398
|
+
}
|
1399
|
+
for (uint32_t priority = 0;
|
1400
|
+
priority < eds_update.priority_list_update.size(); ++priority) {
|
1401
|
+
auto* locality_map = eds_update.priority_list_update.Find(priority);
|
1402
|
+
if (locality_map == nullptr || locality_map->size() == 0) {
|
1403
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1404
|
+
"EDS update includes sparse priority list");
|
1405
|
+
}
|
1406
|
+
}
|
1407
|
+
// Get the drop config.
|
1408
|
+
eds_update.drop_config = MakeRefCounted<XdsApi::DropConfig>();
|
1409
|
+
const envoy_api_v2_ClusterLoadAssignment_Policy* policy =
|
1410
|
+
envoy_api_v2_ClusterLoadAssignment_policy(cluster_load_assignment);
|
1411
|
+
if (policy != nullptr) {
|
1412
|
+
size_t drop_size;
|
1413
|
+
const envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload* const*
|
1414
|
+
drop_overload =
|
1415
|
+
envoy_api_v2_ClusterLoadAssignment_Policy_drop_overloads(
|
1416
|
+
policy, &drop_size);
|
1417
|
+
for (size_t j = 0; j < drop_size; ++j) {
|
1418
|
+
grpc_error* error =
|
1419
|
+
DropParseAndAppend(drop_overload[j], eds_update.drop_config.get());
|
1420
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1421
|
+
}
|
1422
|
+
}
|
1423
|
+
// Validate the update content.
|
1424
|
+
if (eds_update.priority_list_update.empty() &&
|
1425
|
+
!eds_update.drop_config->drop_all()) {
|
1426
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1427
|
+
"EDS response doesn't contain any valid "
|
1428
|
+
"locality but doesn't require to drop all calls.");
|
1429
|
+
}
|
1430
|
+
eds_update_map->emplace(std::string(cluster_name.data, cluster_name.size),
|
1431
|
+
std::move(eds_update));
|
1432
|
+
}
|
342
1433
|
return GRPC_ERROR_NONE;
|
343
1434
|
}
|
344
1435
|
|
345
1436
|
} // namespace
|
346
1437
|
|
347
|
-
grpc_error*
|
348
|
-
|
1438
|
+
grpc_error* XdsApi::ParseAdsResponse(
|
1439
|
+
const grpc_slice& encoded_response, const std::string& expected_server_name,
|
1440
|
+
const std::string& expected_route_config_name,
|
1441
|
+
const std::set<StringView>& expected_cluster_names,
|
1442
|
+
const std::set<StringView>& expected_eds_service_names,
|
1443
|
+
absl::optional<LdsUpdate>* lds_update,
|
1444
|
+
absl::optional<RdsUpdate>* rds_update, CdsUpdateMap* cds_update_map,
|
1445
|
+
EdsUpdateMap* eds_update_map, std::string* version, std::string* nonce,
|
1446
|
+
std::string* type_url) {
|
349
1447
|
upb::Arena arena;
|
350
1448
|
// Decode the response.
|
351
1449
|
const envoy_api_v2_DiscoveryResponse* response =
|
352
1450
|
envoy_api_v2_DiscoveryResponse_parse(
|
353
1451
|
reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(encoded_response)),
|
354
1452
|
GRPC_SLICE_LENGTH(encoded_response), arena.ptr());
|
355
|
-
//
|
1453
|
+
// If decoding fails, output an empty type_url and return.
|
356
1454
|
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.");
|
1455
|
+
*type_url = "";
|
1456
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1457
|
+
"Can't decode the whole response.");
|
364
1458
|
}
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
1459
|
+
MaybeLogDiscoveryResponse(client_, tracer_, response);
|
1460
|
+
// Record the type_url, the version_info, and the nonce of the response.
|
1461
|
+
upb_strview type_url_strview =
|
1462
|
+
envoy_api_v2_DiscoveryResponse_type_url(response);
|
1463
|
+
*type_url = std::string(type_url_strview.data, type_url_strview.size);
|
1464
|
+
upb_strview version_info =
|
1465
|
+
envoy_api_v2_DiscoveryResponse_version_info(response);
|
1466
|
+
*version = std::string(version_info.data, version_info.size);
|
1467
|
+
upb_strview nonce_strview = envoy_api_v2_DiscoveryResponse_nonce(response);
|
1468
|
+
*nonce = std::string(nonce_strview.data, nonce_strview.size);
|
1469
|
+
// Parse the response according to the resource type.
|
1470
|
+
if (*type_url == kLdsTypeUrl) {
|
1471
|
+
return LdsResponseParse(client_, tracer_, response, expected_server_name,
|
1472
|
+
lds_update, arena.ptr());
|
1473
|
+
} else if (*type_url == kRdsTypeUrl) {
|
1474
|
+
return RdsResponseParse(client_, tracer_, response, expected_server_name,
|
1475
|
+
expected_route_config_name, rds_update,
|
1476
|
+
arena.ptr());
|
1477
|
+
} else if (*type_url == kCdsTypeUrl) {
|
1478
|
+
return CdsResponseParse(client_, tracer_, response, expected_cluster_names,
|
1479
|
+
cds_update_map, arena.ptr());
|
1480
|
+
} else if (*type_url == kEdsTypeUrl) {
|
1481
|
+
return EdsResponseParse(client_, tracer_, response,
|
1482
|
+
expected_eds_service_names, eds_update_map,
|
1483
|
+
arena.ptr());
|
1484
|
+
} else {
|
370
1485
|
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
|
-
}
|
1486
|
+
"Unsupported ADS resource type.");
|
411
1487
|
}
|
412
|
-
return GRPC_ERROR_NONE;
|
413
1488
|
}
|
414
1489
|
|
415
1490
|
namespace {
|
416
1491
|
|
417
|
-
|
1492
|
+
void MaybeLogLrsRequest(
|
1493
|
+
XdsClient* client, TraceFlag* tracer,
|
1494
|
+
const envoy_service_load_stats_v2_LoadStatsRequest* request) {
|
1495
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
1496
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1497
|
+
// TODO(roth): When we can upgrade upb, use upb textformat code to dump
|
1498
|
+
// the raw proto instead of doing this manually.
|
1499
|
+
std::vector<std::string> fields;
|
1500
|
+
// node
|
1501
|
+
const auto* node =
|
1502
|
+
envoy_service_load_stats_v2_LoadStatsRequest_node(request);
|
1503
|
+
if (node != nullptr) {
|
1504
|
+
AddNodeLogFields(node, &fields);
|
1505
|
+
}
|
1506
|
+
// cluster_stats
|
1507
|
+
size_t num_cluster_stats;
|
1508
|
+
const struct envoy_api_v2_endpoint_ClusterStats* const* cluster_stats =
|
1509
|
+
envoy_service_load_stats_v2_LoadStatsRequest_cluster_stats(
|
1510
|
+
request, &num_cluster_stats);
|
1511
|
+
for (size_t i = 0; i < num_cluster_stats; ++i) {
|
1512
|
+
const auto* cluster_stat = cluster_stats[i];
|
1513
|
+
fields.emplace_back("cluster_stats {");
|
1514
|
+
// cluster_name
|
1515
|
+
AddStringField(
|
1516
|
+
" cluster_name",
|
1517
|
+
envoy_api_v2_endpoint_ClusterStats_cluster_name(cluster_stat),
|
1518
|
+
&fields);
|
1519
|
+
// cluster_service_name
|
1520
|
+
AddStringField(
|
1521
|
+
" cluster_service_name",
|
1522
|
+
envoy_api_v2_endpoint_ClusterStats_cluster_service_name(cluster_stat),
|
1523
|
+
&fields);
|
1524
|
+
// upstream_locality_stats
|
1525
|
+
size_t num_stats;
|
1526
|
+
const envoy_api_v2_endpoint_UpstreamLocalityStats* const* stats =
|
1527
|
+
envoy_api_v2_endpoint_ClusterStats_upstream_locality_stats(
|
1528
|
+
cluster_stat, &num_stats);
|
1529
|
+
for (size_t j = 0; j < num_stats; ++j) {
|
1530
|
+
const auto* stat = stats[j];
|
1531
|
+
fields.emplace_back(" upstream_locality_stats {");
|
1532
|
+
// locality
|
1533
|
+
const auto* locality =
|
1534
|
+
envoy_api_v2_endpoint_UpstreamLocalityStats_locality(stat);
|
1535
|
+
if (locality != nullptr) {
|
1536
|
+
fields.emplace_back(" locality {");
|
1537
|
+
AddLocalityField(3, locality, &fields);
|
1538
|
+
fields.emplace_back(" }");
|
1539
|
+
}
|
1540
|
+
// total_successful_requests
|
1541
|
+
fields.emplace_back(absl::StrCat(
|
1542
|
+
" total_successful_requests: ",
|
1543
|
+
envoy_api_v2_endpoint_UpstreamLocalityStats_total_successful_requests(
|
1544
|
+
stat)));
|
1545
|
+
// total_requests_in_progress
|
1546
|
+
fields.emplace_back(absl::StrCat(
|
1547
|
+
" total_requests_in_progress: ",
|
1548
|
+
envoy_api_v2_endpoint_UpstreamLocalityStats_total_requests_in_progress(
|
1549
|
+
stat)));
|
1550
|
+
// total_error_requests
|
1551
|
+
fields.emplace_back(absl::StrCat(
|
1552
|
+
" total_error_requests: ",
|
1553
|
+
envoy_api_v2_endpoint_UpstreamLocalityStats_total_error_requests(
|
1554
|
+
stat)));
|
1555
|
+
// total_issued_requests
|
1556
|
+
fields.emplace_back(absl::StrCat(
|
1557
|
+
" total_issued_requests: ",
|
1558
|
+
envoy_api_v2_endpoint_UpstreamLocalityStats_total_issued_requests(
|
1559
|
+
stat)));
|
1560
|
+
fields.emplace_back(" }");
|
1561
|
+
}
|
1562
|
+
// total_dropped_requests
|
1563
|
+
fields.emplace_back(absl::StrCat(
|
1564
|
+
" total_dropped_requests: ",
|
1565
|
+
envoy_api_v2_endpoint_ClusterStats_total_dropped_requests(
|
1566
|
+
cluster_stat)));
|
1567
|
+
// dropped_requests
|
1568
|
+
size_t num_drops;
|
1569
|
+
const envoy_api_v2_endpoint_ClusterStats_DroppedRequests* const* drops =
|
1570
|
+
envoy_api_v2_endpoint_ClusterStats_dropped_requests(cluster_stat,
|
1571
|
+
&num_drops);
|
1572
|
+
for (size_t j = 0; j < num_drops; ++j) {
|
1573
|
+
const auto* drop = drops[j];
|
1574
|
+
fields.emplace_back(" dropped_requests {");
|
1575
|
+
// category
|
1576
|
+
AddStringField(
|
1577
|
+
" category",
|
1578
|
+
envoy_api_v2_endpoint_ClusterStats_DroppedRequests_category(drop),
|
1579
|
+
&fields);
|
1580
|
+
// dropped_count
|
1581
|
+
fields.emplace_back(absl::StrCat(
|
1582
|
+
" dropped_count: ",
|
1583
|
+
envoy_api_v2_endpoint_ClusterStats_DroppedRequests_dropped_count(
|
1584
|
+
drop)));
|
1585
|
+
fields.emplace_back(" }");
|
1586
|
+
}
|
1587
|
+
// load_report_interval
|
1588
|
+
const auto* load_report_interval =
|
1589
|
+
envoy_api_v2_endpoint_ClusterStats_load_report_interval(cluster_stat);
|
1590
|
+
if (load_report_interval != nullptr) {
|
1591
|
+
fields.emplace_back(" load_report_interval {");
|
1592
|
+
fields.emplace_back(absl::StrCat(
|
1593
|
+
" seconds: ",
|
1594
|
+
google_protobuf_Duration_seconds(load_report_interval)));
|
1595
|
+
fields.emplace_back(
|
1596
|
+
absl::StrCat(" nanos: ",
|
1597
|
+
google_protobuf_Duration_nanos(load_report_interval)));
|
1598
|
+
fields.emplace_back(" }");
|
1599
|
+
}
|
1600
|
+
fields.emplace_back("}");
|
1601
|
+
}
|
1602
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] constructed LRS request: %s", client,
|
1603
|
+
absl::StrJoin(fields, "\n").c_str());
|
1604
|
+
}
|
1605
|
+
}
|
1606
|
+
|
1607
|
+
grpc_slice SerializeLrsRequest(
|
418
1608
|
const envoy_service_load_stats_v2_LoadStatsRequest* request,
|
419
1609
|
upb_arena* arena) {
|
420
1610
|
size_t output_length;
|
@@ -425,9 +1615,7 @@ grpc_slice LrsRequestEncode(
|
|
425
1615
|
|
426
1616
|
} // namespace
|
427
1617
|
|
428
|
-
grpc_slice
|
429
|
-
const XdsBootstrap::Node* node,
|
430
|
-
const char* build_version) {
|
1618
|
+
grpc_slice XdsApi::CreateLrsInitialRequest(const std::string& server_name) {
|
431
1619
|
upb::Arena arena;
|
432
1620
|
// Create a request.
|
433
1621
|
envoy_service_load_stats_v2_LoadStatsRequest* request =
|
@@ -436,33 +1624,35 @@ grpc_slice XdsLrsRequestCreateAndEncode(const char* server_name,
|
|
436
1624
|
envoy_api_v2_core_Node* node_msg =
|
437
1625
|
envoy_service_load_stats_v2_LoadStatsRequest_mutable_node(request,
|
438
1626
|
arena.ptr());
|
439
|
-
PopulateNode(arena.ptr(),
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
envoy_service_load_stats_v2_LoadStatsRequest_add_cluster_stats(
|
444
|
-
request, arena.ptr());
|
445
|
-
// Set the cluster name.
|
446
|
-
envoy_api_v2_endpoint_ClusterStats_set_cluster_name(
|
447
|
-
cluster_stats, upb_strview_makez(server_name));
|
448
|
-
return LrsRequestEncode(request, arena.ptr());
|
1627
|
+
PopulateNode(arena.ptr(), node_, build_version_, user_agent_name_,
|
1628
|
+
server_name, node_msg);
|
1629
|
+
MaybeLogLrsRequest(client_, tracer_, request);
|
1630
|
+
return SerializeLrsRequest(request, arena.ptr());
|
449
1631
|
}
|
450
1632
|
|
451
1633
|
namespace {
|
452
1634
|
|
453
|
-
void LocalityStatsPopulate(
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
// Set sub_zone.
|
1635
|
+
void LocalityStatsPopulate(envoy_api_v2_endpoint_UpstreamLocalityStats* output,
|
1636
|
+
const XdsLocalityName& locality_name,
|
1637
|
+
const XdsClusterLocalityStats::Snapshot& snapshot,
|
1638
|
+
upb_arena* arena) {
|
1639
|
+
// Set locality.
|
459
1640
|
envoy_api_v2_core_Locality* locality =
|
460
1641
|
envoy_api_v2_endpoint_UpstreamLocalityStats_mutable_locality(output,
|
461
1642
|
arena);
|
462
|
-
|
463
|
-
|
1643
|
+
if (!locality_name.region().empty()) {
|
1644
|
+
envoy_api_v2_core_Locality_set_region(
|
1645
|
+
locality, upb_strview_makez(locality_name.region().c_str()));
|
1646
|
+
}
|
1647
|
+
if (!locality_name.zone().empty()) {
|
1648
|
+
envoy_api_v2_core_Locality_set_zone(
|
1649
|
+
locality, upb_strview_makez(locality_name.zone().c_str()));
|
1650
|
+
}
|
1651
|
+
if (!locality_name.sub_zone().empty()) {
|
1652
|
+
envoy_api_v2_core_Locality_set_sub_zone(
|
1653
|
+
locality, upb_strview_makez(locality_name.sub_zone().c_str()));
|
1654
|
+
}
|
464
1655
|
// Set total counts.
|
465
|
-
XdsClientStats::LocalityStats::Snapshot& snapshot = input.second;
|
466
1656
|
envoy_api_v2_endpoint_UpstreamLocalityStats_set_total_successful_requests(
|
467
1657
|
output, snapshot.total_successful_requests);
|
468
1658
|
envoy_api_v2_endpoint_UpstreamLocalityStats_set_total_requests_in_progress(
|
@@ -471,16 +1661,15 @@ void LocalityStatsPopulate(
|
|
471
1661
|
output, snapshot.total_error_requests);
|
472
1662
|
envoy_api_v2_endpoint_UpstreamLocalityStats_set_total_issued_requests(
|
473
1663
|
output, snapshot.total_issued_requests);
|
474
|
-
// Add
|
475
|
-
for (auto& p : snapshot.
|
476
|
-
const
|
477
|
-
const
|
478
|
-
p.second;
|
1664
|
+
// Add backend metrics.
|
1665
|
+
for (const auto& p : snapshot.backend_metrics) {
|
1666
|
+
const std::string& metric_name = p.first;
|
1667
|
+
const XdsClusterLocalityStats::BackendMetric& metric_value = p.second;
|
479
1668
|
envoy_api_v2_endpoint_EndpointLoadMetricStats* load_metric =
|
480
1669
|
envoy_api_v2_endpoint_UpstreamLocalityStats_add_load_metric_stats(
|
481
1670
|
output, arena);
|
482
1671
|
envoy_api_v2_endpoint_EndpointLoadMetricStats_set_metric_name(
|
483
|
-
load_metric,
|
1672
|
+
load_metric, upb_strview_make(metric_name.data(), metric_name.size()));
|
484
1673
|
envoy_api_v2_endpoint_EndpointLoadMetricStats_set_num_requests_finished_with_metric(
|
485
1674
|
load_metric, metric_value.num_requests_finished_with_metric);
|
486
1675
|
envoy_api_v2_endpoint_EndpointLoadMetricStats_set_total_metric_value(
|
@@ -490,62 +1679,73 @@ void LocalityStatsPopulate(
|
|
490
1679
|
|
491
1680
|
} // namespace
|
492
1681
|
|
493
|
-
grpc_slice
|
494
|
-
|
1682
|
+
grpc_slice XdsApi::CreateLrsRequest(
|
1683
|
+
ClusterLoadReportMap cluster_load_report_map) {
|
495
1684
|
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
1685
|
// Create a request.
|
502
1686
|
envoy_service_load_stats_v2_LoadStatsRequest* request =
|
503
1687
|
envoy_service_load_stats_v2_LoadStatsRequest_new(arena.ptr());
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
1688
|
+
for (auto& p : cluster_load_report_map) {
|
1689
|
+
const std::string& cluster_name = p.first.first;
|
1690
|
+
const std::string& eds_service_name = p.first.second;
|
1691
|
+
const ClusterLoadReport& load_report = p.second;
|
1692
|
+
// Add cluster stats.
|
1693
|
+
envoy_api_v2_endpoint_ClusterStats* cluster_stats =
|
1694
|
+
envoy_service_load_stats_v2_LoadStatsRequest_add_cluster_stats(
|
1695
|
+
request, arena.ptr());
|
1696
|
+
// Set the cluster name.
|
1697
|
+
envoy_api_v2_endpoint_ClusterStats_set_cluster_name(
|
1698
|
+
cluster_stats,
|
1699
|
+
upb_strview_make(cluster_name.data(), cluster_name.size()));
|
1700
|
+
// Set EDS service name, if non-empty.
|
1701
|
+
if (!eds_service_name.empty()) {
|
1702
|
+
envoy_api_v2_endpoint_ClusterStats_set_cluster_service_name(
|
1703
|
+
cluster_stats,
|
1704
|
+
upb_strview_make(eds_service_name.data(), eds_service_name.size()));
|
1705
|
+
}
|
1706
|
+
// Add locality stats.
|
1707
|
+
for (const auto& p : load_report.locality_stats) {
|
1708
|
+
const XdsLocalityName& locality_name = *p.first;
|
1709
|
+
const auto& snapshot = p.second;
|
1710
|
+
envoy_api_v2_endpoint_UpstreamLocalityStats* locality_stats =
|
1711
|
+
envoy_api_v2_endpoint_ClusterStats_add_upstream_locality_stats(
|
1712
|
+
cluster_stats, arena.ptr());
|
1713
|
+
LocalityStatsPopulate(locality_stats, locality_name, snapshot,
|
1714
|
+
arena.ptr());
|
1715
|
+
}
|
1716
|
+
// Add dropped requests.
|
1717
|
+
uint64_t total_dropped_requests = 0;
|
1718
|
+
for (const auto& p : load_report.dropped_requests) {
|
1719
|
+
const char* category = p.first.c_str();
|
1720
|
+
const uint64_t count = p.second;
|
1721
|
+
envoy_api_v2_endpoint_ClusterStats_DroppedRequests* dropped_requests =
|
1722
|
+
envoy_api_v2_endpoint_ClusterStats_add_dropped_requests(cluster_stats,
|
1723
|
+
arena.ptr());
|
1724
|
+
envoy_api_v2_endpoint_ClusterStats_DroppedRequests_set_category(
|
1725
|
+
dropped_requests, upb_strview_makez(category));
|
1726
|
+
envoy_api_v2_endpoint_ClusterStats_DroppedRequests_set_dropped_count(
|
1727
|
+
dropped_requests, count);
|
1728
|
+
total_dropped_requests += count;
|
1729
|
+
}
|
1730
|
+
// Set total dropped requests.
|
1731
|
+
envoy_api_v2_endpoint_ClusterStats_set_total_dropped_requests(
|
1732
|
+
cluster_stats, total_dropped_requests);
|
1733
|
+
// Set real load report interval.
|
1734
|
+
gpr_timespec timespec =
|
1735
|
+
grpc_millis_to_timespec(load_report.load_report_interval, GPR_TIMESPAN);
|
1736
|
+
google_protobuf_Duration* load_report_interval =
|
1737
|
+
envoy_api_v2_endpoint_ClusterStats_mutable_load_report_interval(
|
516
1738
|
cluster_stats, arena.ptr());
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
dropped_requests, upb_strview_makez(category));
|
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) {
|
1739
|
+
google_protobuf_Duration_set_seconds(load_report_interval, timespec.tv_sec);
|
1740
|
+
google_protobuf_Duration_set_nanos(load_report_interval, timespec.tv_nsec);
|
1741
|
+
}
|
1742
|
+
MaybeLogLrsRequest(client_, tracer_, request);
|
1743
|
+
return SerializeLrsRequest(request, arena.ptr());
|
1744
|
+
}
|
1745
|
+
|
1746
|
+
grpc_error* XdsApi::ParseLrsResponse(const grpc_slice& encoded_response,
|
1747
|
+
std::set<std::string>* cluster_names,
|
1748
|
+
grpc_millis* load_reporting_interval) {
|
549
1749
|
upb::Arena arena;
|
550
1750
|
// Decode the response.
|
551
1751
|
const envoy_service_load_stats_v2_LoadStatsResponse* decoded_response =
|
@@ -554,19 +1754,16 @@ grpc_error* XdsLrsResponseDecodeAndParse(
|
|
554
1754
|
GRPC_SLICE_LENGTH(encoded_response), arena.ptr());
|
555
1755
|
// Parse the response.
|
556
1756
|
if (decoded_response == nullptr) {
|
557
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("
|
1757
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode response.");
|
558
1758
|
}
|
559
|
-
//
|
1759
|
+
// Store the cluster names.
|
560
1760
|
size_t size;
|
561
1761
|
const upb_strview* clusters =
|
562
1762
|
envoy_service_load_stats_v2_LoadStatsResponse_clusters(decoded_response,
|
563
1763
|
&size);
|
564
|
-
|
565
|
-
|
566
|
-
"The number of clusters (server names) is not 1.");
|
1764
|
+
for (size_t i = 0; i < size; ++i) {
|
1765
|
+
cluster_names->emplace(clusters[i].data, clusters[i].size);
|
567
1766
|
}
|
568
|
-
// Get the cluster name for reporting loads.
|
569
|
-
*cluster_name = StringCopy(clusters[0]);
|
570
1767
|
// Get the load report interval.
|
571
1768
|
const google_protobuf_Duration* load_reporting_interval_duration =
|
572
1769
|
envoy_service_load_stats_v2_LoadStatsResponse_load_reporting_interval(
|