grpc 1.46.3 → 1.47.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (481) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +49 -97
  3. data/include/grpc/event_engine/event_engine.h +42 -7
  4. data/include/grpc/event_engine/memory_allocator.h +0 -15
  5. data/include/grpc/event_engine/port.h +1 -1
  6. data/include/grpc/event_engine/slice.h +286 -0
  7. data/include/grpc/event_engine/slice_buffer.h +112 -0
  8. data/include/grpc/grpc_security.h +11 -0
  9. data/include/grpc/impl/codegen/port_platform.h +100 -36
  10. data/include/grpc/impl/codegen/slice.h +1 -1
  11. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
  12. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
  13. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  14. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
  16. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
  18. data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
  19. data/src/core/ext/filters/client_channel/client_channel.h +26 -6
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  25. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  26. data/src/core/ext/filters/client_channel/config_selector.h +7 -5
  27. data/src/core/ext/filters/client_channel/connector.h +8 -2
  28. data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
  29. data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
  30. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  31. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  32. data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
  33. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
  34. data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
  35. data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  37. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  47. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
  52. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
  53. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
  54. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
  55. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
  56. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
  57. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
  58. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
  59. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
  60. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
  64. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  65. data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  74. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
  75. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  82. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  83. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  84. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
  85. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
  86. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  87. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
  88. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
  89. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
  92. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
  93. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  94. data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
  95. data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
  96. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  97. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  98. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  99. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
  100. data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
  101. data/src/core/ext/filters/client_channel/subchannel.h +80 -20
  102. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
  103. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  104. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  105. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  106. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
  107. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
  108. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
  109. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
  110. data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
  111. data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
  112. data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
  113. data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
  114. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
  115. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
  116. data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
  117. data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
  118. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
  119. data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
  120. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
  121. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
  122. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  123. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
  124. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  125. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  126. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  127. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  128. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
  129. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
  130. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  131. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  132. data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
  133. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
  134. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  135. data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
  136. data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
  137. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  138. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  139. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  140. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  141. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  142. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  143. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  145. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
  146. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  147. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
  148. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  149. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  150. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  151. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
  152. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  153. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  155. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  156. data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
  157. data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
  158. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
  159. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  160. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  161. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  162. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
  163. data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
  164. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  165. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  166. data/src/core/ext/xds/certificate_provider_store.cc +4 -2
  167. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  168. data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
  169. data/src/core/ext/xds/xds_certificate_provider.h +1 -1
  170. data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
  171. data/src/core/ext/xds/xds_client.cc +46 -22
  172. data/src/core/ext/xds/xds_cluster.cc +106 -16
  173. data/src/core/ext/xds/xds_cluster.h +3 -0
  174. data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
  175. data/src/core/ext/xds/xds_listener.cc +19 -9
  176. data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
  177. data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
  178. data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
  179. data/src/core/lib/avl/avl.h +3 -1
  180. data/src/core/lib/channel/call_finalization.h +4 -0
  181. data/src/core/lib/channel/call_tracer.h +8 -2
  182. data/src/core/lib/channel/channel_args.cc +41 -22
  183. data/src/core/lib/channel/channel_args.h +33 -3
  184. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
  185. data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
  186. data/src/core/lib/channel/channel_stack.cc +41 -3
  187. data/src/core/lib/channel/channel_stack.h +49 -3
  188. data/src/core/lib/channel/channel_stack_builder.cc +9 -19
  189. data/src/core/lib/channel/channel_stack_builder.h +15 -27
  190. data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
  191. data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
  192. data/src/core/lib/channel/channel_trace.cc +8 -13
  193. data/src/core/lib/channel/channel_trace.h +6 -3
  194. data/src/core/lib/channel/channelz.cc +8 -13
  195. data/src/core/lib/channel/channelz.h +13 -4
  196. data/src/core/lib/channel/channelz_registry.cc +7 -14
  197. data/src/core/lib/channel/channelz_registry.h +10 -9
  198. data/src/core/lib/channel/connected_channel.cc +21 -31
  199. data/src/core/lib/channel/connected_channel.h +1 -0
  200. data/src/core/lib/channel/promise_based_filter.cc +444 -189
  201. data/src/core/lib/channel/promise_based_filter.h +160 -27
  202. data/src/core/lib/channel/status_util.cc +2 -0
  203. data/src/core/lib/channel/status_util.h +0 -3
  204. data/src/core/lib/compression/compression_internal.cc +45 -10
  205. data/src/core/lib/compression/compression_internal.h +1 -1
  206. data/src/core/lib/config/core_configuration.cc +3 -0
  207. data/src/core/lib/config/core_configuration.h +2 -1
  208. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  209. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  210. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  211. data/src/core/lib/event_engine/event_engine.cc +12 -2
  212. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  213. data/src/core/lib/event_engine/handle_containers.h +67 -0
  214. data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
  215. data/src/core/lib/event_engine/iomgr_engine.h +118 -0
  216. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  217. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  218. data/src/core/lib/event_engine/slice.cc +102 -0
  219. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  220. data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
  221. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  222. data/src/core/lib/gpr/log.cc +5 -0
  223. data/src/core/lib/gpr/tls.h +3 -5
  224. data/src/core/lib/gprpp/bitset.h +5 -1
  225. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  226. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  227. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  228. data/src/core/lib/gprpp/examine_stack.h +0 -1
  229. data/src/core/lib/gprpp/fork.cc +3 -6
  230. data/src/core/lib/gprpp/global_config.h +2 -4
  231. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  232. data/src/core/lib/gprpp/global_config_env.h +3 -1
  233. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  234. data/src/core/lib/gprpp/host_port.cc +2 -0
  235. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  236. data/src/core/lib/gprpp/match.h +2 -0
  237. data/src/core/lib/gprpp/memory.h +1 -5
  238. data/src/core/lib/gprpp/orphanable.h +1 -4
  239. data/src/core/lib/gprpp/ref_counted.h +1 -3
  240. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  241. data/src/core/lib/gprpp/stat.h +0 -2
  242. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  243. data/src/core/lib/gprpp/status_helper.cc +8 -4
  244. data/src/core/lib/gprpp/status_helper.h +4 -0
  245. data/src/core/lib/gprpp/sync.h +3 -1
  246. data/src/core/lib/gprpp/table.h +10 -0
  247. data/src/core/lib/gprpp/thd.h +2 -5
  248. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  249. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  250. data/src/core/lib/gprpp/time.cc +8 -0
  251. data/src/core/lib/gprpp/time.h +6 -1
  252. data/src/core/lib/gprpp/time_util.cc +4 -0
  253. data/src/core/lib/gprpp/time_util.h +1 -1
  254. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  255. data/src/core/lib/http/format_request.cc +29 -0
  256. data/src/core/lib/http/format_request.h +2 -0
  257. data/src/core/lib/http/httpcli.cc +88 -81
  258. data/src/core/lib/http/httpcli.h +39 -7
  259. data/src/core/lib/http/httpcli_security_connector.cc +3 -4
  260. data/src/core/lib/iomgr/endpoint.cc +4 -4
  261. data/src/core/lib/iomgr/endpoint.h +6 -4
  262. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
  263. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  264. data/src/core/lib/iomgr/ev_posix.cc +1 -4
  265. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  266. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  267. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  268. data/src/core/lib/iomgr/iomgr.cc +0 -1
  269. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
  270. data/src/core/lib/iomgr/pollset_set.h +1 -2
  271. data/src/core/lib/iomgr/port.h +25 -6
  272. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  273. data/src/core/lib/iomgr/resolve_address.h +21 -14
  274. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  275. data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
  276. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  277. data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
  278. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  279. data/src/core/lib/iomgr/sockaddr.h +2 -3
  280. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  281. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  282. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  283. data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
  284. data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
  285. data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
  286. data/src/core/lib/iomgr/tcp_posix.cc +9 -27
  287. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
  288. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
  289. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
  290. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
  291. data/src/core/lib/iomgr/tcp_windows.cc +7 -4
  292. data/src/core/lib/json/json.h +1 -2
  293. data/src/core/lib/json/json_reader.cc +9 -1
  294. data/src/core/lib/json/json_util.cc +7 -0
  295. data/src/core/lib/json/json_util.h +10 -1
  296. data/src/core/lib/json/json_writer.cc +6 -1
  297. data/src/core/lib/promise/activity.cc +1 -1
  298. data/src/core/lib/promise/activity.h +6 -6
  299. data/src/core/lib/promise/arena_promise.h +11 -1
  300. data/src/core/lib/promise/call_push_pull.h +4 -0
  301. data/src/core/lib/promise/context.h +1 -1
  302. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  303. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  304. data/src/core/lib/promise/latch.h +0 -1
  305. data/src/core/lib/promise/loop.h +1 -0
  306. data/src/core/lib/promise/race.h +0 -1
  307. data/src/core/lib/promise/seq.h +0 -2
  308. data/src/core/lib/promise/sleep.cc +2 -0
  309. data/src/core/lib/promise/sleep.h +10 -0
  310. data/src/core/lib/promise/try_seq.h +2 -2
  311. data/src/core/lib/resolver/resolver_factory.h +1 -2
  312. data/src/core/lib/resolver/server_address.cc +9 -3
  313. data/src/core/lib/resolver/server_address.h +4 -4
  314. data/src/core/lib/resource_quota/api.cc +14 -1
  315. data/src/core/lib/resource_quota/api.h +4 -1
  316. data/src/core/lib/resource_quota/arena.cc +0 -6
  317. data/src/core/lib/resource_quota/arena.h +1 -2
  318. data/src/core/lib/resource_quota/memory_quota.cc +47 -5
  319. data/src/core/lib/resource_quota/memory_quota.h +24 -5
  320. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  321. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  322. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  323. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
  324. data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
  325. data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
  326. data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
  327. data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
  328. data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
  329. data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
  330. data/src/core/lib/security/credentials/credentials.h +17 -10
  331. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
  333. data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
  334. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
  335. data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
  336. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  337. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
  340. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  341. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
  342. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
  343. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
  344. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  345. data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
  346. data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
  347. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
  348. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  349. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
  350. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
  351. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
  352. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
  353. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
  354. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
  355. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
  356. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
  357. data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
  358. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  359. data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
  360. data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
  361. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  362. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  364. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  365. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
  366. data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
  367. data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
  368. data/src/core/lib/security/transport/security_handshaker.cc +5 -5
  369. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  370. data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
  371. data/src/core/lib/service_config/service_config.h +4 -8
  372. data/src/core/lib/service_config/service_config_call_data.h +4 -1
  373. data/src/core/lib/service_config/service_config_impl.cc +7 -0
  374. data/src/core/lib/service_config/service_config_impl.h +9 -2
  375. data/src/core/lib/service_config/service_config_parser.cc +8 -0
  376. data/src/core/lib/service_config/service_config_parser.h +7 -0
  377. data/src/core/lib/slice/b64.cc +1 -1
  378. data/src/core/lib/slice/b64.h +2 -0
  379. data/src/core/lib/slice/percent_encoding.cc +4 -1
  380. data/src/core/lib/slice/percent_encoding.h +0 -6
  381. data/src/core/lib/slice/slice.cc +2 -1
  382. data/src/core/lib/slice/slice.h +10 -5
  383. data/src/core/lib/slice/slice_api.cc +1 -1
  384. data/src/core/lib/slice/slice_buffer.cc +50 -23
  385. data/src/core/lib/slice/slice_buffer.h +106 -0
  386. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  387. data/src/core/lib/slice/slice_internal.h +4 -3
  388. data/src/core/lib/slice/slice_refcount.h +2 -3
  389. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  390. data/src/core/lib/slice/slice_split.cc +3 -0
  391. data/src/core/lib/slice/slice_split.h +0 -4
  392. data/src/core/lib/slice/slice_string_helpers.cc +4 -0
  393. data/src/core/lib/slice/slice_string_helpers.h +1 -4
  394. data/src/core/lib/surface/builtins.cc +7 -2
  395. data/src/core/lib/surface/byte_buffer.cc +7 -1
  396. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  397. data/src/core/lib/surface/call.cc +41 -26
  398. data/src/core/lib/surface/call.h +16 -2
  399. data/src/core/lib/surface/call_details.cc +4 -4
  400. data/src/core/lib/surface/call_log_batch.cc +7 -1
  401. data/src/core/lib/surface/call_test_only.h +4 -1
  402. data/src/core/lib/surface/channel.cc +179 -242
  403. data/src/core/lib/surface/channel.h +94 -57
  404. data/src/core/lib/surface/channel_init.h +2 -0
  405. data/src/core/lib/surface/channel_ping.cc +8 -2
  406. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  407. data/src/core/lib/surface/channel_stack_type.h +0 -2
  408. data/src/core/lib/surface/completion_queue.cc +14 -6
  409. data/src/core/lib/surface/completion_queue.h +5 -1
  410. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  411. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  412. data/src/core/lib/surface/event_string.cc +1 -7
  413. data/src/core/lib/surface/event_string.h +1 -1
  414. data/src/core/lib/surface/init.cc +17 -45
  415. data/src/core/lib/surface/init.h +0 -8
  416. data/src/core/lib/surface/lame_client.cc +64 -110
  417. data/src/core/lib/surface/lame_client.h +40 -2
  418. data/src/core/lib/surface/metadata_array.cc +2 -0
  419. data/src/core/lib/surface/server.cc +69 -56
  420. data/src/core/lib/surface/server.h +39 -9
  421. data/src/core/lib/surface/validate_metadata.cc +2 -5
  422. data/src/core/lib/surface/validate_metadata.h +3 -0
  423. data/src/core/lib/surface/version.cc +2 -2
  424. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  425. data/src/core/lib/transport/bdp_estimator.h +2 -3
  426. data/src/core/lib/transport/byte_stream.cc +4 -3
  427. data/src/core/lib/transport/byte_stream.h +5 -1
  428. data/src/core/lib/transport/connectivity_state.cc +6 -4
  429. data/src/core/lib/transport/connectivity_state.h +2 -3
  430. data/src/core/lib/transport/error_utils.cc +4 -2
  431. data/src/core/lib/transport/error_utils.h +5 -1
  432. data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
  433. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  434. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  435. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  436. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  437. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
  438. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  439. data/src/core/lib/transport/metadata_batch.cc +287 -0
  440. data/src/core/lib/transport/metadata_batch.h +133 -264
  441. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  442. data/src/core/lib/transport/parsed_metadata.h +10 -3
  443. data/src/core/lib/transport/status_conversion.cc +2 -0
  444. data/src/core/lib/transport/status_conversion.h +2 -2
  445. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  446. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  447. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  448. data/src/core/lib/transport/timeout_encoding.h +5 -1
  449. data/src/core/lib/transport/transport.cc +18 -17
  450. data/src/core/lib/transport/transport.h +28 -2
  451. data/src/core/lib/transport/transport_impl.h +10 -0
  452. data/src/core/lib/transport/transport_op_string.cc +9 -10
  453. data/src/core/lib/uri/uri_parser.cc +11 -3
  454. data/src/core/lib/uri/uri_parser.h +0 -2
  455. data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
  456. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  457. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  458. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  459. data/src/ruby/ext/grpc/extconf.rb +2 -2
  460. data/src/ruby/lib/grpc/version.rb +1 -1
  461. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  462. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  463. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  464. metadata +36 -29
  465. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  466. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  467. data/src/core/lib/event_engine/sockaddr.h +0 -44
  468. data/src/core/lib/gprpp/capture.h +0 -76
  469. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  470. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  471. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  472. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  473. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  474. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  475. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  476. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  477. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  478. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  479. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  480. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  481. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -177,15 +177,10 @@ struct tcp_info {
177
177
  /* Returns true if kernel is capable of supporting errqueue and timestamping.
178
178
  * Currently allowing only linux kernels above 4.0.0
179
179
  */
180
- bool kernel_supports_errqueue();
180
+ bool KernelSupportsErrqueue();
181
181
 
182
182
  } /* namespace grpc_core */
183
183
 
184
184
  #endif /* GRPC_POSIX_SOCKET_TCP */
185
185
 
186
- namespace grpc_core {
187
- /* Initializes errqueue support */
188
- void grpc_errqueue_init();
189
- } /* namespace grpc_core */
190
-
191
186
  #endif /* GRPC_CORE_LIB_IOMGR_INTERNAL_ERRQUEUE_H */
@@ -64,7 +64,6 @@ void grpc_iomgr_init() {
64
64
  g_root_object.name = const_cast<char*>("root");
65
65
  grpc_iomgr_platform_init();
66
66
  grpc_timer_list_init();
67
- grpc_core::grpc_errqueue_init();
68
67
  g_grpc_abort_on_leaks = GPR_GLOBAL_CONFIG_GET(grpc_abort_on_leaks);
69
68
  }
70
69
 
@@ -1,4 +1,4 @@
1
- // Copyright 2021 The gRPC Authors
1
+ // Copyright 2022 gRPC authors.
2
2
  //
3
3
  // Licensed under the Apache License, Version 2.0 (the "License");
4
4
  // you may not use this file except in compliance with the License.
@@ -11,18 +11,15 @@
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
- #include <grpc/support/port_platform.h>
15
14
 
16
- #include "src/core/lib/iomgr/port.h"
17
- #if GRPC_ARES == 1 && defined(GRPC_USE_EVENT_ENGINE)
15
+ #ifndef GRPC_CORE_LIB_IOMGR_IOMGR_FWD_H
16
+ #define GRPC_CORE_LIB_IOMGR_IOMGR_FWD_H
17
+
18
+ // A bunch of forward declarations that are useful to higher level things that
19
+ // don't want to depend on all of iomgr.
18
20
 
19
- #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
21
+ #include <grpc/support/port_platform.h>
20
22
 
21
- bool grpc_ares_query_ipv6() {
22
- /* The libuv grpc code currently does not have the code to probe for this,
23
- * so we assume for now that IPv6 is always available in contexts where this
24
- * code will be used. */
25
- return true;
26
- }
23
+ typedef struct grpc_pollset_set grpc_pollset_set;
27
24
 
28
- #endif /* GRPC_ARES == 1 && defined(GRPC_USE_EVENT_ENGINE) */
25
+ #endif // GRPC_CORE_LIB_IOMGR_IOMGR_FWD_H
@@ -21,6 +21,7 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
24
25
  #include "src/core/lib/iomgr/pollset.h"
25
26
 
26
27
  /* A grpc_pollset_set is a set of pollsets that are interested in an
@@ -28,8 +29,6 @@
28
29
  fd's (etc) that have been registered with the set_set to that pollset.
29
30
  Registering fd's automatically adds them to all current pollsets. */
30
31
 
31
- typedef struct grpc_pollset_set grpc_pollset_set;
32
-
33
32
  typedef struct grpc_pollset_set_vtable {
34
33
  grpc_pollset_set* (*create)(void);
35
34
  void (*destroy)(grpc_pollset_set* pollset_set);
@@ -25,9 +25,7 @@
25
25
  #ifdef GPR_WINDOWS
26
26
  #define GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY 1
27
27
  #endif
28
- #if defined(GRPC_USE_EVENT_ENGINE)
29
- // Do Nothing
30
- #elif defined(GPR_WINDOWS)
28
+ #if defined(GPR_WINDOWS)
31
29
  #define GRPC_WINSOCK_SOCKET 1
32
30
  #define GRPC_WINDOWS_SOCKETUTILS 1
33
31
  #define GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER 1
@@ -155,6 +153,17 @@
155
153
  #define GRPC_POSIX_SOCKET 1
156
154
  #define GRPC_POSIX_SOCKETUTILS 1
157
155
  #define GRPC_POSIX_WAKEUP_FD 1
156
+ #elif defined(GPR_NETBSD)
157
+ #define GRPC_HAVE_ARPA_NAMESER 1
158
+ #define GRPC_HAVE_IFADDRS 1
159
+ #define GRPC_HAVE_IPV6_RECVPKTINFO 1
160
+ #define GRPC_HAVE_SO_NOSIGPIPE 1
161
+ #define GRPC_HAVE_UNIX_SOCKET 1
162
+ #define GRPC_POSIX_FORK 1
163
+ #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
164
+ #define GRPC_POSIX_SOCKET 1
165
+ #define GRPC_POSIX_SOCKETUTILS 1
166
+ #define GRPC_POSIX_WAKEUP_FD 1
158
167
  #elif defined(GPR_NACL)
159
168
  #define GRPC_HAVE_ARPA_NAMESER 1
160
169
  #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
@@ -177,15 +186,25 @@
177
186
  // TODO(rudominer) Check this does something we want.
178
187
  #define GRPC_POSIX_SOCKETUTILS 1
179
188
  #define GRPC_TIMER_USE_GENERIC 1
189
+ #elif defined(GPR_HAIKU)
190
+ #define GRPC_HAVE_ARPA_NAMESER 1
191
+ #define GRPC_HAVE_IFADDRS 1
192
+ #define GRPC_HAVE_IPV6_RECVPKTINFO 1
193
+ #define GRPC_HAVE_UNIX_SOCKET 1
194
+ #define GRPC_POSIX_FORK 1
195
+ #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
196
+ #define GRPC_POSIX_SOCKET 1
197
+ #define GRPC_POSIX_SOCKETUTILS 1
198
+ #define GRPC_POSIX_WAKEUP_FD 1
180
199
  #elif !defined(GPR_NO_AUTODETECT_PLATFORM)
181
200
  #error "Platform not recognized"
182
201
  #endif
183
202
 
184
- #if defined(GRPC_POSIX_SOCKET) + defined(GRPC_WINSOCK_SOCKET) + \
185
- defined(GRPC_CFSTREAM) + defined(GRPC_USE_EVENT_ENGINE) != \
203
+ #if defined(GRPC_POSIX_SOCKET) + defined(GRPC_WINSOCK_SOCKET) + \
204
+ defined(GRPC_CFSTREAM) != \
186
205
  1
187
206
  #error \
188
- "Must define exactly one of GRPC_POSIX_SOCKET, GRPC_WINSOCK_SOCKET, GRPC_CFSTREAM, GRPC_USE_EVENT_ENGINE"
207
+ "Must define exactly one of GRPC_POSIX_SOCKET, GRPC_WINSOCK_SOCKET, GRPC_CFSTREAM"
189
208
  #endif
190
209
 
191
210
  #ifdef GRPC_POSIX_SOCKET
@@ -19,6 +19,8 @@
19
19
 
20
20
  #include "src/core/lib/iomgr/resolve_address.h"
21
21
 
22
+ #include "absl/strings/str_cat.h"
23
+
22
24
  #include <grpc/event_engine/event_engine.h>
23
25
  #include <grpc/support/alloc.h>
24
26
 
@@ -29,8 +31,14 @@ namespace {
29
31
  DNSResolver* g_dns_resolver;
30
32
  }
31
33
 
34
+ constexpr DNSResolver::TaskHandle DNSResolver::kNullHandle;
35
+
32
36
  void SetDNSResolver(DNSResolver* resolver) { g_dns_resolver = resolver; }
33
37
 
34
38
  DNSResolver* GetDNSResolver() { return g_dns_resolver; }
35
39
 
40
+ std::string DNSResolver::HandleToString(TaskHandle handle) {
41
+ return absl::StrCat("{", handle.keys[0], ",", handle.keys[1], "}");
42
+ }
43
+
36
44
  } // namespace grpc_core
@@ -25,6 +25,8 @@
25
25
 
26
26
  #include "absl/status/statusor.h"
27
27
 
28
+ #include <grpc/event_engine/event_engine.h>
29
+
28
30
  #include "src/core/lib/gprpp/orphanable.h"
29
31
  #include "src/core/lib/iomgr/pollset_set.h"
30
32
  #include "src/core/lib/iomgr/port.h"
@@ -39,37 +41,42 @@ constexpr int kDefaultSecurePortInt = 443;
39
41
  // A singleton class used for async and blocking DNS resolution
40
42
  class DNSResolver {
41
43
  public:
42
- // Tracks a single asynchronous DNS resolution attempt. The DNS
43
- // resolution should be arranged to be cancelled as soon as possible
44
- // when Orphan is called.
45
- class Request : public InternallyRefCounted<Request> {
46
- public:
47
- // Begins async DNS resolution
48
- virtual void Start() = 0;
49
- };
44
+ using TaskHandle = ::grpc_event_engine::experimental::EventEngine::
45
+ DNSResolver::LookupTaskHandle;
46
+ static constexpr TaskHandle kNullHandle{0, 0};
50
47
 
51
48
  virtual ~DNSResolver() {}
52
49
 
50
+ static std::string HandleToString(TaskHandle handle);
51
+
53
52
  // Asynchronously resolve name. Use \a default_port if a port isn't designated
54
53
  // in \a name, otherwise use the port in \a name. On completion, \a on_done is
55
54
  // invoked with the result.
56
55
  //
57
56
  // Note for implementations: calls may acquire locks in \a on_done which
58
- // were previously held while calling Request::Start(). Therefore,
59
- // implementations must not invoke \a on_done inline from the call to
60
- // Request::Start(). The DNSCallbackExecCtxScheduler utility may help address
61
- // this.
62
- virtual OrphanablePtr<Request> ResolveName(
57
+ // were previously held while starting the request. Therefore,
58
+ // implementations must not invoke \a on_done inline from the call site that
59
+ // starts the request. The DNSCallbackExecCtxScheduler utility may help
60
+ // address this.
61
+ //
62
+ // \a interested_parties may be deleted after a request is cancelled.
63
+ virtual TaskHandle ResolveName(
63
64
  absl::string_view name, absl::string_view default_port,
64
65
  grpc_pollset_set* interested_parties,
65
66
  std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
66
- on_done) GRPC_MUST_USE_RESULT = 0;
67
+ on_done) = 0;
67
68
 
68
69
  // Resolve name in a blocking fashion. Use \a default_port if a port isn't
69
70
  // designated in \a name, otherwise use the port in \a name.
70
71
  virtual absl::StatusOr<std::vector<grpc_resolved_address>>
71
72
  ResolveNameBlocking(absl::string_view name,
72
73
  absl::string_view default_port) = 0;
74
+
75
+ // This shares the same semantics with \a EventEngine::Cancel: successfully
76
+ // cancelled lookups will not have their callbacks executed, and this
77
+ // method returns true. If a TaskHandle is unknown, this method should return
78
+ // false.
79
+ virtual bool Cancel(TaskHandle handle) = 0;
73
80
  };
74
81
 
75
82
  // Override the active DNS resolver which should be used for all DNS
@@ -26,9 +26,8 @@
26
26
 
27
27
  namespace grpc_core {
28
28
 
29
- // A fire and forget class used by DNSResolver::Request implementations to
30
- // schedule DNS resolution callbacks on the ExecCtx, which is frequently
31
- // necessary to avoid lock inversion related problems.
29
+ // A fire and forget class to schedule DNS resolution callbacks on the ExecCtx,
30
+ // which is frequently necessary to avoid lock inversion related problems.
32
31
  class DNSCallbackExecCtxScheduler {
33
32
  public:
34
33
  DNSCallbackExecCtxScheduler(
@@ -45,7 +45,7 @@
45
45
  namespace grpc_core {
46
46
  namespace {
47
47
 
48
- class NativeDNSRequest : public DNSResolver::Request {
48
+ class NativeDNSRequest {
49
49
  public:
50
50
  NativeDNSRequest(
51
51
  absl::string_view name, absl::string_view default_port,
@@ -53,18 +53,9 @@ class NativeDNSRequest : public DNSResolver::Request {
53
53
  on_done)
54
54
  : name_(name), default_port_(default_port), on_done_(std::move(on_done)) {
55
55
  GRPC_CLOSURE_INIT(&request_closure_, DoRequestThread, this, nullptr);
56
- }
57
-
58
- // Starts the resolution
59
- void Start() override {
60
- Ref().release(); // ref held by callback
61
56
  Executor::Run(&request_closure_, GRPC_ERROR_NONE, ExecutorType::RESOLVER);
62
57
  }
63
58
 
64
- // This is a no-op for the native resolver. Note
65
- // that no I/O polling is required for the resolution to finish.
66
- void Orphan() override { Unref(); }
67
-
68
59
  private:
69
60
  // Callback to be passed to grpc Executor to asynch-ify
70
61
  // ResolveNameBlocking
@@ -74,7 +65,7 @@ class NativeDNSRequest : public DNSResolver::Request {
74
65
  GetDNSResolver()->ResolveNameBlocking(r->name_, r->default_port_);
75
66
  // running inline is safe since we've already been scheduled on the executor
76
67
  r->on_done_(std::move(result));
77
- r->Unref();
68
+ delete r;
78
69
  }
79
70
 
80
71
  const std::string name_;
@@ -91,13 +82,14 @@ NativeDNSResolver* NativeDNSResolver::GetOrCreate() {
91
82
  return instance;
92
83
  }
93
84
 
94
- OrphanablePtr<DNSResolver::Request> NativeDNSResolver::ResolveName(
85
+ DNSResolver::TaskHandle NativeDNSResolver::ResolveName(
95
86
  absl::string_view name, absl::string_view default_port,
96
87
  grpc_pollset_set* /* interested_parties */,
97
88
  std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
98
89
  on_done) {
99
- return MakeOrphanable<NativeDNSRequest>(name, default_port,
100
- std::move(on_done));
90
+ // self-deleting class
91
+ new NativeDNSRequest(name, default_port, std::move(on_done));
92
+ return kNullHandle;
101
93
  }
102
94
 
103
95
  absl::StatusOr<std::vector<grpc_resolved_address>>
@@ -181,6 +173,8 @@ done:
181
173
  return error_result;
182
174
  }
183
175
 
176
+ bool NativeDNSResolver::Cancel(TaskHandle /*handle*/) { return false; }
177
+
184
178
  } // namespace grpc_core
185
179
 
186
180
  #endif
@@ -32,14 +32,17 @@ class NativeDNSResolver : public DNSResolver {
32
32
  // Gets the singleton instance, creating it first if it doesn't exist
33
33
  static NativeDNSResolver* GetOrCreate();
34
34
 
35
- OrphanablePtr<DNSResolver::Request> ResolveName(
35
+ TaskHandle ResolveName(
36
36
  absl::string_view name, absl::string_view default_port,
37
- grpc_pollset_set* interested_parties,
37
+ grpc_pollset_set* /* interested_parties */,
38
38
  std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
39
39
  on_done) override;
40
40
 
41
41
  absl::StatusOr<std::vector<grpc_resolved_address>> ResolveNameBlocking(
42
42
  absl::string_view name, absl::string_view default_port) override;
43
+
44
+ // NativeDNSResolver does not support cancellation.
45
+ bool Cancel(TaskHandle handle) override;
43
46
  };
44
47
 
45
48
  } // namespace grpc_core
@@ -48,7 +48,7 @@
48
48
  namespace grpc_core {
49
49
  namespace {
50
50
 
51
- class NativeDNSRequest : public DNSResolver::Request {
51
+ class NativeDNSRequest {
52
52
  public:
53
53
  NativeDNSRequest(
54
54
  absl::string_view name, absl::string_view default_port,
@@ -56,18 +56,9 @@ class NativeDNSRequest : public DNSResolver::Request {
56
56
  on_done)
57
57
  : name_(name), default_port_(default_port), on_done_(std::move(on_done)) {
58
58
  GRPC_CLOSURE_INIT(&request_closure_, DoRequestThread, this, nullptr);
59
- }
60
-
61
- // Starts the resolution
62
- void Start() override {
63
- Ref().release(); // ref held by callback
64
59
  Executor::Run(&request_closure_, GRPC_ERROR_NONE, ExecutorType::RESOLVER);
65
60
  }
66
61
 
67
- // This is a no-op for the native resolver. Note
68
- // that no I/O polling is required for the resolution to finish.
69
- void Orphan() override { Unref(); }
70
-
71
62
  private:
72
63
  // Callback to be passed to grpc Executor to asynch-ify
73
64
  // ResolveNameBlocking
@@ -77,7 +68,7 @@ class NativeDNSRequest : public DNSResolver::Request {
77
68
  GetDNSResolver()->ResolveNameBlocking(r->name_, r->default_port_);
78
69
  // running inline is safe since we've already been scheduled on the executor
79
70
  r->on_done_(std::move(result));
80
- r->Unref();
71
+ delete r;
81
72
  }
82
73
 
83
74
  const std::string name_;
@@ -94,13 +85,13 @@ NativeDNSResolver* NativeDNSResolver::GetOrCreate() {
94
85
  return instance;
95
86
  }
96
87
 
97
- OrphanablePtr<DNSResolver::Request> NativeDNSResolver::ResolveName(
88
+ DNSResolver::TaskHandle NativeDNSResolver::ResolveName(
98
89
  absl::string_view name, absl::string_view default_port,
99
90
  grpc_pollset_set* /* interested_parties */,
100
91
  std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
101
92
  on_done) {
102
- return MakeOrphanable<NativeDNSRequest>(name, default_port,
103
- std::move(on_done));
93
+ new NativeDNSRequest(name, default_port, std::move(on_done));
94
+ return kNullHandle;
104
95
  }
105
96
 
106
97
  absl::StatusOr<std::vector<grpc_resolved_address>>
@@ -166,6 +157,8 @@ done:
166
157
  return error_result;
167
158
  }
168
159
 
160
+ bool NativeDNSResolver::Cancel(TaskHandle /*handle*/) { return false; }
161
+
169
162
  } // namespace grpc_core
170
163
 
171
164
  #endif
@@ -32,14 +32,17 @@ class NativeDNSResolver : public DNSResolver {
32
32
  // Gets the singleton instance, creating it first if it doesn't exist
33
33
  static NativeDNSResolver* GetOrCreate();
34
34
 
35
- OrphanablePtr<DNSResolver::Request> ResolveName(
35
+ TaskHandle ResolveName(
36
36
  absl::string_view name, absl::string_view default_port,
37
- grpc_pollset_set* interested_parties,
37
+ grpc_pollset_set* /* interested_parties */,
38
38
  std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
39
39
  on_done) override;
40
40
 
41
41
  absl::StatusOr<std::vector<grpc_resolved_address>> ResolveNameBlocking(
42
42
  absl::string_view name, absl::string_view default_port) override;
43
+
44
+ // NativeDNSResolver does not support cancellation.
45
+ bool Cancel(TaskHandle handle) override;
43
46
  };
44
47
 
45
48
  } // namespace grpc_core
@@ -25,9 +25,8 @@
25
25
 
26
26
  #include <grpc/support/port_platform.h>
27
27
 
28
- #include "src/core/lib/event_engine/sockaddr.h"
29
28
  #include "src/core/lib/iomgr/port.h"
30
- #include "src/core/lib/iomgr/sockaddr_posix.h"
31
- #include "src/core/lib/iomgr/sockaddr_windows.h"
29
+ #include "src/core/lib/iomgr/sockaddr_posix.h" // IWYU pragma: export
30
+ #include "src/core/lib/iomgr/sockaddr_windows.h" // IWYU pragma: export
32
31
 
33
32
  #endif /* GRPC_CORE_LIB_IOMGR_SOCKADDR_H */
@@ -19,6 +19,8 @@
19
19
  #ifndef GRPC_CORE_LIB_IOMGR_SOCKADDR_POSIX_H
20
20
  #define GRPC_CORE_LIB_IOMGR_SOCKADDR_POSIX_H
21
21
 
22
+ // IWYU pragma: private, include "src/core/lib/iomgr/sockaddr.h"
23
+
22
24
  #include <grpc/support/port_platform.h>
23
25
 
24
26
  #include "src/core/lib/iomgr/port.h"
@@ -21,6 +21,8 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ // IWYU pragma: private, include "src/core/lib/iomgr/sockaddr.h"
25
+
24
26
  #include "src/core/lib/iomgr/port.h"
25
27
 
26
28
  #ifdef GRPC_WINSOCK_SOCKET
@@ -441,9 +441,10 @@ int grpc_ipv6_loopback_available(void) {
441
441
  static grpc_error_handle error_for_fd(int fd,
442
442
  const grpc_resolved_address* addr) {
443
443
  if (fd >= 0) return GRPC_ERROR_NONE;
444
- std::string addr_str = grpc_sockaddr_to_string(addr, false);
444
+ auto addr_str = grpc_sockaddr_to_string(addr, false);
445
445
  grpc_error_handle err = grpc_error_set_str(
446
- GRPC_OS_ERROR(errno, "socket"), GRPC_ERROR_STR_TARGET_ADDRESS, addr_str);
446
+ GRPC_OS_ERROR(errno, "socket"), GRPC_ERROR_STR_TARGET_ADDRESS,
447
+ addr_str.ok() ? addr_str.value() : addr_str.status().ToString());
447
448
  return err;
448
449
  }
449
450
 
@@ -140,7 +140,7 @@ static void OnOpen(void* arg, grpc_error_handle error) {
140
140
 
141
141
  static void ParseResolvedAddress(const grpc_resolved_address* addr,
142
142
  CFStringRef* host, int* port) {
143
- std::string host_port = grpc_sockaddr_to_string(addr, true);
143
+ std::string host_port = grpc_sockaddr_to_string(addr, true).value();
144
144
  std::string host_string;
145
145
  std::string port_string;
146
146
  grpc_core::SplitHostPort(host_port, &host_string, &port_string);
@@ -154,10 +154,18 @@ static void CFStreamClientConnect(grpc_closure* closure, grpc_endpoint** ep,
154
154
  const grpc_channel_args* channel_args,
155
155
  const grpc_resolved_address* resolved_addr,
156
156
  grpc_core::Timestamp deadline) {
157
+ auto addr_uri = grpc_sockaddr_to_uri(resolved_addr);
158
+ if (!addr_uri.ok()) {
159
+ grpc_error_handle error =
160
+ GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_uri.status().ToString());
161
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, error);
162
+ return;
163
+ }
164
+
157
165
  CFStreamConnect* connect = new CFStreamConnect();
158
166
  connect->closure = closure;
159
167
  connect->endpoint = ep;
160
- connect->addr_name = grpc_sockaddr_to_uri(resolved_addr);
168
+ connect->addr_name = addr_uri.value();
161
169
  connect->refs = 2; // One for the connect operation, one for the timer.
162
170
  gpr_ref_init(&connect->refcount, 1);
163
171
  gpr_mu_init(&connect->mu);
@@ -277,19 +277,26 @@ void grpc_tcp_client_create_from_prepared_fd(
277
277
  addr->len);
278
278
  } while (err < 0 && errno == EINTR);
279
279
 
280
- std::string name = absl::StrCat("tcp-client:", grpc_sockaddr_to_uri(addr));
280
+ auto addr_uri = grpc_sockaddr_to_uri(addr);
281
+ if (!addr_uri.ok()) {
282
+ grpc_error_handle error =
283
+ GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_uri.status().ToString());
284
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, error);
285
+ return;
286
+ }
287
+
288
+ std::string name = absl::StrCat("tcp-client:", addr_uri.value());
281
289
  grpc_fd* fdobj = grpc_fd_create(fd, name.c_str(), true);
282
290
 
283
291
  if (err >= 0) {
284
- *ep = grpc_tcp_client_create_from_fd(fdobj, channel_args,
285
- grpc_sockaddr_to_uri(addr));
292
+ *ep = grpc_tcp_client_create_from_fd(fdobj, channel_args, addr_uri.value());
286
293
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_NONE);
287
294
  return;
288
295
  }
289
296
  if (errno != EWOULDBLOCK && errno != EINPROGRESS) {
290
297
  grpc_error_handle error = GRPC_OS_ERROR(errno, "connect");
291
298
  error = grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS,
292
- grpc_sockaddr_to_uri(addr));
299
+ addr_uri.value());
293
300
  grpc_fd_orphan(fdobj, nullptr, nullptr, "tcp_client_connect_error");
294
301
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, error);
295
302
  return;
@@ -302,7 +309,7 @@ void grpc_tcp_client_create_from_prepared_fd(
302
309
  ac->ep = ep;
303
310
  ac->fd = fdobj;
304
311
  ac->interested_parties = interested_parties;
305
- ac->addr_str = grpc_sockaddr_to_uri(addr);
312
+ ac->addr_str = addr_uri.value();
306
313
  gpr_mu_init(&ac->mu);
307
314
  ac->refs = 2;
308
315
  GRPC_CLOSURE_INIT(&ac->write_closure, on_writable, ac,
@@ -138,6 +138,13 @@ static void tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
138
138
  grpc_winsocket_callback_info* info;
139
139
  grpc_error_handle error = GRPC_ERROR_NONE;
140
140
  async_connect* ac = NULL;
141
+ absl::StatusOr<std::string> addr_uri;
142
+
143
+ addr_uri = grpc_sockaddr_to_uri(addr);
144
+ if (!addr_uri.ok()) {
145
+ error = GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_uri.status().ToString());
146
+ goto failure;
147
+ }
141
148
 
142
149
  *endpoint = NULL;
143
150
 
@@ -199,7 +206,7 @@ static void tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
199
206
  ac->socket = socket;
200
207
  gpr_mu_init(&ac->mu);
201
208
  ac->refs = 2;
202
- ac->addr_name = grpc_sockaddr_to_uri(addr);
209
+ ac->addr_name = addr_uri.value();
203
210
  ac->endpoint = endpoint;
204
211
  ac->channel_args = grpc_channel_args_copy(channel_args);
205
212
  GRPC_CLOSURE_INIT(&ac->on_connect, on_connect, ac, grpc_schedule_on_exec_ctx);
@@ -213,11 +220,11 @@ static void tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
213
220
 
214
221
  failure:
215
222
  GPR_ASSERT(error != GRPC_ERROR_NONE);
216
- std::string target_uri = grpc_sockaddr_to_uri(addr);
217
- grpc_error_handle final_error =
218
- grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
219
- "Failed to connect", &error, 1),
220
- GRPC_ERROR_STR_TARGET_ADDRESS, target_uri);
223
+ grpc_error_handle final_error = grpc_error_set_str(
224
+ GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Failed to connect",
225
+ &error, 1),
226
+ GRPC_ERROR_STR_TARGET_ADDRESS,
227
+ addr_uri.ok() ? *addr_uri : addr_uri.status().ToString());
221
228
  GRPC_ERROR_UNREF(error);
222
229
  if (socket != NULL) {
223
230
  grpc_winsocket_destroy(socket);