grpc 1.43.1 → 1.44.0.pre2

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 (382) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +84 -64
  3. data/include/grpc/grpc_security.h +10 -0
  4. data/include/grpc/impl/codegen/compression_types.h +0 -2
  5. data/include/grpc/impl/codegen/grpc_types.h +6 -0
  6. data/src/core/ext/filters/client_channel/backend_metric.h +1 -1
  7. data/src/core/ext/filters/client_channel/client_channel.cc +62 -68
  8. data/src/core/ext/filters/client_channel/client_channel.h +8 -8
  9. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  10. data/src/core/ext/filters/client_channel/config_selector.h +4 -4
  11. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -14
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  16. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +3 -7
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +31 -32
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +43 -29
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +120 -68
  26. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +60 -48
  27. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
  28. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
  29. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -5
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +19 -15
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +14 -12
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +3 -2
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +50 -105
  35. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  36. data/src/core/ext/filters/client_channel/lb_policy.h +19 -3
  37. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -3
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +207 -81
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +23 -38
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +118 -207
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +82 -73
  46. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +10 -10
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  48. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -5
  49. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  50. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +157 -67
  51. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  52. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
  53. data/src/core/ext/filters/client_channel/retry_filter.cc +37 -64
  54. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  55. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  56. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
  57. data/src/core/ext/filters/client_channel/subchannel.cc +12 -16
  58. data/src/core/ext/filters/client_channel/subchannel.h +2 -3
  59. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +37 -48
  60. data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -8
  61. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  62. data/src/core/ext/filters/http/client/http_client_filter.cc +51 -122
  63. data/src/core/ext/filters/http/client_authority_filter.cc +8 -24
  64. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -140
  65. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
  66. data/src/core/ext/filters/http/server/http_server_filter.cc +50 -135
  67. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  68. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  69. data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
  70. data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
  71. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
  72. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
  73. data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -2
  74. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +11 -6
  75. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +1 -1
  76. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +1 -1
  77. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +89 -29
  78. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
  79. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +45 -186
  80. data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
  81. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +341 -279
  82. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +69 -159
  83. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
  84. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  85. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +19 -32
  86. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
  87. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
  88. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
  89. data/src/core/ext/transport/chttp2/transport/internal.h +0 -33
  90. data/src/core/ext/transport/chttp2/transport/parsing.cc +0 -6
  91. data/src/core/ext/transport/chttp2/transport/writing.cc +47 -116
  92. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  93. data/src/core/ext/transport/inproc/inproc_transport.cc +11 -63
  94. data/src/core/ext/transport/inproc/inproc_transport.h +0 -3
  95. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
  96. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
  97. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
  98. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  99. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
  100. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  101. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  102. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  103. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
  104. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
  105. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
  106. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
  107. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  108. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  109. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
  110. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
  111. data/src/core/ext/xds/upb_utils.h +65 -0
  112. data/src/core/ext/xds/xds_api.cc +81 -3458
  113. data/src/core/ext/xds/xds_api.h +56 -611
  114. data/src/core/ext/xds/xds_bootstrap.cc +189 -125
  115. data/src/core/ext/xds/xds_bootstrap.h +20 -15
  116. data/src/core/ext/xds/xds_certificate_provider.h +1 -0
  117. data/src/core/ext/xds/xds_channel_creds.cc +108 -0
  118. data/src/core/ext/xds/xds_channel_creds.h +50 -0
  119. data/src/core/ext/xds/xds_client.cc +584 -994
  120. data/src/core/ext/xds/xds_client.h +78 -135
  121. data/src/core/ext/xds/xds_cluster.cc +451 -0
  122. data/src/core/ext/xds/xds_cluster.h +111 -0
  123. data/src/core/ext/xds/xds_common_types.cc +388 -0
  124. data/src/core/ext/xds/xds_common_types.h +110 -0
  125. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  126. data/src/core/ext/xds/xds_endpoint.h +135 -0
  127. data/src/core/ext/xds/xds_http_filters.cc +5 -0
  128. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  129. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  130. data/src/core/ext/xds/xds_listener.cc +1036 -0
  131. data/src/core/ext/xds/xds_listener.h +220 -0
  132. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
  133. data/src/core/ext/xds/xds_resource_type.h +98 -0
  134. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  135. data/src/core/ext/xds/xds_route_config.cc +993 -0
  136. data/src/core/ext/xds/xds_route_config.h +215 -0
  137. data/src/core/ext/xds/xds_routing.cc +11 -8
  138. data/src/core/ext/xds/xds_routing.h +8 -5
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +159 -99
  140. data/src/core/lib/address_utils/parse_address.cc +20 -0
  141. data/src/core/lib/address_utils/parse_address.h +5 -0
  142. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  143. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  144. data/src/core/lib/backoff/backoff.cc +4 -30
  145. data/src/core/lib/backoff/backoff.h +3 -3
  146. data/src/core/lib/channel/channel_args.cc +0 -1
  147. data/src/core/lib/channel/channel_stack.cc +8 -0
  148. data/src/core/lib/channel/channel_stack.h +1 -1
  149. data/src/core/lib/channel/channel_stack_builder.cc +5 -9
  150. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  151. data/src/core/lib/channel/channelz.cc +1 -0
  152. data/src/core/lib/compression/compression.cc +19 -111
  153. data/src/core/lib/compression/compression_internal.cc +142 -202
  154. data/src/core/lib/compression/compression_internal.h +64 -69
  155. data/src/core/lib/compression/message_compress.cc +11 -11
  156. data/src/core/lib/compression/message_compress.h +2 -2
  157. data/src/core/lib/gpr/useful.h +4 -0
  158. data/src/core/lib/gprpp/bitset.h +7 -0
  159. data/src/core/lib/gprpp/chunked_vector.h +45 -3
  160. data/src/core/lib/gprpp/status_helper.cc +20 -28
  161. data/src/core/lib/gprpp/status_helper.h +6 -19
  162. data/src/core/lib/gprpp/table.h +11 -0
  163. data/src/core/lib/http/httpcli.cc +37 -46
  164. data/src/core/lib/http/httpcli.h +3 -15
  165. data/src/core/lib/iomgr/call_combiner.cc +15 -4
  166. data/src/core/lib/iomgr/closure.h +29 -9
  167. data/src/core/lib/iomgr/combiner.cc +25 -3
  168. data/src/core/lib/iomgr/error.cc +2 -0
  169. data/src/core/lib/iomgr/error.h +3 -0
  170. data/src/core/lib/iomgr/event_engine/iomgr.cc +3 -2
  171. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  172. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  173. data/src/core/lib/iomgr/event_engine/resolver.cc +66 -48
  174. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  175. data/src/core/lib/iomgr/exec_ctx.cc +22 -9
  176. data/src/core/lib/iomgr/executor.cc +10 -1
  177. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  178. data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
  179. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  180. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  181. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  182. data/src/core/lib/iomgr/port.h +2 -2
  183. data/src/core/lib/iomgr/resolve_address.cc +5 -24
  184. data/src/core/lib/iomgr/resolve_address.h +47 -44
  185. data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
  186. data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
  187. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  188. data/src/core/lib/iomgr/resolve_address_posix.cc +82 -66
  189. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  190. data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
  191. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  192. data/src/core/lib/iomgr/resolved_address.h +39 -0
  193. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
  194. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
  195. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  196. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  197. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  198. data/src/core/lib/matchers/matchers.cc +1 -1
  199. data/src/core/lib/promise/activity.h +49 -20
  200. data/src/core/lib/promise/detail/status.h +5 -0
  201. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  202. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  203. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +10 -5
  204. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +3 -2
  205. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +4 -5
  206. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  207. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
  208. data/src/core/lib/resource_quota/api.h +0 -1
  209. data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
  210. data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
  211. data/src/core/lib/security/authorization/evaluate_args.cc +30 -15
  212. data/src/core/lib/security/authorization/evaluate_args.h +1 -0
  213. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  214. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  215. data/src/core/lib/security/authorization/matchers.cc +227 -0
  216. data/src/core/lib/security/authorization/matchers.h +211 -0
  217. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  218. data/src/core/lib/security/authorization/rbac_policy.h +170 -0
  219. data/src/core/lib/security/context/security_context.cc +4 -2
  220. data/src/core/lib/security/context/security_context.h +1 -1
  221. data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -5
  222. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
  223. data/src/core/lib/security/credentials/credentials.h +10 -20
  224. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +6 -9
  225. data/src/core/lib/security/credentials/external/external_account_credentials.cc +7 -9
  226. data/src/core/lib/security/credentials/external/external_account_credentials.h +2 -7
  227. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -3
  228. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  229. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
  230. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -5
  231. data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
  232. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
  233. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
  234. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +16 -28
  235. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
  236. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +6 -13
  237. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +44 -57
  238. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
  239. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
  240. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
  241. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
  242. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +6 -0
  243. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +7 -0
  244. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  245. data/src/core/lib/security/security_connector/security_connector.cc +0 -4
  246. data/src/core/lib/security/security_connector/security_connector.h +5 -1
  247. data/src/core/lib/security/security_connector/ssl_utils.cc +14 -24
  248. data/src/core/lib/security/security_connector/ssl_utils.h +5 -14
  249. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +2 -3
  250. data/src/core/lib/security/transport/auth_filters.h +7 -0
  251. data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
  252. data/src/core/lib/security/transport/server_auth_filter.cc +40 -35
  253. data/src/core/{ext → lib}/service_config/service_config.cc +2 -2
  254. data/src/core/{ext → lib}/service_config/service_config.h +4 -4
  255. data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
  256. data/src/core/{ext → lib}/service_config/service_config_parser.cc +1 -1
  257. data/src/core/{ext → lib}/service_config/service_config_parser.h +3 -3
  258. data/src/core/lib/slice/slice.cc +3 -1
  259. data/src/core/lib/slice/slice.h +43 -13
  260. data/src/core/lib/slice/slice_intern.cc +3 -101
  261. data/src/core/lib/slice/slice_internal.h +1 -2
  262. data/src/core/lib/slice/slice_refcount.h +4 -13
  263. data/src/core/lib/slice/slice_refcount_base.h +0 -16
  264. data/src/core/lib/surface/call.cc +140 -382
  265. data/src/core/lib/surface/call.h +4 -4
  266. data/src/core/lib/surface/channel.cc +42 -44
  267. data/src/core/lib/surface/channel.h +4 -4
  268. data/src/core/lib/surface/init.cc +0 -2
  269. data/src/core/lib/surface/lame_client.cc +0 -1
  270. data/src/core/lib/surface/server.cc +12 -29
  271. data/src/core/lib/surface/server.h +2 -2
  272. data/src/core/lib/surface/version.cc +2 -2
  273. data/src/core/lib/transport/error_utils.h +14 -0
  274. data/src/core/lib/transport/metadata_batch.h +799 -717
  275. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  276. data/src/core/lib/transport/parsed_metadata.h +95 -92
  277. data/src/core/lib/transport/timeout_encoding.cc +200 -66
  278. data/src/core/lib/transport/timeout_encoding.h +40 -10
  279. data/src/core/lib/transport/transport.h +1 -1
  280. data/src/core/lib/transport/transport_op_string.cc +6 -39
  281. data/src/core/lib/uri/uri_parser.cc +223 -53
  282. data/src/core/lib/uri/uri_parser.h +36 -23
  283. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -3
  284. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  285. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  286. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
  287. data/src/core/tsi/ssl_transport_security.cc +53 -13
  288. data/src/core/tsi/ssl_transport_security.h +18 -6
  289. data/src/ruby/ext/grpc/extconf.rb +10 -3
  290. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  291. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  292. data/src/ruby/lib/grpc/version.rb +1 -1
  293. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  294. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  295. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  296. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  297. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  298. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  299. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  300. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  301. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  302. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  303. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  304. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  305. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  306. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  307. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  308. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  309. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  310. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  311. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  312. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  313. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  314. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  315. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  316. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  317. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  318. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  319. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  320. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  321. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  322. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  323. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  324. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  325. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  326. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  327. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  328. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  329. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  330. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  331. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  332. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  333. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  334. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  335. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  336. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  337. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  338. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  339. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  340. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  341. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  342. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  343. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  344. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  345. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  346. data/third_party/boringssl-with-bazel/src/crypto/mem.c +1 -1
  347. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  348. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  349. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  350. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  351. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  352. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  353. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -0
  354. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  355. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +9 -4
  356. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  357. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +23 -2
  358. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  359. data/third_party/xxhash/xxhash.h +607 -352
  360. metadata +149 -77
  361. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  362. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  363. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  364. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  365. data/src/core/lib/compression/compression_args.cc +0 -140
  366. data/src/core/lib/compression/compression_args.h +0 -58
  367. data/src/core/lib/compression/stream_compression.cc +0 -81
  368. data/src/core/lib/compression/stream_compression.h +0 -117
  369. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  370. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  371. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  372. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  373. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  374. data/src/core/lib/slice/static_slice.cc +0 -377
  375. data/src/core/lib/slice/static_slice.h +0 -300
  376. data/src/core/lib/transport/metadata.cc +0 -714
  377. data/src/core/lib/transport/metadata.h +0 -449
  378. data/src/core/lib/transport/metadata_batch.cc +0 -99
  379. data/src/core/lib/transport/static_metadata.cc +0 -1032
  380. data/src/core/lib/transport/static_metadata.h +0 -322
  381. data/src/core/lib/transport/status_metadata.cc +0 -63
  382. data/src/core/lib/transport/status_metadata.h +0 -48
@@ -57,55 +57,63 @@ grpc_core::TraceFlag grpc_trace_cares_address_sorting(false,
57
57
  grpc_core::TraceFlag grpc_trace_cares_resolver(false, "cares_resolver");
58
58
 
59
59
  typedef struct fd_node {
60
+ /* default constructor exists only for linked list manipulation */
61
+ fd_node() : ev_driver(nullptr) {}
62
+
63
+ explicit fd_node(grpc_ares_ev_driver* ev_driver) : ev_driver(ev_driver) {}
64
+
60
65
  /** the owner of this fd node */
61
- grpc_ares_ev_driver* ev_driver;
66
+ grpc_ares_ev_driver* const ev_driver;
62
67
  /** a closure wrapping on_readable_locked, which should be
63
68
  invoked when the grpc_fd in this node becomes readable. */
64
- grpc_closure read_closure;
69
+ grpc_closure read_closure ABSL_GUARDED_BY(&grpc_ares_request::mu);
65
70
  /** a closure wrapping on_writable_locked, which should be
66
71
  invoked when the grpc_fd in this node becomes writable. */
67
- grpc_closure write_closure;
72
+ grpc_closure write_closure ABSL_GUARDED_BY(&grpc_ares_request::mu);
68
73
  /** next fd node in the list */
69
- struct fd_node* next;
74
+ struct fd_node* next ABSL_GUARDED_BY(&grpc_ares_request::mu);
70
75
 
71
76
  /** wrapped fd that's polled by grpc's poller for the current platform */
72
- grpc_core::GrpcPolledFd* grpc_polled_fd;
77
+ grpc_core::GrpcPolledFd* grpc_polled_fd
78
+ ABSL_GUARDED_BY(&grpc_ares_request::mu);
73
79
  /** if the readable closure has been registered */
74
- bool readable_registered;
80
+ bool readable_registered ABSL_GUARDED_BY(&grpc_ares_request::mu);
75
81
  /** if the writable closure has been registered */
76
- bool writable_registered;
82
+ bool writable_registered ABSL_GUARDED_BY(&grpc_ares_request::mu);
77
83
  /** if the fd has been shutdown yet from grpc iomgr perspective */
78
- bool already_shutdown;
84
+ bool already_shutdown ABSL_GUARDED_BY(&grpc_ares_request::mu);
79
85
  } fd_node;
80
86
 
81
87
  struct grpc_ares_ev_driver {
88
+ explicit grpc_ares_ev_driver(grpc_ares_request* request) : request(request) {}
89
+
82
90
  /** the ares_channel owned by this event driver */
83
- ares_channel channel;
91
+ ares_channel channel ABSL_GUARDED_BY(&grpc_ares_request::mu);
84
92
  /** pollset set for driving the IO events of the channel */
85
- grpc_pollset_set* pollset_set;
93
+ grpc_pollset_set* pollset_set ABSL_GUARDED_BY(&grpc_ares_request::mu);
86
94
  /** refcount of the event driver */
87
95
  gpr_refcount refs;
88
96
 
89
- /** work_serializer to synchronize c-ares and I/O callbacks on */
90
- std::shared_ptr<grpc_core::WorkSerializer> work_serializer;
91
97
  /** a list of grpc_fd that this event driver is currently using. */
92
- fd_node* fds;
98
+ fd_node* fds ABSL_GUARDED_BY(&grpc_ares_request::mu);
93
99
  /** is this event driver being shut down */
94
- bool shutting_down;
100
+ bool shutting_down ABSL_GUARDED_BY(&grpc_ares_request::mu);
95
101
  /** request object that's using this ev driver */
96
- grpc_ares_request* request;
102
+ grpc_ares_request* const request;
97
103
  /** Owned by the ev_driver. Creates new GrpcPolledFd's */
98
- std::unique_ptr<grpc_core::GrpcPolledFdFactory> polled_fd_factory;
104
+ std::unique_ptr<grpc_core::GrpcPolledFdFactory> polled_fd_factory
105
+ ABSL_GUARDED_BY(&grpc_ares_request::mu);
99
106
  /** query timeout in milliseconds */
100
- int query_timeout_ms;
107
+ int query_timeout_ms ABSL_GUARDED_BY(&grpc_ares_request::mu);
101
108
  /** alarm to cancel active queries */
102
- grpc_timer query_timeout;
109
+ grpc_timer query_timeout ABSL_GUARDED_BY(&grpc_ares_request::mu);
103
110
  /** cancels queries on a timeout */
104
- grpc_closure on_timeout_locked;
111
+ grpc_closure on_timeout_locked ABSL_GUARDED_BY(&grpc_ares_request::mu);
105
112
  /** alarm to poll ares_process on in case fd events don't happen */
106
- grpc_timer ares_backup_poll_alarm;
113
+ grpc_timer ares_backup_poll_alarm ABSL_GUARDED_BY(&grpc_ares_request::mu);
107
114
  /** polls ares_process on a periodic timer */
108
- grpc_closure on_ares_backup_poll_alarm_locked;
115
+ grpc_closure on_ares_backup_poll_alarm_locked
116
+ ABSL_GUARDED_BY(&grpc_ares_request::mu);
109
117
  };
110
118
 
111
119
  // TODO(apolcyn): make grpc_ares_hostbyname_request a sub-class
@@ -125,8 +133,10 @@ typedef struct grpc_ares_hostbyname_request {
125
133
  const char* qtype;
126
134
  } grpc_ares_hostbyname_request;
127
135
 
128
- static void grpc_ares_request_ref_locked(grpc_ares_request* r);
129
- static void grpc_ares_request_unref_locked(grpc_ares_request* r);
136
+ static void grpc_ares_request_ref_locked(grpc_ares_request* r)
137
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(r->mu);
138
+ static void grpc_ares_request_unref_locked(grpc_ares_request* r)
139
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(r->mu);
130
140
 
131
141
  // TODO(apolcyn): as a part of C++-ification, find a way to
132
142
  // organize per-query and per-resolution information in such a way
@@ -153,14 +163,19 @@ class GrpcAresQuery {
153
163
  };
154
164
 
155
165
  static grpc_ares_ev_driver* grpc_ares_ev_driver_ref(
156
- grpc_ares_ev_driver* ev_driver) {
166
+ grpc_ares_ev_driver* ev_driver)
167
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) {
157
168
  GRPC_CARES_TRACE_LOG("request:%p Ref ev_driver %p", ev_driver->request,
158
169
  ev_driver);
159
170
  gpr_ref(&ev_driver->refs);
160
171
  return ev_driver;
161
172
  }
162
173
 
163
- static void grpc_ares_ev_driver_unref(grpc_ares_ev_driver* ev_driver) {
174
+ static void grpc_ares_complete_request_locked(grpc_ares_request* r)
175
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(r->mu);
176
+
177
+ static void grpc_ares_ev_driver_unref(grpc_ares_ev_driver* ev_driver)
178
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) {
164
179
  GRPC_CARES_TRACE_LOG("request:%p Unref ev_driver %p", ev_driver->request,
165
180
  ev_driver);
166
181
  if (gpr_unref(&ev_driver->refs)) {
@@ -173,17 +188,19 @@ static void grpc_ares_ev_driver_unref(grpc_ares_ev_driver* ev_driver) {
173
188
  }
174
189
  }
175
190
 
176
- static void fd_node_destroy_locked(fd_node* fdn) {
191
+ static void fd_node_destroy_locked(fd_node* fdn)
192
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) {
177
193
  GRPC_CARES_TRACE_LOG("request:%p delete fd: %s", fdn->ev_driver->request,
178
194
  fdn->grpc_polled_fd->GetName());
179
195
  GPR_ASSERT(!fdn->readable_registered);
180
196
  GPR_ASSERT(!fdn->writable_registered);
181
197
  GPR_ASSERT(fdn->already_shutdown);
182
198
  delete fdn->grpc_polled_fd;
183
- gpr_free(fdn);
199
+ delete fdn;
184
200
  }
185
201
 
186
- static void fd_node_shutdown_locked(fd_node* fdn, const char* reason) {
202
+ static void fd_node_shutdown_locked(fd_node* fdn, const char* reason)
203
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) {
187
204
  if (!fdn->already_shutdown) {
188
205
  fdn->already_shutdown = true;
189
206
  fdn->grpc_polled_fd->ShutdownLocked(
@@ -192,7 +209,8 @@ static void fd_node_shutdown_locked(fd_node* fdn, const char* reason) {
192
209
  }
193
210
 
194
211
  void grpc_ares_ev_driver_on_queries_complete_locked(
195
- grpc_ares_ev_driver* ev_driver) {
212
+ grpc_ares_ev_driver* ev_driver)
213
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) {
196
214
  // We mark the event driver as being shut down.
197
215
  // grpc_ares_notify_on_event_locked will shut down any remaining
198
216
  // fds.
@@ -202,7 +220,8 @@ void grpc_ares_ev_driver_on_queries_complete_locked(
202
220
  grpc_ares_ev_driver_unref(ev_driver);
203
221
  }
204
222
 
205
- void grpc_ares_ev_driver_shutdown_locked(grpc_ares_ev_driver* ev_driver) {
223
+ void grpc_ares_ev_driver_shutdown_locked(grpc_ares_ev_driver* ev_driver)
224
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) {
206
225
  ev_driver->shutting_down = true;
207
226
  fd_node* fn = ev_driver->fds;
208
227
  while (fn != nullptr) {
@@ -213,7 +232,8 @@ void grpc_ares_ev_driver_shutdown_locked(grpc_ares_ev_driver* ev_driver) {
213
232
 
214
233
  // Search fd in the fd_node list head. This is an O(n) search, the max possible
215
234
  // value of n is ARES_GETSOCK_MAXNUM (16). n is typically 1 - 2 in our tests.
216
- static fd_node* pop_fd_node_locked(fd_node** head, ares_socket_t as) {
235
+ static fd_node* pop_fd_node_locked(fd_node** head, ares_socket_t as)
236
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) {
217
237
  fd_node phony_head;
218
238
  phony_head.next = *head;
219
239
  fd_node* node = &phony_head;
@@ -230,7 +250,8 @@ static fd_node* pop_fd_node_locked(fd_node** head, ares_socket_t as) {
230
250
  }
231
251
 
232
252
  static grpc_millis calculate_next_ares_backup_poll_alarm_ms(
233
- grpc_ares_ev_driver* driver) {
253
+ grpc_ares_ev_driver* driver)
254
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) {
234
255
  // An alternative here could be to use ares_timeout to try to be more
235
256
  // accurate, but that would require using "struct timeval"'s, which just makes
236
257
  // things a bit more complicated. So just poll every second, as suggested
@@ -244,8 +265,9 @@ static grpc_millis calculate_next_ares_backup_poll_alarm_ms(
244
265
  grpc_core::ExecCtx::Get()->Now();
245
266
  }
246
267
 
247
- static void on_timeout_locked(grpc_ares_ev_driver* driver,
248
- grpc_error_handle error) {
268
+ static void on_timeout(void* arg, grpc_error_handle error) {
269
+ grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
270
+ grpc_core::MutexLock lock(&driver->request->mu);
249
271
  GRPC_CARES_TRACE_LOG(
250
272
  "request:%p ev_driver=%p on_timeout_locked. driver->shutting_down=%d. "
251
273
  "err=%s",
@@ -255,28 +277,10 @@ static void on_timeout_locked(grpc_ares_ev_driver* driver,
255
277
  grpc_ares_ev_driver_shutdown_locked(driver);
256
278
  }
257
279
  grpc_ares_ev_driver_unref(driver);
258
- GRPC_ERROR_UNREF(error);
259
280
  }
260
281
 
261
- static void on_timeout(void* arg, grpc_error_handle error) {
262
- grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
263
- (void)GRPC_ERROR_REF(error); // ref owned by lambda
264
- driver->work_serializer->Run(
265
- [driver, error]() { on_timeout_locked(driver, error); }, DEBUG_LOCATION);
266
- }
267
-
268
- static void grpc_ares_notify_on_event_locked(grpc_ares_ev_driver* ev_driver);
269
-
270
- static void on_ares_backup_poll_alarm_locked(grpc_ares_ev_driver* driver,
271
- grpc_error_handle error);
272
-
273
- static void on_ares_backup_poll_alarm(void* arg, grpc_error_handle error) {
274
- grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
275
- (void)GRPC_ERROR_REF(error);
276
- driver->work_serializer->Run(
277
- [driver, error]() { on_ares_backup_poll_alarm_locked(driver, error); },
278
- DEBUG_LOCATION);
279
- }
282
+ static void grpc_ares_notify_on_event_locked(grpc_ares_ev_driver* ev_driver)
283
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu);
280
284
 
281
285
  /* In case of non-responsive DNS servers, dropped packets, etc., c-ares has
282
286
  * intelligent timeout and retry logic, which we can take advantage of by
@@ -286,8 +290,9 @@ static void on_ares_backup_poll_alarm(void* arg, grpc_error_handle error) {
286
290
  * b) when some time has passed without fd events having happened
287
291
  * For the latter, we use this backup poller. Also see
288
292
  * https://github.com/grpc/grpc/pull/17688 description for more details. */
289
- static void on_ares_backup_poll_alarm_locked(grpc_ares_ev_driver* driver,
290
- grpc_error_handle error) {
293
+ static void on_ares_backup_poll_alarm(void* arg, grpc_error_handle error) {
294
+ grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
295
+ grpc_core::MutexLock lock(&driver->request->mu);
291
296
  GRPC_CARES_TRACE_LOG(
292
297
  "request:%p ev_driver=%p on_ares_backup_poll_alarm_locked. "
293
298
  "driver->shutting_down=%d. "
@@ -325,10 +330,11 @@ static void on_ares_backup_poll_alarm_locked(grpc_ares_ev_driver* driver,
325
330
  grpc_ares_notify_on_event_locked(driver);
326
331
  }
327
332
  grpc_ares_ev_driver_unref(driver);
328
- GRPC_ERROR_UNREF(error);
329
333
  }
330
334
 
331
- static void on_readable_locked(fd_node* fdn, grpc_error_handle error) {
335
+ static void on_readable(void* arg, grpc_error_handle error) {
336
+ fd_node* fdn = static_cast<fd_node*>(arg);
337
+ grpc_core::MutexLock lock(&fdn->ev_driver->request->mu);
332
338
  GPR_ASSERT(fdn->readable_registered);
333
339
  grpc_ares_ev_driver* ev_driver = fdn->ev_driver;
334
340
  const ares_socket_t as = fdn->grpc_polled_fd->GetWrappedAresSocketLocked();
@@ -350,17 +356,11 @@ static void on_readable_locked(fd_node* fdn, grpc_error_handle error) {
350
356
  }
351
357
  grpc_ares_notify_on_event_locked(ev_driver);
352
358
  grpc_ares_ev_driver_unref(ev_driver);
353
- GRPC_ERROR_UNREF(error);
354
359
  }
355
360
 
356
- static void on_readable(void* arg, grpc_error_handle error) {
361
+ static void on_writable(void* arg, grpc_error_handle error) {
357
362
  fd_node* fdn = static_cast<fd_node*>(arg);
358
- (void)GRPC_ERROR_REF(error); /* ref owned by lambda */
359
- fdn->ev_driver->work_serializer->Run(
360
- [fdn, error]() { on_readable_locked(fdn, error); }, DEBUG_LOCATION);
361
- }
362
-
363
- static void on_writable_locked(fd_node* fdn, grpc_error_handle error) {
363
+ grpc_core::MutexLock lock(&fdn->ev_driver->request->mu);
364
364
  GPR_ASSERT(fdn->writable_registered);
365
365
  grpc_ares_ev_driver* ev_driver = fdn->ev_driver;
366
366
  const ares_socket_t as = fdn->grpc_polled_fd->GetWrappedAresSocketLocked();
@@ -380,19 +380,12 @@ static void on_writable_locked(fd_node* fdn, grpc_error_handle error) {
380
380
  }
381
381
  grpc_ares_notify_on_event_locked(ev_driver);
382
382
  grpc_ares_ev_driver_unref(ev_driver);
383
- GRPC_ERROR_UNREF(error);
384
- }
385
-
386
- static void on_writable(void* arg, grpc_error_handle error) {
387
- fd_node* fdn = static_cast<fd_node*>(arg);
388
- (void)GRPC_ERROR_REF(error); /* ref owned by lambda */
389
- fdn->ev_driver->work_serializer->Run(
390
- [fdn, error]() { on_writable_locked(fdn, error); }, DEBUG_LOCATION);
391
383
  }
392
384
 
393
385
  // Get the file descriptors used by the ev_driver's ares channel, register
394
386
  // driver_closure with these filedescriptors.
395
- static void grpc_ares_notify_on_event_locked(grpc_ares_ev_driver* ev_driver) {
387
+ static void grpc_ares_notify_on_event_locked(grpc_ares_ev_driver* ev_driver)
388
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) {
396
389
  fd_node* new_list = nullptr;
397
390
  if (!ev_driver->shutting_down) {
398
391
  ares_socket_t socks[ARES_GETSOCK_MAXNUM];
@@ -404,13 +397,12 @@ static void grpc_ares_notify_on_event_locked(grpc_ares_ev_driver* ev_driver) {
404
397
  fd_node* fdn = pop_fd_node_locked(&ev_driver->fds, socks[i]);
405
398
  // Create a new fd_node if sock[i] is not in the fd_node list.
406
399
  if (fdn == nullptr) {
407
- fdn = static_cast<fd_node*>(gpr_malloc(sizeof(fd_node)));
400
+ fdn = new fd_node(ev_driver);
408
401
  fdn->grpc_polled_fd =
409
402
  ev_driver->polled_fd_factory->NewGrpcPolledFdLocked(
410
- socks[i], ev_driver->pollset_set, ev_driver->work_serializer);
403
+ socks[i], ev_driver->pollset_set);
411
404
  GRPC_CARES_TRACE_LOG("request:%p new fd: %s", ev_driver->request,
412
405
  fdn->grpc_polled_fd->GetName());
413
- fdn->ev_driver = ev_driver;
414
406
  fdn->readable_registered = false;
415
407
  fdn->writable_registered = false;
416
408
  fdn->already_shutdown = false;
@@ -466,7 +458,8 @@ static void grpc_ares_notify_on_event_locked(grpc_ares_ev_driver* ev_driver) {
466
458
  ev_driver->fds = new_list;
467
459
  }
468
460
 
469
- void grpc_ares_ev_driver_start_locked(grpc_ares_ev_driver* ev_driver) {
461
+ void grpc_ares_ev_driver_start_locked(grpc_ares_ev_driver* ev_driver)
462
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) {
470
463
  grpc_ares_notify_on_event_locked(ev_driver);
471
464
  // Initialize overall DNS resolution timeout alarm
472
465
  grpc_millis timeout =
@@ -501,10 +494,9 @@ void (*grpc_ares_test_only_inject_config)(ares_channel channel) =
501
494
 
502
495
  grpc_error_handle grpc_ares_ev_driver_create_locked(
503
496
  grpc_ares_ev_driver** ev_driver, grpc_pollset_set* pollset_set,
504
- int query_timeout_ms,
505
- std::shared_ptr<grpc_core::WorkSerializer> work_serializer,
506
- grpc_ares_request* request) {
507
- *ev_driver = new grpc_ares_ev_driver();
497
+ int query_timeout_ms, grpc_ares_request* request)
498
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(request->mu) {
499
+ *ev_driver = new grpc_ares_ev_driver(request);
508
500
  ares_options opts;
509
501
  memset(&opts, 0, sizeof(opts));
510
502
  opts.flags |= ARES_FLAG_STAYOPEN;
@@ -514,17 +506,15 @@ grpc_error_handle grpc_ares_ev_driver_create_locked(
514
506
  if (status != ARES_SUCCESS) {
515
507
  grpc_error_handle err = GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
516
508
  "Failed to init ares channel. C-ares error: ", ares_strerror(status)));
517
- gpr_free(*ev_driver);
509
+ delete *ev_driver;
518
510
  return err;
519
511
  }
520
- (*ev_driver)->work_serializer = std::move(work_serializer);
521
512
  gpr_ref_init(&(*ev_driver)->refs, 1);
522
513
  (*ev_driver)->pollset_set = pollset_set;
523
514
  (*ev_driver)->fds = nullptr;
524
515
  (*ev_driver)->shutting_down = false;
525
- (*ev_driver)->request = request;
526
516
  (*ev_driver)->polled_fd_factory =
527
- grpc_core::NewGrpcPolledFdFactory((*ev_driver)->work_serializer);
517
+ grpc_core::NewGrpcPolledFdFactory(&(*ev_driver)->request->mu);
528
518
  (*ev_driver)
529
519
  ->polled_fd_factory->ConfigureAresChannelLocked((*ev_driver)->channel);
530
520
  (*ev_driver)->query_timeout_ms = query_timeout_ms;
@@ -570,18 +560,21 @@ void grpc_cares_wrapper_address_sorting_sort(const grpc_ares_request* r,
570
560
  }
571
561
  }
572
562
 
573
- static void grpc_ares_request_ref_locked(grpc_ares_request* r) {
563
+ static void grpc_ares_request_ref_locked(grpc_ares_request* r)
564
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(r->mu) {
574
565
  r->pending_queries++;
575
566
  }
576
567
 
577
- static void grpc_ares_request_unref_locked(grpc_ares_request* r) {
568
+ static void grpc_ares_request_unref_locked(grpc_ares_request* r)
569
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(r->mu) {
578
570
  r->pending_queries--;
579
571
  if (r->pending_queries == 0u) {
580
572
  grpc_ares_ev_driver_on_queries_complete_locked(r->ev_driver);
581
573
  }
582
574
  }
583
575
 
584
- void grpc_ares_complete_request_locked(grpc_ares_request* r) {
576
+ void grpc_ares_complete_request_locked(grpc_ares_request* r)
577
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(r->mu) {
585
578
  /* Invoke on_done callback and destroy the
586
579
  request */
587
580
  r->ev_driver = nullptr;
@@ -606,7 +599,8 @@ void grpc_ares_complete_request_locked(grpc_ares_request* r) {
606
599
  * qtype must outlive it. */
607
600
  static grpc_ares_hostbyname_request* create_hostbyname_request_locked(
608
601
  grpc_ares_request* parent_request, const char* host, uint16_t port,
609
- bool is_balancer, const char* qtype) {
602
+ bool is_balancer, const char* qtype)
603
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(parent_request->mu) {
610
604
  GRPC_CARES_TRACE_LOG(
611
605
  "request:%p create_hostbyname_request_locked host:%s port:%d "
612
606
  "is_balancer:%d qtype:%s",
@@ -621,15 +615,18 @@ static grpc_ares_hostbyname_request* create_hostbyname_request_locked(
621
615
  return hr;
622
616
  }
623
617
 
624
- static void destroy_hostbyname_request_locked(
625
- grpc_ares_hostbyname_request* hr) {
618
+ static void destroy_hostbyname_request_locked(grpc_ares_hostbyname_request* hr)
619
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(hr->parent_request->mu) {
626
620
  grpc_ares_request_unref_locked(hr->parent_request);
627
621
  gpr_free(hr->host);
628
622
  delete hr;
629
623
  }
630
624
 
631
625
  static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
632
- struct hostent* hostent) {
626
+ struct hostent* hostent)
627
+ ABSL_NO_THREAD_SAFETY_ANALYSIS {
628
+ // This callback is invoked from the c-ares library, so disable thread safety
629
+ // analysis. Note that we are guaranteed to be holding r->mu, though.
633
630
  grpc_ares_hostbyname_request* hr =
634
631
  static_cast<grpc_ares_hostbyname_request*>(arg);
635
632
  grpc_ares_request* r = hr->parent_request;
@@ -702,7 +699,10 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
702
699
  }
703
700
 
704
701
  static void on_srv_query_done_locked(void* arg, int status, int /*timeouts*/,
705
- unsigned char* abuf, int alen) {
702
+ unsigned char* abuf,
703
+ int alen) ABSL_NO_THREAD_SAFETY_ANALYSIS {
704
+ // This callback is invoked from the c-ares library, so disable thread safety
705
+ // analysis. Note that we are guaranteed to be holding r->mu, though.
706
706
  GrpcAresQuery* q = static_cast<GrpcAresQuery*>(arg);
707
707
  grpc_ares_request* r = q->parent_request();
708
708
  if (status == ARES_SUCCESS) {
@@ -749,7 +749,10 @@ static void on_srv_query_done_locked(void* arg, int status, int /*timeouts*/,
749
749
  static const char g_service_config_attribute_prefix[] = "grpc_config=";
750
750
 
751
751
  static void on_txt_done_locked(void* arg, int status, int /*timeouts*/,
752
- unsigned char* buf, int len) {
752
+ unsigned char* buf,
753
+ int len) ABSL_NO_THREAD_SAFETY_ANALYSIS {
754
+ // This callback is invoked from the c-ares library, so disable thread safety
755
+ // analysis. Note that we are guaranteed to be holding r->mu, though.
753
756
  GrpcAresQuery* q = static_cast<GrpcAresQuery*>(arg);
754
757
  std::unique_ptr<GrpcAresQuery> query_deleter(q);
755
758
  grpc_ares_request* r = q->parent_request();
@@ -806,8 +809,7 @@ fail:
806
809
  void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
807
810
  grpc_ares_request* r, const char* dns_server, const char* name,
808
811
  const char* default_port, grpc_pollset_set* interested_parties,
809
- int query_timeout_ms,
810
- std::shared_ptr<grpc_core::WorkSerializer> work_serializer) {
812
+ int query_timeout_ms) ABSL_EXCLUSIVE_LOCKS_REQUIRED(r->mu) {
811
813
  grpc_error_handle error = GRPC_ERROR_NONE;
812
814
  grpc_ares_hostbyname_request* hr = nullptr;
813
815
  /* parse name, splitting it into host and port parts */
@@ -820,7 +822,7 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
820
822
  GRPC_ERROR_STR_TARGET_ADDRESS, name);
821
823
  goto error_cleanup;
822
824
  } else if (port.empty()) {
823
- if (default_port == nullptr) {
825
+ if (default_port == nullptr || strlen(default_port) == 0) {
824
826
  error = grpc_error_set_str(
825
827
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("no port in name"),
826
828
  GRPC_ERROR_STR_TARGET_ADDRESS, name);
@@ -829,8 +831,7 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
829
831
  port = default_port;
830
832
  }
831
833
  error = grpc_ares_ev_driver_create_locked(&r->ev_driver, interested_parties,
832
- query_timeout_ms,
833
- std::move(work_serializer), r);
834
+ query_timeout_ms, r);
834
835
  if (error != GRPC_ERROR_NONE) goto error_cleanup;
835
836
  // If dns_server is specified, use it.
836
837
  if (dns_server != nullptr && dns_server[0] != '\0') {
@@ -912,7 +913,7 @@ static bool inner_resolve_as_ip_literal_locked(
912
913
  return false;
913
914
  }
914
915
  if (port->empty()) {
915
- if (default_port == nullptr) {
916
+ if (default_port == nullptr || strlen(default_port) == 0) {
916
917
  gpr_log(GPR_ERROR,
917
918
  "No port or default port for %s while attempting to resolve as "
918
919
  "ip literal.",
@@ -975,7 +976,7 @@ static bool inner_maybe_resolve_localhost_manually_locked(
975
976
  return false;
976
977
  }
977
978
  if (port->empty()) {
978
- if (default_port == nullptr) {
979
+ if (default_port == nullptr || strlen(default_port) == 0) {
979
980
  gpr_log(GPR_ERROR,
980
981
  "No port or default port for %s during manual localhost "
981
982
  "resolution check.",
@@ -1029,21 +1030,21 @@ static bool grpc_ares_maybe_resolve_localhost_manually_locked(
1029
1030
  }
1030
1031
  #endif /* GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY */
1031
1032
 
1032
- static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
1033
+ static grpc_ares_request* grpc_dns_lookup_ares_impl(
1033
1034
  const char* dns_server, const char* name, const char* default_port,
1034
1035
  grpc_pollset_set* interested_parties, grpc_closure* on_done,
1035
1036
  std::unique_ptr<grpc_core::ServerAddressList>* addrs,
1036
1037
  std::unique_ptr<grpc_core::ServerAddressList>* balancer_addrs,
1037
- char** service_config_json, int query_timeout_ms,
1038
- std::shared_ptr<grpc_core::WorkSerializer> work_serializer) {
1038
+ char** service_config_json, int query_timeout_ms) {
1039
1039
  grpc_ares_request* r = new grpc_ares_request();
1040
+ grpc_core::MutexLock lock(&r->mu);
1040
1041
  r->ev_driver = nullptr;
1041
1042
  r->on_done = on_done;
1042
1043
  r->addresses_out = addrs;
1043
1044
  r->balancer_addresses_out = balancer_addrs;
1044
1045
  r->service_config_json_out = service_config_json;
1045
1046
  GRPC_CARES_TRACE_LOG(
1046
- "request:%p c-ares grpc_dns_lookup_ares_locked_impl name=%s, "
1047
+ "request:%p c-ares grpc_dns_lookup_ares_impl name=%s, "
1047
1048
  "default_port=%s",
1048
1049
  r, name, default_port);
1049
1050
  // Early out if the target is an ipv4 or ipv6 literal.
@@ -1066,29 +1067,30 @@ static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
1066
1067
  }
1067
1068
  // Look up name using c-ares lib.
1068
1069
  grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
1069
- r, dns_server, name, default_port, interested_parties, query_timeout_ms,
1070
- std::move(work_serializer));
1070
+ r, dns_server, name, default_port, interested_parties, query_timeout_ms);
1071
1071
  return r;
1072
1072
  }
1073
1073
 
1074
- grpc_ares_request* (*grpc_dns_lookup_ares_locked)(
1074
+ grpc_ares_request* (*grpc_dns_lookup_ares)(
1075
1075
  const char* dns_server, const char* name, const char* default_port,
1076
1076
  grpc_pollset_set* interested_parties, grpc_closure* on_done,
1077
1077
  std::unique_ptr<grpc_core::ServerAddressList>* addrs,
1078
1078
  std::unique_ptr<grpc_core::ServerAddressList>* balancer_addrs,
1079
- char** service_config_json, int query_timeout_ms,
1080
- std::shared_ptr<grpc_core::WorkSerializer> work_serializer) =
1081
- grpc_dns_lookup_ares_locked_impl;
1079
+ char** service_config_json,
1080
+ int query_timeout_ms) = grpc_dns_lookup_ares_impl;
1082
1081
 
1083
- static void grpc_cancel_ares_request_locked_impl(grpc_ares_request* r) {
1082
+ static void grpc_cancel_ares_request_impl(grpc_ares_request* r) {
1084
1083
  GPR_ASSERT(r != nullptr);
1084
+ grpc_core::MutexLock lock(&r->mu);
1085
+ GRPC_CARES_TRACE_LOG("request:%p grpc_cancel_ares_request ev_driver:%p", r,
1086
+ r->ev_driver);
1085
1087
  if (r->ev_driver != nullptr) {
1086
1088
  grpc_ares_ev_driver_shutdown_locked(r->ev_driver);
1087
1089
  }
1088
1090
  }
1089
1091
 
1090
- void (*grpc_cancel_ares_request_locked)(grpc_ares_request* r) =
1091
- grpc_cancel_ares_request_locked_impl;
1092
+ void (*grpc_cancel_ares_request)(grpc_ares_request* r) =
1093
+ grpc_cancel_ares_request_impl;
1092
1094
 
1093
1095
  // ares_library_init and ares_library_cleanup are currently no-op except under
1094
1096
  // Windows. Calling them may cause race conditions when other parts of the
@@ -1109,95 +1111,4 @@ grpc_error_handle grpc_ares_init(void) { return GRPC_ERROR_NONE; }
1109
1111
  void grpc_ares_cleanup(void) {}
1110
1112
  #endif // GPR_WINDOWS
1111
1113
 
1112
- /*
1113
- * grpc_resolve_address_ares related structs and functions
1114
- */
1115
-
1116
- typedef struct grpc_resolve_address_ares_request {
1117
- /* work_serializer that queries and related callbacks run under */
1118
- std::shared_ptr<grpc_core::WorkSerializer> work_serializer;
1119
- /** the pointer to receive the resolved addresses */
1120
- grpc_resolved_addresses** addrs_out;
1121
- /** currently resolving addresses */
1122
- std::unique_ptr<ServerAddressList> addresses;
1123
- /** closure to call when the resolve_address_ares request completes */
1124
- grpc_closure* on_resolve_address_done;
1125
- /** a closure wrapping on_resolve_address_done, which should be invoked when
1126
- the grpc_dns_lookup_ares_locked operation is done. */
1127
- grpc_closure on_dns_lookup_done_locked;
1128
- /* target name */
1129
- const char* name;
1130
- /* default port to use if none is specified */
1131
- const char* default_port;
1132
- /* pollset_set to be driven by */
1133
- grpc_pollset_set* interested_parties;
1134
- /* underlying ares_request that the query is performed on */
1135
- grpc_ares_request* ares_request = nullptr;
1136
- } grpc_resolve_address_ares_request;
1137
-
1138
- static void on_dns_lookup_done_locked(grpc_resolve_address_ares_request* r,
1139
- grpc_error_handle error) {
1140
- delete r->ares_request;
1141
- grpc_resolved_addresses** resolved_addresses = r->addrs_out;
1142
- if (r->addresses == nullptr || r->addresses->empty()) {
1143
- *resolved_addresses = nullptr;
1144
- } else {
1145
- *resolved_addresses = static_cast<grpc_resolved_addresses*>(
1146
- gpr_zalloc(sizeof(grpc_resolved_addresses)));
1147
- (*resolved_addresses)->naddrs = r->addresses->size();
1148
- (*resolved_addresses)->addrs =
1149
- static_cast<grpc_resolved_address*>(gpr_zalloc(
1150
- sizeof(grpc_resolved_address) * (*resolved_addresses)->naddrs));
1151
- for (size_t i = 0; i < (*resolved_addresses)->naddrs; ++i) {
1152
- memcpy(&(*resolved_addresses)->addrs[i], &(*r->addresses)[i].address(),
1153
- sizeof(grpc_resolved_address));
1154
- }
1155
- }
1156
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_resolve_address_done, error);
1157
- delete r;
1158
- }
1159
-
1160
- static void on_dns_lookup_done(void* arg, grpc_error_handle error) {
1161
- grpc_resolve_address_ares_request* r =
1162
- static_cast<grpc_resolve_address_ares_request*>(arg);
1163
- (void)GRPC_ERROR_REF(error); // ref owned by lambda
1164
- r->work_serializer->Run([r, error]() { on_dns_lookup_done_locked(r, error); },
1165
- DEBUG_LOCATION);
1166
- }
1167
-
1168
- static void grpc_resolve_address_invoke_dns_lookup_ares_locked(void* arg) {
1169
- grpc_resolve_address_ares_request* r =
1170
- static_cast<grpc_resolve_address_ares_request*>(arg);
1171
- GRPC_CLOSURE_INIT(&r->on_dns_lookup_done_locked, on_dns_lookup_done, r,
1172
- grpc_schedule_on_exec_ctx);
1173
- r->ares_request = grpc_dns_lookup_ares_locked(
1174
- nullptr /* dns_server */, r->name, r->default_port, r->interested_parties,
1175
- &r->on_dns_lookup_done_locked, &r->addresses,
1176
- nullptr /* balancer_addresses */, nullptr /* service_config_json */,
1177
- GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS, r->work_serializer);
1178
- }
1179
-
1180
- static void grpc_resolve_address_ares_impl(const char* name,
1181
- const char* default_port,
1182
- grpc_pollset_set* interested_parties,
1183
- grpc_closure* on_done,
1184
- grpc_resolved_addresses** addrs) {
1185
- grpc_resolve_address_ares_request* r =
1186
- new grpc_resolve_address_ares_request();
1187
- r->work_serializer = std::make_shared<grpc_core::WorkSerializer>();
1188
- r->addrs_out = addrs;
1189
- r->on_resolve_address_done = on_done;
1190
- r->name = name;
1191
- r->default_port = default_port;
1192
- r->interested_parties = interested_parties;
1193
- r->work_serializer->Run(
1194
- [r]() { grpc_resolve_address_invoke_dns_lookup_ares_locked(r); },
1195
- DEBUG_LOCATION);
1196
- }
1197
-
1198
- void (*grpc_resolve_address_ares)(
1199
- const char* name, const char* default_port,
1200
- grpc_pollset_set* interested_parties, grpc_closure* on_done,
1201
- grpc_resolved_addresses** addrs) = grpc_resolve_address_ares_impl;
1202
-
1203
1114
  #endif /* GRPC_ARES == 1 */