grpc 1.28.0 → 1.30.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 (503) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +7694 -11190
  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 +1 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +19 -21
  7. data/include/grpc/impl/codegen/port_platform.h +6 -2
  8. data/include/grpc/module.modulemap +24 -39
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +212 -241
  11. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
  15. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  16. data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
  17. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
  28. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  34. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
  35. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  36. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  37. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  38. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +73 -59
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +16 -20
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  48. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +40 -43
  49. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
  50. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  51. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +32 -5
  53. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  54. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
  55. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
  58. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
  59. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
  60. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  61. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  62. data/src/core/ext/filters/client_channel/service_config.cc +104 -144
  63. data/src/core/ext/filters/client_channel/service_config.h +28 -98
  64. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  65. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  66. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  67. data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
  68. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  69. data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
  70. data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
  71. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
  72. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
  73. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
  74. data/src/core/ext/filters/client_channel/xds/xds_client.cc +532 -339
  75. data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
  76. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
  77. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +31 -19
  78. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
  79. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  80. data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  83. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
  89. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  90. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  92. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  93. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  94. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  96. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  97. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  98. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  99. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  100. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  101. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  102. data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
  103. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  104. data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
  105. data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
  106. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
  107. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -875
  108. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  109. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  110. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  111. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  112. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  113. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  114. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
  115. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
  116. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
  117. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
  118. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
  119. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
  120. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
  121. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  122. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  123. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
  124. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
  125. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
  126. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  127. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  128. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
  129. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
  130. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
  131. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
  133. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
  134. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
  138. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
  139. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
  140. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
  141. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
  142. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
  143. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
  144. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
  145. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +16 -0
  146. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
  147. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +2 -1
  148. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
  150. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
  151. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
  152. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +63 -41
  153. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
  154. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
  156. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
  157. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
  158. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +90 -30
  159. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
  160. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  161. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  162. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  163. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  164. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
  165. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  166. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +36 -0
  168. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
  169. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
  170. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  171. data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
  172. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
  173. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
  174. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
  175. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
  176. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  177. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  178. data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
  179. data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
  180. data/src/core/lib/channel/channel_args.cc +15 -14
  181. data/src/core/lib/channel/channel_args.h +3 -1
  182. data/src/core/lib/channel/channel_stack.h +20 -13
  183. data/src/core/lib/channel/channelz.cc +5 -6
  184. data/src/core/lib/channel/channelz.h +3 -2
  185. data/src/core/lib/channel/channelz_registry.cc +5 -3
  186. data/src/core/lib/channel/connected_channel.cc +7 -5
  187. data/src/core/lib/channel/context.h +1 -1
  188. data/src/core/lib/channel/handshaker.cc +11 -13
  189. data/src/core/lib/channel/handshaker.h +4 -2
  190. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  191. data/src/core/lib/channel/status_util.cc +2 -3
  192. data/src/core/lib/compression/message_compress.cc +5 -1
  193. data/src/core/lib/debug/stats.cc +21 -27
  194. data/src/core/lib/debug/stats.h +3 -1
  195. data/src/core/lib/gpr/spinlock.h +2 -3
  196. data/src/core/lib/gpr/string.cc +2 -26
  197. data/src/core/lib/gpr/string.h +0 -16
  198. data/src/core/lib/gpr/sync_abseil.cc +2 -0
  199. data/src/core/lib/gpr/time.cc +4 -0
  200. data/src/core/lib/gpr/time_posix.cc +1 -1
  201. data/src/core/lib/gprpp/atomic.h +6 -6
  202. data/src/core/lib/gprpp/fork.cc +1 -1
  203. data/src/core/lib/gprpp/host_port.cc +29 -35
  204. data/src/core/lib/gprpp/host_port.h +14 -17
  205. data/src/core/lib/gprpp/map.h +5 -11
  206. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  207. data/src/core/lib/http/format_request.cc +46 -65
  208. data/src/core/lib/http/httpcli.cc +2 -3
  209. data/src/core/lib/http/httpcli.h +2 -3
  210. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  211. data/src/core/lib/http/parser.h +2 -3
  212. data/src/core/lib/iomgr/buffer_list.h +22 -21
  213. data/src/core/lib/iomgr/call_combiner.h +3 -2
  214. data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
  215. data/src/core/lib/iomgr/closure.h +2 -3
  216. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  217. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  218. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  219. data/src/core/lib/iomgr/error.cc +6 -9
  220. data/src/core/lib/iomgr/error.h +0 -1
  221. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  222. data/src/core/lib/iomgr/ev_apple.h +43 -0
  223. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
  224. data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
  225. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
  226. data/src/core/lib/iomgr/ev_posix.cc +2 -3
  227. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  228. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  229. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  230. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  231. data/src/core/lib/iomgr/port.h +1 -0
  232. data/src/core/lib/iomgr/python_util.h +46 -0
  233. data/src/core/lib/iomgr/resolve_address.h +4 -6
  234. data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
  235. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  236. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  237. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
  238. data/src/core/lib/iomgr/resource_quota.cc +4 -6
  239. data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
  240. data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
  241. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  242. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  243. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
  244. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
  247. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  248. data/src/core/lib/iomgr/tcp_custom.cc +2 -3
  249. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
  253. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  254. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  255. data/src/core/lib/iomgr/timer_generic.cc +2 -3
  256. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  257. data/src/core/lib/iomgr/timer_heap.h +2 -3
  258. data/src/core/lib/iomgr/udp_server.cc +9 -14
  259. data/src/core/lib/json/json.h +3 -2
  260. data/src/core/lib/json/json_reader.cc +5 -5
  261. data/src/core/lib/json/json_writer.cc +13 -12
  262. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  263. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  264. data/src/core/lib/security/credentials/credentials.cc +0 -84
  265. data/src/core/lib/security/credentials/credentials.h +8 -59
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
  274. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +55 -27
  276. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
  278. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  279. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  280. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -11
  281. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  282. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
  283. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  284. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  285. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  286. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
  287. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
  288. data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
  289. data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
  290. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
  291. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
  292. data/src/core/lib/security/transport/auth_filters.h +0 -5
  293. data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
  294. data/src/core/lib/slice/slice_intern.cc +2 -3
  295. data/src/core/lib/slice/slice_internal.h +14 -0
  296. data/src/core/lib/slice/slice_utils.h +9 -0
  297. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  298. data/src/core/lib/surface/call.cc +2 -3
  299. data/src/core/lib/surface/call_log_batch.cc +50 -58
  300. data/src/core/lib/surface/channel.cc +53 -31
  301. data/src/core/lib/surface/channel.h +35 -4
  302. data/src/core/lib/surface/channel_ping.cc +2 -3
  303. data/src/core/lib/surface/completion_queue.cc +33 -33
  304. data/src/core/lib/surface/event_string.cc +18 -25
  305. data/src/core/lib/surface/event_string.h +3 -1
  306. data/src/core/lib/surface/init_secure.cc +1 -4
  307. data/src/core/lib/surface/server.cc +570 -369
  308. data/src/core/lib/surface/server.h +32 -0
  309. data/src/core/lib/surface/version.cc +2 -2
  310. data/src/core/lib/transport/byte_stream.h +7 -2
  311. data/src/core/lib/transport/connectivity_state.cc +7 -6
  312. data/src/core/lib/transport/connectivity_state.h +5 -3
  313. data/src/core/lib/transport/metadata.cc +3 -3
  314. data/src/core/lib/transport/metadata_batch.h +2 -3
  315. data/src/core/lib/transport/static_metadata.h +1 -1
  316. data/src/core/lib/transport/status_conversion.cc +6 -14
  317. data/src/core/lib/transport/transport.cc +2 -3
  318. data/src/core/lib/transport/transport.h +3 -2
  319. data/src/core/lib/transport/transport_op_string.cc +61 -102
  320. data/src/core/lib/uri/uri_parser.h +2 -3
  321. data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
  322. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  323. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
  324. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  325. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
  326. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  327. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  328. data/src/core/tsi/fake_transport_security.cc +10 -15
  329. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  330. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  331. data/src/core/tsi/ssl_transport_security.cc +52 -39
  332. data/src/core/tsi/ssl_transport_security.h +8 -8
  333. data/src/core/tsi/ssl_types.h +0 -2
  334. data/src/core/tsi/transport_security.h +6 -9
  335. data/src/core/tsi/transport_security_grpc.h +2 -3
  336. data/src/core/tsi/transport_security_interface.h +3 -3
  337. data/src/ruby/ext/grpc/rb_call.c +9 -1
  338. data/src/ruby/ext/grpc/rb_call_credentials.c +3 -2
  339. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  340. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  341. data/src/ruby/lib/grpc/errors.rb +103 -42
  342. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  343. data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
  344. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  345. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  346. data/src/ruby/lib/grpc/structs.rb +1 -1
  347. data/src/ruby/lib/grpc/version.rb +1 -1
  348. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  349. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  350. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  351. data/src/ruby/spec/debug_message_spec.rb +134 -0
  352. data/src/ruby/spec/generic/service_spec.rb +2 -0
  353. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  354. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +7 -0
  355. data/src/ruby/spec/pb/codegen/package_option_spec.rb +7 -1
  356. data/src/ruby/spec/support/services.rb +10 -4
  357. data/src/ruby/spec/testdata/ca.pem +18 -13
  358. data/src/ruby/spec/testdata/client.key +26 -14
  359. data/src/ruby/spec/testdata/client.pem +18 -12
  360. data/src/ruby/spec/testdata/server1.key +26 -14
  361. data/src/ruby/spec/testdata/server1.pem +20 -14
  362. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  363. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  364. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  365. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  366. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  367. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  368. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  369. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  370. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  371. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  372. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  373. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  374. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  375. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  376. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  377. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  378. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  379. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  380. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  381. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  382. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  383. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  384. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  385. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  386. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  387. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  388. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  389. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  390. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  391. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  392. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  393. data/third_party/boringssl-with-bazel/err_data.c +329 -297
  394. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  395. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  396. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  397. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  398. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  399. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  400. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  401. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  402. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  403. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  404. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  405. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  406. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  407. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  437. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  438. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  439. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  440. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  441. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  442. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  443. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
  444. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  445. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  446. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  447. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  448. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  449. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  450. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  451. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  452. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
  453. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
  454. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  455. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  456. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  457. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  458. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  459. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  460. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  461. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  462. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  463. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  464. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  465. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  466. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
  467. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  468. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  469. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
  470. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  471. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  472. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  473. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  474. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  475. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
  476. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
  477. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
  478. data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
  479. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  480. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  481. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  482. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  483. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  484. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
  485. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  486. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
  487. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  488. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
  489. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  490. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  491. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
  492. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  493. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
  494. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  495. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  496. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  497. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  498. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  499. metadata +115 -39
  500. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  501. data/src/core/lib/gprpp/string_view.h +0 -60
  502. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  503. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -22,8 +22,9 @@
22
22
 
23
23
  #include <string.h>
24
24
 
25
+ #include "absl/container/inlined_vector.h"
26
+
25
27
  #include "src/core/lib/gpr/string.h"
26
- #include "src/core/lib/gprpp/inlined_vector.h"
27
28
 
28
29
  namespace grpc_core {
29
30
 
@@ -35,6 +36,8 @@ class RegistryState {
35
36
 
36
37
  void RegisterLoadBalancingPolicyFactory(
37
38
  std::unique_ptr<LoadBalancingPolicyFactory> factory) {
39
+ gpr_log(GPR_DEBUG, "registering LB policy factory for \"%s\"",
40
+ factory->name());
38
41
  for (size_t i = 0; i < factories_.size(); ++i) {
39
42
  GPR_ASSERT(strcmp(factories_[i]->name(), factory->name()) != 0);
40
43
  }
@@ -52,7 +55,8 @@ class RegistryState {
52
55
  }
53
56
 
54
57
  private:
55
- InlinedVector<std::unique_ptr<LoadBalancingPolicyFactory>, 10> factories_;
58
+ absl::InlinedVector<std::unique_ptr<LoadBalancingPolicyFactory>, 10>
59
+ factories_;
56
60
  };
57
61
 
58
62
  RegistryState* g_state = nullptr;
@@ -38,7 +38,8 @@ class LocalSubchannelPool final : public SubchannelPoolInterface {
38
38
  ~LocalSubchannelPool() override;
39
39
 
40
40
  // Implements interface methods.
41
- // Thread-unsafe. Intended to be invoked within the client_channel combiner.
41
+ // Thread-unsafe. Intended to be invoked within the client_channel work
42
+ // serializer.
42
43
  Subchannel* RegisterSubchannel(SubchannelKey* key,
43
44
  Subchannel* constructed) override;
44
45
  void UnregisterSubchannel(SubchannelKey* key) override;
@@ -73,8 +73,8 @@ bool grpc_parse_ipv4_hostport(const char* hostport, grpc_resolved_address* addr,
73
73
  bool log_errors) {
74
74
  bool success = false;
75
75
  // Split host and port.
76
- grpc_core::UniquePtr<char> host;
77
- grpc_core::UniquePtr<char> port;
76
+ std::string host;
77
+ std::string port;
78
78
  if (!grpc_core::SplitHostPort(hostport, &host, &port)) {
79
79
  if (log_errors) {
80
80
  gpr_log(GPR_ERROR, "Failed gpr_split_host_port(%s, ...)", hostport);
@@ -86,21 +86,21 @@ bool grpc_parse_ipv4_hostport(const char* hostport, grpc_resolved_address* addr,
86
86
  addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in));
87
87
  grpc_sockaddr_in* in = reinterpret_cast<grpc_sockaddr_in*>(addr->addr);
88
88
  in->sin_family = GRPC_AF_INET;
89
- if (grpc_inet_pton(GRPC_AF_INET, host.get(), &in->sin_addr) == 0) {
89
+ if (grpc_inet_pton(GRPC_AF_INET, host.c_str(), &in->sin_addr) == 0) {
90
90
  if (log_errors) {
91
- gpr_log(GPR_ERROR, "invalid ipv4 address: '%s'", host.get());
91
+ gpr_log(GPR_ERROR, "invalid ipv4 address: '%s'", host.c_str());
92
92
  }
93
93
  goto done;
94
94
  }
95
95
  // Parse port.
96
- if (port == nullptr) {
96
+ if (port.empty()) {
97
97
  if (log_errors) gpr_log(GPR_ERROR, "no port given for ipv4 scheme");
98
98
  goto done;
99
99
  }
100
100
  int port_num;
101
- if (sscanf(port.get(), "%d", &port_num) != 1 || port_num < 0 ||
101
+ if (sscanf(port.c_str(), "%d", &port_num) != 1 || port_num < 0 ||
102
102
  port_num > 65535) {
103
- if (log_errors) gpr_log(GPR_ERROR, "invalid ipv4 port: '%s'", port.get());
103
+ if (log_errors) gpr_log(GPR_ERROR, "invalid ipv4 port: '%s'", port.c_str());
104
104
  goto done;
105
105
  }
106
106
  in->sin_port = grpc_htons(static_cast<uint16_t>(port_num));
@@ -125,8 +125,8 @@ bool grpc_parse_ipv6_hostport(const char* hostport, grpc_resolved_address* addr,
125
125
  bool log_errors) {
126
126
  bool success = false;
127
127
  // Split host and port.
128
- grpc_core::UniquePtr<char> host;
129
- grpc_core::UniquePtr<char> port;
128
+ std::string host;
129
+ std::string port;
130
130
  if (!grpc_core::SplitHostPort(hostport, &host, &port)) {
131
131
  if (log_errors) {
132
132
  gpr_log(GPR_ERROR, "Failed gpr_split_host_port(%s, ...)", hostport);
@@ -140,11 +140,12 @@ bool grpc_parse_ipv6_hostport(const char* hostport, grpc_resolved_address* addr,
140
140
  in6->sin6_family = GRPC_AF_INET6;
141
141
  // Handle the RFC6874 syntax for IPv6 zone identifiers.
142
142
  char* host_end =
143
- static_cast<char*>(gpr_memrchr(host.get(), '%', strlen(host.get())));
143
+ static_cast<char*>(gpr_memrchr(host.c_str(), '%', host.size()));
144
144
  if (host_end != nullptr) {
145
- GPR_ASSERT(host_end >= host.get());
145
+ GPR_ASSERT(host_end >= host.c_str());
146
146
  char host_without_scope[GRPC_INET6_ADDRSTRLEN + 1];
147
- size_t host_without_scope_len = static_cast<size_t>(host_end - host.get());
147
+ size_t host_without_scope_len =
148
+ static_cast<size_t>(host_end - host.c_str());
148
149
  uint32_t sin6_scope_id = 0;
149
150
  if (host_without_scope_len > GRPC_INET6_ADDRSTRLEN) {
150
151
  if (log_errors) {
@@ -156,7 +157,7 @@ bool grpc_parse_ipv6_hostport(const char* hostport, grpc_resolved_address* addr,
156
157
  }
157
158
  goto done;
158
159
  }
159
- strncpy(host_without_scope, host.get(), host_without_scope_len);
160
+ strncpy(host_without_scope, host.c_str(), host_without_scope_len);
160
161
  host_without_scope[host_without_scope_len] = '\0';
161
162
  if (grpc_inet_pton(GRPC_AF_INET6, host_without_scope, &in6->sin6_addr) ==
162
163
  0) {
@@ -165,9 +166,9 @@ bool grpc_parse_ipv6_hostport(const char* hostport, grpc_resolved_address* addr,
165
166
  }
166
167
  goto done;
167
168
  }
168
- if (gpr_parse_bytes_to_uint32(
169
- host_end + 1, strlen(host.get()) - host_without_scope_len - 1,
170
- &sin6_scope_id) == 0) {
169
+ if (gpr_parse_bytes_to_uint32(host_end + 1,
170
+ host.size() - host_without_scope_len - 1,
171
+ &sin6_scope_id) == 0) {
171
172
  if ((sin6_scope_id = grpc_if_nametoindex(host_end + 1)) == 0) {
172
173
  gpr_log(GPR_ERROR,
173
174
  "Invalid interface name: '%s'. "
@@ -179,22 +180,22 @@ bool grpc_parse_ipv6_hostport(const char* hostport, grpc_resolved_address* addr,
179
180
  // Handle "sin6_scope_id" being type "u_long". See grpc issue #10027.
180
181
  in6->sin6_scope_id = sin6_scope_id;
181
182
  } else {
182
- if (grpc_inet_pton(GRPC_AF_INET6, host.get(), &in6->sin6_addr) == 0) {
183
+ if (grpc_inet_pton(GRPC_AF_INET6, host.c_str(), &in6->sin6_addr) == 0) {
183
184
  if (log_errors) {
184
- gpr_log(GPR_ERROR, "invalid ipv6 address: '%s'", host.get());
185
+ gpr_log(GPR_ERROR, "invalid ipv6 address: '%s'", host.c_str());
185
186
  }
186
187
  goto done;
187
188
  }
188
189
  }
189
190
  // Parse port.
190
- if (port == nullptr) {
191
+ if (port.empty()) {
191
192
  if (log_errors) gpr_log(GPR_ERROR, "no port given for ipv6 scheme");
192
193
  goto done;
193
194
  }
194
195
  int port_num;
195
- if (sscanf(port.get(), "%d", &port_num) != 1 || port_num < 0 ||
196
+ if (sscanf(port.c_str(), "%d", &port_num) != 1 || port_num < 0 ||
196
197
  port_num > 65535) {
197
- if (log_errors) gpr_log(GPR_ERROR, "invalid ipv6 port: '%s'", port.get());
198
+ if (log_errors) gpr_log(GPR_ERROR, "invalid ipv6 port: '%s'", port.c_str());
198
199
  goto done;
199
200
  }
200
201
  in6->sin6_port = grpc_htons(static_cast<uint16_t>(port_num));
@@ -19,7 +19,6 @@
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
21
  #include "src/core/ext/filters/client_channel/resolver.h"
22
- #include "src/core/lib/iomgr/combiner.h"
23
22
 
24
23
  grpc_core::DebugOnlyTraceFlag grpc_trace_resolver_refcount(false,
25
24
  "resolver_refcount");
@@ -30,13 +29,11 @@ namespace grpc_core {
30
29
  // Resolver
31
30
  //
32
31
 
33
- Resolver::Resolver(Combiner* combiner,
32
+ Resolver::Resolver(std::shared_ptr<WorkSerializer> work_serializer,
34
33
  std::unique_ptr<ResultHandler> result_handler)
35
34
  : InternallyRefCounted(&grpc_trace_resolver_refcount),
36
- result_handler_(std::move(result_handler)),
37
- combiner_(GRPC_COMBINER_REF(combiner, "resolver")) {}
38
-
39
- Resolver::~Resolver() { GRPC_COMBINER_UNREF(combiner_, "resolver"); }
35
+ work_serializer_(std::move(work_serializer)),
36
+ result_handler_(std::move(result_handler)) {}
40
37
 
41
38
  //
42
39
  // Resolver::Result
@@ -54,7 +51,7 @@ Resolver::Result::Result(const Result& other) {
54
51
  args = grpc_channel_args_copy(other.args);
55
52
  }
56
53
 
57
- Resolver::Result::Result(Result&& other) {
54
+ Resolver::Result::Result(Result&& other) noexcept {
58
55
  addresses = std::move(other.addresses);
59
56
  service_config = std::move(other.service_config);
60
57
  service_config_error = other.service_config_error;
@@ -73,7 +70,7 @@ Resolver::Result& Resolver::Result::operator=(const Result& other) {
73
70
  return *this;
74
71
  }
75
72
 
76
- Resolver::Result& Resolver::Result::operator=(Result&& other) {
73
+ Resolver::Result& Resolver::Result::operator=(Result&& other) noexcept {
77
74
  addresses = std::move(other.addresses);
78
75
  service_config = std::move(other.service_config);
79
76
  GRPC_ERROR_UNREF(service_config_error);
@@ -27,8 +27,8 @@
27
27
  #include "src/core/ext/filters/client_channel/service_config.h"
28
28
  #include "src/core/lib/gprpp/orphanable.h"
29
29
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
30
- #include "src/core/lib/iomgr/combiner.h"
31
30
  #include "src/core/lib/iomgr/iomgr.h"
31
+ #include "src/core/lib/iomgr/work_serializer.h"
32
32
 
33
33
  extern grpc_core::DebugOnlyTraceFlag grpc_trace_resolver_refcount;
34
34
 
@@ -45,7 +45,7 @@ namespace grpc_core {
45
45
  /// DNS).
46
46
  ///
47
47
  /// Note: All methods with a "Locked" suffix must be called from the
48
- /// combiner passed to the constructor.
48
+ /// work_serializer passed to the constructor.
49
49
  class Resolver : public InternallyRefCounted<Resolver> {
50
50
  public:
51
51
  /// Results returned by the resolver.
@@ -60,9 +60,9 @@ class Resolver : public InternallyRefCounted {
60
60
  Result() = default;
61
61
  ~Result();
62
62
  Result(const Result& other);
63
- Result(Result&& other);
63
+ Result(Result&& other) noexcept;
64
64
  Result& operator=(const Result& other);
65
- Result& operator=(Result&& other);
65
+ Result& operator=(Result&& other) noexcept;
66
66
  };
67
67
 
68
68
  /// A proxy object used by the resolver to return results to the
@@ -87,7 +87,7 @@ class Resolver : public InternallyRefCounted {
87
87
  // Not copyable nor movable.
88
88
  Resolver(const Resolver&) = delete;
89
89
  Resolver& operator=(const Resolver&) = delete;
90
- virtual ~Resolver();
90
+ virtual ~Resolver() = default;
91
91
 
92
92
  /// Starts resolving.
93
93
  virtual void StartLocked() = 0;
@@ -115,30 +115,28 @@ class Resolver : public InternallyRefCounted {
115
115
  /// implementations. At that point, this method can go away.
116
116
  virtual void ResetBackoffLocked() {}
117
117
 
118
- // Note: This must be invoked while holding the combiner.
118
+ // Note: This must be invoked while holding the work_serializer.
119
119
  void Orphan() override {
120
120
  ShutdownLocked();
121
121
  Unref();
122
122
  }
123
123
 
124
124
  protected:
125
- /// Does NOT take ownership of the reference to \a combiner.
126
- // TODO(roth): Once we have a C++-like interface for combiners, this
127
- // API should change to take a RefCountedPtr<>, so that we always take
128
- // ownership of a new ref.
129
- explicit Resolver(Combiner* combiner,
130
- std::unique_ptr<ResultHandler> result_handler);
125
+ Resolver(std::shared_ptr<WorkSerializer> work_serializer,
126
+ std::unique_ptr<ResultHandler> result_handler);
131
127
 
132
128
  /// Shuts down the resolver.
133
129
  virtual void ShutdownLocked() = 0;
134
130
 
135
- Combiner* combiner() const { return combiner_; }
131
+ std::shared_ptr<WorkSerializer> work_serializer() const {
132
+ return work_serializer_;
133
+ }
136
134
 
137
135
  ResultHandler* result_handler() const { return result_handler_.get(); }
138
136
 
139
137
  private:
138
+ std::shared_ptr<WorkSerializer> work_serializer_;
140
139
  std::unique_ptr<ResultHandler> result_handler_;
141
- Combiner* combiner_;
142
140
  };
143
141
 
144
142
  } // namespace grpc_core
@@ -24,12 +24,15 @@
24
24
  #include <stdio.h>
25
25
  #include <string.h>
26
26
 
27
+ #include "absl/container/inlined_vector.h"
28
+
27
29
  #include <grpc/support/alloc.h>
28
30
  #include <grpc/support/string_util.h>
29
31
 
30
32
  #include <address_sorting/address_sorting.h>
31
33
 
32
34
  #include "src/core/ext/filters/client_channel/http_connect_handshaker.h"
35
+ #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
33
36
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
34
37
  #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
35
38
  #include "src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h"
@@ -40,11 +43,11 @@
40
43
  #include "src/core/lib/channel/channel_args.h"
41
44
  #include "src/core/lib/gpr/string.h"
42
45
  #include "src/core/lib/gprpp/manual_constructor.h"
43
- #include "src/core/lib/iomgr/combiner.h"
44
46
  #include "src/core/lib/iomgr/gethostname.h"
45
47
  #include "src/core/lib/iomgr/iomgr_custom.h"
46
48
  #include "src/core/lib/iomgr/resolve_address.h"
47
49
  #include "src/core/lib/iomgr/timer.h"
50
+ #include "src/core/lib/iomgr/work_serializer.h"
48
51
  #include "src/core/lib/json/json.h"
49
52
 
50
53
  #define GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS 1
@@ -78,8 +81,8 @@ class AresDnsResolver : public Resolver {
78
81
 
79
82
  static void OnNextResolution(void* arg, grpc_error* error);
80
83
  static void OnResolved(void* arg, grpc_error* error);
81
- static void OnNextResolutionLocked(void* arg, grpc_error* error);
82
- static void OnResolvedLocked(void* arg, grpc_error* error);
84
+ void OnNextResolutionLocked(grpc_error* error);
85
+ void OnResolvedLocked(grpc_error* error);
83
86
 
84
87
  /// DNS server to use (if not system default)
85
88
  char* dns_server_;
@@ -91,7 +94,7 @@ class AresDnsResolver : public Resolver {
91
94
  bool request_service_config_;
92
95
  /// pollset_set to drive the name resolution process
93
96
  grpc_pollset_set* interested_parties_;
94
- /// closures used by the combiner
97
+ /// closures used by the work_serializer
95
98
  grpc_closure on_next_resolution_;
96
99
  grpc_closure on_resolved_;
97
100
  /// are we currently resolving?
@@ -107,8 +110,10 @@ class AresDnsResolver : public Resolver {
107
110
  grpc_millis last_resolution_timestamp_ = -1;
108
111
  /// retry backoff state
109
112
  BackOff backoff_;
110
- /// currently resolving addresses
113
+ /// currently resolving backend addresses
111
114
  std::unique_ptr<ServerAddressList> addresses_;
115
+ /// currently resolving balancer addresses
116
+ std::unique_ptr<ServerAddressList> balancer_addresses_;
112
117
  /// currently resolving service config
113
118
  char* service_config_json_ = nullptr;
114
119
  // has shutdown been initiated
@@ -120,7 +125,7 @@ class AresDnsResolver : public Resolver {
120
125
  };
121
126
 
122
127
  AresDnsResolver::AresDnsResolver(ResolverArgs args)
123
- : Resolver(args.combiner, std::move(args.result_handler)),
128
+ : Resolver(std::move(args.work_serializer), std::move(args.result_handler)),
124
129
  backoff_(
125
130
  BackOff::Options()
126
131
  .set_initial_backoff(GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS *
@@ -128,6 +133,10 @@ AresDnsResolver::AresDnsResolver(ResolverArgs args)
128
133
  .set_multiplier(GRPC_DNS_RECONNECT_BACKOFF_MULTIPLIER)
129
134
  .set_jitter(GRPC_DNS_RECONNECT_JITTER)
130
135
  .set_max_backoff(GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS * 1000)) {
136
+ // Closure Initialization
137
+ GRPC_CLOSURE_INIT(&on_next_resolution_, OnNextResolution, this,
138
+ grpc_schedule_on_exec_ctx);
139
+ GRPC_CLOSURE_INIT(&on_resolved_, OnResolved, this, grpc_schedule_on_exec_ctx);
131
140
  // Get name to resolve from URI path.
132
141
  const char* path = args.uri->path;
133
142
  if (path[0] == '/') ++path;
@@ -201,26 +210,26 @@ void AresDnsResolver::ShutdownLocked() {
201
210
 
202
211
  void AresDnsResolver::OnNextResolution(void* arg, grpc_error* error) {
203
212
  AresDnsResolver* r = static_cast<AresDnsResolver*>(arg);
204
- r->combiner()->Run(GRPC_CLOSURE_INIT(&r->on_next_resolution_,
205
- OnNextResolutionLocked, r, nullptr),
206
- GRPC_ERROR_REF(error));
213
+ GRPC_ERROR_REF(error); // ref owned by lambda
214
+ r->work_serializer()->Run([r, error]() { r->OnNextResolutionLocked(error); },
215
+ DEBUG_LOCATION);
207
216
  }
208
217
 
209
- void AresDnsResolver::OnNextResolutionLocked(void* arg, grpc_error* error) {
210
- AresDnsResolver* r = static_cast<AresDnsResolver*>(arg);
218
+ void AresDnsResolver::OnNextResolutionLocked(grpc_error* error) {
211
219
  GRPC_CARES_TRACE_LOG(
212
220
  "resolver:%p re-resolution timer fired. error: %s. shutdown_initiated_: "
213
221
  "%d",
214
- r, grpc_error_string(error), r->shutdown_initiated_);
215
- r->have_next_resolution_timer_ = false;
216
- if (error == GRPC_ERROR_NONE && !r->shutdown_initiated_) {
217
- if (!r->resolving_) {
222
+ this, grpc_error_string(error), shutdown_initiated_);
223
+ have_next_resolution_timer_ = false;
224
+ if (error == GRPC_ERROR_NONE && !shutdown_initiated_) {
225
+ if (!resolving_) {
218
226
  GRPC_CARES_TRACE_LOG(
219
- "resolver:%p start resolving due to re-resolution timer", r);
220
- r->StartResolvingLocked();
227
+ "resolver:%p start resolving due to re-resolution timer", this);
228
+ StartResolvingLocked();
221
229
  }
222
230
  }
223
- r->Unref(DEBUG_LOCATION, "next_resolution_timer");
231
+ Unref(DEBUG_LOCATION, "next_resolution_timer");
232
+ GRPC_ERROR_UNREF(error);
224
233
  }
225
234
 
226
235
  bool ValueInJsonArray(const Json::Array& array, const char* value) {
@@ -242,7 +251,7 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
242
251
  return "";
243
252
  }
244
253
  const Json* service_config = nullptr;
245
- InlinedVector<grpc_error*, 4> error_list;
254
+ absl::InlinedVector<grpc_error*, 4> error_list;
246
255
  for (const Json& choice : json.array_value()) {
247
256
  if (choice.type() != Json::Type::OBJECT) {
248
257
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -313,72 +322,79 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
313
322
 
314
323
  void AresDnsResolver::OnResolved(void* arg, grpc_error* error) {
315
324
  AresDnsResolver* r = static_cast<AresDnsResolver*>(arg);
316
- r->combiner()->Run(
317
- GRPC_CLOSURE_INIT(&r->on_resolved_, OnResolvedLocked, r, nullptr),
318
- GRPC_ERROR_REF(error));
325
+ GRPC_ERROR_REF(error); // ref owned by lambda
326
+ r->work_serializer()->Run([r, error]() { r->OnResolvedLocked(error); },
327
+ DEBUG_LOCATION);
319
328
  }
320
329
 
321
- void AresDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) {
322
- AresDnsResolver* r = static_cast<AresDnsResolver*>(arg);
323
- GPR_ASSERT(r->resolving_);
324
- r->resolving_ = false;
325
- gpr_free(r->pending_request_);
326
- r->pending_request_ = nullptr;
327
- if (r->shutdown_initiated_) {
328
- r->Unref(DEBUG_LOCATION, "OnResolvedLocked() shutdown");
330
+ void AresDnsResolver::OnResolvedLocked(grpc_error* error) {
331
+ GPR_ASSERT(resolving_);
332
+ resolving_ = false;
333
+ gpr_free(pending_request_);
334
+ pending_request_ = nullptr;
335
+ if (shutdown_initiated_) {
336
+ Unref(DEBUG_LOCATION, "OnResolvedLocked() shutdown");
337
+ GRPC_ERROR_UNREF(error);
329
338
  return;
330
339
  }
331
- if (r->addresses_ != nullptr) {
340
+ if (addresses_ != nullptr || balancer_addresses_ != nullptr) {
332
341
  Result result;
333
- result.addresses = std::move(*r->addresses_);
334
- if (r->service_config_json_ != nullptr) {
342
+ if (addresses_ != nullptr) {
343
+ result.addresses = std::move(*addresses_);
344
+ }
345
+ if (service_config_json_ != nullptr) {
335
346
  std::string service_config_string = ChooseServiceConfig(
336
- r->service_config_json_, &result.service_config_error);
337
- gpr_free(r->service_config_json_);
347
+ service_config_json_, &result.service_config_error);
348
+ gpr_free(service_config_json_);
338
349
  if (result.service_config_error == GRPC_ERROR_NONE &&
339
350
  !service_config_string.empty()) {
340
351
  GRPC_CARES_TRACE_LOG("resolver:%p selected service config choice: %s",
341
- r, service_config_string.c_str());
352
+ this, service_config_string.c_str());
342
353
  result.service_config = ServiceConfig::Create(
343
354
  service_config_string, &result.service_config_error);
344
355
  }
345
356
  }
346
- result.args = grpc_channel_args_copy(r->channel_args_);
347
- r->result_handler()->ReturnResult(std::move(result));
348
- r->addresses_.reset();
357
+ absl::InlinedVector<grpc_arg, 1> new_args;
358
+ if (balancer_addresses_ != nullptr) {
359
+ new_args.push_back(
360
+ CreateGrpclbBalancerAddressesArg(balancer_addresses_.get()));
361
+ }
362
+ result.args = grpc_channel_args_copy_and_add(channel_args_, new_args.data(),
363
+ new_args.size());
364
+ result_handler()->ReturnResult(std::move(result));
365
+ addresses_.reset();
366
+ balancer_addresses_.reset();
349
367
  // Reset backoff state so that we start from the beginning when the
350
368
  // next request gets triggered.
351
- r->backoff_.Reset();
369
+ backoff_.Reset();
352
370
  } else {
353
- GRPC_CARES_TRACE_LOG("resolver:%p dns resolution failed: %s", r,
371
+ GRPC_CARES_TRACE_LOG("resolver:%p dns resolution failed: %s", this,
354
372
  grpc_error_string(error));
355
- r->result_handler()->ReturnError(grpc_error_set_int(
373
+ result_handler()->ReturnError(grpc_error_set_int(
356
374
  GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
357
375
  "DNS resolution failed", &error, 1),
358
376
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
359
377
  // Set retry timer.
360
- grpc_millis next_try = r->backoff_.NextAttemptTime();
378
+ grpc_millis next_try = backoff_.NextAttemptTime();
361
379
  grpc_millis timeout = next_try - ExecCtx::Get()->Now();
362
380
  GRPC_CARES_TRACE_LOG("resolver:%p dns resolution failed (will retry): %s",
363
- r, grpc_error_string(error));
364
- GPR_ASSERT(!r->have_next_resolution_timer_);
365
- r->have_next_resolution_timer_ = true;
381
+ this, grpc_error_string(error));
382
+ GPR_ASSERT(!have_next_resolution_timer_);
383
+ have_next_resolution_timer_ = true;
366
384
  // TODO(roth): We currently deal with this ref manually. Once the
367
385
  // new closure API is done, find a way to track this ref with the timer
368
386
  // callback as part of the type system.
369
- r->Ref(DEBUG_LOCATION, "retry-timer").release();
387
+ Ref(DEBUG_LOCATION, "retry-timer").release();
370
388
  if (timeout > 0) {
371
389
  GRPC_CARES_TRACE_LOG("resolver:%p retrying in %" PRId64 " milliseconds",
372
- r, timeout);
390
+ this, timeout);
373
391
  } else {
374
- GRPC_CARES_TRACE_LOG("resolver:%p retrying immediately", r);
392
+ GRPC_CARES_TRACE_LOG("resolver:%p retrying immediately", this);
375
393
  }
376
- GRPC_CLOSURE_INIT(&r->on_next_resolution_, OnNextResolution, r,
377
- grpc_schedule_on_exec_ctx);
378
- grpc_timer_init(&r->next_resolution_timer_, next_try,
379
- &r->on_next_resolution_);
394
+ grpc_timer_init(&next_resolution_timer_, next_try, &on_next_resolution_);
380
395
  }
381
- r->Unref(DEBUG_LOCATION, "dns-resolving");
396
+ Unref(DEBUG_LOCATION, "dns-resolving");
397
+ GRPC_ERROR_UNREF(error);
382
398
  }
383
399
 
384
400
  void AresDnsResolver::MaybeStartResolvingLocked() {
@@ -402,8 +418,6 @@ void AresDnsResolver::MaybeStartResolvingLocked() {
402
418
  // new closure API is done, find a way to track this ref with the timer
403
419
  // callback as part of the type system.
404
420
  Ref(DEBUG_LOCATION, "next_resolution_timer_cooldown").release();
405
- GRPC_CLOSURE_INIT(&on_next_resolution_, OnNextResolution, this,
406
- grpc_schedule_on_exec_ctx);
407
421
  grpc_timer_init(&next_resolution_timer_,
408
422
  ExecCtx::Get()->Now() + ms_until_next_resolution,
409
423
  &on_next_resolution_);
@@ -421,12 +435,12 @@ void AresDnsResolver::StartResolvingLocked() {
421
435
  GPR_ASSERT(!resolving_);
422
436
  resolving_ = true;
423
437
  service_config_json_ = nullptr;
424
- GRPC_CLOSURE_INIT(&on_resolved_, OnResolved, this, grpc_schedule_on_exec_ctx);
425
438
  pending_request_ = grpc_dns_lookup_ares_locked(
426
439
  dns_server_, name_to_resolve_, kDefaultPort, interested_parties_,
427
- &on_resolved_, &addresses_, enable_srv_queries_ /* check_grpclb */,
440
+ &on_resolved_, &addresses_,
441
+ enable_srv_queries_ ? &balancer_addresses_ : nullptr,
428
442
  request_service_config_ ? &service_config_json_ : nullptr,
429
- query_timeout_ms_, combiner());
443
+ query_timeout_ms_, work_serializer());
430
444
  last_resolution_timestamp_ = grpc_core::ExecCtx::Get()->Now();
431
445
  GRPC_CARES_TRACE_LOG("resolver:%p Started resolving. pending_request_:%p",
432
446
  this, pending_request_);