grpc 1.47.0 → 1.48.0.pre1

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 (574) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +105 -47
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +20 -11
  5. data/include/grpc/event_engine/slice_buffer.h +8 -2
  6. data/include/grpc/grpc.h +3 -3
  7. data/include/grpc/impl/codegen/compression_types.h +2 -1
  8. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  9. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  10. data/include/grpc/impl/codegen/grpc_types.h +2 -1
  11. data/include/grpc/impl/codegen/port_platform.h +6 -3
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
  15. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  16. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
  18. data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
  19. data/src/core/ext/filters/client_channel/client_channel.h +19 -4
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
  43. data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
  44. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
  45. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
  52. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
  53. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
  59. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  60. data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
  62. data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
  63. data/src/core/ext/filters/client_channel/subchannel.h +6 -22
  64. data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
  68. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
  74. data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
  75. data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
  76. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  77. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  78. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  79. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  80. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  81. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  82. data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
  83. data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
  85. data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
  86. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  87. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  88. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  89. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  90. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  91. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  92. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  93. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
  95. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
  96. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
  97. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
  99. data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
  100. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  101. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  106. data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
  107. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  108. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  109. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  110. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
  112. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  113. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  117. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  118. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  119. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  120. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  121. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  122. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  123. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  124. data/src/core/ext/xds/upb_utils.h +1 -2
  125. data/src/core/ext/xds/xds_api.cc +16 -18
  126. data/src/core/ext/xds/xds_api.h +12 -5
  127. data/src/core/ext/xds/xds_bootstrap.cc +37 -24
  128. data/src/core/ext/xds/xds_bootstrap.h +9 -11
  129. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  130. data/src/core/ext/xds/xds_certificate_provider.h +16 -1
  131. data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
  132. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  133. data/src/core/ext/xds/xds_client.cc +71 -22
  134. data/src/core/ext/xds/xds_client.h +17 -3
  135. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  136. data/src/core/ext/xds/xds_client_stats.h +4 -3
  137. data/src/core/ext/xds/xds_cluster.cc +21 -10
  138. data/src/core/ext/xds/xds_cluster.h +9 -1
  139. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  140. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  141. data/src/core/ext/xds/xds_common_types.cc +36 -22
  142. data/src/core/ext/xds/xds_common_types.h +12 -4
  143. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  144. data/src/core/ext/xds/xds_endpoint.h +13 -5
  145. data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
  146. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  147. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  148. data/src/core/ext/xds/xds_http_filters.h +3 -3
  149. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  150. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  151. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  152. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  153. data/src/core/ext/xds/xds_listener.cc +51 -33
  154. data/src/core/ext/xds/xds_listener.h +10 -1
  155. data/src/core/ext/xds/xds_resource_type.h +3 -3
  156. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  157. data/src/core/ext/xds/xds_route_config.cc +56 -28
  158. data/src/core/ext/xds/xds_route_config.h +11 -2
  159. data/src/core/ext/xds/xds_routing.cc +16 -0
  160. data/src/core/ext/xds/xds_routing.h +7 -2
  161. data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
  162. data/src/core/lib/address_utils/parse_address.cc +5 -8
  163. data/src/core/lib/address_utils/parse_address.h +3 -2
  164. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  165. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  166. data/src/core/lib/avl/avl.h +3 -3
  167. data/src/core/lib/backoff/backoff.cc +1 -1
  168. data/src/core/lib/backoff/backoff.h +1 -1
  169. data/src/core/lib/channel/call_tracer.h +3 -3
  170. data/src/core/lib/channel/channel_args.h +1 -0
  171. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  172. data/src/core/lib/channel/channel_fwd.h +26 -0
  173. data/src/core/lib/channel/channel_stack.cc +4 -4
  174. data/src/core/lib/channel/channel_stack.h +1 -11
  175. data/src/core/lib/channel/channel_stack_builder.h +2 -5
  176. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  177. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  178. data/src/core/lib/channel/channelz.cc +2 -1
  179. data/src/core/lib/channel/channelz.h +2 -3
  180. data/src/core/lib/channel/channelz_registry.cc +4 -5
  181. data/src/core/lib/channel/connected_channel.cc +1 -0
  182. data/src/core/lib/channel/connected_channel.h +1 -0
  183. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  184. data/src/core/lib/channel/promise_based_filter.h +2 -0
  185. data/src/core/lib/compression/compression.cc +6 -1
  186. data/src/core/lib/compression/compression_internal.cc +3 -6
  187. data/src/core/lib/compression/compression_internal.h +3 -2
  188. data/src/core/lib/compression/message_compress.cc +3 -1
  189. data/src/core/lib/compression/message_compress.h +2 -3
  190. data/src/core/lib/debug/stats.cc +9 -9
  191. data/src/core/lib/debug/stats.h +2 -1
  192. data/src/core/lib/debug/stats_data.cc +2 -1
  193. data/src/core/lib/debug/stats_data.h +0 -4
  194. data/src/core/lib/debug/trace.h +13 -12
  195. data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
  196. data/src/core/lib/event_engine/event_engine.cc +24 -19
  197. data/src/core/lib/event_engine/event_engine_factory.h +2 -2
  198. data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
  199. data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
  200. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  201. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  202. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  203. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  204. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  205. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  206. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  207. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  208. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  209. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  210. data/src/core/lib/event_engine/promise.h +69 -0
  211. data/src/core/lib/gpr/time_posix.cc +6 -9
  212. data/src/core/lib/gpr/time_windows.cc +10 -7
  213. data/src/core/lib/gprpp/manual_constructor.h +0 -67
  214. data/src/core/lib/gprpp/status_helper.cc +44 -30
  215. data/src/core/lib/gprpp/time.cc +8 -0
  216. data/src/core/lib/gprpp/time.h +4 -0
  217. data/src/core/lib/http/format_request.cc +5 -4
  218. data/src/core/lib/http/format_request.h +1 -1
  219. data/src/core/lib/http/httpcli.cc +18 -12
  220. data/src/core/lib/http/httpcli.h +19 -3
  221. data/src/core/lib/http/httpcli_security_connector.cc +16 -4
  222. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  223. data/src/core/lib/http/parser.cc +6 -7
  224. data/src/core/lib/http/parser.h +3 -0
  225. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  226. data/src/core/lib/iomgr/endpoint.h +1 -1
  227. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  228. data/src/core/lib/iomgr/error.cc +11 -9
  229. data/src/core/lib/iomgr/error.h +9 -5
  230. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  231. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  232. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  233. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  234. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  235. data/src/core/lib/iomgr/ev_posix.h +5 -3
  236. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  237. data/src/core/lib/iomgr/iomgr.cc +7 -0
  238. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  239. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  240. data/src/core/lib/iomgr/load_file.cc +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
  242. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  243. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  244. data/src/core/lib/iomgr/tcp_client.h +24 -13
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  247. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  249. data/src/core/lib/iomgr/tcp_posix.cc +91 -29
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  254. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  256. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  257. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  258. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  259. data/src/core/lib/iomgr/work_serializer.h +2 -3
  260. data/src/core/lib/matchers/matchers.cc +6 -3
  261. data/src/core/lib/matchers/matchers.h +2 -0
  262. data/src/core/lib/promise/activity.cc +0 -1
  263. data/src/core/lib/promise/activity.h +7 -13
  264. data/src/core/lib/promise/loop.h +1 -0
  265. data/src/core/lib/promise/promise.h +1 -0
  266. data/src/core/lib/promise/sleep.cc +36 -31
  267. data/src/core/lib/promise/sleep.h +25 -25
  268. data/src/core/lib/resolver/resolver.cc +5 -0
  269. data/src/core/lib/resolver/resolver.h +3 -0
  270. data/src/core/lib/resolver/resolver_factory.h +5 -2
  271. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  272. data/src/core/lib/resolver/resolver_registry.h +12 -1
  273. data/src/core/lib/resolver/server_address.cc +8 -0
  274. data/src/core/lib/resolver/server_address.h +9 -2
  275. data/src/core/lib/resource_quota/memory_quota.cc +18 -60
  276. data/src/core/lib/resource_quota/memory_quota.h +11 -25
  277. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  278. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  279. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  280. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  281. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  282. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  283. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
  284. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  285. data/src/core/lib/security/authorization/matchers.cc +9 -1
  286. data/src/core/lib/security/authorization/matchers.h +7 -0
  287. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  288. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  289. data/src/core/lib/security/context/security_context.cc +5 -2
  290. data/src/core/lib/security/context/security_context.h +14 -2
  291. data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
  292. data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
  293. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  294. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  295. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  296. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  297. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  298. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  299. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  300. data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
  301. data/src/core/lib/security/credentials/credentials.cc +4 -8
  302. data/src/core/lib/security/credentials/credentials.h +10 -8
  303. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
  304. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  305. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  306. data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
  307. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  308. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  309. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  310. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
  311. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  312. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
  313. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
  314. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  315. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
  316. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
  317. data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
  318. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  319. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
  320. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
  321. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  322. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  323. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
  324. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  325. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  326. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  327. data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
  328. data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
  329. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
  330. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  331. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
  332. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  333. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
  334. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
  335. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  336. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  337. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  338. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
  339. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  340. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  341. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  342. data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
  343. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
  344. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  345. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  346. data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
  347. data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
  348. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  349. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  350. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  354. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  355. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  356. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  357. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  358. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  359. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  360. data/src/core/lib/security/security_connector/security_connector.h +18 -6
  361. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
  362. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  363. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  364. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  365. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  366. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  368. data/src/core/lib/security/transport/auth_filters.h +7 -0
  369. data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
  370. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  371. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  372. data/src/core/lib/security/transport/security_handshaker.cc +44 -11
  373. data/src/core/lib/security/transport/security_handshaker.h +4 -0
  374. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  375. data/src/core/lib/security/util/json_util.cc +3 -2
  376. data/src/core/lib/security/util/json_util.h +0 -2
  377. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  378. data/src/core/lib/service_config/service_config_impl.cc +6 -6
  379. data/src/core/lib/service_config/service_config_impl.h +1 -3
  380. data/src/core/lib/service_config/service_config_parser.cc +2 -4
  381. data/src/core/lib/slice/slice_buffer.cc +30 -1
  382. data/src/core/lib/slice/slice_buffer.h +37 -6
  383. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  384. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  385. data/src/core/lib/surface/call.cc +53 -115
  386. data/src/core/lib/surface/call.h +5 -1
  387. data/src/core/lib/surface/channel.h +2 -0
  388. data/src/core/lib/surface/channel_ping.cc +1 -1
  389. data/src/core/lib/surface/completion_queue.cc +15 -14
  390. data/src/core/lib/surface/completion_queue.h +2 -1
  391. data/src/core/lib/surface/init.cc +0 -1
  392. data/src/core/lib/surface/lame_client.cc +1 -1
  393. data/src/core/lib/surface/lame_client.h +1 -1
  394. data/src/core/lib/surface/server.cc +14 -8
  395. data/src/core/lib/surface/server.h +4 -1
  396. data/src/core/lib/surface/validate_metadata.cc +1 -1
  397. data/src/core/lib/surface/version.cc +2 -2
  398. data/src/core/lib/transport/error_utils.cc +13 -7
  399. data/src/core/lib/transport/handshaker.cc +3 -3
  400. data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
  401. data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
  402. data/src/core/lib/transport/transport.cc +0 -3
  403. data/src/core/lib/transport/transport.h +20 -14
  404. data/src/core/lib/transport/transport_fwd.h +20 -0
  405. data/src/core/lib/transport/transport_impl.h +1 -0
  406. data/src/core/lib/transport/transport_op_string.cc +9 -9
  407. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  408. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  409. data/src/core/tsi/fake_transport_security.cc +13 -1
  410. data/src/core/tsi/fake_transport_security.h +6 -0
  411. data/src/core/tsi/ssl_transport_security.cc +1 -1
  412. data/src/core/tsi/transport_security_grpc.cc +3 -2
  413. data/src/core/tsi/transport_security_grpc.h +5 -2
  414. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  415. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  416. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  417. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  418. data/src/ruby/ext/grpc/extconf.rb +49 -18
  419. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  420. data/src/ruby/lib/grpc/errors.rb +1 -1
  421. data/src/ruby/lib/grpc/version.rb +1 -1
  422. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  423. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  424. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  426. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  427. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  429. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  430. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  431. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  432. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  433. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  434. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  436. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  437. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  438. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  439. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  440. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  441. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  442. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  443. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  444. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  445. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  446. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  447. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  448. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  449. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  450. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  451. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  452. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  453. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  454. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  455. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  456. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  457. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  458. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  459. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  460. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  461. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  462. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  463. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  464. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  465. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  466. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  467. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  468. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  469. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  470. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  471. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  472. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  473. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  474. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  475. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  476. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  477. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  478. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  479. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  480. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  481. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  482. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  483. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  484. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  485. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  486. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  487. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  488. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  489. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  490. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  491. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  492. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  493. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  494. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  495. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  496. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  497. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  498. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  499. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  500. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  501. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  502. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  503. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  504. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  505. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  506. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  507. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  508. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  509. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  510. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  511. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  512. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  513. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  514. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  515. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  516. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  517. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  518. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  519. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  520. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  521. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  522. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  523. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  524. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  525. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  526. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  527. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  528. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  529. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  530. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  531. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  532. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  533. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  534. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  535. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  536. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  537. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  538. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  539. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  540. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  541. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  542. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  543. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  544. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  545. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  546. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  547. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  548. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  549. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  550. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  551. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  552. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  553. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  554. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  555. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  556. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  557. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  558. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  559. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  560. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  561. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  562. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  563. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  564. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  565. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  566. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  567. metadata +39 -15
  568. data/src/core/lib/slice/slice_split.cc +0 -103
  569. data/src/core/lib/slice/slice_split.h +0 -36
  570. data/src/core/lib/transport/byte_stream.cc +0 -165
  571. data/src/core/lib/transport/byte_stream.h +0 -170
  572. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  573. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  574. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -242,8 +242,8 @@ struct grpc_pollset_set {
242
242
 
243
243
  static bool append_error(grpc_error_handle* composite, grpc_error_handle error,
244
244
  const char* desc) {
245
- if (error == GRPC_ERROR_NONE) return true;
246
- if (*composite == GRPC_ERROR_NONE) {
245
+ if (GRPC_ERROR_IS_NONE(error)) return true;
246
+ if (GRPC_ERROR_IS_NONE(*composite)) {
247
247
  *composite = GRPC_ERROR_CREATE_FROM_COPIED_STRING(desc);
248
248
  }
249
249
  *composite = grpc_error_add_child(*composite, error);
@@ -517,7 +517,7 @@ static grpc_error_handle pollset_global_init(void) {
517
517
  gpr_atm_no_barrier_store(&g_active_poller, 0);
518
518
  global_wakeup_fd.read_fd = -1;
519
519
  grpc_error_handle err = grpc_wakeup_fd_init(&global_wakeup_fd);
520
- if (err != GRPC_ERROR_NONE) return err;
520
+ if (!GRPC_ERROR_IS_NONE(err)) return err;
521
521
  struct epoll_event ev;
522
522
  ev.events = static_cast<uint32_t>(EPOLLIN | EPOLLET);
523
523
  ev.data.ptr = &global_wakeup_fd;
@@ -1268,7 +1268,9 @@ static void shutdown_engine(void) {
1268
1268
  }
1269
1269
  }
1270
1270
 
1271
- static const grpc_event_engine_vtable vtable = {
1271
+ static bool init_epoll1_linux();
1272
+
1273
+ const grpc_event_engine_vtable grpc_ev_epoll1_posix = {
1272
1274
  sizeof(grpc_pollset),
1273
1275
  true,
1274
1276
  false,
@@ -1302,8 +1304,11 @@ static const grpc_event_engine_vtable vtable = {
1302
1304
  pollset_set_del_fd,
1303
1305
 
1304
1306
  is_any_background_poller_thread,
1307
+ /* name = */ "epoll1",
1308
+ /* check_engine_available = */ [](bool) { return init_epoll1_linux(); },
1309
+ /* init_engine = */ []() {},
1305
1310
  shutdown_background_closure,
1306
- shutdown_engine,
1311
+ /* shutdown_engine = */ []() {},
1307
1312
  add_closure_to_background_poller,
1308
1313
  };
1309
1314
 
@@ -1319,21 +1324,20 @@ static void reset_event_manager_on_fork() {
1319
1324
  }
1320
1325
  gpr_mu_unlock(&fork_fd_list_mu);
1321
1326
  shutdown_engine();
1322
- grpc_init_epoll1_linux(true);
1327
+ init_epoll1_linux();
1323
1328
  }
1324
1329
 
1325
1330
  /* It is possible that GLIBC has epoll but the underlying kernel doesn't.
1326
1331
  * Create epoll_fd (epoll_set_init() takes care of that) to make sure epoll
1327
1332
  * support is available */
1328
- const grpc_event_engine_vtable* grpc_init_epoll1_linux(
1329
- bool /*explicit_request*/) {
1333
+ static bool init_epoll1_linux() {
1330
1334
  if (!grpc_has_wakeup_fd()) {
1331
1335
  gpr_log(GPR_ERROR, "Skipping epoll1 because of no wakeup fd.");
1332
- return nullptr;
1336
+ return false;
1333
1337
  }
1334
1338
 
1335
1339
  if (!epoll_set_init()) {
1336
- return nullptr;
1340
+ return false;
1337
1341
  }
1338
1342
 
1339
1343
  fd_global_init();
@@ -1341,7 +1345,7 @@ const grpc_event_engine_vtable* grpc_init_epoll1_linux(
1341
1345
  if (!GRPC_LOG_IF_ERROR("pollset_global_init", pollset_global_init())) {
1342
1346
  fd_global_shutdown();
1343
1347
  epoll_set_shutdown();
1344
- return nullptr;
1348
+ return false;
1345
1349
  }
1346
1350
 
1347
1351
  if (grpc_core::Fork::Enabled()) {
@@ -1349,17 +1353,52 @@ const grpc_event_engine_vtable* grpc_init_epoll1_linux(
1349
1353
  grpc_core::Fork::SetResetChildPollingEngineFunc(
1350
1354
  reset_event_manager_on_fork);
1351
1355
  }
1352
- return &vtable;
1356
+ return true;
1353
1357
  }
1354
1358
 
1355
1359
  #else /* defined(GRPC_LINUX_EPOLL) */
1356
1360
  #if defined(GRPC_POSIX_SOCKET_EV_EPOLL1)
1357
1361
  #include "src/core/lib/iomgr/ev_epoll1_linux.h"
1358
- /* If GRPC_LINUX_EPOLL is not defined, it means epoll is not available. Return
1359
- * NULL */
1360
- const grpc_event_engine_vtable* grpc_init_epoll1_linux(
1361
- bool /*explicit_request*/) {
1362
- return nullptr;
1363
- }
1362
+ const grpc_event_engine_vtable grpc_ev_epoll1_posix = {
1363
+ 1,
1364
+ true,
1365
+ false,
1366
+
1367
+ nullptr,
1368
+ nullptr,
1369
+ nullptr,
1370
+ nullptr,
1371
+ nullptr,
1372
+ nullptr,
1373
+ nullptr,
1374
+ nullptr,
1375
+ nullptr,
1376
+ nullptr,
1377
+ nullptr,
1378
+
1379
+ nullptr,
1380
+ nullptr,
1381
+ nullptr,
1382
+ nullptr,
1383
+ nullptr,
1384
+ nullptr,
1385
+
1386
+ nullptr,
1387
+ nullptr,
1388
+ nullptr,
1389
+ nullptr,
1390
+ nullptr,
1391
+ nullptr,
1392
+ nullptr,
1393
+ nullptr,
1394
+
1395
+ nullptr,
1396
+ /* name = */ "epoll1",
1397
+ /* check_engine_available = */ [](bool) { return false; },
1398
+ nullptr,
1399
+ nullptr,
1400
+ nullptr,
1401
+ nullptr,
1402
+ };
1364
1403
  #endif /* defined(GRPC_POSIX_SOCKET_EV_EPOLL1) */
1365
1404
  #endif /* !defined(GRPC_LINUX_EPOLL) */
@@ -26,6 +26,6 @@
26
26
 
27
27
  // a polling engine that utilizes a singleton epoll set and turnstile polling
28
28
 
29
- const grpc_event_engine_vtable* grpc_init_epoll1_linux(bool explicit_request);
29
+ extern const grpc_event_engine_vtable grpc_ev_epoll1_posix;
30
30
 
31
31
  #endif /* GRPC_CORE_LIB_IOMGR_EV_EPOLL1_LINUX_H */
@@ -757,8 +757,8 @@ static void push_front_worker(grpc_pollset* p, grpc_pollset_worker* worker) {
757
757
 
758
758
  static void kick_append_error(grpc_error_handle* composite,
759
759
  grpc_error_handle error) {
760
- if (error == GRPC_ERROR_NONE) return;
761
- if (*composite == GRPC_ERROR_NONE) {
760
+ if (GRPC_ERROR_IS_NONE(error)) return;
761
+ if (GRPC_ERROR_IS_NONE(*composite)) {
762
762
  *composite = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Kick Failure");
763
763
  }
764
764
  *composite = grpc_error_add_child(*composite, error);
@@ -840,8 +840,6 @@ static grpc_error_handle pollset_kick(grpc_pollset* p,
840
840
 
841
841
  static grpc_error_handle pollset_global_init(void) { return GRPC_ERROR_NONE; }
842
842
 
843
- static void pollset_global_shutdown(void) {}
844
-
845
843
  /* main interface */
846
844
 
847
845
  static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
@@ -904,8 +902,8 @@ static void finish_shutdown(grpc_pollset* pollset) {
904
902
 
905
903
  static void work_combine_error(grpc_error_handle* composite,
906
904
  grpc_error_handle error) {
907
- if (error == GRPC_ERROR_NONE) return;
908
- if (*composite == GRPC_ERROR_NONE) {
905
+ if (GRPC_ERROR_IS_NONE(error)) return;
906
+ if (GRPC_ERROR_IS_NONE(*composite)) {
909
907
  *composite = GRPC_ERROR_CREATE_FROM_STATIC_STRING("pollset_work");
910
908
  }
911
909
  *composite = grpc_error_add_child(*composite, error);
@@ -940,7 +938,7 @@ static grpc_error_handle pollset_work(grpc_pollset* pollset,
940
938
  gpr_malloc(sizeof(*worker.wakeup_fd)));
941
939
  error = grpc_wakeup_fd_init(&worker.wakeup_fd->fd);
942
940
  fork_fd_list_add_wakeup_fd(worker.wakeup_fd);
943
- if (error != GRPC_ERROR_NONE) {
941
+ if (!GRPC_ERROR_IS_NONE(error)) {
944
942
  GRPC_LOG_IF_ERROR("pollset_work", GRPC_ERROR_REF(error));
945
943
  return error;
946
944
  }
@@ -1100,7 +1098,7 @@ static grpc_error_handle pollset_work(grpc_pollset* pollset,
1100
1098
  /* If we're forced to re-evaluate polling (via pollset_kick with
1101
1099
  GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) then we land here and force
1102
1100
  a loop */
1103
- if (worker.reevaluate_polling_on_wakeup && error == GRPC_ERROR_NONE) {
1101
+ if (worker.reevaluate_polling_on_wakeup && GRPC_ERROR_IS_NONE(error)) {
1104
1102
  worker.reevaluate_polling_on_wakeup = 0;
1105
1103
  pollset->kicked_without_pollers = 0;
1106
1104
  if (queued_work || worker.kicked_specifically) {
@@ -1340,15 +1338,29 @@ static bool add_closure_to_background_poller(grpc_closure* /*closure*/,
1340
1338
  return false;
1341
1339
  }
1342
1340
 
1343
- static void shutdown_engine(void) {
1344
- pollset_global_shutdown();
1345
- if (track_fds_for_fork) {
1346
- gpr_mu_destroy(&fork_fd_list_mu);
1347
- grpc_core::Fork::SetResetChildPollingEngineFunc(nullptr);
1341
+ /* Called by the child process's post-fork handler to close open fds, including
1342
+ * worker wakeup fds. This allows gRPC to shutdown in the child process without
1343
+ * interfering with connections or RPCs ongoing in the parent. */
1344
+ static void reset_event_manager_on_fork() {
1345
+ gpr_mu_lock(&fork_fd_list_mu);
1346
+ while (fork_fd_list_head != nullptr) {
1347
+ if (fork_fd_list_head->fd != nullptr) {
1348
+ if (!fork_fd_list_head->fd->closed) {
1349
+ close(fork_fd_list_head->fd->fd);
1350
+ }
1351
+ fork_fd_list_head->fd->fd = -1;
1352
+ } else {
1353
+ close(fork_fd_list_head->cached_wakeup_fd->fd.read_fd);
1354
+ fork_fd_list_head->cached_wakeup_fd->fd.read_fd = -1;
1355
+ close(fork_fd_list_head->cached_wakeup_fd->fd.write_fd);
1356
+ fork_fd_list_head->cached_wakeup_fd->fd.write_fd = -1;
1357
+ }
1358
+ fork_fd_list_head = fork_fd_list_head->next;
1348
1359
  }
1360
+ gpr_mu_unlock(&fork_fd_list_mu);
1349
1361
  }
1350
1362
 
1351
- static const grpc_event_engine_vtable vtable = {
1363
+ const grpc_event_engine_vtable grpc_ev_poll_posix = {
1352
1364
  sizeof(grpc_pollset),
1353
1365
  false,
1354
1366
  false,
@@ -1382,49 +1394,62 @@ static const grpc_event_engine_vtable vtable = {
1382
1394
  pollset_set_del_fd,
1383
1395
 
1384
1396
  is_any_background_poller_thread,
1385
- shutdown_background_closure,
1386
- shutdown_engine,
1397
+ /* name = */ "poll",
1398
+ /* check_engine_available = */
1399
+ [](bool) {
1400
+ if (!grpc_has_wakeup_fd()) {
1401
+ gpr_log(GPR_ERROR, "Skipping poll because of no wakeup fd.");
1402
+ return false;
1403
+ }
1404
+ if (!GRPC_LOG_IF_ERROR("pollset_global_init", pollset_global_init())) {
1405
+ return false;
1406
+ }
1407
+ if (grpc_core::Fork::Enabled()) {
1408
+ track_fds_for_fork = true;
1409
+ gpr_mu_init(&fork_fd_list_mu);
1410
+ grpc_core::Fork::SetResetChildPollingEngineFunc(
1411
+ reset_event_manager_on_fork);
1412
+ }
1413
+ return true;
1414
+ },
1415
+ /* init_engine = */ []() {},
1416
+ /* shutdown_engine = */ shutdown_background_closure,
1417
+ []() {},
1387
1418
  add_closure_to_background_poller,
1388
1419
  };
1389
1420
 
1390
- /* Called by the child process's post-fork handler to close open fds, including
1391
- * worker wakeup fds. This allows gRPC to shutdown in the child process without
1392
- * interfering with connections or RPCs ongoing in the parent. */
1393
- static void reset_event_manager_on_fork() {
1394
- gpr_mu_lock(&fork_fd_list_mu);
1395
- while (fork_fd_list_head != nullptr) {
1396
- if (fork_fd_list_head->fd != nullptr) {
1397
- if (!fork_fd_list_head->fd->closed) {
1398
- close(fork_fd_list_head->fd->fd);
1399
- }
1400
- fork_fd_list_head->fd->fd = -1;
1401
- } else {
1402
- close(fork_fd_list_head->cached_wakeup_fd->fd.read_fd);
1403
- fork_fd_list_head->cached_wakeup_fd->fd.read_fd = -1;
1404
- close(fork_fd_list_head->cached_wakeup_fd->fd.write_fd);
1405
- fork_fd_list_head->cached_wakeup_fd->fd.write_fd = -1;
1406
- }
1407
- fork_fd_list_head = fork_fd_list_head->next;
1408
- }
1409
- gpr_mu_unlock(&fork_fd_list_mu);
1410
- }
1421
+ namespace {
1411
1422
 
1412
- const grpc_event_engine_vtable* grpc_init_poll_posix(
1413
- bool /*explicit_request*/) {
1414
- if (!grpc_has_wakeup_fd()) {
1415
- gpr_log(GPR_ERROR, "Skipping poll because of no wakeup fd.");
1416
- return nullptr;
1417
- }
1418
- if (!GRPC_LOG_IF_ERROR("pollset_global_init", pollset_global_init())) {
1419
- return nullptr;
1420
- }
1421
- if (grpc_core::Fork::Enabled()) {
1422
- track_fds_for_fork = true;
1423
- gpr_mu_init(&fork_fd_list_mu);
1424
- grpc_core::Fork::SetResetChildPollingEngineFunc(
1425
- reset_event_manager_on_fork);
1423
+ grpc_poll_function_type real_poll_function;
1424
+
1425
+ int phony_poll(struct pollfd fds[], nfds_t nfds, int timeout) {
1426
+ if (timeout == 0) {
1427
+ return real_poll_function(fds, nfds, 0);
1428
+ } else {
1429
+ gpr_log(GPR_ERROR, "Attempted a blocking poll when declared non-polling.");
1430
+ GPR_ASSERT(false);
1431
+ return -1;
1426
1432
  }
1427
- return &vtable;
1428
1433
  }
1429
1434
 
1435
+ } // namespace
1436
+
1437
+ const grpc_event_engine_vtable grpc_ev_none_posix = []() {
1438
+ grpc_event_engine_vtable v = grpc_ev_poll_posix;
1439
+ v.check_engine_available = [](bool explicit_request) {
1440
+ if (!explicit_request) return false;
1441
+ // return the simplest engine as a phony but also override the poller
1442
+ if (!grpc_ev_poll_posix.check_engine_available(explicit_request)) {
1443
+ return false;
1444
+ }
1445
+ real_poll_function = grpc_poll_function;
1446
+ grpc_poll_function = phony_poll;
1447
+ return true;
1448
+ };
1449
+ v.name = "none";
1450
+ v.init_engine = []() {};
1451
+ v.shutdown_engine = []() {};
1452
+ return v;
1453
+ }();
1454
+
1430
1455
  #endif /* GRPC_POSIX_SOCKET_EV_POLL */
@@ -23,7 +23,7 @@
23
23
 
24
24
  #include "src/core/lib/iomgr/ev_posix.h"
25
25
 
26
- const grpc_event_engine_vtable* grpc_init_poll_posix(bool explicit_request);
27
- const grpc_event_engine_vtable* grpc_init_poll_cv_posix(bool explicit_request);
26
+ extern const grpc_event_engine_vtable grpc_ev_poll_posix;
27
+ extern const grpc_event_engine_vtable grpc_ev_none_posix;
28
28
 
29
29
  #endif /* GRPC_CORE_LIB_IOMGR_EV_POLL_POSIX_H */
@@ -18,6 +18,8 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include <grpc/grpc.h>
22
+
21
23
  #include "src/core/lib/iomgr/port.h"
22
24
 
23
25
  #ifdef GRPC_POSIX_SOCKET_EV
@@ -74,44 +76,7 @@ grpc_poll_function_type grpc_poll_function = aix_poll;
74
76
  grpc_wakeup_fd grpc_global_wakeup_fd;
75
77
 
76
78
  static const grpc_event_engine_vtable* g_event_engine = nullptr;
77
- static const char* g_poll_strategy_name = nullptr;
78
-
79
- typedef const grpc_event_engine_vtable* (*event_engine_factory_fn)(
80
- bool explicit_request);
81
-
82
- struct event_engine_factory {
83
- const char* name;
84
- event_engine_factory_fn factory;
85
- };
86
- namespace {
87
-
88
- grpc_poll_function_type real_poll_function;
89
-
90
- int phony_poll(struct pollfd fds[], nfds_t nfds, int timeout) {
91
- if (timeout == 0) {
92
- return real_poll_function(fds, nfds, 0);
93
- } else {
94
- gpr_log(GPR_ERROR, "Attempted a blocking poll when declared non-polling.");
95
- GPR_ASSERT(false);
96
- return -1;
97
- }
98
- }
99
-
100
- const grpc_event_engine_vtable* init_non_polling(bool explicit_request) {
101
- if (!explicit_request) {
102
- return nullptr;
103
- }
104
- // return the simplest engine as a phony but also override the poller
105
- auto ret = grpc_init_poll_posix(explicit_request);
106
- real_poll_function = grpc_poll_function;
107
- grpc_poll_function = phony_poll;
108
-
109
- return ret;
110
- }
111
- } // namespace
112
-
113
- #define ENGINE_HEAD_CUSTOM "head_custom"
114
- #define ENGINE_TAIL_CUSTOM "tail_custom"
79
+ static gpr_once g_choose_engine = GPR_ONCE_INIT;
115
80
 
116
81
  // The global array of event-engine factories. Each entry is a pair with a name
117
82
  // and an event-engine generator function (nullptr if there is no generator
@@ -124,13 +89,18 @@ const grpc_event_engine_vtable* init_non_polling(bool explicit_request) {
124
89
  // specific poller that is requested by name in the GRPC_POLL_STRATEGY
125
90
  // environment variable if that variable is set (which should be a
126
91
  // comma-separated list of one or more event engine names)
127
- static event_engine_factory g_factories[] = {
128
- {ENGINE_HEAD_CUSTOM, nullptr}, {ENGINE_HEAD_CUSTOM, nullptr},
129
- {ENGINE_HEAD_CUSTOM, nullptr}, {ENGINE_HEAD_CUSTOM, nullptr},
130
- {"epoll1", grpc_init_epoll1_linux}, {"poll", grpc_init_poll_posix},
131
- {"none", init_non_polling}, {ENGINE_TAIL_CUSTOM, nullptr},
132
- {ENGINE_TAIL_CUSTOM, nullptr}, {ENGINE_TAIL_CUSTOM, nullptr},
133
- {ENGINE_TAIL_CUSTOM, nullptr},
92
+ static const grpc_event_engine_vtable* g_vtables[] = {
93
+ nullptr,
94
+ nullptr,
95
+ nullptr,
96
+ nullptr,
97
+ &grpc_ev_epoll1_posix,
98
+ &grpc_ev_poll_posix,
99
+ &grpc_ev_none_posix,
100
+ nullptr,
101
+ nullptr,
102
+ nullptr,
103
+ nullptr,
134
104
  };
135
105
 
136
106
  static void add(const char* beg, const char* end, char*** ss, size_t* ns) {
@@ -163,77 +133,69 @@ static bool is(const char* want, const char* have) {
163
133
  }
164
134
 
165
135
  static void try_engine(const char* engine) {
166
- for (size_t i = 0; i < GPR_ARRAY_SIZE(g_factories); i++) {
167
- if (g_factories[i].factory != nullptr && is(engine, g_factories[i].name)) {
168
- if ((g_event_engine = g_factories[i].factory(
169
- 0 == strcmp(engine, g_factories[i].name)))) {
170
- g_poll_strategy_name = g_factories[i].name;
171
- gpr_log(GPR_DEBUG, "Using polling engine: %s", g_factories[i].name);
172
- return;
173
- }
136
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(g_vtables); i++) {
137
+ if (g_vtables[i] != nullptr && is(engine, g_vtables[i]->name) &&
138
+ g_vtables[i]->check_engine_available(
139
+ 0 == strcmp(engine, g_vtables[i]->name))) {
140
+ g_event_engine = g_vtables[i];
141
+ gpr_log(GPR_DEBUG, "Using polling engine: %s", g_event_engine->name);
142
+ return;
174
143
  }
175
144
  }
176
145
  }
177
146
 
178
147
  /* Call this before calling grpc_event_engine_init() */
179
- void grpc_register_event_engine_factory(const char* name,
180
- event_engine_factory_fn factory,
148
+ void grpc_register_event_engine_factory(const grpc_event_engine_vtable* vtable,
181
149
  bool add_at_head) {
182
- const char* custom_match =
183
- add_at_head ? ENGINE_HEAD_CUSTOM : ENGINE_TAIL_CUSTOM;
150
+ const grpc_event_engine_vtable** first_null = nullptr;
151
+ const grpc_event_engine_vtable** last_null = nullptr;
184
152
 
185
153
  // Overwrite an existing registration if already registered
186
- for (size_t i = 0; i < GPR_ARRAY_SIZE(g_factories); i++) {
187
- if (0 == strcmp(name, g_factories[i].name)) {
188
- g_factories[i].factory = factory;
154
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(g_vtables); i++) {
155
+ if (g_vtables[i] == nullptr) {
156
+ if (first_null == nullptr) first_null = &g_vtables[i];
157
+ last_null = &g_vtables[i];
158
+ } else if (0 == strcmp(g_vtables[i]->name, vtable->name)) {
159
+ g_vtables[i] = vtable;
189
160
  return;
190
161
  }
191
162
  }
192
163
 
193
- // Otherwise fill in an available custom slot
194
- for (size_t i = 0; i < GPR_ARRAY_SIZE(g_factories); i++) {
195
- if (0 == strcmp(g_factories[i].name, custom_match)) {
196
- g_factories[i].name = name;
197
- g_factories[i].factory = factory;
198
- return;
199
- }
200
- }
201
-
202
- // Otherwise fail
203
- GPR_ASSERT(false);
164
+ *(add_at_head ? first_null : last_null) = vtable;
204
165
  }
205
166
 
206
167
  /*If grpc_event_engine_init() has been called, returns the poll_strategy_name.
207
168
  * Otherwise, returns nullptr. */
208
- const char* grpc_get_poll_strategy_name() { return g_poll_strategy_name; }
169
+ const char* grpc_get_poll_strategy_name() { return g_event_engine->name; }
209
170
 
210
171
  void grpc_event_engine_init(void) {
211
- grpc_core::UniquePtr<char> value = GPR_GLOBAL_CONFIG_GET(grpc_poll_strategy);
172
+ gpr_once_init(&g_choose_engine, []() {
173
+ grpc_core::UniquePtr<char> value =
174
+ GPR_GLOBAL_CONFIG_GET(grpc_poll_strategy);
212
175
 
213
- char** strings = nullptr;
214
- size_t nstrings = 0;
215
- split(value.get(), &strings, &nstrings);
176
+ char** strings = nullptr;
177
+ size_t nstrings = 0;
178
+ split(value.get(), &strings, &nstrings);
216
179
 
217
- for (size_t i = 0; g_event_engine == nullptr && i < nstrings; i++) {
218
- try_engine(strings[i]);
219
- }
180
+ for (size_t i = 0; g_event_engine == nullptr && i < nstrings; i++) {
181
+ try_engine(strings[i]);
182
+ }
220
183
 
221
- for (size_t i = 0; i < nstrings; i++) {
222
- gpr_free(strings[i]);
223
- }
224
- gpr_free(strings);
184
+ for (size_t i = 0; i < nstrings; i++) {
185
+ gpr_free(strings[i]);
186
+ }
187
+ gpr_free(strings);
225
188
 
226
- if (g_event_engine == nullptr) {
227
- gpr_log(GPR_ERROR, "No event engine could be initialized from %s",
228
- value.get());
229
- abort();
230
- }
189
+ if (g_event_engine == nullptr) {
190
+ gpr_log(GPR_ERROR, "No event engine could be initialized from %s",
191
+ value.get());
192
+ abort();
193
+ }
194
+ });
195
+ g_event_engine->init_engine();
231
196
  }
232
197
 
233
- void grpc_event_engine_shutdown(void) {
234
- g_event_engine->shutdown_engine();
235
- g_event_engine = nullptr;
236
- }
198
+ void grpc_event_engine_shutdown(void) { g_event_engine->shutdown_engine(); }
237
199
 
238
200
  bool grpc_event_engine_can_track_errors(void) {
239
201
  /* Only track errors if platform supports errqueue. */
@@ -85,6 +85,9 @@ typedef struct grpc_event_engine_vtable {
85
85
  void (*pollset_set_del_fd)(grpc_pollset_set* pollset_set, grpc_fd* fd);
86
86
 
87
87
  bool (*is_any_background_poller_thread)(void);
88
+ const char* name;
89
+ bool (*check_engine_available)(bool explicit_request);
90
+ void (*init_engine)();
88
91
  void (*shutdown_background_closure)(void);
89
92
  void (*shutdown_engine)(void);
90
93
  bool (*add_closure_to_background_poller)(grpc_closure* closure,
@@ -92,9 +95,8 @@ typedef struct grpc_event_engine_vtable {
92
95
  } grpc_event_engine_vtable;
93
96
 
94
97
  /* register a new event engine factory */
95
- void grpc_register_event_engine_factory(
96
- const char* name, const grpc_event_engine_vtable* (*factory)(bool),
97
- bool add_at_head);
98
+ void grpc_register_event_engine_factory(const grpc_event_engine_vtable* vtable,
99
+ bool add_at_head);
98
100
 
99
101
  void grpc_event_engine_init(void);
100
102
  void grpc_event_engine_shutdown(void);
@@ -73,7 +73,7 @@ void grpc_prefork() {
73
73
  return;
74
74
  }
75
75
  if (!grpc_core::Fork::BlockExecCtx()) {
76
- gpr_log(GPR_ERROR,
76
+ gpr_log(GPR_INFO,
77
77
  "Other threads are currently calling into gRPC, skipping fork() "
78
78
  "handlers");
79
79
  return;
@@ -45,6 +45,13 @@ GPR_GLOBAL_CONFIG_DEFINE_BOOL(grpc_abort_on_leaks, false,
45
45
  "A debugging aid to cause a call to abort() when "
46
46
  "gRPC objects are leaked past grpc_shutdown()");
47
47
 
48
+ GPR_GLOBAL_CONFIG_DEFINE_BOOL(
49
+ grpc_experimental_enable_tcp_frame_size_tuning, false,
50
+ "If set, enables TCP to use RPC size estimation made by higher layers. TCP "
51
+ "would not indicate completion of a read operation until a specified "
52
+ "number of bytes have been read over the socket. Buffers are also "
53
+ "allocated according to estimated RPC sizes.");
54
+
48
55
  static gpr_mu g_mu;
49
56
  static gpr_cv g_rcv;
50
57
  static int g_shutdown;
@@ -80,6 +80,7 @@ void grpc_set_default_iomgr_platform() {
80
80
  grpc_set_pollset_vtable(&grpc_posix_pollset_vtable);
81
81
  grpc_set_pollset_set_vtable(&grpc_posix_pollset_set_vtable);
82
82
  grpc_core::SetDNSResolver(grpc_core::NativeDNSResolver::GetOrCreate());
83
+ grpc_tcp_client_global_init();
83
84
  grpc_set_iomgr_platform_vtable(&vtable);
84
85
  }
85
86
 
@@ -177,6 +177,7 @@ void grpc_set_default_iomgr_platform() {
177
177
  grpc_set_pollset_set_vtable(&grpc_apple_pollset_set_vtable);
178
178
  grpc_set_iomgr_platform_vtable(&apple_vtable);
179
179
  }
180
+ grpc_tcp_client_global_init();
180
181
  grpc_set_timer_impl(&grpc_generic_timer_vtable);
181
182
  grpc_core::SetDNSResolver(grpc_core::NativeDNSResolver::GetOrCreate());
182
183
  }
@@ -66,7 +66,7 @@ grpc_error_handle grpc_load_file(const char* filename, int add_null_terminator,
66
66
  end:
67
67
  *output = result;
68
68
  if (file != nullptr) fclose(file);
69
- if (error != GRPC_ERROR_NONE) {
69
+ if (!GRPC_ERROR_IS_NONE(error)) {
70
70
  grpc_error_handle error_out =
71
71
  grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
72
72
  "Failed to load file", &error, 1),
@@ -165,7 +165,7 @@ done:
165
165
  if (result) {
166
166
  freeaddrinfo(result);
167
167
  }
168
- if (err == GRPC_ERROR_NONE) {
168
+ if (GRPC_ERROR_IS_NONE(err)) {
169
169
  return addresses;
170
170
  }
171
171
  auto error_result = grpc_error_to_absl_status(err);
@@ -149,7 +149,7 @@ done:
149
149
  if (result) {
150
150
  freeaddrinfo(result);
151
151
  }
152
- if (error == GRPC_ERROR_NONE) {
152
+ if (GRPC_ERROR_IS_NONE(error)) {
153
153
  return addresses;
154
154
  }
155
155
  auto error_result = grpc_error_to_absl_status(error);
@@ -22,13 +22,18 @@
22
22
 
23
23
  grpc_tcp_client_vtable* grpc_tcp_client_impl;
24
24
 
25
- void grpc_tcp_client_connect(grpc_closure* on_connect, grpc_endpoint** endpoint,
26
- grpc_pollset_set* interested_parties,
27
- const grpc_channel_args* channel_args,
28
- const grpc_resolved_address* addr,
29
- grpc_core::Timestamp deadline) {
30
- grpc_tcp_client_impl->connect(on_connect, endpoint, interested_parties,
31
- channel_args, addr, deadline);
25
+ int64_t grpc_tcp_client_connect(grpc_closure* on_connect,
26
+ grpc_endpoint** endpoint,
27
+ grpc_pollset_set* interested_parties,
28
+ const grpc_channel_args* channel_args,
29
+ const grpc_resolved_address* addr,
30
+ grpc_core::Timestamp deadline) {
31
+ return grpc_tcp_client_impl->connect(on_connect, endpoint, interested_parties,
32
+ channel_args, addr, deadline);
33
+ }
34
+
35
+ bool grpc_tcp_client_cancel_connect(int64_t connection_handle) {
36
+ return grpc_tcp_client_impl->cancel_connect(connection_handle);
32
37
  }
33
38
 
34
39
  void grpc_set_tcp_client_impl(grpc_tcp_client_vtable* impl) {