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
@@ -1,172 +0,0 @@
1
- // Copyright 2021 The gRPC Authors
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
- #include <grpc/support/port_platform.h>
15
-
16
- #ifdef GRPC_USE_EVENT_ENGINE
17
- #include "absl/strings/string_view.h"
18
-
19
- #include <grpc/event_engine/event_engine.h>
20
- #include <grpc/slice.h>
21
- #include <grpc/slice_buffer.h>
22
- #include <grpc/support/time.h>
23
-
24
- #include "src/core/lib/address_utils/sockaddr_utils.h"
25
- #include "src/core/lib/channel/channel_args.h"
26
- #include "src/core/lib/iomgr/endpoint.h"
27
- #include "src/core/lib/iomgr/error.h"
28
- #include "src/core/lib/iomgr/event_engine/closure.h"
29
- #include "src/core/lib/iomgr/event_engine/endpoint.h"
30
- #include "src/core/lib/iomgr/event_engine/pollset.h"
31
- #include "src/core/lib/iomgr/pollset.h"
32
- #include "src/core/lib/iomgr/pollset_set.h"
33
- #include "src/core/lib/iomgr/resource_quota.h"
34
- #include "src/core/lib/transport/error_utils.h"
35
-
36
- extern grpc_core::TraceFlag grpc_tcp_trace;
37
-
38
- namespace {
39
-
40
- using ::grpc_event_engine::experimental::EventEngine;
41
- using ::grpc_event_engine::experimental::ResolvedAddressToURI;
42
- using ::grpc_event_engine::experimental::SliceBuffer;
43
-
44
- void endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* slices,
45
- grpc_closure* cb, bool /* urgent */) {
46
- auto* eeep = reinterpret_cast<grpc_event_engine_endpoint*>(ep);
47
- if (eeep->endpoint == nullptr) {
48
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, cb, GRPC_ERROR_CANCELLED);
49
- return;
50
- }
51
- SliceBuffer* read_buffer = new (&eeep->read_buffer) SliceBuffer(slices);
52
- eeep->endpoint->Read(
53
- [eeep, cb](absl::Status status) {
54
- auto* read_buffer = reinterpret_cast<SliceBuffer*>(&eeep->read_buffer);
55
- read_buffer->~SliceBuffer();
56
- grpc_core::ExecCtx exec_ctx;
57
- grpc_core::Closure::Run(DEBUG_LOCATION, cb,
58
- absl_status_to_grpc_error(status));
59
- exec_ctx.Flush();
60
- grpc_pollset_ee_broadcast_event();
61
- },
62
- read_buffer);
63
- }
64
-
65
- void endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
66
- grpc_closure* cb, void* arg) {
67
- // TODO(hork): adapt arg to some metrics collection mechanism.
68
- (void)arg;
69
- auto* eeep = reinterpret_cast<grpc_event_engine_endpoint*>(ep);
70
- if (eeep->endpoint == nullptr) {
71
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, cb, GRPC_ERROR_CANCELLED);
72
- return;
73
- }
74
- SliceBuffer* write_buffer = new (&eeep->write_buffer) SliceBuffer(slices);
75
- eeep->endpoint->Write(
76
- [eeep, cb](absl::Status status) {
77
- auto* write_buffer =
78
- reinterpret_cast<SliceBuffer*>(&eeep->write_buffer);
79
- write_buffer->~SliceBuffer();
80
- grpc_core::ExecCtx exec_ctx;
81
- grpc_core::Closure::Run(DEBUG_LOCATION, cb,
82
- absl_status_to_grpc_error(status));
83
- exec_ctx.Flush();
84
- grpc_pollset_ee_broadcast_event();
85
- },
86
- write_buffer);
87
- }
88
- void endpoint_add_to_pollset(grpc_endpoint* /* ep */,
89
- grpc_pollset* /* pollset */) {}
90
- void endpoint_add_to_pollset_set(grpc_endpoint* /* ep */,
91
- grpc_pollset_set* /* pollset */) {}
92
- void endpoint_delete_from_pollset_set(grpc_endpoint* /* ep */,
93
- grpc_pollset_set* /* pollset */) {}
94
- /// After shutdown, all endpoint operations except destroy are no-op,
95
- /// and will return some kind of sane default (empty strings, nullptrs, etc). It
96
- /// is the caller's responsibility to ensure that calls to endpoint_shutdown are
97
- /// synchronized.
98
- void endpoint_shutdown(grpc_endpoint* ep, grpc_error_handle why) {
99
- auto* eeep = reinterpret_cast<grpc_event_engine_endpoint*>(ep);
100
- if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
101
- std::string str = grpc_error_std_string(why);
102
- gpr_log(GPR_INFO, "TCP Endpoint %p shutdown why=%s", eeep->endpoint.get(),
103
- str.c_str());
104
- }
105
- eeep->endpoint.reset();
106
- }
107
-
108
- void endpoint_destroy(grpc_endpoint* ep) {
109
- auto* eeep = reinterpret_cast<grpc_event_engine_endpoint*>(ep);
110
- delete eeep;
111
- }
112
-
113
- absl::string_view endpoint_get_peer(grpc_endpoint* ep) {
114
- auto* eeep = reinterpret_cast<grpc_event_engine_endpoint*>(ep);
115
- if (eeep->endpoint == nullptr) {
116
- return "";
117
- }
118
- if (eeep->peer_address.empty()) {
119
- const EventEngine::ResolvedAddress& addr = eeep->endpoint->GetPeerAddress();
120
- eeep->peer_address = ResolvedAddressToURI(addr);
121
- }
122
- return eeep->peer_address;
123
- }
124
-
125
- absl::string_view endpoint_get_local_address(grpc_endpoint* ep) {
126
- auto* eeep = reinterpret_cast<grpc_event_engine_endpoint*>(ep);
127
- if (eeep->endpoint == nullptr) {
128
- return "";
129
- }
130
- if (eeep->local_address.empty()) {
131
- const EventEngine::ResolvedAddress& addr =
132
- eeep->endpoint->GetLocalAddress();
133
- eeep->local_address = ResolvedAddressToURI(addr);
134
- }
135
- return eeep->local_address;
136
- }
137
-
138
- int endpoint_get_fd(grpc_endpoint* /* ep */) { return -1; }
139
-
140
- bool endpoint_can_track_err(grpc_endpoint* /* ep */) { return false; }
141
-
142
- grpc_endpoint_vtable grpc_event_engine_endpoint_vtable = {
143
- endpoint_read,
144
- endpoint_write,
145
- endpoint_add_to_pollset,
146
- endpoint_add_to_pollset_set,
147
- endpoint_delete_from_pollset_set,
148
- endpoint_shutdown,
149
- endpoint_destroy,
150
- endpoint_get_peer,
151
- endpoint_get_local_address,
152
- endpoint_get_fd,
153
- endpoint_can_track_err};
154
-
155
- } // namespace
156
-
157
- grpc_event_engine_endpoint* grpc_tcp_server_endpoint_create(
158
- std::unique_ptr<EventEngine::Endpoint> ee_endpoint) {
159
- auto endpoint = new grpc_event_engine_endpoint;
160
- endpoint->base.vtable = &grpc_event_engine_endpoint_vtable;
161
- endpoint->endpoint = std::move(ee_endpoint);
162
- return endpoint;
163
- }
164
-
165
- grpc_endpoint* grpc_tcp_create(const grpc_channel_args* /* channel_args */,
166
- absl::string_view /* peer_address */) {
167
- auto endpoint = new grpc_event_engine_endpoint;
168
- endpoint->base.vtable = &grpc_event_engine_endpoint_vtable;
169
- return &endpoint->base;
170
- }
171
-
172
- #endif // GRPC_USE_EVENT_ENGINE
@@ -1,52 +0,0 @@
1
- // Copyright 2021 The gRPC Authors
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
- #ifndef GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_ENDPOINT_H
15
- #define GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_ENDPOINT_H
16
-
17
- #include <grpc/support/port_platform.h>
18
-
19
- #ifdef GRPC_USE_EVENT_ENGINE
20
- #include <grpc/event_engine/event_engine.h>
21
-
22
- #include "src/core/lib/iomgr/endpoint.h"
23
- #include "src/core/lib/iomgr/resource_quota.h"
24
-
25
- struct grpc_event_engine_endpoint {
26
- grpc_endpoint base;
27
- std::unique_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
28
- endpoint;
29
- std::string peer_address;
30
- std::string local_address;
31
- std::aligned_storage<
32
- sizeof(grpc_event_engine::experimental::SliceBuffer),
33
- alignof(grpc_event_engine::experimental::SliceBuffer)>::type read_buffer;
34
- std::aligned_storage<
35
- sizeof(grpc_event_engine::experimental::SliceBuffer),
36
- alignof(grpc_event_engine::experimental::SliceBuffer)>::type write_buffer;
37
- };
38
-
39
- /// Creates an internal grpc_endpoint struct from an EventEngine Endpoint.
40
- /// Server code needs to create grpc_endpoints after the EventEngine has made
41
- /// connections.
42
- grpc_event_engine_endpoint* grpc_tcp_server_endpoint_create(
43
- std::unique_ptr<grpc_event_engine::experimental::EventEngine::Endpoint> ee);
44
-
45
- /// Creates a new internal grpc_endpoint struct, when no EventEngine Endpoint
46
- /// has yet been created. This is used in client code before connections are
47
- /// established. Takes ownership of the slice_allocator.
48
- grpc_endpoint* grpc_tcp_create(const grpc_channel_args* channel_args,
49
- absl::string_view peer_address);
50
-
51
- #endif
52
- #endif // GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_ENDPOINT_H
@@ -1,85 +0,0 @@
1
- // Copyright 2021 The gRPC Authors
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
- #include <grpc/support/port_platform.h>
15
-
16
- #ifdef GRPC_USE_EVENT_ENGINE
17
- #include <grpc/event_engine/event_engine.h>
18
-
19
- #include "src/core/lib/debug/trace.h"
20
- #include "src/core/lib/iomgr/closure.h"
21
- #include "src/core/lib/iomgr/event_engine/resolver.h"
22
- #include "src/core/lib/iomgr/iomgr_internal.h"
23
- #include "src/core/lib/iomgr/tcp_client.h"
24
- #include "src/core/lib/iomgr/tcp_server.h"
25
- #include "src/core/lib/iomgr/timer.h"
26
- #include "src/core/lib/surface/init.h"
27
-
28
- extern grpc_tcp_client_vtable grpc_event_engine_tcp_client_vtable;
29
- extern grpc_tcp_server_vtable grpc_event_engine_tcp_server_vtable;
30
- extern grpc_timer_vtable grpc_event_engine_timer_vtable;
31
- extern grpc_pollset_vtable grpc_event_engine_pollset_vtable;
32
- extern grpc_pollset_set_vtable grpc_event_engine_pollset_set_vtable;
33
-
34
- // Disabled by default. grpc_polling_trace must be defined in all iomgr
35
- // implementations due to its usage in lockfree_event.
36
- grpc_core::DebugOnlyTraceFlag grpc_polling_trace(false, "polling");
37
-
38
- namespace {
39
-
40
- using ::grpc_event_engine::experimental::EventEngine;
41
- using ::grpc_event_engine::experimental::GetDefaultEventEngine;
42
-
43
- // TODO(nnoble): Instantiate the default EventEngine if none have been provided.
44
- void iomgr_platform_init(void) {}
45
-
46
- void iomgr_platform_flush(void) {}
47
-
48
- void iomgr_platform_shutdown(void) {}
49
-
50
- void iomgr_platform_shutdown_background_closure(void) {}
51
-
52
- bool iomgr_platform_is_any_background_poller_thread(void) {
53
- return grpc_event_engine::experimental::GetDefaultEventEngine()
54
- ->IsWorkerThread();
55
- }
56
-
57
- bool iomgr_platform_add_closure_to_background_poller(
58
- grpc_closure* /* closure */, grpc_error_handle /* error */) {
59
- return false;
60
- }
61
-
62
- grpc_iomgr_platform_vtable vtable = {
63
- iomgr_platform_init,
64
- iomgr_platform_flush,
65
- iomgr_platform_shutdown,
66
- iomgr_platform_shutdown_background_closure,
67
- iomgr_platform_is_any_background_poller_thread,
68
- iomgr_platform_add_closure_to_background_poller};
69
-
70
- } // namespace
71
-
72
- void grpc_set_default_iomgr_platform() {
73
- grpc_set_tcp_client_impl(&grpc_event_engine_tcp_client_vtable);
74
- grpc_set_tcp_server_impl(&grpc_event_engine_tcp_server_vtable);
75
- grpc_set_timer_impl(&grpc_event_engine_timer_vtable);
76
- grpc_set_pollset_vtable(&grpc_event_engine_pollset_vtable);
77
- grpc_set_pollset_set_vtable(&grpc_event_engine_pollset_set_vtable);
78
- grpc_core::SetDNSResolver(
79
- grpc_core::experimental::EventEngineDNSResolver::GetOrCreate());
80
- grpc_set_iomgr_platform_vtable(&vtable);
81
- }
82
-
83
- bool grpc_iomgr_run_in_background() { return false; }
84
-
85
- #endif // GRPC_USE_EVENT_ENGINE
@@ -1,87 +0,0 @@
1
- // Copyright 2021 The gRPC Authors
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
- #include <grpc/support/port_platform.h>
15
-
16
- #ifdef GRPC_USE_EVENT_ENGINE
17
- #include <grpc/event_engine/event_engine.h>
18
-
19
- #include "src/core/lib/iomgr/event_engine/pollset.h"
20
- #include "src/core/lib/iomgr/iomgr_internal.h"
21
- #include "src/core/lib/iomgr/pollset.h"
22
- #include "src/core/lib/iomgr/pollset_set.h"
23
-
24
- namespace {
25
-
26
- static gpr_mu g_mu;
27
- static gpr_cv g_cv;
28
-
29
- // --- pollset vtable API ---
30
- void pollset_global_init(void) {
31
- gpr_mu_init(&g_mu);
32
- gpr_cv_init(&g_cv);
33
- }
34
- void pollset_global_shutdown(void) {
35
- gpr_cv_destroy(&g_cv);
36
- gpr_mu_destroy(&g_mu);
37
- }
38
- void pollset_init(grpc_pollset* pollset, gpr_mu** mu) { *mu = &g_mu; }
39
- void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
40
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_NONE);
41
- }
42
- void pollset_destroy(grpc_pollset* pollset) {}
43
- grpc_error_handle pollset_work(grpc_pollset* pollset,
44
- grpc_pollset_worker** worker,
45
- grpc_core::Timestamp deadline) {
46
- (void)worker;
47
- gpr_cv_wait(&g_cv, &g_mu, deadline.as_timespec(GPR_CLOCK_REALTIME));
48
- return GRPC_ERROR_NONE;
49
- }
50
- grpc_error_handle pollset_kick(grpc_pollset* pollset,
51
- grpc_pollset_worker* specific_worker) {
52
- (void)pollset;
53
- (void)specific_worker;
54
- return GRPC_ERROR_NONE;
55
- }
56
- size_t pollset_size(void) { return 1; }
57
-
58
- // --- pollset_set vtable API ---
59
- grpc_pollset_set* pollset_set_create(void) { return nullptr; }
60
- void pollset_set_destroy(grpc_pollset_set* pollset_set) {}
61
- void pollset_set_add_pollset(grpc_pollset_set* pollset_set,
62
- grpc_pollset* pollset) {}
63
-
64
- void pollset_set_del_pollset(grpc_pollset_set* pollset_set,
65
- grpc_pollset* pollset) {}
66
- void pollset_set_add_pollset_set(grpc_pollset_set* bag,
67
- grpc_pollset_set* item) {}
68
- void pollset_set_del_pollset_set(grpc_pollset_set* bag,
69
- grpc_pollset_set* item) {}
70
-
71
- } // namespace
72
-
73
- void grpc_pollset_ee_broadcast_event() { gpr_cv_signal(&g_cv); }
74
-
75
- // --- vtables ---
76
- grpc_pollset_vtable grpc_event_engine_pollset_vtable = {
77
- pollset_global_init, pollset_global_shutdown,
78
- pollset_init, pollset_shutdown,
79
- pollset_destroy, pollset_work,
80
- pollset_kick, pollset_size};
81
-
82
- grpc_pollset_set_vtable grpc_event_engine_pollset_set_vtable = {
83
- pollset_set_create, pollset_set_destroy,
84
- pollset_set_add_pollset, pollset_set_del_pollset,
85
- pollset_set_add_pollset_set, pollset_set_del_pollset_set};
86
-
87
- #endif // GRPC_USE_EVENT_ENGINE
@@ -1,51 +0,0 @@
1
- // Copyright 2021 The gRPC Authors
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
- #ifndef GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_PROMISE_H
15
- #define GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_PROMISE_H
16
- #include <grpc/support/port_platform.h>
17
-
18
- #include "src/core/lib/gprpp/sync.h"
19
-
20
- namespace grpc_event_engine {
21
- namespace experimental {
22
-
23
- /// A minimal promise implementation.
24
- ///
25
- /// This is light-duty, syntactical sugar around cv wait & signal, which is
26
- /// useful in some cases. A more robust implementation is being worked on
27
- /// separately.
28
- template <typename T>
29
- class Promise {
30
- public:
31
- T& Get() {
32
- absl::MutexLock lock(&mu_);
33
- cv_.Wait(&mu_);
34
- return val_;
35
- }
36
- void Set(T&& val) {
37
- absl::MutexLock lock(&mu_);
38
- val_ = std::move(val);
39
- cv_.Signal();
40
- }
41
-
42
- private:
43
- absl::Mutex mu_;
44
- absl::CondVar cv_;
45
- T val_;
46
- };
47
-
48
- } // namespace experimental
49
- } // namespace grpc_event_engine
50
-
51
- #endif // GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_PROMISE_H
@@ -1,47 +0,0 @@
1
- // Copyright 2021 The gRPC Authors
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
- #include <grpc/support/port_platform.h>
15
-
16
- #include "src/core/lib/iomgr/event_engine/resolved_address_internal.h"
17
-
18
- #include <grpc/event_engine/event_engine.h>
19
-
20
- #include "src/core/lib/address_utils/sockaddr_utils.h"
21
- #include "src/core/lib/iomgr/resolve_address.h"
22
-
23
- namespace grpc_event_engine {
24
- namespace experimental {
25
-
26
- EventEngine::ResolvedAddress CreateResolvedAddress(
27
- const grpc_resolved_address& addr) {
28
- return EventEngine::ResolvedAddress(
29
- reinterpret_cast<const sockaddr*>(addr.addr), addr.len);
30
- }
31
-
32
- grpc_resolved_address CreateGRPCResolvedAddress(
33
- const EventEngine::ResolvedAddress& ra) {
34
- grpc_resolved_address grpc_addr;
35
- memcpy(grpc_addr.addr, ra.address(), ra.size());
36
- grpc_addr.len = ra.size();
37
- return grpc_addr;
38
- }
39
-
40
- // TODO(ctiller): Move this to somewhere more permanent as we're deleting iomgr.
41
- std::string ResolvedAddressToURI(const EventEngine::ResolvedAddress& addr) {
42
- auto gra = CreateGRPCResolvedAddress(addr);
43
- return grpc_sockaddr_to_uri(&gra);
44
- }
45
-
46
- } // namespace experimental
47
- } // namespace grpc_event_engine
@@ -1,37 +0,0 @@
1
- // Copyright 2021 The gRPC Authors
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
- #ifndef GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_RESOLVED_ADDRESS_INTERNAL_H
15
- #define GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_RESOLVED_ADDRESS_INTERNAL_H
16
-
17
- #include <grpc/support/port_platform.h>
18
-
19
- #include <grpc/event_engine/event_engine.h>
20
-
21
- #include "src/core/lib/iomgr/resolve_address.h"
22
-
23
- namespace grpc_event_engine {
24
- namespace experimental {
25
-
26
- EventEngine::ResolvedAddress CreateResolvedAddress(
27
- const grpc_resolved_address& addr);
28
-
29
- grpc_resolved_address CreateGRPCResolvedAddress(
30
- const EventEngine::ResolvedAddress& ra);
31
-
32
- std::string ResolvedAddressToURI(const EventEngine::ResolvedAddress& addr);
33
-
34
- } // namespace experimental
35
- } // namespace grpc_event_engine
36
-
37
- #endif // GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_RESOLVED_ADDRESS_INTERNAL_H
@@ -1,133 +0,0 @@
1
- // Copyright 2021 The gRPC Authors
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
- #include <grpc/support/port_platform.h>
15
-
16
- #ifdef GRPC_USE_EVENT_ENGINE
17
- #include "absl/functional/bind_front.h"
18
-
19
- #include <grpc/event_engine/event_engine.h>
20
-
21
- #include "src/core/lib/address_utils/sockaddr_utils.h"
22
- #include "src/core/lib/event_engine/event_engine_factory.h"
23
- #include "src/core/lib/gprpp/sync.h"
24
- #include "src/core/lib/iomgr/error.h"
25
- #include "src/core/lib/iomgr/event_engine/promise.h"
26
- #include "src/core/lib/iomgr/event_engine/resolved_address_internal.h"
27
- #include "src/core/lib/iomgr/event_engine/resolver.h"
28
- #include "src/core/lib/iomgr/resolve_address.h"
29
- #include "src/core/lib/iomgr/resolve_address_impl.h"
30
- #include "src/core/lib/iomgr/work_serializer.h"
31
- #include "src/core/lib/surface/init.h"
32
- #include "src/core/lib/transport/error_utils.h"
33
-
34
- namespace grpc_core {
35
- namespace experimental {
36
- namespace {
37
- using ::grpc_event_engine::experimental::CreateGRPCResolvedAddress;
38
- using ::grpc_event_engine::experimental::EventEngine;
39
- using ::grpc_event_engine::experimental::GetDefaultEventEngine;
40
- using ::grpc_event_engine::experimental::Promise;
41
-
42
- /// A fire-and-forget class representing an individual DNS request.
43
- ///
44
- /// This provides a place to store the ownership of the DNSResolver object until
45
- /// the request is complete.
46
- class EventEngineDNSRequest : DNSRequest {
47
- public:
48
- EventEngineDNSRequest(std::unique_ptr<EventEngine::DNSResolver> dns_resolver,
49
- absl::string_view name, absl::string_view default_port,
50
- grpc_closure* on_done,
51
- std::vector<grpc_resolved_address>* addresses)
52
- : dns_resolver_(std::move(dns_resolver)),
53
- name_(std::string(name)),
54
- default_port_(std::string(default_port)),
55
- on_done_(std::move(on_done)) {}
56
-
57
- void Start() override {
58
- if (dns_resolver_ == nullptr) {
59
- new DNSCallbackExecCtxScheduler(
60
- std::move(on_done_),
61
- absl::UnknownError("Failed to get DNS Resolver."));
62
- return;
63
- }
64
- Ref().release(); // ref held by pending resolution
65
- dns_resolver_->LookupHostname(
66
- absl::bind_front(&EventEngineDNSRequest::OnLookupComplete, this), name_,
67
- default_port_, absl::InfiniteFuture());
68
- }
69
-
70
- // TODO(hork): implement cancellation; currently it's a no-op
71
- void Orphan() override { Unref(); }
72
-
73
- private:
74
- void OnLookupComplete(
75
- absl::StatusOr<std::vector<EventEngine::ResolvedAddress>> addresses) {
76
- ExecCtx exec_ctx;
77
- // Convert addresses to iomgr form.
78
- std::vector<grpc_resolved_address> result;
79
- results.reserve(addresses->size());
80
- for (size_t i = 0; i < addresses->size(); ++i) {
81
- results.push_back(CreateGRPCResolvedAddress(addresses[i]));
82
- }
83
- if (addresses.ok()) {
84
- on_done_(std::move(result));
85
- } else {
86
- on_done_(addresses.status());
87
- }
88
- Unref();
89
- }
90
-
91
- std::unique_ptr<EventEngine::DNSResolver> dns_resolver_;
92
- const std::string name_;
93
- const std::string default_port_;
94
- std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
95
- on_done_;
96
- };
97
-
98
- } // namespace
99
-
100
- DNSResolver* EventEngineDNSResolver::GetOrCreate() {
101
- static EventEngineDNSResolver* instance = new EventEngineDNSResolver();
102
- return instance;
103
- }
104
-
105
- OrphanablePtr<DNSResolver::Request> EventEngineDNSResolver::ResolveName(
106
- absl::string_view name, absl::string_view default_port,
107
- grpc_pollset_set* /* interested_parties */,
108
- std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
109
- on_done) {
110
- std::unique_ptr<EventEngine::DNSResolver> dns_resolver =
111
- GetDefaultEventEngine()->GetDNSResolver();
112
- return MakeOrphanable<EventEngineDNSRequest>(
113
- std::move(dns_resolver), name, default_port, std::move(on_done));
114
- }
115
-
116
- absl::StatusOr<std::vector<grpc_resolved_address>>
117
- EventEngineDNSResolver::ResolveNameBlocking(absl::string_view name,
118
- absl::string_view default_port) {
119
- grpc_closure on_done;
120
- Promise<absl::StatusOr<std::vector<grpc_resolved_address>>> evt;
121
- auto r = ResolveName(
122
- name, default_port,
123
- [&evt](void(absl::StatusOr<std::vector<grpc_resolved_address>> result) {
124
- evt.Set(std::move(result));
125
- }));
126
- r->Start();
127
- return evt.Get();
128
- }
129
-
130
- } // namespace experimental
131
- } // namespace grpc_core
132
-
133
- #endif // GRPC_USE_EVENT_ENGINE