grpc-flamingo 1.11.0 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1150 -176
  3. data/etc/roots.pem +40 -196
  4. data/include/grpc/grpc.h +49 -8
  5. data/include/grpc/grpc_security.h +123 -2
  6. data/include/grpc/grpc_security_constants.h +6 -0
  7. data/include/grpc/impl/codegen/fork.h +4 -4
  8. data/include/grpc/impl/codegen/grpc_types.h +26 -5
  9. data/include/grpc/impl/codegen/log.h +112 -0
  10. data/include/grpc/impl/codegen/port_platform.h +55 -4
  11. data/include/grpc/module.modulemap +2 -0
  12. data/include/grpc/support/log.h +2 -80
  13. data/include/grpc/support/string_util.h +2 -0
  14. data/include/grpc/support/sync.h +0 -16
  15. data/src/boringssl/err_data.c +602 -588
  16. data/src/core/ext/{census → filters/census}/grpc_context.cc +0 -0
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel.cc +1234 -1070
  19. data/src/core/ext/filters/client_channel/client_channel.h +5 -0
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +113 -0
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +71 -0
  22. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -0
  23. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  24. data/src/core/ext/filters/client_channel/http_proxy.cc +22 -5
  25. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy.h +30 -10
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +120 -127
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +36 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +36 -102
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +37 -32
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +25 -22
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -2
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +19 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +54 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +19 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +54 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +4 -17
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +37 -63
  40. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +306 -239
  41. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +444 -392
  42. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +538 -98
  43. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -0
  44. data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -0
  45. data/src/core/ext/filters/client_channel/method_params.h +4 -0
  46. data/src/core/ext/filters/client_channel/resolver.h +10 -0
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -19
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +320 -0
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +62 -9
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +49 -294
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +537 -0
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +112 -87
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +17 -2
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +6 -5
  55. data/src/core/ext/filters/{load_reporting/server_load_reporting_filter.h → client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc} +7 -8
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +29 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +32 -15
  58. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -0
  59. data/src/core/ext/filters/client_channel/subchannel.cc +58 -15
  60. data/src/core/ext/filters/client_channel/subchannel.h +11 -0
  61. data/src/core/ext/filters/deadline/deadline_filter.cc +18 -15
  62. data/src/core/ext/filters/deadline/deadline_filter.h +5 -5
  63. data/src/core/ext/filters/http/client/http_client_filter.cc +10 -9
  64. data/src/core/ext/filters/http/client_authority_filter.cc +6 -5
  65. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +6 -6
  66. data/src/core/ext/filters/http/server/http_server_filter.cc +123 -131
  67. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  68. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  69. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -1
  70. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -2
  71. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +9 -8
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +97 -48
  73. data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -7
  74. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +3 -3
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +12 -8
  76. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -3
  77. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -2
  78. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +2 -2
  79. data/src/core/ext/transport/chttp2/transport/parsing.cc +14 -12
  80. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
  81. data/src/core/ext/transport/chttp2/transport/writing.cc +32 -27
  82. data/src/core/ext/transport/inproc/inproc_transport.cc +87 -49
  83. data/src/core/lib/channel/channel_args.cc +28 -0
  84. data/src/core/lib/channel/channel_args.h +4 -0
  85. data/src/core/lib/channel/channel_stack.cc +22 -29
  86. data/src/core/lib/channel/channel_stack.h +2 -2
  87. data/src/core/lib/channel/channel_stack_builder.cc +0 -3
  88. data/src/core/lib/channel/channel_stack_builder.h +0 -2
  89. data/src/core/lib/channel/channel_trace.cc +28 -63
  90. data/src/core/lib/channel/channel_trace.h +13 -17
  91. data/src/core/lib/channel/channelz.cc +153 -0
  92. data/src/core/lib/channel/channelz.h +133 -0
  93. data/src/core/lib/channel/channelz_registry.cc +145 -0
  94. data/src/core/lib/channel/channelz_registry.h +120 -0
  95. data/src/core/lib/channel/connected_channel.cc +8 -1
  96. data/src/core/lib/channel/handshaker.cc +71 -0
  97. data/src/core/lib/channel/handshaker.h +4 -0
  98. data/src/core/lib/debug/stats.h +7 -0
  99. data/src/core/lib/debug/stats_data.cc +5 -0
  100. data/src/core/lib/debug/stats_data.h +120 -0
  101. data/src/core/lib/debug/trace.cc +2 -1
  102. data/src/core/lib/debug/trace.h +12 -1
  103. data/src/core/lib/gpr/alloc.h +28 -0
  104. data/src/core/lib/gpr/arena.cc +38 -45
  105. data/src/core/lib/gpr/log.cc +8 -2
  106. data/src/core/lib/gpr/log_android.cc +4 -0
  107. data/src/core/lib/gpr/log_linux.cc +4 -0
  108. data/src/core/lib/gpr/log_posix.cc +4 -0
  109. data/src/core/lib/gpr/log_windows.cc +5 -0
  110. data/src/core/lib/gpr/string.cc +28 -0
  111. data/src/core/lib/gpr/string.h +10 -0
  112. data/src/core/lib/gprpp/abstract.h +5 -2
  113. data/src/core/lib/gprpp/fork.cc +268 -0
  114. data/src/core/lib/gprpp/fork.h +88 -0
  115. data/src/core/lib/gprpp/inlined_vector.h +87 -37
  116. data/src/core/lib/gprpp/memory.h +12 -0
  117. data/src/core/lib/gprpp/mutex_lock.h +42 -0
  118. data/src/core/lib/gprpp/orphanable.h +10 -12
  119. data/src/core/lib/gprpp/ref_counted.h +10 -12
  120. data/src/core/lib/gprpp/ref_counted_ptr.h +65 -8
  121. data/src/core/lib/gprpp/thd.h +0 -3
  122. data/src/core/lib/gprpp/thd_posix.cc +5 -54
  123. data/src/core/lib/gprpp/thd_windows.cc +0 -7
  124. data/src/core/lib/http/httpcli_security_connector.cc +1 -3
  125. data/src/core/lib/iomgr/call_combiner.cc +13 -13
  126. data/src/core/lib/iomgr/call_combiner.h +84 -1
  127. data/src/core/lib/iomgr/closure.h +6 -5
  128. data/src/core/lib/iomgr/combiner.cc +30 -13
  129. data/src/core/lib/iomgr/combiner.h +1 -1
  130. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  131. data/src/core/lib/iomgr/error.cc +12 -0
  132. data/src/core/lib/iomgr/error.h +5 -0
  133. data/src/core/lib/iomgr/ev_epoll1_linux.cc +138 -51
  134. data/src/core/lib/iomgr/ev_epollex_linux.cc +276 -93
  135. data/src/core/lib/iomgr/ev_epollsig_linux.cc +58 -50
  136. data/src/core/lib/iomgr/ev_poll_posix.cc +163 -42
  137. data/src/core/lib/iomgr/ev_posix.cc +88 -24
  138. data/src/core/lib/iomgr/ev_posix.h +48 -12
  139. data/src/core/lib/iomgr/exec_ctx.cc +15 -9
  140. data/src/core/lib/iomgr/exec_ctx.h +48 -20
  141. data/src/core/lib/iomgr/executor.cc +274 -142
  142. data/src/core/lib/iomgr/executor.h +82 -16
  143. data/src/core/lib/iomgr/fork_posix.cc +42 -19
  144. data/src/core/lib/iomgr/iocp_windows.cc +9 -4
  145. data/src/core/lib/iomgr/iomgr.cc +2 -0
  146. data/src/core/lib/iomgr/iomgr.h +5 -0
  147. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  148. data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -0
  149. data/src/core/lib/iomgr/lockfree_event.cc +5 -1
  150. data/src/core/lib/iomgr/polling_entity.cc +11 -2
  151. data/src/core/lib/iomgr/pollset_custom.cc +2 -2
  152. data/src/core/lib/iomgr/port.h +51 -1
  153. data/src/core/lib/iomgr/resolve_address.h +1 -1
  154. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
  155. data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
  156. data/src/core/lib/iomgr/resource_quota.cc +89 -12
  157. data/src/core/lib/iomgr/resource_quota.h +16 -0
  158. data/src/core/lib/iomgr/sockaddr_posix.h +1 -1
  159. data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
  160. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  161. data/src/core/lib/iomgr/socket_mutator.h +1 -1
  162. data/src/core/lib/iomgr/socket_utils.h +9 -0
  163. data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -1
  164. data/src/core/lib/iomgr/socket_utils_linux.cc +0 -1
  165. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -3
  166. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  167. data/src/core/lib/iomgr/socket_utils_uv.cc +4 -0
  168. data/src/core/lib/iomgr/socket_utils_windows.cc +4 -0
  169. data/src/core/lib/iomgr/socket_windows.cc +33 -0
  170. data/src/core/lib/iomgr/socket_windows.h +6 -0
  171. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -5
  172. data/src/core/lib/iomgr/tcp_client_posix.cc +10 -11
  173. data/src/core/lib/iomgr/tcp_custom.cc +11 -11
  174. data/src/core/lib/iomgr/tcp_posix.cc +49 -36
  175. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  176. data/src/core/lib/iomgr/tcp_server_posix.cc +16 -36
  177. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  178. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -5
  179. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -0
  180. data/src/core/lib/iomgr/tcp_uv.cc +3 -0
  181. data/src/core/lib/iomgr/tcp_windows.cc +18 -2
  182. data/src/core/lib/iomgr/tcp_windows.h +2 -0
  183. data/src/core/lib/iomgr/timer.h +4 -3
  184. data/src/core/lib/iomgr/timer_generic.cc +133 -51
  185. data/src/core/lib/iomgr/timer_manager.cc +12 -14
  186. data/src/core/lib/iomgr/timer_uv.cc +3 -0
  187. data/src/core/lib/iomgr/udp_server.cc +106 -52
  188. data/src/core/lib/iomgr/udp_server.h +8 -4
  189. data/src/core/lib/json/json.cc +12 -1
  190. data/src/core/lib/json/json.h +5 -0
  191. data/src/core/lib/profiling/basic_timers.cc +1 -0
  192. data/src/core/lib/security/context/security_context.cc +8 -8
  193. data/src/core/lib/security/context/security_context.h +6 -2
  194. data/src/core/lib/security/credentials/alts/alts_credentials.h +0 -20
  195. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +3 -2
  196. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +7 -7
  197. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +1 -38
  198. data/src/core/lib/security/credentials/credentials.h +1 -0
  199. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +89 -115
  200. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +16 -0
  201. data/src/core/lib/security/credentials/jwt/json_token.h +2 -0
  202. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +2 -0
  203. data/src/core/lib/security/credentials/local/local_credentials.cc +77 -0
  204. data/src/core/lib/security/credentials/local/local_credentials.h +40 -0
  205. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +11 -7
  206. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  207. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +17 -3
  208. data/src/core/lib/security/security_connector/alts_security_connector.cc +2 -1
  209. data/src/core/lib/security/security_connector/load_system_roots.h +29 -0
  210. data/src/core/lib/{gpr/fork.h → security/security_connector/load_system_roots_fallback.cc} +10 -13
  211. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +165 -0
  212. data/src/core/lib/security/security_connector/load_system_roots_linux.h +44 -0
  213. data/src/core/lib/security/security_connector/local_security_connector.cc +245 -0
  214. data/src/core/lib/security/security_connector/local_security_connector.h +58 -0
  215. data/src/core/lib/security/security_connector/security_connector.cc +79 -32
  216. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  217. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  218. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  219. data/src/core/lib/security/transport/security_handshaker.cc +7 -2
  220. data/src/core/lib/security/transport/server_auth_filter.cc +4 -7
  221. data/src/core/lib/security/util/json_util.cc +4 -0
  222. data/src/core/lib/slice/slice.cc +6 -2
  223. data/src/core/lib/slice/slice_buffer.cc +27 -7
  224. data/src/core/lib/slice/slice_hash_table.h +4 -0
  225. data/src/core/lib/slice/slice_weak_hash_table.h +4 -0
  226. data/src/core/lib/surface/call.cc +119 -58
  227. data/src/core/lib/surface/call.h +7 -0
  228. data/src/core/lib/surface/channel.cc +50 -18
  229. data/src/core/lib/surface/channel.h +4 -0
  230. data/src/core/lib/surface/completion_queue.cc +153 -18
  231. data/src/core/lib/surface/completion_queue.h +20 -2
  232. data/src/core/lib/surface/completion_queue_factory.cc +13 -4
  233. data/src/core/lib/surface/init.cc +7 -8
  234. data/src/core/lib/surface/init.h +0 -1
  235. data/src/core/lib/surface/server.cc +16 -0
  236. data/src/core/lib/surface/version.cc +1 -1
  237. data/src/core/lib/transport/bdp_estimator.cc +3 -3
  238. data/src/core/lib/transport/bdp_estimator.h +2 -2
  239. data/src/core/lib/transport/byte_stream.cc +1 -1
  240. data/src/core/lib/transport/connectivity_state.cc +6 -7
  241. data/src/core/lib/transport/service_config.cc +2 -2
  242. data/src/core/lib/transport/service_config.h +3 -3
  243. data/src/core/lib/transport/transport.cc +22 -10
  244. data/src/core/lib/transport/transport.h +18 -18
  245. data/src/core/lib/transport/transport_op_string.cc +1 -8
  246. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -4
  247. data/src/core/tsi/alts/crypt/aes_gcm.cc +2 -0
  248. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +19 -7
  249. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +10 -0
  250. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +2 -2
  251. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -3
  252. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +3 -0
  253. data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -1
  254. data/src/core/tsi/alts/handshaker/altscontext.pb.h +1 -2
  255. data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -1
  256. data/src/core/tsi/alts/handshaker/handshaker.pb.h +1 -2
  257. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -1
  258. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +1 -1
  259. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  260. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +47 -1
  261. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +3 -1
  262. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -11
  263. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +7 -2
  264. data/src/core/tsi/fake_transport_security.cc +1 -0
  265. data/src/core/tsi/grpc_shadow_boringssl.h +3006 -0
  266. data/src/core/tsi/local_transport_security.cc +209 -0
  267. data/src/core/tsi/local_transport_security.h +51 -0
  268. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  269. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +5 -5
  270. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -0
  271. data/src/core/tsi/ssl_transport_security.cc +245 -116
  272. data/src/core/tsi/ssl_types.h +2 -0
  273. data/src/core/tsi/transport_security.cc +14 -0
  274. data/src/core/tsi/transport_security.h +2 -0
  275. data/src/core/tsi/transport_security_interface.h +11 -1
  276. data/src/ruby/bin/math_client.rb +17 -9
  277. data/src/ruby/ext/grpc/extconf.rb +1 -26
  278. data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -3
  279. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +42 -16
  280. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +65 -26
  281. data/src/ruby/lib/grpc/generic/active_call.rb +19 -23
  282. data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -1
  283. data/src/ruby/lib/grpc/version.rb +1 -1
  284. data/src/ruby/pb/generate_proto_ruby.sh +7 -1
  285. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +4 -1
  286. data/src/ruby/spec/call_credentials_spec.rb +1 -1
  287. data/src/ruby/spec/call_spec.rb +1 -1
  288. data/src/ruby/spec/channel_credentials_spec.rb +1 -1
  289. data/src/ruby/spec/channel_spec.rb +1 -1
  290. data/src/ruby/spec/client_auth_spec.rb +1 -12
  291. data/src/ruby/spec/client_server_spec.rb +1 -1
  292. data/src/ruby/spec/compression_options_spec.rb +1 -1
  293. data/src/ruby/spec/error_sanity_spec.rb +1 -1
  294. data/src/ruby/spec/generic/client_stub_spec.rb +16 -4
  295. data/src/ruby/spec/generic/rpc_desc_spec.rb +1 -1
  296. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
  297. data/src/ruby/spec/generic/service_spec.rb +1 -1
  298. data/src/ruby/spec/google_rpc_status_utils_spec.rb +1 -12
  299. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +1 -0
  300. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  301. data/src/ruby/spec/server_credentials_spec.rb +1 -1
  302. data/src/ruby/spec/server_spec.rb +1 -1
  303. data/src/ruby/spec/spec_helper.rb +1 -0
  304. data/src/ruby/spec/support/services.rb +1 -1
  305. data/src/ruby/spec/time_consts_spec.rb +1 -1
  306. data/third_party/address_sorting/address_sorting.c +17 -11
  307. data/third_party/address_sorting/address_sorting_windows.c +43 -3
  308. data/third_party/address_sorting/include/address_sorting/address_sorting.h +3 -0
  309. data/third_party/boringssl/crypto/asn1/a_int.c +33 -28
  310. data/third_party/boringssl/crypto/asn1/a_mbstr.c +24 -22
  311. data/third_party/boringssl/crypto/asn1/a_utf8.c +13 -11
  312. data/third_party/boringssl/crypto/asn1/asn1_locl.h +3 -0
  313. data/third_party/boringssl/crypto/asn1/tasn_dec.c +40 -19
  314. data/third_party/boringssl/crypto/bio/fd.c +1 -0
  315. data/third_party/boringssl/crypto/bio/file.c +2 -0
  316. data/third_party/boringssl/crypto/bn_extra/convert.c +6 -5
  317. data/third_party/boringssl/crypto/bytestring/ber.c +1 -4
  318. data/third_party/boringssl/crypto/bytestring/cbb.c +116 -16
  319. data/third_party/boringssl/crypto/bytestring/cbs.c +151 -20
  320. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +203 -0
  321. data/third_party/boringssl/crypto/cipher_extra/e_rc2.c +2 -0
  322. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +1 -2
  323. data/third_party/boringssl/crypto/cpu-aarch64-fuchsia.c +55 -0
  324. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +2 -1
  325. data/third_party/boringssl/crypto/dsa/dsa.c +16 -54
  326. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +9 -10
  327. data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -3
  328. data/third_party/boringssl/crypto/fipsmodule/bcm.c +11 -542
  329. data/third_party/boringssl/crypto/fipsmodule/bn/add.c +57 -112
  330. data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +4 -3
  331. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +128 -70
  332. data/third_party/boringssl/crypto/fipsmodule/bn/bytes.c +32 -71
  333. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +64 -118
  334. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +284 -122
  335. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +31 -65
  336. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +274 -218
  337. data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +2 -1
  338. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +187 -27
  339. data/third_party/boringssl/crypto/fipsmodule/bn/jacobi.c +1 -1
  340. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +124 -81
  341. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +8 -30
  342. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +321 -347
  343. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +326 -66
  344. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +77 -25
  345. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +199 -222
  346. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +27 -47
  347. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +155 -96
  348. data/third_party/boringssl/crypto/fipsmodule/bn/sqrt.c +1 -1
  349. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +10 -10
  350. data/third_party/boringssl/crypto/fipsmodule/des/internal.h +2 -0
  351. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +78 -47
  352. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +99 -163
  353. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +3 -10
  354. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +44 -23
  355. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +59 -90
  356. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +38 -65
  357. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +5378 -5418
  358. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +17 -26
  359. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +15 -11
  360. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +45 -51
  361. data/third_party/boringssl/crypto/fipsmodule/ec/{util-64.c → util.c} +0 -5
  362. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +144 -264
  363. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +78 -62
  364. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +256 -0
  365. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +36 -32
  366. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +9 -7
  367. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +16 -40
  368. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +1 -6
  369. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +57 -39
  370. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +309 -142
  371. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +581 -0
  372. data/third_party/boringssl/crypto/fipsmodule/tls/internal.h +39 -0
  373. data/third_party/boringssl/crypto/fipsmodule/tls/kdf.c +165 -0
  374. data/third_party/boringssl/crypto/internal.h +65 -2
  375. data/third_party/boringssl/crypto/mem.c +0 -2
  376. data/third_party/boringssl/crypto/obj/obj.c +6 -73
  377. data/third_party/boringssl/crypto/thread_pthread.c +35 -5
  378. data/third_party/boringssl/crypto/x509/a_strex.c +11 -11
  379. data/third_party/boringssl/crypto/x509/vpm_int.h +1 -0
  380. data/third_party/boringssl/crypto/x509/x509_vfy.c +4 -0
  381. data/third_party/boringssl/crypto/x509/x509_vpm.c +44 -22
  382. data/third_party/boringssl/crypto/x509/x_name.c +13 -0
  383. data/third_party/boringssl/include/openssl/aead.h +10 -0
  384. data/third_party/boringssl/include/openssl/asn1.h +2 -3
  385. data/third_party/boringssl/include/openssl/base.h +5 -14
  386. data/third_party/boringssl/include/openssl/bio.h +1 -1
  387. data/third_party/boringssl/include/openssl/bn.h +62 -18
  388. data/third_party/boringssl/include/openssl/bytestring.h +53 -28
  389. data/third_party/boringssl/include/openssl/crypto.h +4 -0
  390. data/third_party/boringssl/include/openssl/ec.h +10 -4
  391. data/third_party/boringssl/include/openssl/ec_key.h +7 -6
  392. data/third_party/boringssl/include/openssl/err.h +9 -9
  393. data/third_party/boringssl/include/openssl/evp.h +1 -1
  394. data/third_party/boringssl/include/openssl/rsa.h +35 -10
  395. data/third_party/boringssl/include/openssl/ssl.h +167 -19
  396. data/third_party/boringssl/include/openssl/ssl3.h +0 -1
  397. data/third_party/boringssl/include/openssl/stack.h +1 -1
  398. data/third_party/boringssl/include/openssl/tls1.h +10 -2
  399. data/third_party/boringssl/include/openssl/x509.h +4 -0
  400. data/third_party/boringssl/include/openssl/x509v3.h +1 -0
  401. data/third_party/boringssl/ssl/d1_both.cc +16 -2
  402. data/third_party/boringssl/ssl/dtls_method.cc +1 -1
  403. data/third_party/boringssl/ssl/handoff.cc +285 -0
  404. data/third_party/boringssl/ssl/handshake.cc +26 -12
  405. data/third_party/boringssl/ssl/handshake_client.cc +101 -95
  406. data/third_party/boringssl/ssl/handshake_server.cc +14 -2
  407. data/third_party/boringssl/ssl/internal.h +132 -79
  408. data/third_party/boringssl/ssl/s3_both.cc +2 -2
  409. data/third_party/boringssl/ssl/s3_lib.cc +3 -1
  410. data/third_party/boringssl/ssl/s3_pkt.cc +0 -18
  411. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +1 -4
  412. data/third_party/boringssl/ssl/ssl_asn1.cc +47 -43
  413. data/third_party/boringssl/ssl/ssl_cipher.cc +12 -8
  414. data/third_party/boringssl/ssl/ssl_key_share.cc +3 -1
  415. data/third_party/boringssl/ssl/ssl_lib.cc +83 -14
  416. data/third_party/boringssl/ssl/ssl_privkey.cc +6 -0
  417. data/third_party/boringssl/ssl/ssl_stat.cc +6 -6
  418. data/third_party/boringssl/ssl/ssl_versions.cc +12 -85
  419. data/third_party/boringssl/ssl/ssl_x509.cc +59 -61
  420. data/third_party/boringssl/ssl/t1_enc.cc +73 -124
  421. data/third_party/boringssl/ssl/t1_lib.cc +367 -41
  422. data/third_party/boringssl/ssl/tls13_both.cc +8 -0
  423. data/third_party/boringssl/ssl/tls13_client.cc +98 -184
  424. data/third_party/boringssl/ssl/tls13_enc.cc +88 -158
  425. data/third_party/boringssl/ssl/tls13_server.cc +91 -137
  426. data/third_party/boringssl/ssl/tls_method.cc +0 -17
  427. data/third_party/boringssl/ssl/tls_record.cc +1 -10
  428. data/third_party/boringssl/third_party/fiat/curve25519.c +921 -2753
  429. data/third_party/boringssl/third_party/fiat/curve25519_tables.h +7880 -0
  430. data/third_party/boringssl/third_party/fiat/internal.h +32 -20
  431. data/third_party/boringssl/third_party/fiat/p256.c +1824 -0
  432. metadata +86 -71
  433. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +0 -253
  434. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +0 -222
  435. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +0 -71
  436. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -61
  437. data/src/core/lib/channel/channel_trace_registry.cc +0 -80
  438. data/src/core/lib/channel/channel_trace_registry.h +0 -43
  439. data/src/core/lib/gpr/fork.cc +0 -78
  440. data/src/core/tsi/transport_security_adapter.cc +0 -235
  441. data/src/core/tsi/transport_security_adapter.h +0 -41
  442. data/src/ruby/bin/apis/google/protobuf/empty.rb +0 -29
  443. data/src/ruby/bin/apis/pubsub_demo.rb +0 -241
  444. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +0 -159
  445. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +0 -88
  446. data/src/ruby/pb/test/client.rb +0 -764
  447. data/src/ruby/pb/test/server.rb +0 -252
  448. data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +0 -54
  449. data/src/ruby/spec/pb/package_with_underscore/data.proto +0 -23
  450. data/src/ruby/spec/pb/package_with_underscore/service.proto +0 -23
  451. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +0 -247
  452. data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +0 -1674
@@ -22,7 +22,6 @@
22
22
 
23
23
  #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
24
24
  #include "src/core/lib/iomgr/sockaddr.h"
25
- #include "src/core/lib/iomgr/socket_utils_posix.h"
26
25
 
27
26
  #include <string.h>
28
27
  #include <sys/types.h>
@@ -50,6 +49,8 @@ static gpr_mu g_init_mu;
50
49
  grpc_core::TraceFlag grpc_trace_cares_address_sorting(false,
51
50
  "cares_address_sorting");
52
51
 
52
+ grpc_core::TraceFlag grpc_trace_cares_resolver(false, "cares_resolver");
53
+
53
54
  struct grpc_ares_request {
54
55
  /** indicates the DNS server to use, if specified */
55
56
  struct ares_addr_port_node dns_server_addr;
@@ -63,10 +64,8 @@ struct grpc_ares_request {
63
64
  /** the evernt driver used by this request */
64
65
  grpc_ares_ev_driver* ev_driver;
65
66
  /** number of ongoing queries */
66
- gpr_refcount pending_queries;
67
+ size_t pending_queries;
67
68
 
68
- /** mutex guarding the rest of the state */
69
- gpr_mu mu;
70
69
  /** is there at least one successful query, set in on_done_cb */
71
70
  bool success;
72
71
  /** the errors explaining the request failure, set in on_done_cb */
@@ -74,7 +73,8 @@ struct grpc_ares_request {
74
73
  };
75
74
 
76
75
  typedef struct grpc_ares_hostbyname_request {
77
- /** following members are set in create_hostbyname_request */
76
+ /** following members are set in create_hostbyname_request_locked
77
+ */
78
78
  /** the top-level request instance */
79
79
  grpc_ares_request* parent_request;
80
80
  /** host to resolve, parsed from the name to resolve */
@@ -96,10 +96,6 @@ static uint16_t strhtons(const char* port) {
96
96
  return htons(static_cast<unsigned short>(atoi(port)));
97
97
  }
98
98
 
99
- static void grpc_ares_request_ref(grpc_ares_request* r) {
100
- gpr_ref(&r->pending_queries);
101
- }
102
-
103
99
  static void log_address_sorting_list(grpc_lb_addresses* lb_addrs,
104
100
  const char* input_output_str) {
105
101
  for (size_t i = 0; i < lb_addrs->num_addresses; i++) {
@@ -149,19 +145,29 @@ void grpc_cares_wrapper_test_only_address_sorting_sort(
149
145
  grpc_cares_wrapper_address_sorting_sort(lb_addrs);
150
146
  }
151
147
 
152
- static void grpc_ares_request_unref(grpc_ares_request* r) {
153
- /* If there are no pending queries, invoke on_done callback and destroy the
148
+ static void grpc_ares_request_ref_locked(grpc_ares_request* r) {
149
+ r->pending_queries++;
150
+ }
151
+
152
+ static void grpc_ares_request_unref_locked(grpc_ares_request* r) {
153
+ r->pending_queries--;
154
+ if (r->pending_queries == 0u) {
155
+ grpc_ares_ev_driver_on_queries_complete_locked(r->ev_driver);
156
+ }
157
+ }
158
+
159
+ void grpc_ares_complete_request_locked(grpc_ares_request* r) {
160
+ /* Invoke on_done callback and destroy the
154
161
  request */
155
- if (gpr_unref(&r->pending_queries)) {
156
- grpc_cares_wrapper_address_sorting_sort(*(r->lb_addrs_out));
157
- GRPC_CLOSURE_SCHED(r->on_done, r->error);
158
- gpr_mu_destroy(&r->mu);
159
- grpc_ares_ev_driver_destroy(r->ev_driver);
160
- gpr_free(r);
162
+ grpc_lb_addresses* lb_addrs = *(r->lb_addrs_out);
163
+ if (lb_addrs != nullptr) {
164
+ grpc_cares_wrapper_address_sorting_sort(lb_addrs);
161
165
  }
166
+ GRPC_CLOSURE_SCHED(r->on_done, r->error);
167
+ gpr_free(r);
162
168
  }
163
169
 
164
- static grpc_ares_hostbyname_request* create_hostbyname_request(
170
+ static grpc_ares_hostbyname_request* create_hostbyname_request_locked(
165
171
  grpc_ares_request* parent_request, char* host, uint16_t port,
166
172
  bool is_balancer) {
167
173
  grpc_ares_hostbyname_request* hr = static_cast<grpc_ares_hostbyname_request*>(
@@ -170,22 +176,22 @@ static grpc_ares_hostbyname_request* create_hostbyname_request(
170
176
  hr->host = gpr_strdup(host);
171
177
  hr->port = port;
172
178
  hr->is_balancer = is_balancer;
173
- grpc_ares_request_ref(parent_request);
179
+ grpc_ares_request_ref_locked(parent_request);
174
180
  return hr;
175
181
  }
176
182
 
177
- static void destroy_hostbyname_request(grpc_ares_hostbyname_request* hr) {
178
- grpc_ares_request_unref(hr->parent_request);
183
+ static void destroy_hostbyname_request_locked(
184
+ grpc_ares_hostbyname_request* hr) {
185
+ grpc_ares_request_unref_locked(hr->parent_request);
179
186
  gpr_free(hr->host);
180
187
  gpr_free(hr);
181
188
  }
182
189
 
183
- static void on_hostbyname_done_cb(void* arg, int status, int timeouts,
184
- struct hostent* hostent) {
190
+ static void on_hostbyname_done_locked(void* arg, int status, int timeouts,
191
+ struct hostent* hostent) {
185
192
  grpc_ares_hostbyname_request* hr =
186
193
  static_cast<grpc_ares_hostbyname_request*>(arg);
187
194
  grpc_ares_request* r = hr->parent_request;
188
- gpr_mu_lock(&r->mu);
189
195
  if (status == ARES_SUCCESS) {
190
196
  GRPC_ERROR_UNREF(r->error);
191
197
  r->error = GRPC_ERROR_NONE;
@@ -210,7 +216,7 @@ static void on_hostbyname_done_cb(void* arg, int status, int timeouts,
210
216
  memset(&addr, 0, addr_len);
211
217
  memcpy(&addr.sin6_addr, hostent->h_addr_list[i - prev_naddr],
212
218
  sizeof(struct in6_addr));
213
- addr.sin6_family = static_cast<sa_family_t>(hostent->h_addrtype);
219
+ addr.sin6_family = static_cast<unsigned char>(hostent->h_addrtype);
214
220
  addr.sin6_port = hr->port;
215
221
  grpc_lb_addresses_set_address(
216
222
  *lb_addresses, i, &addr, addr_len,
@@ -231,7 +237,7 @@ static void on_hostbyname_done_cb(void* arg, int status, int timeouts,
231
237
  memset(&addr, 0, addr_len);
232
238
  memcpy(&addr.sin_addr, hostent->h_addr_list[i - prev_naddr],
233
239
  sizeof(struct in_addr));
234
- addr.sin_family = static_cast<sa_family_t>(hostent->h_addrtype);
240
+ addr.sin_family = static_cast<unsigned char>(hostent->h_addrtype);
235
241
  addr.sin_port = hr->port;
236
242
  grpc_lb_addresses_set_address(
237
243
  *lb_addresses, i, &addr, addr_len,
@@ -260,34 +266,33 @@ static void on_hostbyname_done_cb(void* arg, int status, int timeouts,
260
266
  r->error = grpc_error_add_child(error, r->error);
261
267
  }
262
268
  }
263
- gpr_mu_unlock(&r->mu);
264
- destroy_hostbyname_request(hr);
269
+ destroy_hostbyname_request_locked(hr);
265
270
  }
266
271
 
267
- static void on_srv_query_done_cb(void* arg, int status, int timeouts,
268
- unsigned char* abuf, int alen) {
272
+ static void on_srv_query_done_locked(void* arg, int status, int timeouts,
273
+ unsigned char* abuf, int alen) {
269
274
  grpc_ares_request* r = static_cast<grpc_ares_request*>(arg);
270
- grpc_core::ExecCtx exec_ctx;
271
- gpr_log(GPR_DEBUG, "on_query_srv_done_cb");
275
+ gpr_log(GPR_DEBUG, "on_query_srv_done_locked");
272
276
  if (status == ARES_SUCCESS) {
273
- gpr_log(GPR_DEBUG, "on_query_srv_done_cb ARES_SUCCESS");
277
+ gpr_log(GPR_DEBUG, "on_query_srv_done_locked ARES_SUCCESS");
274
278
  struct ares_srv_reply* reply;
275
279
  const int parse_status = ares_parse_srv_reply(abuf, alen, &reply);
276
280
  if (parse_status == ARES_SUCCESS) {
277
- ares_channel* channel = grpc_ares_ev_driver_get_channel(r->ev_driver);
281
+ ares_channel* channel =
282
+ grpc_ares_ev_driver_get_channel_locked(r->ev_driver);
278
283
  for (struct ares_srv_reply* srv_it = reply; srv_it != nullptr;
279
284
  srv_it = srv_it->next) {
280
- if (grpc_ipv6_loopback_available()) {
281
- grpc_ares_hostbyname_request* hr = create_hostbyname_request(
285
+ if (grpc_ares_query_ipv6()) {
286
+ grpc_ares_hostbyname_request* hr = create_hostbyname_request_locked(
282
287
  r, srv_it->host, htons(srv_it->port), true /* is_balancer */);
283
288
  ares_gethostbyname(*channel, hr->host, AF_INET6,
284
- on_hostbyname_done_cb, hr);
289
+ on_hostbyname_done_locked, hr);
285
290
  }
286
- grpc_ares_hostbyname_request* hr = create_hostbyname_request(
291
+ grpc_ares_hostbyname_request* hr = create_hostbyname_request_locked(
287
292
  r, srv_it->host, htons(srv_it->port), true /* is_balancer */);
288
- ares_gethostbyname(*channel, hr->host, AF_INET, on_hostbyname_done_cb,
289
- hr);
290
- grpc_ares_ev_driver_start(r->ev_driver);
293
+ ares_gethostbyname(*channel, hr->host, AF_INET,
294
+ on_hostbyname_done_locked, hr);
295
+ grpc_ares_ev_driver_start_locked(r->ev_driver);
291
296
  }
292
297
  }
293
298
  if (reply != nullptr) {
@@ -305,21 +310,20 @@ static void on_srv_query_done_cb(void* arg, int status, int timeouts,
305
310
  r->error = grpc_error_add_child(error, r->error);
306
311
  }
307
312
  }
308
- grpc_ares_request_unref(r);
313
+ grpc_ares_request_unref_locked(r);
309
314
  }
310
315
 
311
316
  static const char g_service_config_attribute_prefix[] = "grpc_config=";
312
317
 
313
- static void on_txt_done_cb(void* arg, int status, int timeouts,
314
- unsigned char* buf, int len) {
315
- gpr_log(GPR_DEBUG, "on_txt_done_cb");
318
+ static void on_txt_done_locked(void* arg, int status, int timeouts,
319
+ unsigned char* buf, int len) {
320
+ gpr_log(GPR_DEBUG, "on_txt_done_locked");
316
321
  char* error_msg;
317
322
  grpc_ares_request* r = static_cast<grpc_ares_request*>(arg);
318
323
  const size_t prefix_len = sizeof(g_service_config_attribute_prefix) - 1;
319
324
  struct ares_txt_ext* result = nullptr;
320
325
  struct ares_txt_ext* reply = nullptr;
321
326
  grpc_error* error = GRPC_ERROR_NONE;
322
- gpr_mu_lock(&r->mu);
323
327
  if (status != ARES_SUCCESS) goto fail;
324
328
  status = ares_parse_txt_reply_ext(buf, len, &reply);
325
329
  if (status != ARES_SUCCESS) goto fail;
@@ -364,14 +368,14 @@ fail:
364
368
  r->error = grpc_error_add_child(error, r->error);
365
369
  }
366
370
  done:
367
- gpr_mu_unlock(&r->mu);
368
- grpc_ares_request_unref(r);
371
+ grpc_ares_request_unref_locked(r);
369
372
  }
370
373
 
371
- static grpc_ares_request* grpc_dns_lookup_ares_impl(
374
+ static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
372
375
  const char* dns_server, const char* name, const char* default_port,
373
376
  grpc_pollset_set* interested_parties, grpc_closure* on_done,
374
- grpc_lb_addresses** addrs, bool check_grpclb, char** service_config_json) {
377
+ grpc_lb_addresses** addrs, bool check_grpclb, char** service_config_json,
378
+ grpc_combiner* combiner) {
375
379
  grpc_error* error = GRPC_ERROR_NONE;
376
380
  grpc_ares_hostbyname_request* hr = nullptr;
377
381
  grpc_ares_request* r = nullptr;
@@ -400,21 +404,18 @@ static grpc_ares_request* grpc_dns_lookup_ares_impl(
400
404
  }
401
405
  port = gpr_strdup(default_port);
402
406
  }
403
-
404
- grpc_ares_ev_driver* ev_driver;
405
- error = grpc_ares_ev_driver_create(&ev_driver, interested_parties);
406
- if (error != GRPC_ERROR_NONE) goto error_cleanup;
407
-
408
407
  r = static_cast<grpc_ares_request*>(gpr_zalloc(sizeof(grpc_ares_request)));
409
- gpr_mu_init(&r->mu);
410
- r->ev_driver = ev_driver;
408
+ r->ev_driver = nullptr;
411
409
  r->on_done = on_done;
412
410
  r->lb_addrs_out = addrs;
413
411
  r->service_config_json_out = service_config_json;
414
412
  r->success = false;
415
413
  r->error = GRPC_ERROR_NONE;
416
- channel = grpc_ares_ev_driver_get_channel(r->ev_driver);
417
-
414
+ r->pending_queries = 0;
415
+ error = grpc_ares_ev_driver_create_locked(&r->ev_driver, interested_parties,
416
+ combiner, r);
417
+ if (error != GRPC_ERROR_NONE) goto error_cleanup;
418
+ channel = grpc_ares_ev_driver_get_channel_locked(r->ev_driver);
418
419
  // If dns_server is specified, use it.
419
420
  if (dns_server != nullptr) {
420
421
  gpr_log(GPR_INFO, "Using DNS server %s", dns_server);
@@ -439,7 +440,6 @@ static grpc_ares_request* grpc_dns_lookup_ares_impl(
439
440
  error = grpc_error_set_str(
440
441
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("cannot parse authority"),
441
442
  GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
442
- gpr_free(r);
443
443
  goto error_cleanup;
444
444
  }
445
445
  int status = ares_set_servers_ports(*channel, &r->dns_server_addr);
@@ -449,58 +449,60 @@ static grpc_ares_request* grpc_dns_lookup_ares_impl(
449
449
  ares_strerror(status));
450
450
  error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg);
451
451
  gpr_free(error_msg);
452
- gpr_free(r);
453
452
  goto error_cleanup;
454
453
  }
455
454
  }
456
- gpr_ref_init(&r->pending_queries, 1);
457
- if (grpc_ipv6_loopback_available()) {
458
- hr = create_hostbyname_request(r, host, strhtons(port),
459
- false /* is_balancer */);
460
- ares_gethostbyname(*channel, hr->host, AF_INET6, on_hostbyname_done_cb, hr);
455
+ r->pending_queries = 1;
456
+ if (grpc_ares_query_ipv6()) {
457
+ hr = create_hostbyname_request_locked(r, host, strhtons(port),
458
+ false /* is_balancer */);
459
+ ares_gethostbyname(*channel, hr->host, AF_INET6, on_hostbyname_done_locked,
460
+ hr);
461
461
  }
462
- hr = create_hostbyname_request(r, host, strhtons(port),
463
- false /* is_balancer */);
464
- ares_gethostbyname(*channel, hr->host, AF_INET, on_hostbyname_done_cb, hr);
462
+ hr = create_hostbyname_request_locked(r, host, strhtons(port),
463
+ false /* is_balancer */);
464
+ ares_gethostbyname(*channel, hr->host, AF_INET, on_hostbyname_done_locked,
465
+ hr);
465
466
  if (check_grpclb) {
466
467
  /* Query the SRV record */
467
- grpc_ares_request_ref(r);
468
+ grpc_ares_request_ref_locked(r);
468
469
  char* service_name;
469
470
  gpr_asprintf(&service_name, "_grpclb._tcp.%s", host);
470
- ares_query(*channel, service_name, ns_c_in, ns_t_srv, on_srv_query_done_cb,
471
- r);
471
+ ares_query(*channel, service_name, ns_c_in, ns_t_srv,
472
+ on_srv_query_done_locked, r);
472
473
  gpr_free(service_name);
473
474
  }
474
475
  if (service_config_json != nullptr) {
475
- grpc_ares_request_ref(r);
476
+ grpc_ares_request_ref_locked(r);
476
477
  char* config_name;
477
478
  gpr_asprintf(&config_name, "_grpc_config.%s", host);
478
- ares_search(*channel, config_name, ns_c_in, ns_t_txt, on_txt_done_cb, r);
479
+ ares_search(*channel, config_name, ns_c_in, ns_t_txt, on_txt_done_locked,
480
+ r);
479
481
  gpr_free(config_name);
480
482
  }
481
- /* TODO(zyc): Handle CNAME records here. */
482
- grpc_ares_ev_driver_start(r->ev_driver);
483
- grpc_ares_request_unref(r);
483
+ grpc_ares_ev_driver_start_locked(r->ev_driver);
484
+ grpc_ares_request_unref_locked(r);
484
485
  gpr_free(host);
485
486
  gpr_free(port);
486
487
  return r;
487
488
 
488
489
  error_cleanup:
489
490
  GRPC_CLOSURE_SCHED(on_done, error);
491
+ gpr_free(r);
490
492
  gpr_free(host);
491
493
  gpr_free(port);
492
494
  return nullptr;
493
495
  }
494
496
 
495
- grpc_ares_request* (*grpc_dns_lookup_ares)(
497
+ grpc_ares_request* (*grpc_dns_lookup_ares_locked)(
496
498
  const char* dns_server, const char* name, const char* default_port,
497
499
  grpc_pollset_set* interested_parties, grpc_closure* on_done,
498
- grpc_lb_addresses** addrs, bool check_grpclb,
499
- char** service_config_json) = grpc_dns_lookup_ares_impl;
500
+ grpc_lb_addresses** addrs, bool check_grpclb, char** service_config_json,
501
+ grpc_combiner* combiner) = grpc_dns_lookup_ares_locked_impl;
500
502
 
501
503
  void grpc_cancel_ares_request(grpc_ares_request* r) {
502
- if (grpc_dns_lookup_ares == grpc_dns_lookup_ares_impl) {
503
- grpc_ares_ev_driver_shutdown(r->ev_driver);
504
+ if (grpc_dns_lookup_ares_locked == grpc_dns_lookup_ares_locked_impl) {
505
+ grpc_ares_ev_driver_shutdown_locked(r->ev_driver);
504
506
  }
505
507
  }
506
508
 
@@ -532,6 +534,8 @@ void grpc_ares_cleanup(void) {
532
534
  */
533
535
 
534
536
  typedef struct grpc_resolve_address_ares_request {
537
+ /* combiner that queries and related callbacks run under */
538
+ grpc_combiner* combiner;
535
539
  /** the pointer to receive the resolved addresses */
536
540
  grpc_resolved_addresses** addrs_out;
537
541
  /** currently resolving lb addresses */
@@ -539,8 +543,14 @@ typedef struct grpc_resolve_address_ares_request {
539
543
  /** closure to call when the resolve_address_ares request completes */
540
544
  grpc_closure* on_resolve_address_done;
541
545
  /** a closure wrapping on_dns_lookup_done_cb, which should be invoked when the
542
- grpc_dns_lookup_ares operation is done. */
546
+ grpc_dns_lookup_ares_locked operation is done. */
543
547
  grpc_closure on_dns_lookup_done;
548
+ /* target name */
549
+ const char* name;
550
+ /* default port to use if none is specified */
551
+ const char* default_port;
552
+ /* pollset_set to be driven by */
553
+ grpc_pollset_set* interested_parties;
544
554
  } grpc_resolve_address_ares_request;
545
555
 
546
556
  static void on_dns_lookup_done_cb(void* arg, grpc_error* error) {
@@ -564,9 +574,20 @@ static void on_dns_lookup_done_cb(void* arg, grpc_error* error) {
564
574
  }
565
575
  GRPC_CLOSURE_SCHED(r->on_resolve_address_done, GRPC_ERROR_REF(error));
566
576
  if (r->lb_addrs != nullptr) grpc_lb_addresses_destroy(r->lb_addrs);
577
+ GRPC_COMBINER_UNREF(r->combiner, "on_dns_lookup_done_cb");
567
578
  gpr_free(r);
568
579
  }
569
580
 
581
+ static void grpc_resolve_address_invoke_dns_lookup_ares_locked(
582
+ void* arg, grpc_error* unused_error) {
583
+ grpc_resolve_address_ares_request* r =
584
+ static_cast<grpc_resolve_address_ares_request*>(arg);
585
+ grpc_dns_lookup_ares_locked(
586
+ nullptr /* dns_server */, r->name, r->default_port, r->interested_parties,
587
+ &r->on_dns_lookup_done, &r->lb_addrs, false /* check_grpclb */,
588
+ nullptr /* service_config_json */, r->combiner);
589
+ }
590
+
570
591
  static void grpc_resolve_address_ares_impl(const char* name,
571
592
  const char* default_port,
572
593
  grpc_pollset_set* interested_parties,
@@ -575,14 +596,18 @@ static void grpc_resolve_address_ares_impl(const char* name,
575
596
  grpc_resolve_address_ares_request* r =
576
597
  static_cast<grpc_resolve_address_ares_request*>(
577
598
  gpr_zalloc(sizeof(grpc_resolve_address_ares_request)));
599
+ r->combiner = grpc_combiner_create();
578
600
  r->addrs_out = addrs;
579
601
  r->on_resolve_address_done = on_done;
580
602
  GRPC_CLOSURE_INIT(&r->on_dns_lookup_done, on_dns_lookup_done_cb, r,
581
603
  grpc_schedule_on_exec_ctx);
582
- grpc_dns_lookup_ares(nullptr /* dns_server */, name, default_port,
583
- interested_parties, &r->on_dns_lookup_done, &r->lb_addrs,
584
- false /* check_grpclb */,
585
- nullptr /* service_config_json */);
604
+ r->name = name;
605
+ r->default_port = default_port;
606
+ r->interested_parties = interested_parties;
607
+ GRPC_CLOSURE_SCHED(
608
+ GRPC_CLOSURE_CREATE(grpc_resolve_address_invoke_dns_lookup_ares_locked, r,
609
+ grpc_combiner_scheduler(r->combiner)),
610
+ GRPC_ERROR_NONE);
586
611
  }
587
612
 
588
613
  void (*grpc_resolve_address_ares)(
@@ -28,6 +28,13 @@
28
28
 
29
29
  extern grpc_core::TraceFlag grpc_trace_cares_address_sorting;
30
30
 
31
+ extern grpc_core::TraceFlag grpc_trace_cares_resolver;
32
+
33
+ #define GRPC_CARES_TRACE_LOG(format, ...) \
34
+ if (grpc_trace_cares_resolver.enabled()) { \
35
+ gpr_log(GPR_DEBUG, "(c-ares resolver) " format, __VA_ARGS__); \
36
+ }
37
+
31
38
  typedef struct grpc_ares_request grpc_ares_request;
32
39
 
33
40
  /* Asynchronously resolve \a name. Use \a default_port if a port isn't
@@ -48,11 +55,11 @@ extern void (*grpc_resolve_address_ares)(const char* name,
48
55
  function. \a on_done may be called directly in this function without being
49
56
  scheduled with \a exec_ctx, so it must not try to acquire locks that are
50
57
  being held by the caller. */
51
- extern grpc_ares_request* (*grpc_dns_lookup_ares)(
58
+ extern grpc_ares_request* (*grpc_dns_lookup_ares_locked)(
52
59
  const char* dns_server, const char* name, const char* default_port,
53
60
  grpc_pollset_set* interested_parties, grpc_closure* on_done,
54
61
  grpc_lb_addresses** addresses, bool check_grpclb,
55
- char** service_config_json);
62
+ char** service_config_json, grpc_combiner* combiner);
56
63
 
57
64
  /* Cancel the pending grpc_ares_request \a request */
58
65
  void grpc_cancel_ares_request(grpc_ares_request* request);
@@ -66,6 +73,14 @@ grpc_error* grpc_ares_init(void);
66
73
  it has been called the same number of times as grpc_ares_init(). */
67
74
  void grpc_ares_cleanup(void);
68
75
 
76
+ /** Schedules the desired callback for request completion
77
+ * and destroys the grpc_ares_request */
78
+ void grpc_ares_complete_request_locked(grpc_ares_request* request);
79
+
80
+ /* Indicates whether or not AAAA queries should be attempted. */
81
+ /* E.g., return false if ipv6 is known to not be available. */
82
+ bool grpc_ares_query_ipv6();
83
+
69
84
  /* Exposed only for testing */
70
85
  void grpc_cares_wrapper_test_only_address_sorting_sort(
71
86
  grpc_lb_addresses* lb_addrs);
@@ -26,18 +26,19 @@ struct grpc_ares_request {
26
26
  char val;
27
27
  };
28
28
 
29
- static grpc_ares_request* grpc_dns_lookup_ares_impl(
29
+ static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
30
30
  const char* dns_server, const char* name, const char* default_port,
31
31
  grpc_pollset_set* interested_parties, grpc_closure* on_done,
32
- grpc_lb_addresses** addrs, bool check_grpclb, char** service_config_json) {
32
+ grpc_lb_addresses** addrs, bool check_grpclb, char** service_config_json,
33
+ grpc_combiner* combiner) {
33
34
  return NULL;
34
35
  }
35
36
 
36
- grpc_ares_request* (*grpc_dns_lookup_ares)(
37
+ grpc_ares_request* (*grpc_dns_lookup_ares_locked)(
37
38
  const char* dns_server, const char* name, const char* default_port,
38
39
  grpc_pollset_set* interested_parties, grpc_closure* on_done,
39
- grpc_lb_addresses** addrs, bool check_grpclb,
40
- char** service_config_json) = grpc_dns_lookup_ares_impl;
40
+ grpc_lb_addresses** addrs, bool check_grpclb, char** service_config_json,
41
+ grpc_combiner* combiner) = grpc_dns_lookup_ares_locked_impl;
41
42
 
42
43
  void grpc_cancel_ares_request(grpc_ares_request* r) {}
43
44