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
@@ -0,0 +1,206 @@
1
+ // Copyright 2022 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/event_engine/iomgr_engine.h"
17
+
18
+ #include <string>
19
+ #include <type_traits>
20
+ #include <utility>
21
+
22
+ #include "absl/cleanup/cleanup.h"
23
+ #include "absl/container/flat_hash_set.h"
24
+ #include "absl/strings/str_cat.h"
25
+ #include "absl/time/clock.h"
26
+
27
+ #include <grpc/event_engine/event_engine.h>
28
+ #include <grpc/support/log.h>
29
+
30
+ #include "src/core/lib/debug/trace.h"
31
+ #include "src/core/lib/event_engine/trace.h"
32
+ #include "src/core/lib/gprpp/match.h"
33
+ #include "src/core/lib/gprpp/time.h"
34
+ #include "src/core/lib/iomgr/closure.h"
35
+ #include "src/core/lib/iomgr/error.h"
36
+ #include "src/core/lib/iomgr/exec_ctx.h"
37
+ #include "src/core/lib/iomgr/executor.h"
38
+ #include "src/core/lib/iomgr/timer.h"
39
+
40
+ namespace grpc_event_engine {
41
+ namespace experimental {
42
+
43
+ namespace {
44
+
45
+ struct ClosureData {
46
+ grpc_timer timer;
47
+ grpc_closure closure;
48
+ absl::variant<std::function<void()>, EventEngine::Closure*> cb;
49
+ IomgrEventEngine* engine;
50
+ EventEngine::TaskHandle handle;
51
+ };
52
+
53
+ // Timer limits due to quirks in the iomgr implementation.
54
+ // If deadline <= Now, the callback will be run inline, which can result in lock
55
+ // issues. And absl::InfiniteFuture yields UB.
56
+ absl::Time Clamp(absl::Time when) {
57
+ absl::Time max = absl::Now() + absl::Hours(8766);
58
+ absl::Time min = absl::Now() + absl::Milliseconds(2);
59
+ if (when > max) return max;
60
+ if (when < min) return min;
61
+ return when;
62
+ }
63
+
64
+ std::string HandleToString(EventEngine::TaskHandle handle) {
65
+ return absl::StrCat("{", handle.keys[0], ",", handle.keys[1], "}");
66
+ }
67
+
68
+ } // namespace
69
+
70
+ IomgrEventEngine::IomgrEventEngine() {}
71
+
72
+ IomgrEventEngine::~IomgrEventEngine() {
73
+ grpc_core::MutexLock lock(&mu_);
74
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
75
+ for (auto handle : known_handles_) {
76
+ gpr_log(GPR_ERROR,
77
+ "(event_engine) IomgrEventEngine:%p uncleared TaskHandle at "
78
+ "shutdown:%s",
79
+ this, HandleToString(handle).c_str());
80
+ }
81
+ }
82
+ GPR_ASSERT(GPR_LIKELY(known_handles_.empty()));
83
+ }
84
+
85
+ bool IomgrEventEngine::Cancel(EventEngine::TaskHandle handle) {
86
+ grpc_core::ExecCtx ctx;
87
+ grpc_core::MutexLock lock(&mu_);
88
+ if (!known_handles_.contains(handle)) return false;
89
+ auto* cd = reinterpret_cast<ClosureData*>(handle.keys[0]);
90
+ grpc_timer_cancel(&cd->timer);
91
+ known_handles_.erase(handle);
92
+ return true;
93
+ }
94
+
95
+ EventEngine::TaskHandle IomgrEventEngine::RunAt(absl::Time when,
96
+ std::function<void()> closure) {
97
+ return RunAtInternal(when, std::move(closure));
98
+ }
99
+
100
+ EventEngine::TaskHandle IomgrEventEngine::RunAt(absl::Time when,
101
+ EventEngine::Closure* closure) {
102
+ return RunAtInternal(when, closure);
103
+ }
104
+
105
+ void IomgrEventEngine::Run(std::function<void()> closure) {
106
+ RunInternal(closure);
107
+ }
108
+
109
+ void IomgrEventEngine::Run(EventEngine::Closure* closure) {
110
+ RunInternal(closure);
111
+ }
112
+
113
+ EventEngine::TaskHandle IomgrEventEngine::RunAtInternal(
114
+ absl::Time when,
115
+ absl::variant<std::function<void()>, EventEngine::Closure*> cb) {
116
+ when = Clamp(when);
117
+ grpc_core::ExecCtx ctx;
118
+ auto* cd = new ClosureData;
119
+ cd->cb = std::move(cb);
120
+ cd->engine = this;
121
+ GRPC_CLOSURE_INIT(
122
+ &cd->closure,
123
+ [](void* arg, grpc_error_handle error) {
124
+ auto* cd = static_cast<ClosureData*>(arg);
125
+ GRPC_EVENT_ENGINE_TRACE("IomgrEventEngine:%p executing callback:%s",
126
+ cd->engine, HandleToString(cd->handle).c_str());
127
+ {
128
+ grpc_core::MutexLock lock(&cd->engine->mu_);
129
+ cd->engine->known_handles_.erase(cd->handle);
130
+ }
131
+ auto cleaner = absl::MakeCleanup([cd] { delete cd; });
132
+ if (error == GRPC_ERROR_CANCELLED) return;
133
+ grpc_core::Match(
134
+ cd->cb, [](EventEngine::Closure* cb) { cb->Run(); },
135
+ [](std::function<void()> fn) { fn(); });
136
+ },
137
+ cd, nullptr);
138
+ // kludge to deal with realtime/monotonic clock conversion
139
+ absl::Time absl_now = absl::Now();
140
+ grpc_core::Duration duration = grpc_core::Duration::Milliseconds(
141
+ absl::ToInt64Milliseconds(when - absl_now) + 1);
142
+ grpc_core::ExecCtx::Get()->InvalidateNow();
143
+ grpc_core::Timestamp when_internal = grpc_core::ExecCtx::Get()->Now() +
144
+ duration +
145
+ grpc_core::Duration::Milliseconds(1);
146
+ EventEngine::TaskHandle handle{reinterpret_cast<intptr_t>(cd),
147
+ aba_token_.fetch_add(1)};
148
+ grpc_core::MutexLock lock(&mu_);
149
+ known_handles_.insert(handle);
150
+ cd->handle = handle;
151
+ GRPC_EVENT_ENGINE_TRACE("IomgrEventEngine:%p scheduling callback:%s", this,
152
+ HandleToString(handle).c_str());
153
+ grpc_timer_init(&cd->timer, when_internal, &cd->closure);
154
+ return handle;
155
+ }
156
+
157
+ void IomgrEventEngine::RunInternal(
158
+ absl::variant<std::function<void()>, EventEngine::Closure*> cb) {
159
+ auto* cd = new ClosureData;
160
+ cd->cb = std::move(cb);
161
+ cd->engine = this;
162
+ GRPC_CLOSURE_INIT(
163
+ &cd->closure,
164
+ [](void* arg, grpc_error_handle /*error*/) {
165
+ auto* cd = static_cast<ClosureData*>(arg);
166
+ auto cleaner = absl::MakeCleanup([cd] { delete cd; });
167
+ grpc_core::Match(
168
+ cd->cb, [](EventEngine::Closure* cb) { cb->Run(); },
169
+ [](std::function<void()> fn) { fn(); });
170
+ },
171
+ cd, nullptr);
172
+ // TODO(hork): have the EE spawn dedicated closure thread(s)
173
+ grpc_core::Executor::Run(&cd->closure, GRPC_ERROR_NONE);
174
+ }
175
+
176
+ std::unique_ptr<EventEngine::DNSResolver> IomgrEventEngine::GetDNSResolver(
177
+ EventEngine::DNSResolver::ResolverOptions const& /*options*/) {
178
+ GPR_ASSERT(false && "unimplemented");
179
+ }
180
+
181
+ bool IomgrEventEngine::IsWorkerThread() {
182
+ GPR_ASSERT(false && "unimplemented");
183
+ }
184
+
185
+ bool IomgrEventEngine::CancelConnect(EventEngine::ConnectionHandle /*handle*/) {
186
+ GPR_ASSERT(false && "unimplemented");
187
+ }
188
+
189
+ EventEngine::ConnectionHandle IomgrEventEngine::Connect(
190
+ OnConnectCallback /*on_connect*/, const ResolvedAddress& /*addr*/,
191
+ const EndpointConfig& /*args*/, MemoryAllocator /*memory_allocator*/,
192
+ absl::Time /*deadline*/) {
193
+ GPR_ASSERT(false && "unimplemented");
194
+ }
195
+
196
+ absl::StatusOr<std::unique_ptr<EventEngine::Listener>>
197
+ IomgrEventEngine::CreateListener(
198
+ Listener::AcceptCallback /*on_accept*/,
199
+ std::function<void(absl::Status)> /*on_shutdown*/,
200
+ const EndpointConfig& /*config*/,
201
+ std::unique_ptr<MemoryAllocatorFactory> /*memory_allocator_factory*/) {
202
+ GPR_ASSERT(false && "unimplemented");
203
+ }
204
+
205
+ } // namespace experimental
206
+ } // namespace grpc_event_engine
@@ -0,0 +1,118 @@
1
+ // Copyright 2022 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_EVENT_ENGINE_IOMGR_ENGINE_H
15
+ #define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_H
16
+ #include <grpc/support/port_platform.h>
17
+
18
+ #include <stdint.h>
19
+
20
+ #include <atomic>
21
+ #include <functional>
22
+ #include <memory>
23
+
24
+ #include "absl/base/thread_annotations.h"
25
+ #include "absl/status/status.h"
26
+ #include "absl/status/statusor.h"
27
+ #include "absl/strings/string_view.h"
28
+ #include "absl/time/time.h"
29
+ #include "absl/types/variant.h"
30
+
31
+ #include <grpc/event_engine/endpoint_config.h>
32
+ #include <grpc/event_engine/event_engine.h>
33
+ #include <grpc/event_engine/memory_allocator.h>
34
+ #include <grpc/event_engine/slice_buffer.h>
35
+
36
+ #include "src/core/lib/event_engine/handle_containers.h"
37
+ #include "src/core/lib/gprpp/sync.h"
38
+
39
+ namespace grpc_event_engine {
40
+ namespace experimental {
41
+
42
+ class IomgrEventEngine final : public EventEngine {
43
+ public:
44
+ class IomgrEndpoint : public EventEngine::Endpoint {
45
+ public:
46
+ ~IomgrEndpoint() override;
47
+ void Read(std::function<void(absl::Status)> on_read, SliceBuffer* buffer,
48
+ const ReadArgs* args) override;
49
+ void Write(std::function<void(absl::Status)> on_writable, SliceBuffer* data,
50
+ const WriteArgs* args) override;
51
+ const ResolvedAddress& GetPeerAddress() const override;
52
+ const ResolvedAddress& GetLocalAddress() const override;
53
+ };
54
+ class IomgrListener : public EventEngine::Listener {
55
+ public:
56
+ ~IomgrListener() override;
57
+ absl::StatusOr<int> Bind(const ResolvedAddress& addr) override;
58
+ absl::Status Start() override;
59
+ };
60
+ class IomgrDNSResolver : public EventEngine::DNSResolver {
61
+ public:
62
+ ~IomgrDNSResolver() override;
63
+ LookupTaskHandle LookupHostname(LookupHostnameCallback on_resolve,
64
+ absl::string_view name,
65
+ absl::string_view default_port,
66
+ absl::Time deadline) override;
67
+ LookupTaskHandle LookupSRV(LookupSRVCallback on_resolve,
68
+ absl::string_view name,
69
+ absl::Time deadline) override;
70
+ LookupTaskHandle LookupTXT(LookupTXTCallback on_resolve,
71
+ absl::string_view name,
72
+ absl::Time deadline) override;
73
+ bool CancelLookup(LookupTaskHandle handle) override;
74
+ };
75
+
76
+ IomgrEventEngine();
77
+ ~IomgrEventEngine() override;
78
+
79
+ absl::StatusOr<std::unique_ptr<Listener>> CreateListener(
80
+ Listener::AcceptCallback on_accept,
81
+ std::function<void(absl::Status)> on_shutdown,
82
+ const EndpointConfig& config,
83
+ std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory)
84
+ override;
85
+
86
+ ConnectionHandle Connect(OnConnectCallback on_connect,
87
+ const ResolvedAddress& addr,
88
+ const EndpointConfig& args,
89
+ MemoryAllocator memory_allocator,
90
+ absl::Time deadline) override;
91
+
92
+ bool CancelConnect(ConnectionHandle handle) override;
93
+ bool IsWorkerThread() override;
94
+ std::unique_ptr<DNSResolver> GetDNSResolver(
95
+ const DNSResolver::ResolverOptions& options) override;
96
+ void Run(Closure* closure) override;
97
+ void Run(std::function<void()> closure) override;
98
+ TaskHandle RunAt(absl::Time when, Closure* closure) override;
99
+ TaskHandle RunAt(absl::Time when, std::function<void()> closure) override;
100
+ bool Cancel(TaskHandle handle) override;
101
+
102
+ private:
103
+ EventEngine::TaskHandle RunAtInternal(
104
+ absl::Time when,
105
+ absl::variant<std::function<void()>, EventEngine::Closure*> cb);
106
+
107
+ void RunInternal(
108
+ absl::variant<std::function<void()>, EventEngine::Closure*> cb);
109
+
110
+ grpc_core::Mutex mu_;
111
+ TaskHandleSet known_handles_ ABSL_GUARDED_BY(mu_);
112
+ std::atomic<intptr_t> aba_token_{0};
113
+ };
114
+
115
+ } // namespace experimental
116
+ } // namespace grpc_event_engine
117
+
118
+ #endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_H
@@ -14,10 +14,18 @@
14
14
 
15
15
  #include <grpc/support/port_platform.h>
16
16
 
17
+ #include <stdint.h>
18
+ #include <stdlib.h>
19
+
20
+ #include <memory>
21
+ #include <new>
22
+ #include <utility>
23
+
17
24
  #include <grpc/event_engine/memory_allocator.h>
25
+ #include <grpc/event_engine/memory_request.h>
26
+ #include <grpc/slice.h>
18
27
 
19
- #include "src/core/lib/gprpp/ref_counted.h"
20
- #include "src/core/lib/slice/slice_refcount.h"
28
+ #include "src/core/lib/slice/slice_refcount_base.h"
21
29
 
22
30
  namespace grpc_event_engine {
23
31
  namespace experimental {
@@ -41,7 +49,7 @@ class SliceRefCount : public grpc_slice_refcount {
41
49
  static void Destroy(grpc_slice_refcount* p) {
42
50
  auto* rc = static_cast<SliceRefCount*>(p);
43
51
  rc->~SliceRefCount();
44
- gpr_free(rc);
52
+ free(rc);
45
53
  }
46
54
 
47
55
  std::shared_ptr<internal::MemoryAllocatorImpl> allocator_;
@@ -52,7 +60,7 @@ class SliceRefCount : public grpc_slice_refcount {
52
60
 
53
61
  grpc_slice MemoryAllocator::MakeSlice(MemoryRequest request) {
54
62
  auto size = Reserve(request.Increase(sizeof(SliceRefCount)));
55
- void* p = gpr_malloc(size);
63
+ void* p = malloc(size);
56
64
  new (p) SliceRefCount(allocator_, size);
57
65
  grpc_slice slice;
58
66
  slice.refcount = static_cast<SliceRefCount*>(p);
@@ -11,13 +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
+
14
15
  #include <grpc/support/port_platform.h>
15
16
 
17
+ #include <string.h>
18
+
16
19
  #include <grpc/event_engine/event_engine.h>
17
- #include <grpc/event_engine/port.h>
18
20
  #include <grpc/support/log.h>
19
21
 
20
- #include "src/core/lib/gprpp/sync.h"
22
+ // IWYU pragma: no_include <sys/socket.h>
21
23
 
22
24
  namespace grpc_event_engine {
23
25
  namespace experimental {
@@ -0,0 +1,102 @@
1
+ // Copyright 2022 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
+
15
+ #include <grpc/support/port_platform.h>
16
+
17
+ #include <stdint.h>
18
+
19
+ #include <string>
20
+ #include <utility>
21
+
22
+ #include <grpc/event_engine/slice.h>
23
+ #include <grpc/slice.h>
24
+ #include <grpc/support/log.h>
25
+
26
+ #include "src/core/lib/slice/slice_internal.h"
27
+ #include "src/core/lib/slice/slice_refcount.h"
28
+ #include "src/core/lib/slice/slice_refcount_base.h"
29
+
30
+ namespace grpc_event_engine {
31
+ namespace experimental {
32
+
33
+ namespace slice_detail {
34
+
35
+ uint32_t BaseSlice::Hash() const { return grpc_slice_hash_internal(slice_); }
36
+
37
+ template <>
38
+ MutableSlice CopyConstructors<MutableSlice>::FromCopiedString(std::string s) {
39
+ return MutableSlice(grpc_slice_from_cpp_string(std::move(s)));
40
+ }
41
+
42
+ template <>
43
+ Slice CopyConstructors<Slice>::FromCopiedString(std::string s) {
44
+ return Slice(grpc_slice_from_cpp_string(std::move(s)));
45
+ }
46
+
47
+ } // namespace slice_detail
48
+
49
+ MutableSlice::MutableSlice(const grpc_slice& slice)
50
+ : slice_detail::BaseSlice(slice) {
51
+ GPR_DEBUG_ASSERT(slice.refcount == nullptr || slice.refcount->IsUnique());
52
+ }
53
+
54
+ MutableSlice::~MutableSlice() { grpc_slice_unref_internal(c_slice()); }
55
+
56
+ Slice Slice::TakeOwned() {
57
+ if (c_slice().refcount == nullptr) {
58
+ return Slice(c_slice());
59
+ }
60
+ if (c_slice().refcount == grpc_slice_refcount::NoopRefcount()) {
61
+ return Slice(grpc_slice_copy(c_slice()));
62
+ }
63
+ return Slice(TakeCSlice());
64
+ }
65
+
66
+ Slice Slice::AsOwned() const {
67
+ if (c_slice().refcount == nullptr) {
68
+ return Slice(c_slice());
69
+ }
70
+ if (c_slice().refcount == grpc_slice_refcount::NoopRefcount()) {
71
+ return Slice(grpc_slice_copy(c_slice()));
72
+ }
73
+ return Slice(grpc_slice_ref_internal(c_slice()));
74
+ }
75
+
76
+ MutableSlice Slice::TakeMutable() {
77
+ if (c_slice().refcount == nullptr) {
78
+ return MutableSlice(c_slice());
79
+ }
80
+ if (c_slice().refcount != grpc_slice_refcount::NoopRefcount() &&
81
+ c_slice().refcount->IsUnique()) {
82
+ return MutableSlice(TakeCSlice());
83
+ }
84
+ return MutableSlice(grpc_slice_copy(c_slice()));
85
+ }
86
+
87
+ Slice::~Slice() { grpc_slice_unref_internal(c_slice()); }
88
+
89
+ Slice Slice::Ref() const { return Slice(grpc_slice_ref_internal(c_slice())); }
90
+
91
+ Slice Slice::FromRefcountAndBytes(grpc_slice_refcount* r, const uint8_t* begin,
92
+ const uint8_t* end) {
93
+ grpc_slice out;
94
+ out.refcount = r;
95
+ if (r != grpc_slice_refcount::NoopRefcount()) r->Ref();
96
+ out.data.refcounted.bytes = const_cast<uint8_t*>(begin);
97
+ out.data.refcounted.length = end - begin;
98
+ return Slice(out);
99
+ }
100
+
101
+ } // namespace experimental
102
+ } // namespace grpc_event_engine
@@ -0,0 +1,50 @@
1
+ // Copyright 2022 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
+
15
+ #include <grpc/support/port_platform.h>
16
+
17
+ #include <stddef.h>
18
+
19
+ #include <grpc/event_engine/slice.h>
20
+ #include <grpc/event_engine/slice_buffer.h>
21
+ #include <grpc/slice.h>
22
+ #include <grpc/slice_buffer.h>
23
+
24
+ #include "src/core/lib/slice/slice_refcount.h"
25
+
26
+ namespace grpc_event_engine {
27
+ namespace experimental {
28
+
29
+ void SliceBuffer::Append(Slice slice) {
30
+ grpc_slice_buffer_add(&slice_buffer_, slice.TakeCSlice());
31
+ }
32
+
33
+ size_t SliceBuffer::AppendIndexed(Slice slice) {
34
+ return grpc_slice_buffer_add_indexed(&slice_buffer_, slice.TakeCSlice());
35
+ }
36
+
37
+ Slice SliceBuffer::TakeFirst() {
38
+ return Slice(grpc_slice_buffer_take_first(&slice_buffer_));
39
+ }
40
+
41
+ void SliceBuffer::Prepend(Slice slice) {
42
+ grpc_slice_buffer_undo_take_first(&slice_buffer_, slice.TakeCSlice());
43
+ }
44
+
45
+ Slice SliceBuffer::RefSlice(size_t index) {
46
+ return Slice(grpc_slice_ref_internal(slice_buffer_.slices[index]));
47
+ }
48
+
49
+ } // namespace experimental
50
+ } // namespace grpc_event_engine
@@ -1,4 +1,4 @@
1
- // Copyright 2021 The gRPC Authors
1
+ // Copyright 2022 The 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,15 +11,8 @@
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
- #ifndef GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_POLLSET_H
15
- #define GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_POLLSET_H
16
-
17
14
  #include <grpc/support/port_platform.h>
18
15
 
19
- #ifdef GRPC_USE_EVENT_ENGINE
20
-
21
- /// Signals pollset_work that some work has been done.
22
- void grpc_pollset_ee_broadcast_event();
16
+ #include "src/core/lib/debug/trace.h"
23
17
 
24
- #endif
25
- #endif // GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_POLLSET_H
18
+ grpc_core::TraceFlag grpc_event_engine_trace(false, "event_engine");
@@ -1,4 +1,4 @@
1
- // Copyright 2021 The gRPC Authors
1
+ // Copyright 2022 The 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,22 +11,20 @@
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>
14
+ #ifndef GRPC_CORE_LIB_EVENT_ENGINE_TRACE_H
15
+ #define GRPC_CORE_LIB_EVENT_ENGINE_TRACE_H
15
16
 
16
- #ifdef GRPC_USE_EVENT_ENGINE
17
- #include <stdlib.h>
17
+ #include <grpc/support/port_platform.h>
18
18
 
19
19
  #include <grpc/support/log.h>
20
20
 
21
- #include "src/core/lib/iomgr/endpoint_pair.h"
22
- #include "src/core/lib/iomgr/port.h"
21
+ #include "src/core/lib/debug/trace.h"
22
+
23
+ extern grpc_core::TraceFlag grpc_event_engine_trace;
23
24
 
24
- grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(
25
- const char* /* name */, grpc_channel_args* /* args */) {
26
- // TODO(hork): determine what's needed here in the long run
27
- GPR_ASSERT(
28
- false &&
29
- "grpc_iomgr_create_endpoint_pair is not suppoted with event_engine");
30
- }
25
+ #define GRPC_EVENT_ENGINE_TRACE(format, ...) \
26
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) { \
27
+ gpr_log(GPR_DEBUG, "(event_engine) " format, __VA_ARGS__); \
28
+ }
31
29
 
32
- #endif // GRPC_USE_EVENT_ENGINE
30
+ #endif // GRPC_CORE_LIB_EVENT_ENGINE_TRACE_H
@@ -47,6 +47,11 @@ static gpr_atm g_log_func = reinterpret_cast<gpr_atm>(gpr_default_log);
47
47
  static gpr_atm g_min_severity_to_print = GPR_LOG_SEVERITY_UNSET;
48
48
  static gpr_atm g_min_severity_to_print_stacktrace = GPR_LOG_SEVERITY_UNSET;
49
49
 
50
+ void gpr_unreachable_code(const char* reason, const char* file, int line) {
51
+ gpr_log(file, line, GPR_LOG_SEVERITY_ERROR, "UNREACHABLE CODE: %s", reason);
52
+ abort();
53
+ }
54
+
50
55
  const char* gpr_log_severity_string(gpr_log_severity severity) {
51
56
  switch (severity) {
52
57
  case GPR_LOG_SEVERITY_DEBUG:
@@ -54,8 +54,6 @@ class TlsTypeConstrainer {
54
54
  #include <array>
55
55
  #include <cstring>
56
56
 
57
- #include <grpc/support/log.h> /* for GPR_ASSERT */
58
-
59
57
  namespace grpc_core {
60
58
 
61
59
  template <typename T>
@@ -95,14 +93,14 @@ class PthreadTlsImpl : TlsTypeConstrainer<T> {
95
93
  typename std::remove_const<decltype(PthreadTlsImpl::keys_)>::type
96
94
  keys;
97
95
  for (pthread_key_t& key : keys) {
98
- GPR_ASSERT(0 == pthread_key_create(&key, nullptr));
96
+ if (0 != pthread_key_create(&key, nullptr)) abort();
99
97
  }
100
98
  return keys;
101
99
  }()) {}
102
100
  PthreadTlsImpl(T t) : PthreadTlsImpl() { *this = t; }
103
101
  ~PthreadTlsImpl() {
104
102
  for (pthread_key_t key : keys_) {
105
- GPR_ASSERT(0 == pthread_key_delete(key));
103
+ if (0 != pthread_key_delete(key)) abort();
106
104
  }
107
105
  }
108
106
 
@@ -132,7 +130,7 @@ class PthreadTlsImpl : TlsTypeConstrainer<T> {
132
130
  size_t remaining = reinterpret_cast<char*>(&t + 1) - src;
133
131
  size_t step = std::min(sizeof(dst), remaining);
134
132
  memcpy(&dst, src, step);
135
- GPR_ASSERT(0 == pthread_setspecific(key, reinterpret_cast<void*>(dst)));
133
+ if (0 != pthread_setspecific(key, reinterpret_cast<void*>(dst))) abort();
136
134
  src += step;
137
135
  }
138
136
  return t;
@@ -17,7 +17,10 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include <utility>
20
+ #include <stddef.h>
21
+ #include <stdint.h>
22
+
23
+ #include <type_traits>
21
24
 
22
25
  #include "src/core/lib/gpr/useful.h"
23
26
 
@@ -33,6 +36,7 @@ namespace grpc_core {
33
36
  // exactly that number of bits. Undefined if that bit count is not available.
34
37
  template <size_t kBits>
35
38
  struct UintSelector;
39
+
36
40
  template <>
37
41
  struct UintSelector<8> {
38
42
  typedef uint8_t Type;
@@ -18,6 +18,10 @@
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
20
  #include <cstddef>
21
+ #include <iterator>
22
+ #include <utility>
23
+
24
+ #include <grpc/support/log.h>
21
25
 
22
26
  #include "src/core/lib/gprpp/manual_constructor.h"
23
27
  #include "src/core/lib/resource_quota/arena.h"