grpc 1.18.0 → 1.22.0

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 (428) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +4731 -7404
  3. data/etc/roots.pem +146 -0
  4. data/include/grpc/grpc.h +11 -6
  5. data/include/grpc/grpc_security.h +297 -4
  6. data/include/grpc/grpc_security_constants.h +1 -1
  7. data/include/grpc/impl/codegen/byte_buffer.h +13 -0
  8. data/include/grpc/impl/codegen/gpr_types.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +30 -7
  10. data/include/grpc/impl/codegen/port_platform.h +88 -7
  11. data/include/grpc/impl/codegen/slice.h +2 -22
  12. data/include/grpc/impl/codegen/status.h +2 -1
  13. data/include/grpc/impl/codegen/sync_posix.h +18 -0
  14. data/include/grpc/slice.h +3 -3
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +21 -16
  16. data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +3 -1
  18. data/src/core/ext/filters/client_channel/client_channel.cc +2435 -1557
  19. data/src/core/ext/filters/client_channel/client_channel.h +2 -10
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -89
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +8 -33
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +19 -38
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -11
  25. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
  26. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
  27. data/src/core/ext/filters/client_channel/health/health_check_client.cc +59 -55
  28. data/src/core/ext/filters/client_channel/health/health_check_client.h +20 -9
  29. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +146 -157
  30. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +29 -32
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +844 -859
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +3 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -6
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +6 -2
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +14 -12
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +16 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
  39. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +185 -312
  40. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +143 -375
  41. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +192 -245
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +1554 -955
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -43
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +14 -10
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +2 -2
  46. data/src/core/ext/filters/client_channel/lb_policy.cc +115 -22
  47. data/src/core/ext/filters/client_channel/lb_policy.h +260 -129
  48. data/src/core/ext/filters/client_channel/lb_policy_factory.h +5 -2
  49. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +107 -4
  50. data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -3
  51. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
  52. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +56 -0
  53. data/src/core/ext/filters/client_channel/parse_address.cc +24 -5
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +121 -122
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +84 -2
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +179 -0
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -10
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +111 -47
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +7 -13
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +39 -0
  63. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +0 -6
  64. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -64
  65. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
  66. data/src/core/{lib/iomgr/network_status_tracker.cc → ext/filters/client_channel/resolver/dns/dns_resolver_selection.h} +8 -15
  67. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +36 -82
  68. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +111 -72
  69. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +13 -8
  70. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +28 -63
  71. data/src/core/ext/filters/client_channel/resolver.cc +54 -1
  72. data/src/core/ext/filters/client_channel/resolver.h +52 -23
  73. data/src/core/ext/filters/client_channel/resolver_factory.h +3 -1
  74. data/src/core/ext/filters/client_channel/resolver_registry.cc +5 -2
  75. data/src/core/ext/filters/client_channel/resolver_registry.h +5 -4
  76. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +368 -241
  77. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +58 -76
  78. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +543 -0
  79. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +139 -0
  80. data/src/core/ext/filters/client_channel/server_address.cc +4 -54
  81. data/src/core/ext/filters/client_channel/server_address.h +1 -13
  82. data/src/core/ext/filters/client_channel/service_config.cc +329 -0
  83. data/src/core/ext/filters/client_channel/service_config.h +205 -0
  84. data/src/core/ext/filters/client_channel/subchannel.cc +803 -838
  85. data/src/core/ext/filters/client_channel/subchannel.h +295 -128
  86. data/src/core/ext/filters/client_channel/subchannel_interface.h +113 -0
  87. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
  88. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +94 -0
  89. data/src/core/ext/filters/deadline/deadline_filter.cc +3 -4
  90. data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
  91. data/src/core/ext/filters/http/client/http_client_filter.cc +7 -5
  92. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  93. data/src/core/ext/filters/http/client_authority_filter.cc +6 -3
  94. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +4 -3
  95. data/src/core/ext/filters/http/server/http_server_filter.cc +18 -12
  96. data/src/core/ext/filters/max_age/max_age_filter.cc +5 -2
  97. data/src/core/ext/filters/message_size/message_size_filter.cc +119 -77
  98. data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
  99. data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
  100. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +13 -12
  101. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +45 -47
  102. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +134 -143
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +68 -21
  104. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
  105. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
  106. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +7 -6
  107. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
  108. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
  109. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +156 -94
  110. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
  111. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
  112. data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -37
  113. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  114. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -2
  116. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -4
  117. data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -1
  118. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +8 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
  120. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -4
  121. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  122. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -1
  124. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +74 -55
  125. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +33 -11
  126. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -2
  127. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +7 -14
  128. data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -1
  129. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +9 -5
  130. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +9 -3
  131. data/src/core/ext/transport/chttp2/transport/internal.h +43 -30
  132. data/src/core/ext/transport/chttp2/transport/parsing.cc +52 -70
  133. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
  134. data/src/core/ext/transport/chttp2/transport/writing.cc +70 -33
  135. data/src/core/ext/transport/inproc/inproc_transport.cc +26 -18
  136. data/src/core/lib/channel/channel_args.cc +2 -101
  137. data/src/core/lib/channel/channel_args.h +3 -37
  138. data/src/core/lib/channel/channel_stack.h +10 -6
  139. data/src/core/lib/channel/channel_trace.cc +4 -4
  140. data/src/core/lib/channel/channel_trace.h +4 -4
  141. data/src/core/lib/channel/channelz.cc +168 -38
  142. data/src/core/lib/channel/channelz.h +40 -44
  143. data/src/core/lib/channel/channelz_registry.cc +75 -107
  144. data/src/core/lib/channel/channelz_registry.h +10 -28
  145. data/src/core/lib/channel/connected_channel.cc +2 -2
  146. data/src/core/lib/channel/context.h +2 -2
  147. data/src/core/lib/channel/handshaker.cc +151 -218
  148. data/src/core/lib/channel/handshaker.h +110 -101
  149. data/src/core/lib/channel/handshaker_factory.h +11 -19
  150. data/src/core/lib/channel/handshaker_registry.cc +67 -51
  151. data/src/core/lib/channel/handshaker_registry.h +21 -16
  152. data/src/core/lib/compression/algorithm_metadata.h +3 -3
  153. data/src/core/lib/compression/compression.cc +14 -9
  154. data/src/core/lib/compression/compression_args.cc +127 -0
  155. data/src/core/lib/compression/compression_args.h +55 -0
  156. data/src/core/lib/compression/compression_internal.cc +16 -12
  157. data/src/core/lib/compression/compression_internal.h +1 -1
  158. data/src/core/lib/compression/stream_compression.cc +3 -2
  159. data/src/core/lib/compression/stream_compression.h +2 -2
  160. data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
  161. data/src/core/lib/debug/trace.cc +13 -7
  162. data/src/core/lib/debug/trace.h +14 -1
  163. data/src/core/lib/gpr/arena.h +13 -9
  164. data/src/core/lib/gpr/cpu_posix.cc +5 -3
  165. data/src/core/lib/gpr/env.h +3 -6
  166. data/src/core/lib/gpr/env_linux.cc +6 -1
  167. data/src/core/lib/gpr/env_posix.cc +5 -0
  168. data/src/core/lib/gpr/env_windows.cc +7 -5
  169. data/src/core/lib/gpr/log.cc +9 -13
  170. data/src/core/lib/gpr/log_posix.cc +2 -1
  171. data/src/core/lib/gpr/string.cc +20 -7
  172. data/src/core/lib/gpr/string.h +10 -3
  173. data/src/core/lib/gpr/sync_posix.cc +65 -4
  174. data/src/core/lib/gpr/time.cc +8 -0
  175. data/src/core/lib/gpr/time_posix.cc +21 -2
  176. data/src/core/lib/gprpp/arena.cc +103 -0
  177. data/src/core/lib/gprpp/arena.h +121 -0
  178. data/src/core/lib/gprpp/atomic.h +75 -5
  179. data/src/core/lib/gprpp/fork.cc +13 -32
  180. data/src/core/lib/gprpp/fork.h +5 -1
  181. data/src/core/lib/gprpp/global_config.h +96 -0
  182. data/src/core/lib/gprpp/global_config_custom.h +29 -0
  183. data/src/core/lib/gprpp/global_config_env.cc +135 -0
  184. data/src/core/lib/gprpp/global_config_env.h +131 -0
  185. data/src/core/lib/gprpp/global_config_generic.h +44 -0
  186. data/src/core/lib/gprpp/inlined_vector.h +8 -0
  187. data/src/core/lib/gprpp/map.h +436 -0
  188. data/src/core/lib/gprpp/memory.h +2 -2
  189. data/src/core/lib/gprpp/optional.h +48 -0
  190. data/src/core/lib/gprpp/orphanable.h +6 -5
  191. data/src/core/lib/gprpp/{mutex_lock.h → pair.h} +15 -19
  192. data/src/core/lib/gprpp/ref_counted.h +36 -17
  193. data/src/core/lib/gprpp/sync.h +126 -0
  194. data/src/core/lib/gprpp/thd.h +42 -7
  195. data/src/core/lib/gprpp/thd_posix.cc +31 -13
  196. data/src/core/lib/gprpp/thd_windows.cc +47 -34
  197. data/src/core/lib/http/httpcli.cc +6 -5
  198. data/src/core/lib/http/httpcli_security_connector.cc +13 -15
  199. data/src/core/lib/http/parser.cc +3 -2
  200. data/src/core/lib/http/parser.h +2 -1
  201. data/src/core/lib/iomgr/buffer_list.cc +182 -24
  202. data/src/core/lib/iomgr/buffer_list.h +72 -10
  203. data/src/core/lib/iomgr/call_combiner.cc +84 -90
  204. data/src/core/lib/iomgr/call_combiner.h +75 -82
  205. data/src/core/lib/iomgr/cfstream_handle.cc +203 -0
  206. data/src/core/lib/iomgr/cfstream_handle.h +86 -0
  207. data/src/core/lib/iomgr/combiner.cc +11 -3
  208. data/src/core/lib/iomgr/combiner.h +1 -1
  209. data/src/core/lib/iomgr/endpoint.cc +2 -2
  210. data/src/core/lib/iomgr/endpoint.h +3 -2
  211. data/src/core/lib/iomgr/endpoint_cfstream.cc +375 -0
  212. data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
  213. data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
  214. data/src/core/lib/iomgr/error.cc +21 -17
  215. data/src/core/lib/iomgr/error.h +36 -6
  216. data/src/core/lib/iomgr/error_cfstream.cc +52 -0
  217. data/src/core/lib/iomgr/error_cfstream.h +31 -0
  218. data/src/core/lib/iomgr/error_internal.h +1 -1
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +44 -28
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +173 -194
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +16 -487
  222. data/src/core/lib/iomgr/ev_posix.cc +29 -19
  223. data/src/core/lib/iomgr/ev_posix.h +19 -3
  224. data/src/core/lib/iomgr/ev_windows.cc +2 -2
  225. data/src/core/lib/iomgr/exec_ctx.cc +1 -0
  226. data/src/core/lib/iomgr/exec_ctx.h +137 -8
  227. data/src/core/lib/iomgr/executor.cc +147 -95
  228. data/src/core/lib/iomgr/executor.h +55 -49
  229. data/src/core/lib/iomgr/fork_posix.cc +6 -5
  230. data/src/core/lib/{gprpp/atomic_with_std.h → iomgr/grpc_if_nametoindex.h} +8 -13
  231. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
  232. data/src/core/lib/iomgr/{network_status_tracker.h → grpc_if_nametoindex_unsupported.cc} +15 -9
  233. data/src/core/lib/iomgr/internal_errqueue.cc +3 -5
  234. data/src/core/lib/iomgr/internal_errqueue.h +105 -3
  235. data/src/core/lib/iomgr/iomgr.cc +20 -13
  236. data/src/core/lib/iomgr/iomgr.h +15 -0
  237. data/src/core/lib/iomgr/iomgr_custom.cc +17 -3
  238. data/src/core/lib/iomgr/iomgr_custom.h +2 -0
  239. data/src/core/lib/iomgr/iomgr_internal.cc +10 -0
  240. data/src/core/lib/iomgr/iomgr_internal.h +12 -0
  241. data/src/core/lib/iomgr/iomgr_posix.cc +19 -2
  242. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +93 -0
  243. data/src/core/lib/iomgr/iomgr_windows.cc +18 -2
  244. data/src/core/lib/iomgr/lockfree_event.cc +4 -4
  245. data/src/core/lib/iomgr/port.h +35 -0
  246. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
  247. data/src/core/lib/iomgr/resolve_address_windows.cc +2 -1
  248. data/src/core/lib/iomgr/resource_quota.cc +40 -37
  249. data/src/core/lib/iomgr/socket_utils_common_posix.cc +6 -2
  250. data/src/core/lib/iomgr/socket_windows.cc +19 -0
  251. data/src/core/lib/iomgr/socket_windows.h +8 -0
  252. data/src/core/lib/iomgr/tcp_client_cfstream.cc +216 -0
  253. data/src/core/lib/iomgr/tcp_client_custom.cc +2 -2
  254. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  255. data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
  256. data/src/core/lib/iomgr/tcp_custom.cc +10 -14
  257. data/src/core/lib/iomgr/tcp_posix.cc +256 -140
  258. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  259. data/src/core/lib/iomgr/tcp_server.h +24 -0
  260. data/src/core/lib/iomgr/tcp_server_custom.cc +14 -12
  261. data/src/core/lib/iomgr/tcp_server_posix.cc +86 -12
  262. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
  263. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -11
  264. data/src/core/lib/iomgr/tcp_uv.cc +5 -7
  265. data/src/core/lib/iomgr/tcp_windows.cc +8 -14
  266. data/src/core/lib/iomgr/timer.h +2 -1
  267. data/src/core/lib/iomgr/timer_generic.cc +16 -16
  268. data/src/core/lib/iomgr/timer_manager.cc +20 -11
  269. data/src/core/lib/iomgr/udp_server.cc +8 -6
  270. data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
  271. data/src/core/lib/json/json.cc +1 -4
  272. data/src/core/lib/profiling/basic_timers.cc +10 -4
  273. data/src/core/lib/security/context/security_context.cc +6 -7
  274. data/src/core/lib/security/context/security_context.h +3 -4
  275. data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -1
  276. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  277. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -0
  278. data/src/core/lib/security/credentials/credentials.h +9 -1
  279. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -3
  280. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -0
  281. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  282. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +2 -1
  283. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +10 -6
  284. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -1
  285. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +3 -3
  286. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +9 -8
  287. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -2
  288. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
  289. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +192 -0
  290. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +210 -0
  291. data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +129 -0
  292. data/src/core/lib/security/credentials/tls/spiffe_credentials.h +62 -0
  293. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -8
  294. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -12
  295. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +7 -5
  296. data/src/core/lib/security/security_connector/local/local_security_connector.cc +10 -8
  297. data/src/core/lib/security/security_connector/security_connector.cc +0 -1
  298. data/src/core/lib/security/security_connector/security_connector.h +3 -3
  299. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -38
  300. data/src/core/lib/security/security_connector/ssl_utils.cc +164 -26
  301. data/src/core/lib/security/security_connector/ssl_utils.h +70 -1
  302. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +426 -0
  303. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +122 -0
  304. data/src/core/lib/security/transport/auth_filters.h +5 -2
  305. data/src/core/lib/security/transport/client_auth_filter.cc +55 -50
  306. data/src/core/lib/security/transport/secure_endpoint.cc +6 -6
  307. data/src/core/lib/security/transport/security_handshaker.cc +271 -303
  308. data/src/core/lib/security/transport/security_handshaker.h +11 -2
  309. data/src/core/lib/security/transport/server_auth_filter.cc +3 -3
  310. data/src/core/lib/slice/b64.h +2 -2
  311. data/src/core/lib/slice/percent_encoding.cc +3 -3
  312. data/src/core/lib/slice/percent_encoding.h +3 -3
  313. data/src/core/lib/slice/slice.cc +174 -122
  314. data/src/core/lib/slice/slice_buffer.cc +54 -21
  315. data/src/core/lib/slice/slice_hash_table.h +4 -4
  316. data/src/core/lib/slice/slice_intern.cc +49 -107
  317. data/src/core/lib/slice/slice_internal.h +264 -3
  318. data/src/core/lib/slice/slice_string_helpers.cc +10 -1
  319. data/src/core/lib/slice/slice_string_helpers.h +3 -1
  320. data/src/core/lib/slice/slice_utils.h +50 -0
  321. data/src/core/lib/slice/slice_weak_hash_table.h +6 -6
  322. data/src/core/lib/surface/api_trace.h +1 -1
  323. data/src/core/lib/surface/byte_buffer_reader.cc +17 -0
  324. data/src/core/lib/surface/call.cc +67 -46
  325. data/src/core/lib/surface/call.h +7 -2
  326. data/src/core/lib/surface/call_details.cc +0 -1
  327. data/src/core/lib/surface/channel.cc +89 -97
  328. data/src/core/lib/surface/channel.h +60 -6
  329. data/src/core/lib/surface/channel_init.h +5 -0
  330. data/src/core/lib/surface/completion_queue.cc +221 -216
  331. data/src/core/lib/surface/completion_queue.h +2 -1
  332. data/src/core/lib/surface/init.cc +82 -33
  333. data/src/core/lib/surface/init.h +1 -0
  334. data/src/core/lib/surface/init_secure.cc +1 -1
  335. data/src/core/lib/surface/lame_client.cc +5 -7
  336. data/src/core/lib/surface/server.cc +42 -47
  337. data/src/core/lib/surface/validate_metadata.cc +14 -8
  338. data/src/core/lib/surface/validate_metadata.h +13 -2
  339. data/src/core/lib/surface/version.cc +1 -1
  340. data/src/core/lib/transport/bdp_estimator.cc +3 -3
  341. data/src/core/lib/transport/bdp_estimator.h +2 -2
  342. data/src/core/lib/transport/connectivity_state.cc +10 -40
  343. data/src/core/lib/transport/connectivity_state.h +0 -8
  344. data/src/core/lib/transport/error_utils.cc +12 -0
  345. data/src/core/lib/transport/metadata.cc +258 -267
  346. data/src/core/lib/transport/metadata.h +227 -16
  347. data/src/core/lib/transport/metadata_batch.cc +1 -1
  348. data/src/core/lib/transport/metadata_batch.h +1 -1
  349. data/src/core/lib/transport/static_metadata.cc +477 -399
  350. data/src/core/lib/transport/static_metadata.h +273 -182
  351. data/src/core/lib/transport/status_metadata.cc +3 -3
  352. data/src/core/lib/transport/timeout_encoding.cc +1 -1
  353. data/src/core/lib/transport/timeout_encoding.h +1 -1
  354. data/src/core/lib/transport/transport.cc +39 -72
  355. data/src/core/lib/transport/transport.h +59 -24
  356. data/src/core/lib/transport/transport_impl.h +1 -1
  357. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  358. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  359. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
  360. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +4 -3
  361. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  362. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -1
  363. data/src/core/tsi/fake_transport_security.cc +4 -4
  364. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
  365. data/src/core/tsi/ssl_transport_security.cc +12 -10
  366. data/src/core/tsi/ssl_transport_security.h +24 -4
  367. data/src/ruby/bin/math_pb.rb +18 -16
  368. data/src/ruby/ext/grpc/extconf.rb +12 -4
  369. data/src/ruby/ext/grpc/rb_call_credentials.c +8 -5
  370. data/src/ruby/ext/grpc/rb_channel.c +14 -10
  371. data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
  372. data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
  373. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  374. data/src/ruby/ext/grpc/rb_grpc.c +23 -24
  375. data/src/ruby/ext/grpc/rb_grpc.h +4 -2
  376. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
  377. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -0
  378. data/src/ruby/ext/grpc/rb_server.c +8 -4
  379. data/src/ruby/lib/grpc/errors.rb +22 -3
  380. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  381. data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
  382. data/src/ruby/lib/grpc/version.rb +1 -1
  383. data/src/ruby/pb/README.md +1 -1
  384. data/src/ruby/pb/grpc/health/v1/health_pb.rb +13 -10
  385. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
  386. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +3 -1
  387. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +58 -56
  388. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
  389. data/src/ruby/spec/errors_spec.rb +141 -0
  390. data/third_party/cares/cares/ares.h +12 -0
  391. data/third_party/cares/cares/ares_create_query.c +5 -1
  392. data/third_party/cares/cares/ares_data.c +74 -73
  393. data/third_party/cares/cares/ares_destroy.c +6 -1
  394. data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
  395. data/third_party/cares/cares/ares_gethostbyname.c +15 -4
  396. data/third_party/cares/cares/ares_getnameinfo.c +11 -0
  397. data/third_party/cares/cares/ares_init.c +274 -173
  398. data/third_party/cares/cares/ares_library_init.c +21 -3
  399. data/third_party/cares/cares/ares_options.c +6 -2
  400. data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
  401. data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
  402. data/third_party/cares/cares/ares_platform.c +7 -0
  403. data/third_party/cares/cares/ares_private.h +19 -11
  404. data/third_party/cares/cares/ares_process.c +27 -2
  405. data/third_party/cares/cares/ares_rules.h +1 -1
  406. data/third_party/cares/cares/ares_search.c +7 -0
  407. data/third_party/cares/cares/ares_send.c +6 -0
  408. data/third_party/cares/cares/ares_strsplit.c +174 -0
  409. data/third_party/cares/cares/ares_strsplit.h +43 -0
  410. data/third_party/cares/cares/ares_version.h +4 -4
  411. data/third_party/cares/cares/config-win32.h +1 -1
  412. data/third_party/cares/cares/inet_ntop.c +2 -3
  413. data/third_party/cares/config_darwin/ares_config.h +3 -0
  414. data/third_party/cares/config_freebsd/ares_config.h +3 -0
  415. data/third_party/cares/config_linux/ares_config.h +3 -0
  416. data/third_party/cares/config_openbsd/ares_config.h +3 -0
  417. metadata +83 -48
  418. data/src/core/ext/filters/client_channel/request_routing.cc +0 -936
  419. data/src/core/ext/filters/client_channel/request_routing.h +0 -177
  420. data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -248
  421. data/src/core/ext/filters/client_channel/subchannel_index.h +0 -76
  422. data/src/core/lib/channel/handshaker_factory.cc +0 -42
  423. data/src/core/lib/gpr/arena.cc +0 -192
  424. data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
  425. data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
  426. data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
  427. data/src/core/lib/transport/service_config.cc +0 -106
  428. data/src/core/lib/transport/service_config.h +0 -249
@@ -0,0 +1,39 @@
1
+ /*
2
+ *
3
+ * Copyright 2016 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/lib/iomgr/port.h"
22
+ #if GRPC_ARES == 1 && defined(GRPC_UV)
23
+
24
+ #include <grpc/support/string_util.h>
25
+
26
+ #include "src/core/ext/filters/client_channel/parse_address.h"
27
+ #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
28
+ #include "src/core/ext/filters/client_channel/server_address.h"
29
+ #include "src/core/lib/gpr/host_port.h"
30
+ #include "src/core/lib/gpr/string.h"
31
+
32
+ bool grpc_ares_query_ipv6() {
33
+ /* The libuv grpc code currently does not have the code to probe for this,
34
+ * so we assume for now that IPv6 is always available in contexts where this
35
+ * code will be used. */
36
+ return true;
37
+ }
38
+
39
+ #endif /* GRPC_ARES == 1 && defined(GRPC_UV) */
@@ -26,10 +26,4 @@
26
26
 
27
27
  bool grpc_ares_query_ipv6() { return grpc_ipv6_loopback_available(); }
28
28
 
29
- bool grpc_ares_maybe_resolve_localhost_manually_locked(
30
- const char* name, const char* default_port,
31
- grpc_core::UniquePtr<grpc_core::ServerAddressList>* addrs) {
32
- return false;
33
- }
34
-
35
29
  #endif /* GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER) */
@@ -19,7 +19,7 @@
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
21
  #include "src/core/lib/iomgr/port.h"
22
- #if GRPC_ARES == 1 && defined(GPR_WINDOWS)
22
+ #if GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)
23
23
 
24
24
  #include <grpc/support/string_util.h>
25
25
 
@@ -32,66 +32,4 @@
32
32
 
33
33
  bool grpc_ares_query_ipv6() { return grpc_ipv6_loopback_available(); }
34
34
 
35
- static bool inner_maybe_resolve_localhost_manually_locked(
36
- const char* name, const char* default_port,
37
- grpc_core::UniquePtr<grpc_core::ServerAddressList>* addrs, char** host,
38
- char** port) {
39
- gpr_split_host_port(name, host, port);
40
- if (*host == nullptr) {
41
- gpr_log(GPR_ERROR,
42
- "Failed to parse %s into host:port during Windows localhost "
43
- "resolution check.",
44
- name);
45
- return false;
46
- }
47
- if (*port == nullptr) {
48
- if (default_port == nullptr) {
49
- gpr_log(GPR_ERROR,
50
- "No port or default port for %s during Windows localhost "
51
- "resolution check.",
52
- name);
53
- return false;
54
- }
55
- *port = gpr_strdup(default_port);
56
- }
57
- if (gpr_stricmp(*host, "localhost") == 0) {
58
- GPR_ASSERT(*addrs == nullptr);
59
- *addrs = grpc_core::MakeUnique<grpc_core::ServerAddressList>();
60
- uint16_t numeric_port = grpc_strhtons(*port);
61
- // Append the ipv6 loopback address.
62
- struct sockaddr_in6 ipv6_loopback_addr;
63
- memset(&ipv6_loopback_addr, 0, sizeof(ipv6_loopback_addr));
64
- ((char*)&ipv6_loopback_addr.sin6_addr)[15] = 1;
65
- ipv6_loopback_addr.sin6_family = AF_INET6;
66
- ipv6_loopback_addr.sin6_port = numeric_port;
67
- (*addrs)->emplace_back(&ipv6_loopback_addr, sizeof(ipv6_loopback_addr),
68
- nullptr /* args */);
69
- // Append the ipv4 loopback address.
70
- struct sockaddr_in ipv4_loopback_addr;
71
- memset(&ipv4_loopback_addr, 0, sizeof(ipv4_loopback_addr));
72
- ((char*)&ipv4_loopback_addr.sin_addr)[0] = 0x7f;
73
- ((char*)&ipv4_loopback_addr.sin_addr)[3] = 0x01;
74
- ipv4_loopback_addr.sin_family = AF_INET;
75
- ipv4_loopback_addr.sin_port = numeric_port;
76
- (*addrs)->emplace_back(&ipv4_loopback_addr, sizeof(ipv4_loopback_addr),
77
- nullptr /* args */);
78
- // Let the address sorter figure out which one should be tried first.
79
- grpc_cares_wrapper_address_sorting_sort(addrs->get());
80
- return true;
81
- }
82
- return false;
83
- }
84
-
85
- bool grpc_ares_maybe_resolve_localhost_manually_locked(
86
- const char* name, const char* default_port,
87
- grpc_core::UniquePtr<grpc_core::ServerAddressList>* addrs) {
88
- char* host = nullptr;
89
- char* port = nullptr;
90
- bool out = inner_maybe_resolve_localhost_manually_locked(name, default_port,
91
- addrs, &host, &port);
92
- gpr_free(host);
93
- gpr_free(port);
94
- return out;
95
- }
96
-
97
- #endif /* GRPC_ARES == 1 && defined(GPR_WINDOWS) */
35
+ #endif /* GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER) */
@@ -0,0 +1,28 @@
1
+ //
2
+ // Copyright 2019 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ // This is similar to the sockaddr resolver, except that it supports a
18
+ // bunch of query args that are useful for dependency injection in tests.
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include "src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h"
23
+
24
+ GPR_GLOBAL_CONFIG_DEFINE_STRING(
25
+ grpc_dns_resolver, "",
26
+ "Declares which DNS resolver to use. The default is ares if gRPC is built "
27
+ "with c-ares support. Otherwise, the value of this environment variable is "
28
+ "ignored.")
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  *
3
- * Copyright 2015 gRPC authors.
3
+ * Copyright 2019 gRPC authors.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
6
6
  * you may not use this file except in compliance with the License.
@@ -16,21 +16,14 @@
16
16
  *
17
17
  */
18
18
 
19
- #include <grpc/support/port_platform.h>
20
-
21
- #include "src/core/lib/iomgr/endpoint.h"
22
- #include "src/core/lib/iomgr/network_status_tracker.h"
23
-
24
- void grpc_network_status_shutdown(void) {}
19
+ #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_DNS_DNS_RESOLVER_SELECTION_H
20
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_DNS_DNS_RESOLVER_SELECTION_H
25
21
 
26
- void grpc_network_status_init(void) {
27
- // TODO(makarandd): Install callback with OS to monitor network status.
28
- }
29
-
30
- void grpc_destroy_network_status_monitor() {}
22
+ #include <grpc/support/port_platform.h>
31
23
 
32
- void grpc_network_status_register_endpoint(grpc_endpoint* ep) { (void)ep; }
24
+ #include "src/core/lib/gprpp/global_config.h"
33
25
 
34
- void grpc_network_status_unregister_endpoint(grpc_endpoint* ep) { (void)ep; }
26
+ GPR_GLOBAL_CONFIG_DECLARE_STRING(grpc_dns_resolver);
35
27
 
36
- void grpc_network_status_shutdown_all_endpoints() {}
28
+ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_DNS_DNS_RESOLVER_SELECTION_H \
29
+ */
@@ -26,11 +26,11 @@
26
26
  #include <grpc/support/string_util.h>
27
27
  #include <grpc/support/time.h>
28
28
 
29
+ #include "src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h"
29
30
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
30
31
  #include "src/core/ext/filters/client_channel/server_address.h"
31
32
  #include "src/core/lib/backoff/backoff.h"
32
33
  #include "src/core/lib/channel/channel_args.h"
33
- #include "src/core/lib/gpr/env.h"
34
34
  #include "src/core/lib/gpr/host_port.h"
35
35
  #include "src/core/lib/gpr/string.h"
36
36
  #include "src/core/lib/gprpp/manual_constructor.h"
@@ -51,10 +51,9 @@ const char kDefaultPort[] = "https";
51
51
 
52
52
  class NativeDnsResolver : public Resolver {
53
53
  public:
54
- explicit NativeDnsResolver(const ResolverArgs& args);
54
+ explicit NativeDnsResolver(ResolverArgs args);
55
55
 
56
- void NextLocked(grpc_channel_args** result,
57
- grpc_closure* on_complete) override;
56
+ void StartLocked() override;
58
57
 
59
58
  void RequestReresolutionLocked() override;
60
59
 
@@ -67,7 +66,6 @@ class NativeDnsResolver : public Resolver {
67
66
 
68
67
  void MaybeStartResolvingLocked();
69
68
  void StartResolvingLocked();
70
- void MaybeFinishNextLocked();
71
69
 
72
70
  static void OnNextResolutionLocked(void* arg, grpc_error* error);
73
71
  static void OnResolvedLocked(void* arg, grpc_error* error);
@@ -78,19 +76,11 @@ class NativeDnsResolver : public Resolver {
78
76
  grpc_channel_args* channel_args_ = nullptr;
79
77
  /// pollset_set to drive the name resolution process
80
78
  grpc_pollset_set* interested_parties_ = nullptr;
79
+ /// are we shutting down?
80
+ bool shutdown_ = false;
81
81
  /// are we currently resolving?
82
82
  bool resolving_ = false;
83
83
  grpc_closure on_resolved_;
84
- /// which version of the result have we published?
85
- int published_version_ = 0;
86
- /// which version of the result is current?
87
- int resolved_version_ = 0;
88
- /// pending next completion, or nullptr
89
- grpc_closure* next_completion_ = nullptr;
90
- /// target result address for next completion
91
- grpc_channel_args** target_result_ = nullptr;
92
- /// current (fully resolved) result
93
- grpc_channel_args* resolved_result_ = nullptr;
94
84
  /// next resolution timer
95
85
  bool have_next_resolution_timer_ = false;
96
86
  grpc_timer next_resolution_timer_;
@@ -105,8 +95,8 @@ class NativeDnsResolver : public Resolver {
105
95
  grpc_resolved_addresses* addresses_ = nullptr;
106
96
  };
107
97
 
108
- NativeDnsResolver::NativeDnsResolver(const ResolverArgs& args)
109
- : Resolver(args.combiner),
98
+ NativeDnsResolver::NativeDnsResolver(ResolverArgs args)
99
+ : Resolver(args.combiner, std::move(args.result_handler)),
110
100
  backoff_(
111
101
  BackOff::Options()
112
102
  .set_initial_backoff(GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS *
@@ -134,25 +124,12 @@ NativeDnsResolver::NativeDnsResolver(const ResolverArgs& args)
134
124
  }
135
125
 
136
126
  NativeDnsResolver::~NativeDnsResolver() {
137
- if (resolved_result_ != nullptr) {
138
- grpc_channel_args_destroy(resolved_result_);
139
- }
127
+ grpc_channel_args_destroy(channel_args_);
140
128
  grpc_pollset_set_destroy(interested_parties_);
141
129
  gpr_free(name_to_resolve_);
142
- grpc_channel_args_destroy(channel_args_);
143
130
  }
144
131
 
145
- void NativeDnsResolver::NextLocked(grpc_channel_args** result,
146
- grpc_closure* on_complete) {
147
- GPR_ASSERT(next_completion_ == nullptr);
148
- next_completion_ = on_complete;
149
- target_result_ = result;
150
- if (resolved_version_ == 0 && !resolving_) {
151
- MaybeStartResolvingLocked();
152
- } else {
153
- MaybeFinishNextLocked();
154
- }
155
- }
132
+ void NativeDnsResolver::StartLocked() { MaybeStartResolvingLocked(); }
156
133
 
157
134
  void NativeDnsResolver::RequestReresolutionLocked() {
158
135
  if (!resolving_) {
@@ -168,15 +145,10 @@ void NativeDnsResolver::ResetBackoffLocked() {
168
145
  }
169
146
 
170
147
  void NativeDnsResolver::ShutdownLocked() {
148
+ shutdown_ = true;
171
149
  if (have_next_resolution_timer_) {
172
150
  grpc_timer_cancel(&next_resolution_timer_);
173
151
  }
174
- if (next_completion_ != nullptr) {
175
- *target_result_ = nullptr;
176
- GRPC_CLOSURE_SCHED(next_completion_, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
177
- "Resolver Shutdown"));
178
- next_completion_ = nullptr;
179
- }
180
152
  }
181
153
 
182
154
  void NativeDnsResolver::OnNextResolutionLocked(void* arg, grpc_error* error) {
@@ -190,38 +162,42 @@ void NativeDnsResolver::OnNextResolutionLocked(void* arg, grpc_error* error) {
190
162
 
191
163
  void NativeDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) {
192
164
  NativeDnsResolver* r = static_cast<NativeDnsResolver*>(arg);
193
- grpc_channel_args* result = nullptr;
194
165
  GPR_ASSERT(r->resolving_);
195
166
  r->resolving_ = false;
196
- GRPC_ERROR_REF(error);
197
- error =
198
- grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS,
199
- grpc_slice_from_copied_string(r->name_to_resolve_));
167
+ if (r->shutdown_) {
168
+ r->Unref(DEBUG_LOCATION, "dns-resolving");
169
+ return;
170
+ }
200
171
  if (r->addresses_ != nullptr) {
201
- ServerAddressList addresses;
172
+ Result result;
202
173
  for (size_t i = 0; i < r->addresses_->naddrs; ++i) {
203
- addresses.emplace_back(&r->addresses_->addrs[i].addr,
204
- r->addresses_->addrs[i].len, nullptr /* args */);
174
+ result.addresses.emplace_back(&r->addresses_->addrs[i].addr,
175
+ r->addresses_->addrs[i].len,
176
+ nullptr /* args */);
205
177
  }
206
- grpc_arg new_arg = CreateServerAddressListChannelArg(&addresses);
207
- result = grpc_channel_args_copy_and_add(r->channel_args_, &new_arg, 1);
208
178
  grpc_resolved_addresses_destroy(r->addresses_);
179
+ result.args = grpc_channel_args_copy(r->channel_args_);
180
+ r->result_handler()->ReturnResult(std::move(result));
209
181
  // Reset backoff state so that we start from the beginning when the
210
182
  // next request gets triggered.
211
183
  r->backoff_.Reset();
212
184
  } else {
213
- grpc_millis next_try = r->backoff_.NextAttemptTime();
214
- grpc_millis timeout = next_try - ExecCtx::Get()->Now();
215
185
  gpr_log(GPR_INFO, "dns resolution failed (will retry): %s",
216
186
  grpc_error_string(error));
187
+ // Return transient error.
188
+ r->result_handler()->ReturnError(grpc_error_set_int(
189
+ GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
190
+ "DNS resolution failed", &error, 1),
191
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
192
+ // Set up for retry.
193
+ grpc_millis next_try = r->backoff_.NextAttemptTime();
194
+ grpc_millis timeout = next_try - ExecCtx::Get()->Now();
217
195
  GPR_ASSERT(!r->have_next_resolution_timer_);
218
196
  r->have_next_resolution_timer_ = true;
219
197
  // TODO(roth): We currently deal with this ref manually. Once the
220
198
  // new closure API is done, find a way to track this ref with the timer
221
199
  // callback as part of the type system.
222
- RefCountedPtr<Resolver> self =
223
- r->Ref(DEBUG_LOCATION, "next_resolution_timer");
224
- self.release();
200
+ r->Ref(DEBUG_LOCATION, "next_resolution_timer").release();
225
201
  if (timeout > 0) {
226
202
  gpr_log(GPR_DEBUG, "retrying in %" PRId64 " milliseconds", timeout);
227
203
  } else {
@@ -230,13 +206,6 @@ void NativeDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) {
230
206
  grpc_timer_init(&r->next_resolution_timer_, next_try,
231
207
  &r->on_next_resolution_);
232
208
  }
233
- if (r->resolved_result_ != nullptr) {
234
- grpc_channel_args_destroy(r->resolved_result_);
235
- }
236
- r->resolved_result_ = result;
237
- ++r->resolved_version_;
238
- r->MaybeFinishNextLocked();
239
- GRPC_ERROR_UNREF(error);
240
209
  r->Unref(DEBUG_LOCATION, "dns-resolving");
241
210
  }
242
211
 
@@ -260,9 +229,7 @@ void NativeDnsResolver::MaybeStartResolvingLocked() {
260
229
  // TODO(roth): We currently deal with this ref manually. Once the
261
230
  // new closure API is done, find a way to track this ref with the timer
262
231
  // callback as part of the type system.
263
- RefCountedPtr<Resolver> self =
264
- Ref(DEBUG_LOCATION, "next_resolution_timer_cooldown");
265
- self.release();
232
+ Ref(DEBUG_LOCATION, "next_resolution_timer_cooldown").release();
266
233
  grpc_timer_init(&next_resolution_timer_, ms_until_next_resolution,
267
234
  &on_next_resolution_);
268
235
  return;
@@ -276,8 +243,7 @@ void NativeDnsResolver::StartResolvingLocked() {
276
243
  // TODO(roth): We currently deal with this ref manually. Once the
277
244
  // new closure API is done, find a way to track this ref with the timer
278
245
  // callback as part of the type system.
279
- RefCountedPtr<Resolver> self = Ref(DEBUG_LOCATION, "dns-resolving");
280
- self.release();
246
+ Ref(DEBUG_LOCATION, "dns-resolving").release();
281
247
  GPR_ASSERT(!resolving_);
282
248
  resolving_ = true;
283
249
  addresses_ = nullptr;
@@ -286,30 +252,18 @@ void NativeDnsResolver::StartResolvingLocked() {
286
252
  last_resolution_timestamp_ = grpc_core::ExecCtx::Get()->Now();
287
253
  }
288
254
 
289
- void NativeDnsResolver::MaybeFinishNextLocked() {
290
- if (next_completion_ != nullptr && resolved_version_ != published_version_) {
291
- *target_result_ = resolved_result_ == nullptr
292
- ? nullptr
293
- : grpc_channel_args_copy(resolved_result_);
294
- GRPC_CLOSURE_SCHED(next_completion_, GRPC_ERROR_NONE);
295
- next_completion_ = nullptr;
296
- published_version_ = resolved_version_;
297
- }
298
- }
299
-
300
255
  //
301
256
  // Factory
302
257
  //
303
258
 
304
259
  class NativeDnsResolverFactory : public ResolverFactory {
305
260
  public:
306
- OrphanablePtr<Resolver> CreateResolver(
307
- const ResolverArgs& args) const override {
261
+ OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const override {
308
262
  if (GPR_UNLIKELY(0 != strcmp(args.uri->authority, ""))) {
309
263
  gpr_log(GPR_ERROR, "authority based dns uri's not supported");
310
264
  return OrphanablePtr<Resolver>(nullptr);
311
265
  }
312
- return OrphanablePtr<Resolver>(New<NativeDnsResolver>(args));
266
+ return OrphanablePtr<Resolver>(New<NativeDnsResolver>(std::move(args)));
313
267
  }
314
268
 
315
269
  const char* scheme() const override { return "dns"; }
@@ -320,8 +274,9 @@ class NativeDnsResolverFactory : public ResolverFactory {
320
274
  } // namespace grpc_core
321
275
 
322
276
  void grpc_resolver_dns_native_init() {
323
- char* resolver_env = gpr_getenv("GRPC_DNS_RESOLVER");
324
- if (resolver_env != nullptr && gpr_stricmp(resolver_env, "native") == 0) {
277
+ grpc_core::UniquePtr<char> resolver =
278
+ GPR_GLOBAL_CONFIG_GET(grpc_dns_resolver);
279
+ if (gpr_stricmp(resolver.get(), "native") == 0) {
325
280
  gpr_log(GPR_DEBUG, "Using native dns resolver");
326
281
  grpc_core::ResolverRegistry::Builder::RegisterResolverFactory(
327
282
  grpc_core::UniquePtr<grpc_core::ResolverFactory>(
@@ -337,7 +292,6 @@ void grpc_resolver_dns_native_init() {
337
292
  grpc_core::New<grpc_core::NativeDnsResolverFactory>()));
338
293
  }
339
294
  }
340
- gpr_free(resolver_env);
341
295
  }
342
296
 
343
297
  void grpc_resolver_dns_native_shutdown() {}