grpc 1.45.0 → 1.46.2

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.

Files changed (513) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +36 -29
  3. data/include/grpc/impl/codegen/grpc_types.h +7 -13
  4. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
  5. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +122 -0
  6. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
  7. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +3 -3
  8. data/src/core/ext/filters/client_channel/client_channel.cc +163 -96
  9. data/src/core/ext/filters/client_channel/client_channel.h +2 -0
  10. data/src/core/ext/filters/client_channel/health/health_check_client.cc +124 -581
  11. data/src/core/ext/filters/client_channel/health/health_check_client.h +24 -160
  12. data/src/core/ext/filters/client_channel/http_proxy.cc +88 -110
  13. data/src/core/ext/filters/client_channel/http_proxy.h +17 -0
  14. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +182 -142
  15. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -6
  16. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +1 -10
  17. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +87 -58
  18. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +51 -48
  19. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +229 -284
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +92 -257
  22. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +51 -221
  23. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +201 -0
  24. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +106 -0
  25. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +102 -55
  26. data/src/core/ext/filters/client_channel/retry_filter.cc +18 -3
  27. data/src/core/ext/filters/client_channel/subchannel.cc +5 -5
  28. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +544 -0
  29. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +214 -0
  30. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +127 -367
  31. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +24 -1
  32. data/src/core/ext/filters/http/client/http_client_filter.cc +78 -458
  33. data/src/core/ext/filters/http/client/http_client_filter.h +21 -4
  34. data/src/core/ext/filters/http/client_authority_filter.cc +17 -22
  35. data/src/core/ext/filters/http/client_authority_filter.h +6 -5
  36. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -6
  37. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -116
  38. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +2 -8
  39. data/src/core/ext/filters/server_config_selector/server_config_selector.h +2 -2
  40. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +73 -201
  41. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -1
  42. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +5 -4
  43. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -28
  44. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -0
  45. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -6
  46. data/src/core/ext/transport/chttp2/transport/internal.h +4 -2
  47. data/src/core/ext/transport/chttp2/transport/parsing.cc +8 -0
  48. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -13
  49. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +27 -24
  50. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +143 -63
  51. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +37 -35
  52. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +177 -77
  53. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +115 -111
  54. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +547 -207
  55. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +5 -5
  56. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +26 -13
  57. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +5 -5
  58. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +23 -9
  59. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -7
  60. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +18 -0
  61. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -4
  62. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +13 -4
  63. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -4
  64. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +9 -0
  65. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +49 -46
  66. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +217 -78
  67. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -3
  68. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +10 -2
  69. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +12 -12
  70. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +40 -8
  71. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +5 -5
  72. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +20 -2
  73. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +55 -55
  74. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +289 -110
  75. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +133 -125
  76. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +656 -267
  77. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +24 -18
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +96 -23
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +185 -173
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +860 -309
  81. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  82. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +10 -2
  83. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +44 -24
  84. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +165 -40
  85. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +72 -63
  86. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +433 -174
  87. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +33 -31
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +154 -52
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -4
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +14 -4
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +89 -89
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +460 -166
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +76 -33
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +379 -69
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -2
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +14 -6
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +5 -25
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +10 -91
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +5 -5
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +26 -13
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +70 -68
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +369 -131
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +94 -65
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +447 -161
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +27 -11
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +104 -85
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +378 -113
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +2 -2
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +3 -0
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +6 -6
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +30 -13
  113. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +7 -7
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +43 -16
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +58 -24
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +14 -4
  119. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +18 -18
  120. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +100 -43
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +31 -30
  122. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +171 -71
  123. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
  124. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +196 -95
  125. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  126. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +7 -2
  127. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +53 -46
  128. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +284 -129
  129. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +56 -50
  130. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +337 -146
  131. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +13 -11
  132. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +49 -14
  133. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +4 -4
  134. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +14 -4
  135. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +5 -5
  136. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +20 -4
  137. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +33 -32
  138. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +205 -86
  139. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +34 -34
  140. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +175 -74
  141. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +56 -52
  142. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +370 -146
  143. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +27 -23
  144. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +173 -74
  145. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +362 -341
  146. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2056 -845
  147. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +11 -11
  148. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +49 -16
  149. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +56 -50
  150. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +293 -111
  151. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -3
  152. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -0
  153. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -3
  154. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +10 -2
  155. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +5 -5
  156. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +26 -10
  157. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -5
  158. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +27 -12
  159. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +17 -16
  160. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +83 -36
  161. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -2
  162. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +7 -2
  163. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +8 -8
  164. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +46 -17
  165. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +9 -9
  166. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +38 -12
  167. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -7
  168. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +30 -10
  169. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -2
  170. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +10 -6
  171. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +15 -15
  172. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +71 -28
  173. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +25 -25
  174. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +149 -65
  175. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +8 -7
  176. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +30 -12
  177. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +9 -9
  178. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +42 -15
  179. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +173 -144
  180. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +898 -323
  181. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +51 -45
  182. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +261 -116
  183. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +13 -13
  184. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +70 -25
  185. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +80 -55
  186. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +410 -124
  187. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +5 -5
  188. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +23 -9
  189. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  190. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +44 -44
  191. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +261 -122
  192. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +8 -8
  193. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +47 -21
  194. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +32 -32
  195. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +175 -66
  196. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -4
  197. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +17 -6
  198. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
  199. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +38 -17
  200. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +8 -8
  201. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +12 -0
  202. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +7 -7
  203. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +43 -18
  204. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -3
  205. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +20 -9
  206. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -3
  207. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +24 -9
  208. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -2
  209. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +14 -6
  210. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +8 -8
  211. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +40 -16
  212. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +9 -9
  213. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +70 -25
  214. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +5 -5
  215. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +37 -18
  216. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +12 -12
  217. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +81 -30
  218. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +16 -16
  219. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +76 -30
  220. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +20 -20
  221. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +90 -30
  222. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +7 -7
  223. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +28 -10
  224. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -2
  225. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +3 -0
  226. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +5 -5
  227. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +13 -4
  228. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +9 -9
  229. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -0
  230. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -4
  231. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +9 -0
  232. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +5 -5
  233. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +17 -4
  234. data/src/core/ext/upb-generated/google/api/annotations.upb.c +3 -3
  235. data/src/core/ext/upb-generated/google/api/annotations.upb.h +17 -2
  236. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +70 -66
  237. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +410 -162
  238. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +80 -74
  239. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +440 -158
  240. data/src/core/ext/upb-generated/google/api/http.upb.c +17 -17
  241. data/src/core/ext/upb-generated/google/api/http.upb.h +116 -43
  242. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -4
  243. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +19 -7
  244. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -3
  245. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -0
  246. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +163 -162
  247. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1157 -435
  248. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -3
  249. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +10 -4
  250. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  251. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
  252. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +108 -40
  253. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -3
  254. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +10 -4
  255. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +18 -18
  256. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -0
  257. data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -4
  258. data/src/core/ext/upb-generated/google/rpc/status.upb.h +19 -7
  259. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +15 -15
  260. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +65 -22
  261. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
  262. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +49 -12
  263. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +69 -65
  264. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +364 -149
  265. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -7
  266. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +20 -4
  267. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +4 -4
  268. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -0
  269. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
  270. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +150 -58
  271. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +11 -11
  272. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +51 -18
  273. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  274. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
  275. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +22 -22
  276. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +97 -10
  277. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +6 -6
  278. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +23 -2
  279. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +3 -3
  280. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +10 -2
  281. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +6 -6
  282. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +27 -6
  283. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +5 -5
  284. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +20 -2
  285. data/src/core/ext/upb-generated/validate/validate.upb.c +261 -250
  286. data/src/core/ext/upb-generated/validate/validate.upb.h +1836 -663
  287. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +22 -22
  288. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +97 -10
  289. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +6 -6
  290. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +23 -2
  291. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +3 -3
  292. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +10 -2
  293. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +18 -18
  294. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +70 -10
  295. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +5 -5
  296. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +20 -2
  297. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -2
  298. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +3 -0
  299. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
  300. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +38 -12
  301. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +5 -5
  302. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +27 -10
  303. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -3
  304. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +10 -2
  305. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
  306. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +21 -8
  307. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +10 -10
  308. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +71 -30
  309. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -5
  310. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +16 -2
  311. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +12 -12
  312. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +69 -26
  313. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +43 -39
  314. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +255 -103
  315. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +4 -4
  316. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +19 -8
  317. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +9 -9
  318. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +70 -25
  319. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -3
  320. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +10 -2
  321. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +50 -46
  322. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +195 -185
  323. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -12
  324. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +129 -94
  325. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +10 -0
  326. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +18 -33
  327. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +0 -5
  328. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +163 -155
  329. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +5 -0
  330. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +141 -138
  331. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +26 -20
  332. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +738 -730
  333. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +271 -251
  334. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  335. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +207 -193
  336. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -0
  337. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  338. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  339. data/src/core/ext/xds/certificate_provider_store.cc +8 -0
  340. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  341. data/src/core/ext/xds/xds_api.cc +20 -0
  342. data/src/core/ext/xds/xds_certificate_provider.cc +2 -0
  343. data/src/core/ext/xds/xds_certificate_provider.h +8 -0
  344. data/src/core/ext/xds/xds_client.cc +83 -93
  345. data/src/core/ext/xds/xds_client.h +11 -4
  346. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  347. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  348. data/src/core/ext/xds/xds_common_types.cc +9 -9
  349. data/src/core/ext/xds/xds_common_types.h +3 -3
  350. data/src/core/ext/xds/xds_endpoint.cc +12 -5
  351. data/src/core/ext/xds/xds_http_fault_filter.cc +1 -1
  352. data/src/core/ext/xds/xds_listener.cc +1 -1
  353. data/src/core/ext/xds/xds_route_config.cc +162 -25
  354. data/src/core/ext/xds/xds_route_config.h +13 -10
  355. data/src/core/ext/xds/xds_server_config_fetcher.cc +17 -22
  356. data/src/core/lib/avl/avl.h +68 -5
  357. data/src/core/lib/channel/call_tracer.h +4 -1
  358. data/src/core/lib/channel/channel_args.cc +138 -59
  359. data/src/core/lib/channel/channel_args.h +210 -9
  360. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -9
  361. data/src/core/lib/channel/channel_args_preconditioning.h +1 -2
  362. data/src/core/lib/channel/channel_stack.h +2 -5
  363. data/src/core/lib/channel/channel_stack_builder.cc +0 -65
  364. data/src/core/lib/channel/channel_stack_builder.h +27 -6
  365. data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
  366. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  367. data/src/core/lib/channel/connected_channel.h +1 -0
  368. data/src/core/lib/channel/promise_based_filter.cc +495 -162
  369. data/src/core/lib/channel/promise_based_filter.h +55 -41
  370. data/src/core/lib/compression/compression_internal.cc +1 -7
  371. data/src/core/lib/debug/stats_data.cc +2 -6
  372. data/src/core/lib/debug/stats_data.h +18 -21
  373. data/src/core/lib/gpr/tls.h +1 -0
  374. data/src/core/lib/gprpp/bitset.h +12 -0
  375. data/src/core/lib/gprpp/cpp_impl_of.h +4 -0
  376. data/src/core/lib/gprpp/match.h +73 -0
  377. data/src/core/lib/gprpp/overload.h +59 -0
  378. data/src/core/lib/gprpp/ref_counted.h +2 -0
  379. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  380. data/src/core/lib/gprpp/status_helper.cc +18 -2
  381. data/src/core/lib/gprpp/time.cc +12 -0
  382. data/src/core/lib/gprpp/time.h +1 -1
  383. data/src/core/lib/http/format_request.cc +1 -2
  384. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  385. data/src/core/lib/http/parser.cc +80 -9
  386. data/src/core/lib/http/parser.h +14 -1
  387. data/src/core/lib/iomgr/ev_posix.cc +6 -7
  388. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  389. data/src/core/lib/iomgr/port.h +0 -2
  390. data/src/core/lib/iomgr/tcp_client_posix.cc +2 -2
  391. data/src/core/lib/iomgr/tcp_posix.cc +93 -35
  392. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -17
  393. data/src/core/lib/json/json_util.h +3 -3
  394. data/src/core/lib/promise/call_push_pull.h +144 -0
  395. data/src/core/lib/promise/detail/status.h +2 -1
  396. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  397. data/src/core/lib/promise/latch.h +104 -0
  398. data/src/core/lib/resource_quota/api.cc +5 -30
  399. data/src/core/lib/resource_quota/api.h +1 -1
  400. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  401. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  402. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +9 -12
  403. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +5 -6
  404. data/src/core/lib/security/context/security_context.h +8 -1
  405. data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
  406. data/src/core/lib/security/credentials/alts/alts_credentials.h +4 -0
  407. data/src/core/lib/security/credentials/call_creds_util.cc +3 -3
  408. data/src/core/lib/security/credentials/call_creds_util.h +2 -2
  409. data/src/core/lib/security/credentials/composite/composite_credentials.cc +15 -10
  410. data/src/core/lib/security/credentials/composite/composite_credentials.h +9 -8
  411. data/src/core/lib/security/credentials/credentials.h +16 -33
  412. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -12
  413. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -5
  414. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -0
  415. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -3
  416. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -4
  417. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -2
  418. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +22 -29
  419. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  420. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -3
  421. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +6 -2
  422. data/src/core/lib/security/credentials/local/local_credentials.cc +6 -6
  423. data/src/core/lib/security/credentials/local/local_credentials.h +4 -0
  424. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -9
  425. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +14 -6
  426. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -6
  427. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +8 -6
  428. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +6 -4
  429. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +8 -0
  430. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +49 -0
  431. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +8 -0
  432. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +42 -3
  433. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +66 -95
  434. data/src/core/lib/security/credentials/tls/tls_credentials.cc +9 -6
  435. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -5
  436. data/src/core/lib/security/credentials/xds/xds_credentials.cc +48 -50
  437. data/src/core/lib/security/credentials/xds/xds_credentials.h +31 -5
  438. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  439. data/src/core/lib/security/security_connector/security_connector.h +9 -0
  440. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -2
  441. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -2
  442. data/src/core/lib/security/transport/auth_filters.h +7 -7
  443. data/src/core/lib/security/transport/client_auth_filter.cc +28 -20
  444. data/src/core/lib/security/transport/secure_endpoint.cc +198 -129
  445. data/src/core/lib/security/transport/secure_endpoint.h +1 -1
  446. data/src/core/lib/security/transport/security_handshaker.cc +6 -4
  447. data/src/core/lib/surface/call.cc +1023 -903
  448. data/src/core/lib/surface/call.h +0 -14
  449. data/src/core/lib/surface/channel.cc +4 -3
  450. data/src/core/lib/surface/channel_init.cc +2 -3
  451. data/src/core/lib/surface/channel_init.h +2 -6
  452. data/src/core/lib/surface/init.cc +1 -1
  453. data/src/core/lib/surface/server.cc +3 -14
  454. data/src/core/lib/surface/server.h +1 -2
  455. data/src/core/lib/surface/version.cc +2 -2
  456. data/src/core/lib/transport/byte_stream.cc +2 -0
  457. data/src/core/lib/transport/metadata_batch.h +12 -8
  458. data/src/core/lib/transport/transport.h +20 -5
  459. data/src/core/lib/transport/transport_impl.h +4 -3
  460. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -4
  461. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
  462. data/src/core/tsi/ssl_transport_security.cc +75 -38
  463. data/src/core/tsi/ssl_transport_security.h +8 -2
  464. data/src/core/tsi/transport_security_interface.h +2 -0
  465. data/src/ruby/ext/grpc/extconf.rb +1 -1
  466. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  467. data/src/ruby/lib/grpc/grpc.rb +1 -1
  468. data/src/ruby/lib/grpc/version.rb +1 -1
  469. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  470. data/src/ruby/pb/test/client.rb +769 -0
  471. data/src/ruby/pb/test/server.rb +252 -0
  472. data/src/ruby/pb/test/xds_client.rb +415 -0
  473. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  474. data/third_party/upb/upb/decode.c +32 -16
  475. data/third_party/upb/upb/def.c +118 -55
  476. data/third_party/upb/upb/def.h +12 -3
  477. data/third_party/upb/upb/encode.c +14 -8
  478. data/third_party/upb/upb/json_encode.c +776 -0
  479. data/third_party/upb/upb/json_encode.h +62 -0
  480. data/third_party/upb/upb/msg.c +5 -7
  481. data/third_party/upb/upb/msg.h +1 -2
  482. data/third_party/upb/upb/msg_internal.h +49 -36
  483. data/third_party/upb/upb/port_def.inc +8 -0
  484. data/third_party/upb/upb/port_undef.inc +1 -0
  485. data/third_party/upb/upb/table.c +10 -6
  486. data/third_party/upb/upb/table_internal.h +2 -0
  487. data/third_party/upb/upb/upb.h +41 -11
  488. data/third_party/zlib/crc32.c +966 -292
  489. data/third_party/zlib/crc32.h +9441 -436
  490. data/third_party/zlib/deflate.c +78 -30
  491. data/third_party/zlib/deflate.h +12 -15
  492. data/third_party/zlib/gzguts.h +3 -2
  493. data/third_party/zlib/gzlib.c +5 -3
  494. data/third_party/zlib/gzread.c +5 -7
  495. data/third_party/zlib/gzwrite.c +25 -13
  496. data/third_party/zlib/infback.c +2 -1
  497. data/third_party/zlib/inffast.c +14 -14
  498. data/third_party/zlib/inflate.c +39 -8
  499. data/third_party/zlib/inflate.h +3 -2
  500. data/third_party/zlib/inftrees.c +3 -3
  501. data/third_party/zlib/trees.c +27 -48
  502. data/third_party/zlib/zlib.h +123 -100
  503. data/third_party/zlib/zutil.c +2 -2
  504. data/third_party/zlib/zutil.h +12 -9
  505. metadata +66 -45
  506. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
  507. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
  508. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  509. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
  510. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  511. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  512. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  513. 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
- class NativeClientChannelDNSResolver : public Resolver {
53
- public:
54
- explicit NativeClientChannelDNSResolver(ResolverArgs args);
55
-
56
- void StartLocked() override;
44
+ TraceFlag grpc_trace_dns_resolver(false, "dns_resolver");
57
45
 
58
- void RequestReresolutionLocked() override;
59
-
60
- void ResetBackoffLocked() override;
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
- void MaybeStartResolvingLocked();
68
- void StartResolvingLocked();
52
+ OrphanablePtr<Orphanable> StartRequest() override;
69
53
 
70
- static void OnNextResolution(void* arg, grpc_error_handle error);
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
- : name_to_resolve_(absl::StripPrefix(args.uri.path(), "/")),
106
- channel_args_(grpc_channel_args_copy(args.args)),
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
- channel_args_, GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS,
113
- {1000 * 30, 0, INT_MAX}))),
114
- backoff_(BackOff::Options()
115
- .set_initial_backoff(Duration::Seconds(
116
- GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS))
117
- .set_multiplier(GRPC_DNS_RECONNECT_BACKOFF_MULTIPLIER)
118
- .set_jitter(GRPC_DNS_RECONNECT_JITTER)
119
- .set_max_backoff(Duration::Seconds(
120
- GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS))) {
121
- if (args.pollset_set != nullptr) {
122
- grpc_pollset_set_add_pollset_set(interested_parties_, args.pollset_set);
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
- grpc_channel_args_destroy(channel_args_);
128
- grpc_pollset_set_destroy(interested_parties_);
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
- void NativeClientChannelDNSResolver::ResetBackoffLocked() {
142
- if (have_next_resolution_timer_) {
143
- grpc_timer_cancel(&next_resolution_timer_);
144
- }
145
- backoff_.Reset();
146
- }
147
-
148
- void NativeClientChannelDNSResolver::ShutdownLocked() {
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
- Unref(DEBUG_LOCATION, "retry-timer");
172
- GRPC_ERROR_UNREF(error);
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
- work_serializer_->Run(
178
- [this, addresses_or]() mutable {
179
- OnResolvedLocked(std::move(addresses_or));
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
- std::string error_message = addresses_or.status().ToString();
207
- gpr_log(GPR_INFO, "dns resolution failed (will retry): %s",
208
- error_message.c_str());
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
- Unref(DEBUG_LOCATION, "dns-resolving");
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
- return MakeOrphanable<NativeClientChannelDNSResolver>(std::move(args));
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