grpc 1.41.1 → 1.42.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 (416) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +55 -43
  3. data/include/grpc/event_engine/event_engine.h +82 -42
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  5. data/include/grpc/event_engine/memory_allocator.h +210 -0
  6. data/include/grpc/grpc.h +4 -0
  7. data/include/grpc/grpc_security.h +18 -0
  8. data/include/grpc/grpc_security_constants.h +1 -0
  9. data/include/grpc/impl/codegen/port_platform.h +7 -0
  10. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
  11. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  12. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  13. data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
  14. data/src/core/ext/filters/client_channel/client_channel.h +74 -27
  15. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  17. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
  18. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +4 -5
  20. data/src/core/ext/filters/client_channel/connector.h +18 -18
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
  22. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
  24. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  34. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
  42. data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
  43. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  44. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
  49. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  50. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
  52. data/src/core/ext/filters/client_channel/resolver.h +1 -1
  53. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  54. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
  55. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
  57. data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
  58. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  59. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  60. data/src/core/ext/filters/client_channel/server_address.h +1 -1
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  62. data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
  63. data/src/core/ext/filters/client_channel/subchannel.h +29 -49
  64. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  65. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  66. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  67. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  68. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  69. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
  74. data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
  75. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
  76. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
  77. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
  78. data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
  79. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  80. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  81. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  82. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
  83. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
  84. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  85. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
  86. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
  87. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
  88. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
  89. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
  90. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
  91. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
  92. data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
  93. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  94. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  95. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  96. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  97. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  98. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  99. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
  103. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
  107. data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
  108. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
  109. data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
  110. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
  112. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
  113. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
  120. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
  121. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
  122. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
  123. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
  124. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
  125. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  126. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  127. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
  128. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  129. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  130. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  131. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
  132. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  133. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  134. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  135. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  136. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  137. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  138. data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
  139. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  140. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
  141. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  142. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
  143. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  144. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
  145. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
  146. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
  147. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
  148. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  149. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  150. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  151. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  152. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  153. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  154. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  155. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
  156. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
  157. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
  158. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
  159. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
  160. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
  161. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  162. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  163. data/src/core/ext/xds/xds_api.cc +325 -362
  164. data/src/core/ext/xds/xds_api.h +134 -82
  165. data/src/core/ext/xds/xds_bootstrap.h +10 -0
  166. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  167. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  168. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  169. data/src/core/ext/xds/xds_client.cc +527 -314
  170. data/src/core/ext/xds/xds_client.h +42 -37
  171. data/src/core/ext/xds/xds_client_stats.h +1 -1
  172. data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
  173. data/src/core/lib/address_utils/parse_address.cc +2 -0
  174. data/src/core/lib/avl/avl.cc +5 -5
  175. data/src/core/lib/backoff/backoff.cc +1 -1
  176. data/src/core/lib/channel/channel_args.cc +24 -6
  177. data/src/core/lib/channel/channel_args.h +9 -0
  178. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  179. data/src/core/lib/channel/channel_trace.cc +1 -1
  180. data/src/core/lib/channel/channel_trace.h +1 -1
  181. data/src/core/lib/channel/channelz.cc +3 -3
  182. data/src/core/lib/channel/channelz.h +2 -2
  183. data/src/core/lib/channel/channelz_registry.cc +1 -1
  184. data/src/core/lib/channel/channelz_registry.h +1 -1
  185. data/src/core/lib/channel/connected_channel.cc +1 -3
  186. data/src/core/lib/channel/connected_channel.h +1 -2
  187. data/src/core/lib/compression/compression.cc +2 -2
  188. data/src/core/lib/compression/compression_args.cc +6 -4
  189. data/src/core/lib/compression/compression_internal.cc +2 -2
  190. data/src/core/lib/compression/compression_internal.h +1 -1
  191. data/src/core/lib/config/core_configuration.cc +44 -2
  192. data/src/core/lib/config/core_configuration.h +39 -1
  193. data/src/core/lib/debug/stats.cc +1 -1
  194. data/src/core/lib/debug/stats_data.cc +13 -13
  195. data/src/core/lib/gpr/atm.cc +1 -1
  196. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  197. data/src/core/lib/gpr/string.cc +2 -2
  198. data/src/core/lib/gpr/tls.h +1 -1
  199. data/src/core/lib/gpr/useful.h +79 -32
  200. data/src/core/lib/gprpp/arena.h +10 -0
  201. data/src/core/lib/gprpp/bitset.h +38 -16
  202. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  203. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  204. data/src/core/lib/gprpp/match.h +1 -1
  205. data/src/core/lib/gprpp/memory.h +6 -0
  206. data/src/core/lib/gprpp/overload.h +1 -1
  207. data/src/core/lib/gprpp/status_helper.cc +23 -3
  208. data/src/core/lib/gprpp/status_helper.h +12 -1
  209. data/src/core/lib/gprpp/table.h +411 -0
  210. data/src/core/lib/http/httpcli.cc +200 -182
  211. data/src/core/lib/http/parser.cc +2 -2
  212. data/src/core/lib/iomgr/call_combiner.cc +28 -10
  213. data/src/core/lib/iomgr/combiner.cc +6 -21
  214. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
  215. data/src/core/lib/iomgr/error.cc +113 -52
  216. data/src/core/lib/iomgr/error.h +50 -9
  217. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  218. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  219. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  220. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  221. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  222. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  223. data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
  224. data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
  225. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  226. data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
  227. data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
  228. data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
  229. data/src/core/lib/iomgr/exec_ctx.cc +1 -9
  230. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  231. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  232. data/src/core/lib/iomgr/executor.cc +6 -20
  233. data/src/core/lib/iomgr/iomgr.cc +3 -1
  234. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  235. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  236. data/src/core/lib/iomgr/load_file.cc +2 -2
  237. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  238. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  239. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  240. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
  241. data/src/core/lib/iomgr/resource_quota.cc +13 -11
  242. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  243. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  244. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
  246. data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
  247. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  249. data/src/core/lib/iomgr/tcp_posix.cc +4 -5
  250. data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
  251. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
  252. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
  253. data/src/core/lib/iomgr/tcp_windows.cc +2 -2
  254. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  255. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  256. data/src/core/lib/json/json_util.cc +68 -0
  257. data/src/core/lib/json/json_util.h +57 -99
  258. data/src/core/lib/json/json_writer.cc +0 -3
  259. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  260. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  261. data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
  262. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
  263. data/src/core/lib/security/context/security_context.cc +4 -2
  264. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  265. data/src/core/lib/security/credentials/credentials.cc +4 -2
  266. data/src/core/lib/security/credentials/credentials.h +6 -1
  267. data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
  268. data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
  269. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
  270. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
  271. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
  272. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  273. data/src/core/lib/security/security_connector/security_connector.cc +9 -4
  274. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  275. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
  276. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
  277. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
  278. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  279. data/src/core/lib/security/transport/security_handshaker.cc +73 -43
  280. data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
  281. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  282. data/src/core/lib/slice/slice.cc +0 -16
  283. data/src/core/lib/slice/slice_api.cc +39 -0
  284. data/src/core/lib/slice/slice_buffer.cc +5 -5
  285. data/src/core/lib/slice/slice_intern.cc +8 -13
  286. data/src/core/lib/slice/slice_internal.h +1 -244
  287. data/src/core/lib/slice/slice_refcount.cc +17 -0
  288. data/src/core/lib/slice/slice_refcount.h +121 -0
  289. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  290. data/src/core/lib/slice/slice_split.cc +100 -0
  291. data/src/core/lib/slice/slice_split.h +40 -0
  292. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  293. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  294. data/src/core/lib/slice/static_slice.cc +529 -0
  295. data/src/core/lib/slice/static_slice.h +331 -0
  296. data/src/core/lib/surface/builtins.cc +49 -0
  297. data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
  298. data/src/core/lib/surface/call.cc +103 -120
  299. data/src/core/lib/surface/call.h +0 -6
  300. data/src/core/lib/surface/channel.cc +19 -32
  301. data/src/core/lib/surface/channel.h +0 -9
  302. data/src/core/lib/surface/channel_init.cc +23 -76
  303. data/src/core/lib/surface/channel_init.h +52 -44
  304. data/src/core/lib/surface/completion_queue.cc +6 -5
  305. data/src/core/lib/surface/init.cc +0 -39
  306. data/src/core/lib/surface/init_secure.cc +17 -14
  307. data/src/core/lib/surface/lame_client.cc +18 -11
  308. data/src/core/lib/surface/lame_client.h +1 -1
  309. data/src/core/lib/surface/server.cc +25 -17
  310. data/src/core/lib/surface/server.h +17 -10
  311. data/src/core/lib/surface/validate_metadata.cc +5 -2
  312. data/src/core/lib/surface/version.cc +2 -2
  313. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  314. data/src/core/lib/transport/error_utils.cc +42 -17
  315. data/src/core/lib/transport/error_utils.h +1 -1
  316. data/src/core/lib/transport/metadata.cc +31 -10
  317. data/src/core/lib/transport/metadata.h +2 -1
  318. data/src/core/lib/transport/metadata_batch.cc +35 -371
  319. data/src/core/lib/transport/metadata_batch.h +905 -71
  320. data/src/core/lib/transport/parsed_metadata.h +263 -0
  321. data/src/core/lib/transport/pid_controller.cc +4 -4
  322. data/src/core/lib/transport/static_metadata.cc +714 -846
  323. data/src/core/lib/transport/static_metadata.h +115 -379
  324. data/src/core/lib/transport/status_metadata.cc +1 -0
  325. data/src/core/lib/transport/transport.cc +4 -5
  326. data/src/core/lib/transport/transport_op_string.cc +40 -20
  327. data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
  328. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  329. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  330. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  331. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
  332. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  333. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  335. data/src/core/tsi/fake_transport_security.cc +15 -7
  336. data/src/core/tsi/local_transport_security.cc +36 -73
  337. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  338. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
  339. data/src/core/tsi/ssl_transport_security.cc +10 -2
  340. data/src/core/tsi/transport_security.cc +12 -0
  341. data/src/core/tsi/transport_security.h +16 -1
  342. data/src/core/tsi/transport_security_interface.h +26 -0
  343. data/src/ruby/ext/grpc/extconf.rb +12 -9
  344. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  345. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  346. data/src/ruby/lib/grpc/version.rb +1 -1
  347. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  348. data/src/ruby/spec/client_server_spec.rb +1 -1
  349. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
  351. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  352. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +20 -21
  353. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
  354. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +13 -0
  355. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  356. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  357. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  358. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  359. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  360. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  361. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +3 -6
  362. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  363. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  364. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  365. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  366. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  368. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
  369. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +72 -45
  370. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  371. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +2 -2
  372. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +479 -15
  373. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
  374. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
  375. data/third_party/re2/re2/compile.cc +91 -109
  376. data/third_party/re2/re2/dfa.cc +27 -39
  377. data/third_party/re2/re2/filtered_re2.cc +18 -2
  378. data/third_party/re2/re2/filtered_re2.h +10 -5
  379. data/third_party/re2/re2/nfa.cc +1 -1
  380. data/third_party/re2/re2/parse.cc +42 -23
  381. data/third_party/re2/re2/perl_groups.cc +34 -34
  382. data/third_party/re2/re2/prefilter.cc +3 -2
  383. data/third_party/re2/re2/prog.cc +182 -4
  384. data/third_party/re2/re2/prog.h +28 -9
  385. data/third_party/re2/re2/re2.cc +87 -118
  386. data/third_party/re2/re2/re2.h +156 -141
  387. data/third_party/re2/re2/regexp.cc +12 -5
  388. data/third_party/re2/re2/regexp.h +8 -2
  389. data/third_party/re2/re2/set.cc +31 -9
  390. data/third_party/re2/re2/set.h +9 -4
  391. data/third_party/re2/re2/simplify.cc +11 -3
  392. data/third_party/re2/re2/tostring.cc +1 -1
  393. data/third_party/re2/re2/walker-inl.h +1 -1
  394. data/third_party/re2/util/mutex.h +2 -2
  395. data/third_party/re2/util/pcre.h +3 -3
  396. metadata +78 -66
  397. data/include/grpc/event_engine/slice_allocator.h +0 -71
  398. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  399. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  400. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  401. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  402. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  403. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  404. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  405. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  406. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  407. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  408. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  409. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  410. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  411. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  412. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  413. data/src/core/lib/iomgr/udp_server.cc +0 -747
  414. data/src/core/lib/iomgr/udp_server.h +0 -103
  415. data/src/core/lib/transport/authority_override.cc +0 -40
  416. data/src/core/lib/transport/authority_override.h +0 -37
@@ -357,7 +357,12 @@ static void unref_by(grpc_fd* fd, int n) {
357
357
  gpr_mu_destroy(&fd->mu);
358
358
  grpc_iomgr_unregister_object(&fd->iomgr_object);
359
359
  fork_fd_list_remove_node(fd->fork_fd_list);
360
- if (fd->shutdown) GRPC_ERROR_UNREF(fd->shutdown_error);
360
+ if (fd->shutdown) {
361
+ GRPC_ERROR_UNREF(fd->shutdown_error);
362
+ }
363
+ #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
364
+ fd->shutdown_error.~Status();
365
+ #endif
361
366
  gpr_free(fd);
362
367
  } else {
363
368
  GPR_ASSERT(old > n);
@@ -372,6 +377,9 @@ static grpc_fd* fd_create(int fd, const char* name, bool track_err) {
372
377
  gpr_mu_init(&r->mu);
373
378
  gpr_atm_rel_store(&r->refst, 1);
374
379
  r->shutdown = 0;
380
+ #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
381
+ new (&r->shutdown_error) absl::Status();
382
+ #endif
375
383
  r->read_closure = CLOSURE_NOT_READY;
376
384
  r->write_closure = CLOSURE_NOT_READY;
377
385
  r->fd = fd;
@@ -405,11 +413,11 @@ static grpc_error_handle pollset_kick_locked(grpc_fd_watcher* watcher) {
405
413
 
406
414
  static void maybe_wake_one_watcher_locked(grpc_fd* fd) {
407
415
  if (fd->inactive_watcher_root.next != &fd->inactive_watcher_root) {
408
- pollset_kick_locked(fd->inactive_watcher_root.next);
416
+ (void)pollset_kick_locked(fd->inactive_watcher_root.next);
409
417
  } else if (fd->read_watcher) {
410
- pollset_kick_locked(fd->read_watcher);
418
+ (void)pollset_kick_locked(fd->read_watcher);
411
419
  } else if (fd->write_watcher) {
412
- pollset_kick_locked(fd->write_watcher);
420
+ (void)pollset_kick_locked(fd->write_watcher);
413
421
  }
414
422
  }
415
423
 
@@ -417,13 +425,13 @@ static void wake_all_watchers_locked(grpc_fd* fd) {
417
425
  grpc_fd_watcher* watcher;
418
426
  for (watcher = fd->inactive_watcher_root.next;
419
427
  watcher != &fd->inactive_watcher_root; watcher = watcher->next) {
420
- pollset_kick_locked(watcher);
428
+ (void)pollset_kick_locked(watcher);
421
429
  }
422
430
  if (fd->read_watcher) {
423
- pollset_kick_locked(fd->read_watcher);
431
+ (void)pollset_kick_locked(fd->read_watcher);
424
432
  }
425
433
  if (fd->write_watcher && fd->write_watcher != fd->read_watcher) {
426
- pollset_kick_locked(fd->write_watcher);
434
+ (void)pollset_kick_locked(fd->write_watcher);
427
435
  }
428
436
  }
429
437
 
@@ -873,13 +881,13 @@ static void pollset_add_fd(grpc_pollset* pollset, grpc_fd* fd) {
873
881
  }
874
882
  if (pollset->fd_count == pollset->fd_capacity) {
875
883
  pollset->fd_capacity =
876
- GPR_MAX(pollset->fd_capacity + 8, pollset->fd_count * 3 / 2);
884
+ std::max(pollset->fd_capacity + 8, pollset->fd_count * 3 / 2);
877
885
  pollset->fds = static_cast<grpc_fd**>(
878
886
  gpr_realloc(pollset->fds, sizeof(grpc_fd*) * pollset->fd_capacity));
879
887
  }
880
888
  pollset->fds[pollset->fd_count++] = fd;
881
889
  GRPC_FD_REF(fd, "multipoller");
882
- pollset_kick(pollset, nullptr);
890
+ (void)pollset_kick(pollset, nullptr);
883
891
  exit:
884
892
  gpr_mu_unlock(&pollset->mu);
885
893
  }
@@ -1114,7 +1122,7 @@ static grpc_error_handle pollset_work(grpc_pollset* pollset,
1114
1122
  /* check shutdown conditions */
1115
1123
  if (pollset->shutting_down) {
1116
1124
  if (pollset_has_workers(pollset)) {
1117
- pollset_kick(pollset, nullptr);
1125
+ (void)pollset_kick(pollset, nullptr);
1118
1126
  } else if (!pollset->called_shutdown && !pollset_has_observers(pollset)) {
1119
1127
  pollset->called_shutdown = 1;
1120
1128
  gpr_mu_unlock(&pollset->mu);
@@ -1136,7 +1144,7 @@ static void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
1136
1144
  GPR_ASSERT(!pollset->shutting_down);
1137
1145
  pollset->shutting_down = 1;
1138
1146
  pollset->shutdown_done = closure;
1139
- pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST);
1147
+ (void)pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST);
1140
1148
  if (!pollset->called_shutdown && !pollset_has_observers(pollset)) {
1141
1149
  pollset->called_shutdown = 1;
1142
1150
  finish_shutdown(pollset);
@@ -1198,7 +1206,7 @@ static void pollset_set_add_pollset(grpc_pollset_set* pollset_set,
1198
1206
  gpr_mu_lock(&pollset_set->mu);
1199
1207
  if (pollset_set->pollset_count == pollset_set->pollset_capacity) {
1200
1208
  pollset_set->pollset_capacity =
1201
- GPR_MAX(8, 2 * pollset_set->pollset_capacity);
1209
+ std::max(size_t(8), 2 * pollset_set->pollset_capacity);
1202
1210
  pollset_set->pollsets = static_cast<grpc_pollset**>(gpr_realloc(
1203
1211
  pollset_set->pollsets,
1204
1212
  pollset_set->pollset_capacity * sizeof(*pollset_set->pollsets)));
@@ -1223,8 +1231,8 @@ static void pollset_set_del_pollset(grpc_pollset_set* pollset_set,
1223
1231
  for (i = 0; i < pollset_set->pollset_count; i++) {
1224
1232
  if (pollset_set->pollsets[i] == pollset) {
1225
1233
  pollset_set->pollset_count--;
1226
- GPR_SWAP(grpc_pollset*, pollset_set->pollsets[i],
1227
- pollset_set->pollsets[pollset_set->pollset_count]);
1234
+ std::swap(pollset_set->pollsets[i],
1235
+ pollset_set->pollsets[pollset_set->pollset_count]);
1228
1236
  break;
1229
1237
  }
1230
1238
  }
@@ -1247,7 +1255,8 @@ static void pollset_set_add_pollset_set(grpc_pollset_set* bag,
1247
1255
  size_t i, j;
1248
1256
  gpr_mu_lock(&bag->mu);
1249
1257
  if (bag->pollset_set_count == bag->pollset_set_capacity) {
1250
- bag->pollset_set_capacity = GPR_MAX(8, 2 * bag->pollset_set_capacity);
1258
+ bag->pollset_set_capacity =
1259
+ std::max(size_t(8), 2 * bag->pollset_set_capacity);
1251
1260
  bag->pollset_sets = static_cast<grpc_pollset_set**>(
1252
1261
  gpr_realloc(bag->pollset_sets,
1253
1262
  bag->pollset_set_capacity * sizeof(*bag->pollset_sets)));
@@ -1272,8 +1281,8 @@ static void pollset_set_del_pollset_set(grpc_pollset_set* bag,
1272
1281
  for (i = 0; i < bag->pollset_set_count; i++) {
1273
1282
  if (bag->pollset_sets[i] == item) {
1274
1283
  bag->pollset_set_count--;
1275
- GPR_SWAP(grpc_pollset_set*, bag->pollset_sets[i],
1276
- bag->pollset_sets[bag->pollset_set_count]);
1284
+ std::swap(bag->pollset_sets[i],
1285
+ bag->pollset_sets[bag->pollset_set_count]);
1277
1286
  break;
1278
1287
  }
1279
1288
  }
@@ -1284,7 +1293,8 @@ static void pollset_set_add_fd(grpc_pollset_set* pollset_set, grpc_fd* fd) {
1284
1293
  size_t i;
1285
1294
  gpr_mu_lock(&pollset_set->mu);
1286
1295
  if (pollset_set->fd_count == pollset_set->fd_capacity) {
1287
- pollset_set->fd_capacity = GPR_MAX(8, 2 * pollset_set->fd_capacity);
1296
+ pollset_set->fd_capacity =
1297
+ std::max(size_t(8), 2 * pollset_set->fd_capacity);
1288
1298
  pollset_set->fds = static_cast<grpc_fd**>(
1289
1299
  gpr_realloc(pollset_set->fds,
1290
1300
  pollset_set->fd_capacity * sizeof(*pollset_set->fds)));
@@ -1306,8 +1316,7 @@ static void pollset_set_del_fd(grpc_pollset_set* pollset_set, grpc_fd* fd) {
1306
1316
  for (i = 0; i < pollset_set->fd_count; i++) {
1307
1317
  if (pollset_set->fds[i] == fd) {
1308
1318
  pollset_set->fd_count--;
1309
- GPR_SWAP(grpc_fd*, pollset_set->fds[i],
1310
- pollset_set->fds[pollset_set->fd_count]);
1319
+ std::swap(pollset_set->fds[i], pollset_set->fds[pollset_set->fd_count]);
1311
1320
  GRPC_FD_UNREF(fd, "pollset_set");
1312
1321
  break;
1313
1322
  }
@@ -17,38 +17,61 @@
17
17
  #include <grpc/event_engine/event_engine.h>
18
18
 
19
19
  #include "src/core/lib/iomgr/closure.h"
20
+ #include "src/core/lib/iomgr/event_engine/closure.h"
20
21
  #include "src/core/lib/iomgr/event_engine/pollset.h"
21
22
  #include "src/core/lib/transport/error_utils.h"
22
23
 
23
24
  namespace grpc_event_engine {
24
25
  namespace experimental {
25
26
 
26
- EventEngine::Callback GrpcClosureToCallback(grpc_closure* closure,
27
- grpc_error_handle error) {
28
- return [closure, error](absl::Status status) {
29
- grpc_error_handle new_error =
30
- grpc_error_add_child(error, absl_status_to_grpc_error(status));
27
+ namespace {
28
+
29
+ void RunClosure(grpc_closure* closure, grpc_error_handle error) {
30
+ GPR_ASSERT(closure != nullptr);
31
31
  #ifndef NDEBUG
32
- closure->scheduled = false;
33
- if (grpc_trace_closure.enabled()) {
34
- gpr_log(GPR_DEBUG,
35
- "EventEngine: running closure %p: created [%s:%d]: %s [%s:%d]",
36
- closure, closure->file_created, closure->line_created,
37
- closure->run ? "run" : "scheduled", closure->file_initiated,
38
- closure->line_initiated);
39
- }
32
+ closure->scheduled = false;
33
+ if (grpc_trace_closure.enabled()) {
34
+ gpr_log(GPR_DEBUG,
35
+ "EventEngine: running closure %p: created [%s:%d]: %s [%s:%d]",
36
+ closure, closure->file_created, closure->line_created,
37
+ closure->run ? "run" : "scheduled", closure->file_initiated,
38
+ closure->line_initiated);
39
+ }
40
40
  #endif
41
- closure->cb(closure->cb_arg, new_error);
41
+ closure->cb(closure->cb_arg, error);
42
42
  #ifndef NDEBUG
43
- if (grpc_trace_closure.enabled()) {
44
- gpr_log(GPR_DEBUG, "EventEngine: closure %p finished", closure);
45
- }
43
+ if (grpc_trace_closure.enabled()) {
44
+ gpr_log(GPR_DEBUG, "EventEngine: closure %p finished", closure);
45
+ }
46
46
  #endif
47
- GRPC_ERROR_UNREF(error);
47
+ }
48
+
49
+ } // namespace
50
+
51
+ std::function<void(absl::Status)> GrpcClosureToStatusCallback(
52
+ grpc_closure* closure) {
53
+ return [closure](absl::Status status) {
54
+ RunClosure(closure, absl_status_to_grpc_error(status));
55
+ grpc_pollset_ee_broadcast_event();
56
+ };
57
+ }
58
+
59
+ std::function<void()> GrpcClosureToCallback(grpc_closure* closure) {
60
+ return [closure]() {
61
+ RunClosure(closure, GRPC_ERROR_NONE);
62
+ grpc_pollset_ee_broadcast_event();
63
+ };
64
+ }
65
+
66
+ std::function<void()> GrpcClosureToCallback(grpc_closure* closure,
67
+ grpc_error_handle error) {
68
+ return [closure, error]() {
69
+ RunClosure(closure, error);
48
70
  grpc_pollset_ee_broadcast_event();
49
71
  };
50
72
  }
51
73
 
52
74
  } // namespace experimental
53
75
  } // namespace grpc_event_engine
76
+
54
77
  #endif // GRPC_USE_EVENT_ENGINE
@@ -24,7 +24,16 @@
24
24
  namespace grpc_event_engine {
25
25
  namespace experimental {
26
26
 
27
- EventEngine::Callback GrpcClosureToCallback(grpc_closure* closure,
27
+ /// Creates a callback that takes an error status argument.
28
+ std::function<void(absl::Status)> GrpcClosureToStatusCallback(
29
+ grpc_closure* closure);
30
+
31
+ /// Create a callback that *does not* take an error status argument.
32
+ std::function<void()> GrpcClosureToCallback(grpc_closure* closure);
33
+
34
+ /// Creates a callback that *does not* take an error status argument.
35
+ /// This version has a pre-bound error.
36
+ std::function<void()> GrpcClosureToCallback(grpc_closure* closure,
28
37
  grpc_error_handle error);
29
38
 
30
39
  } // namespace experimental
@@ -96,12 +96,12 @@ void endpoint_delete_from_pollset_set(grpc_endpoint* /* ep */,
96
96
  /// and will return some kind of sane default (empty strings, nullptrs, etc). It
97
97
  /// is the caller's responsibility to ensure that calls to endpoint_shutdown are
98
98
  /// synchronized.
99
- void endpoint_shutdown(grpc_endpoint* ep, grpc_error* why) {
99
+ void endpoint_shutdown(grpc_endpoint* ep, grpc_error_handle why) {
100
100
  auto* eeep = reinterpret_cast<grpc_event_engine_endpoint*>(ep);
101
101
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
102
- const char* str = grpc_error_string(why);
102
+ std::string str = grpc_error_std_string(why);
103
103
  gpr_log(GPR_INFO, "TCP Endpoint %p shutdown why=%s", eeep->endpoint.get(),
104
- str);
104
+ str.c_str());
105
105
  }
106
106
  eeep->endpoint.reset();
107
107
  }
@@ -60,7 +60,7 @@ bool iomgr_platform_is_any_background_poller_thread(void) {
60
60
  }
61
61
 
62
62
  bool iomgr_platform_add_closure_to_background_poller(
63
- grpc_closure* /* closure */, grpc_error* /* error */) {
63
+ grpc_closure* /* closure */, grpc_error_handle /* error */) {
64
64
  return false;
65
65
  }
66
66
 
@@ -40,15 +40,16 @@ void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
40
40
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_NONE);
41
41
  }
42
42
  void pollset_destroy(grpc_pollset* pollset) {}
43
- grpc_error* pollset_work(grpc_pollset* pollset, grpc_pollset_worker** worker,
44
- grpc_millis deadline) {
43
+ grpc_error_handle pollset_work(grpc_pollset* pollset,
44
+ grpc_pollset_worker** worker,
45
+ grpc_millis deadline) {
45
46
  (void)worker;
46
47
  gpr_cv_wait(&g_cv, &g_mu,
47
48
  grpc_millis_to_timespec(deadline, GPR_CLOCK_REALTIME));
48
49
  return GRPC_ERROR_NONE;
49
50
  }
50
- grpc_error* pollset_kick(grpc_pollset* pollset,
51
- grpc_pollset_worker* specific_worker) {
51
+ grpc_error_handle pollset_kick(grpc_pollset* pollset,
52
+ grpc_pollset_worker* specific_worker) {
52
53
  (void)pollset;
53
54
  (void)specific_worker;
54
55
  return GRPC_ERROR_NONE;
@@ -79,13 +79,15 @@ void resolve_address(const char* addr, const char* default_port,
79
79
  grpc_pollset_set* /* interested_parties */,
80
80
  grpc_closure* on_done,
81
81
  grpc_resolved_addresses** addresses) {
82
- auto dns_resolver = grpc_iomgr_event_engine()->GetDNSResolver();
83
- if (!dns_resolver.ok()) {
84
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_done,
85
- absl_status_to_grpc_error(dns_resolver.status()));
82
+ std::unique_ptr<EventEngine::DNSResolver> dns_resolver =
83
+ grpc_iomgr_event_engine()->GetDNSResolver();
84
+ if (dns_resolver == nullptr) {
85
+ grpc_core::ExecCtx::Run(
86
+ DEBUG_LOCATION, on_done,
87
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed to get DNS Resolver."));
86
88
  return;
87
89
  }
88
- new DnsRequest(std::move(*dns_resolver), addr, default_port, on_done,
90
+ new DnsRequest(std::move(dns_resolver), addr, default_port, on_done,
89
91
  addresses);
90
92
  }
91
93
 
@@ -93,8 +95,9 @@ void blocking_handle_async_resolve_done(void* arg, grpc_error_handle error) {
93
95
  static_cast<Promise<grpc_error_handle>*>(arg)->Set(std::move(error));
94
96
  }
95
97
 
96
- grpc_error* blocking_resolve_address(const char* name, const char* default_port,
97
- grpc_resolved_addresses** addresses) {
98
+ grpc_error_handle blocking_resolve_address(
99
+ const char* name, const char* default_port,
100
+ grpc_resolved_addresses** addresses) {
98
101
  grpc_closure on_done;
99
102
  Promise<grpc_error_handle> evt;
100
103
  GRPC_CLOSURE_INIT(&on_done, blocking_handle_async_resolve_done, &evt,
@@ -35,7 +35,7 @@ extern grpc_core::TraceFlag grpc_tcp_trace;
35
35
  namespace {
36
36
  using ::grpc_event_engine::experimental::ChannelArgsEndpointConfig;
37
37
  using ::grpc_event_engine::experimental::EventEngine;
38
- using ::grpc_event_engine::experimental::GrpcClosureToCallback;
38
+ using ::grpc_event_engine::experimental::GrpcClosureToStatusCallback;
39
39
  using ::grpc_event_engine::experimental::SliceAllocator;
40
40
  using ::grpc_event_engine::experimental::SliceAllocatorFactory;
41
41
  using ::grpc_event_engine::experimental::SliceBuffer;
@@ -164,7 +164,7 @@ void tcp_connect(grpc_closure* on_connect, grpc_endpoint** endpoint,
164
164
  }
165
165
  }
166
166
 
167
- grpc_error* tcp_server_create(
167
+ grpc_error_handle tcp_server_create(
168
168
  grpc_closure* shutdown_complete, const grpc_channel_args* args,
169
169
  grpc_slice_allocator_factory* slice_allocator_factory,
170
170
  grpc_tcp_server** server) {
@@ -175,7 +175,8 @@ grpc_error* tcp_server_create(
175
175
  EventEngine* event_engine = grpc_iomgr_event_engine();
176
176
  absl::StatusOr<std::unique_ptr<EventEngine::Listener>> listener =
177
177
  event_engine->CreateListener(
178
- [server](std::unique_ptr<EventEngine::Endpoint> ee_endpoint) {
178
+ [server](std::unique_ptr<EventEngine::Endpoint> ee_endpoint,
179
+ const SliceAllocator& /*slice_allocator*/) {
179
180
  grpc_core::ExecCtx exec_ctx;
180
181
  GPR_ASSERT((*server)->on_accept_internal != nullptr);
181
182
  grpc_event_engine_endpoint* iomgr_endpoint =
@@ -191,8 +192,8 @@ grpc_error* tcp_server_create(
191
192
  exec_ctx.Flush();
192
193
  grpc_pollset_ee_broadcast_event();
193
194
  },
194
- GrpcClosureToCallback(shutdown_complete, GRPC_ERROR_NONE),
195
- endpoint_config, std::move(ee_slice_allocator_factory));
195
+ GrpcClosureToStatusCallback(shutdown_complete), endpoint_config,
196
+ std::move(ee_slice_allocator_factory));
196
197
  if (!listener.ok()) {
197
198
  return absl_status_to_grpc_error(listener.status());
198
199
  }
@@ -210,9 +211,9 @@ void tcp_server_start(grpc_tcp_server* server,
210
211
  GPR_ASSERT(server->listener->Start().ok());
211
212
  }
212
213
 
213
- grpc_error* tcp_server_add_port(grpc_tcp_server* s,
214
- const grpc_resolved_address* addr,
215
- int* out_port) {
214
+ grpc_error_handle tcp_server_add_port(grpc_tcp_server* s,
215
+ const grpc_resolved_address* addr,
216
+ int* out_port) {
216
217
  EventEngine::ResolvedAddress ra(reinterpret_cast<const sockaddr*>(addr->addr),
217
218
  addr->len);
218
219
  auto port = s->listener->Bind(ra);
@@ -19,6 +19,7 @@
19
19
  #include "src/core/lib/iomgr/error.h"
20
20
  #include "src/core/lib/iomgr/event_engine/closure.h"
21
21
  #include "src/core/lib/iomgr/event_engine/iomgr.h"
22
+ #include "src/core/lib/iomgr/exec_ctx.h"
22
23
  #include "src/core/lib/iomgr/timer.h"
23
24
  #include "src/core/lib/surface/init.h"
24
25
  #include "src/core/lib/transport/error_utils.h"
@@ -32,12 +33,16 @@ void timer_init(grpc_timer* timer, grpc_millis deadline,
32
33
  timer->ee_task_handle = grpc_iomgr_event_engine()->RunAt(
33
34
  grpc_core::ToAbslTime(
34
35
  grpc_millis_to_timespec(deadline, GPR_CLOCK_REALTIME)),
35
- GrpcClosureToCallback(closure, GRPC_ERROR_NONE), {});
36
+ GrpcClosureToCallback(closure));
37
+ timer->closure = closure;
36
38
  }
37
39
 
38
40
  void timer_cancel(grpc_timer* timer) {
39
41
  auto handle = timer->ee_task_handle;
40
- grpc_iomgr_event_engine()->TryCancel(handle);
42
+ if (!grpc_iomgr_event_engine()->Cancel(handle)) {
43
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, timer->closure,
44
+ GRPC_ERROR_CANCELLED);
45
+ }
41
46
  }
42
47
 
43
48
  /* Internal API */
@@ -20,14 +20,11 @@
20
20
 
21
21
  #include "src/core/lib/iomgr/exec_ctx.h"
22
22
 
23
- #include <grpc/event_engine/event_engine.h>
24
23
  #include <grpc/support/log.h>
25
24
  #include <grpc/support/sync.h>
26
25
 
27
- #include "src/core/lib/gprpp/thd.h"
28
26
  #include "src/core/lib/iomgr/combiner.h"
29
- #include "src/core/lib/iomgr/event_engine/closure.h"
30
- #include "src/core/lib/iomgr/event_engine/iomgr.h"
27
+ #include "src/core/lib/iomgr/error.h"
31
28
  #include "src/core/lib/profiling/timers.h"
32
29
 
33
30
  static void exec_ctx_run(grpc_closure* closure, grpc_error_handle error) {
@@ -50,13 +47,8 @@ static void exec_ctx_run(grpc_closure* closure, grpc_error_handle error) {
50
47
  }
51
48
 
52
49
  static void exec_ctx_sched(grpc_closure* closure, grpc_error_handle error) {
53
- #if defined(GRPC_USE_EVENT_ENGINE) && \
54
- defined(GRPC_EVENT_ENGINE_REPLACE_EXEC_CTX)
55
- grpc_iomgr_event_engine()->Run(GrpcClosureToCallback(closure, error), {});
56
- #else
57
50
  grpc_closure_list_append(grpc_core::ExecCtx::Get()->closure_list(), closure,
58
51
  error);
59
- #endif
60
52
  }
61
53
 
62
54
  static gpr_timespec g_start_time;
@@ -67,7 +67,7 @@ inline void* InfLenFIFOQueue::PopFront() {
67
67
 
68
68
  InfLenFIFOQueue::Node* InfLenFIFOQueue::AllocateNodes(int num) {
69
69
  num_nodes_ = num_nodes_ + num;
70
- Node* new_chunk = static_cast<Node*>(gpr_zalloc(sizeof(Node) * num));
70
+ Node* new_chunk = new Node[num];
71
71
  new_chunk[0].next = &new_chunk[1];
72
72
  new_chunk[num - 1].prev = &new_chunk[num - 2];
73
73
  for (int i = 1; i < num - 1; ++i) {
@@ -79,8 +79,7 @@ InfLenFIFOQueue::Node* InfLenFIFOQueue::AllocateNodes(int num) {
79
79
 
80
80
  InfLenFIFOQueue::InfLenFIFOQueue() {
81
81
  delete_list_size_ = kDeleteListInitSize;
82
- delete_list_ =
83
- static_cast<Node**>(gpr_zalloc(sizeof(Node*) * delete_list_size_));
82
+ delete_list_ = new Node*[delete_list_size_];
84
83
 
85
84
  Node* new_chunk = AllocateNodes(kQueueInitNumNodes);
86
85
  delete_list_[delete_list_count_++] = new_chunk;
@@ -95,9 +94,9 @@ InfLenFIFOQueue::InfLenFIFOQueue() {
95
94
  InfLenFIFOQueue::~InfLenFIFOQueue() {
96
95
  GPR_ASSERT(count_.load(std::memory_order_relaxed) == 0);
97
96
  for (size_t i = 0; i < delete_list_count_; ++i) {
98
- gpr_free(delete_list_[i]);
97
+ delete[] delete_list_[i];
99
98
  }
100
- gpr_free(delete_list_);
99
+ delete[] delete_list_;
101
100
  }
102
101
 
103
102
  void InfLenFIFOQueue::Put(void* elem) {
@@ -112,8 +111,7 @@ void InfLenFIFOQueue::Put(void* elem) {
112
111
  // Expands delete list on full.
113
112
  if (delete_list_count_ == delete_list_size_) {
114
113
  delete_list_size_ = delete_list_size_ * 2;
115
- delete_list_ = static_cast<Node**>(
116
- gpr_realloc(delete_list_, sizeof(Node*) * delete_list_size_));
114
+ delete_list_ = new Node*[delete_list_size_];
117
115
  }
118
116
  new_chunk[0].prev = queue_tail_->prev;
119
117
  new_chunk[curr_count - 1].next = queue_head_;
@@ -74,15 +74,10 @@ class InfLenFIFOQueue : public MPMCQueueInterface {
74
74
  int count() const override { return count_.load(std::memory_order_relaxed); }
75
75
 
76
76
  struct Node {
77
- Node* next; // Linking
78
- Node* prev;
79
- void* content; // Points to actual element
77
+ Node* next = nullptr; // Linking
78
+ Node* prev = nullptr;
79
+ void* content = nullptr; // Points to actual element
80
80
  gpr_timespec insert_time; // Time for stats
81
-
82
- Node() {
83
- next = prev = nullptr;
84
- content = nullptr;
85
- }
86
81
  };
87
82
 
88
83
  // For test purpose only. Returns number of nodes allocated in queue.
@@ -27,12 +27,11 @@
27
27
  #include <grpc/support/log.h>
28
28
  #include <grpc/support/sync.h>
29
29
 
30
- #include "src/core/lib/debug/stats.h"
31
30
  #include "src/core/lib/gpr/tls.h"
32
31
  #include "src/core/lib/gpr/useful.h"
33
32
  #include "src/core/lib/gprpp/memory.h"
34
33
  #include "src/core/lib/iomgr/exec_ctx.h"
35
- #include "src/core/lib/iomgr/iomgr.h"
34
+ #include "src/core/lib/iomgr/iomgr_internal.h"
36
35
 
37
36
  #define MAX_DEPTH 2
38
37
 
@@ -92,7 +91,7 @@ TraceFlag executor_trace(false, "executor");
92
91
  Executor::Executor(const char* name) : name_(name) {
93
92
  adding_thread_lock_ = GPR_SPINLOCK_STATIC_INITIALIZER;
94
93
  gpr_atm_rel_store(&num_threads_, 0);
95
- max_threads_ = GPR_MAX(1, 2 * gpr_cpu_num_cores());
94
+ max_threads_ = std::max(1u, 2 * gpr_cpu_num_cores());
96
95
  }
97
96
 
98
97
  void Executor::Init() { SetThreading(true); }
@@ -204,7 +203,7 @@ void Executor::SetThreading(bool threading) {
204
203
  // an application.
205
204
  // TODO(guantaol): create another method to finish all the pending closures
206
205
  // registered in the background poller by grpc_core::Executor.
207
- grpc_iomgr_shutdown_background_closure();
206
+ grpc_iomgr_platform_shutdown_background_closure();
208
207
  }
209
208
 
210
209
  EXECUTOR_TRACE("(%s) SetThreading(%d) done", name_, threading);
@@ -237,7 +236,6 @@ void Executor::ThreadMain(void* arg) {
237
236
  break;
238
237
  }
239
238
 
240
- GRPC_STATS_INC_EXECUTOR_QUEUE_DRAINED();
241
239
  grpc_closure_list closures = ts->elems;
242
240
  ts->elems = GRPC_CLOSURE_LIST_INIT;
243
241
  gpr_mu_unlock(&ts->mu);
@@ -254,11 +252,6 @@ void Executor::ThreadMain(void* arg) {
254
252
  void Executor::Enqueue(grpc_closure* closure, grpc_error_handle error,
255
253
  bool is_short) {
256
254
  bool retry_push;
257
- if (is_short) {
258
- GRPC_STATS_INC_EXECUTOR_SCHEDULED_SHORT_ITEMS();
259
- } else {
260
- GRPC_STATS_INC_EXECUTOR_SCHEDULED_LONG_ITEMS();
261
- }
262
255
 
263
256
  do {
264
257
  retry_push = false;
@@ -279,16 +272,14 @@ void Executor::Enqueue(grpc_closure* closure, grpc_error_handle error,
279
272
  return;
280
273
  }
281
274
 
282
- if (grpc_iomgr_add_closure_to_background_poller(closure, error)) {
275
+ if (grpc_iomgr_platform_add_closure_to_background_poller(closure, error)) {
283
276
  return;
284
277
  }
285
278
 
286
279
  ThreadState* ts = g_this_thread_state;
287
280
  if (ts == nullptr) {
288
- ts = &thd_state_[GPR_HASH_POINTER(grpc_core::ExecCtx::Get(),
289
- cur_thread_count)];
290
- } else {
291
- GRPC_STATS_INC_EXECUTOR_SCHEDULED_TO_SELF();
281
+ ts = &thd_state_[grpc_core::HashPointer(grpc_core::ExecCtx::Get(),
282
+ cur_thread_count)];
292
283
  }
293
284
 
294
285
  ThreadState* orig_ts = ts;
@@ -341,7 +332,6 @@ void Executor::Enqueue(grpc_closure* closure, grpc_error_handle error,
341
332
  // - Note that gpr_cv_signal() won't immediately wakeup the thread. That
342
333
  // happens after we release the mutex &ts->mu a few lines below
343
334
  if (grpc_closure_list_empty(ts->elems) && !ts->shutdown) {
344
- GRPC_STATS_INC_EXECUTOR_WAKEUP_INITIATED();
345
335
  gpr_cv_signal(&ts->cv);
346
336
  }
347
337
 
@@ -372,10 +362,6 @@ void Executor::Enqueue(grpc_closure* closure, grpc_error_handle error,
372
362
  }
373
363
  gpr_spinlock_unlock(&adding_thread_lock_);
374
364
  }
375
-
376
- if (retry_push) {
377
- GRPC_STATS_INC_EXECUTOR_PUSH_RETRIES();
378
- }
379
365
  } while (retry_push);
380
366
  }
381
367
 
@@ -53,7 +53,9 @@ static bool g_grpc_abort_on_leaks;
53
53
 
54
54
  void grpc_iomgr_init() {
55
55
  grpc_core::ExecCtx exec_ctx;
56
- grpc_determine_iomgr_platform();
56
+ if (!grpc_have_determined_iomgr_platform()) {
57
+ grpc_set_default_iomgr_platform();
58
+ }
57
59
  g_shutdown = 0;
58
60
  gpr_mu_init(&g_mu);
59
61
  gpr_cv_init(&g_rcv);
@@ -22,19 +22,14 @@
22
22
 
23
23
  #include <stddef.h>
24
24
 
25
- #include "src/core/lib/iomgr/timer.h"
26
- #include "src/core/lib/iomgr/timer_manager.h"
27
-
28
25
  static grpc_iomgr_platform_vtable* iomgr_platform_vtable = nullptr;
29
26
 
30
- void grpc_set_iomgr_platform_vtable(grpc_iomgr_platform_vtable* vtable) {
31
- iomgr_platform_vtable = vtable;
27
+ bool grpc_have_determined_iomgr_platform() {
28
+ return iomgr_platform_vtable != nullptr;
32
29
  }
33
30
 
34
- void grpc_determine_iomgr_platform() {
35
- if (iomgr_platform_vtable == nullptr) {
36
- grpc_set_default_iomgr_platform();
37
- }
31
+ void grpc_set_iomgr_platform_vtable(grpc_iomgr_platform_vtable* vtable) {
32
+ iomgr_platform_vtable = vtable;
38
33
  }
39
34
 
40
35
  void grpc_iomgr_platform_init() { iomgr_platform_vtable->init(); }
@@ -23,7 +23,8 @@
23
23
 
24
24
  #include <stdbool.h>
25
25
 
26
- #include "src/core/lib/iomgr/iomgr.h"
26
+ #include "src/core/lib/iomgr/closure.h"
27
+ #include "src/core/lib/iomgr/error.h"
27
28
 
28
29
  typedef struct grpc_iomgr_object {
29
30
  char* name;
@@ -44,7 +45,7 @@ typedef struct grpc_iomgr_platform_vtable {
44
45
  void grpc_iomgr_register_object(grpc_iomgr_object* obj, const char* name);
45
46
  void grpc_iomgr_unregister_object(grpc_iomgr_object* obj);
46
47
 
47
- void grpc_determine_iomgr_platform();
48
+ bool grpc_have_determined_iomgr_platform();
48
49
 
49
50
  void grpc_set_iomgr_platform_vtable(grpc_iomgr_platform_vtable* vtable);
50
51
 
@@ -71,8 +71,8 @@ end:
71
71
  grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
72
72
  "Failed to load file", &error, 1),
73
73
  GRPC_ERROR_STR_FILENAME,
74
- grpc_slice_from_copied_string(
75
- filename)); // TODO(ncteisen), always static?
74
+
75
+ filename);
76
76
  GRPC_ERROR_UNREF(error);
77
77
  error = error_out;
78
78
  }