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
@@ -21,6 +21,7 @@
21
21
 
22
22
  #include <algorithm>
23
23
  #include <functional>
24
+ #include <memory>
24
25
  #include <string>
25
26
  #include <utility>
26
27
  #include <vector>
@@ -38,11 +39,11 @@
38
39
 
39
40
  #include "src/core/lib/channel/channel_args.h"
40
41
  #include "src/core/lib/channel/channel_stack.h"
41
- #include "src/core/lib/promise/call_push_pull.h"
42
42
  #include "src/core/lib/promise/context.h"
43
43
  #include "src/core/lib/promise/detail/basic_seq.h"
44
44
  #include "src/core/lib/promise/latch.h"
45
45
  #include "src/core/lib/promise/seq.h"
46
+ #include "src/core/lib/promise/try_concurrently.h"
46
47
  #include "src/core/lib/resource_quota/arena.h"
47
48
  #include "src/core/lib/slice/percent_encoding.h"
48
49
  #include "src/core/lib/transport/status_conversion.h"
@@ -121,21 +122,20 @@ ArenaPromise<ServerMetadataHandle> HttpClientFilter::MakeCallPromise(
121
122
  auto* write_latch =
122
123
  std::exchange(call_args.server_initial_metadata, read_latch);
123
124
 
124
- return CallPushPull(
125
- Seq(next_promise_factory(std::move(call_args)),
126
- [](ServerMetadataHandle md) -> ServerMetadataHandle {
127
- auto r = CheckServerMetadata(md.get());
128
- if (!r.ok()) return ServerMetadataHandle(r);
129
- return md;
130
- }),
131
- []() { return absl::OkStatus(); },
132
- Seq(read_latch->Wait(),
133
- [write_latch](ServerMetadata** md) -> absl::Status {
134
- auto r =
135
- *md == nullptr ? absl::OkStatus() : CheckServerMetadata(*md);
136
- write_latch->Set(*md);
137
- return r;
138
- }));
125
+ return TryConcurrently(
126
+ Seq(next_promise_factory(std::move(call_args)),
127
+ [](ServerMetadataHandle md) -> ServerMetadataHandle {
128
+ auto r = CheckServerMetadata(md.get());
129
+ if (!r.ok()) return ServerMetadataFromStatus(r);
130
+ return md;
131
+ }))
132
+ .NecessaryPull(Seq(read_latch->Wait(),
133
+ [write_latch](ServerMetadata** md) -> absl::Status {
134
+ auto r = *md == nullptr ? absl::OkStatus()
135
+ : CheckServerMetadata(*md);
136
+ write_latch->Set(*md);
137
+ return r;
138
+ }));
139
139
  }
140
140
 
141
141
  HttpClientFilter::HttpClientFilter(HttpSchemeMetadata::ValueType scheme,
@@ -23,6 +23,7 @@
23
23
  #include <limits.h>
24
24
 
25
25
  #include <functional>
26
+ #include <memory>
26
27
 
27
28
  #include "absl/status/status.h"
28
29
  #include "absl/strings/string_view.h"
@@ -33,7 +34,6 @@
33
34
  #include "src/core/lib/channel/channel_stack.h"
34
35
  #include "src/core/lib/channel/channel_stack_builder.h"
35
36
  #include "src/core/lib/config/core_configuration.h"
36
- #include "src/core/lib/surface/channel_init.h"
37
37
  #include "src/core/lib/surface/channel_stack_type.h"
38
38
  #include "src/core/lib/transport/metadata_batch.h"
39
39
 
@@ -27,6 +27,7 @@
27
27
  #include <utility>
28
28
 
29
29
  #include "absl/meta/type_traits.h"
30
+ #include "absl/status/status.h"
30
31
  #include "absl/types/optional.h"
31
32
 
32
33
  #include <grpc/compression.h>
@@ -103,7 +104,7 @@ class CallData {
103
104
  ForwardSendMessageBatch, elem, grpc_schedule_on_exec_ctx);
104
105
  }
105
106
 
106
- ~CallData() { GRPC_ERROR_UNREF(cancel_error_); }
107
+ ~CallData() {}
107
108
 
108
109
  void CompressStartTransportStreamOpBatch(
109
110
  grpc_call_element* elem, grpc_transport_stream_op_batch* batch);
@@ -122,7 +123,7 @@ class CallData {
122
123
 
123
124
  grpc_core::CallCombiner* call_combiner_;
124
125
  grpc_compression_algorithm compression_algorithm_ = GRPC_COMPRESS_NONE;
125
- grpc_error_handle cancel_error_ = GRPC_ERROR_NONE;
126
+ grpc_error_handle cancel_error_;
126
127
  grpc_transport_stream_op_batch* send_message_batch_ = nullptr;
127
128
  bool seen_initial_metadata_ = false;
128
129
  grpc_closure forward_send_message_batch_in_call_combiner_;
@@ -211,8 +212,7 @@ void CallData::FailSendMessageBatchInCallCombiner(void* calld_arg,
211
212
  CallData* calld = static_cast<CallData*>(calld_arg);
212
213
  if (calld->send_message_batch_ != nullptr) {
213
214
  grpc_transport_stream_op_batch_finish_with_failure(
214
- calld->send_message_batch_, GRPC_ERROR_REF(error),
215
- calld->call_combiner_);
215
+ calld->send_message_batch_, error, calld->call_combiner_);
216
216
  calld->send_message_batch_ = nullptr;
217
217
  }
218
218
  }
@@ -228,20 +228,19 @@ void CallData::CompressStartTransportStreamOpBatch(
228
228
  grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
229
229
  // Handle cancel_stream.
230
230
  if (batch->cancel_stream) {
231
- GRPC_ERROR_UNREF(cancel_error_);
232
- cancel_error_ = GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
231
+ cancel_error_ = batch->payload->cancel_stream.cancel_error;
233
232
  if (send_message_batch_ != nullptr) {
234
233
  if (!seen_initial_metadata_) {
235
234
  GRPC_CALL_COMBINER_START(
236
235
  call_combiner_,
237
236
  GRPC_CLOSURE_CREATE(FailSendMessageBatchInCallCombiner, this,
238
237
  grpc_schedule_on_exec_ctx),
239
- GRPC_ERROR_REF(cancel_error_), "failing send_message op");
238
+ cancel_error_, "failing send_message op");
240
239
  }
241
240
  }
242
- } else if (!GRPC_ERROR_IS_NONE(cancel_error_)) {
243
- grpc_transport_stream_op_batch_finish_with_failure(
244
- batch, GRPC_ERROR_REF(cancel_error_), call_combiner_);
241
+ } else if (!cancel_error_.ok()) {
242
+ grpc_transport_stream_op_batch_finish_with_failure(batch, cancel_error_,
243
+ call_combiner_);
245
244
  return;
246
245
  }
247
246
  // Handle send_initial_metadata.
@@ -258,7 +257,8 @@ void CallData::CompressStartTransportStreamOpBatch(
258
257
  if (send_message_batch_ != nullptr) {
259
258
  GRPC_CALL_COMBINER_START(
260
259
  call_combiner_, &forward_send_message_batch_in_call_combiner_,
261
- GRPC_ERROR_NONE, "starting send_message after send_initial_metadata");
260
+ absl::OkStatus(),
261
+ "starting send_message after send_initial_metadata");
262
262
  }
263
263
  }
264
264
  // Handle send_message.
@@ -290,7 +290,7 @@ void CompressStartTransportStreamOpBatch(
290
290
  grpc_error_handle CompressInitCallElem(grpc_call_element* elem,
291
291
  const grpc_call_element_args* args) {
292
292
  new (elem->call_data) CallData(elem, *args);
293
- return GRPC_ERROR_NONE;
293
+ return absl::OkStatus();
294
294
  }
295
295
 
296
296
  /* Destructor for call_data */
@@ -305,7 +305,7 @@ void CompressDestroyCallElem(grpc_call_element* elem,
305
305
  grpc_error_handle CompressInitChannelElem(grpc_channel_element* elem,
306
306
  grpc_channel_element_args* args) {
307
307
  new (elem->channel_data) ChannelData(args);
308
- return GRPC_ERROR_NONE;
308
+ return absl::OkStatus();
309
309
  }
310
310
 
311
311
  /* Destructor for channel data */
@@ -20,11 +20,12 @@
20
20
 
21
21
  #include "src/core/ext/filters/http/message_compress/message_decompress_filter.h"
22
22
 
23
- #include <stdint.h>
24
23
  #include <string.h>
25
24
 
25
+ #include <cstdint>
26
26
  #include <new>
27
27
 
28
+ #include "absl/status/status.h"
28
29
  #include "absl/strings/str_cat.h"
29
30
  #include "absl/strings/str_format.h"
30
31
  #include "absl/types/optional.h"
@@ -37,6 +38,7 @@
37
38
  #include "src/core/lib/channel/channel_args.h"
38
39
  #include "src/core/lib/compression/message_compress.h"
39
40
  #include "src/core/lib/gprpp/debug_location.h"
41
+ #include "src/core/lib/gprpp/status_helper.h"
40
42
  #include "src/core/lib/iomgr/call_combiner.h"
41
43
  #include "src/core/lib/iomgr/closure.h"
42
44
  #include "src/core/lib/iomgr/error.h"
@@ -55,13 +57,13 @@ class ChannelData {
55
57
  message_size_service_config_parser_index_(
56
58
  MessageSizeParser::ParserIndex()) {}
57
59
 
58
- int max_recv_size() const { return max_recv_size_; }
60
+ absl::optional<uint32_t> max_recv_size() const { return max_recv_size_; }
59
61
  size_t message_size_service_config_parser_index() const {
60
62
  return message_size_service_config_parser_index_;
61
63
  }
62
64
 
63
65
  private:
64
- int max_recv_size_;
66
+ absl::optional<uint32_t> max_recv_size_;
65
67
  const size_t message_size_service_config_parser_index_;
66
68
  };
67
69
 
@@ -84,10 +86,10 @@ class CallData {
84
86
  const MessageSizeParsedConfig* limits =
85
87
  MessageSizeParsedConfig::GetFromCallContext(
86
88
  args.context, chand->message_size_service_config_parser_index());
87
- if (limits != nullptr && limits->limits().max_recv_size >= 0 &&
88
- (limits->limits().max_recv_size < max_recv_message_length_ ||
89
- max_recv_message_length_ < 0)) {
90
- max_recv_message_length_ = limits->limits().max_recv_size;
89
+ if (limits != nullptr && limits->max_recv_size().has_value() &&
90
+ (!max_recv_message_length_.has_value() ||
91
+ *limits->max_recv_size() < *max_recv_message_length_)) {
92
+ max_recv_message_length_ = *limits->max_recv_size();
91
93
  }
92
94
  }
93
95
 
@@ -108,14 +110,14 @@ class CallData {
108
110
 
109
111
  CallCombiner* call_combiner_;
110
112
  // Overall error for the call
111
- grpc_error_handle error_ = GRPC_ERROR_NONE;
113
+ grpc_error_handle error_;
112
114
  // Fields for handling recv_initial_metadata_ready callback
113
115
  grpc_closure on_recv_initial_metadata_ready_;
114
116
  grpc_closure* original_recv_initial_metadata_ready_ = nullptr;
115
117
  grpc_metadata_batch* recv_initial_metadata_ = nullptr;
116
118
  // Fields for handling recv_message_ready callback
117
119
  bool seen_recv_message_ready_ = false;
118
- int max_recv_message_length_;
120
+ absl::optional<uint32_t> max_recv_message_length_;
119
121
  grpc_compression_algorithm algorithm_ = GRPC_COMPRESS_NONE;
120
122
  absl::optional<SliceBuffer>* recv_message_ = nullptr;
121
123
  uint32_t* recv_message_flags_ = nullptr;
@@ -125,12 +127,12 @@ class CallData {
125
127
  bool seen_recv_trailing_metadata_ready_ = false;
126
128
  grpc_closure on_recv_trailing_metadata_ready_;
127
129
  grpc_closure* original_recv_trailing_metadata_ready_ = nullptr;
128
- grpc_error_handle on_recv_trailing_metadata_ready_error_ = GRPC_ERROR_NONE;
130
+ grpc_error_handle on_recv_trailing_metadata_ready_error_;
129
131
  };
130
132
 
131
133
  void CallData::OnRecvInitialMetadataReady(void* arg, grpc_error_handle error) {
132
134
  CallData* calld = static_cast<CallData*>(arg);
133
- if (GRPC_ERROR_IS_NONE(error)) {
135
+ if (error.ok()) {
134
136
  calld->algorithm_ =
135
137
  calld->recv_initial_metadata_->get(GrpcEncodingMetadata())
136
138
  .value_or(GRPC_COMPRESS_NONE);
@@ -139,21 +141,21 @@ void CallData::OnRecvInitialMetadataReady(void* arg, grpc_error_handle error) {
139
141
  calld->MaybeResumeOnRecvTrailingMetadataReady();
140
142
  grpc_closure* closure = calld->original_recv_initial_metadata_ready_;
141
143
  calld->original_recv_initial_metadata_ready_ = nullptr;
142
- Closure::Run(DEBUG_LOCATION, closure, GRPC_ERROR_REF(error));
144
+ Closure::Run(DEBUG_LOCATION, closure, error);
143
145
  }
144
146
 
145
147
  void CallData::MaybeResumeOnRecvMessageReady() {
146
148
  if (seen_recv_message_ready_) {
147
149
  seen_recv_message_ready_ = false;
148
150
  GRPC_CALL_COMBINER_START(call_combiner_, &on_recv_message_ready_,
149
- GRPC_ERROR_NONE,
151
+ absl::OkStatus(),
150
152
  "continue recv_message_ready callback");
151
153
  }
152
154
  }
153
155
 
154
156
  void CallData::OnRecvMessageReady(void* arg, grpc_error_handle error) {
155
157
  CallData* calld = static_cast<CallData*>(arg);
156
- if (GRPC_ERROR_IS_NONE(error)) {
158
+ if (error.ok()) {
157
159
  if (calld->original_recv_initial_metadata_ready_ != nullptr) {
158
160
  calld->seen_recv_message_ready_ = true;
159
161
  GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
@@ -167,27 +169,26 @@ void CallData::OnRecvMessageReady(void* arg, grpc_error_handle error) {
167
169
  if (!calld->recv_message_->has_value() ||
168
170
  (*calld->recv_message_)->Length() == 0 ||
169
171
  ((*calld->recv_message_flags_ & GRPC_WRITE_INTERNAL_COMPRESS) == 0)) {
170
- return calld->ContinueRecvMessageReadyCallback(GRPC_ERROR_NONE);
172
+ return calld->ContinueRecvMessageReadyCallback(absl::OkStatus());
171
173
  }
172
- if (calld->max_recv_message_length_ >= 0 &&
174
+ if (calld->max_recv_message_length_.has_value() &&
173
175
  (*calld->recv_message_)->Length() >
174
- static_cast<uint32_t>(calld->max_recv_message_length_)) {
175
- GPR_DEBUG_ASSERT(GRPC_ERROR_IS_NONE(calld->error_));
176
+ static_cast<uint32_t>(*calld->max_recv_message_length_)) {
177
+ GPR_DEBUG_ASSERT(calld->error_.ok());
176
178
  calld->error_ = grpc_error_set_int(
177
- GRPC_ERROR_CREATE_FROM_CPP_STRING(
179
+ GRPC_ERROR_CREATE(
178
180
  absl::StrFormat("Received message larger than max (%u vs. %d)",
179
181
  (*calld->recv_message_)->Length(),
180
- calld->max_recv_message_length_)),
181
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED);
182
- return calld->ContinueRecvMessageReadyCallback(
183
- GRPC_ERROR_REF(calld->error_));
182
+ *calld->max_recv_message_length_)),
183
+ StatusIntProperty::kRpcStatus, GRPC_STATUS_RESOURCE_EXHAUSTED);
184
+ return calld->ContinueRecvMessageReadyCallback(calld->error_);
184
185
  }
185
186
  SliceBuffer decompressed_slices;
186
187
  if (grpc_msg_decompress(calld->algorithm_,
187
188
  (*calld->recv_message_)->c_slice_buffer(),
188
189
  decompressed_slices.c_slice_buffer()) == 0) {
189
- GPR_DEBUG_ASSERT(GRPC_ERROR_IS_NONE(calld->error_));
190
- calld->error_ = GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
190
+ GPR_DEBUG_ASSERT(calld->error_.ok());
191
+ calld->error_ = GRPC_ERROR_CREATE(absl::StrCat(
191
192
  "Unexpected error decompressing data for algorithm with "
192
193
  "enum value ",
193
194
  calld->algorithm_));
@@ -197,11 +198,10 @@ void CallData::OnRecvMessageReady(void* arg, grpc_error_handle error) {
197
198
  GRPC_WRITE_INTERNAL_TEST_ONLY_WAS_COMPRESSED;
198
199
  (*calld->recv_message_)->Swap(&decompressed_slices);
199
200
  }
200
- return calld->ContinueRecvMessageReadyCallback(
201
- GRPC_ERROR_REF(calld->error_));
201
+ return calld->ContinueRecvMessageReadyCallback(calld->error_);
202
202
  }
203
203
  }
204
- calld->ContinueRecvMessageReadyCallback(GRPC_ERROR_REF(error));
204
+ calld->ContinueRecvMessageReadyCallback(error);
205
205
  }
206
206
 
207
207
  void CallData::ContinueRecvMessageReadyCallback(grpc_error_handle error) {
@@ -216,7 +216,7 @@ void CallData::MaybeResumeOnRecvTrailingMetadataReady() {
216
216
  if (seen_recv_trailing_metadata_ready_) {
217
217
  seen_recv_trailing_metadata_ready_ = false;
218
218
  grpc_error_handle error = on_recv_trailing_metadata_ready_error_;
219
- on_recv_trailing_metadata_ready_error_ = GRPC_ERROR_NONE;
219
+ on_recv_trailing_metadata_ready_error_ = absl::OkStatus();
220
220
  GRPC_CALL_COMBINER_START(call_combiner_, &on_recv_trailing_metadata_ready_,
221
221
  error, "Continuing OnRecvTrailingMetadataReady");
222
222
  }
@@ -227,15 +227,15 @@ void CallData::OnRecvTrailingMetadataReady(void* arg, grpc_error_handle error) {
227
227
  if (calld->original_recv_initial_metadata_ready_ != nullptr ||
228
228
  calld->original_recv_message_ready_ != nullptr) {
229
229
  calld->seen_recv_trailing_metadata_ready_ = true;
230
- calld->on_recv_trailing_metadata_ready_error_ = GRPC_ERROR_REF(error);
230
+ calld->on_recv_trailing_metadata_ready_error_ = error;
231
231
  GRPC_CALL_COMBINER_STOP(
232
232
  calld->call_combiner_,
233
233
  "Deferring OnRecvTrailingMetadataReady until after "
234
234
  "OnRecvInitialMetadataReady and OnRecvMessageReady");
235
235
  return;
236
236
  }
237
- error = grpc_error_add_child(GRPC_ERROR_REF(error), calld->error_);
238
- calld->error_ = GRPC_ERROR_NONE;
237
+ error = grpc_error_add_child(error, calld->error_);
238
+ calld->error_ = absl::OkStatus();
239
239
  grpc_closure* closure = calld->original_recv_trailing_metadata_ready_;
240
240
  calld->original_recv_trailing_metadata_ready_ = nullptr;
241
241
  Closure::Run(DEBUG_LOCATION, closure, error);
@@ -281,7 +281,7 @@ grpc_error_handle DecompressInitCallElem(grpc_call_element* elem,
281
281
  const grpc_call_element_args* args) {
282
282
  ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
283
283
  new (elem->call_data) CallData(*args, chand);
284
- return GRPC_ERROR_NONE;
284
+ return absl::OkStatus();
285
285
  }
286
286
 
287
287
  void DecompressDestroyCallElem(grpc_call_element* elem,
@@ -295,7 +295,7 @@ grpc_error_handle DecompressInitChannelElem(grpc_channel_element* elem,
295
295
  grpc_channel_element_args* args) {
296
296
  ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
297
297
  new (chand) ChannelData(args);
298
- return GRPC_ERROR_NONE;
298
+ return absl::OkStatus();
299
299
  }
300
300
 
301
301
  void DecompressDestroyChannelElem(grpc_channel_element* elem) {
@@ -21,9 +21,11 @@
21
21
  #include "src/core/ext/filters/http/server/http_server_filter.h"
22
22
 
23
23
  #include <functional>
24
+ #include <memory>
24
25
  #include <utility>
25
26
 
26
27
  #include "absl/base/attributes.h"
28
+ #include "absl/meta/type_traits.h"
27
29
  #include "absl/status/status.h"
28
30
  #include "absl/types/optional.h"
29
31
 
@@ -31,12 +33,12 @@
31
33
 
32
34
  #include "src/core/lib/channel/channel_args.h"
33
35
  #include "src/core/lib/channel/channel_stack.h"
34
- #include "src/core/lib/promise/call_push_pull.h"
35
36
  #include "src/core/lib/promise/context.h"
36
37
  #include "src/core/lib/promise/detail/basic_seq.h"
37
38
  #include "src/core/lib/promise/latch.h"
38
39
  #include "src/core/lib/promise/promise.h"
39
40
  #include "src/core/lib/promise/seq.h"
41
+ #include "src/core/lib/promise/try_concurrently.h"
40
42
  #include "src/core/lib/resource_quota/arena.h"
41
43
  #include "src/core/lib/slice/percent_encoding.h"
42
44
  #include "src/core/lib/slice/slice.h"
@@ -74,11 +76,11 @@ ArenaPromise<ServerMetadataHandle> HttpServerFilter::MakeCallPromise(
74
76
  case HttpMethodMetadata::kInvalid:
75
77
  case HttpMethodMetadata::kGet:
76
78
  return Immediate(
77
- ServerMetadataHandle(absl::UnknownError("Bad method header")));
79
+ ServerMetadataFromStatus(absl::UnknownError("Bad method header")));
78
80
  }
79
81
  } else {
80
82
  return Immediate(
81
- ServerMetadataHandle(absl::UnknownError("Missing :method header")));
83
+ ServerMetadataFromStatus(absl::UnknownError("Missing :method header")));
82
84
  }
83
85
 
84
86
  auto te = md->Take(TeMetadata());
@@ -86,21 +88,21 @@ ArenaPromise<ServerMetadataHandle> HttpServerFilter::MakeCallPromise(
86
88
  // Do nothing, ok.
87
89
  } else if (!te.has_value()) {
88
90
  return Immediate(
89
- ServerMetadataHandle(absl::UnknownError("Missing :te header")));
91
+ ServerMetadataFromStatus(absl::UnknownError("Missing :te header")));
90
92
  } else {
91
93
  return Immediate(
92
- ServerMetadataHandle(absl::UnknownError("Bad :te header")));
94
+ ServerMetadataFromStatus(absl::UnknownError("Bad :te header")));
93
95
  }
94
96
 
95
97
  auto scheme = md->Take(HttpSchemeMetadata());
96
98
  if (scheme.has_value()) {
97
99
  if (*scheme == HttpSchemeMetadata::kInvalid) {
98
100
  return Immediate(
99
- ServerMetadataHandle(absl::UnknownError("Bad :scheme header")));
101
+ ServerMetadataFromStatus(absl::UnknownError("Bad :scheme header")));
100
102
  }
101
103
  } else {
102
104
  return Immediate(
103
- ServerMetadataHandle(absl::UnknownError("Missing :scheme header")));
105
+ ServerMetadataFromStatus(absl::UnknownError("Missing :scheme header")));
104
106
  }
105
107
 
106
108
  md->Remove(ContentTypeMetadata());
@@ -108,7 +110,7 @@ ArenaPromise<ServerMetadataHandle> HttpServerFilter::MakeCallPromise(
108
110
  Slice* path_slice = md->get_pointer(HttpPathMetadata());
109
111
  if (path_slice == nullptr) {
110
112
  return Immediate(
111
- ServerMetadataHandle(absl::UnknownError("Missing :path header")));
113
+ ServerMetadataFromStatus(absl::UnknownError("Missing :path header")));
112
114
  }
113
115
 
114
116
  if (md->get_pointer(HttpAuthorityMetadata()) == nullptr) {
@@ -119,8 +121,8 @@ ArenaPromise<ServerMetadataHandle> HttpServerFilter::MakeCallPromise(
119
121
  }
120
122
 
121
123
  if (md->get_pointer(HttpAuthorityMetadata()) == nullptr) {
122
- return Immediate(
123
- ServerMetadataHandle(absl::UnknownError("Missing :authority header")));
124
+ return Immediate(ServerMetadataFromStatus(
125
+ absl::UnknownError("Missing :authority header")));
124
126
  }
125
127
 
126
128
  if (!surface_user_agent_) {
@@ -131,21 +133,20 @@ ArenaPromise<ServerMetadataHandle> HttpServerFilter::MakeCallPromise(
131
133
  auto* write_latch =
132
134
  std::exchange(call_args.server_initial_metadata, read_latch);
133
135
 
134
- return CallPushPull(Seq(next_promise_factory(std::move(call_args)),
135
- [](ServerMetadataHandle md) -> ServerMetadataHandle {
136
- FilterOutgoingMetadata(md.get());
137
- return md;
138
- }),
139
- Seq(read_latch->Wait(),
140
- [write_latch](ServerMetadata** md) {
141
- FilterOutgoingMetadata(*md);
142
- (*md)->Set(HttpStatusMetadata(), 200);
143
- (*md)->Set(ContentTypeMetadata(),
144
- ContentTypeMetadata::kApplicationGrpc);
145
- write_latch->Set(*md);
146
- return absl::OkStatus();
147
- }),
148
- []() { return absl::OkStatus(); });
136
+ return TryConcurrently(
137
+ Seq(next_promise_factory(std::move(call_args)),
138
+ [](ServerMetadataHandle md) -> ServerMetadataHandle {
139
+ FilterOutgoingMetadata(md.get());
140
+ return md;
141
+ }))
142
+ .Push(Seq(read_latch->Wait(), [write_latch](ServerMetadata** md) {
143
+ FilterOutgoingMetadata(*md);
144
+ (*md)->Set(HttpStatusMetadata(), 200);
145
+ (*md)->Set(ContentTypeMetadata(),
146
+ ContentTypeMetadata::kApplicationGrpc);
147
+ write_latch->Set(*md);
148
+ return absl::OkStatus();
149
+ }));
149
150
  }
150
151
 
151
152
  absl::StatusOr<HttpServerFilter> HttpServerFilter::Create(