grpc 1.35.0.pre1 → 1.37.1
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 +121 -89
- data/include/grpc/grpc.h +15 -1
- data/include/grpc/grpc_security.h +16 -11
- data/include/grpc/impl/codegen/port_platform.h +2 -0
- data/src/core/ext/filters/client_channel/client_channel.cc +359 -331
- data/src/core/ext/filters/client_channel/client_channel.h +0 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
- data/src/core/ext/filters/client_channel/config_selector.h +9 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -4
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy.cc +3 -0
- 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/ring_hash/ring_hash.cc +23 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
- 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 +8 -25
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +232 -110
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
- data/src/core/ext/filters/client_channel/resolver.cc +5 -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_ev_driver_posix.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +34 -50
- 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 +377 -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 +307 -155
- data/src/core/ext/filters/client_channel/server_address.cc +9 -0
- data/src/core/ext/filters/client_channel/server_address.h +31 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +69 -146
- data/src/core/ext/filters/client_channel/subchannel.h +63 -95
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +500 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
- data/src/core/ext/filters/max_age/max_age_filter.cc +35 -32
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +3 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +490 -178
- 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/insecure/server_chttp2_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +62 -18
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +39 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +5 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
- 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/protocol.upb.c +6 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
- 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/metrics/v3/stats.upb.c +144 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
- 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 +57 -16
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +150 -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/common/fault/v3/fault.upb.c +79 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +19 -21
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +64 -51
- 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/service/status/v3/csds.upb.c +93 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
- 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/type/v1/typed_struct.upb.c +33 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -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/admin/v3/config_dump.upbdefs.c +354 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -171
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
- 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/protocol.upbdefs.c +10 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
- 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/metrics/v3/stats.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
- 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 +753 -724
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -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/common/fault/v3/fault.upbdefs.c +102 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +371 -377
- 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/service/status/v3/csds.upbdefs.c +130 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +8 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +9 -9
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
- 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 +2149 -666
- data/src/core/ext/xds/xds_api.h +321 -119
- data/src/core/ext/xds/xds_bootstrap.cc +80 -45
- data/src/core/ext/xds/xds_bootstrap.h +17 -5
- 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 +181 -34
- data/src/core/ext/xds/xds_client.h +29 -0
- data/src/core/ext/xds/xds_client_stats.cc +2 -1
- data/src/core/ext/xds/xds_client_stats.h +2 -2
- data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
- data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
- data/src/core/ext/xds/xds_http_filters.cc +114 -0
- data/src/core/ext/xds/xds_http_filters.h +130 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +425 -24
- data/src/core/lib/channel/channel_stack.cc +12 -0
- data/src/core/lib/channel/channel_stack.h +7 -0
- data/src/core/lib/channel/channelz.cc +92 -4
- data/src/core/lib/channel/channelz.h +30 -1
- data/src/core/lib/channel/channelz_registry.cc +14 -0
- data/src/core/lib/channel/handshaker.cc +2 -44
- data/src/core/lib/channel/handshaker.h +1 -18
- data/src/core/lib/channel/status_util.cc +12 -2
- data/src/core/lib/channel/status_util.h +5 -0
- data/src/core/lib/gpr/log.cc +6 -1
- data/src/core/lib/gpr/sync_abseil.cc +3 -6
- data/src/core/lib/gpr/sync_windows.cc +2 -2
- data/src/core/lib/gprpp/atomic.h +3 -3
- data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
- data/src/core/lib/gprpp/mpscq.cc +2 -2
- data/src/core/lib/gprpp/ref_counted.h +1 -1
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -0
- data/src/core/lib/gprpp/sync.h +129 -40
- data/src/core/lib/gprpp/thd.h +1 -1
- 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/buffer_list.h +1 -1
- data/src/core/lib/iomgr/cfstream_handle.cc +2 -2
- data/src/core/lib/iomgr/error.h +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +11 -8
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -3
- data/src/core/lib/iomgr/ev_epollex_linux.cc +4 -4
- data/src/core/lib/iomgr/ev_posix.cc +3 -3
- data/src/core/lib/iomgr/exec_ctx.cc +6 -2
- 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/resource_quota.cc +1 -1
- data/src/core/lib/iomgr/sockaddr_utils.cc +121 -1
- data/src/core/lib/iomgr/sockaddr_utils.h +25 -0
- 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 +5 -8
- data/src/core/lib/iomgr/tcp_uv.cc +2 -2
- data/src/core/lib/iomgr/timer_generic.cc +2 -2
- data/src/core/lib/iomgr/timer_manager.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
- data/src/core/lib/matchers/matchers.cc +339 -0
- data/src/core/lib/matchers/matchers.h +160 -0
- 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 +9 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +32 -14
- data/src/core/lib/security/transport/security_handshaker.cc +33 -5
- data/src/core/lib/security/transport/server_auth_filter.cc +7 -0
- data/src/core/lib/slice/slice_intern.cc +5 -6
- data/src/core/lib/surface/channel.h +3 -3
- data/src/core/lib/surface/completion_queue.cc +1 -1
- data/src/core/lib/surface/init.cc +13 -15
- data/src/core/lib/surface/lame_client.cc +38 -19
- data/src/core/lib/surface/lame_client.h +4 -3
- data/src/core/lib/surface/server.cc +43 -36
- data/src/core/lib/surface/server.h +76 -14
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/metadata.cc +6 -2
- data/src/core/lib/transport/metadata_batch.cc +27 -0
- data/src/core/lib/transport/metadata_batch.h +14 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +12 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +18 -24
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +16 -21
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
- data/src/core/tsi/fake_transport_security.cc +11 -2
- 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/ext/grpc/extconf.rb +9 -1
- data/src/ruby/ext/grpc/rb_channel.c +10 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +4 -0
- 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/ext/grpc/rb_server.c +13 -1
- data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
- data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +7 -0
- data/src/ruby/spec/call_spec.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +32 -0
- data/src/ruby/spec/channel_spec.rb +17 -6
- data/src/ruby/spec/client_auth_spec.rb +27 -1
- data/src/ruby/spec/errors_spec.rb +1 -1
- data/src/ruby/spec/generic/active_call_spec.rb +2 -2
- data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
- data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
- data/src/ruby/spec/server_credentials_spec.rb +25 -0
- data/src/ruby/spec/server_spec.rb +22 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
- data/third_party/boringssl-with-bazel/err_data.c +715 -713
- 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/cpu-arm-linux.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
- 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/fipsmodule/cipher/cipher.c +21 -13
- 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 +135 -43
- 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 -29
- 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_attrib.c +22 -17
- 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 -4
- 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 +19 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
- 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 +67 -33
- 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 -99
- 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 +362 -50
- 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
- data/third_party/xxhash/xxhash.h +5443 -0
- metadata +140 -84
- 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
- data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
- data/src/core/lib/security/authorization/authorization_engine.h +0 -84
- data/src/core/lib/security/authorization/evaluate_args.cc +0 -148
- data/src/core/lib/security/authorization/evaluate_args.h +0 -59
- data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
- data/third_party/upb/upb/json_decode.c +0 -1443
- data/third_party/upb/upb/json_decode.h +0 -23
- data/third_party/upb/upb/json_encode.c +0 -713
- data/third_party/upb/upb/json_encode.h +0 -36
@@ -35,7 +35,6 @@
|
|
35
35
|
#include "src/core/lib/iomgr/parse_address.h"
|
36
36
|
#include "src/core/lib/iomgr/resolve_address.h"
|
37
37
|
#include "src/core/lib/iomgr/unix_sockets_posix.h"
|
38
|
-
#include "src/core/lib/iomgr/work_serializer.h"
|
39
38
|
#include "src/core/lib/slice/slice_internal.h"
|
40
39
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
41
40
|
|
@@ -53,13 +52,14 @@ class SockaddrResolver : public Resolver {
|
|
53
52
|
void ShutdownLocked() override {}
|
54
53
|
|
55
54
|
private:
|
55
|
+
std::unique_ptr<ResultHandler> result_handler_;
|
56
56
|
ServerAddressList addresses_;
|
57
57
|
const grpc_channel_args* channel_args_ = nullptr;
|
58
58
|
};
|
59
59
|
|
60
60
|
SockaddrResolver::SockaddrResolver(ServerAddressList addresses,
|
61
61
|
ResolverArgs args)
|
62
|
-
:
|
62
|
+
: result_handler_(std::move(args.result_handler)),
|
63
63
|
addresses_(std::move(addresses)),
|
64
64
|
channel_args_(grpc_channel_args_copy(args.args)) {}
|
65
65
|
|
@@ -73,7 +73,7 @@ void SockaddrResolver::StartLocked() {
|
|
73
73
|
// TODO(roth): Use std::move() once channel args is converted to C++.
|
74
74
|
result.args = channel_args_;
|
75
75
|
channel_args_ = nullptr;
|
76
|
-
|
76
|
+
result_handler_->ReturnResult(std::move(result));
|
77
77
|
}
|
78
78
|
|
79
79
|
//
|
@@ -150,7 +150,7 @@ class UnixResolverFactory : public ResolverFactory {
|
|
150
150
|
return CreateSockaddrResolver(std::move(args), grpc_parse_unix);
|
151
151
|
}
|
152
152
|
|
153
|
-
std::string GetDefaultAuthority(const URI& uri) const override {
|
153
|
+
std::string GetDefaultAuthority(const URI& /*uri*/) const override {
|
154
154
|
return "localhost";
|
155
155
|
}
|
156
156
|
|
@@ -22,13 +22,18 @@
|
|
22
22
|
#include "absl/strings/str_join.h"
|
23
23
|
#include "absl/strings/str_split.h"
|
24
24
|
#include "re2/re2.h"
|
25
|
+
#define XXH_INLINE_ALL
|
26
|
+
#include "xxhash.h"
|
25
27
|
|
26
28
|
#include "src/core/ext/filters/client_channel/config_selector.h"
|
29
|
+
#include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
|
27
30
|
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
28
31
|
#include "src/core/ext/xds/xds_client.h"
|
32
|
+
#include "src/core/ext/xds/xds_http_filters.h"
|
29
33
|
#include "src/core/lib/channel/channel_args.h"
|
30
34
|
#include "src/core/lib/iomgr/closure.h"
|
31
35
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
36
|
+
#include "src/core/lib/surface/lame_client.h"
|
32
37
|
#include "src/core/lib/transport/timeout_encoding.h"
|
33
38
|
|
34
39
|
namespace grpc_core {
|
@@ -46,8 +51,8 @@ namespace {
|
|
46
51
|
class XdsResolver : public Resolver {
|
47
52
|
public:
|
48
53
|
explicit XdsResolver(ResolverArgs args)
|
49
|
-
:
|
50
|
-
|
54
|
+
: work_serializer_(std::move(args.work_serializer)),
|
55
|
+
result_handler_(std::move(args.result_handler)),
|
51
56
|
server_name_(absl::StripPrefix(args.uri.path(), "/")),
|
52
57
|
args_(grpc_channel_args_copy(args.args)),
|
53
58
|
interested_parties_(args.pollset_set) {
|
@@ -135,9 +140,7 @@ class XdsResolver : public Resolver {
|
|
135
140
|
|
136
141
|
class XdsConfigSelector : public ConfigSelector {
|
137
142
|
public:
|
138
|
-
XdsConfigSelector(RefCountedPtr<XdsResolver> resolver,
|
139
|
-
const std::vector<XdsApi::Route>& routes,
|
140
|
-
grpc_error* error);
|
143
|
+
XdsConfigSelector(RefCountedPtr<XdsResolver> resolver, grpc_error** error);
|
141
144
|
~XdsConfigSelector() override;
|
142
145
|
|
143
146
|
const char* name() const override { return "XdsConfigSelector"; }
|
@@ -151,26 +154,41 @@ class XdsResolver : public Resolver {
|
|
151
154
|
|
152
155
|
CallConfig GetCallConfig(GetCallConfigArgs args) override;
|
153
156
|
|
157
|
+
std::vector<const grpc_channel_filter*> GetFilters() override {
|
158
|
+
return filters_;
|
159
|
+
}
|
160
|
+
|
161
|
+
grpc_channel_args* ModifyChannelArgs(grpc_channel_args* args) override;
|
162
|
+
|
154
163
|
private:
|
155
164
|
struct Route {
|
165
|
+
struct ClusterWeightState {
|
166
|
+
uint32_t range_end;
|
167
|
+
absl::string_view cluster;
|
168
|
+
RefCountedPtr<ServiceConfig> method_config;
|
169
|
+
|
170
|
+
bool operator==(const ClusterWeightState& other) const;
|
171
|
+
};
|
172
|
+
|
156
173
|
XdsApi::Route route;
|
157
|
-
absl::InlinedVector<std::pair<uint32_t, absl::string_view>, 2>
|
158
|
-
weighted_cluster_state;
|
159
174
|
RefCountedPtr<ServiceConfig> method_config;
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
}
|
175
|
+
absl::InlinedVector<ClusterWeightState, 2> weighted_cluster_state;
|
176
|
+
|
177
|
+
bool operator==(const Route& other) const;
|
164
178
|
};
|
165
179
|
using RouteTable = std::vector<Route>;
|
166
180
|
|
167
181
|
void MaybeAddCluster(const std::string& name);
|
168
|
-
grpc_error* CreateMethodConfig(
|
169
|
-
|
182
|
+
grpc_error* CreateMethodConfig(
|
183
|
+
const XdsApi::Route& route,
|
184
|
+
const XdsApi::Route::ClusterWeight* cluster_weight,
|
185
|
+
RefCountedPtr<ServiceConfig>* method_config);
|
170
186
|
|
171
187
|
RefCountedPtr<XdsResolver> resolver_;
|
172
188
|
RouteTable route_table_;
|
173
189
|
std::map<absl::string_view, RefCountedPtr<ClusterState>> clusters_;
|
190
|
+
std::vector<const grpc_channel_filter*> filters_;
|
191
|
+
grpc_error* filter_error_ = GRPC_ERROR_NONE;
|
174
192
|
};
|
175
193
|
|
176
194
|
void OnListenerUpdate(XdsApi::LdsUpdate listener);
|
@@ -182,16 +200,25 @@ class XdsResolver : public Resolver {
|
|
182
200
|
void GenerateResult();
|
183
201
|
void MaybeRemoveUnusedClusters();
|
184
202
|
|
203
|
+
std::shared_ptr<WorkSerializer> work_serializer_;
|
204
|
+
std::unique_ptr<ResultHandler> result_handler_;
|
185
205
|
std::string server_name_;
|
186
206
|
const grpc_channel_args* args_;
|
187
207
|
grpc_pollset_set* interested_parties_;
|
208
|
+
|
188
209
|
RefCountedPtr<XdsClient> xds_client_;
|
210
|
+
|
189
211
|
XdsClient::ListenerWatcherInterface* listener_watcher_ = nullptr;
|
212
|
+
// This will not contain the RouteConfiguration, even if it comes with the
|
213
|
+
// LDS response; instead, the relevant VirtualHost from the
|
214
|
+
// RouteConfiguration will be saved in current_virtual_host_.
|
215
|
+
XdsApi::LdsUpdate current_listener_;
|
216
|
+
|
190
217
|
std::string route_config_name_;
|
191
218
|
XdsClient::RouteConfigWatcherInterface* route_config_watcher_ = nullptr;
|
219
|
+
XdsApi::RdsUpdate::VirtualHost current_virtual_host_;
|
220
|
+
|
192
221
|
ClusterState::ClusterStateMap cluster_state_map_;
|
193
|
-
std::vector<XdsApi::Route> current_update_;
|
194
|
-
XdsApi::Duration http_max_stream_duration_;
|
195
222
|
};
|
196
223
|
|
197
224
|
//
|
@@ -210,7 +237,7 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
|
|
210
237
|
XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
|
211
238
|
XdsApi::RdsUpdate update)
|
212
239
|
: resolver_(std::move(resolver)), type_(kRdsUpdate) {
|
213
|
-
update_.rds_update = std::move(update);
|
240
|
+
update_.http_connection_manager.rds_update = std::move(update);
|
214
241
|
GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
|
215
242
|
ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
|
216
243
|
}
|
@@ -231,7 +258,7 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver)
|
|
231
258
|
void XdsResolver::Notifier::RunInExecCtx(void* arg, grpc_error* error) {
|
232
259
|
Notifier* self = static_cast<Notifier*>(arg);
|
233
260
|
GRPC_ERROR_REF(error);
|
234
|
-
self->resolver_->
|
261
|
+
self->resolver_->work_serializer_->Run(
|
235
262
|
[self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
|
236
263
|
}
|
237
264
|
|
@@ -246,7 +273,8 @@ void XdsResolver::Notifier::RunInWorkSerializer(grpc_error* error) {
|
|
246
273
|
resolver_->OnListenerUpdate(std::move(update_));
|
247
274
|
break;
|
248
275
|
case kRdsUpdate:
|
249
|
-
resolver_->OnRouteConfigUpdate(
|
276
|
+
resolver_->OnRouteConfigUpdate(
|
277
|
+
std::move(*update_.http_connection_manager.rds_update));
|
250
278
|
break;
|
251
279
|
case kError:
|
252
280
|
resolver_->OnError(error);
|
@@ -258,13 +286,35 @@ void XdsResolver::Notifier::RunInWorkSerializer(grpc_error* error) {
|
|
258
286
|
delete this;
|
259
287
|
}
|
260
288
|
|
289
|
+
//
|
290
|
+
// XdsResolver::XdsConfigSelector::Route
|
291
|
+
//
|
292
|
+
|
293
|
+
bool MethodConfigsEqual(const ServiceConfig* sc1, const ServiceConfig* sc2) {
|
294
|
+
if (sc1 == nullptr) return sc2 == nullptr;
|
295
|
+
if (sc2 == nullptr) return false;
|
296
|
+
return sc1->json_string() == sc2->json_string();
|
297
|
+
}
|
298
|
+
|
299
|
+
bool XdsResolver::XdsConfigSelector::Route::ClusterWeightState::operator==(
|
300
|
+
const ClusterWeightState& other) const {
|
301
|
+
return range_end == other.range_end && cluster == other.cluster &&
|
302
|
+
MethodConfigsEqual(method_config.get(), other.method_config.get());
|
303
|
+
}
|
304
|
+
|
305
|
+
bool XdsResolver::XdsConfigSelector::Route::operator==(
|
306
|
+
const Route& other) const {
|
307
|
+
return route == other.route &&
|
308
|
+
weighted_cluster_state == other.weighted_cluster_state &&
|
309
|
+
MethodConfigsEqual(method_config.get(), other.method_config.get());
|
310
|
+
}
|
311
|
+
|
261
312
|
//
|
262
313
|
// XdsResolver::XdsConfigSelector
|
263
314
|
//
|
264
315
|
|
265
316
|
XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
266
|
-
RefCountedPtr<XdsResolver> resolver,
|
267
|
-
const std::vector<XdsApi::Route>& routes, grpc_error* error)
|
317
|
+
RefCountedPtr<XdsResolver> resolver, grpc_error** error)
|
268
318
|
: resolver_(std::move(resolver)) {
|
269
319
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
270
320
|
gpr_log(GPR_INFO, "[xds_resolver %p] creating XdsConfigSelector %p",
|
@@ -279,8 +329,8 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
279
329
|
// weighted_cluster_state field points to the memory in the route field, so
|
280
330
|
// moving the entry in a reallocation will cause the string_view to point to
|
281
331
|
// invalid data.
|
282
|
-
route_table_.reserve(routes.size());
|
283
|
-
for (auto& route : routes) {
|
332
|
+
route_table_.reserve(resolver_->current_virtual_host_.routes.size());
|
333
|
+
for (auto& route : resolver_->current_virtual_host_.routes) {
|
284
334
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
285
335
|
gpr_log(GPR_INFO, "[xds_resolver %p] XdsConfigSelector %p: route: %s",
|
286
336
|
resolver_.get(), this, route.ToString().c_str());
|
@@ -292,27 +342,95 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
292
342
|
// one.
|
293
343
|
if (!route.max_stream_duration.has_value()) {
|
294
344
|
route_entry.route.max_stream_duration =
|
295
|
-
resolver_->
|
345
|
+
resolver_->current_listener_.http_connection_manager
|
346
|
+
.http_max_stream_duration;
|
296
347
|
}
|
297
|
-
error = CreateMethodConfig(&route_entry.method_config, route_entry.route);
|
298
348
|
if (route.weighted_clusters.empty()) {
|
349
|
+
*error = CreateMethodConfig(route_entry.route, nullptr,
|
350
|
+
&route_entry.method_config);
|
299
351
|
MaybeAddCluster(route.cluster_name);
|
300
352
|
} else {
|
301
353
|
uint32_t end = 0;
|
302
354
|
for (const auto& weighted_cluster : route_entry.route.weighted_clusters) {
|
303
|
-
|
355
|
+
Route::ClusterWeightState cluster_weight_state;
|
356
|
+
*error = CreateMethodConfig(route_entry.route, &weighted_cluster,
|
357
|
+
&cluster_weight_state.method_config);
|
358
|
+
if (*error != GRPC_ERROR_NONE) return;
|
304
359
|
end += weighted_cluster.weight;
|
305
|
-
|
306
|
-
|
360
|
+
cluster_weight_state.range_end = end;
|
361
|
+
cluster_weight_state.cluster = weighted_cluster.name;
|
362
|
+
route_entry.weighted_cluster_state.push_back(
|
363
|
+
std::move(cluster_weight_state));
|
364
|
+
MaybeAddCluster(weighted_cluster.name);
|
307
365
|
}
|
308
366
|
}
|
309
367
|
}
|
368
|
+
// Populate filter list.
|
369
|
+
bool found_router = false;
|
370
|
+
for (const auto& http_filter :
|
371
|
+
resolver_->current_listener_.http_connection_manager.http_filters) {
|
372
|
+
// Stop at the router filter. It's a no-op for us, and we ignore
|
373
|
+
// anything that may come after it, for compatibility with Envoy.
|
374
|
+
if (http_filter.config.config_proto_type_name ==
|
375
|
+
kXdsHttpRouterFilterConfigName) {
|
376
|
+
found_router = true;
|
377
|
+
break;
|
378
|
+
}
|
379
|
+
// Find filter. This is guaranteed to succeed, because it's checked
|
380
|
+
// at config validation time in the XdsApi code.
|
381
|
+
const XdsHttpFilterImpl* filter_impl =
|
382
|
+
XdsHttpFilterRegistry::GetFilterForType(
|
383
|
+
http_filter.config.config_proto_type_name);
|
384
|
+
GPR_ASSERT(filter_impl != nullptr);
|
385
|
+
// Add C-core filter to list.
|
386
|
+
filters_.push_back(filter_impl->channel_filter());
|
387
|
+
}
|
388
|
+
// For compatibility with Envoy, if the router filter is not
|
389
|
+
// configured, we fail all RPCs.
|
390
|
+
if (!found_router) {
|
391
|
+
filter_error_ =
|
392
|
+
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
393
|
+
"no xDS HTTP router filter configured"),
|
394
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
395
|
+
filters_.push_back(&grpc_lame_filter);
|
396
|
+
}
|
397
|
+
}
|
398
|
+
|
399
|
+
XdsResolver::XdsConfigSelector::~XdsConfigSelector() {
|
400
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
401
|
+
gpr_log(GPR_INFO, "[xds_resolver %p] destroying XdsConfigSelector %p",
|
402
|
+
resolver_.get(), this);
|
403
|
+
}
|
404
|
+
clusters_.clear();
|
405
|
+
resolver_->MaybeRemoveUnusedClusters();
|
406
|
+
GRPC_ERROR_UNREF(filter_error_);
|
407
|
+
}
|
408
|
+
|
409
|
+
const XdsHttpFilterImpl::FilterConfig* FindFilterConfigOverride(
|
410
|
+
const std::string& instance_name,
|
411
|
+
const XdsApi::RdsUpdate::VirtualHost& vhost, const XdsApi::Route& route,
|
412
|
+
const XdsApi::Route::ClusterWeight* cluster_weight) {
|
413
|
+
// Check ClusterWeight, if any.
|
414
|
+
if (cluster_weight != nullptr) {
|
415
|
+
auto it = cluster_weight->typed_per_filter_config.find(instance_name);
|
416
|
+
if (it != cluster_weight->typed_per_filter_config.end()) return &it->second;
|
417
|
+
}
|
418
|
+
// Check Route.
|
419
|
+
auto it = route.typed_per_filter_config.find(instance_name);
|
420
|
+
if (it != route.typed_per_filter_config.end()) return &it->second;
|
421
|
+
// Check VirtualHost.
|
422
|
+
it = vhost.typed_per_filter_config.find(instance_name);
|
423
|
+
if (it != vhost.typed_per_filter_config.end()) return &it->second;
|
424
|
+
// Not found.
|
425
|
+
return nullptr;
|
310
426
|
}
|
311
427
|
|
312
428
|
grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
313
|
-
|
314
|
-
|
429
|
+
const XdsApi::Route& route,
|
430
|
+
const XdsApi::Route::ClusterWeight* cluster_weight,
|
431
|
+
RefCountedPtr<ServiceConfig>* method_config) {
|
315
432
|
std::vector<std::string> fields;
|
433
|
+
// Set timeout.
|
316
434
|
if (route.max_stream_duration.has_value() &&
|
317
435
|
(route.max_stream_duration->seconds != 0 ||
|
318
436
|
route.max_stream_duration->nanos != 0)) {
|
@@ -320,6 +438,51 @@ grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
|
320
438
|
route.max_stream_duration->seconds,
|
321
439
|
route.max_stream_duration->nanos));
|
322
440
|
}
|
441
|
+
// Handle xDS HTTP filters.
|
442
|
+
std::map<std::string, std::vector<std::string>> per_filter_configs;
|
443
|
+
grpc_channel_args* args = grpc_channel_args_copy(resolver_->args_);
|
444
|
+
for (const auto& http_filter :
|
445
|
+
resolver_->current_listener_.http_connection_manager.http_filters) {
|
446
|
+
// Stop at the router filter. It's a no-op for us, and we ignore
|
447
|
+
// anything that may come after it, for compatibility with Envoy.
|
448
|
+
if (http_filter.config.config_proto_type_name ==
|
449
|
+
kXdsHttpRouterFilterConfigName) {
|
450
|
+
break;
|
451
|
+
}
|
452
|
+
// Find filter. This is guaranteed to succeed, because it's checked
|
453
|
+
// at config validation time in the XdsApi code.
|
454
|
+
const XdsHttpFilterImpl* filter_impl =
|
455
|
+
XdsHttpFilterRegistry::GetFilterForType(
|
456
|
+
http_filter.config.config_proto_type_name);
|
457
|
+
GPR_ASSERT(filter_impl != nullptr);
|
458
|
+
// Allow filter to add channel args that may affect service config
|
459
|
+
// parsing.
|
460
|
+
args = filter_impl->ModifyChannelArgs(args);
|
461
|
+
// Find config override, if any.
|
462
|
+
const XdsHttpFilterImpl::FilterConfig* config_override =
|
463
|
+
FindFilterConfigOverride(http_filter.name,
|
464
|
+
resolver_->current_virtual_host_, route,
|
465
|
+
cluster_weight);
|
466
|
+
// Generate service config for filter.
|
467
|
+
auto method_config_field =
|
468
|
+
filter_impl->GenerateServiceConfig(http_filter.config, config_override);
|
469
|
+
if (!method_config_field.ok()) {
|
470
|
+
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
471
|
+
absl::StrCat("failed to generate method config for HTTP filter ",
|
472
|
+
http_filter.name, ": ",
|
473
|
+
method_config_field.status().ToString())
|
474
|
+
.c_str());
|
475
|
+
}
|
476
|
+
per_filter_configs[method_config_field->service_config_field_name]
|
477
|
+
.push_back(method_config_field->element);
|
478
|
+
}
|
479
|
+
for (const auto& p : per_filter_configs) {
|
480
|
+
fields.emplace_back(absl::StrCat(" \"", p.first, "\": [\n",
|
481
|
+
absl::StrJoin(p.second, ",\n"),
|
482
|
+
"\n ]"));
|
483
|
+
}
|
484
|
+
// Construct service config.
|
485
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
323
486
|
if (!fields.empty()) {
|
324
487
|
std::string json = absl::StrCat(
|
325
488
|
"{\n"
|
@@ -331,19 +494,20 @@ grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
|
331
494
|
absl::StrJoin(fields, ",\n"),
|
332
495
|
"\n } ]\n"
|
333
496
|
"}");
|
334
|
-
*method_config =
|
335
|
-
ServiceConfig::Create(resolver_->args_, json.c_str(), &error);
|
497
|
+
*method_config = ServiceConfig::Create(args, json.c_str(), &error);
|
336
498
|
}
|
499
|
+
grpc_channel_args_destroy(args);
|
337
500
|
return error;
|
338
501
|
}
|
339
502
|
|
340
|
-
XdsResolver::XdsConfigSelector
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
503
|
+
grpc_channel_args* XdsResolver::XdsConfigSelector::ModifyChannelArgs(
|
504
|
+
grpc_channel_args* args) {
|
505
|
+
if (filter_error_ == GRPC_ERROR_NONE) return args;
|
506
|
+
grpc_arg error_arg = MakeLameClientErrorArg(filter_error_);
|
507
|
+
grpc_channel_args* new_args =
|
508
|
+
grpc_channel_args_copy_and_add(args, &error_arg, 1);
|
509
|
+
grpc_channel_args_destroy(args);
|
510
|
+
return new_args;
|
347
511
|
}
|
348
512
|
|
349
513
|
void XdsResolver::XdsConfigSelector::MaybeAddCluster(const std::string& name) {
|
@@ -359,108 +523,50 @@ void XdsResolver::XdsConfigSelector::MaybeAddCluster(const std::string& name) {
|
|
359
523
|
}
|
360
524
|
}
|
361
525
|
|
362
|
-
|
363
|
-
|
364
|
-
switch (path_matcher.type) {
|
365
|
-
case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::PREFIX:
|
366
|
-
return path_matcher.case_sensitive
|
367
|
-
? absl::StartsWith(path, path_matcher.string_matcher)
|
368
|
-
: absl::StartsWithIgnoreCase(path,
|
369
|
-
path_matcher.string_matcher);
|
370
|
-
case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::PATH:
|
371
|
-
return path_matcher.case_sensitive
|
372
|
-
? path == path_matcher.string_matcher
|
373
|
-
: absl::EqualsIgnoreCase(path, path_matcher.string_matcher);
|
374
|
-
case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::REGEX:
|
375
|
-
// Note: Case-sensitive option will already have been set appropriately
|
376
|
-
// in path_matcher.regex_matcher when it was constructed, so no
|
377
|
-
// need to check it here.
|
378
|
-
return RE2::FullMatch(path.data(), *path_matcher.regex_matcher);
|
379
|
-
default:
|
380
|
-
return false;
|
381
|
-
}
|
382
|
-
}
|
383
|
-
|
384
|
-
absl::optional<absl::string_view> GetMetadataValue(
|
385
|
-
const std::string& target_key, grpc_metadata_batch* initial_metadata,
|
526
|
+
absl::optional<absl::string_view> GetHeaderValue(
|
527
|
+
grpc_metadata_batch* initial_metadata, absl::string_view header_name,
|
386
528
|
std::string* concatenated_value) {
|
387
|
-
// Find all values for the specified key.
|
388
|
-
GPR_DEBUG_ASSERT(initial_metadata != nullptr);
|
389
|
-
absl::InlinedVector<absl::string_view, 1> values;
|
390
|
-
for (grpc_linked_mdelem* md = initial_metadata->list.head; md != nullptr;
|
391
|
-
md = md->next) {
|
392
|
-
absl::string_view key = StringViewFromSlice(GRPC_MDKEY(md->md));
|
393
|
-
absl::string_view value = StringViewFromSlice(GRPC_MDVALUE(md->md));
|
394
|
-
if (target_key == key) values.push_back(value);
|
395
|
-
}
|
396
|
-
// If none found, no match.
|
397
|
-
if (values.empty()) return absl::nullopt;
|
398
|
-
// If exactly one found, return it as-is.
|
399
|
-
if (values.size() == 1) return values.front();
|
400
|
-
// If more than one found, concatenate the values, using
|
401
|
-
// *concatenated_values as a temporary holding place for the
|
402
|
-
// concatenated string.
|
403
|
-
*concatenated_value = absl::StrJoin(values, ",");
|
404
|
-
return *concatenated_value;
|
405
|
-
}
|
406
|
-
|
407
|
-
bool HeaderMatchHelper(
|
408
|
-
const XdsApi::Route::Matchers::HeaderMatcher& header_matcher,
|
409
|
-
grpc_metadata_batch* initial_metadata) {
|
410
|
-
std::string concatenated_value;
|
411
|
-
absl::optional<absl::string_view> value;
|
412
529
|
// Note: If we ever allow binary headers here, we still need to
|
413
530
|
// special-case ignore "grpc-tags-bin" and "grpc-trace-bin", since
|
414
531
|
// they are not visible to the LB policy in grpc-go.
|
415
|
-
if (absl::EndsWith(
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
value = "application/grpc";
|
420
|
-
} else {
|
421
|
-
value = GetMetadataValue(header_matcher.name, initial_metadata,
|
422
|
-
&concatenated_value);
|
532
|
+
if (absl::EndsWith(header_name, "-bin")) {
|
533
|
+
return absl::nullopt;
|
534
|
+
} else if (header_name == "content-type") {
|
535
|
+
return "application/grpc";
|
423
536
|
}
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
537
|
+
return grpc_metadata_batch_get_value(initial_metadata, header_name,
|
538
|
+
concatenated_value);
|
539
|
+
}
|
540
|
+
|
541
|
+
bool HeadersMatch(const std::vector<HeaderMatcher>& header_matchers,
|
542
|
+
grpc_metadata_batch* initial_metadata) {
|
543
|
+
for (const auto& header_matcher : header_matchers) {
|
544
|
+
std::string concatenated_value;
|
545
|
+
if (!header_matcher.Match(GetHeaderValue(
|
546
|
+
initial_metadata, header_matcher.name(), &concatenated_value))) {
|
431
547
|
return false;
|
432
548
|
}
|
433
549
|
}
|
434
|
-
|
435
|
-
case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::EXACT:
|
436
|
-
return value.value() == header_matcher.string_matcher;
|
437
|
-
case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::REGEX:
|
438
|
-
return RE2::FullMatch(value.value().data(), *header_matcher.regex_match);
|
439
|
-
case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::RANGE:
|
440
|
-
int64_t int_value;
|
441
|
-
if (!absl::SimpleAtoi(value.value(), &int_value)) {
|
442
|
-
return false;
|
443
|
-
}
|
444
|
-
return int_value >= header_matcher.range_start &&
|
445
|
-
int_value < header_matcher.range_end;
|
446
|
-
case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::PREFIX:
|
447
|
-
return absl::StartsWith(value.value(), header_matcher.string_matcher);
|
448
|
-
case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::SUFFIX:
|
449
|
-
return absl::EndsWith(value.value(), header_matcher.string_matcher);
|
450
|
-
default:
|
451
|
-
return false;
|
452
|
-
}
|
550
|
+
return true;
|
453
551
|
}
|
454
552
|
|
455
|
-
|
456
|
-
const
|
553
|
+
absl::optional<uint64_t> HeaderHashHelper(
|
554
|
+
const XdsApi::Route::HashPolicy& policy,
|
457
555
|
grpc_metadata_batch* initial_metadata) {
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
556
|
+
GPR_ASSERT(policy.type == XdsApi::Route::HashPolicy::HEADER);
|
557
|
+
std::string value_buffer;
|
558
|
+
absl::optional<absl::string_view> header_value =
|
559
|
+
GetHeaderValue(initial_metadata, policy.header_name, &value_buffer);
|
560
|
+
if (policy.regex != nullptr) {
|
561
|
+
// If GetHeaderValue() did not already store the value in
|
562
|
+
// value_buffer, copy it there now, so we can modify it.
|
563
|
+
if (header_value->data() != value_buffer.data()) {
|
564
|
+
value_buffer = std::string(*header_value);
|
565
|
+
}
|
566
|
+
RE2::GlobalReplace(&value_buffer, *policy.regex, policy.regex_substitution);
|
567
|
+
header_value = value_buffer;
|
462
568
|
}
|
463
|
-
return
|
569
|
+
return XXH64(header_value->data(), header_value->size(), 0);
|
464
570
|
}
|
465
571
|
|
466
572
|
bool UnderFraction(const uint32_t fraction_per_million) {
|
@@ -473,8 +579,8 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
473
579
|
GetCallConfigArgs args) {
|
474
580
|
for (const auto& entry : route_table_) {
|
475
581
|
// Path matching.
|
476
|
-
if (!
|
477
|
-
|
582
|
+
if (!entry.route.matchers.path_matcher.Match(
|
583
|
+
StringViewFromSlice(*args.path))) {
|
478
584
|
continue;
|
479
585
|
}
|
480
586
|
// Header Matching.
|
@@ -489,13 +595,15 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
489
595
|
}
|
490
596
|
// Found a route match
|
491
597
|
absl::string_view cluster_name;
|
598
|
+
RefCountedPtr<ServiceConfig> method_config;
|
492
599
|
if (entry.route.weighted_clusters.empty()) {
|
493
600
|
cluster_name = entry.route.cluster_name;
|
601
|
+
method_config = entry.method_config;
|
494
602
|
} else {
|
495
603
|
const uint32_t key =
|
496
604
|
rand() %
|
497
605
|
entry.weighted_cluster_state[entry.weighted_cluster_state.size() - 1]
|
498
|
-
.
|
606
|
+
.range_end;
|
499
607
|
// Find the index in weighted clusters corresponding to key.
|
500
608
|
size_t mid = 0;
|
501
609
|
size_t start_index = 0;
|
@@ -503,9 +611,9 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
503
611
|
size_t index = 0;
|
504
612
|
while (end_index > start_index) {
|
505
613
|
mid = (start_index + end_index) / 2;
|
506
|
-
if (entry.weighted_cluster_state[mid].
|
614
|
+
if (entry.weighted_cluster_state[mid].range_end > key) {
|
507
615
|
end_index = mid;
|
508
|
-
} else if (entry.weighted_cluster_state[mid].
|
616
|
+
} else if (entry.weighted_cluster_state[mid].range_end < key) {
|
509
617
|
start_index = mid + 1;
|
510
618
|
} else {
|
511
619
|
index = mid + 1;
|
@@ -513,21 +621,56 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
513
621
|
}
|
514
622
|
}
|
515
623
|
if (index == 0) index = start_index;
|
516
|
-
GPR_ASSERT(entry.weighted_cluster_state[index].
|
517
|
-
cluster_name = entry.weighted_cluster_state[index].
|
624
|
+
GPR_ASSERT(entry.weighted_cluster_state[index].range_end > key);
|
625
|
+
cluster_name = entry.weighted_cluster_state[index].cluster;
|
626
|
+
method_config = entry.weighted_cluster_state[index].method_config;
|
518
627
|
}
|
519
628
|
auto it = clusters_.find(cluster_name);
|
520
629
|
GPR_ASSERT(it != clusters_.end());
|
521
630
|
XdsResolver* resolver =
|
522
631
|
static_cast<XdsResolver*>(resolver_->Ref().release());
|
523
632
|
ClusterState* cluster_state = it->second->Ref().release();
|
633
|
+
// Generate a hash
|
634
|
+
absl::optional<uint64_t> hash;
|
635
|
+
for (const auto& hash_policy : entry.route.hash_policies) {
|
636
|
+
absl::optional<uint64_t> new_hash;
|
637
|
+
switch (hash_policy.type) {
|
638
|
+
case XdsApi::Route::HashPolicy::HEADER:
|
639
|
+
new_hash = HeaderHashHelper(hash_policy, args.initial_metadata);
|
640
|
+
break;
|
641
|
+
case XdsApi::Route::HashPolicy::CHANNEL_ID:
|
642
|
+
new_hash =
|
643
|
+
static_cast<uint64_t>(reinterpret_cast<uintptr_t>(resolver));
|
644
|
+
break;
|
645
|
+
default:
|
646
|
+
GPR_ASSERT(0);
|
647
|
+
}
|
648
|
+
if (new_hash.has_value()) {
|
649
|
+
// Rotating the old value prevents duplicate hash rules from cancelling
|
650
|
+
// each other out and preserves all of the entropy
|
651
|
+
const uint64_t old_value =
|
652
|
+
hash.has_value() ? ((hash.value() << 1) | (hash.value() >> 63)) : 0;
|
653
|
+
hash = old_value ^ new_hash.value();
|
654
|
+
}
|
655
|
+
// If the policy is a terminal policy and a hash has been generated,
|
656
|
+
// ignore the rest of the hash policies.
|
657
|
+
if (hash_policy.terminal && hash.has_value()) {
|
658
|
+
break;
|
659
|
+
}
|
660
|
+
}
|
661
|
+
if (!hash.has_value()) {
|
662
|
+
// If there is no hash, we just choose a random value as a default.
|
663
|
+
hash = rand();
|
664
|
+
}
|
524
665
|
CallConfig call_config;
|
525
|
-
if (
|
526
|
-
call_config.service_config = entry.method_config;
|
666
|
+
if (method_config != nullptr) {
|
527
667
|
call_config.method_configs =
|
528
|
-
|
668
|
+
method_config->GetMethodParsedConfigVector(grpc_empty_slice());
|
669
|
+
call_config.service_config = std::move(method_config);
|
529
670
|
}
|
530
671
|
call_config.call_attributes[kXdsClusterAttribute] = it->first;
|
672
|
+
call_config.call_attributes[kRequestRingHashAttribute] =
|
673
|
+
absl::StrFormat("%" PRIu64, hash.value());
|
531
674
|
call_config.on_call_committed = [resolver, cluster_state]() {
|
532
675
|
cluster_state->Unref();
|
533
676
|
ExecCtx::Run(
|
@@ -543,7 +686,7 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
543
686
|
GRPC_CLOSURE_CREATE(
|
544
687
|
[](void* arg, grpc_error* /*error*/) {
|
545
688
|
auto* resolver = static_cast<XdsResolver*>(arg);
|
546
|
-
resolver->
|
689
|
+
resolver->work_serializer_->Run(
|
547
690
|
[resolver]() {
|
548
691
|
resolver->MaybeRemoveUnusedClusters();
|
549
692
|
resolver->Unref();
|
@@ -570,7 +713,7 @@ void XdsResolver::StartLocked() {
|
|
570
713
|
"Failed to create xds client -- channel will remain in "
|
571
714
|
"TRANSIENT_FAILURE: %s",
|
572
715
|
grpc_error_string(error));
|
573
|
-
|
716
|
+
result_handler_->ReturnError(error);
|
574
717
|
return;
|
575
718
|
}
|
576
719
|
grpc_pollset_set_add_pollset_set(xds_client_->interested_parties(),
|
@@ -615,24 +758,34 @@ void XdsResolver::OnListenerUpdate(XdsApi::LdsUpdate listener) {
|
|
615
758
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
616
759
|
gpr_log(GPR_INFO, "[xds_resolver %p] received updated listener data", this);
|
617
760
|
}
|
618
|
-
if (listener.route_config_name !=
|
761
|
+
if (listener.http_connection_manager.route_config_name !=
|
762
|
+
route_config_name_) {
|
619
763
|
if (route_config_watcher_ != nullptr) {
|
620
764
|
xds_client_->CancelRouteConfigDataWatch(
|
621
765
|
route_config_name_, route_config_watcher_,
|
622
|
-
/*delay_unsubscription
|
766
|
+
/*delay_unsubscription=*/
|
767
|
+
!listener.http_connection_manager.route_config_name.empty());
|
623
768
|
route_config_watcher_ = nullptr;
|
624
769
|
}
|
625
|
-
route_config_name_ =
|
770
|
+
route_config_name_ =
|
771
|
+
std::move(listener.http_connection_manager.route_config_name);
|
626
772
|
if (!route_config_name_.empty()) {
|
773
|
+
current_virtual_host_.routes.clear();
|
627
774
|
auto watcher = absl::make_unique<RouteConfigWatcher>(Ref());
|
628
775
|
route_config_watcher_ = watcher.get();
|
629
776
|
xds_client_->WatchRouteConfigData(route_config_name_, std::move(watcher));
|
630
777
|
}
|
631
778
|
}
|
632
|
-
|
779
|
+
current_listener_ = std::move(listener);
|
633
780
|
if (route_config_name_.empty()) {
|
634
|
-
GPR_ASSERT(
|
635
|
-
|
781
|
+
GPR_ASSERT(
|
782
|
+
current_listener_.http_connection_manager.rds_update.has_value());
|
783
|
+
OnRouteConfigUpdate(
|
784
|
+
std::move(*current_listener_.http_connection_manager.rds_update));
|
785
|
+
} else {
|
786
|
+
// HCM may contain newer filter config. We need to propagate the update as
|
787
|
+
// config selector to the channel
|
788
|
+
GenerateResult();
|
636
789
|
}
|
637
790
|
}
|
638
791
|
|
@@ -650,8 +803,8 @@ void XdsResolver::OnRouteConfigUpdate(XdsApi::RdsUpdate rds_update) {
|
|
650
803
|
.c_str()));
|
651
804
|
return;
|
652
805
|
}
|
653
|
-
// Save the
|
654
|
-
|
806
|
+
// Save the virtual host in the resolver.
|
807
|
+
current_virtual_host_ = std::move(*vhost);
|
655
808
|
// Send a new result to the channel.
|
656
809
|
GenerateResult();
|
657
810
|
}
|
@@ -662,7 +815,7 @@ void XdsResolver::OnError(grpc_error* error) {
|
|
662
815
|
Result result;
|
663
816
|
result.args = grpc_channel_args_copy(args_);
|
664
817
|
result.service_config_error = error;
|
665
|
-
|
818
|
+
result_handler_->ReturnResult(std::move(result));
|
666
819
|
}
|
667
820
|
|
668
821
|
void XdsResolver::OnResourceDoesNotExist() {
|
@@ -670,13 +823,13 @@ void XdsResolver::OnResourceDoesNotExist() {
|
|
670
823
|
"[xds_resolver %p] LDS/RDS resource does not exist -- clearing "
|
671
824
|
"update and returning empty service config",
|
672
825
|
this);
|
673
|
-
|
826
|
+
current_virtual_host_.routes.clear();
|
674
827
|
Result result;
|
675
828
|
result.service_config =
|
676
829
|
ServiceConfig::Create(args_, "{}", &result.service_config_error);
|
677
830
|
GPR_ASSERT(result.service_config != nullptr);
|
678
831
|
result.args = grpc_channel_args_copy(args_);
|
679
|
-
|
832
|
+
result_handler_->ReturnResult(std::move(result));
|
680
833
|
}
|
681
834
|
|
682
835
|
grpc_error* XdsResolver::CreateServiceConfig(
|
@@ -712,12 +865,11 @@ grpc_error* XdsResolver::CreateServiceConfig(
|
|
712
865
|
}
|
713
866
|
|
714
867
|
void XdsResolver::GenerateResult() {
|
715
|
-
if (
|
868
|
+
if (current_virtual_host_.routes.empty()) return;
|
716
869
|
// First create XdsConfigSelector, which may add new entries to the cluster
|
717
870
|
// state map, and then CreateServiceConfig for LB policies.
|
718
871
|
grpc_error* error = GRPC_ERROR_NONE;
|
719
|
-
auto config_selector =
|
720
|
-
MakeRefCounted<XdsConfigSelector>(Ref(), current_update_, error);
|
872
|
+
auto config_selector = MakeRefCounted<XdsConfigSelector>(Ref(), &error);
|
721
873
|
if (error != GRPC_ERROR_NONE) {
|
722
874
|
OnError(error);
|
723
875
|
return;
|
@@ -734,7 +886,7 @@ void XdsResolver::GenerateResult() {
|
|
734
886
|
}
|
735
887
|
grpc_arg new_arg = config_selector->MakeChannelArg();
|
736
888
|
result.args = grpc_channel_args_copy_and_add(args_, &new_arg, 1);
|
737
|
-
|
889
|
+
result_handler_->ReturnResult(std::move(result));
|
738
890
|
}
|
739
891
|
|
740
892
|
void XdsResolver::MaybeRemoveUnusedClusters() {
|