grpc 1.45.0 → 1.46.3
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 +36 -29
- data/include/grpc/impl/codegen/grpc_types.h +7 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +122 -0
- data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
- data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +3 -3
- data/src/core/ext/filters/client_channel/client_channel.cc +163 -96
- data/src/core/ext/filters/client_channel/client_channel.h +2 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +124 -581
- data/src/core/ext/filters/client_channel/health/health_check_client.h +24 -160
- data/src/core/ext/filters/client_channel/http_proxy.cc +88 -110
- data/src/core/ext/filters/client_channel/http_proxy.h +17 -0
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +182 -142
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +1 -10
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +87 -58
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +51 -48
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +229 -284
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +92 -257
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +51 -221
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +201 -0
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +106 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +102 -55
- data/src/core/ext/filters/client_channel/retry_filter.cc +18 -3
- data/src/core/ext/filters/client_channel/subchannel.cc +5 -5
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +544 -0
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +214 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +127 -367
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +24 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +78 -458
- data/src/core/ext/filters/http/client/http_client_filter.h +21 -4
- data/src/core/ext/filters/http/client_authority_filter.cc +17 -22
- data/src/core/ext/filters/http/client_authority_filter.h +6 -5
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -6
- data/src/core/ext/filters/http/server/http_server_filter.cc +2 -116
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +2 -8
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +2 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +73 -201
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -28
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -6
- data/src/core/ext/transport/chttp2/transport/internal.h +4 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +8 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +24 -13
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +27 -24
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +143 -63
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +37 -35
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +177 -77
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +115 -111
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +547 -207
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +26 -13
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +23 -9
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +18 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +13 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +9 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +49 -46
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +217 -78
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +10 -2
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +40 -8
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +20 -2
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +55 -55
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +289 -110
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +133 -125
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +656 -267
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +24 -18
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +96 -23
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +185 -173
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +860 -309
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +10 -2
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +44 -24
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +165 -40
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +72 -63
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +433 -174
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +33 -31
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +154 -52
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +14 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +89 -89
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +460 -166
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +76 -33
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +379 -69
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +14 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +5 -25
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +10 -91
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +26 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +70 -68
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +369 -131
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +94 -65
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +447 -161
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +27 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +104 -85
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +378 -113
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +3 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +30 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +43 -16
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +58 -24
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +14 -4
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +18 -18
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +100 -43
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +31 -30
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +171 -71
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +196 -95
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +7 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +53 -46
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +284 -129
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +56 -50
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +337 -146
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +13 -11
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +49 -14
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +14 -4
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +20 -4
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +33 -32
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +205 -86
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +34 -34
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +175 -74
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +56 -52
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +370 -146
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +27 -23
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +173 -74
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +362 -341
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2056 -845
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +11 -11
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +49 -16
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +56 -50
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +293 -111
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +10 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +26 -10
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +27 -12
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +17 -16
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +83 -36
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +7 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +46 -17
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +38 -12
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +10 -6
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +15 -15
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +71 -28
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +25 -25
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +149 -65
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +8 -7
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +30 -12
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +42 -15
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +173 -144
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +898 -323
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +51 -45
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +261 -116
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +13 -13
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +70 -25
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +80 -55
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +410 -124
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +23 -9
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +44 -44
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +261 -122
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +47 -21
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +32 -32
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +175 -66
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +17 -6
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +38 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +12 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +43 -18
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +20 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +24 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +14 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +40 -16
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +70 -25
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +37 -18
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +81 -30
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +16 -16
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +76 -30
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +20 -20
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +90 -30
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +28 -10
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +3 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +13 -4
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +9 -0
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +17 -4
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +3 -3
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +17 -2
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +70 -66
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +410 -162
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +80 -74
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +440 -158
- data/src/core/ext/upb-generated/google/api/http.upb.c +17 -17
- data/src/core/ext/upb-generated/google/api/http.upb.h +116 -43
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -4
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +19 -7
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +163 -162
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1157 -435
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +10 -4
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +108 -40
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +10 -4
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +18 -18
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -4
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +19 -7
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +15 -15
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +65 -22
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +49 -12
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +69 -65
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +364 -149
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -7
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +20 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +4 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +150 -58
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +11 -11
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +51 -18
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +22 -22
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +97 -10
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +23 -2
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +10 -2
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +27 -6
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +5 -5
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +20 -2
- data/src/core/ext/upb-generated/validate/validate.upb.c +261 -250
- data/src/core/ext/upb-generated/validate/validate.upb.h +1836 -663
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +22 -22
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +97 -10
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +23 -2
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +10 -2
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +18 -18
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +70 -10
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +20 -2
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +3 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +38 -12
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +27 -10
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +10 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +21 -8
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +10 -10
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +71 -30
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +16 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +12 -12
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +69 -26
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +43 -39
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +255 -103
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +4 -4
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +19 -8
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +9 -9
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +70 -25
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +10 -2
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +50 -46
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +195 -185
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +129 -94
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +18 -33
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +163 -155
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +141 -138
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +26 -20
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +738 -730
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +271 -251
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +207 -193
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
- data/src/core/ext/xds/certificate_provider_store.cc +8 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/xds_api.cc +20 -0
- data/src/core/ext/xds/xds_bootstrap.cc +2 -2
- data/src/core/ext/xds/xds_bootstrap.h +2 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +2 -0
- data/src/core/ext/xds/xds_certificate_provider.h +8 -0
- data/src/core/ext/xds/xds_client.cc +87 -95
- data/src/core/ext/xds/xds_client.h +13 -5
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
- data/src/core/ext/xds/xds_common_types.cc +9 -9
- data/src/core/ext/xds/xds_common_types.h +3 -3
- data/src/core/ext/xds/xds_endpoint.cc +12 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +1 -1
- data/src/core/ext/xds/xds_listener.cc +1 -1
- data/src/core/ext/xds/xds_route_config.cc +162 -25
- data/src/core/ext/xds/xds_route_config.h +13 -10
- data/src/core/ext/xds/xds_server_config_fetcher.cc +17 -22
- data/src/core/lib/avl/avl.h +68 -5
- data/src/core/lib/channel/call_tracer.h +4 -1
- data/src/core/lib/channel/channel_args.cc +138 -59
- data/src/core/lib/channel/channel_args.h +210 -9
- data/src/core/lib/channel/channel_args_preconditioning.cc +3 -9
- data/src/core/lib/channel/channel_args_preconditioning.h +1 -2
- data/src/core/lib/channel/channel_stack.h +2 -5
- data/src/core/lib/channel/channel_stack_builder.cc +0 -65
- data/src/core/lib/channel/channel_stack_builder.h +27 -6
- data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
- data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +495 -162
- data/src/core/lib/channel/promise_based_filter.h +55 -41
- data/src/core/lib/compression/compression_internal.cc +1 -7
- data/src/core/lib/debug/stats_data.cc +2 -6
- data/src/core/lib/debug/stats_data.h +18 -21
- data/src/core/lib/gpr/tls.h +1 -0
- data/src/core/lib/gprpp/bitset.h +12 -0
- data/src/core/lib/gprpp/cpp_impl_of.h +4 -0
- data/src/core/lib/gprpp/match.h +73 -0
- data/src/core/lib/gprpp/overload.h +59 -0
- data/src/core/lib/gprpp/ref_counted.h +2 -0
- data/src/core/lib/gprpp/single_set_ptr.h +87 -0
- data/src/core/lib/gprpp/status_helper.cc +18 -2
- data/src/core/lib/gprpp/time.cc +12 -0
- data/src/core/lib/gprpp/time.h +1 -1
- data/src/core/lib/http/format_request.cc +1 -2
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/http/parser.cc +80 -9
- data/src/core/lib/http/parser.h +14 -1
- data/src/core/lib/iomgr/ev_posix.cc +6 -7
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/port.h +0 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +2 -2
- data/src/core/lib/iomgr/tcp_posix.cc +93 -35
- data/src/core/lib/iomgr/tcp_server_posix.cc +26 -17
- data/src/core/lib/json/json_util.h +3 -3
- data/src/core/lib/promise/call_push_pull.h +144 -0
- data/src/core/lib/promise/detail/status.h +2 -1
- data/src/core/lib/promise/intra_activity_waiter.h +49 -0
- data/src/core/lib/promise/latch.h +104 -0
- data/src/core/lib/resource_quota/api.cc +5 -30
- data/src/core/lib/resource_quota/api.h +1 -1
- data/src/core/lib/resource_quota/resource_quota.h +8 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +9 -12
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +5 -6
- data/src/core/lib/security/context/security_context.h +8 -1
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
- data/src/core/lib/security/credentials/alts/alts_credentials.h +4 -0
- data/src/core/lib/security/credentials/call_creds_util.cc +3 -3
- data/src/core/lib/security/credentials/call_creds_util.h +2 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +15 -10
- data/src/core/lib/security/credentials/composite/composite_credentials.h +9 -8
- data/src/core/lib/security/credentials/credentials.h +16 -33
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -12
- data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -5
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -4
- data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +22 -29
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +6 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +6 -6
- data/src/core/lib/security/credentials/local/local_credentials.h +4 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -9
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +14 -6
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -6
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +8 -6
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +6 -4
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +8 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +49 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +8 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +42 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +66 -95
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +9 -6
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -5
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +48 -50
- data/src/core/lib/security/credentials/xds/xds_credentials.h +31 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/security_connector.h +9 -0
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -2
- data/src/core/lib/security/transport/auth_filters.h +7 -7
- data/src/core/lib/security/transport/client_auth_filter.cc +28 -20
- data/src/core/lib/security/transport/secure_endpoint.cc +198 -129
- data/src/core/lib/security/transport/secure_endpoint.h +1 -1
- data/src/core/lib/security/transport/security_handshaker.cc +6 -4
- data/src/core/lib/surface/call.cc +1023 -903
- data/src/core/lib/surface/call.h +0 -14
- data/src/core/lib/surface/channel.cc +4 -3
- data/src/core/lib/surface/channel_init.cc +2 -3
- data/src/core/lib/surface/channel_init.h +2 -6
- data/src/core/lib/surface/init.cc +1 -1
- data/src/core/lib/surface/server.cc +3 -14
- data/src/core/lib/surface/server.h +1 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/byte_stream.cc +2 -0
- data/src/core/lib/transport/metadata_batch.h +12 -8
- data/src/core/lib/transport/transport.h +20 -5
- data/src/core/lib/transport/transport_impl.h +4 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
- data/src/core/tsi/ssl_transport_security.cc +75 -38
- data/src/core/tsi/ssl_transport_security.h +8 -2
- data/src/core/tsi/transport_security_interface.h +2 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
- data/src/ruby/lib/grpc/grpc.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +1 -0
- data/src/ruby/pb/test/client.rb +769 -0
- data/src/ruby/pb/test/server.rb +252 -0
- data/src/ruby/pb/test/xds_client.rb +415 -0
- data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
- data/third_party/upb/upb/decode.c +32 -16
- data/third_party/upb/upb/def.c +118 -55
- data/third_party/upb/upb/def.h +12 -3
- data/third_party/upb/upb/encode.c +14 -8
- data/third_party/upb/upb/json_encode.c +776 -0
- data/third_party/upb/upb/json_encode.h +62 -0
- data/third_party/upb/upb/msg.c +5 -7
- data/third_party/upb/upb/msg.h +1 -2
- data/third_party/upb/upb/msg_internal.h +49 -36
- data/third_party/upb/upb/port_def.inc +8 -0
- data/third_party/upb/upb/port_undef.inc +1 -0
- data/third_party/upb/upb/table.c +10 -6
- data/third_party/upb/upb/table_internal.h +2 -0
- data/third_party/upb/upb/upb.h +41 -11
- data/third_party/zlib/crc32.c +966 -292
- data/third_party/zlib/crc32.h +9441 -436
- data/third_party/zlib/deflate.c +78 -30
- data/third_party/zlib/deflate.h +12 -15
- data/third_party/zlib/gzguts.h +3 -2
- data/third_party/zlib/gzlib.c +5 -3
- data/third_party/zlib/gzread.c +5 -7
- data/third_party/zlib/gzwrite.c +25 -13
- data/third_party/zlib/infback.c +2 -1
- data/third_party/zlib/inffast.c +14 -14
- data/third_party/zlib/inflate.c +39 -8
- data/third_party/zlib/inflate.h +3 -2
- data/third_party/zlib/inftrees.c +3 -3
- data/third_party/zlib/trees.c +27 -48
- data/third_party/zlib/zlib.h +123 -100
- data/third_party/zlib/zutil.c +2 -2
- data/third_party/zlib/zutil.h +12 -9
- metadata +66 -45
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
- data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
- data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
- data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
- data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
- data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
@@ -38,6 +38,7 @@
|
|
38
38
|
#include "src/core/ext/xds/xds_channel_args.h"
|
39
39
|
#include "src/core/ext/xds/xds_client_stats.h"
|
40
40
|
#include "src/core/ext/xds/xds_cluster.h"
|
41
|
+
#include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
|
41
42
|
#include "src/core/ext/xds/xds_endpoint.h"
|
42
43
|
#include "src/core/ext/xds/xds_http_filters.h"
|
43
44
|
#include "src/core/ext/xds/xds_listener.h"
|
@@ -83,43 +84,6 @@ char* g_fallback_bootstrap_config ABSL_GUARDED_BY(*g_mu) = nullptr;
|
|
83
84
|
|
84
85
|
} // namespace
|
85
86
|
|
86
|
-
class XdsClient::Notifier {
|
87
|
-
public:
|
88
|
-
// Helper template function to invoke `OnError()` on a list of watchers \a
|
89
|
-
// watchers_list within \a work_serializer. Works with all 4 resource types.
|
90
|
-
template <class T>
|
91
|
-
static void ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
92
|
-
XdsClient* xds_client, const T& watchers_list, grpc_error_handle error,
|
93
|
-
const DebugLocation& location) {
|
94
|
-
xds_client->work_serializer_.Schedule(
|
95
|
-
[watchers_list, error]()
|
96
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client->work_serializer_) {
|
97
|
-
for (const auto& p : watchers_list) {
|
98
|
-
p.first->OnError(GRPC_ERROR_REF(error));
|
99
|
-
}
|
100
|
-
GRPC_ERROR_UNREF(error);
|
101
|
-
},
|
102
|
-
location);
|
103
|
-
}
|
104
|
-
|
105
|
-
// Helper template function to invoke `OnResourceDoesNotExist()` on a list of
|
106
|
-
// watchers \a watchers_list within \a work_serializer. Works with all 4
|
107
|
-
// resource types.
|
108
|
-
template <class T>
|
109
|
-
static void ScheduleNotifyWatchersOnResourceDoesNotExistInWorkSerializer(
|
110
|
-
XdsClient* xds_client, const T& watchers_list,
|
111
|
-
const DebugLocation& location) {
|
112
|
-
xds_client->work_serializer_.Schedule(
|
113
|
-
[watchers_list]()
|
114
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client->work_serializer_) {
|
115
|
-
for (const auto& p : watchers_list) {
|
116
|
-
p.first->OnResourceDoesNotExist();
|
117
|
-
}
|
118
|
-
},
|
119
|
-
location);
|
120
|
-
}
|
121
|
-
};
|
122
|
-
|
123
87
|
//
|
124
88
|
// Internal class declarations
|
125
89
|
//
|
@@ -177,7 +141,8 @@ class XdsClient::ChannelState::AdsCallState
|
|
177
141
|
XdsClient* xds_client() const { return chand()->xds_client(); }
|
178
142
|
bool seen_response() const { return seen_response_; }
|
179
143
|
|
180
|
-
void SubscribeLocked(const XdsResourceType* type, const XdsResourceName& name
|
144
|
+
void SubscribeLocked(const XdsResourceType* type, const XdsResourceName& name,
|
145
|
+
bool delay_send)
|
181
146
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
182
147
|
void UnsubscribeLocked(const XdsResourceType* type,
|
183
148
|
const XdsResourceName& name, bool delay_unsubscription)
|
@@ -268,27 +233,23 @@ class XdsClient::ChannelState::AdsCallState
|
|
268
233
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
269
234
|
if (error == GRPC_ERROR_NONE && timer_pending_) {
|
270
235
|
timer_pending_ = false;
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
name_.authority, type_->type_url(), name_.key)));
|
277
|
-
watcher_error = grpc_error_set_int(
|
278
|
-
watcher_error, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
236
|
+
absl::Status watcher_error = absl::UnavailableError(absl::StrFormat(
|
237
|
+
"timeout obtaining resource {type=%s name=%s} from xds server",
|
238
|
+
type_->type_url(),
|
239
|
+
XdsClient::ConstructFullXdsResourceName(
|
240
|
+
name_.authority, type_->type_url(), name_.key)));
|
279
241
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
280
242
|
gpr_log(GPR_INFO, "[xds_client %p] xds server %s: %s",
|
281
243
|
ads_calld_->xds_client(),
|
282
244
|
ads_calld_->chand()->server_.server_uri.c_str(),
|
283
|
-
|
245
|
+
watcher_error.ToString().c_str());
|
284
246
|
}
|
285
247
|
auto& authority_state =
|
286
248
|
ads_calld_->xds_client()->authority_state_map_[name_.authority];
|
287
249
|
ResourceState& state = authority_state.resource_map[type_][name_.key];
|
288
250
|
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
289
|
-
|
290
|
-
|
291
|
-
DEBUG_LOCATION);
|
251
|
+
ads_calld_->xds_client()->NotifyWatchersOnErrorLocked(state.watchers,
|
252
|
+
watcher_error);
|
292
253
|
}
|
293
254
|
GRPC_ERROR_UNREF(error);
|
294
255
|
}
|
@@ -495,7 +456,7 @@ class XdsClient::ChannelState::StateWatcher
|
|
495
456
|
parent_->xds_client(), parent_->server_.server_uri.c_str(),
|
496
457
|
status.ToString().c_str());
|
497
458
|
parent_->xds_client_->NotifyOnErrorLocked(
|
498
|
-
|
459
|
+
absl::UnavailableError(absl::StrCat(
|
499
460
|
"xds channel in TRANSIENT_FAILURE, connectivity error: ",
|
500
461
|
status.ToString())));
|
501
462
|
}
|
@@ -602,7 +563,7 @@ bool IsLameChannel(grpc_channel* channel) {
|
|
602
563
|
void XdsClient::ChannelState::StartConnectivityWatchLocked() {
|
603
564
|
if (IsLameChannel(channel_)) {
|
604
565
|
xds_client()->NotifyOnErrorLocked(
|
605
|
-
|
566
|
+
absl::UnavailableError("xds client has a lame channel"));
|
606
567
|
return;
|
607
568
|
}
|
608
569
|
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
@@ -637,7 +598,7 @@ void XdsClient::ChannelState::SubscribeLocked(const XdsResourceType* type,
|
|
637
598
|
// because when the call is restarted it will resend all necessary requests.
|
638
599
|
if (ads_calld() == nullptr) return;
|
639
600
|
// Subscribe to this resource if the ADS call is active.
|
640
|
-
ads_calld()->SubscribeLocked(type, name);
|
601
|
+
ads_calld()->SubscribeLocked(type, name, /*delay_send=*/false);
|
641
602
|
}
|
642
603
|
|
643
604
|
void XdsClient::ChannelState::UnsubscribeLocked(const XdsResourceType* type,
|
@@ -685,17 +646,11 @@ void XdsClient::ChannelState::RetryableCall<T>::Orphan() {
|
|
685
646
|
|
686
647
|
template <typename T>
|
687
648
|
void XdsClient::ChannelState::RetryableCall<T>::OnCallFinishedLocked() {
|
688
|
-
|
649
|
+
// If we saw a response on the current stream, reset backoff.
|
650
|
+
if (calld_->seen_response()) backoff_.Reset();
|
689
651
|
calld_.reset();
|
690
|
-
|
691
|
-
|
692
|
-
// call immediately.
|
693
|
-
backoff_.Reset();
|
694
|
-
StartNewCallLocked();
|
695
|
-
} else {
|
696
|
-
// If we failed to connect to the xds server, retry later.
|
697
|
-
StartRetryTimerLocked();
|
698
|
-
}
|
652
|
+
// Start retry timer.
|
653
|
+
StartRetryTimerLocked();
|
699
654
|
}
|
700
655
|
|
701
656
|
template <typename T>
|
@@ -833,7 +788,7 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
|
|
833
788
|
}
|
834
789
|
// Check the resource name.
|
835
790
|
auto resource_name =
|
836
|
-
|
791
|
+
xds_client()->ParseXdsResourceName(result->name, result_.type);
|
837
792
|
if (!resource_name.ok()) {
|
838
793
|
result_.errors.emplace_back(absl::StrCat(
|
839
794
|
"resource index ", idx, ": Cannot parse xDS resource name \"",
|
@@ -880,13 +835,10 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
|
|
880
835
|
result_.errors.emplace_back(absl::StrCat(
|
881
836
|
"resource index ", idx, ": ", result->name,
|
882
837
|
": validation error: ", result->resource.status().ToString()));
|
883
|
-
|
884
|
-
|
885
|
-
|
886
|
-
|
887
|
-
"invalid resource: ", result->resource.status().ToString())),
|
888
|
-
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE),
|
889
|
-
DEBUG_LOCATION);
|
838
|
+
xds_client()->NotifyWatchersOnErrorLocked(
|
839
|
+
resource_state.watchers,
|
840
|
+
absl::UnavailableError(absl::StrCat(
|
841
|
+
"invalid resource: ", result->resource.status().ToString())));
|
890
842
|
UpdateResourceMetadataNacked(result_.version,
|
891
843
|
result->resource.status().ToString(),
|
892
844
|
update_time_, &resource_state.meta);
|
@@ -988,10 +940,13 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
988
940
|
const XdsResourceType* type = t.first;
|
989
941
|
for (const auto& r : t.second) {
|
990
942
|
const XdsResourceKey& resource_key = r.first;
|
991
|
-
SubscribeLocked(type, {authority, resource_key});
|
943
|
+
SubscribeLocked(type, {authority, resource_key}, /*delay_send=*/true);
|
992
944
|
}
|
993
945
|
}
|
994
946
|
}
|
947
|
+
for (const auto& p : state_map_) {
|
948
|
+
SendMessageLocked(p.first);
|
949
|
+
}
|
995
950
|
// Op: recv initial metadata.
|
996
951
|
op = ops;
|
997
952
|
op->op = GRPC_OP_RECV_INITIAL_METADATA;
|
@@ -1106,11 +1061,11 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
1106
1061
|
}
|
1107
1062
|
|
1108
1063
|
void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
|
1109
|
-
const XdsResourceType* type, const XdsResourceName& name) {
|
1064
|
+
const XdsResourceType* type, const XdsResourceName& name, bool delay_send) {
|
1110
1065
|
auto& state = state_map_[type].subscribed_resources[name.authority][name.key];
|
1111
1066
|
if (state == nullptr) {
|
1112
1067
|
state = MakeOrphanable<ResourceTimer>(type, name);
|
1113
|
-
SendMessageLocked(type);
|
1068
|
+
if (!delay_send) SendMessageLocked(type);
|
1114
1069
|
}
|
1115
1070
|
}
|
1116
1071
|
|
@@ -1204,6 +1159,7 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1204
1159
|
xds_client(), chand()->server_.server_uri.c_str(),
|
1205
1160
|
status.ToString().c_str());
|
1206
1161
|
} else {
|
1162
|
+
seen_response_ = true;
|
1207
1163
|
AdsResponseParser::Result result = parser.TakeResult();
|
1208
1164
|
// Update nonce.
|
1209
1165
|
auto& state = state_map_[result.type];
|
@@ -1250,16 +1206,14 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1250
1206
|
// instead.
|
1251
1207
|
if (resource_state.resource == nullptr) continue;
|
1252
1208
|
resource_state.resource.reset();
|
1253
|
-
|
1254
|
-
|
1255
|
-
xds_client(), resource_state.watchers, DEBUG_LOCATION);
|
1209
|
+
xds_client()->NotifyWatchersOnResourceDoesNotExist(
|
1210
|
+
resource_state.watchers);
|
1256
1211
|
}
|
1257
1212
|
}
|
1258
1213
|
}
|
1259
1214
|
}
|
1260
1215
|
// If we had valid resources, update the version.
|
1261
1216
|
if (result.have_valid_resources) {
|
1262
|
-
seen_response_ = true;
|
1263
1217
|
chand()->resource_type_version_map_[result.type] =
|
1264
1218
|
std::move(result.version);
|
1265
1219
|
// Start load reporting if needed.
|
@@ -1317,13 +1271,11 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
|
1317
1271
|
// Try to restart the call.
|
1318
1272
|
parent_->OnCallFinishedLocked();
|
1319
1273
|
// Send error to all watchers.
|
1320
|
-
xds_client()->NotifyOnErrorLocked(
|
1321
|
-
|
1322
|
-
|
1323
|
-
|
1324
|
-
|
1325
|
-
StringViewFromSlice(status_details_),
|
1326
|
-
grpc_error_std_string(error))));
|
1274
|
+
xds_client()->NotifyOnErrorLocked(absl::UnavailableError(absl::StrFormat(
|
1275
|
+
"xDS call failed: xDS server: %s, ADS call status code=%d, "
|
1276
|
+
"details='%s', error='%s'",
|
1277
|
+
chand()->server_.server_uri, status_code_,
|
1278
|
+
StringViewFromSlice(status_details_), grpc_error_std_string(error))));
|
1327
1279
|
}
|
1328
1280
|
GRPC_ERROR_UNREF(error);
|
1329
1281
|
}
|
@@ -1836,6 +1788,7 @@ XdsClient::XdsClient(std::unique_ptr<XdsBootstrap> bootstrap,
|
|
1836
1788
|
bootstrap_(std::move(bootstrap)),
|
1837
1789
|
args_(ModifyChannelArgs(args)),
|
1838
1790
|
request_timeout_(GetRequestTimeout(args)),
|
1791
|
+
xds_federation_enabled_(XdsFederationEnabled()),
|
1839
1792
|
interested_parties_(grpc_pollset_set_create()),
|
1840
1793
|
certificate_provider_store_(MakeOrphanable<CertificateProviderStore>(
|
1841
1794
|
bootstrap_->certificate_providers())),
|
@@ -1895,7 +1848,7 @@ void XdsClient::WatchResource(const XdsResourceType* type,
|
|
1895
1848
|
RefCountedPtr<ResourceWatcherInterface> watcher) {
|
1896
1849
|
ResourceWatcherInterface* w = watcher.get();
|
1897
1850
|
// Lambda for handling failure cases.
|
1898
|
-
auto fail = [&](
|
1851
|
+
auto fail = [&](absl::Status status) mutable {
|
1899
1852
|
{
|
1900
1853
|
MutexLock lock(&mu_);
|
1901
1854
|
MaybeRegisterResourceTypeLocked(type);
|
@@ -1904,14 +1857,14 @@ void XdsClient::WatchResource(const XdsResourceType* type,
|
|
1904
1857
|
work_serializer_.Run(
|
1905
1858
|
// TODO(yashykt): When we move to C++14, capture watcher using
|
1906
1859
|
// std::move()
|
1907
|
-
[watcher,
|
1908
|
-
watcher->OnError(
|
1860
|
+
[watcher, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1861
|
+
watcher->OnError(status);
|
1909
1862
|
},
|
1910
1863
|
DEBUG_LOCATION);
|
1911
1864
|
};
|
1912
1865
|
auto resource_name = ParseXdsResourceName(name, type);
|
1913
1866
|
if (!resource_name.ok()) {
|
1914
|
-
fail(
|
1867
|
+
fail(absl::UnavailableError(absl::StrFormat(
|
1915
1868
|
"Unable to parse resource name for listener %s", name)));
|
1916
1869
|
return;
|
1917
1870
|
}
|
@@ -1921,7 +1874,7 @@ void XdsClient::WatchResource(const XdsResourceType* type,
|
|
1921
1874
|
if (absl::ConsumePrefix(&authority_name, "xdstp:")) {
|
1922
1875
|
auto* authority = bootstrap_->LookupAuthority(std::string(authority_name));
|
1923
1876
|
if (authority == nullptr) {
|
1924
|
-
fail(
|
1877
|
+
fail(absl::UnavailableError(
|
1925
1878
|
absl::StrCat("authority \"", authority_name,
|
1926
1879
|
"\" not present in bootstrap config")));
|
1927
1880
|
return;
|
@@ -1978,6 +1931,7 @@ void XdsClient::CancelResourceWatch(const XdsResourceType* type,
|
|
1978
1931
|
}
|
1979
1932
|
if (shutting_down_) return;
|
1980
1933
|
// Find authority.
|
1934
|
+
if (!resource_name.ok()) return;
|
1981
1935
|
auto authority_it = authority_state_map_.find(resource_name->authority);
|
1982
1936
|
if (authority_it == authority_state_map_.end()) return;
|
1983
1937
|
AuthorityState& authority_state = authority_it->second;
|
@@ -2030,7 +1984,7 @@ absl::StatusOr<XdsClient::XdsResourceName> XdsClient::ParseXdsResourceName(
|
|
2030
1984
|
absl::string_view name, const XdsResourceType* type) {
|
2031
1985
|
// Old-style names use the empty string for authority.
|
2032
1986
|
// authority is prefixed with "old:" to indicate that it's an old-style name.
|
2033
|
-
if (!absl::StartsWith(name, "xdstp:")) {
|
1987
|
+
if (!xds_federation_enabled_ || !absl::StartsWith(name, "xdstp:")) {
|
2034
1988
|
return XdsResourceName{"old:", {std::string(name), {}}};
|
2035
1989
|
}
|
2036
1990
|
// New style name. Parse URI.
|
@@ -2202,7 +2156,13 @@ void XdsClient::ResetBackoff() {
|
|
2202
2156
|
}
|
2203
2157
|
}
|
2204
2158
|
|
2205
|
-
void XdsClient::NotifyOnErrorLocked(
|
2159
|
+
void XdsClient::NotifyOnErrorLocked(absl::Status status) {
|
2160
|
+
const auto* node = bootstrap_->node();
|
2161
|
+
if (node != nullptr) {
|
2162
|
+
status = absl::Status(
|
2163
|
+
status.code(), absl::StrCat(status.message(),
|
2164
|
+
" (node ID:", bootstrap_->node()->id, ")"));
|
2165
|
+
}
|
2206
2166
|
std::set<RefCountedPtr<ResourceWatcherInterface>> watchers;
|
2207
2167
|
for (const auto& a : authority_state_map_) { // authority
|
2208
2168
|
for (const auto& t : a.second.resource_map) { // type
|
@@ -2216,11 +2176,41 @@ void XdsClient::NotifyOnErrorLocked(grpc_error_handle error) {
|
|
2216
2176
|
work_serializer_.Schedule(
|
2217
2177
|
// TODO(yashykt): When we move to C++14, capture watchers using
|
2218
2178
|
// std::move()
|
2219
|
-
[watchers,
|
2179
|
+
[watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
|
2220
2180
|
for (const auto& watcher : watchers) {
|
2221
|
-
watcher->OnError(
|
2181
|
+
watcher->OnError(status);
|
2182
|
+
}
|
2183
|
+
},
|
2184
|
+
DEBUG_LOCATION);
|
2185
|
+
}
|
2186
|
+
|
2187
|
+
void XdsClient::NotifyWatchersOnErrorLocked(
|
2188
|
+
const std::map<ResourceWatcherInterface*,
|
2189
|
+
RefCountedPtr<ResourceWatcherInterface>>& watchers,
|
2190
|
+
absl::Status status) {
|
2191
|
+
const auto* node = bootstrap_->node();
|
2192
|
+
if (node != nullptr) {
|
2193
|
+
status = absl::Status(
|
2194
|
+
status.code(), absl::StrCat(status.message(),
|
2195
|
+
" (node ID:", bootstrap_->node()->id, ")"));
|
2196
|
+
}
|
2197
|
+
work_serializer_.Schedule(
|
2198
|
+
[watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
2199
|
+
for (const auto& p : watchers) {
|
2200
|
+
p.first->OnError(status);
|
2201
|
+
}
|
2202
|
+
},
|
2203
|
+
DEBUG_LOCATION);
|
2204
|
+
}
|
2205
|
+
|
2206
|
+
void XdsClient::NotifyWatchersOnResourceDoesNotExist(
|
2207
|
+
const std::map<ResourceWatcherInterface*,
|
2208
|
+
RefCountedPtr<ResourceWatcherInterface>>& watchers) {
|
2209
|
+
work_serializer_.Schedule(
|
2210
|
+
[watchers]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
2211
|
+
for (const auto& p : watchers) {
|
2212
|
+
p.first->OnResourceDoesNotExist();
|
2222
2213
|
}
|
2223
|
-
GRPC_ERROR_UNREF(error);
|
2224
2214
|
},
|
2225
2215
|
DEBUG_LOCATION);
|
2226
2216
|
}
|
@@ -2338,6 +2328,7 @@ std::string XdsClient::DumpClientConfigBinary() {
|
|
2338
2328
|
void XdsClientGlobalInit() {
|
2339
2329
|
g_mu = new Mutex;
|
2340
2330
|
XdsHttpFilterRegistry::Init();
|
2331
|
+
XdsClusterSpecifierPluginRegistry::Init();
|
2341
2332
|
}
|
2342
2333
|
|
2343
2334
|
// TODO(roth): Find a better way to clear the fallback config that does
|
@@ -2348,6 +2339,7 @@ void XdsClientGlobalShutdown() ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
|
2348
2339
|
delete g_mu;
|
2349
2340
|
g_mu = nullptr;
|
2350
2341
|
XdsHttpFilterRegistry::Shutdown();
|
2342
|
+
XdsClusterSpecifierPluginRegistry::Shutdown();
|
2351
2343
|
}
|
2352
2344
|
|
2353
2345
|
namespace {
|
@@ -55,7 +55,7 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
55
55
|
virtual void OnGenericResourceChanged(
|
56
56
|
const XdsResourceType::ResourceData* resource)
|
57
57
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) = 0;
|
58
|
-
virtual void OnError(
|
58
|
+
virtual void OnError(absl::Status status)
|
59
59
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) = 0;
|
60
60
|
virtual void OnResourceDoesNotExist()
|
61
61
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) = 0;
|
@@ -266,11 +266,18 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
266
266
|
LoadReportMap load_report_map;
|
267
267
|
};
|
268
268
|
|
269
|
-
class Notifier;
|
270
|
-
|
271
269
|
// Sends an error notification to all watchers.
|
272
|
-
void NotifyOnErrorLocked(
|
270
|
+
void NotifyOnErrorLocked(absl::Status status)
|
273
271
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
272
|
+
// Sends an error notification to a specific set of watchers.
|
273
|
+
void NotifyWatchersOnErrorLocked(
|
274
|
+
const std::map<ResourceWatcherInterface*,
|
275
|
+
RefCountedPtr<ResourceWatcherInterface>>& watchers,
|
276
|
+
absl::Status status);
|
277
|
+
// Sends a resource-does-not-exist notification to a specific set of watchers.
|
278
|
+
void NotifyWatchersOnResourceDoesNotExist(
|
279
|
+
const std::map<ResourceWatcherInterface*,
|
280
|
+
RefCountedPtr<ResourceWatcherInterface>>& watchers);
|
274
281
|
|
275
282
|
void MaybeRegisterResourceTypeLocked(const XdsResourceType* resource_type)
|
276
283
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
@@ -279,7 +286,7 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
279
286
|
const XdsResourceType* GetResourceTypeLocked(absl::string_view resource_type)
|
280
287
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
281
288
|
|
282
|
-
|
289
|
+
absl::StatusOr<XdsResourceName> ParseXdsResourceName(
|
283
290
|
absl::string_view name, const XdsResourceType* type);
|
284
291
|
static std::string ConstructFullXdsResourceName(
|
285
292
|
absl::string_view authority, absl::string_view resource_type,
|
@@ -295,6 +302,7 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
295
302
|
std::unique_ptr<XdsBootstrap> bootstrap_;
|
296
303
|
grpc_channel_args* args_;
|
297
304
|
const Duration request_timeout_;
|
305
|
+
const bool xds_federation_enabled_;
|
298
306
|
grpc_pollset_set* interested_parties_;
|
299
307
|
OrphanablePtr<CertificateProviderStore> certificate_provider_store_;
|
300
308
|
XdsApi api_;
|
@@ -0,0 +1,142 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2022 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
|
20
|
+
|
21
|
+
#include "absl/strings/str_format.h"
|
22
|
+
#include "envoy/extensions/filters/http/router/v3/router.upb.h"
|
23
|
+
#include "envoy/extensions/filters/http/router/v3/router.upbdefs.h"
|
24
|
+
#include "google/protobuf/duration.upb.h"
|
25
|
+
#include "upb/json_encode.h"
|
26
|
+
|
27
|
+
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
28
|
+
#include "src/core/ext/xds/upb_utils.h"
|
29
|
+
#include "src/proto/grpc/lookup/v1/rls_config.upb.h"
|
30
|
+
#include "src/proto/grpc/lookup/v1/rls_config.upbdefs.h"
|
31
|
+
|
32
|
+
namespace grpc_core {
|
33
|
+
|
34
|
+
const char* kXdsRouteLookupClusterSpecifierPluginConfigName =
|
35
|
+
"grpc.lookup.v1.RouteLookupClusterSpecifier";
|
36
|
+
|
37
|
+
void XdsRouteLookupClusterSpecifierPlugin::PopulateSymtab(
|
38
|
+
upb_DefPool* symtab) const {
|
39
|
+
grpc_lookup_v1_RouteLookupConfig_getmsgdef(symtab);
|
40
|
+
}
|
41
|
+
|
42
|
+
absl::StatusOr<std::string>
|
43
|
+
XdsRouteLookupClusterSpecifierPlugin::GenerateLoadBalancingPolicyConfig(
|
44
|
+
upb_StringView serialized_plugin_config, upb_Arena* arena,
|
45
|
+
upb_DefPool* symtab) const {
|
46
|
+
const auto* specifier = grpc_lookup_v1_RouteLookupClusterSpecifier_parse(
|
47
|
+
serialized_plugin_config.data, serialized_plugin_config.size, arena);
|
48
|
+
if (specifier == nullptr) {
|
49
|
+
return absl::InvalidArgumentError("Could not parse plugin config");
|
50
|
+
}
|
51
|
+
const auto* plugin_config =
|
52
|
+
grpc_lookup_v1_RouteLookupClusterSpecifier_route_lookup_config(specifier);
|
53
|
+
if (plugin_config == nullptr) {
|
54
|
+
return absl::InvalidArgumentError(
|
55
|
+
"Could not get route lookup config from route lookup cluster "
|
56
|
+
"specifier");
|
57
|
+
}
|
58
|
+
upb::Status status;
|
59
|
+
const upb_MessageDef* msg_type =
|
60
|
+
grpc_lookup_v1_RouteLookupConfig_getmsgdef(symtab);
|
61
|
+
size_t json_size = upb_JsonEncode(plugin_config, msg_type, symtab, 0, nullptr,
|
62
|
+
0, status.ptr());
|
63
|
+
if (json_size == static_cast<size_t>(-1)) {
|
64
|
+
return absl::InvalidArgumentError(
|
65
|
+
absl::StrCat("failed to dump proto to JSON: ",
|
66
|
+
upb_Status_ErrorMessage(status.ptr())));
|
67
|
+
}
|
68
|
+
void* buf = upb_Arena_Malloc(arena, json_size + 1);
|
69
|
+
upb_JsonEncode(plugin_config, msg_type, symtab, 0,
|
70
|
+
reinterpret_cast<char*>(buf), json_size + 1, status.ptr());
|
71
|
+
Json::Object rls_policy;
|
72
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
73
|
+
rls_policy["routeLookupConfig"] =
|
74
|
+
Json::Parse(reinterpret_cast<char*>(buf), &error);
|
75
|
+
GPR_ASSERT(error == GRPC_ERROR_NONE);
|
76
|
+
Json::Object cds_policy;
|
77
|
+
cds_policy["cds_experimental"] = Json::Object();
|
78
|
+
Json::Array child_policy;
|
79
|
+
child_policy.emplace_back(std::move(cds_policy));
|
80
|
+
rls_policy["childPolicy"] = std::move(child_policy);
|
81
|
+
rls_policy["childPolicyConfigTargetFieldName"] = "cluster";
|
82
|
+
Json::Object policy;
|
83
|
+
policy["rls_experimental"] = std::move(rls_policy);
|
84
|
+
Json::Array policies;
|
85
|
+
policies.emplace_back(std::move(policy));
|
86
|
+
Json lb_policy_config(std::move(policies));
|
87
|
+
grpc_error_handle parse_error = GRPC_ERROR_NONE;
|
88
|
+
// TODO(roth): If/when we ever add a second plugin, refactor this code
|
89
|
+
// somehow such that we automatically validate the resulting config against
|
90
|
+
// the gRPC LB policy registry instead of requiring each plugin to do that
|
91
|
+
// itself.
|
92
|
+
LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(lb_policy_config,
|
93
|
+
&parse_error);
|
94
|
+
if (parse_error != GRPC_ERROR_NONE) {
|
95
|
+
absl::Status status = absl::InvalidArgumentError(absl::StrCat(
|
96
|
+
kXdsRouteLookupClusterSpecifierPluginConfigName,
|
97
|
+
" ClusterSpecifierPlugin returned invalid LB policy config: ",
|
98
|
+
grpc_error_std_string(parse_error)));
|
99
|
+
GRPC_ERROR_UNREF(parse_error);
|
100
|
+
return status;
|
101
|
+
}
|
102
|
+
return lb_policy_config.Dump();
|
103
|
+
}
|
104
|
+
|
105
|
+
namespace {
|
106
|
+
|
107
|
+
using PluginRegistryMap =
|
108
|
+
std::map<absl::string_view, std::unique_ptr<XdsClusterSpecifierPluginImpl>>;
|
109
|
+
|
110
|
+
PluginRegistryMap* g_plugin_registry = nullptr;
|
111
|
+
|
112
|
+
} // namespace
|
113
|
+
|
114
|
+
const XdsClusterSpecifierPluginImpl*
|
115
|
+
XdsClusterSpecifierPluginRegistry::GetPluginForType(
|
116
|
+
absl::string_view config_proto_type_name) {
|
117
|
+
auto it = g_plugin_registry->find(config_proto_type_name);
|
118
|
+
if (it == g_plugin_registry->end()) return nullptr;
|
119
|
+
return it->second.get();
|
120
|
+
}
|
121
|
+
|
122
|
+
void XdsClusterSpecifierPluginRegistry::PopulateSymtab(upb_DefPool* symtab) {
|
123
|
+
for (const auto& p : *g_plugin_registry) {
|
124
|
+
p.second->PopulateSymtab(symtab);
|
125
|
+
}
|
126
|
+
}
|
127
|
+
|
128
|
+
void XdsClusterSpecifierPluginRegistry::RegisterPlugin(
|
129
|
+
std::unique_ptr<XdsClusterSpecifierPluginImpl> plugin,
|
130
|
+
absl::string_view config_proto_type_name) {
|
131
|
+
(*g_plugin_registry)[config_proto_type_name] = std::move(plugin);
|
132
|
+
}
|
133
|
+
|
134
|
+
void XdsClusterSpecifierPluginRegistry::Init() {
|
135
|
+
g_plugin_registry = new PluginRegistryMap;
|
136
|
+
RegisterPlugin(absl::make_unique<XdsRouteLookupClusterSpecifierPlugin>(),
|
137
|
+
kXdsRouteLookupClusterSpecifierPluginConfigName);
|
138
|
+
}
|
139
|
+
|
140
|
+
void XdsClusterSpecifierPluginRegistry::Shutdown() { delete g_plugin_registry; }
|
141
|
+
|
142
|
+
} // namespace grpc_core
|
@@ -0,0 +1,79 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2022 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#ifndef GRPC_CORE_EXT_XDS_XDS_CLUSTER_SPECIFIER_PLUGIN_H
|
18
|
+
#define GRPC_CORE_EXT_XDS_XDS_CLUSTER_SPECIFIER_PLUGIN_H
|
19
|
+
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include <memory>
|
23
|
+
#include <set>
|
24
|
+
#include <string>
|
25
|
+
|
26
|
+
#include "absl/status/statusor.h"
|
27
|
+
#include "absl/strings/str_cat.h"
|
28
|
+
#include "absl/strings/string_view.h"
|
29
|
+
#include "google/protobuf/any.upb.h"
|
30
|
+
#include "upb/def.h"
|
31
|
+
|
32
|
+
#include <grpc/grpc.h>
|
33
|
+
|
34
|
+
#include "src/core/lib/channel/channel_stack.h"
|
35
|
+
#include "src/core/lib/json/json.h"
|
36
|
+
|
37
|
+
namespace grpc_core {
|
38
|
+
|
39
|
+
class XdsClusterSpecifierPluginImpl {
|
40
|
+
public:
|
41
|
+
virtual ~XdsClusterSpecifierPluginImpl() = default;
|
42
|
+
|
43
|
+
// Loads the proto message into the upb symtab.
|
44
|
+
virtual void PopulateSymtab(upb_DefPool* symtab) const = 0;
|
45
|
+
|
46
|
+
// Returns the LB policy config in JSON form.
|
47
|
+
virtual absl::StatusOr<std::string> GenerateLoadBalancingPolicyConfig(
|
48
|
+
upb_StringView serialized_plugin_config, upb_Arena* arena,
|
49
|
+
upb_DefPool* symtab) const = 0;
|
50
|
+
};
|
51
|
+
|
52
|
+
class XdsRouteLookupClusterSpecifierPlugin
|
53
|
+
: public XdsClusterSpecifierPluginImpl {
|
54
|
+
void PopulateSymtab(upb_DefPool* symtab) const override;
|
55
|
+
|
56
|
+
absl::StatusOr<std::string> GenerateLoadBalancingPolicyConfig(
|
57
|
+
upb_StringView serialized_plugin_config, upb_Arena* arena,
|
58
|
+
upb_DefPool* symtab) const override;
|
59
|
+
};
|
60
|
+
|
61
|
+
class XdsClusterSpecifierPluginRegistry {
|
62
|
+
public:
|
63
|
+
static void RegisterPlugin(
|
64
|
+
std::unique_ptr<XdsClusterSpecifierPluginImpl> plugin,
|
65
|
+
absl::string_view config_proto_type_name);
|
66
|
+
|
67
|
+
static void PopulateSymtab(upb_DefPool* symtab);
|
68
|
+
|
69
|
+
static const XdsClusterSpecifierPluginImpl* GetPluginForType(
|
70
|
+
absl::string_view config_proto_type_name);
|
71
|
+
|
72
|
+
// Global init and shutdown.
|
73
|
+
static void Init();
|
74
|
+
static void Shutdown();
|
75
|
+
};
|
76
|
+
|
77
|
+
} // namespace grpc_core
|
78
|
+
|
79
|
+
#endif // GRPC_CORE_EXT_XDS_XDS_CLUSTER_SPECIFIER_PLUGIN_H
|