grpc 1.50.0-x86_64-linux → 1.51.0-x86_64-linux

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 (464) 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/2.6/grpc_c.so +0 -0
  428. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  429. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  430. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  431. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  432. data/src/ruby/lib/grpc/version.rb +1 -1
  433. data/src/ruby/spec/channel_spec.rb +0 -43
  434. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  435. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  436. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  437. data/third_party/zlib/compress.c +3 -3
  438. data/third_party/zlib/crc32.c +21 -12
  439. data/third_party/zlib/deflate.c +112 -106
  440. data/third_party/zlib/deflate.h +2 -2
  441. data/third_party/zlib/gzlib.c +1 -1
  442. data/third_party/zlib/gzread.c +3 -5
  443. data/third_party/zlib/gzwrite.c +1 -1
  444. data/third_party/zlib/infback.c +10 -7
  445. data/third_party/zlib/inflate.c +5 -2
  446. data/third_party/zlib/inftrees.c +2 -2
  447. data/third_party/zlib/inftrees.h +1 -1
  448. data/third_party/zlib/trees.c +61 -62
  449. data/third_party/zlib/uncompr.c +2 -2
  450. data/third_party/zlib/zconf.h +16 -3
  451. data/third_party/zlib/zlib.h +10 -10
  452. data/third_party/zlib/zutil.c +9 -7
  453. data/third_party/zlib/zutil.h +1 -0
  454. metadata +55 -18
  455. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
  456. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
  457. data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
  458. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  459. data/src/core/lib/gpr/murmur_hash.h +0 -29
  460. data/src/core/lib/gpr/tls.h +0 -156
  461. data/src/core/lib/promise/call_push_pull.h +0 -148
  462. data/src/core/lib/slice/slice_api.cc +0 -39
  463. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  464. data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -24,7 +24,6 @@
24
24
 
25
25
  #include <algorithm>
26
26
  #include <array>
27
- #include <cstdint>
28
27
  #include <map>
29
28
  #include <memory>
30
29
  #include <string>
@@ -32,10 +31,13 @@
32
31
 
33
32
  #include "absl/strings/string_view.h"
34
33
  #include "absl/types/optional.h"
34
+ #include "absl/types/variant.h"
35
35
  #include "envoy/config/listener/v3/listener.upbdefs.h"
36
36
  #include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h"
37
37
  #include "upb/def.h"
38
38
 
39
+ #include "src/core/ext/xds/xds_bootstrap_grpc.h"
40
+ #include "src/core/ext/xds/xds_client.h"
39
41
  #include "src/core/ext/xds/xds_common_types.h"
40
42
  #include "src/core/ext/xds/xds_http_filters.h"
41
43
  #include "src/core/ext/xds/xds_resource_type.h"
@@ -46,36 +48,14 @@
46
48
 
47
49
  namespace grpc_core {
48
50
 
49
- // TODO(roth): When we can use absl::variant<>, consider using that
50
- // here, to enforce the fact that only one of the two fields can be set.
51
- struct XdsListenerResource {
52
- struct DownstreamTlsContext {
53
- CommonTlsContext common_tls_context;
54
- bool require_client_certificate = false;
55
-
56
- bool operator==(const DownstreamTlsContext& other) const {
57
- return common_tls_context == other.common_tls_context &&
58
- require_client_certificate == other.require_client_certificate;
59
- }
60
-
61
- std::string ToString() const;
62
- bool Empty() const;
63
- };
64
-
65
- enum class ListenerType {
66
- kTcpListener = 0,
67
- kHttpApiListener,
68
- } type;
69
-
51
+ struct XdsListenerResource : public XdsResourceType::ResourceData {
70
52
  struct HttpConnectionManager {
71
- // The name to use in the RDS request.
72
- std::string route_config_name;
53
+ // The RDS resource name or inline RouteConfiguration.
54
+ absl::variant<std::string, XdsRouteConfigResource> route_config;
55
+
73
56
  // Storing the Http Connection Manager Common Http Protocol Option
74
57
  // max_stream_duration
75
58
  Duration http_max_stream_duration;
76
- // The RouteConfiguration to use for this listener.
77
- // Present only if it is inlined in the LDS response.
78
- absl::optional<XdsRouteConfigResource> rds_update;
79
59
 
80
60
  struct HttpFilter {
81
61
  std::string name;
@@ -90,21 +70,26 @@ struct XdsListenerResource {
90
70
  std::vector<HttpFilter> http_filters;
91
71
 
92
72
  bool operator==(const HttpConnectionManager& other) const {
93
- return route_config_name == other.route_config_name &&
73
+ return route_config == other.route_config &&
94
74
  http_max_stream_duration == other.http_max_stream_duration &&
95
- rds_update == other.rds_update &&
96
75
  http_filters == other.http_filters;
97
76
  }
98
77
 
99
78
  std::string ToString() const;
100
79
  };
101
80
 
102
- // Populated for type=kHttpApiListener.
103
- HttpConnectionManager http_connection_manager;
81
+ struct DownstreamTlsContext {
82
+ CommonTlsContext common_tls_context;
83
+ bool require_client_certificate = false;
84
+
85
+ bool operator==(const DownstreamTlsContext& other) const {
86
+ return common_tls_context == other.common_tls_context &&
87
+ require_client_certificate == other.require_client_certificate;
88
+ }
104
89
 
105
- // Populated for type=kTcpListener.
106
- // host:port listening_address set when type is kTcpListener
107
- std::string address;
90
+ std::string ToString() const;
91
+ bool Empty() const;
92
+ };
108
93
 
109
94
  struct FilterChainData {
110
95
  DownstreamTlsContext downstream_tls_context;
@@ -185,15 +170,26 @@ struct XdsListenerResource {
185
170
  }
186
171
 
187
172
  std::string ToString() const;
188
- } filter_chain_map;
173
+ };
174
+
175
+ struct TcpListener {
176
+ std::string address; // host:port listening address
177
+ FilterChainMap filter_chain_map;
178
+ absl::optional<FilterChainData> default_filter_chain;
179
+
180
+ bool operator==(const TcpListener& other) const {
181
+ return address == other.address &&
182
+ filter_chain_map == other.filter_chain_map &&
183
+ default_filter_chain == other.default_filter_chain;
184
+ }
189
185
 
190
- absl::optional<FilterChainData> default_filter_chain;
186
+ std::string ToString() const;
187
+ };
188
+
189
+ absl::variant<HttpConnectionManager, TcpListener> listener;
191
190
 
192
191
  bool operator==(const XdsListenerResource& other) const {
193
- return http_connection_manager == other.http_connection_manager &&
194
- address == other.address &&
195
- filter_chain_map == other.filter_chain_map &&
196
- default_filter_chain == other.default_filter_chain;
192
+ return listener == other.listener;
197
193
  }
198
194
 
199
195
  std::string ToString() const;
@@ -205,21 +201,21 @@ class XdsListenerResourceType
205
201
  absl::string_view type_url() const override {
206
202
  return "envoy.config.listener.v3.Listener";
207
203
  }
208
- absl::string_view v2_type_url() const override {
209
- return "envoy.api.v2.Listener";
210
- }
211
204
 
212
205
  DecodeResult Decode(const XdsResourceType::DecodeContext& context,
213
- absl::string_view serialized_resource,
214
- bool is_v2) const override;
206
+ absl::string_view serialized_resource) const override;
215
207
 
216
208
  bool AllResourcesRequiredInSotW() const override { return true; }
217
209
 
218
- void InitUpbSymtab(upb_DefPool* symtab) const override {
210
+ void InitUpbSymtab(XdsClient* xds_client,
211
+ upb_DefPool* symtab) const override {
219
212
  envoy_config_listener_v3_Listener_getmsgdef(symtab);
220
213
  envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_getmsgdef(
221
214
  symtab);
222
- XdsHttpFilterRegistry::PopulateSymtab(symtab);
215
+ const auto& http_filter_registry =
216
+ static_cast<const GrpcXdsBootstrap&>(xds_client->bootstrap())
217
+ .http_filter_registry();
218
+ http_filter_registry.PopulateSymtab(symtab);
223
219
  }
224
220
  };
225
221
 
@@ -69,13 +69,9 @@ class XdsResourceType {
69
69
  // Returns v3 resource type.
70
70
  virtual absl::string_view type_url() const = 0;
71
71
 
72
- // Returns v2 resource type.
73
- virtual absl::string_view v2_type_url() const = 0;
74
-
75
72
  // Decodes and validates a serialized resource proto.
76
73
  virtual DecodeResult Decode(const DecodeContext& context,
77
- absl::string_view serialized_resource,
78
- bool is_v2) const = 0;
74
+ absl::string_view serialized_resource) const = 0;
79
75
 
80
76
  // Returns true if r1 and r2 are equal.
81
77
  // Must be invoked only on resources returned by this object's Decode()
@@ -99,12 +95,8 @@ class XdsResourceType {
99
95
  // properly in logs.
100
96
  // Note: This won't actually work properly until upb adds support for
101
97
  // Any fields in textproto printing (internal b/178821188).
102
- virtual void InitUpbSymtab(upb_DefPool* symtab) const = 0;
103
-
104
- // Convenience method for checking if resource_type matches this type.
105
- // Checks against both type_url() and v2_type_url().
106
- // If is_v2 is non-null, it will be set to true if matching v2_type_url().
107
- bool IsType(absl::string_view resource_type, bool* is_v2) const;
98
+ virtual void InitUpbSymtab(XdsClient* xds_client,
99
+ upb_DefPool* symtab) const = 0;
108
100
  };
109
101
 
110
102
  } // namespace grpc_core
@@ -30,13 +30,11 @@ namespace grpc_core {
30
30
 
31
31
  // Base class for XdsResourceType implementations.
32
32
  // Handles all down-casting logic for a particular resource type struct.
33
+ // ResourceTypeStruct must inherit from XdsResourceType::ResourceData,
34
+ // must be copy-constructible, and must implement operator==().
33
35
  template <typename Subclass, typename ResourceTypeStruct>
34
36
  class XdsResourceTypeImpl : public XdsResourceType {
35
37
  public:
36
- struct ResourceDataSubclass : public ResourceData {
37
- ResourceTypeStruct resource;
38
- };
39
-
40
38
  // XdsClient watcher that handles down-casting.
41
39
  class WatcherInterface : public XdsClient::ResourceWatcherInterface {
42
40
  public:
@@ -44,11 +42,10 @@ class XdsResourceTypeImpl : public XdsResourceType {
44
42
 
45
43
  private:
46
44
  // Get result from XdsClient generic watcher interface, perform
47
- // down-casting, and invoke the caller's OnListenerChanged() method.
45
+ // down-casting, and invoke the caller's OnResourceChanged() method.
48
46
  void OnGenericResourceChanged(
49
47
  const XdsResourceType::ResourceData* resource) override {
50
- OnResourceChanged(
51
- static_cast<const ResourceDataSubclass*>(resource)->resource);
48
+ OnResourceChanged(*static_cast<const ResourceTypeStruct*>(resource));
52
49
  }
53
50
  };
54
51
 
@@ -73,16 +70,14 @@ class XdsResourceTypeImpl : public XdsResourceType {
73
70
 
74
71
  bool ResourcesEqual(const ResourceData* r1,
75
72
  const ResourceData* r2) const override {
76
- return static_cast<const ResourceDataSubclass*>(r1)->resource ==
77
- static_cast<const ResourceDataSubclass*>(r2)->resource;
73
+ return *static_cast<const ResourceTypeStruct*>(r1) ==
74
+ *static_cast<const ResourceTypeStruct*>(r2);
78
75
  }
79
76
 
80
77
  std::unique_ptr<ResourceData> CopyResource(
81
78
  const ResourceData* resource) const override {
82
- auto* resource_copy = new ResourceDataSubclass();
83
- resource_copy->resource =
84
- static_cast<const ResourceDataSubclass*>(resource)->resource;
85
- return std::unique_ptr<ResourceData>(resource_copy);
79
+ return std::make_unique<ResourceTypeStruct>(
80
+ *static_cast<const ResourceTypeStruct*>(resource));
86
81
  }
87
82
  };
88
83
 
@@ -28,7 +28,6 @@
28
28
  #include <utility>
29
29
  #include <vector>
30
30
 
31
- #include "absl/memory/memory.h"
32
31
  #include "absl/status/status.h"
33
32
  #include "absl/status/statusor.h"
34
33
  #include "absl/strings/str_cat.h"
@@ -58,12 +57,10 @@
58
57
  #include <grpc/support/log.h>
59
58
 
60
59
  #include "src/core/ext/xds/upb_utils.h"
61
- #include "src/core/ext/xds/xds_bootstrap.h"
62
60
  #include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
63
61
  #include "src/core/ext/xds/xds_common_types.h"
64
62
  #include "src/core/ext/xds/xds_http_filters.h"
65
63
  #include "src/core/ext/xds/xds_resource_type.h"
66
- #include "src/core/ext/xds/xds_resource_type_impl.h"
67
64
  #include "src/core/ext/xds/xds_routing.h"
68
65
  #include "src/core/lib/channel/status_util.h"
69
66
  #include "src/core/lib/debug/trace.h"
@@ -71,20 +68,11 @@
71
68
  #include "src/core/lib/gprpp/env.h"
72
69
  #include "src/core/lib/gprpp/match.h"
73
70
  #include "src/core/lib/gprpp/time.h"
74
- #include "src/core/lib/iomgr/error.h"
71
+ #include "src/core/lib/gprpp/validation_errors.h"
75
72
  #include "src/core/lib/matchers/matchers.h"
76
73
 
77
74
  namespace grpc_core {
78
75
 
79
- // TODO(yashykt): Remove once RBAC is no longer experimental
80
- bool XdsRbacEnabled() {
81
- auto value = GetEnv("GRPC_XDS_EXPERIMENTAL_RBAC");
82
- if (!value.has_value()) return false;
83
- bool parsed_value;
84
- bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
85
- return parse_succeeded && parsed_value;
86
- }
87
-
88
76
  // TODO(donnadionne): Remove once RLS is no longer experimental
89
77
  bool XdsRlsEnabled() {
90
78
  auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_RLS_LB");
@@ -144,7 +132,7 @@ XdsRouteConfigResource::Route::RouteAction::HashPolicy::HashPolicy(
144
132
  regex_substitution(other.regex_substitution) {
145
133
  if (other.regex != nullptr) {
146
134
  regex =
147
- absl::make_unique<RE2>(other.regex->pattern(), other.regex->options());
135
+ std::make_unique<RE2>(other.regex->pattern(), other.regex->options());
148
136
  }
149
137
  }
150
138
 
@@ -155,7 +143,7 @@ XdsRouteConfigResource::Route::RouteAction::HashPolicy::operator=(
155
143
  header_name = other.header_name;
156
144
  if (other.regex != nullptr) {
157
145
  regex =
158
- absl::make_unique<RE2>(other.regex->pattern(), other.regex->options());
146
+ std::make_unique<RE2>(other.regex->pattern(), other.regex->options());
159
147
  }
160
148
  regex_substitution = other.regex_substitution;
161
149
  return *this;
@@ -243,6 +231,7 @@ XdsRouteConfigResource::Route::RouteAction::ClusterWeight::ToString() const {
243
231
 
244
232
  std::string XdsRouteConfigResource::Route::RouteAction::ToString() const {
245
233
  std::vector<std::string> contents;
234
+ contents.reserve(hash_policies.size());
246
235
  for (const HashPolicy& hash_policy : hash_policies) {
247
236
  contents.push_back(absl::StrCat("hash_policy=", hash_policy.ToString()));
248
237
  }
@@ -345,45 +334,56 @@ ClusterSpecifierPluginParse(
345
334
  const envoy_config_route_v3_RouteConfiguration* route_config) {
346
335
  XdsRouteConfigResource::ClusterSpecifierPluginMap
347
336
  cluster_specifier_plugin_map;
337
+ const auto& cluster_specifier_plugin_registry =
338
+ static_cast<const GrpcXdsBootstrap&>(context.client->bootstrap())
339
+ .cluster_specifier_plugin_registry();
348
340
  size_t num_cluster_specifier_plugins;
349
341
  const envoy_config_route_v3_ClusterSpecifierPlugin* const*
350
342
  cluster_specifier_plugin =
351
343
  envoy_config_route_v3_RouteConfiguration_cluster_specifier_plugins(
352
344
  route_config, &num_cluster_specifier_plugins);
353
345
  for (size_t i = 0; i < num_cluster_specifier_plugins; ++i) {
354
- const envoy_config_core_v3_TypedExtensionConfig* extension =
346
+ const envoy_config_core_v3_TypedExtensionConfig* typed_extension_config =
355
347
  envoy_config_route_v3_ClusterSpecifierPlugin_extension(
356
348
  cluster_specifier_plugin[i]);
357
349
  std::string name = UpbStringToStdString(
358
- envoy_config_core_v3_TypedExtensionConfig_name(extension));
350
+ envoy_config_core_v3_TypedExtensionConfig_name(typed_extension_config));
359
351
  if (cluster_specifier_plugin_map.find(name) !=
360
352
  cluster_specifier_plugin_map.end()) {
361
353
  return absl::InvalidArgumentError(absl::StrCat(
362
354
  "Duplicated definition of cluster_specifier_plugin ", name));
363
355
  }
364
356
  const google_protobuf_Any* any =
365
- envoy_config_core_v3_TypedExtensionConfig_typed_config(extension);
357
+ envoy_config_core_v3_TypedExtensionConfig_typed_config(
358
+ typed_extension_config);
366
359
  if (any == nullptr) {
367
360
  return absl::InvalidArgumentError(
368
361
  "Could not obtrain TypedExtensionConfig for plugin config.");
369
362
  }
370
- auto plugin_type = ExtractExtensionTypeName(context, any);
371
- if (!plugin_type.ok()) return plugin_type.status();
363
+ ValidationErrors validation_errors;
364
+ ValidationErrors::ScopedField field(
365
+ &validation_errors, absl::StrCat(".cluster_specifier_plugins[", i,
366
+ "].extension.typed_config"));
367
+ auto extension = ExtractXdsExtension(context, any, &validation_errors);
368
+ if (!validation_errors.ok()) {
369
+ return validation_errors.status("could not determine extension type");
370
+ }
371
+ GPR_ASSERT(extension.has_value());
372
372
  bool is_optional = envoy_config_route_v3_ClusterSpecifierPlugin_is_optional(
373
373
  cluster_specifier_plugin[i]);
374
374
  const XdsClusterSpecifierPluginImpl* cluster_specifier_plugin_impl =
375
- XdsClusterSpecifierPluginRegistry::GetPluginForType(plugin_type->type);
375
+ cluster_specifier_plugin_registry.GetPluginForType(extension->type);
376
376
  std::string lb_policy_config;
377
377
  if (cluster_specifier_plugin_impl == nullptr) {
378
378
  if (!is_optional) {
379
379
  return absl::InvalidArgumentError(absl::StrCat(
380
- "Unknown ClusterSpecifierPlugin type ", plugin_type->type));
380
+ "Unknown ClusterSpecifierPlugin type ", extension->type));
381
381
  }
382
382
  // Optional plugin, leave lb_policy_config empty.
383
383
  } else {
384
384
  auto config =
385
385
  cluster_specifier_plugin_impl->GenerateLoadBalancingPolicyConfig(
386
- google_protobuf_Any_value(any), context.arena, context.symtab);
386
+ std::move(*extension), context.arena, context.symtab);
387
387
  if (!config.ok()) return config.status();
388
388
  lb_policy_config = std::move(*config);
389
389
  }
@@ -581,7 +581,7 @@ absl::Status RouteRuntimeFractionParse(
581
581
  route->matchers.fraction_per_million = numerator;
582
582
  }
583
583
  }
584
- return GRPC_ERROR_NONE;
584
+ return absl::OkStatus();
585
585
  }
586
586
 
587
587
  template <typename ParentType, typename EntryType>
@@ -627,23 +627,31 @@ ParseTypedPerFilterConfig(
627
627
  absl::StrCat("no filter config specified for filter name ", key));
628
628
  }
629
629
  }
630
- auto type = ExtractExtensionTypeName(context, any);
631
- if (!type.ok()) return type.status();
630
+ ValidationErrors errors;
631
+ ValidationErrors::ScopedField field(
632
+ &errors, absl::StrCat(".typed_per_filter_config[", key, "]"));
633
+ auto extension = ExtractXdsExtension(context, any, &errors);
634
+ if (!errors.ok()) {
635
+ return errors.status("could not determine extension type");
636
+ }
637
+ GPR_ASSERT(extension.has_value());
638
+ const auto& http_filter_registry =
639
+ static_cast<const GrpcXdsBootstrap&>(context.client->bootstrap())
640
+ .http_filter_registry();
632
641
  const XdsHttpFilterImpl* filter_impl =
633
- XdsHttpFilterRegistry::GetFilterForType(type->type);
642
+ http_filter_registry.GetFilterForType(extension->type);
634
643
  if (filter_impl == nullptr) {
635
644
  if (is_optional) continue;
636
- return absl::InvalidArgumentError(
637
- absl::StrCat("no filter registered for config type ", type->type));
645
+ return absl::InvalidArgumentError(absl::StrCat(
646
+ "no filter registered for config type ", extension->type));
638
647
  }
639
- absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
640
- filter_impl->GenerateFilterConfigOverride(
641
- google_protobuf_Any_value(any), context.arena);
642
- if (!filter_config.ok()) {
643
- return absl::InvalidArgumentError(
644
- absl::StrCat("filter config for type ", type->type,
645
- " failed to parse: ", filter_config.status().message()));
648
+ absl::optional<XdsHttpFilterImpl::FilterConfig> filter_config =
649
+ filter_impl->GenerateFilterConfigOverride(std::move(*extension),
650
+ context.arena, &errors);
651
+ if (!errors.ok()) {
652
+ return errors.status("errors validation extension");
646
653
  }
654
+ GPR_ASSERT(filter_config.has_value());
647
655
  typed_per_filter_config[std::string(key)] = std::move(*filter_config);
648
656
  }
649
657
  return typed_per_filter_config;
@@ -698,14 +706,23 @@ absl::Status RetryPolicyParse(
698
706
  errors.emplace_back(
699
707
  "RouteAction RetryPolicy RetryBackoff missing base interval.");
700
708
  } else {
709
+ ValidationErrors validation_errors;
701
710
  retry_to_return.retry_back_off.base_interval =
702
- ParseDuration(base_interval);
711
+ ParseDuration(base_interval, &validation_errors);
712
+ if (!validation_errors.ok()) {
713
+ errors.emplace_back(
714
+ validation_errors.status("base_interval").message());
715
+ }
703
716
  }
704
717
  const google_protobuf_Duration* max_interval =
705
718
  envoy_config_route_v3_RetryPolicy_RetryBackOff_max_interval(backoff);
706
719
  Duration max;
707
720
  if (max_interval != nullptr) {
708
- max = ParseDuration(max_interval);
721
+ ValidationErrors validation_errors;
722
+ max = ParseDuration(max_interval, &validation_errors);
723
+ if (!validation_errors.ok()) {
724
+ errors.emplace_back(validation_errors.status("max_interval").message());
725
+ }
709
726
  } else {
710
727
  // if max interval is not set, it is 10x the base.
711
728
  max = 10 * retry_to_return.retry_back_off.base_interval;
@@ -783,19 +800,17 @@ absl::StatusOr<XdsRouteConfigResource::Route::RouteAction> RouteActionParse(
783
800
  cluster.weight = google_protobuf_UInt32Value_value(weight);
784
801
  if (cluster.weight == 0) continue;
785
802
  sum_of_weights += cluster.weight;
786
- if (context.server.ShouldUseV3()) {
787
- auto typed_per_filter_config = ParseTypedPerFilterConfig<
788
- envoy_config_route_v3_WeightedCluster_ClusterWeight,
789
- envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry>(
790
- context, cluster_weight,
791
- envoy_config_route_v3_WeightedCluster_ClusterWeight_typed_per_filter_config_next,
792
- envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_key,
793
- envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_value);
794
- if (!typed_per_filter_config.ok()) {
795
- return typed_per_filter_config.status();
796
- }
797
- cluster.typed_per_filter_config = std::move(*typed_per_filter_config);
803
+ auto typed_per_filter_config = ParseTypedPerFilterConfig<
804
+ envoy_config_route_v3_WeightedCluster_ClusterWeight,
805
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry>(
806
+ context, cluster_weight,
807
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_typed_per_filter_config_next,
808
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_key,
809
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_value);
810
+ if (!typed_per_filter_config.ok()) {
811
+ return typed_per_filter_config.status();
798
812
  }
813
+ cluster.typed_per_filter_config = std::move(*typed_per_filter_config);
799
814
  action_weighted_clusters.emplace_back(std::move(cluster));
800
815
  }
801
816
  if (total_weight != sum_of_weights) {
@@ -847,7 +862,11 @@ absl::StatusOr<XdsRouteConfigResource::Route::RouteAction> RouteActionParse(
847
862
  max_stream_duration);
848
863
  }
849
864
  if (duration != nullptr) {
850
- route.max_stream_duration = ParseDuration(duration);
865
+ ValidationErrors validation_errors;
866
+ route.max_stream_duration = ParseDuration(duration, &validation_errors);
867
+ if (!validation_errors.ok()) {
868
+ return validation_errors.status("max_stream_duration");
869
+ }
851
870
  }
852
871
  }
853
872
  }
@@ -888,7 +907,7 @@ absl::StatusOr<XdsRouteConfigResource::Route::RouteAction> RouteActionParse(
888
907
  continue;
889
908
  }
890
909
  RE2::Options options;
891
- policy.regex = absl::make_unique<RE2>(
910
+ policy.regex = std::make_unique<RE2>(
892
911
  UpbStringToStdString(
893
912
  envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher)),
894
913
  options);
@@ -980,19 +999,17 @@ absl::StatusOr<XdsRouteConfigResource> XdsRouteConfigResource::Parse(
980
999
  return absl::InvalidArgumentError("VirtualHost has no domains");
981
1000
  }
982
1001
  // Parse typed_per_filter_config.
983
- if (context.server.ShouldUseV3()) {
984
- auto typed_per_filter_config = ParseTypedPerFilterConfig<
985
- envoy_config_route_v3_VirtualHost,
986
- envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry>(
987
- context, virtual_hosts[i],
988
- envoy_config_route_v3_VirtualHost_typed_per_filter_config_next,
989
- envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_key,
990
- envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_value);
991
- if (!typed_per_filter_config.ok()) {
992
- return typed_per_filter_config.status();
993
- }
994
- vhost.typed_per_filter_config = std::move(*typed_per_filter_config);
1002
+ auto typed_per_filter_config = ParseTypedPerFilterConfig<
1003
+ envoy_config_route_v3_VirtualHost,
1004
+ envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry>(
1005
+ context, virtual_hosts[i],
1006
+ envoy_config_route_v3_VirtualHost_typed_per_filter_config_next,
1007
+ envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_key,
1008
+ envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_value);
1009
+ if (!typed_per_filter_config.ok()) {
1010
+ return typed_per_filter_config.status();
995
1011
  }
1012
+ vhost.typed_per_filter_config = std::move(*typed_per_filter_config);
996
1013
  // Parse retry policy.
997
1014
  absl::optional<XdsRouteConfigResource::RetryPolicy>
998
1015
  virtual_host_retry_policy;
@@ -1063,19 +1080,17 @@ absl::StatusOr<XdsRouteConfigResource> XdsRouteConfigResource::Parse(
1063
1080
  route.action
1064
1081
  .emplace<XdsRouteConfigResource::Route::NonForwardingAction>();
1065
1082
  }
1066
- if (context.server.ShouldUseV3()) {
1067
- auto typed_per_filter_config = ParseTypedPerFilterConfig<
1068
- envoy_config_route_v3_Route,
1069
- envoy_config_route_v3_Route_TypedPerFilterConfigEntry>(
1070
- context, routes[j],
1071
- envoy_config_route_v3_Route_typed_per_filter_config_next,
1072
- envoy_config_route_v3_Route_TypedPerFilterConfigEntry_key,
1073
- envoy_config_route_v3_Route_TypedPerFilterConfigEntry_value);
1074
- if (!typed_per_filter_config.ok()) {
1075
- return typed_per_filter_config.status();
1076
- }
1077
- route.typed_per_filter_config = std::move(*typed_per_filter_config);
1083
+ auto typed_per_filter_config = ParseTypedPerFilterConfig<
1084
+ envoy_config_route_v3_Route,
1085
+ envoy_config_route_v3_Route_TypedPerFilterConfigEntry>(
1086
+ context, routes[j],
1087
+ envoy_config_route_v3_Route_typed_per_filter_config_next,
1088
+ envoy_config_route_v3_Route_TypedPerFilterConfigEntry_key,
1089
+ envoy_config_route_v3_Route_TypedPerFilterConfigEntry_value);
1090
+ if (!typed_per_filter_config.ok()) {
1091
+ return typed_per_filter_config.status();
1078
1092
  }
1093
+ route.typed_per_filter_config = std::move(*typed_per_filter_config);
1079
1094
  vhost.routes.emplace_back(std::move(route));
1080
1095
  }
1081
1096
  if (vhost.routes.empty()) {
@@ -1114,7 +1129,7 @@ void MaybeLogRouteConfiguration(
1114
1129
 
1115
1130
  XdsResourceType::DecodeResult XdsRouteConfigResourceType::Decode(
1116
1131
  const XdsResourceType::DecodeContext& context,
1117
- absl::string_view serialized_resource, bool /*is_v2*/) const {
1132
+ absl::string_view serialized_resource) const {
1118
1133
  DecodeResult result;
1119
1134
  // Parse serialized proto.
1120
1135
  auto* resource = envoy_config_route_v3_RouteConfiguration_parse(
@@ -1142,9 +1157,8 @@ XdsResourceType::DecodeResult XdsRouteConfigResourceType::Decode(
1142
1157
  context.client, result.name->c_str(),
1143
1158
  rds_update->ToString().c_str());
1144
1159
  }
1145
- auto resource = absl::make_unique<ResourceDataSubclass>();
1146
- resource->resource = std::move(*rds_update);
1147
- result.resource = std::move(resource);
1160
+ result.resource =
1161
+ std::make_unique<XdsRouteConfigResource>(std::move(*rds_update));
1148
1162
  }
1149
1163
  return result;
1150
1164
  }
@@ -36,6 +36,8 @@
36
36
  #include "re2/re2.h"
37
37
  #include "upb/def.h"
38
38
 
39
+ #include "src/core/ext/xds/xds_bootstrap_grpc.h"
40
+ #include "src/core/ext/xds/xds_client.h"
39
41
  #include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
40
42
  #include "src/core/ext/xds/xds_http_filters.h"
41
43
  #include "src/core/ext/xds/xds_resource_type.h"
@@ -46,9 +48,7 @@
46
48
 
47
49
  namespace grpc_core {
48
50
 
49
- bool XdsRbacEnabled();
50
-
51
- struct XdsRouteConfigResource {
51
+ struct XdsRouteConfigResource : public XdsResourceType::ResourceData {
52
52
  using TypedPerFilterConfig =
53
53
  std::map<std::string, XdsHttpFilterImpl::FilterConfig>;
54
54
 
@@ -222,17 +222,17 @@ class XdsRouteConfigResourceType
222
222
  absl::string_view type_url() const override {
223
223
  return "envoy.config.route.v3.RouteConfiguration";
224
224
  }
225
- absl::string_view v2_type_url() const override {
226
- return "envoy.api.v2.RouteConfiguration";
227
- }
228
225
 
229
226
  DecodeResult Decode(const XdsResourceType::DecodeContext& context,
230
- absl::string_view serialized_resource,
231
- bool /*is_v2*/) const override;
227
+ absl::string_view serialized_resource) const override;
232
228
 
233
- void InitUpbSymtab(upb_DefPool* symtab) const override {
229
+ void InitUpbSymtab(XdsClient* xds_client,
230
+ upb_DefPool* symtab) const override {
234
231
  envoy_config_route_v3_RouteConfiguration_getmsgdef(symtab);
235
- XdsClusterSpecifierPluginRegistry::PopulateSymtab(symtab);
232
+ const auto& cluster_specifier_plugin_registry =
233
+ static_cast<const GrpcXdsBootstrap&>(xds_client->bootstrap())
234
+ .cluster_specifier_plugin_registry();
235
+ cluster_specifier_plugin_registry.PopulateSymtab(symtab);
236
236
  }
237
237
  };
238
238
 
@@ -220,6 +220,7 @@ const XdsHttpFilterImpl::FilterConfig* FindFilterConfigOverride(
220
220
 
221
221
  absl::StatusOr<XdsRouting::GeneratePerHttpFilterConfigsResult>
222
222
  XdsRouting::GeneratePerHTTPFilterConfigs(
223
+ const XdsHttpFilterRegistry& http_filter_registry,
223
224
  const std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>&
224
225
  http_filters,
225
226
  const XdsRouteConfigResource::VirtualHost& vhost,
@@ -233,7 +234,7 @@ XdsRouting::GeneratePerHTTPFilterConfigs(
233
234
  // Find filter. This is guaranteed to succeed, because it's checked
234
235
  // at config validation time in the XdsApi code.
235
236
  const XdsHttpFilterImpl* filter_impl =
236
- XdsHttpFilterRegistry::GetFilterForType(
237
+ http_filter_registry.GetFilterForType(
237
238
  http_filter.config.config_proto_type_name);
238
239
  GPR_ASSERT(filter_impl != nullptr);
239
240
  // If there is not actually any C-core filter associated with this
@@ -31,6 +31,7 @@
31
31
  #include "absl/strings/string_view.h"
32
32
  #include "absl/types/optional.h"
33
33
 
34
+ #include "src/core/ext/xds/xds_http_filters.h"
34
35
  #include "src/core/ext/xds/xds_listener.h"
35
36
  #include "src/core/ext/xds/xds_route_config.h"
36
37
  #include "src/core/lib/channel/channel_args.h"
@@ -90,6 +91,7 @@ class XdsRouting {
90
91
  // Generates a map of per_filter_configs. \a args is consumed.
91
92
  static absl::StatusOr<GeneratePerHttpFilterConfigsResult>
92
93
  GeneratePerHTTPFilterConfigs(
94
+ const XdsHttpFilterRegistry& http_filter_registry,
93
95
  const std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>&
94
96
  http_filters,
95
97
  const XdsRouteConfigResource::VirtualHost& vhost,