grpc 1.50.0 → 1.51.0

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

Potentially problematic release.


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

Files changed (459) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +131 -42
  3. data/include/grpc/event_engine/event_engine.h +10 -3
  4. data/include/grpc/event_engine/slice_buffer.h +17 -0
  5. data/include/grpc/grpc.h +0 -10
  6. data/include/grpc/impl/codegen/grpc_types.h +1 -5
  7. data/include/grpc/impl/codegen/port_platform.h +0 -3
  8. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
  9. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
  10. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  11. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
  12. data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
  13. data/src/core/ext/filters/client_channel/client_channel.h +3 -4
  14. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
  15. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  17. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
  18. data/src/core/ext/filters/client_channel/connector.h +1 -1
  19. data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
  20. data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
  21. data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
  22. data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  24. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
  32. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
  34. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
  36. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
  37. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
  53. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
  54. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
  55. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
  59. data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
  60. data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
  61. data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
  62. data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
  63. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  64. data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
  65. data/src/core/ext/filters/client_channel/subchannel.h +2 -2
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
  70. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  71. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
  73. data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
  74. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
  75. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
  77. data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
  78. data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
  79. data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
  86. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
  92. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  93. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
  94. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
  96. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
  97. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
  98. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
  99. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
  102. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
  103. data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
  104. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
  105. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
  106. data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
  107. data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
  108. data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
  109. data/src/core/ext/xds/certificate_provider_store.cc +4 -4
  110. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
  111. data/src/core/ext/xds/xds_api.cc +15 -68
  112. data/src/core/ext/xds/xds_api.h +3 -7
  113. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  114. data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
  115. data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
  116. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  117. data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
  118. data/src/core/ext/xds/xds_client.cc +122 -90
  119. data/src/core/ext/xds/xds_client.h +7 -2
  120. data/src/core/ext/xds/xds_client_grpc.cc +5 -24
  121. data/src/core/ext/xds/xds_cluster.cc +291 -183
  122. data/src/core/ext/xds/xds_cluster.h +11 -15
  123. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
  124. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
  125. data/src/core/ext/xds/xds_common_types.cc +208 -141
  126. data/src/core/ext/xds/xds_common_types.h +19 -13
  127. data/src/core/ext/xds/xds_endpoint.cc +214 -129
  128. data/src/core/ext/xds/xds_endpoint.h +4 -7
  129. data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
  130. data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
  131. data/src/core/ext/xds/xds_http_filters.cc +60 -73
  132. data/src/core/ext/xds/xds_http_filters.h +67 -19
  133. data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
  134. data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
  135. data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
  136. data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
  137. data/src/core/ext/xds/xds_listener.cc +459 -417
  138. data/src/core/ext/xds/xds_listener.h +43 -47
  139. data/src/core/ext/xds/xds_resource_type.h +3 -11
  140. data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
  141. data/src/core/ext/xds/xds_route_config.cc +94 -80
  142. data/src/core/ext/xds/xds_route_config.h +10 -10
  143. data/src/core/ext/xds/xds_routing.cc +2 -1
  144. data/src/core/ext/xds/xds_routing.h +2 -0
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
  146. data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
  147. data/src/core/lib/address_utils/parse_address.cc +11 -10
  148. data/src/core/lib/channel/channel_args.h +16 -1
  149. data/src/core/lib/channel/channel_stack.cc +23 -20
  150. data/src/core/lib/channel/channel_stack.h +17 -4
  151. data/src/core/lib/channel/channel_stack_builder.cc +4 -7
  152. data/src/core/lib/channel/channel_stack_builder.h +14 -6
  153. data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
  154. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
  155. data/src/core/lib/channel/channel_trace.cc +4 -5
  156. data/src/core/lib/channel/channelz.cc +1 -1
  157. data/src/core/lib/channel/connected_channel.cc +695 -35
  158. data/src/core/lib/channel/connected_channel.h +0 -4
  159. data/src/core/lib/channel/promise_based_filter.cc +1004 -140
  160. data/src/core/lib/channel/promise_based_filter.h +364 -87
  161. data/src/core/lib/compression/message_compress.cc +5 -5
  162. data/src/core/lib/debug/event_log.cc +88 -0
  163. data/src/core/lib/debug/event_log.h +81 -0
  164. data/src/core/lib/debug/histogram_view.cc +69 -0
  165. data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
  166. data/src/core/lib/debug/stats.cc +22 -119
  167. data/src/core/lib/debug/stats.h +29 -35
  168. data/src/core/lib/debug/stats_data.cc +224 -73
  169. data/src/core/lib/debug/stats_data.h +263 -122
  170. data/src/core/lib/event_engine/common_closures.h +71 -0
  171. data/src/core/lib/event_engine/default_event_engine.cc +38 -15
  172. data/src/core/lib/event_engine/default_event_engine.h +15 -3
  173. data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
  174. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  175. data/src/core/lib/event_engine/poller.h +10 -4
  176. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
  177. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  178. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
  179. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  180. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  181. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  182. data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
  183. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  184. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  185. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
  186. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  187. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
  188. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
  189. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
  190. data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
  191. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  192. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
  193. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
  194. data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
  195. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
  196. data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
  197. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
  198. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
  199. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
  200. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  201. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
  202. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  203. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  204. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  205. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  206. data/src/core/lib/event_engine/slice.cc +7 -6
  207. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  208. data/src/core/lib/event_engine/thread_pool.cc +106 -25
  209. data/src/core/lib/event_engine/thread_pool.h +32 -9
  210. data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
  211. data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
  212. data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
  213. data/src/core/lib/experiments/config.cc +1 -1
  214. data/src/core/lib/experiments/experiments.cc +13 -2
  215. data/src/core/lib/experiments/experiments.h +8 -1
  216. data/src/core/lib/gpr/cpu_linux.cc +6 -2
  217. data/src/core/lib/gpr/log_linux.cc +3 -4
  218. data/src/core/lib/gpr/string.h +1 -1
  219. data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
  220. data/src/core/lib/gprpp/load_file.cc +75 -0
  221. data/src/core/lib/gprpp/load_file.h +33 -0
  222. data/src/core/lib/gprpp/per_cpu.h +46 -0
  223. data/src/core/lib/gprpp/stat_posix.cc +5 -4
  224. data/src/core/lib/gprpp/stat_windows.cc +3 -2
  225. data/src/core/lib/gprpp/status_helper.h +1 -3
  226. data/src/core/lib/gprpp/strerror.cc +41 -0
  227. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
  228. data/src/core/lib/gprpp/thd_windows.cc +1 -2
  229. data/src/core/lib/gprpp/time.cc +3 -4
  230. data/src/core/lib/gprpp/time.h +13 -2
  231. data/src/core/lib/gprpp/validation_errors.h +18 -1
  232. data/src/core/lib/http/httpcli.cc +40 -44
  233. data/src/core/lib/http/httpcli.h +6 -5
  234. data/src/core/lib/http/httpcli_security_connector.cc +4 -6
  235. data/src/core/lib/http/parser.cc +54 -65
  236. data/src/core/lib/iomgr/buffer_list.cc +105 -116
  237. data/src/core/lib/iomgr/buffer_list.h +60 -44
  238. data/src/core/lib/iomgr/call_combiner.cc +11 -10
  239. data/src/core/lib/iomgr/call_combiner.h +3 -4
  240. data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
  241. data/src/core/lib/iomgr/closure.h +49 -5
  242. data/src/core/lib/iomgr/combiner.cc +2 -2
  243. data/src/core/lib/iomgr/endpoint.h +1 -1
  244. data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
  245. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  246. data/src/core/lib/iomgr/error.cc +27 -42
  247. data/src/core/lib/iomgr/error.h +22 -152
  248. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  249. data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
  250. data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
  251. data/src/core/lib/iomgr/exec_ctx.cc +3 -4
  252. data/src/core/lib/iomgr/exec_ctx.h +2 -3
  253. data/src/core/lib/iomgr/executor.cc +1 -2
  254. data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
  255. data/src/core/lib/iomgr/iocp_windows.cc +1 -0
  256. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  257. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
  258. data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
  259. data/src/core/lib/iomgr/load_file.cc +5 -9
  260. data/src/core/lib/iomgr/lockfree_event.cc +10 -10
  261. data/src/core/lib/iomgr/pollset_windows.cc +4 -4
  262. data/src/core/lib/iomgr/python_util.h +2 -2
  263. data/src/core/lib/iomgr/resolve_address.cc +8 -3
  264. data/src/core/lib/iomgr/resolve_address.h +3 -4
  265. data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
  266. data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
  267. data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
  268. data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
  269. data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
  270. data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
  271. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
  272. data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
  273. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  274. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
  275. data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
  276. data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
  277. data/src/core/lib/iomgr/tcp_posix.cc +92 -108
  278. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
  279. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  280. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
  281. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
  282. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
  283. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
  284. data/src/core/lib/iomgr/tcp_windows.cc +27 -34
  285. data/src/core/lib/iomgr/timer.h +8 -8
  286. data/src/core/lib/iomgr/timer_generic.cc +9 -15
  287. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
  288. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
  289. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
  290. data/src/core/lib/json/json_channel_args.h +42 -0
  291. data/src/core/lib/json/json_object_loader.cc +7 -2
  292. data/src/core/lib/json/json_object_loader.h +22 -0
  293. data/src/core/lib/json/json_util.cc +5 -5
  294. data/src/core/lib/json/json_util.h +4 -4
  295. data/src/core/lib/load_balancing/lb_policy.cc +1 -1
  296. data/src/core/lib/load_balancing/lb_policy.h +4 -0
  297. data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
  298. data/src/core/lib/matchers/matchers.cc +3 -4
  299. data/src/core/lib/promise/activity.cc +16 -2
  300. data/src/core/lib/promise/activity.h +38 -15
  301. data/src/core/lib/promise/arena_promise.h +80 -51
  302. data/src/core/lib/promise/context.h +13 -6
  303. data/src/core/lib/promise/detail/basic_seq.h +9 -28
  304. data/src/core/lib/promise/detail/promise_factory.h +58 -10
  305. data/src/core/lib/promise/detail/status.h +28 -0
  306. data/src/core/lib/promise/detail/switch.h +1455 -0
  307. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
  308. data/src/core/lib/promise/for_each.h +129 -0
  309. data/src/core/lib/promise/loop.h +7 -5
  310. data/src/core/lib/promise/map_pipe.h +87 -0
  311. data/src/core/lib/promise/pipe.cc +19 -0
  312. data/src/core/lib/promise/pipe.h +505 -0
  313. data/src/core/lib/promise/poll.h +13 -0
  314. data/src/core/lib/promise/seq.h +3 -5
  315. data/src/core/lib/promise/sleep.cc +5 -4
  316. data/src/core/lib/promise/sleep.h +1 -2
  317. data/src/core/lib/promise/try_concurrently.h +341 -0
  318. data/src/core/lib/promise/try_seq.h +10 -13
  319. data/src/core/lib/resolver/server_address.cc +1 -0
  320. data/src/core/lib/resolver/server_address.h +1 -3
  321. data/src/core/lib/resource_quota/api.cc +0 -1
  322. data/src/core/lib/resource_quota/arena.cc +19 -0
  323. data/src/core/lib/resource_quota/arena.h +89 -0
  324. data/src/core/lib/resource_quota/memory_quota.cc +1 -0
  325. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
  326. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
  327. data/src/core/lib/security/authorization/matchers.cc +25 -22
  328. data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
  329. data/src/core/lib/security/context/security_context.h +10 -0
  330. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
  331. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
  333. data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
  334. data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
  335. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
  341. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
  342. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
  345. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
  346. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  350. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
  354. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
  355. data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
  356. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
  357. data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
  358. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
  359. data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
  360. data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
  361. data/src/core/lib/security/transport/security_handshaker.cc +53 -53
  362. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  363. data/src/core/lib/security/transport/tsi_error.cc +6 -3
  364. data/src/core/lib/security/util/json_util.cc +4 -5
  365. data/src/core/lib/service_config/service_config.h +1 -1
  366. data/src/core/lib/service_config/service_config_impl.cc +111 -158
  367. data/src/core/lib/service_config/service_config_impl.h +14 -17
  368. data/src/core/lib/service_config/service_config_parser.cc +14 -31
  369. data/src/core/lib/service_config/service_config_parser.h +14 -10
  370. data/src/core/lib/slice/b64.cc +2 -2
  371. data/src/core/lib/slice/slice.cc +7 -1
  372. data/src/core/lib/slice/slice.h +19 -6
  373. data/src/core/lib/slice/slice_buffer.cc +13 -14
  374. data/src/core/lib/slice/slice_internal.h +13 -21
  375. data/src/core/lib/slice/slice_refcount.h +34 -19
  376. data/src/core/lib/surface/byte_buffer.cc +3 -4
  377. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  378. data/src/core/lib/surface/call.cc +1366 -239
  379. data/src/core/lib/surface/call.h +44 -0
  380. data/src/core/lib/surface/call_details.cc +3 -3
  381. data/src/core/lib/surface/call_trace.cc +113 -0
  382. data/src/core/lib/surface/call_trace.h +30 -0
  383. data/src/core/lib/surface/channel.cc +44 -49
  384. data/src/core/lib/surface/channel.h +9 -1
  385. data/src/core/lib/surface/channel_ping.cc +1 -1
  386. data/src/core/lib/surface/channel_stack_type.cc +4 -0
  387. data/src/core/lib/surface/channel_stack_type.h +2 -0
  388. data/src/core/lib/surface/completion_queue.cc +38 -52
  389. data/src/core/lib/surface/init.cc +8 -39
  390. data/src/core/lib/surface/init_internally.h +8 -0
  391. data/src/core/lib/surface/lame_client.cc +10 -8
  392. data/src/core/lib/surface/server.cc +48 -70
  393. data/src/core/lib/surface/server.h +3 -4
  394. data/src/core/lib/surface/validate_metadata.cc +11 -12
  395. data/src/core/lib/surface/version.cc +2 -2
  396. data/src/core/lib/transport/connectivity_state.cc +2 -2
  397. data/src/core/lib/transport/error_utils.cc +34 -28
  398. data/src/core/lib/transport/error_utils.h +3 -3
  399. data/src/core/lib/transport/handshaker.cc +14 -14
  400. data/src/core/lib/transport/handshaker.h +1 -1
  401. data/src/core/lib/transport/handshaker_factory.h +26 -0
  402. data/src/core/lib/transport/handshaker_registry.cc +8 -2
  403. data/src/core/lib/transport/handshaker_registry.h +3 -4
  404. data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
  405. data/src/core/lib/transport/metadata_batch.h +17 -1
  406. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  407. data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
  408. data/src/core/lib/transport/transport.cc +63 -17
  409. data/src/core/lib/transport/transport.h +64 -68
  410. data/src/core/lib/transport/transport_impl.h +1 -1
  411. data/src/core/lib/transport/transport_op_string.cc +7 -6
  412. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
  413. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
  414. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
  415. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
  416. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  417. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
  418. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
  419. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  420. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
  421. data/src/core/tsi/fake_transport_security.cc +3 -3
  422. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
  423. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  424. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
  425. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
  426. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
  427. data/src/ruby/lib/grpc/version.rb +1 -1
  428. data/src/ruby/spec/channel_spec.rb +0 -43
  429. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  430. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  431. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  432. data/third_party/zlib/compress.c +3 -3
  433. data/third_party/zlib/crc32.c +21 -12
  434. data/third_party/zlib/deflate.c +112 -106
  435. data/third_party/zlib/deflate.h +2 -2
  436. data/third_party/zlib/gzlib.c +1 -1
  437. data/third_party/zlib/gzread.c +3 -5
  438. data/third_party/zlib/gzwrite.c +1 -1
  439. data/third_party/zlib/infback.c +10 -7
  440. data/third_party/zlib/inflate.c +5 -2
  441. data/third_party/zlib/inftrees.c +2 -2
  442. data/third_party/zlib/inftrees.h +1 -1
  443. data/third_party/zlib/trees.c +61 -62
  444. data/third_party/zlib/uncompr.c +2 -2
  445. data/third_party/zlib/zconf.h +16 -3
  446. data/third_party/zlib/zlib.h +10 -10
  447. data/third_party/zlib/zutil.c +9 -7
  448. data/third_party/zlib/zutil.h +1 -0
  449. metadata +55 -18
  450. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
  451. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
  452. data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
  453. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  454. data/src/core/lib/gpr/murmur_hash.h +0 -29
  455. data/src/core/lib/gpr/tls.h +0 -156
  456. data/src/core/lib/promise/call_push_pull.h +0 -148
  457. data/src/core/lib/slice/slice_api.cc +0 -39
  458. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  459. data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -22,20 +22,25 @@
22
22
 
23
23
  #include <string.h>
24
24
 
25
+ #include <memory>
25
26
  #include <new>
26
27
 
28
+ #include "absl/status/status.h"
29
+
30
+ #include <grpc/event_engine/event_engine.h>
31
+
32
+ #include "src/core/lib/event_engine/default_event_engine.h"
27
33
  #include "src/core/lib/gpr/alloc.h"
28
34
  #include "src/core/lib/iomgr/exec_ctx.h"
29
- #include "src/core/lib/iomgr/executor.h"
30
- #include "src/core/lib/iomgr/iomgr.h"
35
+ #include "src/core/lib/promise/context.h"
36
+ #include "src/core/lib/slice/slice.h"
31
37
  #include "src/core/lib/transport/transport_impl.h"
32
38
 
33
39
  grpc_core::DebugOnlyTraceFlag grpc_trace_stream_refcount(false,
34
40
  "stream_refcount");
35
41
 
36
42
  void grpc_stream_destroy(grpc_stream_refcount* refcount) {
37
- if (!grpc_iomgr_is_any_background_poller_thread() &&
38
- (grpc_core::ExecCtx::Get()->flags() &
43
+ if ((grpc_core::ExecCtx::Get()->flags() &
39
44
  GRPC_EXEC_CTX_FLAG_THREAD_RESOURCE_LOOP)) {
40
45
  /* Ick.
41
46
  The thread we're running on MAY be owned (indirectly) by a call-stack.
@@ -44,10 +49,15 @@ void grpc_stream_destroy(grpc_stream_refcount* refcount) {
44
49
  cope with.
45
50
  Throw this over to the executor (on a core-owned thread) and process it
46
51
  there. */
47
- grpc_core::Executor::Run(&refcount->destroy, GRPC_ERROR_NONE);
52
+ grpc_event_engine::experimental::GetDefaultEventEngine()->Run([refcount] {
53
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
54
+ grpc_core::ExecCtx exec_ctx;
55
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, &refcount->destroy,
56
+ absl::OkStatus());
57
+ });
48
58
  } else {
49
59
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, &refcount->destroy,
50
- GRPC_ERROR_NONE);
60
+ absl::OkStatus());
51
61
  }
52
62
  }
53
63
 
@@ -162,28 +172,51 @@ void grpc_transport_stream_op_batch_queue_finish_with_failure(
162
172
  grpc_transport_stream_op_batch* batch, grpc_error_handle error,
163
173
  grpc_core::CallCombinerClosureList* closures) {
164
174
  if (batch->cancel_stream) {
165
- GRPC_ERROR_UNREF(batch->payload->cancel_stream.cancel_error);
166
175
  }
167
176
  // Construct a list of closures to execute.
168
177
  if (batch->recv_initial_metadata) {
169
178
  closures->Add(
170
179
  batch->payload->recv_initial_metadata.recv_initial_metadata_ready,
171
- GRPC_ERROR_REF(error), "failing recv_initial_metadata_ready");
180
+ error, "failing recv_initial_metadata_ready");
172
181
  }
173
182
  if (batch->recv_message) {
174
- closures->Add(batch->payload->recv_message.recv_message_ready,
175
- GRPC_ERROR_REF(error), "failing recv_message_ready");
183
+ closures->Add(batch->payload->recv_message.recv_message_ready, error,
184
+ "failing recv_message_ready");
176
185
  }
177
186
  if (batch->recv_trailing_metadata) {
178
187
  closures->Add(
179
188
  batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready,
180
- GRPC_ERROR_REF(error), "failing recv_trailing_metadata_ready");
189
+ error, "failing recv_trailing_metadata_ready");
190
+ }
191
+ if (batch->on_complete != nullptr) {
192
+ closures->Add(batch->on_complete, error, "failing on_complete");
193
+ }
194
+ }
195
+
196
+ void grpc_transport_stream_op_batch_finish_with_failure_from_transport(
197
+ grpc_transport_stream_op_batch* batch, grpc_error_handle error) {
198
+ if (batch->cancel_stream) {
199
+ }
200
+ // Construct a list of closures to execute.
201
+ if (batch->recv_initial_metadata) {
202
+ grpc_core::ExecCtx::Run(
203
+ DEBUG_LOCATION,
204
+ batch->payload->recv_initial_metadata.recv_initial_metadata_ready,
205
+ error);
206
+ }
207
+ if (batch->recv_message) {
208
+ grpc_core::ExecCtx::Run(
209
+ DEBUG_LOCATION, batch->payload->recv_message.recv_message_ready, error);
210
+ }
211
+ if (batch->recv_trailing_metadata) {
212
+ grpc_core::ExecCtx::Run(
213
+ DEBUG_LOCATION,
214
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready,
215
+ error);
181
216
  }
182
217
  if (batch->on_complete != nullptr) {
183
- closures->Add(batch->on_complete, GRPC_ERROR_REF(error),
184
- "failing on_complete");
218
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, batch->on_complete, error);
185
219
  }
186
- GRPC_ERROR_UNREF(error);
187
220
  }
188
221
 
189
222
  struct made_transport_op {
@@ -197,8 +230,7 @@ struct made_transport_op {
197
230
 
198
231
  static void destroy_made_transport_op(void* arg, grpc_error_handle error) {
199
232
  made_transport_op* op = static_cast<made_transport_op*>(arg);
200
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, op->inner_on_complete,
201
- GRPC_ERROR_REF(error));
233
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, op->inner_on_complete, error);
202
234
  delete op;
203
235
  }
204
236
 
@@ -223,7 +255,7 @@ static void destroy_made_transport_stream_op(void* arg,
223
255
  grpc_closure* c = op->inner_on_complete;
224
256
  delete op;
225
257
  if (c != nullptr) {
226
- grpc_core::Closure::Run(DEBUG_LOCATION, c, GRPC_ERROR_REF(error));
258
+ grpc_core::Closure::Run(DEBUG_LOCATION, c, error);
227
259
  }
228
260
  }
229
261
 
@@ -237,3 +269,17 @@ grpc_transport_stream_op_batch* grpc_make_transport_stream_op(
237
269
  op->op.on_complete = &op->outer_on_complete;
238
270
  return &op->op;
239
271
  }
272
+
273
+ namespace grpc_core {
274
+
275
+ ServerMetadataHandle ServerMetadataFromStatus(const absl::Status& status) {
276
+ auto hdl =
277
+ GetContext<Arena>()->MakePooled<ServerMetadata>(GetContext<Arena>());
278
+ hdl->Set(GrpcStatusMetadata(), static_cast<grpc_status_code>(status.code()));
279
+ if (!status.ok()) {
280
+ hdl->Set(GrpcMessageMetadata(), Slice::FromCopiedString(status.message()));
281
+ }
282
+ return hdl;
283
+ }
284
+
285
+ } // namespace grpc_core
@@ -27,6 +27,7 @@
27
27
 
28
28
  #include <functional>
29
29
  #include <string>
30
+ #include <utility>
30
31
 
31
32
  #include "absl/status/status.h"
32
33
  #include "absl/strings/string_view.h"
@@ -50,17 +51,15 @@
50
51
  #include "src/core/lib/iomgr/iomgr_fwd.h"
51
52
  #include "src/core/lib/iomgr/polling_entity.h"
52
53
  #include "src/core/lib/promise/arena_promise.h"
53
- #include "src/core/lib/promise/context.h"
54
+ #include "src/core/lib/promise/detail/status.h"
54
55
  #include "src/core/lib/promise/latch.h"
56
+ #include "src/core/lib/promise/pipe.h"
55
57
  #include "src/core/lib/resource_quota/arena.h"
56
- #include "src/core/lib/slice/slice.h"
57
58
  #include "src/core/lib/slice/slice_buffer.h"
58
59
  #include "src/core/lib/transport/connectivity_state.h"
59
60
  #include "src/core/lib/transport/metadata_batch.h"
60
61
  #include "src/core/lib/transport/transport_fwd.h"
61
62
 
62
- struct grpc_transport_stream_op_batch_payload;
63
-
64
63
  /* Minimum and maximum protocol accepted versions. */
65
64
  #define GRPC_PROTOCOL_VERSION_MAX_MAJOR 2
66
65
  #define GRPC_PROTOCOL_VERSION_MAX_MINOR 1
@@ -81,63 +80,37 @@ struct grpc_transport_stream_op_batch_payload;
81
80
  (GRPC_WRITE_INTERNAL_COMPRESS | GRPC_WRITE_INTERNAL_TEST_ONLY_WAS_COMPRESSED)
82
81
 
83
82
  namespace grpc_core {
84
- // TODO(ctiller): eliminate once MetadataHandle is constructable directly.
85
- namespace promise_filter_detail {
86
- class BaseCallData;
87
- }
88
-
89
- // Small unowned "handle" type to ensure one accessor at a time to metadata.
90
- // The focus here is to get promises to use the syntax we'd like - we'll
91
- // probably substitute some other smart pointer later.
92
- template <typename T>
93
- class MetadataHandle {
94
- public:
95
- MetadataHandle() = default;
96
-
97
- MetadataHandle(const MetadataHandle&) = delete;
98
- MetadataHandle& operator=(const MetadataHandle&) = delete;
99
-
100
- MetadataHandle(MetadataHandle&& other) noexcept : handle_(other.handle_) {
101
- other.handle_ = nullptr;
102
- }
103
- MetadataHandle& operator=(MetadataHandle&& other) noexcept {
104
- handle_ = other.handle_;
105
- other.handle_ = nullptr;
106
- return *this;
107
- }
108
83
 
109
- explicit MetadataHandle(const absl::Status& status) {
110
- handle_ = GetContext<Arena>()->New<T>(GetContext<Arena>());
111
- handle_->Set(GrpcStatusMetadata(),
112
- static_cast<grpc_status_code>(status.code()));
113
- if (status.ok()) return;
114
- handle_->Set(GrpcMessageMetadata(),
115
- Slice::FromCopiedString(status.message()));
116
- }
84
+ // Server metadata type
85
+ // TODO(ctiller): This should be a bespoke instance of MetadataMap<>
86
+ using ServerMetadata = grpc_metadata_batch;
87
+ using ServerMetadataHandle = Arena::PoolPtr<ServerMetadata>;
117
88
 
118
- T* operator->() const { return handle_; }
119
- bool has_value() const { return handle_ != nullptr; }
120
- T* get() const { return handle_; }
89
+ // Client initial metadata type
90
+ // TODO(ctiller): This should be a bespoke instance of MetadataMap<>
91
+ using ClientMetadata = grpc_metadata_batch;
92
+ using ClientMetadataHandle = Arena::PoolPtr<ClientMetadata>;
121
93
 
122
- static MetadataHandle TestOnlyWrap(T* p) { return MetadataHandle(p); }
94
+ class Message {
95
+ public:
96
+ Message() = default;
97
+ ~Message() = default;
98
+ Message(SliceBuffer payload, uint32_t flags)
99
+ : payload_(std::move(payload)), flags_(flags) {}
100
+ Message(const Message&) = delete;
101
+ Message& operator=(const Message&) = delete;
102
+
103
+ uint32_t flags() const { return flags_; }
104
+ uint32_t& mutable_flags() { return flags_; }
105
+ SliceBuffer* payload() { return &payload_; }
106
+ const SliceBuffer* payload() const { return &payload_; }
123
107
 
124
108
  private:
125
- friend class promise_filter_detail::BaseCallData;
126
-
127
- explicit MetadataHandle(T* handle) : handle_(handle) {}
128
- T* Unwrap() {
129
- T* result = handle_;
130
- handle_ = nullptr;
131
- return result;
132
- }
133
-
134
- T* handle_ = nullptr;
109
+ SliceBuffer payload_;
110
+ uint32_t flags_ = 0;
135
111
  };
136
112
 
137
- // Server metadata type
138
- // TODO(ctiller): This should be a bespoke instance of MetadataMap<>
139
- using ServerMetadata = grpc_metadata_batch;
140
- using ServerMetadataHandle = MetadataHandle<ServerMetadata>;
113
+ using MessageHandle = Arena::PoolPtr<Message>;
141
114
 
142
115
  // Ok/not-ok check for trailing metadata, so that it can be used as result types
143
116
  // for TrySeq.
@@ -146,18 +119,36 @@ inline bool IsStatusOk(const ServerMetadataHandle& m) {
146
119
  GRPC_STATUS_OK;
147
120
  }
148
121
 
149
- // Client initial metadata type
150
- // TODO(ctiller): This should be a bespoke instance of MetadataMap<>
151
- using ClientMetadata = grpc_metadata_batch;
152
- using ClientMetadataHandle = MetadataHandle<ClientMetadata>;
122
+ ServerMetadataHandle ServerMetadataFromStatus(const absl::Status& status);
153
123
 
154
- // Server initial metadata type
155
- // TODO(ctiller): This should be a bespoke instance of MetadataMap<>
156
- using ServerMetadataHandle = MetadataHandle<grpc_metadata_batch>;
124
+ template <>
125
+ struct StatusCastImpl<ServerMetadataHandle, absl::Status> {
126
+ static ServerMetadataHandle Cast(const absl::Status& m) {
127
+ return ServerMetadataFromStatus(m);
128
+ }
129
+ };
130
+
131
+ template <>
132
+ struct StatusCastImpl<ServerMetadataHandle, const absl::Status&> {
133
+ static ServerMetadataHandle Cast(const absl::Status& m) {
134
+ return ServerMetadataFromStatus(m);
135
+ }
136
+ };
157
137
 
158
138
  struct CallArgs {
139
+ // Initial metadata from the client to the server.
140
+ // During promise setup this can be manipulated by filters (and then
141
+ // passed on to the next filter).
159
142
  ClientMetadataHandle client_initial_metadata;
143
+ // Initial metadata from the server to the client.
144
+ // Set once when it's available.
145
+ // During promise setup filters can substitute their own latch for this
146
+ // and consequently intercept the sent value and mutate/observe it.
160
147
  Latch<ServerMetadata*>* server_initial_metadata;
148
+ // Messages travelling from the application to the transport.
149
+ PipeReceiver<MessageHandle>* outgoing_messages;
150
+ // Messages travelling from the transport to the application.
151
+ PipeSender<MessageHandle>* incoming_messages;
161
152
  };
162
153
 
163
154
  using NextPromiseFactory =
@@ -422,10 +413,11 @@ struct grpc_transport_stream_op_batch_payload {
422
413
 
423
414
  /** Forcefully close this stream.
424
415
  The HTTP2 semantics should be:
425
- - server side: if cancel_error has GRPC_ERROR_INT_GRPC_STATUS, and
426
- trailing metadata has not been sent, send trailing metadata with status
427
- and message from cancel_error (use grpc_error_get_status) followed by
428
- a RST_STREAM with error=GRPC_CHTTP2_NO_ERROR to force a full close
416
+ - server side: if cancel_error has
417
+ grpc_core::StatusIntProperty::kRpcStatus, and trailing metadata has not
418
+ been sent, send trailing metadata with status and message from cancel_error
419
+ (use grpc_error_get_status) followed by a RST_STREAM with
420
+ error=GRPC_CHTTP2_NO_ERROR to force a full close
429
421
  - at all other times: use grpc_error_get_status to get a status code, and
430
422
  convert to a HTTP2 error code using
431
423
  grpc_chttp2_grpc_status_to_http2_error. Send a RST_STREAM with this
@@ -433,7 +425,7 @@ struct grpc_transport_stream_op_batch_payload {
433
425
  struct {
434
426
  // Error contract: the transport that gets this op must cause cancel_error
435
427
  // to be unref'ed after processing it
436
- grpc_error_handle cancel_error = GRPC_ERROR_NONE;
428
+ grpc_error_handle cancel_error;
437
429
  } cancel_stream;
438
430
 
439
431
  /* Indexes correspond to grpc_context_index enum values */
@@ -453,11 +445,11 @@ typedef struct grpc_transport_op {
453
445
  /** should the transport be disconnected
454
446
  * Error contract: the transport that gets this op must cause
455
447
  * disconnect_with_error to be unref'ed after processing it */
456
- grpc_error_handle disconnect_with_error = GRPC_ERROR_NONE;
448
+ grpc_error_handle disconnect_with_error;
457
449
  /** what should the goaway contain?
458
450
  * Error contract: the transport that gets this op must cause
459
451
  * goaway_error to be unref'ed after processing it */
460
- grpc_error_handle goaway_error = GRPC_ERROR_NONE;
452
+ grpc_error_handle goaway_error;
461
453
  /** set the callback for accepting new streams;
462
454
  this is a permanent callback, unlike the other one-shot closures.
463
455
  If true, the callback is set to set_accept_stream_fn, with its
@@ -538,6 +530,10 @@ void grpc_transport_stream_op_batch_finish_with_failure(
538
530
  void grpc_transport_stream_op_batch_queue_finish_with_failure(
539
531
  grpc_transport_stream_op_batch* batch, grpc_error_handle error,
540
532
  grpc_core::CallCombinerClosureList* closures);
533
+ // Fail a batch from within the transport (i.e. without the activity lock/call
534
+ // combiner taken).
535
+ void grpc_transport_stream_op_batch_finish_with_failure_from_transport(
536
+ grpc_transport_stream_op_batch* batch, grpc_error_handle error);
541
537
 
542
538
  std::string grpc_transport_stream_op_batch_string(
543
539
  grpc_transport_stream_op_batch* op);
@@ -56,7 +56,7 @@ typedef struct grpc_transport_vtable {
56
56
  There is an on-going migration to move all filters to providing this, and
57
57
  then to drop perform_stream_op. */
58
58
  grpc_core::ArenaPromise<grpc_core::ServerMetadataHandle> (*make_call_promise)(
59
- grpc_transport* self, grpc_core::ClientMetadataHandle initial_metadata);
59
+ grpc_transport* self, grpc_core::CallArgs call_args);
60
60
 
61
61
  /* implementation of grpc_transport_set_pollset */
62
62
  void (*set_pollset)(grpc_transport* self, grpc_stream* stream,
@@ -32,6 +32,7 @@
32
32
  #include "src/core/lib/channel/channel_fwd.h"
33
33
  #include "src/core/lib/channel/channel_stack.h"
34
34
  #include "src/core/lib/gprpp/orphanable.h"
35
+ #include "src/core/lib/gprpp/status_helper.h"
35
36
  #include "src/core/lib/iomgr/error.h"
36
37
  #include "src/core/lib/slice/slice_buffer.h"
37
38
  #include "src/core/lib/transport/connectivity_state.h"
@@ -86,7 +87,7 @@ std::string grpc_transport_stream_op_batch_string(
86
87
  if (op->cancel_stream) {
87
88
  out.push_back(absl::StrCat(
88
89
  " CANCEL:",
89
- grpc_error_std_string(op->payload->cancel_stream.cancel_error)));
90
+ grpc_core::StatusToString(op->payload->cancel_stream.cancel_error)));
90
91
  }
91
92
 
92
93
  return absl::StrJoin(out, "");
@@ -107,14 +108,14 @@ std::string grpc_transport_op_string(grpc_transport_op* op) {
107
108
  op->stop_connectivity_watch));
108
109
  }
109
110
 
110
- if (!GRPC_ERROR_IS_NONE(op->disconnect_with_error)) {
111
+ if (!op->disconnect_with_error.ok()) {
111
112
  out.push_back(absl::StrCat(
112
- " DISCONNECT:", grpc_error_std_string(op->disconnect_with_error)));
113
+ " DISCONNECT:", grpc_core::StatusToString(op->disconnect_with_error)));
113
114
  }
114
115
 
115
- if (!GRPC_ERROR_IS_NONE(op->goaway_error)) {
116
- out.push_back(
117
- absl::StrCat(" SEND_GOAWAY:", grpc_error_std_string(op->goaway_error)));
116
+ if (!op->goaway_error.ok()) {
117
+ out.push_back(absl::StrCat(" SEND_GOAWAY:",
118
+ grpc_core::StatusToString(op->goaway_error)));
118
119
  }
119
120
 
120
121
  if (op->set_accept_stream) {
@@ -25,16 +25,11 @@
25
25
  #include "src/core/lib/transport/http_connect_handshaker.h"
26
26
  #include "src/core/lib/transport/tcp_connect_handshaker.h"
27
27
 
28
- extern void grpc_register_extra_plugins(void);
29
-
30
- void grpc_resolver_dns_ares_init(void);
31
- void grpc_resolver_dns_ares_shutdown(void);
32
-
33
- void grpc_register_built_in_plugins(void) {
34
- grpc_register_plugin(grpc_resolver_dns_ares_init,
35
- grpc_resolver_dns_ares_shutdown);
36
- grpc_register_extra_plugins();
37
- }
28
+ namespace grpc_event_engine {
29
+ namespace experimental {
30
+ extern void RegisterEventEngineChannelArgPreconditioning(grpc_core::CoreConfiguration::Builder* builder);
31
+ } // namespace experimental
32
+ } // namespace grpc_event_engine
38
33
 
39
34
  namespace grpc_core {
40
35
 
@@ -74,6 +69,7 @@ extern void RegisterBinderResolver(CoreConfiguration::Builder* builder);
74
69
  #endif
75
70
 
76
71
  void BuildCoreConfiguration(CoreConfiguration::Builder* builder) {
72
+ grpc_event_engine::experimental::RegisterEventEngineChannelArgPreconditioning(builder);
77
73
  // The order of the handshaker registration is crucial here.
78
74
  // We want TCP connect handshaker to be registered last so that it is added to
79
75
  // the start of the handshaker list.
@@ -21,20 +21,6 @@
21
21
  #include "src/core/lib/config/core_configuration.h"
22
22
  #include "src/core/lib/surface/builtins.h"
23
23
 
24
- #ifndef GRPC_NO_XDS
25
- namespace grpc_core {
26
- void XdsClientGlobalInit();
27
- void XdsClientGlobalShutdown();
28
- } // namespace grpc_core
29
- #endif
30
-
31
- void grpc_register_extra_plugins() {
32
- #ifndef GRPC_NO_XDS
33
- grpc_register_plugin(grpc_core::XdsClientGlobalInit,
34
- grpc_core::XdsClientGlobalShutdown);
35
- #endif
36
- }
37
-
38
24
  namespace grpc_core {
39
25
  #ifndef GRPC_NO_XDS
40
26
  extern void RbacFilterRegister(CoreConfiguration::Builder* builder);
@@ -49,6 +35,7 @@ extern void RegisterXdsClusterImplLbPolicy(CoreConfiguration::Builder* builder);
49
35
  extern void RegisterCdsLbPolicy(CoreConfiguration::Builder* builder);
50
36
  extern void RegisterXdsClusterResolverLbPolicy(
51
37
  CoreConfiguration::Builder* builder);
38
+ extern void RegisterXdsWrrLocalityLbPolicy(CoreConfiguration::Builder* builder);
52
39
  extern void RegisterFileWatcherCertificateProvider(
53
40
  CoreConfiguration::Builder* builder);
54
41
  #endif
@@ -67,6 +54,7 @@ void RegisterExtraFilters(CoreConfiguration::Builder* builder) {
67
54
  RegisterXdsClusterImplLbPolicy(builder);
68
55
  RegisterCdsLbPolicy(builder);
69
56
  RegisterXdsClusterResolverLbPolicy(builder);
57
+ RegisterXdsWrrLocalityLbPolicy(builder);
70
58
  RegisterFileWatcherCertificateProvider(builder);
71
59
  #endif
72
60
  }
@@ -135,11 +135,11 @@ static void alts_grpc_handshaker_client_unref(
135
135
  client->send_buffer = nullptr;
136
136
  client->recv_buffer = nullptr;
137
137
  grpc_metadata_array_destroy(&client->recv_initial_metadata);
138
- grpc_slice_unref_internal(client->recv_bytes);
139
- grpc_slice_unref_internal(client->target_name);
138
+ grpc_core::CSliceUnref(client->recv_bytes);
139
+ grpc_core::CSliceUnref(client->target_name);
140
140
  grpc_alts_credentials_options_destroy(client->options);
141
141
  gpr_free(client->buffer);
142
- grpc_slice_unref_internal(client->handshake_status_details);
142
+ grpc_core::CSliceUnref(client->handshake_status_details);
143
143
  delete client;
144
144
  }
145
145
  }
@@ -468,7 +468,7 @@ static void on_status_received(void* arg, grpc_error_handle error) {
468
468
  "alts_grpc_handshaker_client:%p on_status_received "
469
469
  "status:%d details:|%s| error:|%s|",
470
470
  client, client->handshake_status_code, status_details,
471
- grpc_error_std_string(error).c_str());
471
+ grpc_core::StatusToString(error).c_str());
472
472
  gpr_free(status_details);
473
473
  }
474
474
  maybe_complete_tsi_next(client, true /* receive_status_finished */,
@@ -488,7 +488,7 @@ static grpc_byte_buffer* get_serialized_handshaker_req(
488
488
  }
489
489
  grpc_slice slice = grpc_slice_from_copied_buffer(buf, buf_length);
490
490
  grpc_byte_buffer* byte_buffer = grpc_raw_byte_buffer_create(&slice, 1);
491
- grpc_slice_unref_internal(slice);
491
+ grpc_core::CSliceUnref(slice);
492
492
  return byte_buffer;
493
493
  }
494
494
 
@@ -639,8 +639,8 @@ static tsi_result handshaker_client_next(alts_handshaker_client* c,
639
639
  }
640
640
  alts_grpc_handshaker_client* client =
641
641
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
642
- grpc_slice_unref_internal(client->recv_bytes);
643
- client->recv_bytes = grpc_slice_ref_internal(*bytes_received);
642
+ grpc_core::CSliceUnref(client->recv_bytes);
643
+ client->recv_bytes = grpc_core::CSliceRef(*bytes_received);
644
644
  grpc_byte_buffer* buffer = get_serialized_next(bytes_received);
645
645
  if (buffer == nullptr) {
646
646
  gpr_log(GPR_ERROR, "get_serialized_next() failed");
@@ -692,7 +692,7 @@ static void handshaker_client_destruct(alts_handshaker_client* c) {
692
692
  DEBUG_LOCATION,
693
693
  GRPC_CLOSURE_CREATE(handshaker_call_unref, client->call,
694
694
  grpc_schedule_on_exec_ctx),
695
- GRPC_ERROR_NONE);
695
+ absl::OkStatus());
696
696
  }
697
697
  }
698
698
  }
@@ -741,7 +741,7 @@ alts_handshaker_client* alts_grpc_handshaker_client_create(
741
741
  channel, nullptr, GRPC_PROPAGATE_DEFAULTS, interested_parties,
742
742
  grpc_slice_from_static_string(ALTS_SERVICE_METHOD), &slice,
743
743
  grpc_core::Timestamp::InfFuture(), nullptr);
744
- grpc_slice_unref_internal(slice);
744
+ grpc_core::CSliceUnref(slice);
745
745
  GRPC_CLOSURE_INIT(&client->on_handshaker_service_resp_recv, grpc_cb, client,
746
746
  grpc_schedule_on_exec_ctx);
747
747
  GRPC_CLOSURE_INIT(&client->on_status_received, on_status_received, client,
@@ -789,7 +789,7 @@ void alts_handshaker_client_set_recv_bytes_for_testing(
789
789
  GPR_ASSERT(c != nullptr);
790
790
  alts_grpc_handshaker_client* client =
791
791
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
792
- client->recv_bytes = grpc_slice_ref_internal(*recv_bytes);
792
+ client->recv_bytes = CSliceRef(*recv_bytes);
793
793
  }
794
794
 
795
795
  void alts_handshaker_client_set_fields_for_testing(
@@ -249,8 +249,8 @@ static void handshaker_result_destroy(tsi_handshaker_result* self) {
249
249
  gpr_free(result->peer_identity);
250
250
  gpr_free(result->key_data);
251
251
  gpr_free(result->unused_bytes);
252
- grpc_slice_unref_internal(result->rpc_versions);
253
- grpc_slice_unref_internal(result->serialized_context);
252
+ grpc_core::CSliceUnref(result->rpc_versions);
253
+ grpc_core::CSliceUnref(result->serialized_context);
254
254
  gpr_free(result);
255
255
  }
256
256
 
@@ -391,10 +391,10 @@ static void on_handshaker_service_resp_recv(void* arg,
391
391
  return;
392
392
  }
393
393
  bool success = true;
394
- if (!GRPC_ERROR_IS_NONE(error)) {
394
+ if (!error.ok()) {
395
395
  gpr_log(GPR_INFO,
396
396
  "ALTS handshaker on_handshaker_service_resp_recv error: %s",
397
- grpc_error_std_string(error).c_str());
397
+ grpc_core::StatusToString(error).c_str());
398
398
  success = false;
399
399
  }
400
400
  alts_handshaker_client_handle_response(client, success);
@@ -407,7 +407,7 @@ static void on_handshaker_service_resp_recv_dedicated(
407
407
  alts_shared_resource_dedicated* resource =
408
408
  grpc_alts_get_shared_resource_dedicated();
409
409
  grpc_cq_end_op(
410
- resource->cq, arg, GRPC_ERROR_NONE,
410
+ resource->cq, arg, absl::OkStatus(),
411
411
  [](void* /*done_arg*/, grpc_cq_completion* /*storage*/) {}, nullptr,
412
412
  &resource->storage);
413
413
  }
@@ -481,7 +481,7 @@ static tsi_result alts_tsi_handshaker_continue_handshaker_next(
481
481
  } else {
482
482
  ok = alts_handshaker_client_next(handshaker->client, &slice);
483
483
  }
484
- grpc_slice_unref_internal(slice);
484
+ grpc_core::CSliceUnref(slice);
485
485
  return ok;
486
486
  }
487
487
 
@@ -563,7 +563,7 @@ static tsi_result handshaker_next(
563
563
  // stack. Doing so avoids potential lock cycles between g_init_mu and other
564
564
  // mutexes within core that might be held on the current call stack
565
565
  // (note that g_init_mu gets acquired during channel creation).
566
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, &args->closure, GRPC_ERROR_NONE);
566
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, &args->closure, absl::OkStatus());
567
567
  } else {
568
568
  tsi_result ok = alts_tsi_handshaker_continue_handshaker_next(
569
569
  handshaker, received_bytes, received_bytes_size, cb, user_data, error);
@@ -612,7 +612,7 @@ static void handshaker_destroy(tsi_handshaker* self) {
612
612
  alts_tsi_handshaker* handshaker =
613
613
  reinterpret_cast<alts_tsi_handshaker*>(self);
614
614
  alts_handshaker_client_destroy(handshaker->client);
615
- grpc_slice_unref_internal(handshaker->target_name);
615
+ grpc_core::CSliceUnref(handshaker->target_name);
616
616
  grpc_alts_credentials_options_destroy(handshaker->options);
617
617
  if (handshaker->channel != nullptr) {
618
618
  grpc_channel_destroy_internal(handshaker->channel);
@@ -22,6 +22,7 @@
22
22
 
23
23
  #include <grpc/byte_buffer_reader.h>
24
24
 
25
+ #include "src/core/lib/slice/slice.h"
25
26
  #include "src/core/lib/slice/slice_internal.h"
26
27
 
27
28
  tsi_result alts_tsi_utils_convert_to_tsi_result(grpc_status_code code) {
@@ -54,7 +55,7 @@ grpc_gcp_HandshakerResp* alts_tsi_utils_deserialize_response(
54
55
  buf_size);
55
56
  grpc_gcp_HandshakerResp* resp = grpc_gcp_HandshakerResp_parse(
56
57
  reinterpret_cast<char*>(buf), buf_size, arena);
57
- grpc_slice_unref_internal(slice);
58
+ grpc_core::CSliceUnref(slice);
58
59
  grpc_byte_buffer_reader_destroy(&bbr);
59
60
  if (resp == nullptr) {
60
61
  gpr_log(GPR_ERROR, "grpc_gcp_handshaker_resp_decode() failed");
@@ -25,6 +25,7 @@
25
25
  #include <grpc/support/alloc.h>
26
26
  #include <grpc/support/log.h>
27
27
 
28
+ #include "src/core/lib/slice/slice.h"
28
29
  #include "src/core/lib/slice/slice_internal.h"
29
30
  #include "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h"
30
31
  #include "src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h"
@@ -71,7 +72,7 @@ static tsi_result alts_grpc_integrity_only_extra_copy_protect(
71
72
  return TSI_INTERNAL_ERROR;
72
73
  }
73
74
  grpc_slice_buffer_add(protected_slices, protected_slice);
74
- grpc_slice_buffer_reset_and_unref_internal(unprotected_slices);
75
+ grpc_slice_buffer_reset_and_unref(unprotected_slices);
75
76
  return TSI_OK;
76
77
  }
77
78
 
@@ -138,14 +139,13 @@ static tsi_result alts_grpc_integrity_only_unprotect(
138
139
  alts_grpc_integrity_only_record_protocol* integrity_only_record_protocol =
139
140
  reinterpret_cast<alts_grpc_integrity_only_record_protocol*>(rp);
140
141
  /* Strips frame header from protected slices. */
141
- grpc_slice_buffer_reset_and_unref_internal(&rp->header_sb);
142
+ grpc_slice_buffer_reset_and_unref(&rp->header_sb);
142
143
  grpc_slice_buffer_move_first(protected_slices, rp->header_length,
143
144
  &rp->header_sb);
144
145
  GPR_ASSERT(rp->header_sb.length == rp->header_length);
145
146
  iovec_t header_iovec = alts_grpc_record_protocol_get_header_iovec(rp);
146
147
  /* Moves protected slices data to data_sb and leaves the remaining tag. */
147
- grpc_slice_buffer_reset_and_unref_internal(
148
- &integrity_only_record_protocol->data_sb);
148
+ grpc_slice_buffer_reset_and_unref(&integrity_only_record_protocol->data_sb);
149
149
  grpc_slice_buffer_move_first(protected_slices,
150
150
  protected_slices->length - rp->tag_length,
151
151
  &integrity_only_record_protocol->data_sb);
@@ -173,8 +173,8 @@ static tsi_result alts_grpc_integrity_only_unprotect(
173
173
  gpr_free(error_details);
174
174
  return TSI_INTERNAL_ERROR;
175
175
  }
176
- grpc_slice_buffer_reset_and_unref_internal(&rp->header_sb);
177
- grpc_slice_buffer_reset_and_unref_internal(protected_slices);
176
+ grpc_slice_buffer_reset_and_unref(&rp->header_sb);
177
+ grpc_slice_buffer_reset_and_unref(protected_slices);
178
178
  grpc_slice_buffer_move_into(&integrity_only_record_protocol->data_sb,
179
179
  unprotected_slices);
180
180
  return TSI_OK;
@@ -186,7 +186,7 @@ static void alts_grpc_integrity_only_destruct(alts_grpc_record_protocol* rp) {
186
186
  }
187
187
  alts_grpc_integrity_only_record_protocol* integrity_only_rp =
188
188
  reinterpret_cast<alts_grpc_integrity_only_record_protocol*>(rp);
189
- grpc_slice_buffer_destroy_internal(&integrity_only_rp->data_sb);
189
+ grpc_slice_buffer_destroy(&integrity_only_rp->data_sb);
190
190
  gpr_free(integrity_only_rp->tag_buf);
191
191
  }
192
192