grpc 1.35.0 → 1.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +60 -57
- data/include/grpc/grpc_security.h +16 -11
- data/src/core/ext/filters/client_channel/client_channel.cc +32 -26
- data/src/core/ext/filters/client_channel/client_channel.h +0 -2
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +3 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +8 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +289 -170
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +231 -109
- data/src/core/ext/filters/client_channel/resolver.cc +2 -5
- data/src/core/ext/filters/client_channel/resolver.h +1 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -45
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +29 -41
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +16 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -15
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +362 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +22 -74
- data/src/core/ext/filters/client_channel/server_address.cc +6 -0
- data/src/core/ext/filters/client_channel/server_address.h +31 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +2 -2
- data/src/core/ext/filters/max_age/max_age_filter.cc +35 -32
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +47 -22
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +11 -1
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +62 -18
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +11 -16
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +42 -59
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +75 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +9 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +28 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +41 -7
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -21
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +13 -9
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +37 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +11 -9
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +44 -27
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +42 -16
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +106 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +13 -16
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +51 -42
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +16 -13
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +50 -18
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +4 -7
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +0 -17
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +30 -23
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +85 -73
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -3
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -3
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +0 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +21 -4
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +29 -0
- data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/authority.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
- data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/resource.upb.c +9 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -171
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +405 -420
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +2 -2
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +177 -171
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +88 -88
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +153 -153
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +33 -20
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +56 -59
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +116 -111
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +129 -121
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +21 -24
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +17 -13
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +747 -724
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +369 -376
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +112 -108
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +177 -180
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
- data/src/core/ext/xds/xds_api.cc +738 -567
- data/src/core/ext/xds/xds_api.h +46 -84
- data/src/core/ext/xds/xds_bootstrap.cc +59 -40
- data/src/core/ext/xds/xds_bootstrap.h +12 -4
- data/src/core/ext/xds/xds_certificate_provider.cc +180 -74
- data/src/core/ext/xds/xds_certificate_provider.h +83 -44
- data/src/core/ext/xds/xds_client.cc +13 -11
- data/src/core/ext/xds/xds_client.h +3 -0
- data/src/core/ext/xds/xds_client_stats.cc +2 -1
- data/src/core/ext/xds/xds_server_config_fetcher.cc +147 -11
- data/src/core/lib/channel/handshaker.cc +2 -5
- data/src/core/lib/channel/handshaker.h +1 -1
- data/src/core/lib/gpr/log.cc +6 -1
- data/src/core/lib/gprpp/mpscq.cc +2 -2
- data/src/core/lib/gprpp/ref_counted.h +1 -1
- data/src/core/lib/gprpp/sync.h +129 -40
- data/src/core/lib/gprpp/time_util.cc +77 -0
- data/src/core/lib/gprpp/time_util.h +42 -0
- data/src/core/lib/http/httpcli_security_connector.cc +2 -2
- data/src/core/lib/iomgr/ev_apple.cc +10 -7
- data/src/core/lib/iomgr/ev_epollex_linux.cc +4 -4
- data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -1
- data/src/core/lib/iomgr/sockaddr_utils.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +4 -4
- data/src/core/lib/security/authorization/matchers.cc +339 -0
- data/src/core/lib/security/authorization/matchers.h +158 -0
- data/src/core/lib/security/authorization/mock_cel/activation.h +1 -1
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +9 -7
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
- data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
- data/src/core/lib/security/credentials/credentials.h +2 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +2 -2
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -1
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -1
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -1
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +7 -6
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +0 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +0 -3
- data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
- data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +2 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +2 -1
- data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +128 -59
- data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +3 -0
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +26 -14
- data/src/core/lib/security/transport/security_handshaker.cc +1 -3
- data/src/core/lib/slice/slice_intern.cc +1 -1
- data/src/core/lib/surface/init.cc +13 -15
- data/src/core/lib/surface/server.cc +3 -3
- data/src/core/lib/surface/server.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/metadata.cc +6 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +17 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +16 -21
- data/src/core/tsi/fake_transport_security.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +2 -4
- data/src/core/tsi/ssl_transport_security.cc +0 -3
- data/src/core/tsi/ssl_transport_security.h +0 -3
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +7 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
- data/third_party/boringssl-with-bazel/err_data.c +725 -723
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -10
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -14
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
- data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +9 -1
- data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +128 -38
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +0 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +51 -32
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +147 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +18 -29
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +13 -4
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +29 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +39 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +11 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +25 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +652 -545
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +15 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +12 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +42 -24
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +27 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +287 -98
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +139 -36
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +11 -20
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +10 -5
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +37 -16
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +20 -14
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +7 -8
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +329 -31
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +66 -24
- metadata +77 -65
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -60
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -143
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -84
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -94
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -173
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -92
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
- data/src/core/lib/iomgr/iomgr_posix.h +0 -26
|
@@ -26,8 +26,6 @@
|
|
|
26
26
|
#include "src/core/ext/filters/client_channel/resolver.h"
|
|
27
27
|
#include "src/core/lib/channel/channel_stack.h"
|
|
28
28
|
|
|
29
|
-
extern grpc_core::TraceFlag grpc_client_channel_trace;
|
|
30
|
-
|
|
31
29
|
// Channel arg key for server URI string.
|
|
32
30
|
#define GRPC_ARG_SERVER_URI "grpc.server_uri"
|
|
33
31
|
|
|
@@ -106,7 +106,7 @@ class DefaultConfigSelector : public ConfigSelector {
|
|
|
106
106
|
|
|
107
107
|
// Only comparing the ConfigSelector itself, not the underlying
|
|
108
108
|
// service config, so we always return true.
|
|
109
|
-
bool Equals(const ConfigSelector* other) const override { return true; }
|
|
109
|
+
bool Equals(const ConfigSelector* /*other*/) const override { return true; }
|
|
110
110
|
|
|
111
111
|
CallConfig GetCallConfig(GetCallConfigArgs args) override {
|
|
112
112
|
CallConfig call_config;
|
|
@@ -151,7 +151,7 @@ void HttpConnectHandshaker::OnWriteDone(void* arg, grpc_error* error) {
|
|
|
151
151
|
// If the write failed or we're shutting down, clean up and invoke the
|
|
152
152
|
// callback with the error.
|
|
153
153
|
handshaker->HandshakeFailedLocked(GRPC_ERROR_REF(error));
|
|
154
|
-
lock.
|
|
154
|
+
lock.Release();
|
|
155
155
|
handshaker->Unref();
|
|
156
156
|
} else {
|
|
157
157
|
// Otherwise, read the response.
|
|
@@ -256,7 +256,7 @@ done:
|
|
|
256
256
|
// Set shutdown to true so that subsequent calls to
|
|
257
257
|
// http_connect_handshaker_shutdown() do nothing.
|
|
258
258
|
handshaker->is_shutdown_ = true;
|
|
259
|
-
lock.
|
|
259
|
+
lock.Release();
|
|
260
260
|
handshaker->Unref();
|
|
261
261
|
}
|
|
262
262
|
|
|
@@ -1259,12 +1259,10 @@ ServerAddressList ExtractBalancerAddresses(const grpc_channel_args& args) {
|
|
|
1259
1259
|
* stream for the reception of load balancing updates.
|
|
1260
1260
|
*
|
|
1261
1261
|
* Inputs:
|
|
1262
|
-
* - \a addresses: corresponding to the balancers.
|
|
1263
1262
|
* - \a response_generator: in order to propagate updates from the resolver
|
|
1264
1263
|
* above the grpclb policy.
|
|
1265
1264
|
* - \a args: other args inherited from the grpclb policy. */
|
|
1266
1265
|
grpc_channel_args* BuildBalancerChannelArgs(
|
|
1267
|
-
const ServerAddressList& addresses,
|
|
1268
1266
|
FakeResolverResponseGenerator* response_generator,
|
|
1269
1267
|
const grpc_channel_args* args) {
|
|
1270
1268
|
// Channel args to remove.
|
|
@@ -1313,7 +1311,7 @@ grpc_channel_args* BuildBalancerChannelArgs(
|
|
|
1313
1311
|
args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), args_to_add.data(),
|
|
1314
1312
|
args_to_add.size());
|
|
1315
1313
|
// Make any necessary modifications for security.
|
|
1316
|
-
return ModifyGrpclbBalancerChannelArgs(
|
|
1314
|
+
return ModifyGrpclbBalancerChannelArgs(new_args);
|
|
1317
1315
|
}
|
|
1318
1316
|
|
|
1319
1317
|
//
|
|
@@ -1464,8 +1462,8 @@ void GrpcLb::ProcessAddressesAndChannelArgsLocked(
|
|
|
1464
1462
|
&args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &new_arg, 1);
|
|
1465
1463
|
// Construct args for balancer channel.
|
|
1466
1464
|
ServerAddressList balancer_addresses = ExtractBalancerAddresses(args);
|
|
1467
|
-
grpc_channel_args* lb_channel_args =
|
|
1468
|
-
|
|
1465
|
+
grpc_channel_args* lb_channel_args =
|
|
1466
|
+
BuildBalancerChannelArgs(response_generator_.get(), &args);
|
|
1469
1467
|
// Create balancer channel if needed.
|
|
1470
1468
|
if (lb_channel_ == nullptr) {
|
|
1471
1469
|
std::string uri_str = absl::StrCat("fake:///", server_name_);
|
|
@@ -33,8 +33,7 @@ namespace grpc_core {
|
|
|
33
33
|
/// Takes ownership of \a args.
|
|
34
34
|
///
|
|
35
35
|
/// Caller takes ownership of the returned args.
|
|
36
|
-
grpc_channel_args* ModifyGrpclbBalancerChannelArgs(
|
|
37
|
-
const ServerAddressList& addresses, grpc_channel_args* args);
|
|
36
|
+
grpc_channel_args* ModifyGrpclbBalancerChannelArgs(grpc_channel_args* args);
|
|
38
37
|
|
|
39
38
|
grpc_channel* CreateGrpclbBalancerChannel(const char* target_uri,
|
|
40
39
|
const grpc_channel_args& args);
|
|
@@ -39,8 +39,7 @@
|
|
|
39
39
|
|
|
40
40
|
namespace grpc_core {
|
|
41
41
|
|
|
42
|
-
grpc_channel_args* ModifyGrpclbBalancerChannelArgs(
|
|
43
|
-
const ServerAddressList& addresses, grpc_channel_args* args) {
|
|
42
|
+
grpc_channel_args* ModifyGrpclbBalancerChannelArgs(grpc_channel_args* args) {
|
|
44
43
|
absl::InlinedVector<const char*, 1> args_to_remove;
|
|
45
44
|
absl::InlinedVector<grpc_arg, 1> args_to_add;
|
|
46
45
|
// Substitute the channel credentials with a version without call
|
|
@@ -497,7 +497,7 @@ class PickFirstFactory : public LoadBalancingPolicyFactory {
|
|
|
497
497
|
const char* name() const override { return kPickFirst; }
|
|
498
498
|
|
|
499
499
|
RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
|
|
500
|
-
const Json& json
|
|
500
|
+
const Json& /*json*/, grpc_error** /*error*/) const override {
|
|
501
501
|
return MakeRefCounted<PickFirstConfig>();
|
|
502
502
|
}
|
|
503
503
|
};
|
|
@@ -363,8 +363,10 @@ void PriorityLb::HandleChildConnectivityStateChangeLocked(
|
|
|
363
363
|
// Otherwise, find the child's priority.
|
|
364
364
|
uint32_t child_priority = GetChildPriorityLocked(child->name());
|
|
365
365
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
|
|
366
|
-
gpr_log(GPR_INFO,
|
|
367
|
-
|
|
366
|
+
gpr_log(GPR_INFO,
|
|
367
|
+
"[priority_lb %p] state update for priority %u, child %s, current "
|
|
368
|
+
"priority %u",
|
|
369
|
+
this, child_priority, child->name().c_str(), current_priority_);
|
|
368
370
|
}
|
|
369
371
|
// Ignore priorities not in the current config.
|
|
370
372
|
if (child_priority == UINT32_MAX) return;
|
|
@@ -412,12 +414,13 @@ void PriorityLb::DeleteChild(ChildPriority* child) {
|
|
|
412
414
|
}
|
|
413
415
|
|
|
414
416
|
void PriorityLb::TryNextPriorityLocked(bool report_connecting) {
|
|
417
|
+
current_priority_ = UINT32_MAX;
|
|
415
418
|
for (uint32_t priority = 0; priority < config_->priorities().size();
|
|
416
419
|
++priority) {
|
|
417
420
|
// If the child for the priority does not exist yet, create it.
|
|
418
421
|
const std::string& child_name = config_->priorities()[priority];
|
|
419
422
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
|
|
420
|
-
gpr_log(GPR_INFO, "[priority_lb %p] trying priority %
|
|
423
|
+
gpr_log(GPR_INFO, "[priority_lb %p] trying priority %u, child %s", this,
|
|
421
424
|
priority, child_name.c_str());
|
|
422
425
|
}
|
|
423
426
|
auto& child = children_[child_name];
|
|
@@ -448,7 +451,7 @@ void PriorityLb::TryNextPriorityLocked(bool report_connecting) {
|
|
|
448
451
|
if (child->failover_timer_callback_pending()) {
|
|
449
452
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
|
|
450
453
|
gpr_log(GPR_INFO,
|
|
451
|
-
"[priority_lb %p] priority %
|
|
454
|
+
"[priority_lb %p] priority %u, child %s: child still "
|
|
452
455
|
"attempting to connect, will wait",
|
|
453
456
|
this, priority, child_name.c_str());
|
|
454
457
|
}
|
|
@@ -468,7 +471,6 @@ void PriorityLb::TryNextPriorityLocked(bool report_connecting) {
|
|
|
468
471
|
"TRANSIENT_FAILURE",
|
|
469
472
|
this);
|
|
470
473
|
}
|
|
471
|
-
current_priority_ = UINT32_MAX;
|
|
472
474
|
current_child_from_before_update_ = nullptr;
|
|
473
475
|
grpc_error* error = grpc_error_set_int(
|
|
474
476
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("no ready priority"),
|
|
@@ -480,7 +482,7 @@ void PriorityLb::TryNextPriorityLocked(bool report_connecting) {
|
|
|
480
482
|
|
|
481
483
|
void PriorityLb::SelectPriorityLocked(uint32_t priority) {
|
|
482
484
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
|
|
483
|
-
gpr_log(GPR_INFO, "[priority_lb %p] selected priority %
|
|
485
|
+
gpr_log(GPR_INFO, "[priority_lb %p] selected priority %u, child %s", this,
|
|
484
486
|
priority, config_->priorities()[priority].c_str());
|
|
485
487
|
}
|
|
486
488
|
current_priority_ = priority;
|
|
@@ -63,26 +63,31 @@ class CdsLb : public LoadBalancingPolicy {
|
|
|
63
63
|
|
|
64
64
|
void UpdateLocked(UpdateArgs args) override;
|
|
65
65
|
void ResetBackoffLocked() override;
|
|
66
|
+
void ExitIdleLocked() override;
|
|
66
67
|
|
|
67
68
|
private:
|
|
68
69
|
// Watcher for getting cluster data from XdsClient.
|
|
69
70
|
class ClusterWatcher : public XdsClient::ClusterWatcherInterface {
|
|
70
71
|
public:
|
|
71
|
-
|
|
72
|
-
: parent_(std::move(parent)) {}
|
|
72
|
+
ClusterWatcher(RefCountedPtr<CdsLb> parent, std::string name)
|
|
73
|
+
: parent_(std::move(parent)), name_(std::move(name)) {}
|
|
73
74
|
|
|
74
75
|
void OnClusterChanged(XdsApi::CdsUpdate cluster_data) override {
|
|
75
|
-
new Notifier(parent_, std::move(cluster_data));
|
|
76
|
+
new Notifier(parent_, name_, std::move(cluster_data));
|
|
76
77
|
}
|
|
77
|
-
void OnError(grpc_error* error) override {
|
|
78
|
-
|
|
78
|
+
void OnError(grpc_error* error) override {
|
|
79
|
+
new Notifier(parent_, name_, error);
|
|
80
|
+
}
|
|
81
|
+
void OnResourceDoesNotExist() override { new Notifier(parent_, name_); }
|
|
79
82
|
|
|
80
83
|
private:
|
|
81
84
|
class Notifier {
|
|
82
85
|
public:
|
|
83
|
-
Notifier(RefCountedPtr<CdsLb> parent,
|
|
84
|
-
|
|
85
|
-
|
|
86
|
+
Notifier(RefCountedPtr<CdsLb> parent, std::string name,
|
|
87
|
+
XdsApi::CdsUpdate update);
|
|
88
|
+
Notifier(RefCountedPtr<CdsLb> parent, std::string name,
|
|
89
|
+
grpc_error* error);
|
|
90
|
+
explicit Notifier(RefCountedPtr<CdsLb> parent, std::string name);
|
|
86
91
|
|
|
87
92
|
private:
|
|
88
93
|
enum Type { kUpdate, kError, kDoesNotExist };
|
|
@@ -91,12 +96,22 @@ class CdsLb : public LoadBalancingPolicy {
|
|
|
91
96
|
void RunInWorkSerializer(grpc_error* error);
|
|
92
97
|
|
|
93
98
|
RefCountedPtr<CdsLb> parent_;
|
|
99
|
+
std::string name_;
|
|
94
100
|
grpc_closure closure_;
|
|
95
101
|
XdsApi::CdsUpdate update_;
|
|
96
102
|
Type type_;
|
|
97
103
|
};
|
|
98
104
|
|
|
99
105
|
RefCountedPtr<CdsLb> parent_;
|
|
106
|
+
std::string name_;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
struct WatcherState {
|
|
110
|
+
// Pointer to watcher, to be used when cancelling.
|
|
111
|
+
// Not owned, so do not dereference.
|
|
112
|
+
ClusterWatcher* watcher = nullptr;
|
|
113
|
+
// Most recent update obtained from this watcher.
|
|
114
|
+
absl::optional<XdsApi::CdsUpdate> update;
|
|
100
115
|
};
|
|
101
116
|
|
|
102
117
|
// Delegating helper to be passed to child policy.
|
|
@@ -119,12 +134,20 @@ class CdsLb : public LoadBalancingPolicy {
|
|
|
119
134
|
|
|
120
135
|
void ShutdownLocked() override;
|
|
121
136
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
137
|
+
bool GenerateDiscoveryMechanismForCluster(
|
|
138
|
+
const std::string& name, Json::Array* discovery_mechanisms,
|
|
139
|
+
std::set<std::string>* clusters_needed);
|
|
140
|
+
void OnClusterChanged(const std::string& name,
|
|
141
|
+
XdsApi::CdsUpdate cluster_data);
|
|
142
|
+
void OnError(const std::string& name, grpc_error* error);
|
|
143
|
+
void OnResourceDoesNotExist(const std::string& name);
|
|
125
144
|
|
|
126
145
|
grpc_error* UpdateXdsCertificateProvider(
|
|
127
|
-
const XdsApi::CdsUpdate& cluster_data);
|
|
146
|
+
const std::string& cluster_name, const XdsApi::CdsUpdate& cluster_data);
|
|
147
|
+
|
|
148
|
+
void CancelClusterDataWatch(absl::string_view cluster_name,
|
|
149
|
+
XdsClient::ClusterWatcherInterface* watcher,
|
|
150
|
+
bool delay_unsubscription = false);
|
|
128
151
|
|
|
129
152
|
void MaybeDestroyChildPolicyLocked();
|
|
130
153
|
|
|
@@ -135,9 +158,10 @@ class CdsLb : public LoadBalancingPolicy {
|
|
|
135
158
|
|
|
136
159
|
// The xds client.
|
|
137
160
|
RefCountedPtr<XdsClient> xds_client_;
|
|
138
|
-
|
|
139
|
-
//
|
|
140
|
-
|
|
161
|
+
|
|
162
|
+
// Maps from cluster name to the state for that cluster.
|
|
163
|
+
// The root of the tree is config_->cluster().
|
|
164
|
+
std::map<std::string, WatcherState> watchers_;
|
|
141
165
|
|
|
142
166
|
RefCountedPtr<grpc_tls_certificate_provider> root_certificate_provider_;
|
|
143
167
|
RefCountedPtr<grpc_tls_certificate_provider> identity_certificate_provider_;
|
|
@@ -155,21 +179,26 @@ class CdsLb : public LoadBalancingPolicy {
|
|
|
155
179
|
//
|
|
156
180
|
|
|
157
181
|
CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent,
|
|
182
|
+
std::string name,
|
|
158
183
|
XdsApi::CdsUpdate update)
|
|
159
|
-
: parent_(std::move(parent)),
|
|
184
|
+
: parent_(std::move(parent)),
|
|
185
|
+
name_(std::move(name)),
|
|
186
|
+
update_(std::move(update)),
|
|
187
|
+
type_(kUpdate) {
|
|
160
188
|
GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
|
|
161
189
|
ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
|
|
162
190
|
}
|
|
163
191
|
|
|
164
192
|
CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent,
|
|
165
|
-
grpc_error* error)
|
|
166
|
-
: parent_(std::move(parent)), type_(kError) {
|
|
193
|
+
std::string name, grpc_error* error)
|
|
194
|
+
: parent_(std::move(parent)), name_(std::move(name)), type_(kError) {
|
|
167
195
|
GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
|
|
168
196
|
ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
|
|
169
197
|
}
|
|
170
198
|
|
|
171
|
-
CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent
|
|
172
|
-
|
|
199
|
+
CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent,
|
|
200
|
+
std::string name)
|
|
201
|
+
: parent_(std::move(parent)), name_(std::move(name)), type_(kDoesNotExist) {
|
|
173
202
|
GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
|
|
174
203
|
ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
|
|
175
204
|
}
|
|
@@ -185,13 +214,13 @@ void CdsLb::ClusterWatcher::Notifier::RunInExecCtx(void* arg,
|
|
|
185
214
|
void CdsLb::ClusterWatcher::Notifier::RunInWorkSerializer(grpc_error* error) {
|
|
186
215
|
switch (type_) {
|
|
187
216
|
case kUpdate:
|
|
188
|
-
parent_->OnClusterChanged(std::move(update_));
|
|
217
|
+
parent_->OnClusterChanged(name_, std::move(update_));
|
|
189
218
|
break;
|
|
190
219
|
case kError:
|
|
191
|
-
parent_->OnError(error);
|
|
220
|
+
parent_->OnError(name_, error);
|
|
192
221
|
break;
|
|
193
222
|
case kDoesNotExist:
|
|
194
|
-
parent_->OnResourceDoesNotExist();
|
|
223
|
+
parent_->OnResourceDoesNotExist(name_);
|
|
195
224
|
break;
|
|
196
225
|
};
|
|
197
226
|
delete this;
|
|
@@ -261,13 +290,15 @@ void CdsLb::ShutdownLocked() {
|
|
|
261
290
|
shutting_down_ = true;
|
|
262
291
|
MaybeDestroyChildPolicyLocked();
|
|
263
292
|
if (xds_client_ != nullptr) {
|
|
264
|
-
|
|
293
|
+
for (auto& watcher : watchers_) {
|
|
265
294
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
|
|
266
295
|
gpr_log(GPR_INFO, "[cdslb %p] cancelling watch for cluster %s", this,
|
|
267
|
-
|
|
296
|
+
watcher.first.c_str());
|
|
268
297
|
}
|
|
269
|
-
|
|
298
|
+
CancelClusterDataWatch(watcher.first, watcher.second.watcher,
|
|
299
|
+
/*delay_unsubscription=*/false);
|
|
270
300
|
}
|
|
301
|
+
watchers_.clear();
|
|
271
302
|
xds_client_.reset(DEBUG_LOCATION, "CdsLb");
|
|
272
303
|
}
|
|
273
304
|
grpc_channel_args_destroy(args_);
|
|
@@ -286,6 +317,10 @@ void CdsLb::ResetBackoffLocked() {
|
|
|
286
317
|
if (child_policy_ != nullptr) child_policy_->ResetBackoffLocked();
|
|
287
318
|
}
|
|
288
319
|
|
|
320
|
+
void CdsLb::ExitIdleLocked() {
|
|
321
|
+
if (child_policy_ != nullptr) child_policy_->ExitIdleLocked();
|
|
322
|
+
}
|
|
323
|
+
|
|
289
324
|
void CdsLb::UpdateLocked(UpdateArgs args) {
|
|
290
325
|
// Update config.
|
|
291
326
|
auto old_config = std::move(config_);
|
|
@@ -301,119 +336,214 @@ void CdsLb::UpdateLocked(UpdateArgs args) {
|
|
|
301
336
|
// If cluster name changed, cancel watcher and restart.
|
|
302
337
|
if (old_config == nullptr || old_config->cluster() != config_->cluster()) {
|
|
303
338
|
if (old_config != nullptr) {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
339
|
+
for (auto& watcher : watchers_) {
|
|
340
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
|
|
341
|
+
gpr_log(GPR_INFO, "[cdslb %p] cancelling watch for cluster %s", this,
|
|
342
|
+
watcher.first.c_str());
|
|
343
|
+
}
|
|
344
|
+
CancelClusterDataWatch(watcher.first, watcher.second.watcher,
|
|
345
|
+
/*delay_unsubscription=*/true);
|
|
307
346
|
}
|
|
308
|
-
|
|
309
|
-
cluster_watcher_,
|
|
310
|
-
/*delay_unsubscription=*/true);
|
|
347
|
+
watchers_.clear();
|
|
311
348
|
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
config_->cluster().c_str());
|
|
315
|
-
}
|
|
316
|
-
auto watcher = absl::make_unique<ClusterWatcher>(Ref());
|
|
317
|
-
cluster_watcher_ = watcher.get();
|
|
349
|
+
auto watcher = absl::make_unique<ClusterWatcher>(Ref(), config_->cluster());
|
|
350
|
+
watchers_[config_->cluster()].watcher = watcher.get();
|
|
318
351
|
xds_client_->WatchClusterData(config_->cluster(), std::move(watcher));
|
|
319
352
|
}
|
|
320
353
|
}
|
|
321
354
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
355
|
+
// This method will attempt to generate one or multiple entries of discovery
|
|
356
|
+
// mechanism recursively:
|
|
357
|
+
// For cluster types EDS or LOGICAL_DNS, one discovery mechanism entry may be
|
|
358
|
+
// generated cluster name, type and other data from the CdsUpdate inserted into
|
|
359
|
+
// the entry and the entry appended to the array of entries.
|
|
360
|
+
// Note, discovery mechanism entry can be generated if an CdsUpdate is
|
|
361
|
+
// available; otherwise, just return false. For cluster type AGGREGATE,
|
|
362
|
+
// recursively call the method for each child cluster.
|
|
363
|
+
bool CdsLb::GenerateDiscoveryMechanismForCluster(
|
|
364
|
+
const std::string& name, Json::Array* discovery_mechanisms,
|
|
365
|
+
std::set<std::string>* clusters_needed) {
|
|
366
|
+
clusters_needed->insert(name);
|
|
367
|
+
auto& state = watchers_[name];
|
|
368
|
+
// Create a new watcher if needed.
|
|
369
|
+
if (state.watcher == nullptr) {
|
|
370
|
+
auto watcher = absl::make_unique<ClusterWatcher>(Ref(), name);
|
|
371
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
|
|
372
|
+
gpr_log(GPR_INFO, "[cdslb %p] starting watch for cluster %s", this,
|
|
373
|
+
name.c_str());
|
|
374
|
+
}
|
|
375
|
+
state.watcher = watcher.get();
|
|
376
|
+
xds_client_->WatchClusterData(name, std::move(watcher));
|
|
377
|
+
return false;
|
|
326
378
|
}
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
379
|
+
// Don't have the update we need yet.
|
|
380
|
+
if (!state.update.has_value()) return false;
|
|
381
|
+
// For AGGREGATE clusters, recursively expand to child clusters.
|
|
382
|
+
if (state.update->cluster_type == XdsApi::CdsUpdate::ClusterType::AGGREGATE) {
|
|
383
|
+
bool missing_cluster = false;
|
|
384
|
+
for (const std::string& child_name :
|
|
385
|
+
state.update->prioritized_cluster_names) {
|
|
386
|
+
if (!GenerateDiscoveryMechanismForCluster(
|
|
387
|
+
child_name, discovery_mechanisms, clusters_needed)) {
|
|
388
|
+
missing_cluster = true;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
return !missing_cluster;
|
|
392
|
+
}
|
|
393
|
+
std::string type;
|
|
394
|
+
switch (state.update->cluster_type) {
|
|
395
|
+
case XdsApi::CdsUpdate::ClusterType::EDS:
|
|
396
|
+
type = "EDS";
|
|
397
|
+
break;
|
|
398
|
+
case XdsApi::CdsUpdate::ClusterType::LOGICAL_DNS:
|
|
399
|
+
type = "LOGICAL_DNS";
|
|
400
|
+
break;
|
|
401
|
+
default:
|
|
402
|
+
GPR_ASSERT(0);
|
|
403
|
+
break;
|
|
331
404
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
{"
|
|
335
|
-
{"
|
|
336
|
-
{"type", "EDS"},
|
|
405
|
+
Json::Object mechanism = {
|
|
406
|
+
{"clusterName", name},
|
|
407
|
+
{"max_concurrent_requests", state.update->max_concurrent_requests},
|
|
408
|
+
{"type", std::move(type)},
|
|
337
409
|
};
|
|
338
|
-
if (!
|
|
339
|
-
|
|
410
|
+
if (!state.update->eds_service_name.empty()) {
|
|
411
|
+
mechanism["edsServiceName"] = state.update->eds_service_name;
|
|
340
412
|
}
|
|
341
|
-
if (
|
|
342
|
-
|
|
343
|
-
|
|
413
|
+
if (state.update->lrs_load_reporting_server_name.has_value()) {
|
|
414
|
+
mechanism["lrsLoadReportingServerName"] =
|
|
415
|
+
state.update->lrs_load_reporting_server_name.value();
|
|
344
416
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
Json::Array{
|
|
352
|
-
Json::Object{
|
|
353
|
-
{"weighted_target_experimental",
|
|
354
|
-
Json::Object{
|
|
355
|
-
{"targets", Json::Object()},
|
|
356
|
-
}},
|
|
357
|
-
},
|
|
358
|
-
}},
|
|
359
|
-
{"endpointPickingPolicy",
|
|
360
|
-
Json::Array{
|
|
361
|
-
Json::Object{
|
|
362
|
-
{"round_robin", Json::Object()},
|
|
363
|
-
},
|
|
364
|
-
}},
|
|
365
|
-
};
|
|
366
|
-
Json json = Json::Array{
|
|
367
|
-
Json::Object{
|
|
368
|
-
{"xds_cluster_resolver_experimental", std::move(child_config)},
|
|
369
|
-
},
|
|
370
|
-
};
|
|
417
|
+
discovery_mechanisms->emplace_back(std::move(mechanism));
|
|
418
|
+
return true;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
void CdsLb::OnClusterChanged(const std::string& name,
|
|
422
|
+
XdsApi::CdsUpdate cluster_data) {
|
|
371
423
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
424
|
+
gpr_log(
|
|
425
|
+
GPR_INFO,
|
|
426
|
+
"[cdslb %p] received CDS update for cluster %s from xds client %p: %s",
|
|
427
|
+
this, name.c_str(), xds_client_.get(), cluster_data.ToString().c_str());
|
|
375
428
|
}
|
|
376
|
-
|
|
377
|
-
|
|
429
|
+
// Store the update in the map if we are still interested in watching this
|
|
430
|
+
// cluster (i.e., it is not cancelled already).
|
|
431
|
+
// If we've already deleted this entry, then this is an update notification
|
|
432
|
+
// that was scheduled before the deletion, so we can just ignore it.
|
|
433
|
+
auto it = watchers_.find(name);
|
|
434
|
+
if (it == watchers_.end()) return;
|
|
435
|
+
it->second.update = cluster_data;
|
|
436
|
+
// Take care of integration with new certificate code.
|
|
437
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
|
438
|
+
error = UpdateXdsCertificateProvider(name, it->second.update.value());
|
|
378
439
|
if (error != GRPC_ERROR_NONE) {
|
|
379
|
-
OnError(error);
|
|
380
|
-
return;
|
|
440
|
+
return OnError(name, error);
|
|
381
441
|
}
|
|
382
|
-
//
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
442
|
+
// Scan the map starting from the root cluster to generate the list of
|
|
443
|
+
// discovery mechanisms. If we don't have some of the data we need (i.e., we
|
|
444
|
+
// just started up and not all watchers have returned data yet), then don't
|
|
445
|
+
// update the child policy at all.
|
|
446
|
+
Json::Array discovery_mechanisms;
|
|
447
|
+
std::set<std::string> clusters_needed;
|
|
448
|
+
if (GenerateDiscoveryMechanismForCluster(
|
|
449
|
+
config_->cluster(), &discovery_mechanisms, &clusters_needed)) {
|
|
450
|
+
// Construct config for child policy.
|
|
451
|
+
Json::Object xds_lb_policy;
|
|
452
|
+
if (cluster_data.lb_policy == "RING_HASH") {
|
|
453
|
+
std::string hash_function;
|
|
454
|
+
switch (cluster_data.hash_function) {
|
|
455
|
+
case XdsApi::CdsUpdate::HashFunction::XX_HASH:
|
|
456
|
+
hash_function = "XX_HASH";
|
|
457
|
+
break;
|
|
458
|
+
case XdsApi::CdsUpdate::HashFunction::MURMUR_HASH_2:
|
|
459
|
+
hash_function = "MURMUR_HASH_2";
|
|
460
|
+
break;
|
|
461
|
+
default:
|
|
462
|
+
GPR_ASSERT(0);
|
|
463
|
+
break;
|
|
464
|
+
}
|
|
465
|
+
xds_lb_policy["RING_HASH"] = Json::Object{
|
|
466
|
+
{"min_ring_size", cluster_data.min_ring_size},
|
|
467
|
+
{"max_ring_size", cluster_data.max_ring_size},
|
|
468
|
+
{"hash_function", hash_function},
|
|
469
|
+
};
|
|
470
|
+
} else {
|
|
471
|
+
xds_lb_policy["ROUND_ROBIN"] = Json::Object();
|
|
394
472
|
}
|
|
395
|
-
|
|
396
|
-
|
|
473
|
+
Json::Object child_config = {
|
|
474
|
+
{"xdsLbPolicy",
|
|
475
|
+
Json::Array{
|
|
476
|
+
xds_lb_policy,
|
|
477
|
+
}},
|
|
478
|
+
{"discoveryMechanisms", std::move(discovery_mechanisms)},
|
|
479
|
+
};
|
|
480
|
+
Json json = Json::Array{
|
|
481
|
+
Json::Object{
|
|
482
|
+
{"xds_cluster_resolver_experimental", std::move(child_config)},
|
|
483
|
+
},
|
|
484
|
+
};
|
|
397
485
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
|
|
398
|
-
|
|
399
|
-
|
|
486
|
+
std::string json_str = json.Dump(/*indent=*/1);
|
|
487
|
+
gpr_log(GPR_INFO, "[cdslb %p] generated config for child policy: %s",
|
|
488
|
+
this, json_str.c_str());
|
|
400
489
|
}
|
|
490
|
+
RefCountedPtr<LoadBalancingPolicy::Config> config =
|
|
491
|
+
LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
|
|
492
|
+
if (error != GRPC_ERROR_NONE) {
|
|
493
|
+
OnError(name, error);
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
// Create child policy if not already present.
|
|
497
|
+
if (child_policy_ == nullptr) {
|
|
498
|
+
LoadBalancingPolicy::Args args;
|
|
499
|
+
args.work_serializer = work_serializer();
|
|
500
|
+
args.args = args_;
|
|
501
|
+
args.channel_control_helper = absl::make_unique<Helper>(Ref());
|
|
502
|
+
child_policy_ = LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
|
|
503
|
+
config->name(), std::move(args));
|
|
504
|
+
if (child_policy_ == nullptr) {
|
|
505
|
+
OnError(name, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
|
506
|
+
"failed to create child policy"));
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
grpc_pollset_set_add_pollset_set(child_policy_->interested_parties(),
|
|
510
|
+
interested_parties());
|
|
511
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
|
|
512
|
+
gpr_log(GPR_INFO, "[cdslb %p] created child policy %s (%p)", this,
|
|
513
|
+
config->name(), child_policy_.get());
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
// Update child policy.
|
|
517
|
+
UpdateArgs args;
|
|
518
|
+
args.config = std::move(config);
|
|
519
|
+
if (xds_certificate_provider_ != nullptr) {
|
|
520
|
+
grpc_arg arg_to_add = xds_certificate_provider_->MakeChannelArg();
|
|
521
|
+
args.args = grpc_channel_args_copy_and_add(args_, &arg_to_add, 1);
|
|
522
|
+
} else {
|
|
523
|
+
args.args = grpc_channel_args_copy(args_);
|
|
524
|
+
}
|
|
525
|
+
child_policy_->UpdateLocked(std::move(args));
|
|
401
526
|
}
|
|
402
|
-
//
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
527
|
+
// Remove entries in watchers_ for any clusters not in clusters_needed
|
|
528
|
+
for (auto it = watchers_.begin(); it != watchers_.end();) {
|
|
529
|
+
const std::string& cluster_name = it->first;
|
|
530
|
+
if (clusters_needed.find(cluster_name) != clusters_needed.end()) {
|
|
531
|
+
++it;
|
|
532
|
+
continue;
|
|
533
|
+
}
|
|
534
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
|
|
535
|
+
gpr_log(GPR_INFO, "[cdslb %p] cancelling watch for cluster %s", this,
|
|
536
|
+
cluster_name.c_str());
|
|
537
|
+
}
|
|
538
|
+
CancelClusterDataWatch(cluster_name, it->second.watcher,
|
|
539
|
+
/*delay_unsubscription=*/false);
|
|
540
|
+
it = watchers_.erase(it);
|
|
410
541
|
}
|
|
411
|
-
child_policy_->UpdateLocked(std::move(args));
|
|
412
542
|
}
|
|
413
543
|
|
|
414
|
-
void CdsLb::OnError(grpc_error* error) {
|
|
544
|
+
void CdsLb::OnError(const std::string& name, grpc_error* error) {
|
|
415
545
|
gpr_log(GPR_ERROR, "[cdslb %p] xds error obtaining data for cluster %s: %s",
|
|
416
|
-
this,
|
|
546
|
+
this, name.c_str(), grpc_error_string(error));
|
|
417
547
|
// Go into TRANSIENT_FAILURE if we have not yet created the child
|
|
418
548
|
// policy (i.e., we have not yet received data from xds). Otherwise,
|
|
419
549
|
// we keep running with the data we had previously.
|
|
@@ -426,11 +556,11 @@ void CdsLb::OnError(grpc_error* error) {
|
|
|
426
556
|
}
|
|
427
557
|
}
|
|
428
558
|
|
|
429
|
-
void CdsLb::OnResourceDoesNotExist() {
|
|
559
|
+
void CdsLb::OnResourceDoesNotExist(const std::string& name) {
|
|
430
560
|
gpr_log(GPR_ERROR,
|
|
431
561
|
"[cdslb %p] CDS resource for %s does not exist -- reporting "
|
|
432
562
|
"TRANSIENT_FAILURE",
|
|
433
|
-
this,
|
|
563
|
+
this, name.c_str());
|
|
434
564
|
grpc_error* error =
|
|
435
565
|
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
|
436
566
|
absl::StrCat("CDS resource \"", config_->cluster(),
|
|
@@ -444,7 +574,7 @@ void CdsLb::OnResourceDoesNotExist() {
|
|
|
444
574
|
}
|
|
445
575
|
|
|
446
576
|
grpc_error* CdsLb::UpdateXdsCertificateProvider(
|
|
447
|
-
const XdsApi::CdsUpdate& cluster_data) {
|
|
577
|
+
const std::string& cluster_name, const XdsApi::CdsUpdate& cluster_data) {
|
|
448
578
|
// Early out if channel is not configured to use xds security.
|
|
449
579
|
grpc_channel_credentials* channel_credentials =
|
|
450
580
|
grpc_channel_credentials_find_in_args(args_);
|
|
@@ -453,18 +583,16 @@ grpc_error* CdsLb::UpdateXdsCertificateProvider(
|
|
|
453
583
|
xds_certificate_provider_ = nullptr;
|
|
454
584
|
return GRPC_ERROR_NONE;
|
|
455
585
|
}
|
|
586
|
+
if (xds_certificate_provider_ == nullptr) {
|
|
587
|
+
xds_certificate_provider_ = MakeRefCounted<XdsCertificateProvider>();
|
|
588
|
+
}
|
|
589
|
+
// Configure root cert.
|
|
456
590
|
absl::string_view root_provider_instance_name =
|
|
457
591
|
cluster_data.common_tls_context.combined_validation_context
|
|
458
592
|
.validation_context_certificate_provider_instance.instance_name;
|
|
459
593
|
absl::string_view root_provider_cert_name =
|
|
460
594
|
cluster_data.common_tls_context.combined_validation_context
|
|
461
595
|
.validation_context_certificate_provider_instance.certificate_name;
|
|
462
|
-
absl::string_view identity_provider_instance_name =
|
|
463
|
-
cluster_data.common_tls_context
|
|
464
|
-
.tls_certificate_certificate_provider_instance.instance_name;
|
|
465
|
-
absl::string_view identity_provider_cert_name =
|
|
466
|
-
cluster_data.common_tls_context
|
|
467
|
-
.tls_certificate_certificate_provider_instance.certificate_name;
|
|
468
596
|
RefCountedPtr<XdsCertificateProvider> new_root_provider;
|
|
469
597
|
if (!root_provider_instance_name.empty()) {
|
|
470
598
|
new_root_provider =
|
|
@@ -491,6 +619,18 @@ grpc_error* CdsLb::UpdateXdsCertificateProvider(
|
|
|
491
619
|
}
|
|
492
620
|
root_certificate_provider_ = std::move(new_root_provider);
|
|
493
621
|
}
|
|
622
|
+
xds_certificate_provider_->UpdateRootCertNameAndDistributor(
|
|
623
|
+
cluster_name, root_provider_cert_name,
|
|
624
|
+
root_certificate_provider_ == nullptr
|
|
625
|
+
? nullptr
|
|
626
|
+
: root_certificate_provider_->distributor());
|
|
627
|
+
// Configure identity cert.
|
|
628
|
+
absl::string_view identity_provider_instance_name =
|
|
629
|
+
cluster_data.common_tls_context
|
|
630
|
+
.tls_certificate_certificate_provider_instance.instance_name;
|
|
631
|
+
absl::string_view identity_provider_cert_name =
|
|
632
|
+
cluster_data.common_tls_context
|
|
633
|
+
.tls_certificate_certificate_provider_instance.certificate_name;
|
|
494
634
|
RefCountedPtr<XdsCertificateProvider> new_identity_provider;
|
|
495
635
|
if (!identity_provider_instance_name.empty()) {
|
|
496
636
|
new_identity_provider =
|
|
@@ -517,56 +657,34 @@ grpc_error* CdsLb::UpdateXdsCertificateProvider(
|
|
|
517
657
|
}
|
|
518
658
|
identity_certificate_provider_ = std::move(new_identity_provider);
|
|
519
659
|
}
|
|
520
|
-
|
|
660
|
+
xds_certificate_provider_->UpdateIdentityCertNameAndDistributor(
|
|
661
|
+
cluster_name, identity_provider_cert_name,
|
|
662
|
+
identity_certificate_provider_ == nullptr
|
|
663
|
+
? nullptr
|
|
664
|
+
: identity_certificate_provider_->distributor());
|
|
665
|
+
// Configure SAN matchers.
|
|
666
|
+
const std::vector<StringMatcher>& match_subject_alt_names =
|
|
521
667
|
cluster_data.common_tls_context.combined_validation_context
|
|
522
668
|
.default_validation_context.match_subject_alt_names;
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
// Using mTLS configuration
|
|
526
|
-
if (xds_certificate_provider_ != nullptr &&
|
|
527
|
-
xds_certificate_provider_->ProvidesRootCerts() &&
|
|
528
|
-
xds_certificate_provider_->ProvidesIdentityCerts()) {
|
|
529
|
-
xds_certificate_provider_->UpdateRootCertNameAndDistributor(
|
|
530
|
-
root_provider_cert_name, root_certificate_provider_->distributor());
|
|
531
|
-
xds_certificate_provider_->UpdateIdentityCertNameAndDistributor(
|
|
532
|
-
identity_provider_cert_name,
|
|
533
|
-
identity_certificate_provider_->distributor());
|
|
534
|
-
xds_certificate_provider_->UpdateSubjectAlternativeNameMatchers(
|
|
535
|
-
match_subject_alt_names);
|
|
536
|
-
} else {
|
|
537
|
-
// Existing xDS certificate provider does not have mTLS configuration.
|
|
538
|
-
// Create new certificate provider so that new subchannel connectors are
|
|
539
|
-
// created.
|
|
540
|
-
xds_certificate_provider_ = MakeRefCounted<XdsCertificateProvider>(
|
|
541
|
-
root_provider_cert_name, root_certificate_provider_->distributor(),
|
|
542
|
-
identity_provider_cert_name,
|
|
543
|
-
identity_certificate_provider_->distributor(),
|
|
544
|
-
match_subject_alt_names);
|
|
545
|
-
}
|
|
546
|
-
} else if (!root_provider_instance_name.empty()) {
|
|
547
|
-
// Using TLS configuration
|
|
548
|
-
if (xds_certificate_provider_ != nullptr &&
|
|
549
|
-
xds_certificate_provider_->ProvidesRootCerts() &&
|
|
550
|
-
!xds_certificate_provider_->ProvidesIdentityCerts()) {
|
|
551
|
-
xds_certificate_provider_->UpdateRootCertNameAndDistributor(
|
|
552
|
-
root_provider_cert_name, root_certificate_provider_->distributor());
|
|
553
|
-
xds_certificate_provider_->UpdateSubjectAlternativeNameMatchers(
|
|
554
|
-
match_subject_alt_names);
|
|
555
|
-
} else {
|
|
556
|
-
// Existing xDS certificate provider does not have TLS configuration.
|
|
557
|
-
// Create new certificate provider so that new subchannel connectors are
|
|
558
|
-
// created.
|
|
559
|
-
xds_certificate_provider_ = MakeRefCounted<XdsCertificateProvider>(
|
|
560
|
-
root_provider_cert_name, root_certificate_provider_->distributor(),
|
|
561
|
-
"", nullptr, match_subject_alt_names);
|
|
562
|
-
}
|
|
563
|
-
} else {
|
|
564
|
-
// No configuration provided.
|
|
565
|
-
xds_certificate_provider_ = nullptr;
|
|
566
|
-
}
|
|
669
|
+
xds_certificate_provider_->UpdateSubjectAlternativeNameMatchers(
|
|
670
|
+
cluster_name, match_subject_alt_names);
|
|
567
671
|
return GRPC_ERROR_NONE;
|
|
568
672
|
}
|
|
569
673
|
|
|
674
|
+
void CdsLb::CancelClusterDataWatch(absl::string_view cluster_name,
|
|
675
|
+
XdsClient::ClusterWatcherInterface* watcher,
|
|
676
|
+
bool delay_unsubscription) {
|
|
677
|
+
if (xds_certificate_provider_ != nullptr) {
|
|
678
|
+
std::string name(cluster_name);
|
|
679
|
+
xds_certificate_provider_->UpdateRootCertNameAndDistributor(name, "",
|
|
680
|
+
nullptr);
|
|
681
|
+
xds_certificate_provider_->UpdateIdentityCertNameAndDistributor(name, "",
|
|
682
|
+
nullptr);
|
|
683
|
+
xds_certificate_provider_->UpdateSubjectAlternativeNameMatchers(name, {});
|
|
684
|
+
}
|
|
685
|
+
xds_client_->CancelClusterDataWatch(cluster_name, watcher,
|
|
686
|
+
delay_unsubscription);
|
|
687
|
+
}
|
|
570
688
|
//
|
|
571
689
|
// factory
|
|
572
690
|
//
|
|
@@ -601,6 +719,7 @@ class CdsLbFactory : public LoadBalancingPolicyFactory {
|
|
|
601
719
|
return nullptr;
|
|
602
720
|
}
|
|
603
721
|
std::vector<grpc_error*> error_list;
|
|
722
|
+
// cluster name.
|
|
604
723
|
std::string cluster;
|
|
605
724
|
auto it = json.object_value().find("cluster");
|
|
606
725
|
if (it == json.object_value().end()) {
|