grpc 1.47.0 → 1.53.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 (1777) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +386 -162
  3. data/include/grpc/byte_buffer.h +76 -1
  4. data/include/grpc/byte_buffer_reader.h +19 -1
  5. data/include/grpc/compression.h +2 -2
  6. data/include/grpc/event_engine/endpoint_config.h +11 -5
  7. data/include/grpc/event_engine/event_engine.h +87 -32
  8. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  9. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  10. data/include/grpc/event_engine/memory_allocator.h +1 -1
  11. data/include/grpc/event_engine/slice.h +24 -4
  12. data/include/grpc/event_engine/slice_buffer.h +52 -5
  13. data/include/grpc/fork.h +25 -1
  14. data/include/grpc/grpc.h +4 -14
  15. data/include/grpc/grpc_posix.h +1 -1
  16. data/include/grpc/impl/codegen/atm.h +3 -71
  17. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
  18. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
  19. data/include/grpc/impl/codegen/atm_windows.h +3 -108
  20. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  21. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  22. data/include/grpc/impl/codegen/compression_types.h +5 -83
  23. data/include/grpc/impl/codegen/connectivity_state.h +5 -21
  24. data/include/grpc/impl/codegen/fork.h +4 -25
  25. data/include/grpc/impl/codegen/gpr_types.h +4 -35
  26. data/include/grpc/impl/codegen/grpc_types.h +5 -791
  27. data/include/grpc/impl/codegen/log.h +3 -86
  28. data/include/grpc/impl/codegen/port_platform.h +3 -763
  29. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  30. data/include/grpc/impl/codegen/slice.h +3 -106
  31. data/include/grpc/impl/codegen/status.h +4 -131
  32. data/include/grpc/impl/codegen/sync.h +3 -42
  33. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  34. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  35. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  36. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  37. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  38. data/include/grpc/impl/compression_types.h +109 -0
  39. data/include/grpc/impl/connectivity_state.h +47 -0
  40. data/include/grpc/impl/grpc_types.h +827 -0
  41. data/include/grpc/impl/propagation_bits.h +54 -0
  42. data/include/grpc/impl/slice_type.h +112 -0
  43. data/include/grpc/load_reporting.h +1 -1
  44. data/include/grpc/module.modulemap +5 -1
  45. data/include/grpc/slice.h +1 -1
  46. data/include/grpc/status.h +131 -1
  47. data/include/grpc/support/atm.h +70 -1
  48. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  49. data/include/grpc/support/atm_gcc_sync.h +58 -1
  50. data/include/grpc/support/atm_windows.h +105 -1
  51. data/include/grpc/support/log.h +87 -1
  52. data/include/grpc/support/log_windows.h +1 -1
  53. data/include/grpc/support/port_platform.h +767 -1
  54. data/include/grpc/support/string_util.h +1 -1
  55. data/include/grpc/support/sync.h +35 -2
  56. data/include/grpc/support/sync_abseil.h +11 -1
  57. data/include/grpc/support/sync_custom.h +13 -1
  58. data/include/grpc/support/sync_generic.h +24 -1
  59. data/include/grpc/support/sync_posix.h +27 -1
  60. data/include/grpc/support/sync_windows.h +15 -1
  61. data/include/grpc/support/time.h +31 -6
  62. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
  63. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
  64. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
  65. data/src/core/ext/filters/census/grpc_context.cc +19 -17
  66. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +49 -31
  67. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +22 -5
  68. data/src/core/ext/filters/channel_idle/idle_filter_state.h +6 -4
  69. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  70. data/src/core/ext/filters/client_channel/backend_metric.h +3 -3
  71. data/src/core/ext/filters/client_channel/backup_poller.cc +30 -30
  72. data/src/core/ext/filters/client_channel/backup_poller.h +24 -24
  73. data/src/core/ext/filters/client_channel/channel_connectivity.cc +52 -29
  74. data/src/core/ext/filters/client_channel/client_channel.cc +348 -441
  75. data/src/core/ext/filters/client_channel/client_channel.h +46 -24
  76. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +17 -19
  77. data/src/core/ext/filters/client_channel/client_channel_channelz.h +22 -22
  78. data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -46
  79. data/src/core/ext/filters/client_channel/client_channel_factory.h +5 -13
  80. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -34
  81. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  82. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -26
  83. data/src/core/ext/filters/client_channel/config_selector.h +27 -23
  84. data/src/core/ext/filters/client_channel/connector.h +13 -10
  85. data/src/core/ext/filters/client_channel/dynamic_filters.cc +29 -54
  86. data/src/core/ext/filters/client_channel/dynamic_filters.h +10 -11
  87. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +21 -21
  88. data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -5
  89. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  90. data/src/core/ext/filters/client_channel/http_proxy.cc +90 -110
  91. data/src/core/ext/filters/client_channel/http_proxy.h +36 -32
  92. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
  93. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -5
  94. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -3
  95. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +21 -21
  96. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +27 -18
  97. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +14 -14
  98. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +66 -132
  99. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +41 -24
  100. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +361 -366
  101. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
  102. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -4
  103. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
  104. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +21 -22
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +19 -19
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +22 -24
  108. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +28 -98
  109. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +5 -5
  110. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  111. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +418 -327
  112. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +46 -6
  113. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +140 -154
  114. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +304 -387
  115. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +388 -363
  116. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +19 -11
  117. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +578 -628
  118. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +154 -138
  119. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +134 -115
  120. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
  121. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  122. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
  123. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +202 -224
  124. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +124 -139
  125. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  126. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  127. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  128. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +154 -258
  129. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +183 -214
  130. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +361 -411
  131. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +819 -0
  132. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
  133. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +369 -0
  134. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +21 -21
  135. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +15 -18
  136. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +452 -175
  137. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +42 -43
  138. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +22 -23
  139. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +88 -83
  140. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +276 -202
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +69 -57
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
  144. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +20 -21
  145. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +32 -23
  146. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +9 -21
  147. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +15 -4
  148. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +83 -57
  149. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +123 -67
  150. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +25 -17
  151. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +9 -19
  152. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +293 -286
  153. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
  154. data/src/core/ext/filters/client_channel/retry_filter.cc +135 -172
  155. data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
  156. data/src/core/ext/filters/client_channel/retry_service_config.cc +193 -224
  157. data/src/core/ext/filters/client_channel/retry_service_config.h +22 -28
  158. data/src/core/ext/filters/client_channel/retry_throttle.cc +27 -29
  159. data/src/core/ext/filters/client_channel/retry_throttle.h +29 -28
  160. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +13 -13
  161. data/src/core/ext/filters/client_channel/subchannel.cc +275 -323
  162. data/src/core/ext/filters/client_channel/subchannel.h +45 -75
  163. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +4 -4
  164. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  165. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +37 -46
  166. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +23 -111
  167. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +8 -12
  168. data/src/core/ext/filters/deadline/deadline_filter.cc +90 -76
  169. data/src/core/ext/filters/deadline/deadline_filter.h +14 -12
  170. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +43 -18
  171. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +20 -11
  172. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  173. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +34 -13
  174. data/src/core/ext/filters/http/client/http_client_filter.cc +61 -48
  175. data/src/core/ext/filters/http/client/http_client_filter.h +29 -22
  176. data/src/core/ext/filters/http/client_authority_filter.cc +28 -28
  177. data/src/core/ext/filters/http/client_authority_filter.h +27 -24
  178. data/src/core/ext/filters/http/http_filters_plugin.cc +43 -51
  179. data/src/core/ext/filters/http/message_compress/compression_filter.cc +307 -0
  180. data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
  181. data/src/core/ext/filters/http/server/http_server_filter.cc +63 -56
  182. data/src/core/ext/filters/http/server/http_server_filter.h +28 -23
  183. data/src/core/ext/filters/message_size/message_size_filter.cc +109 -123
  184. data/src/core/ext/filters/message_size/message_size_filter.h +34 -17
  185. data/src/core/ext/filters/rbac/rbac_filter.cc +28 -16
  186. data/src/core/ext/filters/rbac/rbac_filter.h +11 -3
  187. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +736 -523
  188. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +18 -7
  189. data/src/core/ext/filters/server_config_selector/server_config_selector.h +20 -8
  190. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +28 -12
  191. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +4 -3
  192. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +219 -0
  193. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
  194. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  195. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  196. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  197. data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
  198. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +109 -131
  199. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +30 -24
  200. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +167 -203
  201. data/src/core/ext/transport/chttp2/server/chttp2_server.h +25 -27
  202. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +22 -22
  203. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +33 -33
  204. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +30 -30
  205. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +29 -29
  206. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +714 -1060
  207. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +24 -24
  208. data/src/core/ext/transport/chttp2/transport/context_list.cc +19 -19
  209. data/src/core/ext/transport/chttp2/transport/context_list.h +28 -28
  210. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
  211. data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
  212. data/src/core/ext/transport/chttp2/transport/flow_control.cc +347 -301
  213. data/src/core/ext/transport/chttp2/transport/flow_control.h +245 -326
  214. data/src/core/ext/transport/chttp2/transport/frame.h +21 -21
  215. data/src/core/ext/transport/chttp2/transport/frame_data.cc +84 -239
  216. data/src/core/ext/transport/chttp2/transport/frame_data.h +36 -62
  217. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +38 -36
  218. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +20 -20
  219. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +27 -26
  220. data/src/core/ext/transport/chttp2/transport/frame_ping.h +22 -22
  221. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +30 -25
  222. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +21 -21
  223. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +35 -77
  224. data/src/core/ext/transport/chttp2/transport/frame_settings.h +22 -22
  225. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +31 -33
  226. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +21 -21
  227. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
  228. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +159 -208
  229. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +46 -61
  230. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -2
  231. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +11 -5
  232. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +96 -542
  233. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +23 -23
  234. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +28 -38
  235. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +32 -27
  236. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  237. data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -37
  238. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  239. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  240. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  241. data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
  242. data/src/core/ext/transport/chttp2/transport/internal.h +225 -296
  243. data/src/core/ext/transport/chttp2/transport/parsing.cc +333 -129
  244. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -23
  245. data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
  246. data/src/core/ext/transport/chttp2/transport/stream_map.h +33 -33
  247. data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
  248. data/src/core/ext/transport/chttp2/transport/varint.h +37 -34
  249. data/src/core/ext/transport/chttp2/transport/writing.cc +85 -94
  250. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -18
  251. data/src/core/ext/transport/inproc/inproc_transport.cc +223 -273
  252. data/src/core/ext/transport/inproc/inproc_transport.h +23 -21
  253. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  254. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  255. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +6 -5
  256. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +33 -8
  257. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  258. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  259. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +388 -0
  260. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1953 -0
  261. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  262. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  263. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  264. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  265. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  266. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  267. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  269. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  270. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  271. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  272. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  273. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  274. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  275. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  276. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  277. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +25 -19
  278. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +168 -34
  279. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  280. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  281. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -43
  282. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +195 -116
  283. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  284. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  285. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  286. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  287. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  288. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  289. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +35 -12
  290. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +179 -14
  291. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  292. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  293. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  294. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  295. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  296. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  297. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  298. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  299. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  300. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  301. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  302. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +23 -20
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +137 -69
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +23 -21
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +132 -44
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +17 -2
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +67 -2
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  321. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  322. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  323. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +15 -9
  324. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +73 -18
  325. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  326. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  327. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  328. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  329. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +39 -13
  330. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +194 -15
  331. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  332. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  333. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +5 -3
  334. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +28 -2
  335. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  336. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  337. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  338. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  339. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  340. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  341. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  342. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  343. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +26 -11
  344. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +124 -14
  345. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +19 -15
  346. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +78 -69
  347. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +168 -82
  348. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +887 -166
  349. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  350. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  351. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  352. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  353. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -2
  354. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +15 -2
  355. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  356. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  357. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  358. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  359. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  360. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  361. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  362. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  363. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +47 -0
  364. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +107 -0
  365. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  366. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  367. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  368. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -6
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +27 -14
  375. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  376. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  377. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  378. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  379. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  380. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  381. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  382. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  383. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -3
  384. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +29 -2
  385. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
  386. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
  387. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +38 -27
  388. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +207 -52
  389. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
  390. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
  391. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
  392. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
  393. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
  394. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
  395. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +56 -0
  396. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +192 -0
  397. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  398. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  399. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  400. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  401. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  402. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  403. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +13 -11
  404. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +73 -23
  405. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  406. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  407. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  408. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  409. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +133 -16
  410. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +656 -12
  411. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  412. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  413. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  414. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  415. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  416. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  417. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  418. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  419. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
  420. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
  421. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  422. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  423. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  424. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  425. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  426. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  427. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  428. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  429. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  430. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  431. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  432. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  433. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
  434. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
  435. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  436. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  437. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  438. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  439. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  440. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  441. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  442. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  443. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  444. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  445. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  446. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  447. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  448. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  449. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  450. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  451. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  452. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  453. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  454. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
  455. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  456. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  457. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  458. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  459. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  460. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  461. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  462. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  463. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  464. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  465. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  466. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  467. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  468. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  469. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  470. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  471. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  472. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  473. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  474. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  475. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  476. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  477. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  478. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  479. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  480. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  481. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  482. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  483. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  484. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  485. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  486. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  487. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  488. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  489. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  490. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  491. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  492. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  493. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  494. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  495. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  496. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  497. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  498. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  499. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  500. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  501. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  502. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  503. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  504. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  505. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  506. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  507. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  508. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  509. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  510. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  511. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  512. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  513. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  514. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  515. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  516. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  517. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
  518. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
  519. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  520. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  521. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  522. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  523. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  524. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  525. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  526. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  527. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  528. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  529. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  530. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  531. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +3 -2
  532. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -2
  533. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -2
  534. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  535. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
  536. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
  537. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
  538. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
  539. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
  540. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
  541. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
  542. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
  543. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  544. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  545. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
  546. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
  547. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  548. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  549. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  550. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  551. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
  552. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
  553. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
  554. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
  555. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -2
  556. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  557. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
  558. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  559. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  560. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
  561. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +125 -0
  562. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  563. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  564. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +199 -187
  565. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +232 -222
  566. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
  567. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
  568. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
  569. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +187 -183
  570. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +81 -75
  571. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +190 -186
  572. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
  573. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
  574. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  575. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
  576. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +164 -137
  577. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  578. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
  579. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  580. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -129
  581. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  582. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -74
  583. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +2 -2
  584. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +740 -667
  585. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +20 -0
  586. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  587. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  588. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
  589. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +48 -0
  590. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  591. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  592. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
  593. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  594. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
  595. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  596. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
  597. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +485 -467
  598. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  599. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
  600. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  601. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +149 -145
  602. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +156 -84
  603. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  604. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  605. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  606. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
  607. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  608. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  609. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
  610. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  611. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  612. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
  613. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  614. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  615. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
  616. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  617. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
  618. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  619. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
  620. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  621. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
  622. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  623. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
  624. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
  625. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  626. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
  627. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  628. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
  629. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  630. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
  631. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
  632. data/src/core/ext/xds/certificate_provider_store.cc +65 -3
  633. data/src/core/ext/xds/certificate_provider_store.h +21 -4
  634. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +17 -10
  635. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +12 -4
  636. data/src/core/ext/xds/upb_utils.h +3 -25
  637. data/src/core/ext/xds/xds_api.cc +90 -196
  638. data/src/core/ext/xds/xds_api.h +41 -39
  639. data/src/core/ext/xds/xds_bootstrap.cc +5 -537
  640. data/src/core/ext/xds/xds_bootstrap.h +41 -96
  641. data/src/core/ext/xds/xds_bootstrap_grpc.cc +362 -0
  642. data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
  643. data/src/core/ext/xds/xds_certificate_provider.cc +31 -25
  644. data/src/core/ext/xds/xds_certificate_provider.h +28 -4
  645. data/src/core/ext/xds/xds_channel_args.h +3 -3
  646. data/src/core/ext/xds/xds_channel_stack_modifier.cc +15 -5
  647. data/src/core/ext/xds/xds_channel_stack_modifier.h +16 -4
  648. data/src/core/ext/xds/xds_client.cc +833 -1324
  649. data/src/core/ext/xds/xds_client.h +57 -61
  650. data/src/core/ext/xds/xds_client_grpc.cc +235 -0
  651. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  652. data/src/core/ext/xds/xds_client_stats.cc +24 -25
  653. data/src/core/ext/xds/xds_client_stats.h +26 -24
  654. data/src/core/ext/xds/xds_cluster.cc +413 -245
  655. data/src/core/ext/xds/xds_cluster.h +66 -40
  656. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +67 -77
  657. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +47 -29
  658. data/src/core/ext/xds/xds_common_types.cc +238 -123
  659. data/src/core/ext/xds/xds_common_types.h +29 -16
  660. data/src/core/ext/xds/xds_endpoint.cc +265 -162
  661. data/src/core/ext/xds/xds_endpoint.h +19 -15
  662. data/src/core/ext/xds/xds_health_status.cc +80 -0
  663. data/src/core/ext/xds/xds_health_status.h +109 -0
  664. data/src/core/ext/xds/xds_http_fault_filter.cc +66 -57
  665. data/src/core/ext/xds/xds_http_fault_filter.h +19 -25
  666. data/src/core/ext/xds/xds_http_filters.cc +70 -71
  667. data/src/core/ext/xds/xds_http_filters.h +73 -25
  668. data/src/core/ext/xds/xds_http_rbac_filter.cc +168 -225
  669. data/src/core/ext/xds/xds_http_rbac_filter.h +22 -18
  670. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
  671. data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
  672. data/src/core/ext/xds/xds_lb_policy_registry.cc +334 -0
  673. data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
  674. data/src/core/ext/xds/xds_listener.cc +557 -475
  675. data/src/core/ext/xds/xds_listener.h +57 -51
  676. data/src/core/ext/xds/xds_resource_type.h +28 -22
  677. data/src/core/ext/xds/xds_resource_type_impl.h +18 -17
  678. data/src/core/ext/xds/xds_route_config.cc +592 -570
  679. data/src/core/ext/xds/xds_route_config.h +74 -40
  680. data/src/core/ext/xds/xds_routing.cc +21 -7
  681. data/src/core/ext/xds/xds_routing.h +17 -12
  682. data/src/core/ext/xds/xds_server_config_fetcher.cc +227 -179
  683. data/src/core/ext/xds/xds_transport.h +86 -0
  684. data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
  685. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  686. data/src/core/lib/address_utils/parse_address.cc +52 -52
  687. data/src/core/lib/address_utils/parse_address.h +46 -42
  688. data/src/core/lib/address_utils/sockaddr_utils.cc +38 -35
  689. data/src/core/lib/address_utils/sockaddr_utils.h +38 -36
  690. data/src/core/lib/avl/avl.h +54 -32
  691. data/src/core/lib/backoff/backoff.cc +19 -21
  692. data/src/core/lib/backoff/backoff.h +21 -21
  693. data/src/core/lib/channel/call_finalization.h +4 -6
  694. data/src/core/lib/channel/call_tracer.h +17 -8
  695. data/src/core/lib/channel/channel_args.cc +108 -39
  696. data/src/core/lib/channel/channel_args.h +285 -111
  697. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  698. data/src/core/lib/channel/channel_args_preconditioning.h +4 -4
  699. data/src/core/lib/channel/channel_fwd.h +26 -0
  700. data/src/core/lib/channel/channel_stack.cc +60 -58
  701. data/src/core/lib/channel/channel_stack.h +149 -146
  702. data/src/core/lib/channel/channel_stack_builder.cc +21 -24
  703. data/src/core/lib/channel/channel_stack_builder.h +19 -14
  704. data/src/core/lib/channel/channel_stack_builder_impl.cc +55 -26
  705. data/src/core/lib/channel/channel_stack_builder_impl.h +6 -3
  706. data/src/core/lib/channel/channel_trace.cc +24 -26
  707. data/src/core/lib/channel/channel_trace.h +22 -22
  708. data/src/core/lib/channel/channelz.cc +44 -54
  709. data/src/core/lib/channel/channelz.h +40 -32
  710. data/src/core/lib/channel/channelz_registry.cc +21 -22
  711. data/src/core/lib/channel/channelz_registry.h +21 -21
  712. data/src/core/lib/channel/connected_channel.cc +1264 -65
  713. data/src/core/lib/channel/connected_channel.h +21 -24
  714. data/src/core/lib/channel/context.h +25 -21
  715. data/src/core/lib/channel/promise_based_filter.cc +1544 -280
  716. data/src/core/lib/channel/promise_based_filter.h +466 -99
  717. data/src/core/lib/channel/status_util.cc +62 -17
  718. data/src/core/lib/channel/status_util.h +39 -22
  719. data/src/core/lib/compression/compression.cc +24 -19
  720. data/src/core/lib/compression/compression_internal.cc +43 -53
  721. data/src/core/lib/compression/compression_internal.h +27 -26
  722. data/src/core/lib/compression/message_compress.cc +28 -26
  723. data/src/core/lib/compression/message_compress.h +28 -29
  724. data/src/core/lib/config/core_configuration.cc +5 -1
  725. data/src/core/lib/config/core_configuration.h +84 -38
  726. data/src/core/lib/debug/event_log.cc +88 -0
  727. data/src/core/lib/debug/event_log.h +81 -0
  728. data/src/core/lib/debug/histogram_view.cc +69 -0
  729. data/src/core/lib/debug/histogram_view.h +37 -0
  730. data/src/core/lib/debug/stats.cc +48 -152
  731. data/src/core/lib/debug/stats.h +50 -57
  732. data/src/core/lib/debug/stats_data.cc +302 -645
  733. data/src/core/lib/debug/stats_data.h +293 -545
  734. data/src/core/lib/debug/trace.cc +18 -20
  735. data/src/core/lib/debug/trace.h +27 -48
  736. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +15 -18
  737. data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -10
  738. data/src/core/lib/event_engine/common_closures.h +71 -0
  739. data/src/core/lib/event_engine/default_event_engine.cc +99 -0
  740. data/src/core/lib/event_engine/default_event_engine.h +73 -0
  741. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -5
  742. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +4 -12
  743. data/src/core/lib/event_engine/event_engine.cc +3 -40
  744. data/src/core/lib/event_engine/executor/executor.h +38 -0
  745. data/src/core/lib/event_engine/forkable.cc +106 -0
  746. data/src/core/lib/event_engine/forkable.h +61 -0
  747. data/src/core/lib/event_engine/handle_containers.h +10 -3
  748. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  749. data/src/core/lib/event_engine/poller.h +62 -0
  750. data/src/core/lib/event_engine/posix.h +158 -0
  751. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
  752. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
  753. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +899 -0
  754. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  755. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  756. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  757. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  758. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  759. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  760. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
  761. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  762. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1305 -0
  763. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +717 -0
  764. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +640 -0
  765. data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
  766. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  767. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +289 -0
  768. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +279 -0
  769. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
  770. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  771. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
  772. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  773. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  774. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  775. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  776. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  777. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
  778. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  779. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  780. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  781. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  782. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  783. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  784. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  785. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  786. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  787. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  788. data/src/core/lib/event_engine/resolved_address.cc +19 -0
  789. data/src/core/lib/event_engine/resolved_address_internal.h +34 -0
  790. data/src/core/lib/event_engine/shim.cc +56 -0
  791. data/src/core/lib/event_engine/shim.h +33 -0
  792. data/src/core/lib/event_engine/slice.cc +8 -7
  793. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  794. data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
  795. data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
  796. data/src/core/lib/event_engine/thread_local.cc +29 -0
  797. data/src/core/lib/event_engine/thread_local.h +32 -0
  798. data/src/core/lib/event_engine/thread_pool.cc +253 -0
  799. data/src/core/lib/event_engine/thread_pool.h +141 -0
  800. data/src/core/lib/event_engine/time_util.cc +30 -0
  801. data/src/core/lib/event_engine/time_util.h +32 -0
  802. data/src/core/lib/event_engine/trace.cc +6 -0
  803. data/src/core/lib/event_engine/trace.h +16 -3
  804. data/src/core/lib/event_engine/utils.cc +44 -0
  805. data/src/core/lib/event_engine/utils.h +44 -0
  806. data/src/core/lib/event_engine/windows/iocp.cc +140 -0
  807. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  808. data/src/core/lib/event_engine/windows/win_socket.cc +219 -0
  809. data/src/core/lib/event_engine/windows/win_socket.h +129 -0
  810. data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
  811. data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
  812. data/src/core/lib/event_engine/windows/windows_engine.cc +388 -0
  813. data/src/core/lib/event_engine/windows/windows_engine.h +163 -0
  814. data/src/core/lib/experiments/config.cc +161 -0
  815. data/src/core/lib/experiments/config.h +53 -0
  816. data/src/core/lib/experiments/experiments.cc +81 -0
  817. data/src/core/lib/experiments/experiments.h +117 -0
  818. data/src/core/lib/gpr/alloc.cc +19 -25
  819. data/src/core/lib/gpr/alloc.h +20 -20
  820. data/src/core/lib/gpr/atm.cc +17 -17
  821. data/src/core/lib/gpr/cpu_iphone.cc +24 -24
  822. data/src/core/lib/gpr/cpu_linux.cc +28 -23
  823. data/src/core/lib/gpr/cpu_posix.cc +23 -22
  824. data/src/core/lib/gpr/cpu_windows.cc +20 -18
  825. data/src/core/lib/gpr/log.cc +27 -19
  826. data/src/core/lib/gpr/log_android.cc +22 -20
  827. data/src/core/lib/gpr/log_linux.cc +24 -24
  828. data/src/core/lib/gpr/log_posix.cc +20 -19
  829. data/src/core/lib/gpr/log_windows.cc +25 -25
  830. data/src/core/lib/gpr/spinlock.h +20 -20
  831. data/src/core/lib/gpr/string.cc +25 -24
  832. data/src/core/lib/gpr/string.h +61 -61
  833. data/src/core/lib/gpr/string_posix.cc +24 -24
  834. data/src/core/lib/gpr/string_util_windows.cc +25 -52
  835. data/src/core/lib/gpr/string_windows.cc +24 -24
  836. data/src/core/lib/gpr/sync.cc +25 -25
  837. data/src/core/lib/gpr/sync_abseil.cc +36 -40
  838. data/src/core/lib/gpr/sync_posix.cc +22 -34
  839. data/src/core/lib/gpr/sync_windows.cc +29 -27
  840. data/src/core/lib/gpr/time.cc +34 -30
  841. data/src/core/lib/gpr/time_posix.cc +41 -45
  842. data/src/core/lib/gpr/time_precise.cc +22 -22
  843. data/src/core/lib/gpr/time_precise.h +21 -22
  844. data/src/core/lib/gpr/time_windows.cc +35 -29
  845. data/src/core/lib/gpr/tmpfile.h +24 -24
  846. data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
  847. data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
  848. data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
  849. data/src/core/lib/gpr/useful.h +83 -30
  850. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  851. data/src/core/lib/gprpp/atomic_utils.h +20 -20
  852. data/src/core/lib/gprpp/bitset.h +30 -16
  853. data/src/core/lib/gprpp/chunked_vector.h +3 -3
  854. data/src/core/lib/gprpp/construct_destruct.h +3 -3
  855. data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
  856. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
  857. data/src/core/lib/gprpp/crash.h +34 -0
  858. data/src/core/lib/gprpp/debug_location.h +60 -31
  859. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  860. data/src/core/lib/gprpp/env.h +53 -0
  861. data/src/core/lib/gprpp/env_linux.cc +80 -0
  862. data/src/core/lib/gprpp/env_posix.cc +47 -0
  863. data/src/core/lib/gprpp/env_windows.cc +56 -0
  864. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  865. data/src/core/lib/gprpp/examine_stack.h +21 -21
  866. data/src/core/lib/gprpp/fork.cc +56 -48
  867. data/src/core/lib/gprpp/fork.h +29 -35
  868. data/src/core/lib/gprpp/global_config.h +20 -20
  869. data/src/core/lib/gprpp/global_config_custom.h +20 -20
  870. data/src/core/lib/gprpp/global_config_env.cc +25 -23
  871. data/src/core/lib/gprpp/global_config_env.h +26 -26
  872. data/src/core/lib/gprpp/global_config_generic.h +21 -21
  873. data/src/core/lib/gprpp/host_port.cc +28 -26
  874. data/src/core/lib/gprpp/host_port.h +32 -31
  875. data/src/core/lib/gprpp/load_file.cc +75 -0
  876. data/src/core/lib/gprpp/load_file.h +33 -0
  877. data/src/core/lib/gprpp/manual_constructor.h +21 -88
  878. data/src/core/lib/gprpp/match.h +3 -3
  879. data/src/core/lib/gprpp/memory.h +21 -21
  880. data/src/core/lib/gprpp/mpscq.cc +17 -17
  881. data/src/core/lib/gprpp/mpscq.h +21 -21
  882. data/src/core/lib/gprpp/no_destruct.h +95 -0
  883. data/src/core/lib/gprpp/notification.h +67 -0
  884. data/src/core/lib/gprpp/orphanable.h +21 -21
  885. data/src/core/lib/gprpp/overload.h +3 -3
  886. data/src/core/lib/gprpp/packed_table.h +40 -0
  887. data/src/core/lib/gprpp/per_cpu.h +46 -0
  888. data/src/core/lib/gprpp/ref_counted.h +21 -21
  889. data/src/core/lib/gprpp/ref_counted_ptr.h +41 -54
  890. data/src/core/lib/gprpp/single_set_ptr.h +3 -3
  891. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  892. data/src/core/lib/gprpp/stat.h +3 -3
  893. data/src/core/lib/gprpp/stat_posix.cc +5 -4
  894. data/src/core/lib/gprpp/stat_windows.cc +4 -2
  895. data/src/core/lib/gprpp/status_helper.cc +49 -33
  896. data/src/core/lib/gprpp/status_helper.h +9 -5
  897. data/src/core/lib/gprpp/strerror.cc +43 -0
  898. data/src/core/lib/gprpp/strerror.h +29 -0
  899. data/src/core/lib/gprpp/sync.h +23 -23
  900. data/src/core/lib/gprpp/table.h +12 -4
  901. data/src/core/lib/gprpp/tchar.cc +49 -0
  902. data/src/core/lib/gprpp/tchar.h +33 -0
  903. data/src/core/lib/gprpp/thd.h +23 -23
  904. data/src/core/lib/gprpp/thd_posix.cc +30 -31
  905. data/src/core/lib/gprpp/thd_windows.cc +26 -26
  906. data/src/core/lib/gprpp/time.cc +44 -9
  907. data/src/core/lib/gprpp/time.h +73 -4
  908. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  909. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  910. data/src/core/lib/gprpp/time_util.h +4 -4
  911. data/src/core/lib/gprpp/unique_type_name.h +21 -21
  912. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  913. data/src/core/lib/gprpp/validation_errors.h +127 -0
  914. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  915. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
  916. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  917. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  918. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  919. data/src/core/lib/http/format_request.cc +24 -22
  920. data/src/core/lib/http/format_request.h +21 -21
  921. data/src/core/lib/http/httpcli.cc +79 -88
  922. data/src/core/lib/http/httpcli.h +47 -31
  923. data/src/core/lib/http/httpcli_security_connector.cc +47 -38
  924. data/src/core/lib/http/httpcli_ssl_credentials.h +6 -4
  925. data/src/core/lib/http/parser.cc +78 -90
  926. data/src/core/lib/http/parser.h +38 -35
  927. data/src/core/lib/iomgr/block_annotate.h +23 -23
  928. data/src/core/lib/iomgr/buffer_list.cc +156 -136
  929. data/src/core/lib/iomgr/buffer_list.h +123 -101
  930. data/src/core/lib/iomgr/call_combiner.cc +32 -64
  931. data/src/core/lib/iomgr/call_combiner.h +24 -25
  932. data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
  933. data/src/core/lib/iomgr/cfstream_handle.h +25 -25
  934. data/src/core/lib/iomgr/closure.cc +27 -0
  935. data/src/core/lib/iomgr/closure.h +95 -58
  936. data/src/core/lib/iomgr/combiner.cc +20 -39
  937. data/src/core/lib/iomgr/combiner.h +20 -20
  938. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  939. data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
  940. data/src/core/lib/iomgr/endpoint.cc +17 -17
  941. data/src/core/lib/iomgr/endpoint.h +49 -49
  942. data/src/core/lib/iomgr/endpoint_cfstream.cc +44 -43
  943. data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
  944. data/src/core/lib/iomgr/endpoint_pair.h +20 -20
  945. data/src/core/lib/iomgr/endpoint_pair_posix.cc +34 -28
  946. data/src/core/lib/iomgr/endpoint_pair_windows.cc +30 -21
  947. data/src/core/lib/iomgr/error.cc +51 -834
  948. data/src/core/lib/iomgr/error.h +45 -317
  949. data/src/core/lib/iomgr/error_cfstream.cc +18 -23
  950. data/src/core/lib/iomgr/error_cfstream.h +21 -21
  951. data/src/core/lib/iomgr/ev_apple.cc +21 -21
  952. data/src/core/lib/iomgr/ev_apple.h +21 -21
  953. data/src/core/lib/iomgr/ev_epoll1_linux.cc +263 -248
  954. data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
  955. data/src/core/lib/iomgr/ev_poll_posix.cc +296 -271
  956. data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
  957. data/src/core/lib/iomgr/ev_posix.cc +87 -117
  958. data/src/core/lib/iomgr/ev_posix.h +93 -87
  959. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  960. data/src/core/lib/iomgr/event_engine_shims/closure.cc +62 -0
  961. data/src/core/lib/iomgr/event_engine_shims/closure.h +39 -0
  962. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
  963. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  964. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  965. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  966. data/src/core/lib/iomgr/exec_ctx.cc +34 -56
  967. data/src/core/lib/iomgr/exec_ctx.h +151 -175
  968. data/src/core/lib/iomgr/executor.cc +21 -31
  969. data/src/core/lib/iomgr/executor.h +27 -30
  970. data/src/core/lib/iomgr/fork_posix.cc +30 -27
  971. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  972. data/src/core/lib/iomgr/gethostname.h +20 -20
  973. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  974. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  975. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  976. data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
  977. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  978. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  979. data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
  980. data/src/core/lib/iomgr/internal_errqueue.h +83 -83
  981. data/src/core/lib/iomgr/iocp_windows.cc +23 -23
  982. data/src/core/lib/iomgr/iocp_windows.h +21 -21
  983. data/src/core/lib/iomgr/iomgr.cc +25 -19
  984. data/src/core/lib/iomgr/iomgr.h +35 -35
  985. data/src/core/lib/iomgr/iomgr_fwd.h +4 -3
  986. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  987. data/src/core/lib/iomgr/iomgr_internal.h +28 -28
  988. data/src/core/lib/iomgr/iomgr_posix.cc +21 -20
  989. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -19
  990. data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
  991. data/src/core/lib/iomgr/load_file.cc +24 -27
  992. data/src/core/lib/iomgr/load_file.h +22 -22
  993. data/src/core/lib/iomgr/lockfree_event.cc +114 -131
  994. data/src/core/lib/iomgr/lockfree_event.h +23 -23
  995. data/src/core/lib/iomgr/nameser.h +86 -86
  996. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  997. data/src/core/lib/iomgr/polling_entity.h +29 -29
  998. data/src/core/lib/iomgr/pollset.cc +17 -17
  999. data/src/core/lib/iomgr/pollset.h +55 -55
  1000. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  1001. data/src/core/lib/iomgr/pollset_set.h +25 -26
  1002. data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
  1003. data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
  1004. data/src/core/lib/iomgr/pollset_windows.cc +32 -31
  1005. data/src/core/lib/iomgr/pollset_windows.h +24 -24
  1006. data/src/core/lib/iomgr/port.h +34 -31
  1007. data/src/core/lib/iomgr/python_util.h +24 -24
  1008. data/src/core/lib/iomgr/resolve_address.cc +26 -20
  1009. data/src/core/lib/iomgr/resolve_address.h +54 -31
  1010. data/src/core/lib/iomgr/resolve_address_impl.h +5 -4
  1011. data/src/core/lib/iomgr/resolve_address_posix.cc +74 -49
  1012. data/src/core/lib/iomgr/resolve_address_posix.h +23 -10
  1013. data/src/core/lib/iomgr/resolve_address_windows.cc +59 -26
  1014. data/src/core/lib/iomgr/resolve_address_windows.h +23 -10
  1015. data/src/core/lib/iomgr/resolved_address.h +3 -3
  1016. data/src/core/lib/iomgr/sockaddr.h +23 -23
  1017. data/src/core/lib/iomgr/sockaddr_posix.h +21 -21
  1018. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
  1019. data/src/core/lib/iomgr/sockaddr_windows.h +21 -21
  1020. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  1021. data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
  1022. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  1023. data/src/core/lib/iomgr/socket_mutator.h +39 -39
  1024. data/src/core/lib/iomgr/socket_utils.h +27 -27
  1025. data/src/core/lib/iomgr/socket_utils_common_posix.cc +80 -100
  1026. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  1027. data/src/core/lib/iomgr/socket_utils_posix.cc +103 -19
  1028. data/src/core/lib/iomgr/socket_utils_posix.h +176 -84
  1029. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  1030. data/src/core/lib/iomgr/socket_windows.cc +37 -36
  1031. data/src/core/lib/iomgr/socket_windows.h +59 -61
  1032. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  1033. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  1034. data/src/core/lib/iomgr/tcp_client.cc +28 -24
  1035. data/src/core/lib/iomgr/tcp_client.h +49 -38
  1036. data/src/core/lib/iomgr/tcp_client_cfstream.cc +39 -36
  1037. data/src/core/lib/iomgr/tcp_client_posix.cc +236 -105
  1038. data/src/core/lib/iomgr/tcp_client_posix.h +55 -52
  1039. data/src/core/lib/iomgr/tcp_client_windows.cc +64 -51
  1040. data/src/core/lib/iomgr/tcp_posix.cc +502 -341
  1041. data/src/core/lib/iomgr/tcp_posix.h +32 -30
  1042. data/src/core/lib/iomgr/tcp_server.cc +33 -24
  1043. data/src/core/lib/iomgr/tcp_server.h +78 -69
  1044. data/src/core/lib/iomgr/tcp_server_posix.cc +358 -124
  1045. data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
  1046. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +93 -58
  1047. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +40 -40
  1048. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
  1049. data/src/core/lib/iomgr/tcp_server_windows.cc +106 -116
  1050. data/src/core/lib/iomgr/tcp_windows.cc +109 -94
  1051. data/src/core/lib/iomgr/tcp_windows.h +34 -35
  1052. data/src/core/lib/iomgr/timer.cc +17 -17
  1053. data/src/core/lib/iomgr/timer.h +68 -68
  1054. data/src/core/lib/iomgr/timer_generic.cc +125 -134
  1055. data/src/core/lib/iomgr/timer_generic.h +21 -21
  1056. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  1057. data/src/core/lib/iomgr/timer_heap.h +22 -22
  1058. data/src/core/lib/iomgr/timer_manager.cc +31 -31
  1059. data/src/core/lib/iomgr/timer_manager.h +27 -27
  1060. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
  1061. data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
  1062. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  1063. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
  1064. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  1065. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
  1066. data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
  1067. data/src/core/lib/iomgr/wakeup_fd_posix.cc +33 -30
  1068. data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -54
  1069. data/src/core/lib/json/json.h +22 -25
  1070. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -10
  1071. data/src/core/lib/json/json_channel_args.h +42 -0
  1072. data/src/core/lib/json/json_object_loader.cc +217 -0
  1073. data/src/core/lib/json/json_object_loader.h +634 -0
  1074. data/src/core/lib/json/json_reader.cc +115 -90
  1075. data/src/core/lib/json/json_util.cc +14 -41
  1076. data/src/core/lib/json/json_util.h +7 -7
  1077. data/src/core/lib/json/json_writer.cc +56 -56
  1078. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +26 -58
  1079. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +32 -41
  1080. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1081. data/src/core/lib/load_balancing/lb_policy_registry.cc +142 -0
  1082. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1083. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +18 -31
  1084. data/src/core/lib/matchers/matchers.cc +12 -7
  1085. data/src/core/lib/matchers/matchers.h +5 -3
  1086. data/src/core/lib/promise/activity.cc +22 -7
  1087. data/src/core/lib/promise/activity.h +110 -52
  1088. data/src/core/lib/promise/arena_promise.h +105 -72
  1089. data/src/core/lib/promise/context.h +17 -10
  1090. data/src/core/lib/promise/detail/basic_join.h +197 -0
  1091. data/src/core/lib/promise/detail/basic_seq.h +27 -32
  1092. data/src/core/lib/promise/detail/promise_factory.h +61 -13
  1093. data/src/core/lib/promise/detail/promise_like.h +3 -3
  1094. data/src/core/lib/promise/detail/status.h +31 -3
  1095. data/src/core/lib/promise/detail/switch.h +21 -21
  1096. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
  1097. data/src/core/lib/promise/if.h +195 -0
  1098. data/src/core/lib/promise/interceptor_list.h +308 -0
  1099. data/src/core/lib/promise/intra_activity_waiter.h +9 -3
  1100. data/src/core/lib/promise/latch.h +110 -22
  1101. data/src/core/lib/promise/loop.h +12 -9
  1102. data/src/core/lib/promise/map.h +4 -6
  1103. data/src/core/lib/promise/pipe.h +608 -0
  1104. data/src/core/lib/promise/poll.h +129 -11
  1105. data/src/core/lib/promise/promise.h +5 -5
  1106. data/src/core/lib/promise/race.h +6 -9
  1107. data/src/core/lib/promise/seq.h +32 -12
  1108. data/src/core/lib/promise/sleep.cc +56 -42
  1109. data/src/core/lib/promise/sleep.h +40 -32
  1110. data/src/core/lib/promise/trace.cc +20 -0
  1111. data/src/core/lib/promise/trace.h +24 -0
  1112. data/src/core/lib/promise/try_join.h +82 -0
  1113. data/src/core/lib/promise/try_seq.h +39 -21
  1114. data/src/core/lib/resolver/resolver.cc +17 -59
  1115. data/src/core/lib/resolver/resolver.h +21 -18
  1116. data/src/core/lib/resolver/resolver_factory.h +10 -8
  1117. data/src/core/lib/resolver/resolver_registry.cc +17 -9
  1118. data/src/core/lib/resolver/resolver_registry.h +15 -5
  1119. data/src/core/lib/resolver/server_address.cc +38 -32
  1120. data/src/core/lib/resolver/server_address.h +32 -31
  1121. data/src/core/lib/resource_quota/api.cc +10 -2
  1122. data/src/core/lib/resource_quota/api.h +10 -4
  1123. data/src/core/lib/resource_quota/arena.cc +85 -21
  1124. data/src/core/lib/resource_quota/arena.h +196 -23
  1125. data/src/core/lib/resource_quota/memory_quota.cc +287 -108
  1126. data/src/core/lib/resource_quota/memory_quota.h +175 -59
  1127. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1128. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1129. data/src/core/lib/resource_quota/resource_quota.h +4 -4
  1130. data/src/core/lib/resource_quota/thread_quota.h +3 -3
  1131. data/src/core/lib/resource_quota/trace.h +3 -3
  1132. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  1133. data/src/core/lib/security/authorization/authorization_policy_provider.h +10 -3
  1134. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
  1135. data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
  1136. data/src/core/lib/security/authorization/evaluate_args.h +9 -6
  1137. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +5 -1
  1138. data/src/core/lib/security/authorization/grpc_authorization_engine.h +10 -3
  1139. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +16 -3
  1140. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +16 -5
  1141. data/src/core/lib/security/authorization/matchers.cc +44 -30
  1142. data/src/core/lib/security/authorization/matchers.h +10 -3
  1143. data/src/core/lib/security/authorization/rbac_policy.cc +6 -2
  1144. data/src/core/lib/security/authorization/rbac_policy.h +10 -3
  1145. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +9 -4
  1146. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  1147. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  1148. data/src/core/lib/security/context/security_context.cc +27 -25
  1149. data/src/core/lib/security/context/security_context.h +56 -34
  1150. data/src/core/lib/security/credentials/alts/alts_credentials.cc +23 -22
  1151. data/src/core/lib/security/credentials/alts/alts_credentials.h +61 -57
  1152. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  1153. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
  1154. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  1155. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  1156. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  1157. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +20 -22
  1158. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  1159. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
  1160. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
  1161. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  1162. data/src/core/lib/security/credentials/call_creds_util.h +4 -3
  1163. data/src/core/lib/security/credentials/channel_creds_registry.h +9 -4
  1164. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +13 -3
  1165. data/src/core/lib/security/credentials/composite/composite_credentials.cc +27 -31
  1166. data/src/core/lib/security/credentials/composite/composite_credentials.h +40 -29
  1167. data/src/core/lib/security/credentials/credentials.cc +23 -26
  1168. data/src/core/lib/security/credentials/credentials.h +62 -55
  1169. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +123 -76
  1170. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -3
  1171. data/src/core/lib/security/credentials/external/aws_request_signer.cc +14 -3
  1172. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  1173. data/src/core/lib/security/credentials/external/external_account_credentials.cc +83 -68
  1174. data/src/core/lib/security/credentials/external/external_account_credentials.h +14 -3
  1175. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -26
  1176. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +9 -3
  1177. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +42 -31
  1178. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -3
  1179. data/src/core/lib/security/credentials/fake/fake_credentials.cc +30 -36
  1180. data/src/core/lib/security/credentials/fake/fake_credentials.h +49 -42
  1181. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +23 -25
  1182. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +129 -107
  1183. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +31 -25
  1184. data/src/core/lib/security/credentials/iam/iam_credentials.cc +27 -20
  1185. data/src/core/lib/security/credentials/iam/iam_credentials.h +31 -21
  1186. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +7 -3
  1187. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +10 -6
  1188. data/src/core/lib/security/credentials/jwt/json_token.cc +40 -29
  1189. data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
  1190. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +29 -27
  1191. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +35 -21
  1192. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +113 -89
  1193. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
  1194. data/src/core/lib/security/credentials/local/local_credentials.cc +24 -24
  1195. data/src/core/lib/security/credentials/local/local_credentials.h +32 -26
  1196. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +85 -81
  1197. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +42 -21
  1198. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +31 -30
  1199. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +47 -23
  1200. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +36 -40
  1201. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +35 -23
  1202. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +22 -30
  1203. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +16 -17
  1204. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +55 -48
  1205. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +22 -9
  1206. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +10 -3
  1207. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +9 -10
  1208. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +22 -23
  1209. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
  1210. data/src/core/lib/security/credentials/tls/tls_credentials.cc +36 -44
  1211. data/src/core/lib/security/credentials/tls/tls_credentials.h +28 -25
  1212. data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
  1213. data/src/core/lib/security/credentials/tls/tls_utils.h +4 -4
  1214. data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -32
  1215. data/src/core/lib/security/credentials/xds/xds_credentials.h +19 -5
  1216. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +60 -54
  1217. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +49 -47
  1218. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +74 -78
  1219. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +25 -26
  1220. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +15 -6
  1221. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +26 -15
  1222. data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
  1223. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +22 -20
  1224. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +43 -38
  1225. data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
  1226. data/src/core/lib/security/security_connector/local/local_security_connector.cc +64 -47
  1227. data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
  1228. data/src/core/lib/security/security_connector/security_connector.cc +37 -35
  1229. data/src/core/lib/security/security_connector/security_connector.h +57 -44
  1230. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +54 -45
  1231. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
  1232. data/src/core/lib/security/security_connector/ssl_utils.cc +47 -39
  1233. data/src/core/lib/security/security_connector/ssl_utils.h +45 -42
  1234. data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
  1235. data/src/core/lib/security/security_connector/ssl_utils_config.h +21 -22
  1236. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +58 -56
  1237. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +48 -28
  1238. data/src/core/lib/security/transport/auth_filters.h +53 -24
  1239. data/src/core/lib/security/transport/client_auth_filter.cc +51 -32
  1240. data/src/core/lib/security/transport/secure_endpoint.cc +112 -68
  1241. data/src/core/lib/security/transport/secure_endpoint.h +28 -27
  1242. data/src/core/lib/security/transport/security_handshaker.cc +139 -109
  1243. data/src/core/lib/security/transport/security_handshaker.h +27 -22
  1244. data/src/core/lib/security/transport/server_auth_filter.cc +157 -267
  1245. data/src/core/lib/security/transport/tsi_error.cc +23 -20
  1246. data/src/core/lib/security/transport/tsi_error.h +20 -20
  1247. data/src/core/lib/security/util/json_util.cc +24 -24
  1248. data/src/core/lib/security/util/json_util.h +21 -23
  1249. data/src/core/lib/service_config/service_config.h +15 -4
  1250. data/src/core/lib/service_config/service_config_call_data.h +11 -4
  1251. data/src/core/lib/service_config/service_config_impl.cc +107 -153
  1252. data/src/core/lib/service_config/service_config_impl.h +19 -26
  1253. data/src/core/lib/service_config/service_config_parser.cc +10 -30
  1254. data/src/core/lib/service_config/service_config_parser.h +13 -21
  1255. data/src/core/lib/slice/b64.cc +26 -26
  1256. data/src/core/lib/slice/b64.h +32 -32
  1257. data/src/core/lib/slice/percent_encoding.cc +21 -30
  1258. data/src/core/lib/slice/percent_encoding.h +28 -28
  1259. data/src/core/lib/slice/slice.cc +57 -45
  1260. data/src/core/lib/slice/slice.h +57 -18
  1261. data/src/core/lib/slice/slice_buffer.cc +93 -60
  1262. data/src/core/lib/slice/slice_buffer.h +72 -10
  1263. data/src/core/lib/slice/slice_internal.h +34 -42
  1264. data/src/core/lib/slice/slice_refcount.cc +3 -18
  1265. data/src/core/lib/slice/slice_refcount.h +53 -18
  1266. data/src/core/lib/slice/slice_string_helpers.cc +17 -37
  1267. data/src/core/lib/slice/slice_string_helpers.h +21 -25
  1268. data/src/core/lib/surface/api_trace.cc +17 -17
  1269. data/src/core/lib/surface/api_trace.h +25 -25
  1270. data/src/core/lib/surface/builtins.h +3 -3
  1271. data/src/core/lib/surface/byte_buffer.cc +22 -23
  1272. data/src/core/lib/surface/byte_buffer_reader.cc +23 -23
  1273. data/src/core/lib/surface/call.cc +2205 -471
  1274. data/src/core/lib/surface/call.h +121 -42
  1275. data/src/core/lib/surface/call_details.cc +20 -21
  1276. data/src/core/lib/surface/call_log_batch.cc +19 -18
  1277. data/src/core/lib/surface/call_test_only.h +33 -33
  1278. data/src/core/lib/surface/call_trace.cc +123 -0
  1279. data/src/core/lib/surface/call_trace.h +30 -0
  1280. data/src/core/lib/surface/channel.cc +65 -69
  1281. data/src/core/lib/surface/channel.h +45 -35
  1282. data/src/core/lib/surface/channel_init.cc +17 -17
  1283. data/src/core/lib/surface/channel_init.h +20 -20
  1284. data/src/core/lib/surface/channel_ping.cc +20 -20
  1285. data/src/core/lib/surface/channel_stack_type.cc +21 -17
  1286. data/src/core/lib/surface/channel_stack_type.h +22 -20
  1287. data/src/core/lib/surface/completion_queue.cc +188 -218
  1288. data/src/core/lib/surface/completion_queue.h +39 -41
  1289. data/src/core/lib/surface/completion_queue_factory.cc +33 -28
  1290. data/src/core/lib/surface/completion_queue_factory.h +22 -22
  1291. data/src/core/lib/surface/event_string.cc +18 -17
  1292. data/src/core/lib/surface/event_string.h +22 -22
  1293. data/src/core/lib/surface/init.cc +44 -73
  1294. data/src/core/lib/surface/init.h +20 -20
  1295. data/src/core/lib/surface/init_internally.cc +25 -0
  1296. data/src/core/lib/surface/init_internally.h +37 -0
  1297. data/src/core/lib/surface/lame_client.cc +33 -30
  1298. data/src/core/lib/surface/lame_client.h +23 -23
  1299. data/src/core/lib/surface/metadata_array.cc +17 -18
  1300. data/src/core/lib/surface/server.cc +349 -130
  1301. data/src/core/lib/surface/server.h +24 -22
  1302. data/src/core/lib/surface/validate_metadata.cc +32 -43
  1303. data/src/core/lib/surface/validate_metadata.h +21 -21
  1304. data/src/core/lib/surface/version.cc +21 -21
  1305. data/src/core/lib/transport/bdp_estimator.cc +18 -20
  1306. data/src/core/lib/transport/bdp_estimator.h +21 -22
  1307. data/src/core/lib/transport/connectivity_state.cc +19 -20
  1308. data/src/core/lib/transport/connectivity_state.h +23 -23
  1309. data/src/core/lib/transport/error_utils.cc +54 -78
  1310. data/src/core/lib/transport/error_utils.h +24 -24
  1311. data/src/core/lib/transport/handshaker.cc +66 -54
  1312. data/src/core/lib/transport/handshaker.h +51 -47
  1313. data/src/core/lib/transport/handshaker_factory.h +49 -24
  1314. data/src/core/lib/transport/handshaker_registry.cc +27 -20
  1315. data/src/core/lib/transport/handshaker_registry.h +25 -28
  1316. data/src/core/lib/transport/http2_errors.h +22 -22
  1317. data/src/core/lib/transport/http_connect_handshaker.cc +56 -57
  1318. data/src/core/lib/transport/http_connect_handshaker.h +21 -21
  1319. data/src/core/lib/transport/metadata_batch.cc +22 -4
  1320. data/src/core/lib/transport/metadata_batch.h +129 -35
  1321. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  1322. data/src/core/lib/transport/parsed_metadata.h +7 -5
  1323. data/src/core/lib/transport/pid_controller.cc +20 -20
  1324. data/src/core/lib/transport/pid_controller.h +27 -27
  1325. data/src/core/lib/transport/status_conversion.cc +23 -25
  1326. data/src/core/lib/transport/status_conversion.h +22 -22
  1327. data/src/core/lib/transport/tcp_connect_handshaker.cc +34 -42
  1328. data/src/core/lib/transport/tcp_connect_handshaker.h +3 -3
  1329. data/src/core/lib/transport/timeout_encoding.cc +22 -22
  1330. data/src/core/lib/transport/timeout_encoding.h +20 -20
  1331. data/src/core/lib/transport/transport.cc +85 -46
  1332. data/src/core/lib/transport/transport.h +219 -215
  1333. data/src/core/lib/transport/transport_fwd.h +20 -0
  1334. data/src/core/lib/transport/transport_impl.h +46 -46
  1335. data/src/core/lib/transport/transport_op_string.cc +32 -30
  1336. data/src/core/lib/uri/uri_parser.cc +1 -1
  1337. data/src/core/lib/uri/uri_parser.h +3 -3
  1338. data/src/core/plugin_registry/grpc_plugin_registry.cc +53 -73
  1339. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +20 -39
  1340. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  1341. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  1342. data/src/core/tsi/alts/crypt/gsec.h +336 -336
  1343. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  1344. data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
  1345. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  1346. data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
  1347. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
  1348. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
  1349. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  1350. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
  1351. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  1352. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  1353. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  1354. data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
  1355. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +117 -97
  1356. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
  1357. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  1358. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
  1359. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +51 -43
  1360. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
  1361. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
  1362. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
  1363. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
  1364. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  1365. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
  1366. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
  1367. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
  1368. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  1369. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
  1370. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
  1371. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
  1372. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
  1373. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  1374. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
  1375. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +67 -58
  1376. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
  1377. data/src/core/tsi/fake_transport_security.cc +146 -110
  1378. data/src/core/tsi/fake_transport_security.h +36 -30
  1379. data/src/core/tsi/local_transport_security.cc +43 -38
  1380. data/src/core/tsi/local_transport_security.h +33 -33
  1381. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
  1382. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  1383. data/src/core/tsi/ssl/session_cache/ssl_session.h +21 -21
  1384. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +19 -19
  1385. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  1386. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
  1387. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +25 -20
  1388. data/src/core/tsi/ssl_transport_security.cc +299 -370
  1389. data/src/core/tsi/ssl_transport_security.h +206 -203
  1390. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  1391. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  1392. data/src/core/tsi/ssl_types.h +27 -27
  1393. data/src/core/tsi/transport_security.cc +44 -32
  1394. data/src/core/tsi/transport_security.h +49 -48
  1395. data/src/core/tsi/transport_security_grpc.cc +23 -22
  1396. data/src/core/tsi/transport_security_grpc.h +44 -41
  1397. data/src/core/tsi/transport_security_interface.h +344 -332
  1398. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
  1399. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
  1400. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  1401. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  1402. data/src/ruby/ext/grpc/ext-export.gcc +1 -1
  1403. data/src/ruby/ext/grpc/extconf.rb +97 -19
  1404. data/src/ruby/ext/grpc/rb_call.c +1 -0
  1405. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1406. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  1407. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  1408. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  1409. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
  1410. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +60 -60
  1411. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1412. data/src/ruby/lib/grpc/errors.rb +1 -1
  1413. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1414. data/src/ruby/lib/grpc/version.rb +1 -1
  1415. data/src/ruby/pb/generate_proto_ruby.sh +0 -6
  1416. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1417. data/src/ruby/spec/channel_spec.rb +5 -43
  1418. data/src/ruby/spec/client_server_spec.rb +20 -8
  1419. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1420. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1421. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1422. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1423. data/third_party/abseil-cpp/absl/algorithm/container.h +57 -58
  1424. data/third_party/abseil-cpp/absl/base/attributes.h +88 -41
  1425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1426. data/third_party/abseil-cpp/absl/base/config.h +221 -39
  1427. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +52 -2
  1429. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  1430. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -4
  1431. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1432. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  1433. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  1434. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1435. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  1436. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  1437. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1438. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +39 -28
  1439. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +36 -36
  1440. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +6 -3
  1441. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +10 -6
  1442. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1443. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  1444. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1445. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1446. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -11
  1447. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  1448. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1449. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  1450. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  1451. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -40
  1452. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  1453. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1454. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1455. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  1456. data/third_party/abseil-cpp/absl/base/optimization.h +76 -16
  1457. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  1458. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  1459. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1460. data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -5
  1461. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1462. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -16
  1463. data/third_party/abseil-cpp/absl/container/inlined_vector.h +84 -25
  1464. data/third_party/abseil-cpp/absl/container/internal/common.h +9 -8
  1465. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  1466. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +23 -29
  1467. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  1468. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +116 -23
  1469. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +40 -54
  1470. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +165 -66
  1471. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +159 -4
  1472. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1121 -470
  1473. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  1474. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  1475. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  1476. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  1477. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  1478. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  1479. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  1480. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  1481. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  1482. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  1483. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  1484. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  1485. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  1486. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  1487. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  1488. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  1489. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  1490. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  1491. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  1492. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1493. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  1494. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  1495. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -13
  1496. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  1497. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +19 -12
  1498. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1499. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  1500. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  1501. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1502. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +59 -102
  1503. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  1504. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +41 -11
  1505. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +18 -4
  1506. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  1507. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  1508. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +164 -101
  1509. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  1510. data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
  1511. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1512. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  1513. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
  1514. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  1515. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  1516. data/third_party/abseil-cpp/absl/hash/internal/hash.h +235 -26
  1517. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  1518. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  1519. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  1520. data/third_party/abseil-cpp/absl/numeric/bits.h +1 -1
  1521. data/third_party/abseil-cpp/absl/numeric/int128.cc +14 -10
  1522. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  1523. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +33 -10
  1524. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  1525. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  1526. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  1527. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -2
  1528. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  1529. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  1530. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +3 -24
  1531. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  1532. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  1533. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  1534. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  1535. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  1536. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  1537. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  1538. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  1539. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  1540. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  1541. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  1542. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  1543. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  1544. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  1545. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  1546. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  1547. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  1548. data/third_party/abseil-cpp/absl/status/status.cc +193 -14
  1549. data/third_party/abseil-cpp/absl/status/status.h +24 -14
  1550. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  1551. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  1552. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1553. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  1554. data/third_party/abseil-cpp/absl/strings/cord.cc +257 -924
  1555. data/third_party/abseil-cpp/absl/strings/cord.h +268 -156
  1556. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1557. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1558. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1559. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +575 -0
  1560. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  1561. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  1562. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  1563. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  1564. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1565. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1566. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  1567. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +441 -150
  1568. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +157 -53
  1569. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +70 -73
  1570. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +8 -6
  1571. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  1572. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  1573. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  1574. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  1575. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
  1576. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
  1577. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  1578. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  1579. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  1580. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  1581. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +19 -43
  1582. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  1583. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +5 -4
  1584. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  1585. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  1586. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  1587. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +18 -15
  1588. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  1589. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  1590. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  1591. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  1592. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  1593. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  1594. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +127 -30
  1595. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  1596. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +42 -10
  1597. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +56 -289
  1598. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  1599. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1600. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +9 -4
  1601. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  1602. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1603. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  1604. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -103
  1605. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1606. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  1607. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1608. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  1609. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  1610. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1611. data/third_party/abseil-cpp/absl/strings/numbers.cc +42 -39
  1612. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  1613. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  1614. data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -16
  1615. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  1616. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1617. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1618. data/third_party/abseil-cpp/absl/strings/string_view.cc +8 -19
  1619. data/third_party/abseil-cpp/absl/strings/string_view.h +6 -12
  1620. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1621. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  1622. data/third_party/abseil-cpp/absl/strings/substitute.h +55 -21
  1623. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1624. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1625. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  1626. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  1627. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  1628. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1629. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1630. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  1631. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1632. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +172 -88
  1633. data/third_party/abseil-cpp/absl/synchronization/mutex.h +102 -55
  1634. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  1635. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -3
  1636. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  1637. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  1638. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  1639. data/third_party/abseil-cpp/absl/time/duration.cc +12 -11
  1640. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  1641. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1642. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  1643. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  1644. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  1645. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  1646. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  1647. data/third_party/abseil-cpp/absl/time/time.h +268 -169
  1648. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1649. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  1650. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  1651. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1652. data/third_party/abseil-cpp/absl/types/span.h +31 -8
  1653. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
  1654. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
  1655. data/third_party/re2/re2/bitstate.cc +3 -3
  1656. data/third_party/re2/re2/dfa.cc +13 -13
  1657. data/third_party/re2/re2/nfa.cc +4 -4
  1658. data/third_party/re2/re2/onepass.cc +2 -2
  1659. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  1660. data/third_party/re2/re2/prefilter_tree.h +3 -2
  1661. data/third_party/re2/re2/prog.cc +11 -2
  1662. data/third_party/re2/re2/prog.h +17 -5
  1663. data/third_party/re2/re2/re2.cc +6 -11
  1664. data/third_party/re2/re2/re2.h +1 -1
  1665. data/third_party/re2/re2/regexp.cc +1 -2
  1666. data/third_party/re2/re2/stringpiece.h +10 -7
  1667. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  1668. data/third_party/re2/re2/unicode_groups.cc +319 -151
  1669. data/third_party/re2/re2/walker-inl.h +3 -2
  1670. data/third_party/re2/util/mutex.h +4 -4
  1671. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  1672. data/third_party/upb/upb/arena.c +277 -0
  1673. data/third_party/upb/upb/arena.h +225 -0
  1674. data/third_party/upb/upb/array.c +114 -0
  1675. data/third_party/upb/upb/array.h +83 -0
  1676. data/third_party/upb/upb/collections.h +36 -0
  1677. data/third_party/upb/upb/decode.c +161 -65
  1678. data/third_party/upb/upb/decode.h +1 -0
  1679. data/third_party/upb/upb/decode_fast.c +1 -1
  1680. data/third_party/upb/upb/def.c +10 -2
  1681. data/third_party/upb/upb/def.h +8 -1
  1682. data/third_party/upb/upb/def.hpp +7 -4
  1683. data/third_party/upb/upb/encode.c +29 -20
  1684. data/third_party/upb/upb/encode.h +16 -6
  1685. data/third_party/upb/upb/extension_registry.c +93 -0
  1686. data/third_party/upb/upb/extension_registry.h +84 -0
  1687. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  1688. data/third_party/upb/upb/internal/table.h +385 -0
  1689. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  1690. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1691. data/third_party/upb/upb/json_decode.c +1512 -0
  1692. data/third_party/upb/upb/json_decode.h +47 -0
  1693. data/third_party/upb/upb/json_encode.c +7 -3
  1694. data/third_party/upb/upb/json_encode.h +6 -3
  1695. data/third_party/upb/upb/map.c +108 -0
  1696. data/third_party/upb/upb/map.h +117 -0
  1697. data/third_party/upb/upb/message_value.h +66 -0
  1698. data/third_party/upb/upb/mini_table.c +1147 -0
  1699. data/third_party/upb/upb/mini_table.h +189 -0
  1700. data/third_party/upb/upb/mini_table.hpp +112 -0
  1701. data/third_party/upb/upb/msg.c +2 -62
  1702. data/third_party/upb/upb/msg.h +2 -45
  1703. data/third_party/upb/upb/msg_internal.h +28 -22
  1704. data/third_party/upb/upb/port_def.inc +2 -1
  1705. data/third_party/upb/upb/port_undef.inc +1 -0
  1706. data/third_party/upb/upb/reflection.c +2 -159
  1707. data/third_party/upb/upb/reflection.h +2 -112
  1708. data/third_party/upb/upb/status.c +86 -0
  1709. data/third_party/upb/upb/status.h +66 -0
  1710. data/third_party/upb/upb/table.c +2 -2
  1711. data/third_party/upb/upb/table_internal.h +3 -352
  1712. data/third_party/upb/upb/text_encode.c +3 -2
  1713. data/third_party/upb/upb/upb.c +4 -290
  1714. data/third_party/upb/upb/upb.h +7 -196
  1715. data/third_party/zlib/compress.c +3 -3
  1716. data/third_party/zlib/crc32.c +21 -12
  1717. data/third_party/zlib/deflate.c +112 -106
  1718. data/third_party/zlib/deflate.h +2 -2
  1719. data/third_party/zlib/gzlib.c +1 -1
  1720. data/third_party/zlib/gzread.c +3 -5
  1721. data/third_party/zlib/gzwrite.c +1 -1
  1722. data/third_party/zlib/infback.c +10 -7
  1723. data/third_party/zlib/inflate.c +5 -2
  1724. data/third_party/zlib/inftrees.c +2 -2
  1725. data/third_party/zlib/inftrees.h +1 -1
  1726. data/third_party/zlib/trees.c +61 -62
  1727. data/third_party/zlib/uncompr.c +2 -2
  1728. data/third_party/zlib/zconf.h +16 -3
  1729. data/third_party/zlib/zlib.h +10 -10
  1730. data/third_party/zlib/zutil.c +9 -7
  1731. data/third_party/zlib/zutil.h +1 -0
  1732. metadata +339 -78
  1733. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  1734. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  1735. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -192
  1736. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -70
  1737. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  1738. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -91
  1739. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -55
  1740. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -180
  1741. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -179
  1742. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -457
  1743. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
  1744. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -388
  1745. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -61
  1746. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  1747. data/src/core/ext/xds/certificate_provider_registry.h +0 -57
  1748. data/src/core/lib/event_engine/iomgr_engine.cc +0 -206
  1749. data/src/core/lib/event_engine/iomgr_engine.h +0 -118
  1750. data/src/core/lib/gpr/env.h +0 -40
  1751. data/src/core/lib/gpr/env_linux.cc +0 -75
  1752. data/src/core/lib/gpr/env_posix.cc +0 -46
  1753. data/src/core/lib/gpr/env_windows.cc +0 -74
  1754. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  1755. data/src/core/lib/gpr/murmur_hash.h +0 -29
  1756. data/src/core/lib/gpr/string_windows.h +0 -32
  1757. data/src/core/lib/gpr/tls.h +0 -156
  1758. data/src/core/lib/iomgr/error_internal.h +0 -66
  1759. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1760. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1761. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1762. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1763. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1764. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  1765. data/src/core/lib/profiling/basic_timers.cc +0 -295
  1766. data/src/core/lib/profiling/stap_timers.cc +0 -50
  1767. data/src/core/lib/profiling/timers.h +0 -94
  1768. data/src/core/lib/promise/call_push_pull.h +0 -148
  1769. data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
  1770. data/src/core/lib/slice/slice_api.cc +0 -39
  1771. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  1772. data/src/core/lib/slice/slice_refcount_base.h +0 -60
  1773. data/src/core/lib/slice/slice_split.cc +0 -103
  1774. data/src/core/lib/slice/slice_split.h +0 -36
  1775. data/src/core/lib/transport/byte_stream.cc +0 -165
  1776. data/src/core/lib/transport/byte_stream.h +0 -170
  1777. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -16,56 +16,74 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
- #include "absl/memory/memory.h"
19
+ #include "src/core/ext/xds/xds_route_config.h"
20
+
21
+ #include <stddef.h>
22
+ #include <stdint.h>
23
+
24
+ #include <initializer_list>
25
+ #include <limits>
26
+ #include <map>
27
+ #include <memory>
28
+ #include <set>
29
+ #include <string>
30
+ #include <utility>
31
+ #include <vector>
32
+
33
+ #include "absl/status/status.h"
34
+ #include "absl/status/statusor.h"
20
35
  #include "absl/strings/str_cat.h"
21
36
  #include "absl/strings/str_format.h"
22
37
  #include "absl/strings/str_join.h"
23
38
  #include "absl/strings/str_split.h"
24
39
  #include "absl/strings/string_view.h"
40
+ #include "absl/types/optional.h"
41
+ #include "absl/types/variant.h"
25
42
  #include "envoy/config/core/v3/base.upb.h"
26
43
  #include "envoy/config/core/v3/extension.upb.h"
27
44
  #include "envoy/config/route/v3/route.upb.h"
28
45
  #include "envoy/config/route/v3/route.upbdefs.h"
29
46
  #include "envoy/config/route/v3/route_components.upb.h"
30
- #include "envoy/config/route/v3/route_components.upbdefs.h"
31
47
  #include "envoy/type/matcher/v3/regex.upb.h"
32
- #include "envoy/type/matcher/v3/string.upb.h"
33
48
  #include "envoy/type/v3/percent.upb.h"
34
49
  #include "envoy/type/v3/range.upb.h"
35
50
  #include "google/protobuf/any.upb.h"
51
+ #include "google/protobuf/duration.upb.h"
36
52
  #include "google/protobuf/wrappers.upb.h"
53
+ #include "re2/re2.h"
54
+ #include "upb/def.h"
37
55
  #include "upb/text_encode.h"
38
56
  #include "upb/upb.h"
39
- #include "upb/upb.hpp"
57
+
58
+ #include <grpc/status.h>
59
+ #include <grpc/support/log.h>
40
60
 
41
61
  #include "src/core/ext/xds/upb_utils.h"
42
- #include "src/core/ext/xds/xds_api.h"
43
62
  #include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
44
63
  #include "src/core/ext/xds/xds_common_types.h"
64
+ #include "src/core/ext/xds/xds_http_filters.h"
45
65
  #include "src/core/ext/xds/xds_resource_type.h"
46
66
  #include "src/core/ext/xds/xds_routing.h"
47
- #include "src/core/lib/gpr/env.h"
67
+ #include "src/core/lib/channel/status_util.h"
68
+ #include "src/core/lib/config/core_configuration.h"
69
+ #include "src/core/lib/debug/trace.h"
48
70
  #include "src/core/lib/gpr/string.h"
49
- #include "src/core/lib/iomgr/error.h"
50
- #include "src/core/lib/transport/error_utils.h"
71
+ #include "src/core/lib/gprpp/env.h"
72
+ #include "src/core/lib/gprpp/match.h"
73
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
74
+ #include "src/core/lib/gprpp/time.h"
75
+ #include "src/core/lib/json/json.h"
76
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
77
+ #include "src/core/lib/matchers/matchers.h"
51
78
 
52
79
  namespace grpc_core {
53
80
 
54
- // TODO(yashykt): Remove once RBAC is no longer experimental
55
- bool XdsRbacEnabled() {
56
- char* value = gpr_getenv("GRPC_XDS_EXPERIMENTAL_RBAC");
57
- bool parsed_value;
58
- bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
59
- gpr_free(value);
60
- return parse_succeeded && parsed_value;
61
- }
62
-
63
81
  // TODO(donnadionne): Remove once RLS is no longer experimental
64
82
  bool XdsRlsEnabled() {
65
- char* value = gpr_getenv("GRPC_EXPERIMENTAL_XDS_RLS_LB");
83
+ auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_RLS_LB");
84
+ if (!value.has_value()) return false;
66
85
  bool parsed_value;
67
- bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
68
- gpr_free(value);
86
+ bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
69
87
  return parse_succeeded && parsed_value;
70
88
  }
71
89
 
@@ -109,85 +127,77 @@ std::string XdsRouteConfigResource::Route::Matchers::ToString() const {
109
127
  }
110
128
 
111
129
  //
112
- // XdsRouteConfigResource::Route::RouteAction::HashPolicy
130
+ // XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header
113
131
  //
114
132
 
115
- XdsRouteConfigResource::Route::RouteAction::HashPolicy::HashPolicy(
116
- const HashPolicy& other)
117
- : type(other.type),
118
- header_name(other.header_name),
133
+ XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header::Header(
134
+ const Header& other)
135
+ : header_name(other.header_name),
119
136
  regex_substitution(other.regex_substitution) {
120
137
  if (other.regex != nullptr) {
121
138
  regex =
122
- absl::make_unique<RE2>(other.regex->pattern(), other.regex->options());
139
+ std::make_unique<RE2>(other.regex->pattern(), other.regex->options());
123
140
  }
124
141
  }
125
142
 
126
- XdsRouteConfigResource::Route::RouteAction::HashPolicy&
127
- XdsRouteConfigResource::Route::RouteAction::HashPolicy::operator=(
128
- const HashPolicy& other) {
129
- type = other.type;
143
+ XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header&
144
+ XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header::operator=(
145
+ const Header& other) {
130
146
  header_name = other.header_name;
131
147
  if (other.regex != nullptr) {
132
148
  regex =
133
- absl::make_unique<RE2>(other.regex->pattern(), other.regex->options());
149
+ std::make_unique<RE2>(other.regex->pattern(), other.regex->options());
134
150
  }
135
151
  regex_substitution = other.regex_substitution;
136
152
  return *this;
137
153
  }
138
154
 
139
- XdsRouteConfigResource::Route::RouteAction::HashPolicy::HashPolicy(
140
- HashPolicy&& other) noexcept
141
- : type(other.type),
142
- header_name(std::move(other.header_name)),
155
+ XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header::Header(
156
+ Header&& other) noexcept
157
+ : header_name(std::move(other.header_name)),
143
158
  regex(std::move(other.regex)),
144
159
  regex_substitution(std::move(other.regex_substitution)) {}
145
160
 
146
- XdsRouteConfigResource::Route::RouteAction::HashPolicy&
147
- XdsRouteConfigResource::Route::RouteAction::HashPolicy::operator=(
148
- HashPolicy&& other) noexcept {
149
- type = other.type;
161
+ XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header&
162
+ XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header::operator=(
163
+ Header&& other) noexcept {
150
164
  header_name = std::move(other.header_name);
151
165
  regex = std::move(other.regex);
152
166
  regex_substitution = std::move(other.regex_substitution);
153
167
  return *this;
154
168
  }
155
169
 
156
- bool XdsRouteConfigResource::Route::RouteAction::HashPolicy::HashPolicy::
157
- operator==(const HashPolicy& other) const {
158
- if (type != other.type) return false;
159
- if (type == Type::HEADER) {
160
- if (regex == nullptr) {
161
- if (other.regex != nullptr) return false;
162
- } else {
163
- if (other.regex == nullptr) return false;
164
- return header_name == other.header_name &&
165
- regex->pattern() == other.regex->pattern() &&
166
- regex_substitution == other.regex_substitution;
167
- }
170
+ bool XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header::operator==(
171
+ const Header& other) const {
172
+ if (header_name != other.header_name) return false;
173
+ if (regex == nullptr) {
174
+ if (other.regex != nullptr) return false;
175
+ } else {
176
+ if (other.regex == nullptr) return false;
177
+ if (regex->pattern() != other.regex->pattern()) return false;
168
178
  }
169
- return true;
179
+ return regex_substitution == other.regex_substitution;
170
180
  }
171
181
 
182
+ std::string
183
+ XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header::ToString()
184
+ const {
185
+ return absl::StrCat("Header ", header_name, "/",
186
+ (regex == nullptr) ? "" : regex->pattern(), "/",
187
+ regex_substitution);
188
+ }
189
+
190
+ //
191
+ // XdsRouteConfigResource::Route::RouteAction::HashPolicy
192
+ //
193
+
172
194
  std::string XdsRouteConfigResource::Route::RouteAction::HashPolicy::ToString()
173
195
  const {
174
- std::vector<std::string> contents;
175
- switch (type) {
176
- case Type::HEADER:
177
- contents.push_back("type=HEADER");
178
- break;
179
- case Type::CHANNEL_ID:
180
- contents.push_back("type=CHANNEL_ID");
181
- break;
182
- }
183
- contents.push_back(
184
- absl::StrFormat("terminal=%s", terminal ? "true" : "false"));
185
- if (type == Type::HEADER) {
186
- contents.push_back(absl::StrFormat(
187
- "Header %s:/%s/%s", header_name,
188
- (regex == nullptr) ? "" : regex->pattern(), regex_substitution));
189
- }
190
- return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
196
+ std::string type = Match(
197
+ policy, [](const Header& header) { return header.ToString(); },
198
+ [](const ChannelId&) -> std::string { return "ChannelId"; });
199
+ return absl::StrCat("{", type, ", terminal=", terminal ? "true" : "false",
200
+ "}");
191
201
  }
192
202
 
193
203
  //
@@ -218,25 +228,30 @@ XdsRouteConfigResource::Route::RouteAction::ClusterWeight::ToString() const {
218
228
 
219
229
  std::string XdsRouteConfigResource::Route::RouteAction::ToString() const {
220
230
  std::vector<std::string> contents;
231
+ contents.reserve(hash_policies.size());
221
232
  for (const HashPolicy& hash_policy : hash_policies) {
222
233
  contents.push_back(absl::StrCat("hash_policy=", hash_policy.ToString()));
223
234
  }
224
235
  if (retry_policy.has_value()) {
225
236
  contents.push_back(absl::StrCat("retry_policy=", retry_policy->ToString()));
226
237
  }
227
- if (action.index() == kClusterIndex) {
228
- contents.push_back(
229
- absl::StrFormat("Cluster name: %s", absl::get<kClusterIndex>(action)));
230
- } else if (action.index() == kWeightedClustersIndex) {
231
- auto& action_weighted_clusters = absl::get<kWeightedClustersIndex>(action);
232
- for (const ClusterWeight& cluster_weight : action_weighted_clusters) {
233
- contents.push_back(cluster_weight.ToString());
234
- }
235
- } else if (action.index() == kClusterSpecifierPluginIndex) {
236
- contents.push_back(
237
- absl::StrFormat("Cluster specifier plugin name: %s",
238
- absl::get<kClusterSpecifierPluginIndex>(action)));
239
- }
238
+ Match(
239
+ action,
240
+ [&contents](const ClusterName& cluster_name) {
241
+ contents.push_back(
242
+ absl::StrFormat("Cluster name: %s", cluster_name.cluster_name));
243
+ },
244
+ [&contents](const std::vector<ClusterWeight>& weighted_clusters) {
245
+ for (const ClusterWeight& cluster_weight : weighted_clusters) {
246
+ contents.push_back(cluster_weight.ToString());
247
+ }
248
+ },
249
+ [&contents](
250
+ const ClusterSpecifierPluginName& cluster_specifier_plugin_name) {
251
+ contents.push_back(absl::StrFormat(
252
+ "Cluster specifier plugin name: %s",
253
+ cluster_specifier_plugin_name.cluster_specifier_plugin_name));
254
+ });
240
255
  if (max_stream_duration.has_value()) {
241
256
  contents.push_back(max_stream_duration->ToString());
242
257
  }
@@ -310,68 +325,84 @@ std::string XdsRouteConfigResource::ToString() const {
310
325
 
311
326
  namespace {
312
327
 
313
- grpc_error_handle ClusterSpecifierPluginParse(
314
- const XdsEncodingContext& context,
328
+ XdsRouteConfigResource::ClusterSpecifierPluginMap ClusterSpecifierPluginParse(
329
+ const XdsResourceType::DecodeContext& context,
315
330
  const envoy_config_route_v3_RouteConfiguration* route_config,
316
- XdsRouteConfigResource* rds_update) {
331
+ ValidationErrors* errors) {
332
+ XdsRouteConfigResource::ClusterSpecifierPluginMap
333
+ cluster_specifier_plugin_map;
334
+ const auto& cluster_specifier_plugin_registry =
335
+ static_cast<const GrpcXdsBootstrap&>(context.client->bootstrap())
336
+ .cluster_specifier_plugin_registry();
317
337
  size_t num_cluster_specifier_plugins;
318
338
  const envoy_config_route_v3_ClusterSpecifierPlugin* const*
319
339
  cluster_specifier_plugin =
320
340
  envoy_config_route_v3_RouteConfiguration_cluster_specifier_plugins(
321
341
  route_config, &num_cluster_specifier_plugins);
322
342
  for (size_t i = 0; i < num_cluster_specifier_plugins; ++i) {
323
- const envoy_config_core_v3_TypedExtensionConfig* extension =
343
+ bool is_optional = envoy_config_route_v3_ClusterSpecifierPlugin_is_optional(
344
+ cluster_specifier_plugin[i]);
345
+ ValidationErrors::ScopedField field(
346
+ errors, absl::StrCat(".cluster_specifier_plugins[", i, "].extension"));
347
+ const envoy_config_core_v3_TypedExtensionConfig* typed_extension_config =
324
348
  envoy_config_route_v3_ClusterSpecifierPlugin_extension(
325
349
  cluster_specifier_plugin[i]);
326
350
  std::string name = UpbStringToStdString(
327
- envoy_config_core_v3_TypedExtensionConfig_name(extension));
328
- if (rds_update->cluster_specifier_plugin_map.find(name) !=
329
- rds_update->cluster_specifier_plugin_map.end()) {
330
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
331
- "Duplicated definition of cluster_specifier_plugin ", name));
351
+ envoy_config_core_v3_TypedExtensionConfig_name(typed_extension_config));
352
+ if (cluster_specifier_plugin_map.find(name) !=
353
+ cluster_specifier_plugin_map.end()) {
354
+ ValidationErrors::ScopedField field(errors, ".name");
355
+ errors->AddError(absl::StrCat("duplicate name \"", name, "\""));
356
+ } else {
357
+ // Add a sentinel entry in case we encounter an error later, just so we
358
+ // don't generate duplicate errors for each route that uses this plugin.
359
+ cluster_specifier_plugin_map[name] = "<sentinel>";
332
360
  }
361
+ ValidationErrors::ScopedField field2(errors, ".typed_config");
333
362
  const google_protobuf_Any* any =
334
- envoy_config_core_v3_TypedExtensionConfig_typed_config(extension);
335
- if (any == nullptr) {
336
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
337
- "Could not obtrain TypedExtensionConfig for plugin config.");
338
- }
339
- absl::string_view plugin_type;
340
- grpc_error_handle error =
341
- ExtractExtensionTypeName(context, any, &plugin_type);
342
- if (error != GRPC_ERROR_NONE) return error;
343
- bool is_optional = envoy_config_route_v3_ClusterSpecifierPlugin_is_optional(
344
- cluster_specifier_plugin[i]);
363
+ envoy_config_core_v3_TypedExtensionConfig_typed_config(
364
+ typed_extension_config);
365
+ auto extension = ExtractXdsExtension(context, any, errors);
366
+ if (!extension.has_value()) continue;
345
367
  const XdsClusterSpecifierPluginImpl* cluster_specifier_plugin_impl =
346
- XdsClusterSpecifierPluginRegistry::GetPluginForType(plugin_type);
347
- std::string lb_policy_config;
368
+ cluster_specifier_plugin_registry.GetPluginForType(extension->type);
348
369
  if (cluster_specifier_plugin_impl == nullptr) {
349
- if (!is_optional) {
350
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
351
- absl::StrCat("Unknown ClusterSpecifierPlugin type ", plugin_type));
370
+ if (is_optional) {
371
+ // Empty string indicates an optional plugin.
372
+ // This is used later when validating routes, and since we will skip
373
+ // any routes that refer to this plugin, we won't wind up including
374
+ // this plugin in the resource that we return to the watcher.
375
+ cluster_specifier_plugin_map[std::move(name)] = "";
376
+ } else {
377
+ // Not optional, report error.
378
+ errors->AddError("unsupported ClusterSpecifierPlugin type");
352
379
  }
353
- // Optional plugin, leave lb_policy_config empty.
380
+ continue;
381
+ }
382
+ const size_t original_error_size = errors->size();
383
+ Json lb_policy_config =
384
+ cluster_specifier_plugin_impl->GenerateLoadBalancingPolicyConfig(
385
+ std::move(*extension), context.arena, context.symtab, errors);
386
+ if (errors->size() != original_error_size) continue;
387
+ auto config =
388
+ CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
389
+ lb_policy_config);
390
+ if (!config.ok()) {
391
+ errors->AddError(absl::StrCat(
392
+ "ClusterSpecifierPlugin returned invalid LB policy config: ",
393
+ config.status().message()));
354
394
  } else {
355
- auto config =
356
- cluster_specifier_plugin_impl->GenerateLoadBalancingPolicyConfig(
357
- google_protobuf_Any_value(any), context.arena, context.symtab);
358
- if (!config.ok()) {
359
- return absl_status_to_grpc_error(config.status());
360
- }
361
- lb_policy_config = std::move(*config);
395
+ cluster_specifier_plugin_map[std::move(name)] = lb_policy_config.Dump();
362
396
  }
363
- rds_update->cluster_specifier_plugin_map[std::move(name)] =
364
- std::move(lb_policy_config);
365
397
  }
366
- return GRPC_ERROR_NONE;
398
+ return cluster_specifier_plugin_map;
367
399
  }
368
400
 
369
- grpc_error_handle RoutePathMatchParse(
370
- const envoy_config_route_v3_RouteMatch* match,
371
- XdsRouteConfigResource::Route* route, bool* ignore_route) {
401
+ absl::optional<StringMatcher> RoutePathMatchParse(
402
+ const envoy_config_route_v3_RouteMatch* match, ValidationErrors* errors) {
403
+ bool case_sensitive = true;
372
404
  auto* case_sensitive_ptr =
373
405
  envoy_config_route_v3_RouteMatch_case_sensitive(match);
374
- bool case_sensitive = true;
375
406
  if (case_sensitive_ptr != nullptr) {
376
407
  case_sensitive = google_protobuf_BoolValue_value(case_sensitive_ptr);
377
408
  }
@@ -380,25 +411,18 @@ grpc_error_handle RoutePathMatchParse(
380
411
  if (envoy_config_route_v3_RouteMatch_has_prefix(match)) {
381
412
  absl::string_view prefix =
382
413
  UpbStringToAbsl(envoy_config_route_v3_RouteMatch_prefix(match));
383
- // Empty prefix "" is accepted.
414
+ // For any prefix that cannot match a path of the form "/service/method",
415
+ // ignore the route.
384
416
  if (!prefix.empty()) {
385
- // Prefix "/" is accepted.
386
- if (prefix[0] != '/') {
387
- // Prefix which does not start with a / will never match anything, so
388
- // ignore this route.
389
- *ignore_route = true;
390
- return GRPC_ERROR_NONE;
391
- }
417
+ // Does not start with a slash.
418
+ if (prefix[0] != '/') return absl::nullopt;
392
419
  std::vector<absl::string_view> prefix_elements =
393
420
  absl::StrSplit(prefix.substr(1), absl::MaxSplits('/', 2));
394
- if (prefix_elements.size() > 2) {
395
- // Prefix cannot have more than 2 slashes.
396
- *ignore_route = true;
397
- return GRPC_ERROR_NONE;
398
- } else if (prefix_elements.size() == 2 && prefix_elements[0].empty()) {
399
- // Prefix contains empty string between the 2 slashes
400
- *ignore_route = true;
401
- return GRPC_ERROR_NONE;
421
+ // More than 2 slashes.
422
+ if (prefix_elements.size() > 2) return absl::nullopt;
423
+ // Two consecutive slashes.
424
+ if (prefix_elements.size() == 2 && prefix_elements[0].empty()) {
425
+ return absl::nullopt;
402
426
  }
403
427
  }
404
428
  type = StringMatcher::Type::kPrefix;
@@ -406,35 +430,19 @@ grpc_error_handle RoutePathMatchParse(
406
430
  } else if (envoy_config_route_v3_RouteMatch_has_path(match)) {
407
431
  absl::string_view path =
408
432
  UpbStringToAbsl(envoy_config_route_v3_RouteMatch_path(match));
409
- if (path.empty()) {
410
- // Path that is empty will never match anything, so ignore this route.
411
- *ignore_route = true;
412
- return GRPC_ERROR_NONE;
413
- }
414
- if (path[0] != '/') {
415
- // Path which does not start with a / will never match anything, so
416
- // ignore this route.
417
- *ignore_route = true;
418
- return GRPC_ERROR_NONE;
419
- }
433
+ // For any path not of the form "/service/method", ignore the route.
434
+ // Empty path.
435
+ if (path.empty()) return absl::nullopt;
436
+ // Does not start with a slash.
437
+ if (path[0] != '/') return absl::nullopt;
420
438
  std::vector<absl::string_view> path_elements =
421
439
  absl::StrSplit(path.substr(1), absl::MaxSplits('/', 2));
422
- if (path_elements.size() != 2) {
423
- // Path not in the required format of /service/method will never match
424
- // anything, so ignore this route.
425
- *ignore_route = true;
426
- return GRPC_ERROR_NONE;
427
- } else if (path_elements[0].empty()) {
428
- // Path contains empty service name will never match anything, so ignore
429
- // this route.
430
- *ignore_route = true;
431
- return GRPC_ERROR_NONE;
432
- } else if (path_elements[1].empty()) {
433
- // Path contains empty method name will never match anything, so ignore
434
- // this route.
435
- *ignore_route = true;
436
- return GRPC_ERROR_NONE;
437
- }
440
+ // Number of slashes does not equal 2.
441
+ if (path_elements.size() != 2) return absl::nullopt;
442
+ // Empty service name.
443
+ if (path_elements[0].empty()) return absl::nullopt;
444
+ // Empty method name.
445
+ if (path_elements[1].empty()) return absl::nullopt;
438
446
  type = StringMatcher::Type::kExact;
439
447
  match_string = std::string(path);
440
448
  } else if (envoy_config_route_v3_RouteMatch_has_safe_regex(match)) {
@@ -445,27 +453,30 @@ grpc_error_handle RoutePathMatchParse(
445
453
  match_string = UpbStringToStdString(
446
454
  envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
447
455
  } else {
448
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
449
- "Invalid route path specifier specified.");
456
+ errors->AddError("invalid path specifier");
457
+ return absl::nullopt;
450
458
  }
451
459
  absl::StatusOr<StringMatcher> string_matcher =
452
460
  StringMatcher::Create(type, match_string, case_sensitive);
453
461
  if (!string_matcher.ok()) {
454
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
455
- absl::StrCat("path matcher: ", string_matcher.status().message()));
462
+ errors->AddError(absl::StrCat("error creating path matcher: ",
463
+ string_matcher.status().message()));
464
+ return absl::nullopt;
456
465
  }
457
- route->matchers.path_matcher = std::move(string_matcher.value());
458
- return GRPC_ERROR_NONE;
466
+ return std::move(*string_matcher);
459
467
  }
460
468
 
461
- grpc_error_handle RouteHeaderMatchersParse(
462
- const envoy_config_route_v3_RouteMatch* match,
463
- XdsRouteConfigResource::Route* route) {
469
+ void RouteHeaderMatchersParse(const envoy_config_route_v3_RouteMatch* match,
470
+ XdsRouteConfigResource::Route* route,
471
+ ValidationErrors* errors) {
464
472
  size_t size;
465
473
  const envoy_config_route_v3_HeaderMatcher* const* headers =
466
474
  envoy_config_route_v3_RouteMatch_headers(match, &size);
467
475
  for (size_t i = 0; i < size; ++i) {
476
+ ValidationErrors::ScopedField field(errors,
477
+ absl::StrCat(".headers[", i, "]"));
468
478
  const envoy_config_route_v3_HeaderMatcher* header = headers[i];
479
+ GPR_ASSERT(header != nullptr);
469
480
  const std::string name =
470
481
  UpbStringToStdString(envoy_config_route_v3_HeaderMatcher_name(header));
471
482
  HeaderMatcher::Type type;
@@ -477,6 +488,18 @@ grpc_error_handle RouteHeaderMatchersParse(
477
488
  type = HeaderMatcher::Type::kExact;
478
489
  match_string = UpbStringToStdString(
479
490
  envoy_config_route_v3_HeaderMatcher_exact_match(header));
491
+ } else if (envoy_config_route_v3_HeaderMatcher_has_prefix_match(header)) {
492
+ type = HeaderMatcher::Type::kPrefix;
493
+ match_string = UpbStringToStdString(
494
+ envoy_config_route_v3_HeaderMatcher_prefix_match(header));
495
+ } else if (envoy_config_route_v3_HeaderMatcher_has_suffix_match(header)) {
496
+ type = HeaderMatcher::Type::kSuffix;
497
+ match_string = UpbStringToStdString(
498
+ envoy_config_route_v3_HeaderMatcher_suffix_match(header));
499
+ } else if (envoy_config_route_v3_HeaderMatcher_has_contains_match(header)) {
500
+ type = HeaderMatcher::Type::kContains;
501
+ match_string = UpbStringToStdString(
502
+ envoy_config_route_v3_HeaderMatcher_contains_match(header));
480
503
  } else if (envoy_config_route_v3_HeaderMatcher_has_safe_regex_match(
481
504
  header)) {
482
505
  const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
@@ -494,21 +517,9 @@ grpc_error_handle RouteHeaderMatchersParse(
494
517
  } else if (envoy_config_route_v3_HeaderMatcher_has_present_match(header)) {
495
518
  type = HeaderMatcher::Type::kPresent;
496
519
  present_match = envoy_config_route_v3_HeaderMatcher_present_match(header);
497
- } else if (envoy_config_route_v3_HeaderMatcher_has_prefix_match(header)) {
498
- type = HeaderMatcher::Type::kPrefix;
499
- match_string = UpbStringToStdString(
500
- envoy_config_route_v3_HeaderMatcher_prefix_match(header));
501
- } else if (envoy_config_route_v3_HeaderMatcher_has_suffix_match(header)) {
502
- type = HeaderMatcher::Type::kSuffix;
503
- match_string = UpbStringToStdString(
504
- envoy_config_route_v3_HeaderMatcher_suffix_match(header));
505
- } else if (envoy_config_route_v3_HeaderMatcher_has_contains_match(header)) {
506
- type = HeaderMatcher::Type::kContains;
507
- match_string = UpbStringToStdString(
508
- envoy_config_route_v3_HeaderMatcher_contains_match(header));
509
520
  } else {
510
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
511
- "Invalid route header matcher specified.");
521
+ errors->AddError("invalid header matcher");
522
+ continue;
512
523
  }
513
524
  bool invert_match =
514
525
  envoy_config_route_v3_HeaderMatcher_invert_match(header);
@@ -516,18 +527,17 @@ grpc_error_handle RouteHeaderMatchersParse(
516
527
  HeaderMatcher::Create(name, type, match_string, range_start, range_end,
517
528
  present_match, invert_match);
518
529
  if (!header_matcher.ok()) {
519
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
520
- absl::StrCat("header matcher: ", header_matcher.status().message()));
530
+ errors->AddError(absl::StrCat("cannot create header matcher: ",
531
+ header_matcher.status().message()));
532
+ } else {
533
+ route->matchers.header_matchers.emplace_back(std::move(*header_matcher));
521
534
  }
522
- route->matchers.header_matchers.emplace_back(
523
- std::move(header_matcher.value()));
524
535
  }
525
- return GRPC_ERROR_NONE;
526
536
  }
527
537
 
528
- grpc_error_handle RouteRuntimeFractionParse(
529
- const envoy_config_route_v3_RouteMatch* match,
530
- XdsRouteConfigResource::Route* route) {
538
+ void RouteRuntimeFractionParse(const envoy_config_route_v3_RouteMatch* match,
539
+ XdsRouteConfigResource::Route* route,
540
+ ValidationErrors* errors) {
531
541
  const envoy_config_core_v3_RuntimeFractionalPercent* runtime_fraction =
532
542
  envoy_config_route_v3_RouteMatch_runtime_fraction(match);
533
543
  if (runtime_fraction != nullptr) {
@@ -536,9 +546,8 @@ grpc_error_handle RouteRuntimeFractionParse(
536
546
  runtime_fraction);
537
547
  if (fraction != nullptr) {
538
548
  uint32_t numerator = envoy_type_v3_FractionalPercent_numerator(fraction);
539
- const auto denominator =
540
- static_cast<envoy_type_v3_FractionalPercent_DenominatorType>(
541
- envoy_type_v3_FractionalPercent_denominator(fraction));
549
+ const uint32_t denominator =
550
+ envoy_type_v3_FractionalPercent_denominator(fraction);
542
551
  // Normalize to million.
543
552
  switch (denominator) {
544
553
  case envoy_type_v3_FractionalPercent_HUNDRED:
@@ -549,101 +558,98 @@ grpc_error_handle RouteRuntimeFractionParse(
549
558
  break;
550
559
  case envoy_type_v3_FractionalPercent_MILLION:
551
560
  break;
552
- default:
553
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
554
- "Unknown denominator type");
561
+ default: {
562
+ ValidationErrors::ScopedField field(
563
+ errors, ".runtime_fraction.default_value.denominator");
564
+ errors->AddError("unknown denominator type");
565
+ return;
566
+ }
555
567
  }
556
568
  route->matchers.fraction_per_million = numerator;
557
569
  }
558
570
  }
559
- return GRPC_ERROR_NONE;
560
571
  }
561
572
 
562
573
  template <typename ParentType, typename EntryType>
563
- grpc_error_handle ParseTypedPerFilterConfig(
564
- const XdsEncodingContext& context, const ParentType* parent,
574
+ XdsRouteConfigResource::TypedPerFilterConfig ParseTypedPerFilterConfig(
575
+ const XdsResourceType::DecodeContext& context, const ParentType* parent,
565
576
  const EntryType* (*entry_func)(const ParentType*, size_t*),
566
577
  upb_StringView (*key_func)(const EntryType*),
567
578
  const google_protobuf_Any* (*value_func)(const EntryType*),
568
- XdsRouteConfigResource::TypedPerFilterConfig* typed_per_filter_config) {
579
+ ValidationErrors* errors) {
580
+ XdsRouteConfigResource::TypedPerFilterConfig typed_per_filter_config;
569
581
  size_t filter_it = kUpb_Map_Begin;
570
582
  while (true) {
571
583
  const auto* filter_entry = entry_func(parent, &filter_it);
572
584
  if (filter_entry == nullptr) break;
573
585
  absl::string_view key = UpbStringToAbsl(key_func(filter_entry));
574
- if (key.empty()) {
575
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("empty filter name in map");
576
- }
586
+ ValidationErrors::ScopedField field(errors, absl::StrCat("[", key, "]"));
587
+ if (key.empty()) errors->AddError("filter name must be non-empty");
577
588
  const google_protobuf_Any* any = value_func(filter_entry);
578
- GPR_ASSERT(any != nullptr);
579
- absl::string_view filter_type =
580
- UpbStringToAbsl(google_protobuf_Any_type_url(any));
581
- if (filter_type.empty()) {
582
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
583
- absl::StrCat("no filter config specified for filter name ", key));
584
- }
589
+ auto extension = ExtractXdsExtension(context, any, errors);
590
+ if (!extension.has_value()) continue;
591
+ auto* extension_to_use = &*extension;
592
+ absl::optional<XdsExtension> nested_extension;
585
593
  bool is_optional = false;
586
- if (filter_type ==
587
- "type.googleapis.com/envoy.config.route.v3.FilterConfig") {
588
- upb_StringView any_value = google_protobuf_Any_value(any);
594
+ if (extension->type == "envoy.config.route.v3.FilterConfig") {
595
+ absl::string_view* serialized_config =
596
+ absl::get_if<absl::string_view>(&extension->value);
597
+ if (serialized_config == nullptr) {
598
+ errors->AddError("could not parse FilterConfig");
599
+ continue;
600
+ }
589
601
  const auto* filter_config = envoy_config_route_v3_FilterConfig_parse(
590
- any_value.data, any_value.size, context.arena);
602
+ serialized_config->data(), serialized_config->size(), context.arena);
591
603
  if (filter_config == nullptr) {
592
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
593
- absl::StrCat("could not parse FilterConfig wrapper for ", key));
604
+ errors->AddError("could not parse FilterConfig");
605
+ continue;
594
606
  }
595
607
  is_optional =
596
608
  envoy_config_route_v3_FilterConfig_is_optional(filter_config);
597
609
  any = envoy_config_route_v3_FilterConfig_config(filter_config);
598
- if (any == nullptr) {
599
- if (is_optional) continue;
600
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
601
- absl::StrCat("no filter config specified for filter name ", key));
602
- }
610
+ extension->validation_fields.emplace_back(errors, ".config");
611
+ nested_extension = ExtractXdsExtension(context, any, errors);
612
+ if (!nested_extension.has_value()) continue;
613
+ extension_to_use = &*nested_extension;
603
614
  }
604
- grpc_error_handle error =
605
- ExtractExtensionTypeName(context, any, &filter_type);
606
- if (error != GRPC_ERROR_NONE) return error;
615
+ const auto& http_filter_registry =
616
+ static_cast<const GrpcXdsBootstrap&>(context.client->bootstrap())
617
+ .http_filter_registry();
607
618
  const XdsHttpFilterImpl* filter_impl =
608
- XdsHttpFilterRegistry::GetFilterForType(filter_type);
619
+ http_filter_registry.GetFilterForType(extension_to_use->type);
609
620
  if (filter_impl == nullptr) {
610
- if (is_optional) continue;
611
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
612
- absl::StrCat("no filter registered for config type ", filter_type));
621
+ if (!is_optional) errors->AddError("unsupported filter type");
622
+ continue;
613
623
  }
614
- absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
624
+ absl::optional<XdsHttpFilterImpl::FilterConfig> filter_config =
615
625
  filter_impl->GenerateFilterConfigOverride(
616
- google_protobuf_Any_value(any), context.arena);
617
- if (!filter_config.ok()) {
618
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
619
- "filter config for type ", filter_type,
620
- " failed to parse: ", StatusToString(filter_config.status())));
626
+ context, std::move(*extension_to_use), errors);
627
+ if (filter_config.has_value()) {
628
+ typed_per_filter_config[std::string(key)] = std::move(*filter_config);
621
629
  }
622
- (*typed_per_filter_config)[std::string(key)] = std::move(*filter_config);
623
630
  }
624
- return GRPC_ERROR_NONE;
631
+ return typed_per_filter_config;
625
632
  }
626
633
 
627
- grpc_error_handle RetryPolicyParse(
628
- const XdsEncodingContext& context,
629
- const envoy_config_route_v3_RetryPolicy* retry_policy,
630
- absl::optional<XdsRouteConfigResource::RetryPolicy>* retry) {
631
- std::vector<grpc_error_handle> errors;
632
- XdsRouteConfigResource::RetryPolicy retry_to_return;
634
+ XdsRouteConfigResource::RetryPolicy RetryPolicyParse(
635
+ const XdsResourceType::DecodeContext& context,
636
+ const envoy_config_route_v3_RetryPolicy* retry_policy_proto,
637
+ ValidationErrors* errors) {
638
+ XdsRouteConfigResource::RetryPolicy retry_policy;
633
639
  auto retry_on = UpbStringToStdString(
634
- envoy_config_route_v3_RetryPolicy_retry_on(retry_policy));
640
+ envoy_config_route_v3_RetryPolicy_retry_on(retry_policy_proto));
635
641
  std::vector<absl::string_view> codes = absl::StrSplit(retry_on, ',');
636
642
  for (const auto& code : codes) {
637
643
  if (code == "cancelled") {
638
- retry_to_return.retry_on.Add(GRPC_STATUS_CANCELLED);
644
+ retry_policy.retry_on.Add(GRPC_STATUS_CANCELLED);
639
645
  } else if (code == "deadline-exceeded") {
640
- retry_to_return.retry_on.Add(GRPC_STATUS_DEADLINE_EXCEEDED);
646
+ retry_policy.retry_on.Add(GRPC_STATUS_DEADLINE_EXCEEDED);
641
647
  } else if (code == "internal") {
642
- retry_to_return.retry_on.Add(GRPC_STATUS_INTERNAL);
648
+ retry_policy.retry_on.Add(GRPC_STATUS_INTERNAL);
643
649
  } else if (code == "resource-exhausted") {
644
- retry_to_return.retry_on.Add(GRPC_STATUS_RESOURCE_EXHAUSTED);
650
+ retry_policy.retry_on.Add(GRPC_STATUS_RESOURCE_EXHAUSTED);
645
651
  } else if (code == "unavailable") {
646
- retry_to_return.retry_on.Add(GRPC_STATUS_UNAVAILABLE);
652
+ retry_policy.retry_on.Add(GRPC_STATUS_UNAVAILABLE);
647
653
  } else {
648
654
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
649
655
  gpr_log(GPR_INFO, "Unsupported retry_on policy %s.",
@@ -652,185 +658,90 @@ grpc_error_handle RetryPolicyParse(
652
658
  }
653
659
  }
654
660
  const google_protobuf_UInt32Value* num_retries =
655
- envoy_config_route_v3_RetryPolicy_num_retries(retry_policy);
661
+ envoy_config_route_v3_RetryPolicy_num_retries(retry_policy_proto);
656
662
  if (num_retries != nullptr) {
657
663
  uint32_t num_retries_value = google_protobuf_UInt32Value_value(num_retries);
658
664
  if (num_retries_value == 0) {
659
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
660
- "RouteAction RetryPolicy num_retries set to invalid value 0."));
665
+ ValidationErrors::ScopedField field(errors, ".num_retries");
666
+ errors->AddError("must be greater than 0");
661
667
  } else {
662
- retry_to_return.num_retries = num_retries_value;
668
+ retry_policy.num_retries = num_retries_value;
663
669
  }
664
670
  } else {
665
- retry_to_return.num_retries = 1;
671
+ retry_policy.num_retries = 1;
666
672
  }
667
673
  const envoy_config_route_v3_RetryPolicy_RetryBackOff* backoff =
668
- envoy_config_route_v3_RetryPolicy_retry_back_off(retry_policy);
674
+ envoy_config_route_v3_RetryPolicy_retry_back_off(retry_policy_proto);
669
675
  if (backoff != nullptr) {
670
- const google_protobuf_Duration* base_interval =
671
- envoy_config_route_v3_RetryPolicy_RetryBackOff_base_interval(backoff);
672
- if (base_interval == nullptr) {
673
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
674
- "RouteAction RetryPolicy RetryBackoff missing base interval."));
675
- } else {
676
- retry_to_return.retry_back_off.base_interval =
677
- ParseDuration(base_interval);
676
+ ValidationErrors::ScopedField field(errors, ".retry_back_off");
677
+ {
678
+ ValidationErrors::ScopedField field(errors, ".base_interval");
679
+ const google_protobuf_Duration* base_interval =
680
+ envoy_config_route_v3_RetryPolicy_RetryBackOff_base_interval(backoff);
681
+ if (base_interval == nullptr) {
682
+ errors->AddError("field not present");
683
+ } else {
684
+ retry_policy.retry_back_off.base_interval =
685
+ ParseDuration(base_interval, errors);
686
+ }
678
687
  }
679
- const google_protobuf_Duration* max_interval =
680
- envoy_config_route_v3_RetryPolicy_RetryBackOff_max_interval(backoff);
681
- Duration max;
682
- if (max_interval != nullptr) {
683
- max = ParseDuration(max_interval);
684
- } else {
685
- // if max interval is not set, it is 10x the base.
686
- max = 10 * retry_to_return.retry_back_off.base_interval;
688
+ {
689
+ ValidationErrors::ScopedField field(errors, ".max_interval");
690
+ const google_protobuf_Duration* max_interval =
691
+ envoy_config_route_v3_RetryPolicy_RetryBackOff_max_interval(backoff);
692
+ Duration max;
693
+ if (max_interval != nullptr) {
694
+ max = ParseDuration(max_interval, errors);
695
+ } else {
696
+ // if max interval is not set, it is 10x the base.
697
+ max = 10 * retry_policy.retry_back_off.base_interval;
698
+ }
699
+ retry_policy.retry_back_off.max_interval = max;
687
700
  }
688
- retry_to_return.retry_back_off.max_interval = max;
689
701
  } else {
690
- retry_to_return.retry_back_off.base_interval = Duration::Milliseconds(25);
691
- retry_to_return.retry_back_off.max_interval = Duration::Milliseconds(250);
692
- }
693
- if (errors.empty()) {
694
- *retry = retry_to_return;
695
- return GRPC_ERROR_NONE;
696
- } else {
697
- return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing retry policy",
698
- &errors);
702
+ retry_policy.retry_back_off.base_interval = Duration::Milliseconds(25);
703
+ retry_policy.retry_back_off.max_interval = Duration::Milliseconds(250);
699
704
  }
705
+ return retry_policy;
700
706
  }
701
707
 
702
- grpc_error_handle RouteActionParse(
703
- const XdsEncodingContext& context,
704
- const envoy_config_route_v3_Route* route_msg,
708
+ absl::optional<XdsRouteConfigResource::Route::RouteAction> RouteActionParse(
709
+ const XdsResourceType::DecodeContext& context,
710
+ const envoy_config_route_v3_RouteAction* route_action_proto,
705
711
  const std::map<std::string /*cluster_specifier_plugin_name*/,
706
712
  std::string /*LB policy config*/>&
707
713
  cluster_specifier_plugin_map,
708
- XdsRouteConfigResource::Route::RouteAction* route, bool* ignore_route) {
709
- const envoy_config_route_v3_RouteAction* route_action =
710
- envoy_config_route_v3_Route_route(route_msg);
711
- // Get the cluster or weighted_clusters in the RouteAction.
712
- if (envoy_config_route_v3_RouteAction_has_cluster(route_action)) {
713
- std::string cluster_name = UpbStringToStdString(
714
- envoy_config_route_v3_RouteAction_cluster(route_action));
715
- if (cluster_name.empty()) {
716
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
717
- "RouteAction cluster contains empty cluster name.");
718
- }
719
- route->action
720
- .emplace<XdsRouteConfigResource::Route::RouteAction::kClusterIndex>(
721
- std::move(cluster_name));
722
- } else if (envoy_config_route_v3_RouteAction_has_weighted_clusters(
723
- route_action)) {
724
- std::vector<XdsRouteConfigResource::Route::RouteAction::ClusterWeight>
725
- action_weighted_clusters;
726
- const envoy_config_route_v3_WeightedCluster* weighted_cluster =
727
- envoy_config_route_v3_RouteAction_weighted_clusters(route_action);
728
- uint32_t total_weight = 100;
729
- const google_protobuf_UInt32Value* weight =
730
- envoy_config_route_v3_WeightedCluster_total_weight(weighted_cluster);
731
- if (weight != nullptr) {
732
- total_weight = google_protobuf_UInt32Value_value(weight);
733
- }
734
- size_t clusters_size;
735
- const envoy_config_route_v3_WeightedCluster_ClusterWeight* const* clusters =
736
- envoy_config_route_v3_WeightedCluster_clusters(weighted_cluster,
737
- &clusters_size);
738
- uint32_t sum_of_weights = 0;
739
- for (size_t j = 0; j < clusters_size; ++j) {
740
- const envoy_config_route_v3_WeightedCluster_ClusterWeight*
741
- cluster_weight = clusters[j];
742
- XdsRouteConfigResource::Route::RouteAction::ClusterWeight cluster;
743
- cluster.name = UpbStringToStdString(
744
- envoy_config_route_v3_WeightedCluster_ClusterWeight_name(
745
- cluster_weight));
746
- if (cluster.name.empty()) {
747
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
748
- "RouteAction weighted_cluster cluster contains empty cluster "
749
- "name.");
750
- }
751
- const google_protobuf_UInt32Value* weight =
752
- envoy_config_route_v3_WeightedCluster_ClusterWeight_weight(
753
- cluster_weight);
754
- if (weight == nullptr) {
755
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
756
- "RouteAction weighted_cluster cluster missing weight");
757
- }
758
- cluster.weight = google_protobuf_UInt32Value_value(weight);
759
- if (cluster.weight == 0) continue;
760
- sum_of_weights += cluster.weight;
761
- if (context.use_v3) {
762
- grpc_error_handle error = ParseTypedPerFilterConfig<
763
- envoy_config_route_v3_WeightedCluster_ClusterWeight,
764
- envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry>(
765
- context, cluster_weight,
766
- envoy_config_route_v3_WeightedCluster_ClusterWeight_typed_per_filter_config_next,
767
- envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_key,
768
- envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_value,
769
- &cluster.typed_per_filter_config);
770
- if (error != GRPC_ERROR_NONE) return error;
771
- }
772
- action_weighted_clusters.emplace_back(std::move(cluster));
773
- }
774
- if (total_weight != sum_of_weights) {
775
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
776
- "RouteAction weighted_cluster has incorrect total weight");
777
- }
778
- if (action_weighted_clusters.empty()) {
779
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
780
- "RouteAction weighted_cluster has no valid clusters specified.");
781
- }
782
- route->action = std::move(action_weighted_clusters);
783
- } else if (XdsRlsEnabled() &&
784
- envoy_config_route_v3_RouteAction_has_cluster_specifier_plugin(
785
- route_action)) {
786
- std::string plugin_name = UpbStringToStdString(
787
- envoy_config_route_v3_RouteAction_cluster_specifier_plugin(
788
- route_action));
789
- if (plugin_name.empty()) {
790
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
791
- "RouteAction cluster contains empty cluster specifier plugin name.");
792
- }
793
- auto it = cluster_specifier_plugin_map.find(plugin_name);
794
- if (it == cluster_specifier_plugin_map.end()) {
795
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
796
- absl::StrCat("RouteAction cluster contains cluster specifier plugin "
797
- "name not configured: ",
798
- plugin_name));
799
- }
800
- if (it->second.empty()) *ignore_route = true;
801
- route->action.emplace<XdsRouteConfigResource::Route::RouteAction::
802
- kClusterSpecifierPluginIndex>(
803
- std::move(plugin_name));
804
- } else {
805
- // No cluster or weighted_clusters or plugin found in RouteAction, ignore
806
- // this route.
807
- *ignore_route = true;
808
- }
809
- if (!*ignore_route) {
810
- const envoy_config_route_v3_RouteAction_MaxStreamDuration*
811
- max_stream_duration =
812
- envoy_config_route_v3_RouteAction_max_stream_duration(route_action);
813
- if (max_stream_duration != nullptr) {
814
- const google_protobuf_Duration* duration =
815
- envoy_config_route_v3_RouteAction_MaxStreamDuration_grpc_timeout_header_max(
714
+ ValidationErrors* errors) {
715
+ XdsRouteConfigResource::Route::RouteAction route_action;
716
+ // grpc_timeout_header_max or max_stream_duration
717
+ const auto* max_stream_duration =
718
+ envoy_config_route_v3_RouteAction_max_stream_duration(route_action_proto);
719
+ if (max_stream_duration != nullptr) {
720
+ ValidationErrors::ScopedField field(errors, ".max_stream_duration");
721
+ const google_protobuf_Duration* duration =
722
+ envoy_config_route_v3_RouteAction_MaxStreamDuration_grpc_timeout_header_max(
723
+ max_stream_duration);
724
+ if (duration != nullptr) {
725
+ ValidationErrors::ScopedField field(errors, ".grpc_timeout_header_max");
726
+ route_action.max_stream_duration = ParseDuration(duration, errors);
727
+ } else {
728
+ duration =
729
+ envoy_config_route_v3_RouteAction_MaxStreamDuration_max_stream_duration(
816
730
  max_stream_duration);
817
- if (duration == nullptr) {
818
- duration =
819
- envoy_config_route_v3_RouteAction_MaxStreamDuration_max_stream_duration(
820
- max_stream_duration);
821
- }
822
731
  if (duration != nullptr) {
823
- route->max_stream_duration = ParseDuration(duration);
732
+ ValidationErrors::ScopedField field(errors, ".max_stream_duration");
733
+ route_action.max_stream_duration = ParseDuration(duration, errors);
824
734
  }
825
735
  }
826
736
  }
827
- // Get HashPolicy from RouteAction
737
+ // hash_policy
828
738
  size_t size = 0;
829
739
  const envoy_config_route_v3_RouteAction_HashPolicy* const* hash_policies =
830
- envoy_config_route_v3_RouteAction_hash_policy(route_action, &size);
740
+ envoy_config_route_v3_RouteAction_hash_policy(route_action_proto, &size);
831
741
  for (size_t i = 0; i < size; ++i) {
832
- const envoy_config_route_v3_RouteAction_HashPolicy* hash_policy =
833
- hash_policies[i];
742
+ ValidationErrors::ScopedField field(errors,
743
+ absl::StrCat(".hash_policy[", i, "]"));
744
+ const auto* hash_policy = hash_policies[i];
834
745
  XdsRouteConfigResource::Route::RouteAction::HashPolicy policy;
835
746
  policy.terminal =
836
747
  envoy_config_route_v3_RouteAction_HashPolicy_terminal(hash_policy);
@@ -839,90 +750,264 @@ grpc_error_handle RouteActionParse(
839
750
  filter_state;
840
751
  if ((header = envoy_config_route_v3_RouteAction_HashPolicy_header(
841
752
  hash_policy)) != nullptr) {
842
- policy.type =
843
- XdsRouteConfigResource::Route::RouteAction::HashPolicy::Type::HEADER;
844
- policy.header_name = UpbStringToStdString(
753
+ // header
754
+ ValidationErrors::ScopedField field(errors, ".header");
755
+ XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header
756
+ header_policy;
757
+ header_policy.header_name = UpbStringToStdString(
845
758
  envoy_config_route_v3_RouteAction_HashPolicy_Header_header_name(
846
759
  header));
847
- const struct envoy_type_matcher_v3_RegexMatchAndSubstitute*
848
- regex_rewrite =
849
- envoy_config_route_v3_RouteAction_HashPolicy_Header_regex_rewrite(
850
- header);
760
+ if (header_policy.header_name.empty()) {
761
+ ValidationErrors::ScopedField field(errors, ".header_name");
762
+ errors->AddError("must be non-empty");
763
+ }
764
+ // regex_rewrite
765
+ const auto* regex_rewrite =
766
+ envoy_config_route_v3_RouteAction_HashPolicy_Header_regex_rewrite(
767
+ header);
851
768
  if (regex_rewrite != nullptr) {
852
- const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
769
+ ValidationErrors::ScopedField field(errors, ".regex_rewrite.pattern");
770
+ const auto* pattern =
853
771
  envoy_type_matcher_v3_RegexMatchAndSubstitute_pattern(
854
772
  regex_rewrite);
855
- if (regex_matcher == nullptr) {
856
- gpr_log(
857
- GPR_DEBUG,
858
- "RouteAction HashPolicy contains policy specifier Header with "
859
- "RegexMatchAndSubstitution but RegexMatcher pattern is "
860
- "missing");
773
+ if (pattern == nullptr) {
774
+ errors->AddError("field not present");
775
+ continue;
776
+ }
777
+ ValidationErrors::ScopedField field2(errors, ".regex");
778
+ std::string regex = UpbStringToStdString(
779
+ envoy_type_matcher_v3_RegexMatcher_regex(pattern));
780
+ if (regex.empty()) {
781
+ errors->AddError("field not present");
861
782
  continue;
862
783
  }
863
784
  RE2::Options options;
864
- policy.regex = absl::make_unique<RE2>(
865
- UpbStringToStdString(
866
- envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher)),
867
- options);
868
- if (!policy.regex->ok()) {
869
- gpr_log(
870
- GPR_DEBUG,
871
- "RouteAction HashPolicy contains policy specifier Header with "
872
- "RegexMatchAndSubstitution but RegexMatcher pattern does not "
873
- "compile");
785
+ header_policy.regex = std::make_unique<RE2>(regex, options);
786
+ if (!header_policy.regex->ok()) {
787
+ errors->AddError(absl::StrCat("errors compiling regex: ",
788
+ header_policy.regex->error()));
874
789
  continue;
875
790
  }
876
- policy.regex_substitution = UpbStringToStdString(
791
+ header_policy.regex_substitution = UpbStringToStdString(
877
792
  envoy_type_matcher_v3_RegexMatchAndSubstitute_substitution(
878
793
  regex_rewrite));
879
794
  }
795
+ policy.policy = std::move(header_policy);
880
796
  } else if ((filter_state =
881
797
  envoy_config_route_v3_RouteAction_HashPolicy_filter_state(
882
798
  hash_policy)) != nullptr) {
799
+ // filter_state
883
800
  std::string key = UpbStringToStdString(
884
801
  envoy_config_route_v3_RouteAction_HashPolicy_FilterState_key(
885
802
  filter_state));
886
- if (key == "io.grpc.channel_id") {
887
- policy.type = XdsRouteConfigResource::Route::RouteAction::HashPolicy::
888
- Type::CHANNEL_ID;
889
- } else {
890
- gpr_log(GPR_DEBUG,
891
- "RouteAction HashPolicy contains policy specifier "
892
- "FilterState but "
893
- "key is not io.grpc.channel_id.");
894
- continue;
895
- }
803
+ if (key != "io.grpc.channel_id") continue;
804
+ policy.policy =
805
+ XdsRouteConfigResource::Route::RouteAction::HashPolicy::ChannelId();
896
806
  } else {
897
- gpr_log(GPR_DEBUG,
898
- "RouteAction HashPolicy contains unsupported policy specifier.");
807
+ // Unsupported hash policy type, ignore it.
899
808
  continue;
900
809
  }
901
- route->hash_policies.emplace_back(std::move(policy));
810
+ route_action.hash_policies.emplace_back(std::move(policy));
902
811
  }
903
812
  // Get retry policy
904
813
  const envoy_config_route_v3_RetryPolicy* retry_policy =
905
- envoy_config_route_v3_RouteAction_retry_policy(route_action);
814
+ envoy_config_route_v3_RouteAction_retry_policy(route_action_proto);
906
815
  if (retry_policy != nullptr) {
907
- absl::optional<XdsRouteConfigResource::RetryPolicy> retry;
908
- grpc_error_handle error = RetryPolicyParse(context, retry_policy, &retry);
909
- if (error != GRPC_ERROR_NONE) return error;
910
- route->retry_policy = retry;
816
+ ValidationErrors::ScopedField field(errors, ".retry_policy");
817
+ route_action.retry_policy = RetryPolicyParse(context, retry_policy, errors);
818
+ }
819
+ // Parse cluster specifier, which is one of several options.
820
+ if (envoy_config_route_v3_RouteAction_has_cluster(route_action_proto)) {
821
+ // Cluster name.
822
+ std::string cluster_name = UpbStringToStdString(
823
+ envoy_config_route_v3_RouteAction_cluster(route_action_proto));
824
+ if (cluster_name.empty()) {
825
+ ValidationErrors::ScopedField field(errors, ".cluster");
826
+ errors->AddError("must be non-empty");
827
+ }
828
+ route_action.action =
829
+ XdsRouteConfigResource::Route::RouteAction::ClusterName{
830
+ std::move(cluster_name)};
831
+ } else if (envoy_config_route_v3_RouteAction_has_weighted_clusters(
832
+ route_action_proto)) {
833
+ // WeightedClusters.
834
+ ValidationErrors::ScopedField field(errors, ".weighted_clusters");
835
+ const envoy_config_route_v3_WeightedCluster* weighted_clusters_proto =
836
+ envoy_config_route_v3_RouteAction_weighted_clusters(route_action_proto);
837
+ GPR_ASSERT(weighted_clusters_proto != nullptr);
838
+ std::vector<XdsRouteConfigResource::Route::RouteAction::ClusterWeight>
839
+ action_weighted_clusters;
840
+ uint64_t total_weight = 0;
841
+ size_t clusters_size;
842
+ const envoy_config_route_v3_WeightedCluster_ClusterWeight* const* clusters =
843
+ envoy_config_route_v3_WeightedCluster_clusters(weighted_clusters_proto,
844
+ &clusters_size);
845
+ for (size_t i = 0; i < clusters_size; ++i) {
846
+ ValidationErrors::ScopedField field(errors,
847
+ absl::StrCat(".clusters[", i, "]"));
848
+ const auto* cluster_proto = clusters[i];
849
+ XdsRouteConfigResource::Route::RouteAction::ClusterWeight cluster;
850
+ // typed_per_filter_config
851
+ {
852
+ ValidationErrors::ScopedField field(errors, ".typed_per_filter_config");
853
+ cluster.typed_per_filter_config = ParseTypedPerFilterConfig<
854
+ envoy_config_route_v3_WeightedCluster_ClusterWeight,
855
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry>(
856
+ context, cluster_proto,
857
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_typed_per_filter_config_next,
858
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_key,
859
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_value,
860
+ errors);
861
+ }
862
+ // name
863
+ cluster.name = UpbStringToStdString(
864
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_name(
865
+ cluster_proto));
866
+ if (cluster.name.empty()) {
867
+ ValidationErrors::ScopedField field(errors, ".name");
868
+ errors->AddError("must be non-empty");
869
+ }
870
+ // weight
871
+ const google_protobuf_UInt32Value* weight_proto =
872
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_weight(
873
+ cluster_proto);
874
+ if (weight_proto == nullptr) {
875
+ ValidationErrors::ScopedField field(errors, ".weight");
876
+ errors->AddError("field not present");
877
+ } else {
878
+ cluster.weight = google_protobuf_UInt32Value_value(weight_proto);
879
+ if (cluster.weight == 0) continue;
880
+ total_weight += cluster.weight;
881
+ }
882
+ // Add entry to WeightedClusters.
883
+ action_weighted_clusters.emplace_back(std::move(cluster));
884
+ }
885
+ if (action_weighted_clusters.empty()) {
886
+ errors->AddError("no valid clusters specified");
887
+ } else if (total_weight > std::numeric_limits<uint32_t>::max()) {
888
+ errors->AddError("sum of cluster weights exceeds uint32 max");
889
+ }
890
+ route_action.action = std::move(action_weighted_clusters);
891
+ } else if (XdsRlsEnabled() &&
892
+ envoy_config_route_v3_RouteAction_has_cluster_specifier_plugin(
893
+ route_action_proto)) {
894
+ // ClusterSpecifierPlugin
895
+ ValidationErrors::ScopedField field(errors, ".cluster_specifier_plugin");
896
+ std::string plugin_name = UpbStringToStdString(
897
+ envoy_config_route_v3_RouteAction_cluster_specifier_plugin(
898
+ route_action_proto));
899
+ if (plugin_name.empty()) {
900
+ errors->AddError("must be non-empty");
901
+ return absl::nullopt;
902
+ }
903
+ auto it = cluster_specifier_plugin_map.find(plugin_name);
904
+ if (it == cluster_specifier_plugin_map.end()) {
905
+ errors->AddError(absl::StrCat("unknown cluster specifier plugin name \"",
906
+ plugin_name, "\""));
907
+ } else {
908
+ // If the cluster specifier config is empty, that means that the
909
+ // plugin was unsupported but optional. In that case, skip this route.
910
+ if (it->second.empty()) return absl::nullopt;
911
+ }
912
+ route_action.action =
913
+ XdsRouteConfigResource::Route::RouteAction::ClusterSpecifierPluginName{
914
+ std::move(plugin_name)};
915
+ } else {
916
+ // Not a supported cluster specifier, so ignore this route.
917
+ return absl::nullopt;
911
918
  }
912
- return GRPC_ERROR_NONE;
919
+ return route_action;
920
+ }
921
+
922
+ absl::optional<XdsRouteConfigResource::Route> ParseRoute(
923
+ const XdsResourceType::DecodeContext& context,
924
+ const envoy_config_route_v3_Route* route_proto,
925
+ const absl::optional<XdsRouteConfigResource::RetryPolicy>&
926
+ virtual_host_retry_policy,
927
+ const XdsRouteConfigResource::ClusterSpecifierPluginMap&
928
+ cluster_specifier_plugin_map,
929
+ std::set<absl::string_view>* cluster_specifier_plugins_not_seen,
930
+ ValidationErrors* errors) {
931
+ XdsRouteConfigResource::Route route;
932
+ // Parse route match.
933
+ {
934
+ ValidationErrors::ScopedField field(errors, ".match");
935
+ const auto* match = envoy_config_route_v3_Route_match(route_proto);
936
+ if (match == nullptr) {
937
+ errors->AddError("field not present");
938
+ return absl::nullopt;
939
+ }
940
+ // Skip routes with query_parameters set.
941
+ size_t query_parameters_size;
942
+ static_cast<void>(envoy_config_route_v3_RouteMatch_query_parameters(
943
+ match, &query_parameters_size));
944
+ if (query_parameters_size > 0) return absl::nullopt;
945
+ // Parse matchers.
946
+ auto path_matcher = RoutePathMatchParse(match, errors);
947
+ if (!path_matcher.has_value()) return absl::nullopt;
948
+ route.matchers.path_matcher = std::move(*path_matcher);
949
+ RouteHeaderMatchersParse(match, &route, errors);
950
+ RouteRuntimeFractionParse(match, &route, errors);
951
+ }
952
+ // Parse route action.
953
+ const envoy_config_route_v3_RouteAction* route_action_proto =
954
+ envoy_config_route_v3_Route_route(route_proto);
955
+ if (route_action_proto != nullptr) {
956
+ ValidationErrors::ScopedField field(errors, ".route");
957
+ auto route_action = RouteActionParse(context, route_action_proto,
958
+ cluster_specifier_plugin_map, errors);
959
+ if (!route_action.has_value()) return absl::nullopt;
960
+ // If the route does not have a retry policy but the vhost does,
961
+ // use the vhost retry policy for this route.
962
+ if (!route_action->retry_policy.has_value()) {
963
+ route_action->retry_policy = virtual_host_retry_policy;
964
+ }
965
+ // Mark off plugins used in route action.
966
+ auto* cluster_specifier_action = absl::get_if<
967
+ XdsRouteConfigResource::Route::RouteAction::ClusterSpecifierPluginName>(
968
+ &route_action->action);
969
+ if (cluster_specifier_action != nullptr) {
970
+ cluster_specifier_plugins_not_seen->erase(
971
+ cluster_specifier_action->cluster_specifier_plugin_name);
972
+ }
973
+ route.action = std::move(*route_action);
974
+ } else if (envoy_config_route_v3_Route_has_non_forwarding_action(
975
+ route_proto)) {
976
+ route.action = XdsRouteConfigResource::Route::NonForwardingAction();
977
+ } else {
978
+ // Leave route.action initialized to UnknownAction (its default).
979
+ }
980
+ // Parse typed_per_filter_config.
981
+ {
982
+ ValidationErrors::ScopedField field(errors, ".typed_per_filter_config");
983
+ route.typed_per_filter_config = ParseTypedPerFilterConfig<
984
+ envoy_config_route_v3_Route,
985
+ envoy_config_route_v3_Route_TypedPerFilterConfigEntry>(
986
+ context, route_proto,
987
+ envoy_config_route_v3_Route_typed_per_filter_config_next,
988
+ envoy_config_route_v3_Route_TypedPerFilterConfigEntry_key,
989
+ envoy_config_route_v3_Route_TypedPerFilterConfigEntry_value, errors);
990
+ }
991
+ return route;
913
992
  }
914
993
 
915
994
  } // namespace
916
995
 
917
- grpc_error_handle XdsRouteConfigResource::Parse(
918
- const XdsEncodingContext& context,
996
+ XdsRouteConfigResource XdsRouteConfigResource::Parse(
997
+ const XdsResourceType::DecodeContext& context,
919
998
  const envoy_config_route_v3_RouteConfiguration* route_config,
920
- XdsRouteConfigResource* rds_update) {
921
- // Get the cluster spcifier plugins
999
+ ValidationErrors* errors) {
1000
+ XdsRouteConfigResource rds_update;
1001
+ // Get the cluster spcifier plugin map.
922
1002
  if (XdsRlsEnabled()) {
923
- grpc_error_handle error =
924
- ClusterSpecifierPluginParse(context, route_config, rds_update);
925
- if (error != GRPC_ERROR_NONE) return error;
1003
+ rds_update.cluster_specifier_plugin_map =
1004
+ ClusterSpecifierPluginParse(context, route_config, errors);
1005
+ }
1006
+ // Build a set of configured cluster_specifier_plugin names to make sure
1007
+ // each is actually referenced by a route action.
1008
+ std::set<absl::string_view> cluster_specifier_plugins_not_seen;
1009
+ for (auto& plugin : rds_update.cluster_specifier_plugin_map) {
1010
+ cluster_specifier_plugins_not_seen.emplace(plugin.first);
926
1011
  }
927
1012
  // Get the virtual hosts.
928
1013
  size_t num_virtual_hosts;
@@ -930,9 +1015,11 @@ grpc_error_handle XdsRouteConfigResource::Parse(
930
1015
  envoy_config_route_v3_RouteConfiguration_virtual_hosts(
931
1016
  route_config, &num_virtual_hosts);
932
1017
  for (size_t i = 0; i < num_virtual_hosts; ++i) {
933
- rds_update->virtual_hosts.emplace_back();
1018
+ ValidationErrors::ScopedField field(
1019
+ errors, absl::StrCat(".virtual_hosts[", i, "]"));
1020
+ rds_update.virtual_hosts.emplace_back();
934
1021
  XdsRouteConfigResource::VirtualHost& vhost =
935
- rds_update->virtual_hosts.back();
1022
+ rds_update.virtual_hosts.back();
936
1023
  // Parse domains.
937
1024
  size_t domain_size;
938
1025
  upb_StringView const* domains = envoy_config_route_v3_VirtualHost_domains(
@@ -940,25 +1027,28 @@ grpc_error_handle XdsRouteConfigResource::Parse(
940
1027
  for (size_t j = 0; j < domain_size; ++j) {
941
1028
  std::string domain_pattern = UpbStringToStdString(domains[j]);
942
1029
  if (!XdsRouting::IsValidDomainPattern(domain_pattern)) {
943
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
944
- absl::StrCat("Invalid domain pattern \"", domain_pattern, "\"."));
1030
+ ValidationErrors::ScopedField field(errors,
1031
+ absl::StrCat(".domains[", j, "]"));
1032
+ errors->AddError(
1033
+ absl::StrCat("invalid domain pattern \"", domain_pattern, "\""));
945
1034
  }
946
1035
  vhost.domains.emplace_back(std::move(domain_pattern));
947
1036
  }
948
1037
  if (vhost.domains.empty()) {
949
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("VirtualHost has no domains");
1038
+ ValidationErrors::ScopedField field(errors, ".domains");
1039
+ errors->AddError("must be non-empty");
950
1040
  }
951
1041
  // Parse typed_per_filter_config.
952
- if (context.use_v3) {
953
- grpc_error_handle error = ParseTypedPerFilterConfig<
1042
+ {
1043
+ ValidationErrors::ScopedField field(errors, ".typed_per_filter_config");
1044
+ vhost.typed_per_filter_config = ParseTypedPerFilterConfig<
954
1045
  envoy_config_route_v3_VirtualHost,
955
1046
  envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry>(
956
1047
  context, virtual_hosts[i],
957
1048
  envoy_config_route_v3_VirtualHost_typed_per_filter_config_next,
958
1049
  envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_key,
959
1050
  envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_value,
960
- &vhost.typed_per_filter_config);
961
- if (error != GRPC_ERROR_NONE) return error;
1051
+ errors);
962
1052
  }
963
1053
  // Parse retry policy.
964
1054
  absl::optional<XdsRouteConfigResource::RetryPolicy>
@@ -966,97 +1056,29 @@ grpc_error_handle XdsRouteConfigResource::Parse(
966
1056
  const envoy_config_route_v3_RetryPolicy* retry_policy =
967
1057
  envoy_config_route_v3_VirtualHost_retry_policy(virtual_hosts[i]);
968
1058
  if (retry_policy != nullptr) {
969
- grpc_error_handle error =
970
- RetryPolicyParse(context, retry_policy, &virtual_host_retry_policy);
971
- if (error != GRPC_ERROR_NONE) return error;
1059
+ ValidationErrors::ScopedField field(errors, ".retry_policy");
1060
+ virtual_host_retry_policy =
1061
+ RetryPolicyParse(context, retry_policy, errors);
972
1062
  }
973
1063
  // Parse routes.
1064
+ ValidationErrors::ScopedField field2(errors, ".routes");
974
1065
  size_t num_routes;
975
1066
  const envoy_config_route_v3_Route* const* routes =
976
1067
  envoy_config_route_v3_VirtualHost_routes(virtual_hosts[i], &num_routes);
977
- if (num_routes < 1) {
978
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
979
- "No route found in the virtual host.");
980
- }
981
- // Build a set of cluster_specifier_plugin configured to make sure each is
982
- // actually referenced by a route action.
983
- std::set<absl::string_view> cluster_specifier_plugins;
984
- for (auto& plugin : rds_update->cluster_specifier_plugin_map) {
985
- cluster_specifier_plugins.emplace(plugin.first);
986
- }
987
- // Loop over the whole list of routes
988
1068
  for (size_t j = 0; j < num_routes; ++j) {
989
- const envoy_config_route_v3_RouteMatch* match =
990
- envoy_config_route_v3_Route_match(routes[j]);
991
- if (match == nullptr) {
992
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Match can't be null.");
993
- }
994
- size_t query_parameters_size;
995
- static_cast<void>(envoy_config_route_v3_RouteMatch_query_parameters(
996
- match, &query_parameters_size));
997
- if (query_parameters_size > 0) {
998
- continue;
999
- }
1000
- XdsRouteConfigResource::Route route;
1001
- bool ignore_route = false;
1002
- grpc_error_handle error =
1003
- RoutePathMatchParse(match, &route, &ignore_route);
1004
- if (error != GRPC_ERROR_NONE) return error;
1005
- if (ignore_route) continue;
1006
- error = RouteHeaderMatchersParse(match, &route);
1007
- if (error != GRPC_ERROR_NONE) return error;
1008
- error = RouteRuntimeFractionParse(match, &route);
1009
- if (error != GRPC_ERROR_NONE) return error;
1010
- if (envoy_config_route_v3_Route_has_route(routes[j])) {
1011
- route.action.emplace<XdsRouteConfigResource::Route::RouteAction>();
1012
- auto& route_action =
1013
- absl::get<XdsRouteConfigResource::Route::RouteAction>(route.action);
1014
- error = RouteActionParse(context, routes[j],
1015
- rds_update->cluster_specifier_plugin_map,
1016
- &route_action, &ignore_route);
1017
- if (error != GRPC_ERROR_NONE) return error;
1018
- if (ignore_route) continue;
1019
- if (route_action.retry_policy == absl::nullopt &&
1020
- retry_policy != nullptr) {
1021
- route_action.retry_policy = virtual_host_retry_policy;
1022
- }
1023
- // Mark off plugins used in route action.
1024
- std::string* cluster_specifier_action =
1025
- absl::get_if<XdsRouteConfigResource::Route::RouteAction::
1026
- kClusterSpecifierPluginIndex>(
1027
- &route_action.action);
1028
- if (cluster_specifier_action != nullptr) {
1029
- cluster_specifier_plugins.erase(*cluster_specifier_action);
1030
- }
1031
- } else if (envoy_config_route_v3_Route_has_non_forwarding_action(
1032
- routes[j])) {
1033
- route.action
1034
- .emplace<XdsRouteConfigResource::Route::NonForwardingAction>();
1035
- }
1036
- if (context.use_v3) {
1037
- grpc_error_handle error = ParseTypedPerFilterConfig<
1038
- envoy_config_route_v3_Route,
1039
- envoy_config_route_v3_Route_TypedPerFilterConfigEntry>(
1040
- context, routes[j],
1041
- envoy_config_route_v3_Route_typed_per_filter_config_next,
1042
- envoy_config_route_v3_Route_TypedPerFilterConfigEntry_key,
1043
- envoy_config_route_v3_Route_TypedPerFilterConfigEntry_value,
1044
- &route.typed_per_filter_config);
1045
- if (error != GRPC_ERROR_NONE) return error;
1046
- }
1047
- vhost.routes.emplace_back(std::move(route));
1048
- }
1049
- if (vhost.routes.empty()) {
1050
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No valid routes specified.");
1051
- }
1052
- // For plugins not used in route action, delete from the update to prevent
1053
- // further use.
1054
- for (auto& unused_plugin : cluster_specifier_plugins) {
1055
- rds_update->cluster_specifier_plugin_map.erase(
1056
- std::string(unused_plugin));
1069
+ ValidationErrors::ScopedField field(errors, absl::StrCat("[", j, "]"));
1070
+ auto route = ParseRoute(context, routes[j], virtual_host_retry_policy,
1071
+ rds_update.cluster_specifier_plugin_map,
1072
+ &cluster_specifier_plugins_not_seen, errors);
1073
+ if (route.has_value()) vhost.routes.emplace_back(std::move(*route));
1057
1074
  }
1058
1075
  }
1059
- return GRPC_ERROR_NONE;
1076
+ // For cluster specifier plugins that were not used in any route action,
1077
+ // delete them from the update, since they will never be used.
1078
+ for (auto& unused_plugin : cluster_specifier_plugins_not_seen) {
1079
+ rds_update.cluster_specifier_plugin_map.erase(std::string(unused_plugin));
1080
+ }
1081
+ return rds_update;
1060
1082
  }
1061
1083
 
1062
1084
  //
@@ -1066,7 +1088,7 @@ grpc_error_handle XdsRouteConfigResource::Parse(
1066
1088
  namespace {
1067
1089
 
1068
1090
  void MaybeLogRouteConfiguration(
1069
- const XdsEncodingContext& context,
1091
+ const XdsResourceType::DecodeContext& context,
1070
1092
  const envoy_config_route_v3_RouteConfiguration* route_config) {
1071
1093
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
1072
1094
  gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
@@ -1081,42 +1103,42 @@ void MaybeLogRouteConfiguration(
1081
1103
 
1082
1104
  } // namespace
1083
1105
 
1084
- absl::StatusOr<XdsResourceType::DecodeResult>
1085
- XdsRouteConfigResourceType::Decode(const XdsEncodingContext& context,
1086
- absl::string_view serialized_resource,
1087
- bool /*is_v2*/) const {
1106
+ XdsResourceType::DecodeResult XdsRouteConfigResourceType::Decode(
1107
+ const XdsResourceType::DecodeContext& context,
1108
+ absl::string_view serialized_resource) const {
1109
+ DecodeResult result;
1088
1110
  // Parse serialized proto.
1089
1111
  auto* resource = envoy_config_route_v3_RouteConfiguration_parse(
1090
1112
  serialized_resource.data(), serialized_resource.size(), context.arena);
1091
1113
  if (resource == nullptr) {
1092
- return absl::InvalidArgumentError(
1093
- "Can't parse RouteConfiguration resource.");
1114
+ result.resource =
1115
+ absl::InvalidArgumentError("Can't parse RouteConfiguration resource.");
1116
+ return result;
1094
1117
  }
1095
1118
  MaybeLogRouteConfiguration(context, resource);
1096
1119
  // Validate resource.
1097
- DecodeResult result;
1098
1120
  result.name = UpbStringToStdString(
1099
1121
  envoy_config_route_v3_RouteConfiguration_name(resource));
1100
- auto route_config_data = absl::make_unique<ResourceDataSubclass>();
1101
- grpc_error_handle error = XdsRouteConfigResource::Parse(
1102
- context, resource, &route_config_data->resource);
1103
- if (error != GRPC_ERROR_NONE) {
1104
- std::string error_str = grpc_error_std_string(error);
1105
- GRPC_ERROR_UNREF(error);
1122
+ ValidationErrors errors;
1123
+ auto rds_update = XdsRouteConfigResource::Parse(context, resource, &errors);
1124
+ if (!errors.ok()) {
1125
+ absl::Status status =
1126
+ errors.status("errors validating RouteConfiguration resource");
1106
1127
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
1107
1128
  gpr_log(GPR_ERROR, "[xds_client %p] invalid RouteConfiguration %s: %s",
1108
- context.client, result.name.c_str(), error_str.c_str());
1129
+ context.client, result.name->c_str(), status.ToString().c_str());
1109
1130
  }
1110
- result.resource = absl::InvalidArgumentError(error_str);
1131
+ result.resource = std::move(status);
1111
1132
  } else {
1112
1133
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
1113
1134
  gpr_log(GPR_INFO, "[xds_client %p] parsed RouteConfiguration %s: %s",
1114
- context.client, result.name.c_str(),
1115
- route_config_data->resource.ToString().c_str());
1135
+ context.client, result.name->c_str(),
1136
+ rds_update.ToString().c_str());
1116
1137
  }
1117
- result.resource = std::move(route_config_data);
1138
+ result.resource =
1139
+ std::make_unique<XdsRouteConfigResource>(std::move(rds_update));
1118
1140
  }
1119
- return std::move(result);
1141
+ return result;
1120
1142
  }
1121
1143
 
1122
1144
  } // namespace grpc_core