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,7 +21,6 @@
21
21
  #include <string.h>
22
22
 
23
23
  #include <algorithm>
24
- #include <array>
25
24
  #include <map>
26
25
  #include <memory>
27
26
  #include <set>
@@ -58,7 +57,6 @@
58
57
  #include "src/core/ext/xds/xds_common_types.h"
59
58
  #include "src/core/ext/xds/xds_http_filters.h"
60
59
  #include "src/core/ext/xds/xds_listener.h"
61
- #include "src/core/ext/xds/xds_resource_type_impl.h"
62
60
  #include "src/core/ext/xds/xds_route_config.h"
63
61
  #include "src/core/ext/xds/xds_routing.h"
64
62
  #include "src/core/lib/address_utils/parse_address.h"
@@ -70,7 +68,9 @@
70
68
  #include "src/core/lib/debug/trace.h"
71
69
  #include "src/core/lib/gprpp/debug_location.h"
72
70
  #include "src/core/lib/gprpp/host_port.h"
71
+ #include "src/core/lib/gprpp/match.h"
73
72
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
73
+ #include "src/core/lib/gprpp/status_helper.h"
74
74
  #include "src/core/lib/gprpp/sync.h"
75
75
  #include "src/core/lib/gprpp/unique_type_name.h"
76
76
  #include "src/core/lib/iomgr/endpoint.h"
@@ -313,6 +313,7 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
313
313
  XdsServerConfigSelector : public ServerConfigSelector {
314
314
  public:
315
315
  static absl::StatusOr<RefCountedPtr<XdsServerConfigSelector>> Create(
316
+ const XdsHttpFilterRegistry& http_filter_registry,
316
317
  XdsRouteConfigResource rds_update,
317
318
  const std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>&
318
319
  http_filters);
@@ -376,12 +377,18 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
376
377
  : public ServerConfigSelectorProvider {
377
378
  public:
378
379
  StaticXdsServerConfigSelectorProvider(
380
+ RefCountedPtr<GrpcXdsClient> xds_client,
379
381
  absl::StatusOr<XdsRouteConfigResource> static_resource,
380
382
  std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>
381
383
  http_filters)
382
- : static_resource_(std::move(static_resource)),
384
+ : xds_client_(std::move(xds_client)),
385
+ static_resource_(std::move(static_resource)),
383
386
  http_filters_(std::move(http_filters)) {}
384
387
 
388
+ ~StaticXdsServerConfigSelectorProvider() override {
389
+ xds_client_.reset(DEBUG_LOCATION, "StaticXdsServerConfigSelectorProvider");
390
+ }
391
+
385
392
  absl::StatusOr<RefCountedPtr<ServerConfigSelector>> Watch(
386
393
  std::unique_ptr<ServerConfigSelectorProvider::ServerConfigSelectorWatcher>
387
394
  watcher) override {
@@ -390,8 +397,10 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
390
397
  if (!static_resource_.ok()) {
391
398
  return static_resource_.status();
392
399
  }
393
- return XdsServerConfigSelector::Create(static_resource_.value(),
394
- http_filters_);
400
+ return XdsServerConfigSelector::Create(
401
+ static_cast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
402
+ .http_filter_registry(),
403
+ static_resource_.value(), http_filters_);
395
404
  }
396
405
 
397
406
  void Orphan() override {}
@@ -399,6 +408,7 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
399
408
  void CancelWatch() override { watcher_.reset(); }
400
409
 
401
410
  private:
411
+ RefCountedPtr<GrpcXdsClient> xds_client_;
402
412
  absl::StatusOr<XdsRouteConfigResource> static_resource_;
403
413
  std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>
404
414
  http_filters_;
@@ -549,7 +559,15 @@ void XdsServerConfigFetcher::ListenerWatcher::OnResourceChanged(
549
559
  "[ListenerWatcher %p] Received LDS update from xds client %p: %s",
550
560
  this, xds_client_.get(), listener.ToString().c_str());
551
561
  }
552
- if (listener.address != listening_address_) {
562
+ auto* tcp_listener =
563
+ absl::get_if<XdsListenerResource::TcpListener>(&listener.listener);
564
+ if (tcp_listener == nullptr) {
565
+ MutexLock lock(&mu_);
566
+ OnFatalError(
567
+ absl::FailedPreconditionError("LDS resource is not a TCP listener"));
568
+ return;
569
+ }
570
+ if (tcp_listener->address != listening_address_) {
553
571
  MutexLock lock(&mu_);
554
572
  OnFatalError(absl::FailedPreconditionError(
555
573
  "Address in LDS update does not match listening address"));
@@ -557,8 +575,8 @@ void XdsServerConfigFetcher::ListenerWatcher::OnResourceChanged(
557
575
  }
558
576
  auto new_filter_chain_match_manager = MakeRefCounted<FilterChainMatchManager>(
559
577
  xds_client_->Ref(DEBUG_LOCATION, "FilterChainMatchManager"),
560
- std::move(listener.filter_chain_map),
561
- std::move(listener.default_filter_chain));
578
+ std::move(tcp_listener->filter_chain_map),
579
+ std::move(tcp_listener->default_filter_chain));
562
580
  MutexLock lock(&mu_);
563
581
  if (filter_chain_match_manager_ == nullptr ||
564
582
  !(new_filter_chain_match_manager->filter_chain_map() ==
@@ -567,12 +585,7 @@ void XdsServerConfigFetcher::ListenerWatcher::OnResourceChanged(
567
585
  filter_chain_match_manager_->default_filter_chain())) {
568
586
  pending_filter_chain_match_manager_ =
569
587
  std::move(new_filter_chain_match_manager);
570
- if (XdsRbacEnabled()) {
571
- pending_filter_chain_match_manager_->StartRdsWatch(Ref());
572
- } else {
573
- PendingFilterChainMatchManagerReadyLocked(
574
- pending_filter_chain_match_manager_.get());
575
- }
588
+ pending_filter_chain_match_manager_->StartRdsWatch(Ref());
576
589
  }
577
590
  }
578
591
 
@@ -679,32 +692,25 @@ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
679
692
  for (const auto& source_type : destination_ip.source_types_array) {
680
693
  for (const auto& source_ip : source_type) {
681
694
  for (const auto& source_port_pair : source_ip.ports_map) {
682
- if (!source_port_pair.second.data->http_connection_manager
683
- .route_config_name.empty()) {
684
- resource_names.insert(
685
- source_port_pair.second.data->http_connection_manager
686
- .route_config_name);
687
- }
688
- filter_chain_data_set.insert(source_port_pair.second.data.get());
695
+ auto* filter_chain_data = source_port_pair.second.data.get();
696
+ const auto* rds_name = absl::get_if<std::string>(
697
+ &filter_chain_data->http_connection_manager.route_config);
698
+ if (rds_name != nullptr) resource_names.insert(*rds_name);
699
+ filter_chain_data_set.insert(filter_chain_data);
689
700
  }
690
701
  }
691
702
  }
692
703
  }
693
704
  if (default_filter_chain_.has_value()) {
694
- if (!default_filter_chain_->http_connection_manager.route_config_name
695
- .empty()) {
696
- resource_names.insert(
697
- default_filter_chain_->http_connection_manager.route_config_name);
698
- }
699
- std::reverse(
700
- default_filter_chain_->http_connection_manager.http_filters.begin(),
701
- default_filter_chain_->http_connection_manager.http_filters.end());
705
+ auto& hcm = default_filter_chain_->http_connection_manager;
706
+ const auto* rds_name = absl::get_if<std::string>(&hcm.route_config);
707
+ if (rds_name != nullptr) resource_names.insert(*rds_name);
708
+ std::reverse(hcm.http_filters.begin(), hcm.http_filters.end());
702
709
  }
703
710
  // Reverse the lists of HTTP filters in all the filter chains
704
711
  for (auto* filter_chain_data : filter_chain_data_set) {
705
- std::reverse(
706
- filter_chain_data->http_connection_manager.http_filters.begin(),
707
- filter_chain_data->http_connection_manager.http_filters.end());
712
+ auto& hcm = filter_chain_data->http_connection_manager;
713
+ std::reverse(hcm.http_filters.begin(), hcm.http_filters.end());
708
714
  }
709
715
  // Start watching on referenced RDS resources
710
716
  struct WatcherToStart {
@@ -1059,52 +1065,57 @@ absl::StatusOr<ChannelArgs> XdsServerConfigFetcher::ListenerWatcher::
1059
1065
  RefCountedPtr<ServerConfigSelectorProvider> server_config_selector_provider;
1060
1066
  RefCountedPtr<XdsChannelStackModifier> channel_stack_modifier;
1061
1067
  RefCountedPtr<XdsCertificateProvider> xds_certificate_provider;
1062
- // Add config selector filter
1063
- if (XdsRbacEnabled()) {
1064
- std::vector<const grpc_channel_filter*> filters;
1065
- // Iterate the list of HTTP filters in reverse since in Core, received data
1066
- // flows *up* the stack.
1067
- for (const auto& http_filter :
1068
- filter_chain->http_connection_manager.http_filters) {
1069
- // Find filter. This is guaranteed to succeed, because it's checked
1070
- // at config validation time in the XdsApi code.
1071
- const XdsHttpFilterImpl* filter_impl =
1072
- XdsHttpFilterRegistry::GetFilterForType(
1073
- http_filter.config.config_proto_type_name);
1074
- GPR_ASSERT(filter_impl != nullptr);
1075
- // Some filters like the router filter are no-op filters and do not have
1076
- // an implementation.
1077
- if (filter_impl->channel_filter() != nullptr) {
1078
- filters.push_back(filter_impl->channel_filter());
1079
- }
1068
+ // Iterate the list of HTTP filters in reverse since in Core, received data
1069
+ // flows *up* the stack.
1070
+ std::vector<const grpc_channel_filter*> filters;
1071
+ const auto& http_filter_registry =
1072
+ static_cast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
1073
+ .http_filter_registry();
1074
+ for (const auto& http_filter :
1075
+ filter_chain->http_connection_manager.http_filters) {
1076
+ // Find filter. This is guaranteed to succeed, because it's checked
1077
+ // at config validation time in the XdsApi code.
1078
+ const XdsHttpFilterImpl* filter_impl =
1079
+ http_filter_registry.GetFilterForType(
1080
+ http_filter.config.config_proto_type_name);
1081
+ GPR_ASSERT(filter_impl != nullptr);
1082
+ // Some filters like the router filter are no-op filters and do not have
1083
+ // an implementation.
1084
+ if (filter_impl->channel_filter() != nullptr) {
1085
+ filters.push_back(filter_impl->channel_filter());
1080
1086
  }
1081
- filters.push_back(&kServerConfigSelectorFilter);
1082
- channel_stack_modifier =
1083
- MakeRefCounted<XdsChannelStackModifier>(std::move(filters));
1084
- if (filter_chain->http_connection_manager.rds_update.has_value()) {
1085
- server_config_selector_provider =
1086
- MakeRefCounted<StaticXdsServerConfigSelectorProvider>(
1087
- filter_chain->http_connection_manager.rds_update.value(),
1088
- filter_chain->http_connection_manager.http_filters);
1089
- } else {
1090
- absl::StatusOr<XdsRouteConfigResource> initial_resource;
1091
- {
1092
- MutexLock lock(&mu_);
1093
- initial_resource =
1094
- rds_map_[filter_chain->http_connection_manager.route_config_name]
1095
- .rds_update.value();
1096
- }
1097
- server_config_selector_provider =
1098
- MakeRefCounted<DynamicXdsServerConfigSelectorProvider>(
1099
- xds_client_->Ref(DEBUG_LOCATION,
1100
- "DynamicXdsServerConfigSelectorProvider"),
1101
- filter_chain->http_connection_manager.route_config_name,
1102
- std::move(initial_resource),
1103
- filter_chain->http_connection_manager.http_filters);
1104
- }
1105
- args = args.SetObject(server_config_selector_provider)
1106
- .SetObject(channel_stack_modifier);
1107
1087
  }
1088
+ // Add config selector filter.
1089
+ filters.push_back(&kServerConfigSelectorFilter);
1090
+ channel_stack_modifier =
1091
+ MakeRefCounted<XdsChannelStackModifier>(std::move(filters));
1092
+ Match(
1093
+ filter_chain->http_connection_manager.route_config,
1094
+ // RDS resource name
1095
+ [&](const std::string& rds_name) {
1096
+ absl::StatusOr<XdsRouteConfigResource> initial_resource;
1097
+ {
1098
+ MutexLock lock(&mu_);
1099
+ initial_resource = rds_map_[rds_name].rds_update.value();
1100
+ }
1101
+ server_config_selector_provider =
1102
+ MakeRefCounted<DynamicXdsServerConfigSelectorProvider>(
1103
+ xds_client_->Ref(DEBUG_LOCATION,
1104
+ "DynamicXdsServerConfigSelectorProvider"),
1105
+ rds_name, std::move(initial_resource),
1106
+ filter_chain->http_connection_manager.http_filters);
1107
+ },
1108
+ // inline RouteConfig
1109
+ [&](const XdsRouteConfigResource& route_config) {
1110
+ server_config_selector_provider =
1111
+ MakeRefCounted<StaticXdsServerConfigSelectorProvider>(
1112
+ xds_client_->Ref(DEBUG_LOCATION,
1113
+ "StaticXdsServerConfigSelectorProvider"),
1114
+ route_config,
1115
+ filter_chain->http_connection_manager.http_filters);
1116
+ });
1117
+ args = args.SetObject(server_config_selector_provider)
1118
+ .SetObject(channel_stack_modifier);
1108
1119
  // Add XdsCertificateProvider if credentials are xDS.
1109
1120
  auto* server_creds = args.GetObject<grpc_server_credentials>();
1110
1121
  if (server_creds != nullptr &&
@@ -1130,6 +1141,7 @@ absl::StatusOr<
1130
1141
  FilterChainMatchManager::XdsServerConfigSelector>>
1131
1142
  XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1132
1143
  XdsServerConfigSelector::Create(
1144
+ const XdsHttpFilterRegistry& http_filter_registry,
1133
1145
  XdsRouteConfigResource rds_update,
1134
1146
  const std::vector<
1135
1147
  XdsListenerResource::HttpConnectionManager::HttpFilter>&
@@ -1147,7 +1159,8 @@ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1147
1159
  absl::get_if<XdsRouteConfigResource::Route::NonForwardingAction>(
1148
1160
  &route.action) == nullptr;
1149
1161
  auto result = XdsRouting::GeneratePerHTTPFilterConfigs(
1150
- http_filters, vhost, route, nullptr, ChannelArgs());
1162
+ http_filter_registry, http_filters, vhost, route, nullptr,
1163
+ ChannelArgs());
1151
1164
  if (!result.ok()) return result.status();
1152
1165
  std::vector<std::string> fields;
1153
1166
  fields.reserve(result->per_filter_configs.size());
@@ -1180,14 +1193,13 @@ ServerConfigSelector::CallConfig XdsServerConfigFetcher::ListenerWatcher::
1180
1193
  grpc_metadata_batch* metadata) {
1181
1194
  CallConfig call_config;
1182
1195
  if (metadata->get_pointer(HttpPathMetadata()) == nullptr) {
1183
- call_config.error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("No path found");
1196
+ call_config.error = GRPC_ERROR_CREATE("No path found");
1184
1197
  return call_config;
1185
1198
  }
1186
1199
  absl::string_view path =
1187
1200
  metadata->get_pointer(HttpPathMetadata())->as_string_view();
1188
1201
  if (metadata->get_pointer(HttpAuthorityMetadata()) == nullptr) {
1189
- call_config.error =
1190
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("No authority found");
1202
+ call_config.error = GRPC_ERROR_CREATE("No authority found");
1191
1203
  return call_config;
1192
1204
  }
1193
1205
  absl::string_view authority =
@@ -1195,11 +1207,10 @@ ServerConfigSelector::CallConfig XdsServerConfigFetcher::ListenerWatcher::
1195
1207
  auto vhost_index = XdsRouting::FindVirtualHostForDomain(
1196
1208
  VirtualHostListIterator(&virtual_hosts_), authority);
1197
1209
  if (!vhost_index.has_value()) {
1198
- call_config.error =
1199
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
1200
- "could not find VirtualHost for ", authority,
1201
- " in RouteConfiguration")),
1202
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
1210
+ call_config.error = grpc_error_set_int(
1211
+ GRPC_ERROR_CREATE(absl::StrCat("could not find VirtualHost for ",
1212
+ authority, " in RouteConfiguration")),
1213
+ StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE);
1203
1214
  return call_config;
1204
1215
  }
1205
1216
  auto& virtual_host = virtual_hosts_[vhost_index.value()];
@@ -1210,9 +1221,8 @@ ServerConfigSelector::CallConfig XdsServerConfigFetcher::ListenerWatcher::
1210
1221
  // Found the matching route
1211
1222
  if (route.unsupported_action) {
1212
1223
  call_config.error = grpc_error_set_int(
1213
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1214
- "Matching route has unsupported action"),
1215
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
1224
+ GRPC_ERROR_CREATE("Matching route has unsupported action"),
1225
+ StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE);
1216
1226
  return call_config;
1217
1227
  }
1218
1228
  if (route.method_config != nullptr) {
@@ -1222,9 +1232,9 @@ ServerConfigSelector::CallConfig XdsServerConfigFetcher::ListenerWatcher::
1222
1232
  }
1223
1233
  return call_config;
1224
1234
  }
1225
- call_config.error = grpc_error_set_int(
1226
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("No route matched"),
1227
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
1235
+ call_config.error = grpc_error_set_int(GRPC_ERROR_CREATE("No route matched"),
1236
+ StatusIntProperty::kRpcStatus,
1237
+ GRPC_STATUS_UNAVAILABLE);
1228
1238
  return call_config;
1229
1239
  }
1230
1240
 
@@ -1276,7 +1286,10 @@ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1276
1286
  if (!resource.ok()) {
1277
1287
  return resource.status();
1278
1288
  }
1279
- return XdsServerConfigSelector::Create(resource.value(), http_filters_);
1289
+ return XdsServerConfigSelector::Create(
1290
+ static_cast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
1291
+ .http_filter_registry(),
1292
+ resource.value(), http_filters_);
1280
1293
  }
1281
1294
 
1282
1295
  void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
@@ -1297,8 +1310,10 @@ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1297
1310
  // DynamicXdsServerConfigSelectorProvider while holding a lock, but if that
1298
1311
  // ever changes, we would want to invoke the update outside the critical
1299
1312
  // region with the use of a WorkSerializer.
1300
- watcher_->OnServerConfigSelectorUpdate(
1301
- XdsServerConfigSelector::Create(*resource_, http_filters_));
1313
+ watcher_->OnServerConfigSelectorUpdate(XdsServerConfigSelector::Create(
1314
+ static_cast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
1315
+ .http_filter_registry(),
1316
+ *resource_, http_filters_));
1302
1317
  }
1303
1318
 
1304
1319
  void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
@@ -51,7 +51,6 @@
51
51
  #include "src/core/lib/security/credentials/credentials.h"
52
52
  #include "src/core/lib/slice/slice.h"
53
53
  #include "src/core/lib/slice/slice_internal.h"
54
- #include "src/core/lib/slice/slice_refcount.h"
55
54
  #include "src/core/lib/surface/call.h"
56
55
  #include "src/core/lib/surface/channel.h"
57
56
  #include "src/core/lib/surface/init_internally.h"
@@ -138,7 +137,7 @@ GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
138
137
  grpc_metadata_array_destroy(&trailing_metadata_recv_);
139
138
  grpc_byte_buffer_destroy(send_message_payload_);
140
139
  grpc_byte_buffer_destroy(recv_message_payload_);
141
- grpc_slice_unref_internal(status_details_);
140
+ CSliceUnref(status_details_);
142
141
  GPR_ASSERT(call_ != nullptr);
143
142
  grpc_call_unref(call_);
144
143
  }
@@ -159,7 +158,7 @@ void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::SendMessage(
159
158
  // Create payload.
160
159
  grpc_slice slice = grpc_slice_from_cpp_string(std::move(payload));
161
160
  send_message_payload_ = grpc_raw_byte_buffer_create(&slice, 1);
162
- grpc_slice_unref_internal(slice);
161
+ CSliceUnref(slice);
163
162
  // Send the message.
164
163
  grpc_op op;
165
164
  memset(&op, 0, sizeof(op));
@@ -178,7 +177,7 @@ void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
178
177
  grpc_byte_buffer_destroy(self->send_message_payload_);
179
178
  self->send_message_payload_ = nullptr;
180
179
  // Invoke request handler.
181
- self->event_handler_->OnRequestSent(GRPC_ERROR_IS_NONE(error));
180
+ self->event_handler_->OnRequestSent(error.ok());
182
181
  // Drop the ref.
183
182
  self->Unref(DEBUG_LOCATION, "OnRequestSent");
184
183
  }
@@ -200,7 +199,7 @@ void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
200
199
  grpc_byte_buffer_destroy(self->recv_message_payload_);
201
200
  self->recv_message_payload_ = nullptr;
202
201
  self->event_handler_->OnRecvMessage(StringViewFromSlice(response_slice));
203
- grpc_slice_unref_internal(response_slice);
202
+ CSliceUnref(response_slice);
204
203
  // Keep reading.
205
204
  grpc_op op;
206
205
  memset(&op, 0, sizeof(op));
@@ -36,11 +36,14 @@
36
36
 
37
37
  #include "src/core/lib/gpr/string.h"
38
38
  #include "src/core/lib/gprpp/host_port.h"
39
+ #include "src/core/lib/gprpp/status_helper.h"
39
40
  #include "src/core/lib/iomgr/grpc_if_nametoindex.h"
40
41
  #include "src/core/lib/iomgr/port.h"
41
42
  #include "src/core/lib/iomgr/sockaddr.h"
42
43
  #include "src/core/lib/iomgr/socket_utils.h"
43
44
 
45
+ // IWYU pragma: no_include <arpa/inet.h>
46
+
44
47
  #ifdef GRPC_HAVE_UNIX_SOCKET
45
48
 
46
49
  bool grpc_parse_unix(const grpc_core::URI& uri,
@@ -52,9 +55,8 @@ bool grpc_parse_unix(const grpc_core::URI& uri,
52
55
  }
53
56
  grpc_error_handle error =
54
57
  grpc_core::UnixSockaddrPopulate(uri.path(), resolved_addr);
55
- if (!GRPC_ERROR_IS_NONE(error)) {
56
- gpr_log(GPR_ERROR, "%s", grpc_error_std_string(error).c_str());
57
- GRPC_ERROR_UNREF(error);
58
+ if (!error.ok()) {
59
+ gpr_log(GPR_ERROR, "%s", grpc_core::StatusToString(error).c_str());
58
60
  return false;
59
61
  }
60
62
  return true;
@@ -69,9 +71,8 @@ bool grpc_parse_unix_abstract(const grpc_core::URI& uri,
69
71
  }
70
72
  grpc_error_handle error =
71
73
  grpc_core::UnixAbstractSockaddrPopulate(uri.path(), resolved_addr);
72
- if (!GRPC_ERROR_IS_NONE(error)) {
73
- gpr_log(GPR_ERROR, "%s", grpc_error_std_string(error).c_str());
74
- GRPC_ERROR_UNREF(error);
74
+ if (!error.ok()) {
75
+ gpr_log(GPR_ERROR, "%s", grpc_core::StatusToString(error).c_str());
75
76
  return false;
76
77
  }
77
78
  return true;
@@ -86,14 +87,14 @@ grpc_error_handle UnixSockaddrPopulate(absl::string_view path,
86
87
  reinterpret_cast<struct sockaddr_un*>(resolved_addr->addr);
87
88
  const size_t maxlen = sizeof(un->sun_path) - 1;
88
89
  if (path.size() > maxlen) {
89
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
90
+ return GRPC_ERROR_CREATE(absl::StrCat(
90
91
  "Path name should not have more than ", maxlen, " characters"));
91
92
  }
92
93
  un->sun_family = AF_UNIX;
93
94
  path.copy(un->sun_path, path.size());
94
95
  un->sun_path[path.size()] = '\0';
95
96
  resolved_addr->len = static_cast<socklen_t>(sizeof(*un));
96
- return GRPC_ERROR_NONE;
97
+ return absl::OkStatus();
97
98
  }
98
99
 
99
100
  grpc_error_handle UnixAbstractSockaddrPopulate(
@@ -103,7 +104,7 @@ grpc_error_handle UnixAbstractSockaddrPopulate(
103
104
  reinterpret_cast<struct sockaddr_un*>(resolved_addr->addr);
104
105
  const size_t maxlen = sizeof(un->sun_path) - 1;
105
106
  if (path.size() > maxlen) {
106
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
107
+ return GRPC_ERROR_CREATE(absl::StrCat(
107
108
  "Path name should not have more than ", maxlen, " characters"));
108
109
  }
109
110
  un->sun_family = AF_UNIX;
@@ -111,7 +112,7 @@ grpc_error_handle UnixAbstractSockaddrPopulate(
111
112
  path.copy(un->sun_path + 1, path.size());
112
113
  resolved_addr->len =
113
114
  static_cast<socklen_t>(sizeof(un->sun_family) + path.size() + 1);
114
- return GRPC_ERROR_NONE;
115
+ return absl::OkStatus();
115
116
  }
116
117
 
117
118
  } // namespace grpc_core
@@ -34,6 +34,7 @@
34
34
  #include "absl/types/optional.h"
35
35
  #include "absl/types/variant.h"
36
36
 
37
+ #include <grpc/event_engine/event_engine.h>
37
38
  #include <grpc/impl/codegen/grpc_types.h>
38
39
 
39
40
  #include "src/core/lib/avl/avl.h"
@@ -45,6 +46,11 @@
45
46
  #include "src/core/lib/gprpp/time.h"
46
47
  #include "src/core/lib/surface/channel_stack_type.h"
47
48
 
49
+ // TODO(hork): When we're ready to allow setting via a channel arg from the
50
+ // application, replace this with a macro in
51
+ // include/grpc/impl/codegen/grpc_types.h.
52
+ #define GRPC_INTERNAL_ARG_EVENT_ENGINE "grpc.internal.event_engine"
53
+
48
54
  // Channel args are intentionally immutable, to avoid the need for locking.
49
55
 
50
56
  namespace grpc_core {
@@ -170,6 +176,9 @@ template <typename T>
170
176
  struct WrapInSharedPtr
171
177
  : std::integral_constant<
172
178
  bool, std::is_base_of<std::enable_shared_from_this<T>, T>::value> {};
179
+ template <>
180
+ struct WrapInSharedPtr<grpc_event_engine::experimental::EventEngine>
181
+ : std::true_type {};
173
182
  template <typename T, typename Ignored = void /* for SFINAE */>
174
183
  struct GetObjectImpl;
175
184
  // std::shared_ptr implementation
@@ -213,7 +222,13 @@ template <typename T>
213
222
  struct ChannelArgNameTraits<std::shared_ptr<T>> {
214
223
  static absl::string_view ChannelArgName() { return T::ChannelArgName(); }
215
224
  };
216
-
225
+ // Specialization for the EventEngine
226
+ template <>
227
+ struct ChannelArgNameTraits<grpc_event_engine::experimental::EventEngine> {
228
+ static absl::string_view ChannelArgName() {
229
+ return GRPC_INTERNAL_ARG_EVENT_ENGINE;
230
+ }
231
+ };
217
232
  class ChannelArgs {
218
233
  public:
219
234
  class Pointer {
@@ -22,12 +22,16 @@
22
22
 
23
23
  #include <stdint.h>
24
24
 
25
+ #include <memory>
25
26
  #include <utility>
26
27
 
27
28
  #include <grpc/support/log.h>
28
29
 
30
+ #include "src/core/lib/channel/channel_args.h"
29
31
  #include "src/core/lib/gpr/alloc.h"
30
32
 
33
+ using grpc_event_engine::experimental::EventEngine;
34
+
31
35
  grpc_core::TraceFlag grpc_trace_channel(false, "channel");
32
36
  grpc_core::TraceFlag grpc_trace_channel_stack(false, "channel_stack");
33
37
 
@@ -104,7 +108,7 @@ grpc_call_element* grpc_call_stack_element(grpc_call_stack* call_stack,
104
108
  grpc_error_handle grpc_channel_stack_init(
105
109
  int initial_refs, grpc_iomgr_cb_func destroy, void* destroy_arg,
106
110
  const grpc_channel_filter** filters, size_t filter_count,
107
- const grpc_channel_args* channel_args, const char* name,
111
+ const grpc_core::ChannelArgs& channel_args, const char* name,
108
112
  grpc_channel_stack* stack) {
109
113
  if (grpc_trace_channel_stack.enabled()) {
110
114
  gpr_log(GPR_INFO, "CHANNEL_STACK: init %s", name);
@@ -114,6 +118,7 @@ grpc_error_handle grpc_channel_stack_init(
114
118
  }
115
119
 
116
120
  stack->on_destroy.Init([]() {});
121
+ stack->event_engine.Init(channel_args.GetObjectRef<EventEngine>());
117
122
 
118
123
  size_t call_size =
119
124
  GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(grpc_call_stack)) +
@@ -132,21 +137,20 @@ grpc_error_handle grpc_channel_stack_init(
132
137
  sizeof(grpc_channel_element));
133
138
 
134
139
  /* init per-filter data */
135
- grpc_error_handle first_error = GRPC_ERROR_NONE;
140
+ grpc_error_handle first_error;
141
+ auto c_channel_args = channel_args.ToC();
136
142
  for (i = 0; i < filter_count; i++) {
137
143
  args.channel_stack = stack;
138
- args.channel_args = channel_args;
144
+ args.channel_args = c_channel_args.get();
139
145
  args.is_first = i == 0;
140
146
  args.is_last = i == (filter_count - 1);
141
147
  elems[i].filter = filters[i];
142
148
  elems[i].channel_data = user_data;
143
149
  grpc_error_handle error =
144
150
  elems[i].filter->init_channel_elem(&elems[i], &args);
145
- if (!GRPC_ERROR_IS_NONE(error)) {
146
- if (GRPC_ERROR_IS_NONE(first_error)) {
151
+ if (!error.ok()) {
152
+ if (first_error.ok()) {
147
153
  first_error = error;
148
- } else {
149
- GRPC_ERROR_UNREF(error);
150
154
  }
151
155
  }
152
156
  user_data +=
@@ -174,6 +178,7 @@ void grpc_channel_stack_destroy(grpc_channel_stack* stack) {
174
178
 
175
179
  (*stack->on_destroy)();
176
180
  stack->on_destroy.Destroy();
181
+ stack->event_engine.Destroy();
177
182
  }
178
183
 
179
184
  grpc_error_handle grpc_call_stack_init(
@@ -193,7 +198,7 @@ grpc_error_handle grpc_call_stack_init(
193
198
  GPR_ROUND_UP_TO_ALIGNMENT_SIZE(count * sizeof(grpc_call_element));
194
199
 
195
200
  /* init per-filter data */
196
- grpc_error_handle first_error = GRPC_ERROR_NONE;
201
+ grpc_error_handle first_error;
197
202
  for (size_t i = 0; i < count; i++) {
198
203
  call_elems[i].filter = channel_elems[i].filter;
199
204
  call_elems[i].channel_data = channel_elems[i].channel_data;
@@ -204,11 +209,9 @@ grpc_error_handle grpc_call_stack_init(
204
209
  for (size_t i = 0; i < count; i++) {
205
210
  grpc_error_handle error =
206
211
  call_elems[i].filter->init_call_elem(&call_elems[i], elem_args);
207
- if (!GRPC_ERROR_IS_NONE(error)) {
208
- if (GRPC_ERROR_IS_NONE(first_error)) {
212
+ if (!error.ok()) {
213
+ if (first_error.ok()) {
209
214
  first_error = error;
210
- } else {
211
- GRPC_ERROR_UNREF(error);
212
215
  }
213
216
  }
214
217
  }
@@ -300,12 +303,12 @@ grpc_core::NextPromiseFactory ServerNext(grpc_channel_element* elem) {
300
303
  } // namespace
301
304
 
302
305
  grpc_core::ArenaPromise<grpc_core::ServerMetadataHandle>
303
- grpc_channel_stack::MakeCallPromise(grpc_core::CallArgs call_args) {
304
- if (is_client) {
305
- return ClientNext(grpc_channel_stack_element(this, 0))(
306
- std::move(call_args));
307
- } else {
308
- return ServerNext(grpc_channel_stack_element(this, this->count - 1))(
309
- std::move(call_args));
310
- }
306
+ grpc_channel_stack::MakeClientCallPromise(grpc_core::CallArgs call_args) {
307
+ return ClientNext(grpc_channel_stack_element(this, 0))(std::move(call_args));
308
+ }
309
+
310
+ grpc_core::ArenaPromise<grpc_core::ServerMetadataHandle>
311
+ grpc_channel_stack::MakeServerCallPromise(grpc_core::CallArgs call_args) {
312
+ return ServerNext(grpc_channel_stack_element(this, this->count - 1))(
313
+ std::move(call_args));
311
314
  }