grpc 1.28.0.pre2 → 1.31.0.pre1

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 (660) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +8313 -11862
  3. data/include/grpc/grpc.h +2 -2
  4. data/include/grpc/grpc_security.h +30 -9
  5. data/include/grpc/grpc_security_constants.h +4 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +23 -23
  7. data/include/grpc/impl/codegen/port_platform.h +6 -34
  8. data/include/grpc/module.modulemap +24 -39
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -12
  10. data/src/core/ext/filters/client_channel/client_channel.cc +618 -482
  11. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  12. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  13. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  14. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  15. data/src/core/ext/filters/client_channel/health/health_check_client.cc +9 -22
  16. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  17. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
  18. data/src/core/ext/filters/client_channel/http_proxy.cc +23 -14
  19. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  20. data/src/core/ext/filters/client_channel/lb_policy.h +44 -33
  21. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +297 -0
  24. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +311 -497
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  30. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  31. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -17
  33. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +117 -41
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +1142 -0
  39. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +10 -7
  40. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  41. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  42. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  43. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +78 -61
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +41 -40
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +22 -24
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +12 -10
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +79 -122
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +199 -163
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  53. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +46 -45
  54. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +64 -12
  58. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  59. data/src/core/ext/filters/client_channel/resolver_registry.cc +19 -17
  60. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +21 -22
  62. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
  63. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +73 -217
  64. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +45 -27
  65. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  66. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  67. data/src/core/ext/filters/client_channel/service_config.cc +104 -144
  68. data/src/core/ext/filters/client_channel/service_config.h +28 -98
  69. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  70. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  71. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  72. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  73. data/src/core/ext/filters/client_channel/subchannel.cc +55 -25
  74. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  75. data/src/core/ext/filters/client_channel/xds/xds_api.cc +1200 -246
  76. data/src/core/ext/filters/client_channel/xds/xds_api.h +130 -44
  77. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +90 -29
  78. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +9 -4
  79. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
  80. data/src/core/ext/filters/client_channel/xds/xds_client.cc +839 -431
  81. data/src/core/ext/filters/client_channel/xds/xds_client.h +84 -33
  82. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
  83. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +40 -28
  84. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -33
  85. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  86. data/src/core/ext/filters/http/http_filters_plugin.cc +28 -12
  87. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  88. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +399 -0
  89. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  90. data/src/core/ext/filters/message_size/message_size_filter.cc +61 -88
  91. data/src/core/ext/filters/message_size/message_size_filter.h +10 -4
  92. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +386 -350
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
  94. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
  96. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
  97. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +42 -26
  99. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  100. data/src/core/ext/transport/chttp2/transport/flow_control.cc +25 -30
  101. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  102. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  103. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  104. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  105. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  106. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  107. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  108. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  109. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  111. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  112. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  113. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  114. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  119. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  120. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  121. data/src/core/ext/transport/chttp2/transport/internal.h +27 -21
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
  123. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  124. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -22
  125. data/src/core/ext/transport/inproc/inproc_transport.cc +54 -15
  126. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  127. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  128. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
  129. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -876
  130. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  131. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +429 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  133. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +198 -0
  134. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +388 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
  138. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +23 -10
  139. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +352 -310
  140. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
  141. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
  142. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
  143. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
  144. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
  145. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
  146. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
  147. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
  148. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +79 -0
  150. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +48 -27
  151. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +258 -214
  152. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
  153. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
  154. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +71 -0
  156. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
  157. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
  158. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
  159. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +157 -122
  160. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
  161. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
  162. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
  163. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +173 -73
  164. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  165. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +88 -0
  166. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +2 -1
  167. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
  168. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
  169. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
  170. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +2 -1
  171. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
  172. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
  173. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
  174. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
  175. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +53 -38
  176. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
  177. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
  178. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
  179. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
  180. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
  181. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +95 -63
  182. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
  183. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
  184. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +3 -2
  185. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
  186. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
  187. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
  188. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
  189. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
  190. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
  191. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
  192. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
  193. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
  194. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +68 -46
  195. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +770 -722
  196. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
  197. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
  198. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
  199. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
  200. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +2 -1
  201. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
  202. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
  203. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +305 -210
  204. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
  205. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
  206. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  207. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  208. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  209. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
  210. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  211. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +22 -16
  212. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  213. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
  214. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
  215. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +48 -11
  216. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
  217. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
  218. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
  219. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
  220. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  221. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
  222. data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
  223. data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
  224. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
  225. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
  226. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
  227. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
  228. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  229. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  230. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  231. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  232. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +12 -11
  233. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +421 -389
  234. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  235. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  236. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  237. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
  238. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  239. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  240. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  241. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  242. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  243. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  244. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  245. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  246. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  247. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  248. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  249. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  250. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  251. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -0
  252. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  253. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  254. data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
  255. data/src/core/ext/upb-generated/validate/validate.upb.h +569 -562
  256. data/src/core/lib/channel/channel_args.cc +15 -14
  257. data/src/core/lib/channel/channel_args.h +3 -1
  258. data/src/core/lib/channel/channel_stack.h +20 -13
  259. data/src/core/lib/channel/channel_trace.cc +2 -6
  260. data/src/core/lib/channel/channelz.cc +10 -21
  261. data/src/core/lib/channel/channelz.h +3 -2
  262. data/src/core/lib/channel/channelz_registry.cc +5 -3
  263. data/src/core/lib/channel/connected_channel.cc +7 -5
  264. data/src/core/lib/channel/context.h +1 -1
  265. data/src/core/lib/channel/handshaker.cc +11 -13
  266. data/src/core/lib/channel/handshaker.h +4 -2
  267. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  268. data/src/core/lib/channel/status_util.cc +2 -3
  269. data/src/core/lib/compression/message_compress.cc +5 -1
  270. data/src/core/lib/debug/stats.cc +21 -27
  271. data/src/core/lib/debug/stats.h +3 -1
  272. data/src/core/lib/gpr/log_linux.cc +6 -8
  273. data/src/core/lib/gpr/log_posix.cc +6 -8
  274. data/src/core/lib/gpr/spinlock.h +2 -3
  275. data/src/core/lib/gpr/string.cc +10 -33
  276. data/src/core/lib/gpr/string.h +4 -18
  277. data/src/core/lib/gpr/sync_abseil.cc +2 -0
  278. data/src/core/lib/gpr/time.cc +4 -0
  279. data/src/core/lib/gpr/time_posix.cc +1 -1
  280. data/src/core/lib/gprpp/atomic.h +6 -6
  281. data/src/core/lib/gprpp/fork.cc +1 -1
  282. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  283. data/src/core/lib/gprpp/host_port.cc +29 -35
  284. data/src/core/lib/gprpp/host_port.h +14 -17
  285. data/src/core/lib/gprpp/map.h +5 -11
  286. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  287. data/src/core/lib/gprpp/sync.h +9 -0
  288. data/src/core/lib/http/format_request.cc +46 -65
  289. data/src/core/lib/http/httpcli.cc +15 -13
  290. data/src/core/lib/http/httpcli.h +2 -3
  291. data/src/core/lib/http/httpcli_security_connector.cc +10 -10
  292. data/src/core/lib/http/parser.h +2 -3
  293. data/src/core/lib/iomgr/buffer_list.h +22 -21
  294. data/src/core/lib/iomgr/call_combiner.h +3 -2
  295. data/src/core/lib/iomgr/cfstream_handle.cc +4 -2
  296. data/src/core/lib/iomgr/closure.h +2 -3
  297. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  298. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  299. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  300. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  301. data/src/core/lib/iomgr/error.cc +6 -9
  302. data/src/core/lib/iomgr/error.h +0 -1
  303. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  304. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  305. data/src/core/lib/iomgr/ev_apple.h +43 -0
  306. data/src/core/lib/iomgr/ev_epoll1_linux.cc +25 -29
  307. data/src/core/lib/iomgr/ev_epollex_linux.cc +17 -24
  308. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -8
  309. data/src/core/lib/iomgr/ev_posix.cc +4 -3
  310. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  311. data/src/core/lib/iomgr/iomgr.cc +10 -0
  312. data/src/core/lib/iomgr/iomgr.h +10 -0
  313. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  314. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  315. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  316. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  317. data/src/core/lib/iomgr/port.h +2 -21
  318. data/src/core/lib/iomgr/python_util.h +46 -0
  319. data/src/core/lib/iomgr/resolve_address.h +4 -6
  320. data/src/core/lib/iomgr/resolve_address_custom.cc +42 -57
  321. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  322. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  323. data/src/core/lib/iomgr/resolve_address_windows.cc +16 -25
  324. data/src/core/lib/iomgr/resource_quota.cc +38 -37
  325. data/src/core/lib/iomgr/sockaddr_utils.cc +29 -33
  326. data/src/core/lib/iomgr/sockaddr_utils.h +10 -15
  327. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  328. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  329. data/src/core/lib/iomgr/socket_utils_common_posix.cc +102 -81
  330. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  331. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  332. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -18
  333. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  334. data/src/core/lib/iomgr/tcp_client_posix.cc +30 -36
  335. data/src/core/lib/iomgr/tcp_client_windows.cc +10 -11
  336. data/src/core/lib/iomgr/tcp_custom.cc +3 -4
  337. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  338. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  339. data/src/core/lib/iomgr/tcp_server.h +7 -5
  340. data/src/core/lib/iomgr/tcp_server_custom.cc +11 -23
  341. data/src/core/lib/iomgr/tcp_server_posix.cc +38 -44
  342. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  343. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -8
  344. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -18
  345. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  346. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  347. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  348. data/src/core/lib/iomgr/timer_generic.cc +15 -15
  349. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  350. data/src/core/lib/iomgr/timer_heap.h +2 -3
  351. data/src/core/lib/iomgr/udp_server.cc +32 -36
  352. data/src/core/lib/iomgr/udp_server.h +5 -2
  353. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  354. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  355. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  356. data/src/core/lib/json/json.h +3 -2
  357. data/src/core/lib/json/json_reader.cc +25 -26
  358. data/src/core/lib/json/json_writer.cc +13 -12
  359. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  360. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  361. data/src/core/lib/security/credentials/credentials.cc +0 -84
  362. data/src/core/lib/security/credentials/credentials.h +13 -62
  363. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  364. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  365. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -17
  366. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  367. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  368. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  369. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  370. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  371. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  372. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
  373. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  374. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +73 -54
  375. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
  376. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +19 -6
  377. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  378. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  379. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  380. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  381. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +48 -11
  382. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  383. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -17
  384. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  385. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  386. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  387. data/src/core/lib/security/security_connector/security_connector.h +2 -2
  388. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +38 -36
  389. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +8 -5
  390. data/src/core/lib/security/security_connector/ssl_utils.cc +89 -21
  391. data/src/core/lib/security/security_connector/ssl_utils.h +18 -12
  392. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +101 -72
  393. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
  394. data/src/core/lib/security/transport/auth_filters.h +0 -5
  395. data/src/core/lib/security/transport/client_auth_filter.cc +11 -11
  396. data/src/core/lib/security/util/json_util.cc +12 -13
  397. data/src/core/lib/slice/slice.cc +38 -1
  398. data/src/core/lib/slice/slice_intern.cc +2 -3
  399. data/src/core/lib/slice/slice_internal.h +15 -0
  400. data/src/core/lib/slice/slice_utils.h +9 -0
  401. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  402. data/src/core/lib/surface/call.cc +42 -44
  403. data/src/core/lib/surface/call_log_batch.cc +50 -58
  404. data/src/core/lib/surface/channel.cc +53 -31
  405. data/src/core/lib/surface/channel.h +35 -4
  406. data/src/core/lib/surface/channel_ping.cc +2 -3
  407. data/src/core/lib/surface/completion_queue.cc +304 -47
  408. data/src/core/lib/surface/completion_queue.h +8 -0
  409. data/src/core/lib/surface/event_string.cc +18 -25
  410. data/src/core/lib/surface/event_string.h +3 -1
  411. data/src/core/lib/surface/init.cc +2 -0
  412. data/src/core/lib/surface/init_secure.cc +1 -4
  413. data/src/core/lib/surface/server.cc +971 -837
  414. data/src/core/lib/surface/server.h +66 -12
  415. data/src/core/lib/surface/version.cc +2 -2
  416. data/src/core/lib/transport/byte_stream.h +7 -2
  417. data/src/core/lib/transport/connectivity_state.cc +7 -6
  418. data/src/core/lib/transport/connectivity_state.h +5 -3
  419. data/src/core/lib/transport/metadata.cc +3 -3
  420. data/src/core/lib/transport/metadata_batch.h +2 -3
  421. data/src/core/lib/transport/static_metadata.h +1 -1
  422. data/src/core/lib/transport/status_conversion.cc +6 -14
  423. data/src/core/lib/transport/transport.cc +2 -3
  424. data/src/core/lib/transport/transport.h +9 -2
  425. data/src/core/lib/transport/transport_op_string.cc +61 -102
  426. data/src/core/lib/uri/uri_parser.cc +8 -15
  427. data/src/core/lib/uri/uri_parser.h +2 -3
  428. data/src/core/plugin_registry/grpc_plugin_registry.cc +24 -4
  429. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  430. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +31 -14
  431. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  432. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +34 -2
  433. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  434. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  435. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  436. data/src/core/tsi/fake_transport_security.cc +10 -15
  437. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  438. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  439. data/src/core/tsi/ssl_transport_security.cc +154 -50
  440. data/src/core/tsi/ssl_transport_security.h +22 -10
  441. data/src/core/tsi/ssl_types.h +0 -2
  442. data/src/core/tsi/transport_security.h +6 -9
  443. data/src/core/tsi/transport_security_grpc.h +2 -3
  444. data/src/core/tsi/transport_security_interface.h +8 -3
  445. data/src/ruby/ext/grpc/extconf.rb +5 -2
  446. data/src/ruby/ext/grpc/rb_call.c +12 -3
  447. data/src/ruby/ext/grpc/rb_call.h +4 -0
  448. data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
  449. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  450. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  451. data/src/ruby/lib/grpc/errors.rb +103 -42
  452. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  453. data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
  454. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  455. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  456. data/src/ruby/lib/grpc/structs.rb +1 -1
  457. data/src/ruby/lib/grpc/version.rb +1 -1
  458. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  459. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  460. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  461. data/src/ruby/spec/debug_message_spec.rb +134 -0
  462. data/src/ruby/spec/generic/service_spec.rb +2 -0
  463. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  464. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +7 -0
  465. data/src/ruby/spec/pb/codegen/package_option_spec.rb +7 -1
  466. data/src/ruby/spec/support/services.rb +10 -4
  467. data/src/ruby/spec/testdata/ca.pem +18 -13
  468. data/src/ruby/spec/testdata/client.key +26 -14
  469. data/src/ruby/spec/testdata/client.pem +18 -12
  470. data/src/ruby/spec/testdata/server1.key +26 -14
  471. data/src/ruby/spec/testdata/server1.pem +20 -14
  472. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  473. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  474. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  475. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  476. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  477. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  478. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  481. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  482. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  483. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  484. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  485. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  486. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  487. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  488. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  489. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  490. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  491. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  492. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  493. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  494. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  495. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  496. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  497. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  498. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  499. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  500. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  501. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  502. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  503. data/third_party/boringssl-with-bazel/err_data.c +335 -297
  504. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  505. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  506. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  507. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  508. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  509. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  510. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  511. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  512. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  513. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  514. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  515. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  516. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  517. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  518. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  519. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  520. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  521. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  522. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  523. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  524. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  525. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  526. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  527. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  528. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  529. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  530. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
  531. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  532. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +25 -12
  536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  543. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +434 -161
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  545. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +18 -25
  546. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  547. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +104 -122
  548. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  549. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  550. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  551. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  552. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  553. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  554. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  555. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  556. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  557. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  558. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  559. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  560. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  561. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  562. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  563. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  564. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  565. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  566. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  567. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  568. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  569. data/third_party/boringssl-with-bazel/src/crypto/mem.c +47 -16
  570. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  571. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  572. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  573. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  574. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  576. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  577. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +249 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1227 -0
  579. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +682 -0
  580. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  581. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  582. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  583. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  584. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  585. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  586. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +57 -0
  587. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  588. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +33 -9
  589. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  590. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  591. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  592. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  593. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  594. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  595. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  596. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  597. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  598. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +6 -2
  599. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  600. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  601. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  602. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  603. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  604. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  605. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  606. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  607. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  608. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  609. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  610. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +191 -79
  611. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  612. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +282 -0
  613. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +791 -715
  614. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  615. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  616. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  617. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  618. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  619. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +23 -5
  620. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +30 -22
  621. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +21 -4
  622. data/third_party/boringssl-with-bazel/src/ssl/internal.h +74 -54
  623. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  624. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  625. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  626. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  627. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  628. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +34 -1
  629. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  630. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +44 -5
  631. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  632. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  633. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +51 -26
  634. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  635. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  636. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +129 -48
  637. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  638. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +55 -22
  639. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  640. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  641. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  642. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  643. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  644. data/third_party/upb/upb/decode.c +467 -504
  645. data/third_party/upb/upb/encode.c +163 -121
  646. data/third_party/upb/upb/msg.c +130 -64
  647. data/third_party/upb/upb/msg.h +418 -14
  648. data/third_party/upb/upb/port_def.inc +35 -6
  649. data/third_party/upb/upb/port_undef.inc +8 -1
  650. data/third_party/upb/upb/table.c +53 -75
  651. data/third_party/upb/upb/table.int.h +11 -43
  652. data/third_party/upb/upb/upb.c +148 -124
  653. data/third_party/upb/upb/upb.h +65 -147
  654. data/third_party/upb/upb/upb.hpp +86 -0
  655. metadata +122 -41
  656. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1908
  657. data/src/core/lib/gprpp/string_view.h +0 -60
  658. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  659. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
  660. data/third_party/upb/upb/generated_util.h +0 -105
@@ -26,6 +26,10 @@
26
26
  #include <string.h>
27
27
  #include <sys/types.h>
28
28
 
29
+ #include "absl/container/inlined_vector.h"
30
+ #include "absl/strings/str_cat.h"
31
+ #include "absl/strings/str_format.h"
32
+
29
33
  #include <ares.h>
30
34
  #include <grpc/support/alloc.h>
31
35
  #include <grpc/support/log.h>
@@ -33,11 +37,11 @@
33
37
  #include <grpc/support/time.h>
34
38
 
35
39
  #include <address_sorting/address_sorting.h>
40
+ #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
36
41
  #include "src/core/ext/filters/client_channel/parse_address.h"
37
42
  #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h"
38
43
  #include "src/core/lib/gpr/string.h"
39
44
  #include "src/core/lib/gprpp/host_port.h"
40
- #include "src/core/lib/iomgr/combiner.h"
41
45
  #include "src/core/lib/iomgr/error.h"
42
46
  #include "src/core/lib/iomgr/executor.h"
43
47
  #include "src/core/lib/iomgr/iomgr_internal.h"
@@ -60,6 +64,8 @@ struct grpc_ares_request {
60
64
  grpc_closure* on_done;
61
65
  /** the pointer to receive the resolved addresses */
62
66
  std::unique_ptr<grpc_core::ServerAddressList>* addresses_out;
67
+ /** the pointer to receive the resolved balancer addresses */
68
+ std::unique_ptr<grpc_core::ServerAddressList>* balancer_addresses_out;
63
69
  /** the pointer to receive the service config in JSON */
64
70
  char** service_config_json_out;
65
71
  /** the evernt driver used by this request */
@@ -71,6 +77,8 @@ struct grpc_ares_request {
71
77
  grpc_error* error;
72
78
  };
73
79
 
80
+ // TODO(apolcyn): make grpc_ares_hostbyname_request a sub-class
81
+ // of GrpcAresQuery.
74
82
  typedef struct grpc_ares_hostbyname_request {
75
83
  /** following members are set in create_hostbyname_request_locked
76
84
  */
@@ -82,27 +90,54 @@ typedef struct grpc_ares_hostbyname_request {
82
90
  uint16_t port;
83
91
  /** is it a grpclb address */
84
92
  bool is_balancer;
93
+ /** for logging and errors: the query type ("A" or "AAAA") */
94
+ const char* qtype;
85
95
  } grpc_ares_hostbyname_request;
86
96
 
87
- static void log_address_sorting_list(const ServerAddressList& addresses,
97
+ static void grpc_ares_request_ref_locked(grpc_ares_request* r);
98
+ static void grpc_ares_request_unref_locked(grpc_ares_request* r);
99
+
100
+ // TODO(apolcyn): as a part of C++-ification, find a way to
101
+ // organize per-query and per-resolution information in such a way
102
+ // that doesn't involve allocating a number of different data
103
+ // structures.
104
+ class GrpcAresQuery {
105
+ public:
106
+ explicit GrpcAresQuery(grpc_ares_request* r, const std::string& name)
107
+ : r_(r), name_(name) {
108
+ grpc_ares_request_ref_locked(r_);
109
+ }
110
+
111
+ ~GrpcAresQuery() { grpc_ares_request_unref_locked(r_); }
112
+
113
+ grpc_ares_request* parent_request() { return r_; }
114
+
115
+ const std::string& name() { return name_; }
116
+
117
+ private:
118
+ /* the top level request instance */
119
+ grpc_ares_request* r_;
120
+ /** for logging and errors */
121
+ const std::string name_;
122
+ };
123
+
124
+ static void log_address_sorting_list(const grpc_ares_request* r,
125
+ const ServerAddressList& addresses,
88
126
  const char* input_output_str) {
89
127
  for (size_t i = 0; i < addresses.size(); i++) {
90
- char* addr_str;
91
- if (grpc_sockaddr_to_string(&addr_str, &addresses[i].address(), true)) {
92
- gpr_log(GPR_INFO, "c-ares address sorting: %s[%" PRIuPTR "]=%s",
93
- input_output_str, i, addr_str);
94
- gpr_free(addr_str);
95
- } else {
96
- gpr_log(GPR_INFO,
97
- "c-ares address sorting: %s[%" PRIuPTR "]=<unprintable>",
98
- input_output_str, i);
99
- }
128
+ std::string addr_str =
129
+ grpc_sockaddr_to_string(&addresses[i].address(), true);
130
+ gpr_log(GPR_INFO,
131
+ "(c-ares resolver) request:%p c-ares address sorting: %s[%" PRIuPTR
132
+ "]=%s",
133
+ r, input_output_str, i, addr_str.c_str());
100
134
  }
101
135
  }
102
136
 
103
- void grpc_cares_wrapper_address_sorting_sort(ServerAddressList* addresses) {
137
+ void grpc_cares_wrapper_address_sorting_sort(const grpc_ares_request* r,
138
+ ServerAddressList* addresses) {
104
139
  if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_cares_address_sorting)) {
105
- log_address_sorting_list(*addresses, "input");
140
+ log_address_sorting_list(r, *addresses, "input");
106
141
  }
107
142
  address_sorting_sortable* sortables = (address_sorting_sortable*)gpr_zalloc(
108
143
  sizeof(address_sorting_sortable) * addresses->size());
@@ -121,7 +156,7 @@ void grpc_cares_wrapper_address_sorting_sort(ServerAddressList* addresses) {
121
156
  gpr_free(sortables);
122
157
  *addresses = std::move(sorted);
123
158
  if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_cares_address_sorting)) {
124
- log_address_sorting_list(*addresses, "output");
159
+ log_address_sorting_list(r, *addresses, "output");
125
160
  }
126
161
  }
127
162
 
@@ -142,28 +177,36 @@ void grpc_ares_complete_request_locked(grpc_ares_request* r) {
142
177
  r->ev_driver = nullptr;
143
178
  ServerAddressList* addresses = r->addresses_out->get();
144
179
  if (addresses != nullptr) {
145
- grpc_cares_wrapper_address_sorting_sort(addresses);
180
+ grpc_cares_wrapper_address_sorting_sort(r, addresses);
146
181
  GRPC_ERROR_UNREF(r->error);
147
182
  r->error = GRPC_ERROR_NONE;
148
183
  // TODO(apolcyn): allow c-ares to return a service config
149
184
  // with no addresses along side it
150
185
  }
186
+ if (r->balancer_addresses_out != nullptr) {
187
+ ServerAddressList* balancer_addresses = r->balancer_addresses_out->get();
188
+ if (balancer_addresses != nullptr) {
189
+ grpc_cares_wrapper_address_sorting_sort(r, balancer_addresses);
190
+ }
191
+ }
151
192
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_done, r->error);
152
193
  }
153
194
 
195
+ /* Note that the returned object takes a reference to qtype, so
196
+ * qtype must outlive it. */
154
197
  static grpc_ares_hostbyname_request* create_hostbyname_request_locked(
155
- grpc_ares_request* parent_request, char* host, uint16_t port,
156
- bool is_balancer) {
198
+ grpc_ares_request* parent_request, const char* host, uint16_t port,
199
+ bool is_balancer, const char* qtype) {
157
200
  GRPC_CARES_TRACE_LOG(
158
201
  "request:%p create_hostbyname_request_locked host:%s port:%d "
159
- "is_balancer:%d",
160
- parent_request, host, port, is_balancer);
161
- grpc_ares_hostbyname_request* hr = static_cast<grpc_ares_hostbyname_request*>(
162
- gpr_zalloc(sizeof(grpc_ares_hostbyname_request)));
202
+ "is_balancer:%d qtype:%s",
203
+ parent_request, host, port, is_balancer, qtype);
204
+ grpc_ares_hostbyname_request* hr = new grpc_ares_hostbyname_request();
163
205
  hr->parent_request = parent_request;
164
206
  hr->host = gpr_strdup(host);
165
207
  hr->port = port;
166
208
  hr->is_balancer = is_balancer;
209
+ hr->qtype = qtype;
167
210
  grpc_ares_request_ref_locked(parent_request);
168
211
  return hr;
169
212
  }
@@ -172,7 +215,7 @@ static void destroy_hostbyname_request_locked(
172
215
  grpc_ares_hostbyname_request* hr) {
173
216
  grpc_ares_request_unref_locked(hr->parent_request);
174
217
  gpr_free(hr->host);
175
- gpr_free(hr);
218
+ delete hr;
176
219
  }
177
220
 
178
221
  static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
@@ -182,19 +225,19 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
182
225
  grpc_ares_request* r = hr->parent_request;
183
226
  if (status == ARES_SUCCESS) {
184
227
  GRPC_CARES_TRACE_LOG(
185
- "request:%p on_hostbyname_done_locked host=%s ARES_SUCCESS", r,
186
- hr->host);
187
- if (*r->addresses_out == nullptr) {
188
- *r->addresses_out = absl::make_unique<ServerAddressList>();
228
+ "request:%p on_hostbyname_done_locked qtype=%s host=%s ARES_SUCCESS", r,
229
+ hr->qtype, hr->host);
230
+ std::unique_ptr<ServerAddressList>* address_list_ptr =
231
+ hr->is_balancer ? r->balancer_addresses_out : r->addresses_out;
232
+ if (*address_list_ptr == nullptr) {
233
+ *address_list_ptr = absl::make_unique<ServerAddressList>();
189
234
  }
190
- ServerAddressList& addresses = **r->addresses_out;
235
+ ServerAddressList& addresses = **address_list_ptr;
191
236
  for (size_t i = 0; hostent->h_addr_list[i] != nullptr; ++i) {
192
- grpc_core::InlinedVector<grpc_arg, 2> args_to_add;
237
+ absl::InlinedVector<grpc_arg, 1> args_to_add;
193
238
  if (hr->is_balancer) {
194
- args_to_add.emplace_back(grpc_channel_arg_integer_create(
195
- const_cast<char*>(GRPC_ARG_ADDRESS_IS_BALANCER), 1));
196
- args_to_add.emplace_back(grpc_channel_arg_string_create(
197
- const_cast<char*>(GRPC_ARG_ADDRESS_BALANCER_NAME), hr->host));
239
+ args_to_add.emplace_back(
240
+ grpc_core::CreateGrpclbBalancerNameArg(hr->host));
198
241
  }
199
242
  grpc_channel_args* args = grpc_channel_args_copy_and_add(
200
243
  nullptr, args_to_add.data(), args_to_add.size());
@@ -236,13 +279,12 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
236
279
  }
237
280
  }
238
281
  } else {
239
- char* error_msg;
240
- gpr_asprintf(&error_msg, "C-ares status is not ARES_SUCCESS: %s",
241
- ares_strerror(status));
242
- GRPC_CARES_TRACE_LOG("request:%p on_hostbyname_done_locked host=%s %s", r,
243
- hr->host, error_msg);
244
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg);
245
- gpr_free(error_msg);
282
+ std::string error_msg = absl::StrFormat(
283
+ "C-ares status is not ARES_SUCCESS qtype=%s name=%s is_balancer=%d: %s",
284
+ hr->qtype, hr->host, hr->is_balancer, ares_strerror(status));
285
+ GRPC_CARES_TRACE_LOG("request:%p on_hostbyname_done_locked: %s", r,
286
+ error_msg.c_str());
287
+ grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg.c_str());
246
288
  r->error = grpc_error_add_child(error, r->error);
247
289
  }
248
290
  destroy_hostbyname_request_locked(hr);
@@ -250,9 +292,12 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
250
292
 
251
293
  static void on_srv_query_done_locked(void* arg, int status, int /*timeouts*/,
252
294
  unsigned char* abuf, int alen) {
253
- grpc_ares_request* r = static_cast<grpc_ares_request*>(arg);
295
+ GrpcAresQuery* q = static_cast<GrpcAresQuery*>(arg);
296
+ grpc_ares_request* r = q->parent_request();
254
297
  if (status == ARES_SUCCESS) {
255
- GRPC_CARES_TRACE_LOG("request:%p on_srv_query_done_locked ARES_SUCCESS", r);
298
+ GRPC_CARES_TRACE_LOG(
299
+ "request:%p on_srv_query_done_locked name=%s ARES_SUCCESS", r,
300
+ q->name().c_str());
256
301
  struct ares_srv_reply* reply;
257
302
  const int parse_status = ares_parse_srv_reply(abuf, alen, &reply);
258
303
  GRPC_CARES_TRACE_LOG("request:%p ares_parse_srv_reply: %d", r,
@@ -264,12 +309,13 @@ static void on_srv_query_done_locked(void* arg, int status, int /*timeouts*/,
264
309
  srv_it = srv_it->next) {
265
310
  if (grpc_ares_query_ipv6()) {
266
311
  grpc_ares_hostbyname_request* hr = create_hostbyname_request_locked(
267
- r, srv_it->host, htons(srv_it->port), true /* is_balancer */);
312
+ r, srv_it->host, htons(srv_it->port), true /* is_balancer */,
313
+ "AAAA");
268
314
  ares_gethostbyname(*channel, hr->host, AF_INET6,
269
315
  on_hostbyname_done_locked, hr);
270
316
  }
271
317
  grpc_ares_hostbyname_request* hr = create_hostbyname_request_locked(
272
- r, srv_it->host, htons(srv_it->port), true /* is_balancer */);
318
+ r, srv_it->host, htons(srv_it->port), true /* is_balancer */, "A");
273
319
  ares_gethostbyname(*channel, hr->host, AF_INET,
274
320
  on_hostbyname_done_locked, hr);
275
321
  grpc_ares_ev_driver_start_locked(r->ev_driver);
@@ -279,30 +325,31 @@ static void on_srv_query_done_locked(void* arg, int status, int /*timeouts*/,
279
325
  ares_free_data(reply);
280
326
  }
281
327
  } else {
282
- char* error_msg;
283
- gpr_asprintf(&error_msg, "C-ares status is not ARES_SUCCESS: %s",
284
- ares_strerror(status));
285
- GRPC_CARES_TRACE_LOG("request:%p on_srv_query_done_locked %s", r,
286
- error_msg);
287
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg);
288
- gpr_free(error_msg);
328
+ std::string error_msg = absl::StrFormat(
329
+ "C-ares status is not ARES_SUCCESS qtype=SRV name=%s: %s", q->name(),
330
+ ares_strerror(status));
331
+ GRPC_CARES_TRACE_LOG("request:%p on_srv_query_done_locked: %s", r,
332
+ error_msg.c_str());
333
+ grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg.c_str());
289
334
  r->error = grpc_error_add_child(error, r->error);
290
335
  }
291
- grpc_ares_request_unref_locked(r);
336
+ delete q;
292
337
  }
293
338
 
294
339
  static const char g_service_config_attribute_prefix[] = "grpc_config=";
295
340
 
296
341
  static void on_txt_done_locked(void* arg, int status, int /*timeouts*/,
297
342
  unsigned char* buf, int len) {
298
- char* error_msg;
299
- grpc_ares_request* r = static_cast<grpc_ares_request*>(arg);
343
+ GrpcAresQuery* q = static_cast<GrpcAresQuery*>(arg);
344
+ std::unique_ptr<GrpcAresQuery> query_deleter(q);
345
+ grpc_ares_request* r = q->parent_request();
300
346
  const size_t prefix_len = sizeof(g_service_config_attribute_prefix) - 1;
301
347
  struct ares_txt_ext* result = nullptr;
302
348
  struct ares_txt_ext* reply = nullptr;
303
349
  grpc_error* error = GRPC_ERROR_NONE;
304
350
  if (status != ARES_SUCCESS) goto fail;
305
- GRPC_CARES_TRACE_LOG("request:%p on_txt_done_locked ARES_SUCCESS", r);
351
+ GRPC_CARES_TRACE_LOG("request:%p on_txt_done_locked name=%s ARES_SUCCESS", r,
352
+ q->name().c_str());
306
353
  status = ares_parse_txt_reply_ext(buf, len, &reply);
307
354
  if (status != ARES_SUCCESS) goto fail;
308
355
  // Find service config in TXT record.
@@ -335,45 +382,46 @@ static void on_txt_done_locked(void* arg, int status, int /*timeouts*/,
335
382
  }
336
383
  // Clean up.
337
384
  ares_free_data(reply);
338
- goto done;
385
+ return;
339
386
  fail:
340
- gpr_asprintf(&error_msg, "C-ares TXT lookup status is not ARES_SUCCESS: %s",
341
- ares_strerror(status));
342
- error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg);
343
- GRPC_CARES_TRACE_LOG("request:%p on_txt_done_locked %s", r, error_msg);
344
- gpr_free(error_msg);
387
+ std::string error_msg =
388
+ absl::StrFormat("C-ares status is not ARES_SUCCESS qtype=TXT name=%s: %s",
389
+ q->name(), ares_strerror(status));
390
+ error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg.c_str());
391
+ GRPC_CARES_TRACE_LOG("request:%p on_txt_done_locked %s", r,
392
+ error_msg.c_str());
345
393
  r->error = grpc_error_add_child(error, r->error);
346
- done:
347
- grpc_ares_request_unref_locked(r);
348
394
  }
349
395
 
350
396
  void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
351
397
  grpc_ares_request* r, const char* dns_server, const char* name,
352
398
  const char* default_port, grpc_pollset_set* interested_parties,
353
- bool check_grpclb, int query_timeout_ms, grpc_core::Combiner* combiner) {
399
+ int query_timeout_ms,
400
+ std::shared_ptr<grpc_core::WorkSerializer> work_serializer) {
354
401
  grpc_error* error = GRPC_ERROR_NONE;
355
402
  grpc_ares_hostbyname_request* hr = nullptr;
356
403
  ares_channel* channel = nullptr;
357
404
  /* parse name, splitting it into host and port parts */
358
- grpc_core::UniquePtr<char> host;
359
- grpc_core::UniquePtr<char> port;
405
+ std::string host;
406
+ std::string port;
360
407
  grpc_core::SplitHostPort(name, &host, &port);
361
- if (host == nullptr) {
408
+ if (host.empty()) {
362
409
  error = grpc_error_set_str(
363
410
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("unparseable host:port"),
364
411
  GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
365
412
  goto error_cleanup;
366
- } else if (port == nullptr) {
413
+ } else if (port.empty()) {
367
414
  if (default_port == nullptr) {
368
415
  error = grpc_error_set_str(
369
416
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("no port in name"),
370
417
  GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
371
418
  goto error_cleanup;
372
419
  }
373
- port.reset(gpr_strdup(default_port));
420
+ port = default_port;
374
421
  }
375
422
  error = grpc_ares_ev_driver_create_locked(&r->ev_driver, interested_parties,
376
- query_timeout_ms, combiner, r);
423
+ query_timeout_ms,
424
+ std::move(work_serializer), r);
377
425
  if (error != GRPC_ERROR_NONE) goto error_cleanup;
378
426
  channel = grpc_ares_ev_driver_get_channel_locked(r->ev_driver);
379
427
  // If dns_server is specified, use it.
@@ -404,43 +452,38 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
404
452
  }
405
453
  int status = ares_set_servers_ports(*channel, &r->dns_server_addr);
406
454
  if (status != ARES_SUCCESS) {
407
- char* error_msg;
408
- gpr_asprintf(&error_msg, "C-ares status is not ARES_SUCCESS: %s",
409
- ares_strerror(status));
410
- error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg);
411
- gpr_free(error_msg);
455
+ error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
456
+ absl::StrCat("C-ares status is not ARES_SUCCESS: ",
457
+ ares_strerror(status))
458
+ .c_str());
412
459
  goto error_cleanup;
413
460
  }
414
461
  }
415
462
  r->pending_queries = 1;
416
463
  if (grpc_ares_query_ipv6()) {
417
- hr = create_hostbyname_request_locked(r, host.get(),
418
- grpc_strhtons(port.get()),
419
- /*is_balancer=*/false);
464
+ hr = create_hostbyname_request_locked(r, host.c_str(),
465
+ grpc_strhtons(port.c_str()),
466
+ /*is_balancer=*/false, "AAAA");
420
467
  ares_gethostbyname(*channel, hr->host, AF_INET6, on_hostbyname_done_locked,
421
468
  hr);
422
469
  }
423
- hr =
424
- create_hostbyname_request_locked(r, host.get(), grpc_strhtons(port.get()),
425
- /*is_balancer=*/false);
470
+ hr = create_hostbyname_request_locked(r, host.c_str(),
471
+ grpc_strhtons(port.c_str()),
472
+ /*is_balancer=*/false, "A");
426
473
  ares_gethostbyname(*channel, hr->host, AF_INET, on_hostbyname_done_locked,
427
474
  hr);
428
- if (check_grpclb) {
475
+ if (r->balancer_addresses_out != nullptr) {
429
476
  /* Query the SRV record */
430
- grpc_ares_request_ref_locked(r);
431
- char* service_name;
432
- gpr_asprintf(&service_name, "_grpclb._tcp.%s", host.get());
433
- ares_query(*channel, service_name, ns_c_in, ns_t_srv,
434
- on_srv_query_done_locked, r);
435
- gpr_free(service_name);
477
+ std::string service_name = absl::StrCat("_grpclb._tcp.", host);
478
+ GrpcAresQuery* srv_query = new GrpcAresQuery(r, service_name);
479
+ ares_query(*channel, service_name.c_str(), ns_c_in, ns_t_srv,
480
+ on_srv_query_done_locked, srv_query);
436
481
  }
437
482
  if (r->service_config_json_out != nullptr) {
438
- grpc_ares_request_ref_locked(r);
439
- char* config_name;
440
- gpr_asprintf(&config_name, "_grpc_config.%s", host.get());
441
- ares_search(*channel, config_name, ns_c_in, ns_t_txt, on_txt_done_locked,
442
- r);
443
- gpr_free(config_name);
483
+ std::string config_name = absl::StrCat("_grpc_config.", host);
484
+ GrpcAresQuery* txt_query = new GrpcAresQuery(r, config_name);
485
+ ares_search(*channel, config_name.c_str(), ns_c_in, ns_t_txt,
486
+ on_txt_done_locked, txt_query);
444
487
  }
445
488
  grpc_ares_ev_driver_start_locked(r->ev_driver);
446
489
  grpc_ares_request_unref_locked(r);
@@ -452,18 +495,16 @@ error_cleanup:
452
495
 
453
496
  static bool inner_resolve_as_ip_literal_locked(
454
497
  const char* name, const char* default_port,
455
- std::unique_ptr<grpc_core::ServerAddressList>* addrs,
456
- grpc_core::UniquePtr<char>* host, grpc_core::UniquePtr<char>* port,
457
- grpc_core::UniquePtr<char>* hostport) {
458
- grpc_core::SplitHostPort(name, host, port);
459
- if (*host == nullptr) {
498
+ std::unique_ptr<grpc_core::ServerAddressList>* addrs, std::string* host,
499
+ std::string* port, std::string* hostport) {
500
+ if (!grpc_core::SplitHostPort(name, host, port)) {
460
501
  gpr_log(GPR_ERROR,
461
502
  "Failed to parse %s to host:port while attempting to resolve as ip "
462
503
  "literal.",
463
504
  name);
464
505
  return false;
465
506
  }
466
- if (*port == nullptr) {
507
+ if (port->empty()) {
467
508
  if (default_port == nullptr) {
468
509
  gpr_log(GPR_ERROR,
469
510
  "No port or default port for %s while attempting to resolve as "
@@ -471,13 +512,13 @@ static bool inner_resolve_as_ip_literal_locked(
471
512
  name);
472
513
  return false;
473
514
  }
474
- port->reset(gpr_strdup(default_port));
515
+ *port = default_port;
475
516
  }
476
517
  grpc_resolved_address addr;
477
- GPR_ASSERT(grpc_core::JoinHostPort(hostport, host->get(), atoi(port->get())));
478
- if (grpc_parse_ipv4_hostport(hostport->get(), &addr,
518
+ *hostport = grpc_core::JoinHostPort(*host, atoi(port->c_str()));
519
+ if (grpc_parse_ipv4_hostport(hostport->c_str(), &addr,
479
520
  false /* log errors */) ||
480
- grpc_parse_ipv6_hostport(hostport->get(), &addr,
521
+ grpc_parse_ipv6_hostport(hostport->c_str(), &addr,
481
522
  false /* log errors */)) {
482
523
  GPR_ASSERT(*addrs == nullptr);
483
524
  *addrs = absl::make_unique<ServerAddressList>();
@@ -490,22 +531,21 @@ static bool inner_resolve_as_ip_literal_locked(
490
531
  static bool resolve_as_ip_literal_locked(
491
532
  const char* name, const char* default_port,
492
533
  std::unique_ptr<grpc_core::ServerAddressList>* addrs) {
493
- grpc_core::UniquePtr<char> host;
494
- grpc_core::UniquePtr<char> port;
495
- grpc_core::UniquePtr<char> hostport;
534
+ std::string host;
535
+ std::string port;
536
+ std::string hostport;
496
537
  bool out = inner_resolve_as_ip_literal_locked(name, default_port, addrs,
497
538
  &host, &port, &hostport);
498
539
  return out;
499
540
  }
500
541
 
501
- static bool target_matches_localhost_inner(const char* name,
502
- grpc_core::UniquePtr<char>* host,
503
- grpc_core::UniquePtr<char>* port) {
542
+ static bool target_matches_localhost_inner(const char* name, std::string* host,
543
+ std::string* port) {
504
544
  if (!grpc_core::SplitHostPort(name, host, port)) {
505
545
  gpr_log(GPR_ERROR, "Unable to split host and port for name: %s", name);
506
546
  return false;
507
547
  }
508
- if (gpr_stricmp(host->get(), "localhost") == 0) {
548
+ if (gpr_stricmp(host->c_str(), "localhost") == 0) {
509
549
  return true;
510
550
  } else {
511
551
  return false;
@@ -513,25 +553,25 @@ static bool target_matches_localhost_inner(const char* name,
513
553
  }
514
554
 
515
555
  static bool target_matches_localhost(const char* name) {
516
- grpc_core::UniquePtr<char> host;
517
- grpc_core::UniquePtr<char> port;
556
+ std::string host;
557
+ std::string port;
518
558
  return target_matches_localhost_inner(name, &host, &port);
519
559
  }
520
560
 
521
561
  #ifdef GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY
522
562
  static bool inner_maybe_resolve_localhost_manually_locked(
523
- const char* name, const char* default_port,
524
- std::unique_ptr<grpc_core::ServerAddressList>* addrs,
525
- grpc_core::UniquePtr<char>* host, grpc_core::UniquePtr<char>* port) {
563
+ const grpc_ares_request* r, const char* name, const char* default_port,
564
+ std::unique_ptr<grpc_core::ServerAddressList>* addrs, std::string* host,
565
+ std::string* port) {
526
566
  grpc_core::SplitHostPort(name, host, port);
527
- if (*host == nullptr) {
567
+ if (host->empty()) {
528
568
  gpr_log(GPR_ERROR,
529
569
  "Failed to parse %s into host:port during manual localhost "
530
570
  "resolution check.",
531
571
  name);
532
572
  return false;
533
573
  }
534
- if (*port == nullptr) {
574
+ if (port->empty()) {
535
575
  if (default_port == nullptr) {
536
576
  gpr_log(GPR_ERROR,
537
577
  "No port or default port for %s during manual localhost "
@@ -539,12 +579,12 @@ static bool inner_maybe_resolve_localhost_manually_locked(
539
579
  name);
540
580
  return false;
541
581
  }
542
- port->reset(gpr_strdup(default_port));
582
+ *port = default_port;
543
583
  }
544
- if (gpr_stricmp(host->get(), "localhost") == 0) {
584
+ if (gpr_stricmp(host->c_str(), "localhost") == 0) {
545
585
  GPR_ASSERT(*addrs == nullptr);
546
586
  *addrs = absl::make_unique<grpc_core::ServerAddressList>();
547
- uint16_t numeric_port = grpc_strhtons(port->get());
587
+ uint16_t numeric_port = grpc_strhtons(port->c_str());
548
588
  // Append the ipv6 loopback address.
549
589
  struct sockaddr_in6 ipv6_loopback_addr;
550
590
  memset(&ipv6_loopback_addr, 0, sizeof(ipv6_loopback_addr));
@@ -563,23 +603,24 @@ static bool inner_maybe_resolve_localhost_manually_locked(
563
603
  (*addrs)->emplace_back(&ipv4_loopback_addr, sizeof(ipv4_loopback_addr),
564
604
  nullptr /* args */);
565
605
  // Let the address sorter figure out which one should be tried first.
566
- grpc_cares_wrapper_address_sorting_sort(addrs->get());
606
+ grpc_cares_wrapper_address_sorting_sort(r, addrs->get());
567
607
  return true;
568
608
  }
569
609
  return false;
570
610
  }
571
611
 
572
612
  static bool grpc_ares_maybe_resolve_localhost_manually_locked(
573
- const char* name, const char* default_port,
613
+ const grpc_ares_request* r, const char* name, const char* default_port,
574
614
  std::unique_ptr<grpc_core::ServerAddressList>* addrs) {
575
- grpc_core::UniquePtr<char> host;
576
- grpc_core::UniquePtr<char> port;
577
- return inner_maybe_resolve_localhost_manually_locked(name, default_port,
615
+ std::string host;
616
+ std::string port;
617
+ return inner_maybe_resolve_localhost_manually_locked(r, name, default_port,
578
618
  addrs, &host, &port);
579
619
  }
580
620
  #else /* GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY */
581
621
  static bool grpc_ares_maybe_resolve_localhost_manually_locked(
582
- const char* /*name*/, const char* /*default_port*/,
622
+ const grpc_ares_request* /*r*/, const char* /*name*/,
623
+ const char* /*default_port*/,
583
624
  std::unique_ptr<grpc_core::ServerAddressList>* /*addrs*/) {
584
625
  return false;
585
626
  }
@@ -588,14 +629,16 @@ static bool grpc_ares_maybe_resolve_localhost_manually_locked(
588
629
  static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
589
630
  const char* dns_server, const char* name, const char* default_port,
590
631
  grpc_pollset_set* interested_parties, grpc_closure* on_done,
591
- std::unique_ptr<grpc_core::ServerAddressList>* addrs, bool check_grpclb,
632
+ std::unique_ptr<grpc_core::ServerAddressList>* addrs,
633
+ std::unique_ptr<grpc_core::ServerAddressList>* balancer_addrs,
592
634
  char** service_config_json, int query_timeout_ms,
593
- grpc_core::Combiner* combiner) {
635
+ std::shared_ptr<grpc_core::WorkSerializer> work_serializer) {
594
636
  grpc_ares_request* r =
595
637
  static_cast<grpc_ares_request*>(gpr_zalloc(sizeof(grpc_ares_request)));
596
638
  r->ev_driver = nullptr;
597
639
  r->on_done = on_done;
598
640
  r->addresses_out = addrs;
641
+ r->balancer_addresses_out = balancer_addrs;
599
642
  r->service_config_json_out = service_config_json;
600
643
  r->error = GRPC_ERROR_NONE;
601
644
  r->pending_queries = 0;
@@ -609,7 +652,7 @@ static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
609
652
  return r;
610
653
  }
611
654
  // Early out if the target is localhost and we're on Windows.
612
- if (grpc_ares_maybe_resolve_localhost_manually_locked(name, default_port,
655
+ if (grpc_ares_maybe_resolve_localhost_manually_locked(r, name, default_port,
613
656
  addrs)) {
614
657
  grpc_ares_complete_request_locked(r);
615
658
  return r;
@@ -618,22 +661,24 @@ static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
618
661
  // as to cut down on lookups over the network, especially in tests:
619
662
  // https://github.com/grpc/proposal/pull/79
620
663
  if (target_matches_localhost(name)) {
621
- check_grpclb = false;
664
+ r->balancer_addresses_out = nullptr;
622
665
  r->service_config_json_out = nullptr;
623
666
  }
624
667
  // Look up name using c-ares lib.
625
668
  grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
626
- r, dns_server, name, default_port, interested_parties, check_grpclb,
627
- query_timeout_ms, combiner);
669
+ r, dns_server, name, default_port, interested_parties, query_timeout_ms,
670
+ std::move(work_serializer));
628
671
  return r;
629
672
  }
630
673
 
631
674
  grpc_ares_request* (*grpc_dns_lookup_ares_locked)(
632
675
  const char* dns_server, const char* name, const char* default_port,
633
676
  grpc_pollset_set* interested_parties, grpc_closure* on_done,
634
- std::unique_ptr<grpc_core::ServerAddressList>* addrs, bool check_grpclb,
677
+ std::unique_ptr<grpc_core::ServerAddressList>* addrs,
678
+ std::unique_ptr<grpc_core::ServerAddressList>* balancer_addrs,
635
679
  char** service_config_json, int query_timeout_ms,
636
- grpc_core::Combiner* combiner) = grpc_dns_lookup_ares_locked_impl;
680
+ std::shared_ptr<grpc_core::WorkSerializer> work_serializer) =
681
+ grpc_dns_lookup_ares_locked_impl;
637
682
 
638
683
  static void grpc_cancel_ares_request_locked_impl(grpc_ares_request* r) {
639
684
  GPR_ASSERT(r != nullptr);
@@ -652,12 +697,9 @@ void (*grpc_cancel_ares_request_locked)(grpc_ares_request* r) =
652
697
  grpc_error* grpc_ares_init(void) {
653
698
  int status = ares_library_init(ARES_LIB_INIT_ALL);
654
699
  if (status != ARES_SUCCESS) {
655
- char* error_msg;
656
- gpr_asprintf(&error_msg, "ares_library_init failed: %s",
657
- ares_strerror(status));
658
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg);
659
- gpr_free(error_msg);
660
- return error;
700
+ return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
701
+ absl::StrCat("ares_library_init failed: ", ares_strerror(status))
702
+ .c_str());
661
703
  }
662
704
  return GRPC_ERROR_NONE;
663
705
  }
@@ -673,8 +715,8 @@ void grpc_ares_cleanup(void) {}
673
715
  */
674
716
 
675
717
  typedef struct grpc_resolve_address_ares_request {
676
- /* combiner that queries and related callbacks run under */
677
- grpc_core::Combiner* combiner;
718
+ /* work_serializer that queries and related callbacks run under */
719
+ std::shared_ptr<grpc_core::WorkSerializer> work_serializer;
678
720
  /** the pointer to receive the resolved addresses */
679
721
  grpc_resolved_addresses** addrs_out;
680
722
  /** currently resolving addresses */
@@ -694,9 +736,8 @@ typedef struct grpc_resolve_address_ares_request {
694
736
  grpc_ares_request* ares_request = nullptr;
695
737
  } grpc_resolve_address_ares_request;
696
738
 
697
- static void on_dns_lookup_done_locked(void* arg, grpc_error* error) {
698
- grpc_resolve_address_ares_request* r =
699
- static_cast<grpc_resolve_address_ares_request*>(arg);
739
+ static void on_dns_lookup_done_locked(grpc_resolve_address_ares_request* r,
740
+ grpc_error* error) {
700
741
  gpr_free(r->ares_request);
701
742
  grpc_resolved_addresses** resolved_addresses = r->addrs_out;
702
743
  if (r->addresses == nullptr || r->addresses->empty()) {
@@ -709,36 +750,32 @@ static void on_dns_lookup_done_locked(void* arg, grpc_error* error) {
709
750
  static_cast<grpc_resolved_address*>(gpr_zalloc(
710
751
  sizeof(grpc_resolved_address) * (*resolved_addresses)->naddrs));
711
752
  for (size_t i = 0; i < (*resolved_addresses)->naddrs; ++i) {
712
- GPR_ASSERT(!(*r->addresses)[i].IsBalancer());
713
753
  memcpy(&(*resolved_addresses)->addrs[i], &(*r->addresses)[i].address(),
714
754
  sizeof(grpc_resolved_address));
715
755
  }
716
756
  }
717
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_resolve_address_done,
718
- GRPC_ERROR_REF(error));
719
- GRPC_COMBINER_UNREF(r->combiner, "on_dns_lookup_done_cb");
757
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_resolve_address_done, error);
720
758
  delete r;
721
759
  }
722
760
 
723
761
  static void on_dns_lookup_done(void* arg, grpc_error* error) {
724
762
  grpc_resolve_address_ares_request* r =
725
763
  static_cast<grpc_resolve_address_ares_request*>(arg);
726
- r->combiner->Run(GRPC_CLOSURE_INIT(&r->on_dns_lookup_done_locked,
727
- on_dns_lookup_done_locked, r, nullptr),
728
- GRPC_ERROR_REF(error));
764
+ GRPC_ERROR_REF(error); // ref owned by lambda
765
+ r->work_serializer->Run([r, error]() { on_dns_lookup_done_locked(r, error); },
766
+ DEBUG_LOCATION);
729
767
  }
730
768
 
731
- static void grpc_resolve_address_invoke_dns_lookup_ares_locked(
732
- void* arg, grpc_error* /*unused_error*/) {
769
+ static void grpc_resolve_address_invoke_dns_lookup_ares_locked(void* arg) {
733
770
  grpc_resolve_address_ares_request* r =
734
771
  static_cast<grpc_resolve_address_ares_request*>(arg);
735
772
  GRPC_CLOSURE_INIT(&r->on_dns_lookup_done_locked, on_dns_lookup_done, r,
736
773
  grpc_schedule_on_exec_ctx);
737
774
  r->ares_request = grpc_dns_lookup_ares_locked(
738
775
  nullptr /* dns_server */, r->name, r->default_port, r->interested_parties,
739
- &r->on_dns_lookup_done_locked, &r->addresses, false /* check_grpclb */,
740
- nullptr /* service_config_json */, GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS,
741
- r->combiner);
776
+ &r->on_dns_lookup_done_locked, &r->addresses,
777
+ nullptr /* balancer_addresses */, nullptr /* service_config_json */,
778
+ GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS, r->work_serializer);
742
779
  }
743
780
 
744
781
  static void grpc_resolve_address_ares_impl(const char* name,
@@ -748,16 +785,15 @@ static void grpc_resolve_address_ares_impl(const char* name,
748
785
  grpc_resolved_addresses** addrs) {
749
786
  grpc_resolve_address_ares_request* r =
750
787
  new grpc_resolve_address_ares_request();
751
- r->combiner = grpc_combiner_create();
788
+ r->work_serializer = std::make_shared<grpc_core::WorkSerializer>();
752
789
  r->addrs_out = addrs;
753
790
  r->on_resolve_address_done = on_done;
754
791
  r->name = name;
755
792
  r->default_port = default_port;
756
793
  r->interested_parties = interested_parties;
757
- r->combiner->Run(
758
- GRPC_CLOSURE_CREATE(grpc_resolve_address_invoke_dns_lookup_ares_locked, r,
759
- nullptr),
760
- GRPC_ERROR_NONE);
794
+ r->work_serializer->Run(
795
+ [r]() { grpc_resolve_address_invoke_dns_lookup_ares_locked(r); },
796
+ DEBUG_LOCATION);
761
797
  }
762
798
 
763
799
  void (*grpc_resolve_address_ares)(