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
@@ -16,24 +16,16 @@
|
|
16
16
|
|
17
17
|
#include <grpc/support/port_platform.h>
|
18
18
|
|
19
|
-
#include <inttypes.h>
|
20
|
-
|
21
|
-
#include <climits>
|
22
|
-
#include <cstring>
|
23
|
-
|
24
19
|
#include "absl/functional/bind_front.h"
|
25
20
|
#include "absl/strings/str_cat.h"
|
26
21
|
|
27
|
-
#include <grpc/support/alloc.h>
|
28
|
-
#include <grpc/support/string_util.h>
|
29
|
-
#include <grpc/support/time.h>
|
30
|
-
|
31
22
|
#include "src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h"
|
23
|
+
#include "src/core/ext/filters/client_channel/resolver/polling_resolver.h"
|
32
24
|
#include "src/core/lib/backoff/backoff.h"
|
33
25
|
#include "src/core/lib/channel/channel_args.h"
|
34
26
|
#include "src/core/lib/config/core_configuration.h"
|
27
|
+
#include "src/core/lib/debug/trace.h"
|
35
28
|
#include "src/core/lib/gpr/string.h"
|
36
|
-
#include "src/core/lib/gprpp/manual_constructor.h"
|
37
29
|
#include "src/core/lib/iomgr/resolve_address.h"
|
38
30
|
#include "src/core/lib/iomgr/timer.h"
|
39
31
|
#include "src/core/lib/iomgr/work_serializer.h"
|
@@ -49,247 +41,83 @@ namespace grpc_core {
|
|
49
41
|
|
50
42
|
namespace {
|
51
43
|
|
52
|
-
|
53
|
-
public:
|
54
|
-
explicit NativeClientChannelDNSResolver(ResolverArgs args);
|
55
|
-
|
56
|
-
void StartLocked() override;
|
44
|
+
TraceFlag grpc_trace_dns_resolver(false, "dns_resolver");
|
57
45
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
void ShutdownLocked() override;
|
63
|
-
|
64
|
-
private:
|
46
|
+
class NativeClientChannelDNSResolver : public PollingResolver {
|
47
|
+
public:
|
48
|
+
NativeClientChannelDNSResolver(ResolverArgs args,
|
49
|
+
const grpc_channel_args* channel_args);
|
65
50
|
~NativeClientChannelDNSResolver() override;
|
66
51
|
|
67
|
-
|
68
|
-
void StartResolvingLocked();
|
52
|
+
OrphanablePtr<Orphanable> StartRequest() override;
|
69
53
|
|
70
|
-
|
71
|
-
void OnNextResolutionLocked(grpc_error_handle error);
|
54
|
+
private:
|
72
55
|
void OnResolved(
|
73
56
|
absl::StatusOr<std::vector<grpc_resolved_address>> addresses_or);
|
74
|
-
void OnResolvedLocked(
|
75
|
-
absl::StatusOr<std::vector<grpc_resolved_address>> addresses_or);
|
76
|
-
|
77
|
-
/// name to resolve
|
78
|
-
std::string name_to_resolve_;
|
79
|
-
/// channel args
|
80
|
-
grpc_channel_args* channel_args_ = nullptr;
|
81
|
-
std::shared_ptr<WorkSerializer> work_serializer_;
|
82
|
-
std::unique_ptr<ResultHandler> result_handler_;
|
83
|
-
/// pollset_set to drive the name resolution process
|
84
|
-
grpc_pollset_set* interested_parties_ = nullptr;
|
85
|
-
/// are we shutting down?
|
86
|
-
bool shutdown_ = false;
|
87
|
-
/// are we currently resolving?
|
88
|
-
bool resolving_ = false;
|
89
|
-
/// next resolution timer
|
90
|
-
bool have_next_resolution_timer_ = false;
|
91
|
-
grpc_timer next_resolution_timer_;
|
92
|
-
grpc_closure on_next_resolution_;
|
93
|
-
/// min time between DNS requests
|
94
|
-
Duration min_time_between_resolutions_;
|
95
|
-
/// timestamp of last DNS request
|
96
|
-
absl::optional<Timestamp> last_resolution_timestamp_;
|
97
|
-
/// retry backoff state
|
98
|
-
BackOff backoff_;
|
99
|
-
/// tracks pending resolutions
|
100
|
-
OrphanablePtr<DNSResolver::Request> dns_request_;
|
101
57
|
};
|
102
58
|
|
103
59
|
NativeClientChannelDNSResolver::NativeClientChannelDNSResolver(
|
104
|
-
ResolverArgs args)
|
105
|
-
:
|
106
|
-
|
107
|
-
work_serializer_(std::move(args.work_serializer)),
|
108
|
-
result_handler_(std::move(args.result_handler)),
|
109
|
-
interested_parties_(grpc_pollset_set_create()),
|
110
|
-
min_time_between_resolutions_(
|
60
|
+
ResolverArgs args, const grpc_channel_args* channel_args)
|
61
|
+
: PollingResolver(
|
62
|
+
std::move(args), channel_args,
|
111
63
|
Duration::Milliseconds(grpc_channel_args_find_integer(
|
112
|
-
|
113
|
-
{1000 * 30, 0, INT_MAX}))
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
64
|
+
channel_args, GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS,
|
65
|
+
{1000 * 30, 0, INT_MAX})),
|
66
|
+
BackOff::Options()
|
67
|
+
.set_initial_backoff(Duration::Milliseconds(
|
68
|
+
GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS * 1000))
|
69
|
+
.set_multiplier(GRPC_DNS_RECONNECT_BACKOFF_MULTIPLIER)
|
70
|
+
.set_jitter(GRPC_DNS_RECONNECT_JITTER)
|
71
|
+
.set_max_backoff(Duration::Milliseconds(
|
72
|
+
GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS * 1000)),
|
73
|
+
&grpc_trace_dns_resolver) {
|
74
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_dns_resolver)) {
|
75
|
+
gpr_log(GPR_DEBUG, "[dns_resolver=%p] created", this);
|
123
76
|
}
|
124
77
|
}
|
125
78
|
|
126
79
|
NativeClientChannelDNSResolver::~NativeClientChannelDNSResolver() {
|
127
|
-
|
128
|
-
|
129
|
-
}
|
130
|
-
|
131
|
-
void NativeClientChannelDNSResolver::StartLocked() {
|
132
|
-
MaybeStartResolvingLocked();
|
133
|
-
}
|
134
|
-
|
135
|
-
void NativeClientChannelDNSResolver::RequestReresolutionLocked() {
|
136
|
-
if (!resolving_) {
|
137
|
-
MaybeStartResolvingLocked();
|
80
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_dns_resolver)) {
|
81
|
+
gpr_log(GPR_DEBUG, "[dns_resolver=%p] destroyed", this);
|
138
82
|
}
|
139
83
|
}
|
140
84
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
shutdown_ = true;
|
150
|
-
if (have_next_resolution_timer_) {
|
151
|
-
grpc_timer_cancel(&next_resolution_timer_);
|
152
|
-
}
|
153
|
-
dns_request_.reset();
|
154
|
-
}
|
155
|
-
|
156
|
-
void NativeClientChannelDNSResolver::OnNextResolution(void* arg,
|
157
|
-
grpc_error_handle error) {
|
158
|
-
NativeClientChannelDNSResolver* r =
|
159
|
-
static_cast<NativeClientChannelDNSResolver*>(arg);
|
160
|
-
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
161
|
-
r->work_serializer_->Run([r, error]() { r->OnNextResolutionLocked(error); },
|
162
|
-
DEBUG_LOCATION);
|
163
|
-
}
|
164
|
-
|
165
|
-
void NativeClientChannelDNSResolver::OnNextResolutionLocked(
|
166
|
-
grpc_error_handle error) {
|
167
|
-
have_next_resolution_timer_ = false;
|
168
|
-
if (error == GRPC_ERROR_NONE && !resolving_) {
|
169
|
-
StartResolvingLocked();
|
85
|
+
OrphanablePtr<Orphanable> NativeClientChannelDNSResolver::StartRequest() {
|
86
|
+
Ref(DEBUG_LOCATION, "dns_request").release();
|
87
|
+
auto dns_request = GetDNSResolver()->ResolveName(
|
88
|
+
name_to_resolve(), kDefaultSecurePort, interested_parties(),
|
89
|
+
absl::bind_front(&NativeClientChannelDNSResolver::OnResolved, this));
|
90
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_dns_resolver)) {
|
91
|
+
gpr_log(GPR_DEBUG, "[dns_resolver=%p] starting request=%p", this,
|
92
|
+
dns_request.get());
|
170
93
|
}
|
171
|
-
|
172
|
-
|
94
|
+
dns_request->Start();
|
95
|
+
// Explicit type conversion to work around issue with older compilers.
|
96
|
+
return OrphanablePtr<Orphanable>(dns_request.release());
|
173
97
|
}
|
174
98
|
|
175
99
|
void NativeClientChannelDNSResolver::OnResolved(
|
176
100
|
absl::StatusOr<std::vector<grpc_resolved_address>> addresses_or) {
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
},
|
181
|
-
DEBUG_LOCATION);
|
182
|
-
}
|
183
|
-
|
184
|
-
void NativeClientChannelDNSResolver::OnResolvedLocked(
|
185
|
-
absl::StatusOr<std::vector<grpc_resolved_address>> addresses_or) {
|
186
|
-
GPR_ASSERT(resolving_);
|
187
|
-
resolving_ = false;
|
188
|
-
dns_request_.reset();
|
189
|
-
if (shutdown_) {
|
190
|
-
Unref(DEBUG_LOCATION, "dns-resolving");
|
191
|
-
return;
|
101
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_dns_resolver)) {
|
102
|
+
gpr_log(GPR_DEBUG, "[dns_resolver=%p] request complete, status=\"%s\"",
|
103
|
+
this, addresses_or.status().ToString().c_str());
|
192
104
|
}
|
105
|
+
// Convert result from iomgr DNS API into Resolver::Result.
|
106
|
+
Result result;
|
193
107
|
if (addresses_or.ok()) {
|
194
108
|
ServerAddressList addresses;
|
195
109
|
for (auto& addr : *addresses_or) {
|
196
110
|
addresses.emplace_back(addr, nullptr /* args */);
|
197
111
|
}
|
198
|
-
Result result;
|
199
112
|
result.addresses = std::move(addresses);
|
200
|
-
result.args = grpc_channel_args_copy(channel_args_);
|
201
|
-
result_handler_->ReportResult(std::move(result));
|
202
|
-
// Reset backoff state so that we start from the beginning when the
|
203
|
-
// next request gets triggered.
|
204
|
-
backoff_.Reset();
|
205
113
|
} else {
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
// Return transient error.
|
210
|
-
Result result;
|
211
|
-
result.addresses = absl::UnavailableError(absl::StrCat(
|
212
|
-
"DNS resolution failed for ", name_to_resolve_, ": ", error_message));
|
213
|
-
result.args = grpc_channel_args_copy(channel_args_);
|
214
|
-
result_handler_->ReportResult(std::move(result));
|
215
|
-
// Set up for retry.
|
216
|
-
// InvalidateNow to avoid getting stuck re-initializing this timer
|
217
|
-
// in a loop while draining the currently-held WorkSerializer.
|
218
|
-
// Also see https://github.com/grpc/grpc/issues/26079.
|
219
|
-
ExecCtx::Get()->InvalidateNow();
|
220
|
-
Timestamp next_try = backoff_.NextAttemptTime();
|
221
|
-
Duration timeout = next_try - ExecCtx::Get()->Now();
|
222
|
-
GPR_ASSERT(!have_next_resolution_timer_);
|
223
|
-
have_next_resolution_timer_ = true;
|
224
|
-
// TODO(roth): We currently deal with this ref manually. Once the
|
225
|
-
// new closure API is done, find a way to track this ref with the timer
|
226
|
-
// callback as part of the type system.
|
227
|
-
Ref(DEBUG_LOCATION, "next_resolution_timer").release();
|
228
|
-
if (timeout > Duration::Zero()) {
|
229
|
-
gpr_log(GPR_DEBUG, "retrying in %" PRId64 " milliseconds",
|
230
|
-
timeout.millis());
|
231
|
-
} else {
|
232
|
-
gpr_log(GPR_DEBUG, "retrying immediately");
|
233
|
-
}
|
234
|
-
GRPC_CLOSURE_INIT(&on_next_resolution_,
|
235
|
-
NativeClientChannelDNSResolver::OnNextResolution, this,
|
236
|
-
grpc_schedule_on_exec_ctx);
|
237
|
-
grpc_timer_init(&next_resolution_timer_, next_try, &on_next_resolution_);
|
114
|
+
result.addresses = absl::UnavailableError(
|
115
|
+
absl::StrCat("DNS resolution failed for ", name_to_resolve(), ": ",
|
116
|
+
addresses_or.status().ToString()));
|
238
117
|
}
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
void NativeClientChannelDNSResolver::MaybeStartResolvingLocked() {
|
243
|
-
// If there is an existing timer, the time it fires is the earliest time we
|
244
|
-
// can start the next resolution.
|
245
|
-
if (have_next_resolution_timer_) return;
|
246
|
-
if (last_resolution_timestamp_.has_value()) {
|
247
|
-
// InvalidateNow to avoid getting stuck re-initializing this timer
|
248
|
-
// in a loop while draining the currently-held WorkSerializer.
|
249
|
-
// Also see https://github.com/grpc/grpc/issues/26079.
|
250
|
-
ExecCtx::Get()->InvalidateNow();
|
251
|
-
const Timestamp earliest_next_resolution =
|
252
|
-
*last_resolution_timestamp_ + min_time_between_resolutions_;
|
253
|
-
const Duration time_until_next_resolution =
|
254
|
-
earliest_next_resolution - ExecCtx::Get()->Now();
|
255
|
-
if (time_until_next_resolution > Duration::Zero()) {
|
256
|
-
const Duration last_resolution_ago =
|
257
|
-
ExecCtx::Get()->Now() - *last_resolution_timestamp_;
|
258
|
-
gpr_log(GPR_DEBUG,
|
259
|
-
"In cooldown from last resolution (from %" PRId64
|
260
|
-
" ms ago). Will resolve again in %" PRId64 " ms",
|
261
|
-
last_resolution_ago.millis(),
|
262
|
-
time_until_next_resolution.millis());
|
263
|
-
have_next_resolution_timer_ = true;
|
264
|
-
// TODO(roth): We currently deal with this ref manually. Once the
|
265
|
-
// new closure API is done, find a way to track this ref with the timer
|
266
|
-
// callback as part of the type system.
|
267
|
-
Ref(DEBUG_LOCATION, "next_resolution_timer_cooldown").release();
|
268
|
-
GRPC_CLOSURE_INIT(&on_next_resolution_,
|
269
|
-
NativeClientChannelDNSResolver::OnNextResolution, this,
|
270
|
-
grpc_schedule_on_exec_ctx);
|
271
|
-
grpc_timer_init(&next_resolution_timer_,
|
272
|
-
ExecCtx::Get()->Now() + time_until_next_resolution,
|
273
|
-
&on_next_resolution_);
|
274
|
-
return;
|
275
|
-
}
|
276
|
-
}
|
277
|
-
StartResolvingLocked();
|
278
|
-
}
|
279
|
-
|
280
|
-
void NativeClientChannelDNSResolver::StartResolvingLocked() {
|
281
|
-
gpr_log(GPR_DEBUG, "Start resolving.");
|
282
|
-
// TODO(roth): We currently deal with this ref manually. Once the
|
283
|
-
// new closure API is done, find a way to track this ref with the timer
|
284
|
-
// callback as part of the type system.
|
285
|
-
Ref(DEBUG_LOCATION, "dns-resolving").release();
|
286
|
-
GPR_ASSERT(!resolving_);
|
287
|
-
resolving_ = true;
|
288
|
-
dns_request_ = GetDNSResolver()->ResolveName(
|
289
|
-
name_to_resolve_, kDefaultSecurePort, interested_parties_,
|
290
|
-
absl::bind_front(&NativeClientChannelDNSResolver::OnResolved, this));
|
291
|
-
dns_request_->Start();
|
292
|
-
last_resolution_timestamp_ = ExecCtx::Get()->Now();
|
118
|
+
result.args = grpc_channel_args_copy(channel_args());
|
119
|
+
OnRequestComplete(std::move(result));
|
120
|
+
Unref(DEBUG_LOCATION, "dns_request");
|
293
121
|
}
|
294
122
|
|
295
123
|
//
|
@@ -314,7 +142,9 @@ class NativeClientChannelDNSResolverFactory : public ResolverFactory {
|
|
314
142
|
|
315
143
|
OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const override {
|
316
144
|
if (!IsValidUri(args.uri)) return nullptr;
|
317
|
-
|
145
|
+
const grpc_channel_args* channel_args = args.args;
|
146
|
+
return MakeOrphanable<NativeClientChannelDNSResolver>(std::move(args),
|
147
|
+
channel_args);
|
318
148
|
}
|
319
149
|
};
|
320
150
|
|
@@ -0,0 +1,201 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2015 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/filters/client_channel/resolver/polling_resolver.h"
|
20
|
+
|
21
|
+
#include "absl/strings/strip.h"
|
22
|
+
|
23
|
+
#include "src/core/lib/backoff/backoff.h"
|
24
|
+
#include "src/core/lib/channel/channel_args.h"
|
25
|
+
#include "src/core/lib/iomgr/pollset_set.h"
|
26
|
+
#include "src/core/lib/iomgr/timer.h"
|
27
|
+
#include "src/core/lib/iomgr/work_serializer.h"
|
28
|
+
|
29
|
+
namespace grpc_core {
|
30
|
+
|
31
|
+
PollingResolver::PollingResolver(ResolverArgs args,
|
32
|
+
const grpc_channel_args* channel_args,
|
33
|
+
Duration min_time_between_resolutions,
|
34
|
+
BackOff::Options backoff_options,
|
35
|
+
TraceFlag* tracer)
|
36
|
+
: authority_(args.uri.authority()),
|
37
|
+
name_to_resolve_(absl::StripPrefix(args.uri.path(), "/")),
|
38
|
+
channel_args_(grpc_channel_args_copy(channel_args)),
|
39
|
+
work_serializer_(std::move(args.work_serializer)),
|
40
|
+
result_handler_(std::move(args.result_handler)),
|
41
|
+
tracer_(tracer),
|
42
|
+
interested_parties_(args.pollset_set),
|
43
|
+
min_time_between_resolutions_(min_time_between_resolutions),
|
44
|
+
backoff_(backoff_options) {
|
45
|
+
if (GPR_UNLIKELY(tracer_ != nullptr && tracer_->enabled())) {
|
46
|
+
gpr_log(GPR_INFO, "[polling resolver %p] created", this);
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
PollingResolver::~PollingResolver() {
|
51
|
+
if (GPR_UNLIKELY(tracer_ != nullptr && tracer_->enabled())) {
|
52
|
+
gpr_log(GPR_INFO, "[polling resolver %p] destroying", this);
|
53
|
+
}
|
54
|
+
grpc_channel_args_destroy(channel_args_);
|
55
|
+
}
|
56
|
+
|
57
|
+
void PollingResolver::StartLocked() { MaybeStartResolvingLocked(); }
|
58
|
+
|
59
|
+
void PollingResolver::RequestReresolutionLocked() {
|
60
|
+
if (request_ == nullptr) {
|
61
|
+
MaybeStartResolvingLocked();
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
void PollingResolver::ResetBackoffLocked() {
|
66
|
+
if (have_next_resolution_timer_) {
|
67
|
+
grpc_timer_cancel(&next_resolution_timer_);
|
68
|
+
}
|
69
|
+
backoff_.Reset();
|
70
|
+
}
|
71
|
+
|
72
|
+
void PollingResolver::ShutdownLocked() {
|
73
|
+
if (GPR_UNLIKELY(tracer_ != nullptr && tracer_->enabled())) {
|
74
|
+
gpr_log(GPR_INFO, "[polling resolver %p] shutting down", this);
|
75
|
+
}
|
76
|
+
shutdown_ = true;
|
77
|
+
if (have_next_resolution_timer_) {
|
78
|
+
grpc_timer_cancel(&next_resolution_timer_);
|
79
|
+
}
|
80
|
+
request_.reset();
|
81
|
+
}
|
82
|
+
|
83
|
+
void PollingResolver::OnNextResolution(void* arg, grpc_error_handle error) {
|
84
|
+
auto* self = static_cast<PollingResolver*>(arg);
|
85
|
+
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
86
|
+
self->work_serializer_->Run(
|
87
|
+
[self, error]() { self->OnNextResolutionLocked(error); }, DEBUG_LOCATION);
|
88
|
+
}
|
89
|
+
|
90
|
+
void PollingResolver::OnNextResolutionLocked(grpc_error_handle error) {
|
91
|
+
if (GPR_UNLIKELY(tracer_ != nullptr && tracer_->enabled())) {
|
92
|
+
gpr_log(GPR_INFO,
|
93
|
+
"[polling resolver %p] re-resolution timer fired: error=\"%s\", "
|
94
|
+
"shutdown_=%d",
|
95
|
+
this, grpc_error_std_string(error).c_str(), shutdown_);
|
96
|
+
}
|
97
|
+
have_next_resolution_timer_ = false;
|
98
|
+
if (error == GRPC_ERROR_NONE && !shutdown_) {
|
99
|
+
StartResolvingLocked();
|
100
|
+
}
|
101
|
+
Unref(DEBUG_LOCATION, "retry-timer");
|
102
|
+
GRPC_ERROR_UNREF(error);
|
103
|
+
}
|
104
|
+
|
105
|
+
void PollingResolver::OnRequestComplete(Result result) {
|
106
|
+
Ref(DEBUG_LOCATION, "OnRequestComplete").release();
|
107
|
+
work_serializer_->Run(
|
108
|
+
[this, result]() mutable { OnRequestCompleteLocked(std::move(result)); },
|
109
|
+
DEBUG_LOCATION);
|
110
|
+
}
|
111
|
+
|
112
|
+
void PollingResolver::OnRequestCompleteLocked(Result result) {
|
113
|
+
if (GPR_UNLIKELY(tracer_ != nullptr && tracer_->enabled())) {
|
114
|
+
gpr_log(GPR_INFO, "[polling resolver %p] request complete", this);
|
115
|
+
}
|
116
|
+
request_.reset();
|
117
|
+
if (!shutdown_) {
|
118
|
+
if (result.service_config.ok() && result.addresses.ok()) {
|
119
|
+
// Reset backoff state so that we start from the beginning when the
|
120
|
+
// next request gets triggered.
|
121
|
+
backoff_.Reset();
|
122
|
+
} else {
|
123
|
+
if (GPR_UNLIKELY(tracer_ != nullptr && tracer_->enabled())) {
|
124
|
+
gpr_log(GPR_INFO,
|
125
|
+
"[polling resolver %p] resolution failed (will retry): "
|
126
|
+
"address status \"%s\"; service config status \"%s\"",
|
127
|
+
this, result.addresses.status().ToString().c_str(),
|
128
|
+
result.service_config.status().ToString().c_str());
|
129
|
+
}
|
130
|
+
// Set up for retry.
|
131
|
+
// InvalidateNow to avoid getting stuck re-initializing this timer
|
132
|
+
// in a loop while draining the currently-held WorkSerializer.
|
133
|
+
// Also see https://github.com/grpc/grpc/issues/26079.
|
134
|
+
ExecCtx::Get()->InvalidateNow();
|
135
|
+
Timestamp next_try = backoff_.NextAttemptTime();
|
136
|
+
Duration timeout = next_try - ExecCtx::Get()->Now();
|
137
|
+
GPR_ASSERT(!have_next_resolution_timer_);
|
138
|
+
have_next_resolution_timer_ = true;
|
139
|
+
if (GPR_UNLIKELY(tracer_ != nullptr && tracer_->enabled())) {
|
140
|
+
if (timeout > Duration::Zero()) {
|
141
|
+
gpr_log(GPR_INFO, "[polling resolver %p] retrying in %" PRId64 " ms",
|
142
|
+
this, timeout.millis());
|
143
|
+
} else {
|
144
|
+
gpr_log(GPR_INFO, "[polling resolver %p] retrying immediately", this);
|
145
|
+
}
|
146
|
+
}
|
147
|
+
Ref(DEBUG_LOCATION, "next_resolution_timer").release();
|
148
|
+
GRPC_CLOSURE_INIT(&on_next_resolution_, OnNextResolution, this, nullptr);
|
149
|
+
grpc_timer_init(&next_resolution_timer_, next_try, &on_next_resolution_);
|
150
|
+
}
|
151
|
+
result_handler_->ReportResult(std::move(result));
|
152
|
+
}
|
153
|
+
Unref(DEBUG_LOCATION, "OnRequestComplete");
|
154
|
+
}
|
155
|
+
|
156
|
+
void PollingResolver::MaybeStartResolvingLocked() {
|
157
|
+
// If there is an existing timer, the time it fires is the earliest time we
|
158
|
+
// can start the next resolution.
|
159
|
+
if (have_next_resolution_timer_) return;
|
160
|
+
if (last_resolution_timestamp_.has_value()) {
|
161
|
+
// InvalidateNow to avoid getting stuck re-initializing this timer
|
162
|
+
// in a loop while draining the currently-held WorkSerializer.
|
163
|
+
// Also see https://github.com/grpc/grpc/issues/26079.
|
164
|
+
ExecCtx::Get()->InvalidateNow();
|
165
|
+
const Timestamp earliest_next_resolution =
|
166
|
+
*last_resolution_timestamp_ + min_time_between_resolutions_;
|
167
|
+
const Duration time_until_next_resolution =
|
168
|
+
earliest_next_resolution - ExecCtx::Get()->Now();
|
169
|
+
if (time_until_next_resolution > Duration::Zero()) {
|
170
|
+
if (GPR_UNLIKELY(tracer_ != nullptr && tracer_->enabled())) {
|
171
|
+
const Duration last_resolution_ago =
|
172
|
+
ExecCtx::Get()->Now() - *last_resolution_timestamp_;
|
173
|
+
gpr_log(GPR_INFO,
|
174
|
+
"[polling resolver %p] in cooldown from last resolution "
|
175
|
+
"(from %" PRId64 " ms ago); will resolve again in %" PRId64
|
176
|
+
" ms",
|
177
|
+
this, last_resolution_ago.millis(),
|
178
|
+
time_until_next_resolution.millis());
|
179
|
+
}
|
180
|
+
have_next_resolution_timer_ = true;
|
181
|
+
Ref(DEBUG_LOCATION, "next_resolution_timer_cooldown").release();
|
182
|
+
GRPC_CLOSURE_INIT(&on_next_resolution_, OnNextResolution, this, nullptr);
|
183
|
+
grpc_timer_init(&next_resolution_timer_,
|
184
|
+
ExecCtx::Get()->Now() + time_until_next_resolution,
|
185
|
+
&on_next_resolution_);
|
186
|
+
return;
|
187
|
+
}
|
188
|
+
}
|
189
|
+
StartResolvingLocked();
|
190
|
+
}
|
191
|
+
|
192
|
+
void PollingResolver::StartResolvingLocked() {
|
193
|
+
request_ = StartRequest();
|
194
|
+
last_resolution_timestamp_ = ExecCtx::Get()->Now();
|
195
|
+
if (GPR_UNLIKELY(tracer_ != nullptr && tracer_->enabled())) {
|
196
|
+
gpr_log(GPR_INFO, "[polling resolver %p] starting resolution, request_=%p",
|
197
|
+
this, request_.get());
|
198
|
+
}
|
199
|
+
}
|
200
|
+
|
201
|
+
} // namespace grpc_core
|
@@ -0,0 +1,106 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2015 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_FILTERS_CLIENT_CHANNEL_RESOLVER_POLLING_RESOLVER_H
|
18
|
+
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_POLLING_RESOLVER_H
|
19
|
+
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include <memory>
|
23
|
+
|
24
|
+
#include "absl/types/optional.h"
|
25
|
+
|
26
|
+
#include "src/core/lib/backoff/backoff.h"
|
27
|
+
#include "src/core/lib/channel/channel_args.h"
|
28
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
29
|
+
#include "src/core/lib/iomgr/timer.h"
|
30
|
+
#include "src/core/lib/iomgr/work_serializer.h"
|
31
|
+
#include "src/core/lib/resolver/resolver.h"
|
32
|
+
#include "src/core/lib/resolver/resolver_factory.h"
|
33
|
+
|
34
|
+
namespace grpc_core {
|
35
|
+
|
36
|
+
// A base class for polling-based resolvers.
|
37
|
+
// Handles cooldown and backoff timers.
|
38
|
+
// Implementations need only to implement StartRequest().
|
39
|
+
class PollingResolver : public Resolver {
|
40
|
+
public:
|
41
|
+
PollingResolver(ResolverArgs args, const grpc_channel_args* channel_args,
|
42
|
+
Duration min_time_between_resolutions,
|
43
|
+
BackOff::Options backoff_options, TraceFlag* tracer);
|
44
|
+
~PollingResolver() override;
|
45
|
+
|
46
|
+
void StartLocked() override;
|
47
|
+
void RequestReresolutionLocked() override;
|
48
|
+
void ResetBackoffLocked() override;
|
49
|
+
void ShutdownLocked() override;
|
50
|
+
|
51
|
+
protected:
|
52
|
+
// Implemented by subclass.
|
53
|
+
// Starts a request, returning an object representing the pending
|
54
|
+
// request. Orphaning that object should cancel the request.
|
55
|
+
// When the request is complete, the implementation must call
|
56
|
+
// OnRequestComplete() with the result.
|
57
|
+
virtual OrphanablePtr<Orphanable> StartRequest() = 0;
|
58
|
+
|
59
|
+
// To be invoked by the subclass when a request is complete.
|
60
|
+
void OnRequestComplete(Result result);
|
61
|
+
|
62
|
+
// Convenient accessor methods for subclasses.
|
63
|
+
const std::string& authority() const { return authority_; }
|
64
|
+
const std::string& name_to_resolve() const { return name_to_resolve_; }
|
65
|
+
grpc_pollset_set* interested_parties() const { return interested_parties_; }
|
66
|
+
const grpc_channel_args* channel_args() const { return channel_args_; }
|
67
|
+
|
68
|
+
private:
|
69
|
+
void MaybeStartResolvingLocked();
|
70
|
+
void StartResolvingLocked();
|
71
|
+
|
72
|
+
void OnRequestCompleteLocked(Result result);
|
73
|
+
|
74
|
+
static void OnNextResolution(void* arg, grpc_error_handle error);
|
75
|
+
void OnNextResolutionLocked(grpc_error_handle error);
|
76
|
+
|
77
|
+
/// authority
|
78
|
+
std::string authority_;
|
79
|
+
/// name to resolve
|
80
|
+
std::string name_to_resolve_;
|
81
|
+
/// channel args
|
82
|
+
const grpc_channel_args* channel_args_ = nullptr;
|
83
|
+
std::shared_ptr<WorkSerializer> work_serializer_;
|
84
|
+
std::unique_ptr<ResultHandler> result_handler_;
|
85
|
+
TraceFlag* tracer_;
|
86
|
+
/// pollset_set to drive the name resolution process
|
87
|
+
grpc_pollset_set* interested_parties_ = nullptr;
|
88
|
+
/// are we shutting down?
|
89
|
+
bool shutdown_ = false;
|
90
|
+
/// are we currently resolving?
|
91
|
+
OrphanablePtr<Orphanable> request_;
|
92
|
+
/// next resolution timer
|
93
|
+
bool have_next_resolution_timer_ = false;
|
94
|
+
grpc_timer next_resolution_timer_;
|
95
|
+
grpc_closure on_next_resolution_;
|
96
|
+
/// min time between DNS requests
|
97
|
+
Duration min_time_between_resolutions_;
|
98
|
+
/// timestamp of last DNS request
|
99
|
+
absl::optional<Timestamp> last_resolution_timestamp_;
|
100
|
+
/// retry backoff state
|
101
|
+
BackOff backoff_;
|
102
|
+
};
|
103
|
+
|
104
|
+
} // namespace grpc_core
|
105
|
+
|
106
|
+
#endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_POLLING_RESOLVER_H
|