grpc 1.48.0 → 1.50.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 (846) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +114 -150
  3. data/include/grpc/event_engine/endpoint_config.h +11 -5
  4. data/include/grpc/event_engine/event_engine.h +20 -17
  5. data/include/grpc/impl/codegen/atm_gcc_atomic.h +19 -28
  6. data/include/grpc/impl/codegen/atm_gcc_sync.h +0 -2
  7. data/include/grpc/impl/codegen/atm_windows.h +0 -2
  8. data/include/grpc/impl/codegen/grpc_types.h +9 -8
  9. data/include/grpc/impl/codegen/port_platform.h +0 -8
  10. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +6 -6
  11. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
  12. data/src/core/ext/filters/client_channel/backup_poller.cc +4 -6
  13. data/src/core/ext/filters/client_channel/client_channel.cc +154 -218
  14. data/src/core/ext/filters/client_channel/client_channel.h +16 -9
  15. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  16. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  17. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +0 -16
  18. data/src/core/ext/filters/client_channel/config_selector.h +12 -4
  19. data/src/core/ext/filters/client_channel/connector.h +4 -5
  20. data/src/core/ext/filters/client_channel/http_proxy.cc +55 -74
  21. data/src/core/ext/filters/client_channel/http_proxy.h +15 -11
  22. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +20 -16
  23. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +11 -10
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +0 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +181 -194
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +20 -11
  31. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +250 -146
  33. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +41 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +35 -32
  35. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +195 -299
  36. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +237 -250
  37. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +12 -7
  38. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +431 -498
  39. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +31 -30
  40. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +27 -27
  41. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +108 -124
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +68 -76
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +131 -227
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +126 -121
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +325 -304
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +172 -101
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -16
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
  52. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  53. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +51 -32
  54. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +87 -41
  55. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +16 -6
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -13
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +167 -168
  58. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +40 -32
  59. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  60. data/src/core/ext/filters/client_channel/retry_filter.cc +25 -36
  61. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  62. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  63. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
  64. data/src/core/ext/filters/client_channel/subchannel.cc +86 -121
  65. data/src/core/ext/filters/client_channel/subchannel.h +20 -11
  66. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  67. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  68. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  69. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +4 -6
  70. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
  71. data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
  72. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +24 -19
  73. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +9 -1
  74. data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
  75. data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
  76. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -5
  77. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  78. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  79. data/src/core/ext/filters/http/client_authority_filter.h +1 -1
  80. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +2 -4
  81. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -2
  82. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -5
  83. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
  85. data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
  86. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
  87. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
  88. data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
  89. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
  90. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +40 -63
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +86 -107
  92. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  93. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -1
  94. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +155 -295
  95. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
  96. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +287 -0
  97. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1018 -0
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +139 -42
  99. data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -6
  100. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +1 -2
  101. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +27 -28
  103. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  104. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  105. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +30 -38
  107. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +1 -10
  108. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +11 -6
  109. data/src/core/ext/transport/chttp2/transport/internal.h +4 -1
  110. data/src/core/ext/transport/chttp2/transport/parsing.cc +44 -0
  111. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -14
  112. data/src/core/ext/transport/inproc/inproc_transport.cc +41 -77
  113. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  114. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  115. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  116. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  117. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  118. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  119. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  120. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  121. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  122. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  123. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  124. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  125. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  126. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  127. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  128. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  129. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  130. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  131. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  132. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  133. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  134. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  135. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  136. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  137. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  138. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  139. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  140. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  141. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  142. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  143. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  144. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  145. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  147. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  148. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  162. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  166. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  167. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  168. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  169. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  170. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  171. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  172. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  173. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  174. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  175. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  176. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  177. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  178. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  179. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  180. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  181. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  182. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  183. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  184. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  185. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  186. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  187. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  188. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  189. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  190. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  191. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  192. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  193. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  194. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  195. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  196. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  197. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  198. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  199. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  200. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  201. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  202. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  203. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  204. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  205. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  206. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  207. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  208. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  209. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  210. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  211. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  212. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  213. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  214. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  215. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  216. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  217. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  218. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  219. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  220. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  221. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  222. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  223. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  224. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  225. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  226. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  227. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  228. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  229. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  230. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  231. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  232. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  233. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  234. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  235. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  236. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  237. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  238. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  239. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  240. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  241. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  242. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  243. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  244. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  245. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  246. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
  247. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
  248. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
  249. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  250. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  251. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  252. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  253. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  254. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  255. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  256. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  257. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  258. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  259. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  260. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  261. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  262. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  263. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  264. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  265. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  266. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  267. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  268. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  273. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  274. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  275. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  276. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  277. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  278. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  279. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  280. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  281. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  282. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  283. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  284. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  285. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  286. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  287. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  288. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  289. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  290. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  291. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  292. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  293. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  294. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  295. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  296. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  297. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  298. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  299. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  300. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  301. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  302. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  303. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  304. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  305. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  306. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  307. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  308. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  309. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  310. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  311. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  312. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  313. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  314. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  315. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  316. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  317. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  318. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  319. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  320. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  321. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  322. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  323. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  324. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  325. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  326. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  327. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  328. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  329. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  330. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  331. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  332. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  333. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  334. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  335. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  336. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  337. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  338. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  339. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  340. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  341. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  342. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  343. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  344. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  345. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  346. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  347. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  348. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  349. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  350. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  351. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  352. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  353. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  354. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  355. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  356. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  357. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  358. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  359. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  360. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  361. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  362. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  363. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  364. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  365. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  366. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  367. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  368. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  369. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  370. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  371. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  372. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  373. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  374. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  375. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  376. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  377. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  378. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  379. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  380. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  381. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  382. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  383. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  384. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  385. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  386. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  387. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  388. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  389. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  390. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  391. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  392. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  393. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  394. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  395. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  396. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  397. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  398. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  399. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  400. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  401. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  402. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  403. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  404. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  405. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  406. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  407. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  408. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  409. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  410. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  411. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  412. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  413. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  414. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  415. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  416. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  417. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  418. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  419. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  420. data/src/core/ext/xds/certificate_provider_store.cc +63 -3
  421. data/src/core/ext/xds/certificate_provider_store.h +9 -1
  422. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +5 -5
  423. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -1
  424. data/src/core/ext/xds/upb_utils.h +0 -21
  425. data/src/core/ext/xds/xds_api.cc +73 -102
  426. data/src/core/ext/xds/xds_api.h +26 -28
  427. data/src/core/ext/xds/xds_bootstrap.cc +5 -550
  428. data/src/core/ext/xds/xds_bootstrap.h +39 -91
  429. data/src/core/ext/xds/xds_bootstrap_grpc.cc +370 -0
  430. data/src/core/ext/xds/xds_bootstrap_grpc.h +169 -0
  431. data/src/core/ext/xds/xds_certificate_provider.h +9 -0
  432. data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
  433. data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
  434. data/src/core/ext/xds/xds_client.cc +732 -1317
  435. data/src/core/ext/xds/xds_client.h +33 -59
  436. data/src/core/ext/xds/xds_client_grpc.cc +229 -0
  437. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  438. data/src/core/ext/xds/xds_client_stats.cc +4 -4
  439. data/src/core/ext/xds/xds_cluster.cc +162 -165
  440. data/src/core/ext/xds/xds_cluster.h +8 -7
  441. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +12 -14
  442. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
  443. data/src/core/ext/xds/xds_common_types.cc +140 -108
  444. data/src/core/ext/xds/xds_common_types.h +6 -7
  445. data/src/core/ext/xds/xds_endpoint.cc +87 -85
  446. data/src/core/ext/xds/xds_endpoint.h +4 -5
  447. data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
  448. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  449. data/src/core/ext/xds/xds_http_filters.h +3 -3
  450. data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
  451. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  452. data/src/core/ext/xds/xds_lb_policy_registry.cc +21 -22
  453. data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
  454. data/src/core/ext/xds/xds_listener.cc +348 -313
  455. data/src/core/ext/xds/xds_listener.h +4 -5
  456. data/src/core/ext/xds/xds_resource_type.h +23 -9
  457. data/src/core/ext/xds/xds_route_config.cc +193 -191
  458. data/src/core/ext/xds/xds_route_config.h +31 -17
  459. data/src/core/ext/xds/xds_routing.cc +3 -6
  460. data/src/core/ext/xds/xds_routing.h +7 -9
  461. data/src/core/ext/xds/xds_server_config_fetcher.cc +81 -84
  462. data/src/core/ext/xds/xds_transport.h +86 -0
  463. data/src/core/ext/xds/xds_transport_grpc.cc +357 -0
  464. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  465. data/src/core/lib/address_utils/parse_address.cc +19 -17
  466. data/src/core/lib/address_utils/parse_address.h +8 -5
  467. data/src/core/lib/avl/avl.h +47 -25
  468. data/src/core/lib/backoff/backoff.cc +2 -4
  469. data/src/core/lib/channel/call_finalization.h +1 -3
  470. data/src/core/lib/channel/call_tracer.h +1 -1
  471. data/src/core/lib/channel/channel_args.cc +88 -19
  472. data/src/core/lib/channel/channel_args.h +218 -67
  473. data/src/core/lib/channel/channel_stack.cc +0 -1
  474. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  475. data/src/core/lib/channel/channel_stack_builder.h +2 -2
  476. data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
  477. data/src/core/lib/channel/channel_trace.cc +3 -4
  478. data/src/core/lib/channel/channelz.cc +27 -37
  479. data/src/core/lib/channel/channelz.h +9 -0
  480. data/src/core/lib/channel/promise_based_filter.cc +18 -19
  481. data/src/core/lib/channel/promise_based_filter.h +0 -1
  482. data/src/core/lib/channel/status_util.cc +27 -0
  483. data/src/core/lib/channel/status_util.h +10 -0
  484. data/src/core/lib/config/core_configuration.cc +5 -1
  485. data/src/core/lib/config/core_configuration.h +81 -35
  486. data/src/core/lib/debug/stats.cc +39 -46
  487. data/src/core/lib/debug/stats.h +11 -13
  488. data/src/core/lib/debug/stats_data.cc +118 -614
  489. data/src/core/lib/debug/stats_data.h +67 -465
  490. data/src/core/lib/debug/trace.cc +0 -2
  491. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +12 -20
  492. data/src/core/lib/event_engine/channel_args_endpoint_config.h +13 -7
  493. data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
  494. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
  495. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  496. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  497. data/src/core/lib/event_engine/executor/executor.h +38 -0
  498. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  499. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  500. data/src/core/lib/event_engine/forkable.cc +101 -0
  501. data/src/core/lib/event_engine/forkable.h +61 -0
  502. data/src/core/lib/event_engine/poller.h +56 -0
  503. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
  504. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
  505. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
  506. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
  507. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
  508. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
  509. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +87 -30
  510. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +40 -9
  511. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  512. data/src/core/lib/event_engine/thread_pool.cc +195 -0
  513. data/src/core/lib/event_engine/thread_pool.h +114 -0
  514. data/src/core/lib/event_engine/time_util.cc +30 -0
  515. data/src/core/lib/event_engine/time_util.h +32 -0
  516. data/src/core/lib/event_engine/utils.cc +44 -0
  517. data/src/core/lib/event_engine/utils.h +36 -0
  518. data/src/core/lib/event_engine/windows/iocp.cc +155 -0
  519. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  520. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  521. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  522. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  523. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  524. data/src/core/lib/experiments/config.cc +146 -0
  525. data/src/core/lib/experiments/config.h +43 -0
  526. data/src/core/lib/experiments/experiments.cc +75 -0
  527. data/src/core/lib/experiments/experiments.h +56 -0
  528. data/src/core/lib/gpr/alloc.cc +1 -9
  529. data/src/core/lib/gpr/log_windows.cc +0 -1
  530. data/src/core/lib/gpr/string_util_windows.cc +3 -30
  531. data/src/core/lib/gpr/sync_abseil.cc +0 -14
  532. data/src/core/lib/gpr/sync_posix.cc +0 -14
  533. data/src/core/lib/gpr/time.cc +11 -9
  534. data/src/core/lib/gpr/time_posix.cc +0 -6
  535. data/src/core/lib/gpr/time_precise.h +1 -1
  536. data/src/core/lib/gpr/tmpfile_windows.cc +5 -7
  537. data/src/core/lib/gpr/useful.h +40 -0
  538. data/src/core/lib/gprpp/bitset.h +3 -13
  539. data/src/core/lib/gprpp/debug_location.h +39 -7
  540. data/src/core/lib/{gpr → gprpp}/env.h +25 -12
  541. data/src/core/lib/{gpr → gprpp}/env_linux.cc +20 -15
  542. data/src/core/lib/{gpr → gprpp}/env_posix.cc +11 -10
  543. data/src/core/lib/gprpp/env_windows.cc +56 -0
  544. data/src/core/lib/gprpp/fork.cc +14 -22
  545. data/src/core/lib/gprpp/fork.h +0 -8
  546. data/src/core/lib/gprpp/global_config_env.cc +7 -6
  547. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  548. data/src/core/lib/gprpp/no_destruct.h +94 -0
  549. data/src/core/lib/gprpp/notification.h +67 -0
  550. data/src/core/lib/gprpp/packed_table.h +40 -0
  551. data/src/core/lib/gprpp/ref_counted_ptr.h +20 -34
  552. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  553. data/src/core/lib/gprpp/status_helper.cc +1 -0
  554. data/src/core/lib/gprpp/status_helper.h +6 -0
  555. data/src/core/lib/gprpp/table.h +9 -2
  556. data/src/core/lib/gprpp/tchar.cc +49 -0
  557. data/src/core/lib/gprpp/tchar.h +33 -0
  558. data/src/core/lib/gprpp/time.cc +21 -0
  559. data/src/core/lib/gprpp/time.h +55 -0
  560. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
  561. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
  562. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  563. data/src/core/lib/gprpp/validation_errors.h +110 -0
  564. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  565. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
  566. data/src/core/{ext/filters/client_channel → lib/handshaker}/proxy_mapper.h +16 -17
  567. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  568. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  569. data/src/core/lib/http/httpcli.cc +12 -24
  570. data/src/core/lib/http/httpcli_security_connector.cc +11 -11
  571. data/src/core/lib/iomgr/call_combiner.cc +0 -34
  572. data/src/core/lib/iomgr/closure.h +0 -10
  573. data/src/core/lib/iomgr/combiner.cc +0 -20
  574. data/src/core/lib/iomgr/endpoint_pair_posix.cc +14 -9
  575. data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
  576. data/src/core/lib/iomgr/error.cc +0 -773
  577. data/src/core/lib/iomgr/error.h +0 -145
  578. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  579. data/src/core/lib/iomgr/ev_epoll1_linux.cc +1 -38
  580. data/src/core/lib/iomgr/ev_poll_posix.cc +19 -26
  581. data/src/core/lib/iomgr/exec_ctx.cc +0 -22
  582. data/src/core/lib/iomgr/exec_ctx.h +7 -31
  583. data/src/core/lib/iomgr/executor.cc +0 -10
  584. data/src/core/lib/iomgr/executor.h +0 -3
  585. data/src/core/lib/iomgr/iocp_windows.cc +1 -2
  586. data/src/core/lib/iomgr/iomgr.cc +6 -8
  587. data/src/core/lib/iomgr/iomgr_fwd.h +1 -0
  588. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  589. data/src/core/lib/iomgr/pollset.h +1 -1
  590. data/src/core/lib/iomgr/pollset_set.h +0 -1
  591. data/src/core/lib/iomgr/port.h +3 -0
  592. data/src/core/lib/iomgr/resolve_address.h +30 -6
  593. data/src/core/lib/iomgr/resolve_address_impl.h +1 -0
  594. data/src/core/lib/iomgr/resolve_address_posix.cc +43 -8
  595. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  596. data/src/core/lib/iomgr/resolve_address_windows.cc +45 -10
  597. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  598. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +2 -1
  599. data/src/core/lib/iomgr/socket_utils_common_posix.cc +12 -34
  600. data/src/core/lib/iomgr/socket_utils_posix.cc +83 -1
  601. data/src/core/lib/iomgr/socket_utils_posix.h +98 -6
  602. data/src/core/lib/iomgr/socket_windows.h +0 -2
  603. data/src/core/lib/iomgr/tcp_client.cc +6 -7
  604. data/src/core/lib/iomgr/tcp_client.h +11 -11
  605. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -6
  606. data/src/core/lib/iomgr/tcp_client_posix.cc +33 -29
  607. data/src/core/lib/iomgr/tcp_client_posix.h +12 -9
  608. data/src/core/lib/iomgr/tcp_client_windows.cc +6 -6
  609. data/src/core/lib/iomgr/tcp_posix.cc +249 -120
  610. data/src/core/lib/iomgr/tcp_posix.h +3 -1
  611. data/src/core/lib/iomgr/tcp_server.cc +5 -4
  612. data/src/core/lib/iomgr/tcp_server.h +9 -6
  613. data/src/core/lib/iomgr/tcp_server_posix.cc +17 -28
  614. data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -2
  615. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +3 -3
  616. data/src/core/lib/iomgr/tcp_server_windows.cc +6 -7
  617. data/src/core/lib/iomgr/tcp_windows.cc +0 -1
  618. data/src/core/lib/iomgr/tcp_windows.h +0 -1
  619. data/src/core/lib/iomgr/timer_generic.cc +10 -12
  620. data/src/core/lib/iomgr/timer_manager.cc +1 -2
  621. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +0 -2
  622. data/src/core/lib/json/json.h +19 -22
  623. data/src/core/lib/json/json_args.h +34 -0
  624. data/src/core/lib/json/json_object_loader.cc +202 -0
  625. data/src/core/lib/json/json_object_loader.h +598 -0
  626. data/src/core/lib/json/json_reader.cc +86 -62
  627. data/src/core/lib/json/json_util.cc +9 -36
  628. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  629. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +20 -29
  630. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  631. data/src/core/lib/load_balancing/lb_policy_registry.cc +141 -0
  632. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  633. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +6 -6
  634. data/src/core/lib/promise/activity.h +57 -10
  635. data/src/core/lib/promise/arena_promise.h +84 -81
  636. data/src/core/lib/promise/context.h +1 -2
  637. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  638. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  639. data/src/core/lib/promise/map.h +0 -1
  640. data/src/core/lib/promise/seq.h +25 -4
  641. data/src/core/lib/promise/sleep.cc +50 -42
  642. data/src/core/lib/promise/sleep.h +32 -23
  643. data/src/core/lib/promise/try_seq.h +26 -6
  644. data/src/core/lib/resolver/resolver.cc +0 -47
  645. data/src/core/lib/resolver/resolver.h +15 -15
  646. data/src/core/lib/resolver/resolver_factory.h +2 -3
  647. data/src/core/lib/resolver/resolver_registry.cc +1 -1
  648. data/src/core/lib/resolver/resolver_registry.h +2 -3
  649. data/src/core/lib/resolver/server_address.cc +11 -15
  650. data/src/core/lib/resolver/server_address.h +4 -8
  651. data/src/core/lib/resource_quota/api.cc +10 -1
  652. data/src/core/lib/resource_quota/api.h +6 -0
  653. data/src/core/lib/resource_quota/arena.cc +19 -1
  654. data/src/core/lib/resource_quota/arena.h +24 -2
  655. data/src/core/lib/resource_quota/memory_quota.cc +143 -19
  656. data/src/core/lib/resource_quota/memory_quota.h +85 -17
  657. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  658. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  659. data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
  660. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  661. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  662. data/src/core/lib/security/authorization/matchers.cc +13 -10
  663. data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
  664. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +3 -3
  665. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  666. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  667. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -3
  668. data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
  669. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +1 -0
  670. data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
  671. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
  672. data/src/core/lib/security/credentials/credentials.h +16 -12
  673. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +33 -27
  674. data/src/core/lib/security/credentials/external/external_account_credentials.cc +34 -24
  675. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  676. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
  677. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
  678. data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
  679. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +5 -8
  680. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +35 -32
  681. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
  682. data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
  683. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
  684. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
  685. data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
  686. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
  687. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +14 -15
  688. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
  689. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
  690. data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
  691. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +18 -20
  692. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
  693. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
  694. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
  695. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +4 -3
  696. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +10 -2
  697. data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
  698. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
  699. data/src/core/lib/security/credentials/tls/tls_utils.cc +3 -1
  700. data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
  701. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  702. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
  703. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
  704. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  705. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  706. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
  707. data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
  708. data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
  709. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  710. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
  711. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
  712. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
  713. data/src/core/lib/security/transport/auth_filters.h +1 -1
  714. data/src/core/lib/security/transport/client_auth_filter.cc +15 -5
  715. data/src/core/lib/security/transport/secure_endpoint.cc +0 -4
  716. data/src/core/lib/security/transport/security_handshaker.cc +32 -44
  717. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  718. data/src/core/lib/service_config/service_config.h +11 -0
  719. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  720. data/src/core/lib/service_config/service_config_impl.h +11 -13
  721. data/src/core/lib/service_config/service_config_parser.cc +26 -27
  722. data/src/core/lib/service_config/service_config_parser.h +10 -22
  723. data/src/core/lib/slice/percent_encoding.cc +4 -13
  724. data/src/core/lib/slice/slice.cc +10 -4
  725. data/src/core/lib/surface/call.cc +9 -13
  726. data/src/core/lib/surface/channel.cc +9 -8
  727. data/src/core/lib/surface/channel.h +1 -1
  728. data/src/core/lib/surface/completion_queue.cc +16 -30
  729. data/src/core/lib/surface/completion_queue.h +1 -4
  730. data/src/core/lib/surface/completion_queue_factory.cc +5 -0
  731. data/src/core/lib/surface/init.cc +17 -16
  732. data/src/core/lib/surface/init_internally.cc +24 -0
  733. data/src/core/lib/surface/init_internally.h +28 -0
  734. data/src/core/lib/surface/lame_client.cc +2 -3
  735. data/src/core/lib/surface/lame_client.h +1 -1
  736. data/src/core/lib/surface/server.cc +8 -19
  737. data/src/core/lib/surface/server.h +11 -13
  738. data/src/core/lib/surface/validate_metadata.cc +4 -14
  739. data/src/core/lib/surface/version.cc +2 -2
  740. data/src/core/lib/transport/bdp_estimator.cc +1 -3
  741. data/src/core/lib/transport/connectivity_state.cc +0 -1
  742. data/src/core/lib/transport/connectivity_state.h +1 -1
  743. data/src/core/lib/transport/error_utils.cc +0 -36
  744. data/src/core/lib/transport/handshaker.cc +7 -9
  745. data/src/core/lib/transport/handshaker.h +4 -5
  746. data/src/core/lib/transport/handshaker_factory.h +2 -3
  747. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  748. data/src/core/lib/transport/handshaker_registry.h +2 -4
  749. data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
  750. data/src/core/lib/transport/metadata_batch.cc +7 -3
  751. data/src/core/lib/transport/metadata_batch.h +61 -14
  752. data/src/core/lib/transport/parsed_metadata.h +4 -3
  753. data/src/core/lib/transport/status_conversion.cc +1 -3
  754. data/src/core/lib/transport/tcp_connect_handshaker.cc +20 -22
  755. data/src/core/lib/transport/transport.h +0 -8
  756. data/src/core/lib/transport/transport_impl.h +0 -1
  757. data/src/core/plugin_registry/grpc_plugin_registry.cc +23 -46
  758. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +13 -25
  759. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  760. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  761. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
  762. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  763. data/src/core/tsi/fake_transport_security.cc +53 -30
  764. data/src/core/tsi/local_transport_security.cc +9 -5
  765. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  766. data/src/core/tsi/ssl_transport_security.cc +47 -23
  767. data/src/core/tsi/transport_security.cc +18 -6
  768. data/src/core/tsi/transport_security.h +2 -1
  769. data/src/core/tsi/transport_security_interface.h +17 -5
  770. data/src/ruby/ext/grpc/extconf.rb +2 -0
  771. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  772. data/src/ruby/lib/grpc/version.rb +1 -1
  773. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  774. data/src/ruby/spec/channel_spec.rb +5 -0
  775. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  776. data/src/ruby/spec/user_agent_spec.rb +1 -1
  777. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  778. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  779. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  780. data/third_party/upb/upb/arena.c +277 -0
  781. data/third_party/upb/upb/arena.h +225 -0
  782. data/third_party/upb/upb/array.c +114 -0
  783. data/third_party/upb/upb/array.h +83 -0
  784. data/third_party/upb/upb/collections.h +36 -0
  785. data/third_party/upb/upb/decode.c +161 -65
  786. data/third_party/upb/upb/decode.h +1 -0
  787. data/third_party/upb/upb/decode_fast.c +1 -1
  788. data/third_party/upb/upb/def.c +10 -2
  789. data/third_party/upb/upb/def.h +8 -1
  790. data/third_party/upb/upb/def.hpp +7 -4
  791. data/third_party/upb/upb/encode.c +29 -20
  792. data/third_party/upb/upb/encode.h +16 -6
  793. data/third_party/upb/upb/extension_registry.c +93 -0
  794. data/third_party/upb/upb/extension_registry.h +84 -0
  795. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  796. data/third_party/upb/upb/internal/table.h +385 -0
  797. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  798. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  799. data/third_party/upb/upb/json_decode.c +1512 -0
  800. data/third_party/upb/upb/json_decode.h +47 -0
  801. data/third_party/upb/upb/json_encode.c +7 -3
  802. data/third_party/upb/upb/json_encode.h +6 -3
  803. data/third_party/upb/upb/map.c +108 -0
  804. data/third_party/upb/upb/map.h +117 -0
  805. data/third_party/upb/upb/message_value.h +66 -0
  806. data/third_party/upb/upb/mini_table.c +1147 -0
  807. data/third_party/upb/upb/mini_table.h +189 -0
  808. data/third_party/upb/upb/mini_table.hpp +112 -0
  809. data/third_party/upb/upb/msg.c +2 -62
  810. data/third_party/upb/upb/msg.h +2 -45
  811. data/third_party/upb/upb/msg_internal.h +28 -22
  812. data/third_party/upb/upb/port_def.inc +2 -1
  813. data/third_party/upb/upb/port_undef.inc +1 -0
  814. data/third_party/upb/upb/reflection.c +2 -159
  815. data/third_party/upb/upb/reflection.h +2 -112
  816. data/third_party/upb/upb/status.c +86 -0
  817. data/third_party/upb/upb/status.h +66 -0
  818. data/third_party/upb/upb/table.c +2 -2
  819. data/third_party/upb/upb/table_internal.h +3 -352
  820. data/third_party/upb/upb/text_encode.c +3 -2
  821. data/third_party/upb/upb/upb.c +4 -290
  822. data/third_party/upb/upb/upb.h +7 -196
  823. metadata +117 -51
  824. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  825. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -190
  826. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -70
  827. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -90
  828. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -55
  829. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  830. data/src/core/ext/xds/certificate_provider_registry.h +0 -59
  831. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +0 -123
  832. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +0 -70
  833. data/src/core/lib/event_engine/promise.h +0 -69
  834. data/src/core/lib/gpr/env_windows.cc +0 -74
  835. data/src/core/lib/gpr/string_windows.h +0 -32
  836. data/src/core/lib/iomgr/error_internal.h +0 -66
  837. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  838. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  839. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  840. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  841. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  842. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  843. data/src/core/lib/profiling/basic_timers.cc +0 -295
  844. data/src/core/lib/profiling/stap_timers.cc +0 -50
  845. data/src/core/lib/profiling/timers.h +0 -94
  846. data/src/core/lib/promise/detail/switch.h +0 -1455
@@ -21,14 +21,15 @@
21
21
  #include <stdint.h>
22
22
 
23
23
  #include <set>
24
- #include <type_traits>
25
24
  #include <utility>
26
25
 
27
26
  #include "absl/memory/memory.h"
28
27
  #include "absl/status/status.h"
28
+ #include "absl/status/statusor.h"
29
29
  #include "absl/strings/str_cat.h"
30
30
  #include "absl/strings/str_format.h"
31
31
  #include "absl/strings/str_join.h"
32
+ #include "absl/strings/strip.h"
32
33
  #include "envoy/config/core/v3/address.upb.h"
33
34
  #include "envoy/config/core/v3/base.upb.h"
34
35
  #include "envoy/config/core/v3/config_source.upb.h"
@@ -49,6 +50,7 @@
49
50
 
50
51
  #include <grpc/support/log.h>
51
52
 
53
+ #include "src/core/ext/xds/upb_utils.h"
52
54
  #include "src/core/ext/xds/xds_common_types.h"
53
55
  #include "src/core/ext/xds/xds_resource_type.h"
54
56
  #include "src/core/lib/address_utils/parse_address.h"
@@ -59,7 +61,6 @@
59
61
  #include "src/core/lib/iomgr/error.h"
60
62
  #include "src/core/lib/iomgr/sockaddr.h"
61
63
  #include "src/core/lib/json/json.h"
62
- #include "src/core/lib/transport/error_utils.h"
63
64
 
64
65
  namespace grpc_core {
65
66
 
@@ -270,7 +271,7 @@ std::string XdsListenerResource::ToString() const {
270
271
  namespace {
271
272
 
272
273
  void MaybeLogHttpConnectionManager(
273
- const XdsEncodingContext& context,
274
+ const XdsResourceType::DecodeContext& context,
274
275
  const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
275
276
  http_connection_manager_config) {
276
277
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
@@ -286,25 +287,25 @@ void MaybeLogHttpConnectionManager(
286
287
  }
287
288
  }
288
289
 
289
- grpc_error_handle HttpConnectionManagerParse(
290
- bool is_client, const XdsEncodingContext& context,
290
+ absl::StatusOr<XdsListenerResource::HttpConnectionManager>
291
+ HttpConnectionManagerParse(
292
+ bool is_client, const XdsResourceType::DecodeContext& context,
291
293
  const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
292
294
  http_connection_manager_proto,
293
- bool is_v2,
294
- XdsListenerResource::HttpConnectionManager* http_connection_manager) {
295
+ bool is_v2) {
295
296
  MaybeLogHttpConnectionManager(context, http_connection_manager_proto);
297
+ std::vector<std::string> errors;
298
+ XdsListenerResource::HttpConnectionManager http_connection_manager;
296
299
  // NACK a non-zero `xff_num_trusted_hops` and a `non-empty
297
300
  // original_ip_detection_extensions` as mentioned in
298
301
  // https://github.com/grpc/proposal/blob/master/A41-xds-rbac.md
299
302
  if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_xff_num_trusted_hops(
300
303
  http_connection_manager_proto) != 0) {
301
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
302
- "'xff_num_trusted_hops' must be zero");
304
+ errors.emplace_back("'xff_num_trusted_hops' must be zero");
303
305
  }
304
306
  if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_has_original_ip_detection_extensions(
305
307
  http_connection_manager_proto)) {
306
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
307
- "'original_ip_detection_extensions' must be empty");
308
+ errors.emplace_back("'original_ip_detection_extensions' must be empty");
308
309
  }
309
310
  // Obtain max_stream_duration from Http Protocol Options.
310
311
  const envoy_config_core_v3_HttpProtocolOptions* options =
@@ -314,7 +315,7 @@ grpc_error_handle HttpConnectionManagerParse(
314
315
  const google_protobuf_Duration* duration =
315
316
  envoy_config_core_v3_HttpProtocolOptions_max_stream_duration(options);
316
317
  if (duration != nullptr) {
317
- http_connection_manager->http_max_stream_duration =
318
+ http_connection_manager.http_max_stream_duration =
318
319
  ParseDuration(duration);
319
320
  }
320
321
  }
@@ -331,12 +332,12 @@ grpc_error_handle HttpConnectionManagerParse(
331
332
  envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_name(
332
333
  http_filter));
333
334
  if (name.empty()) {
334
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
335
- absl::StrCat("empty filter name at index ", i));
335
+ errors.emplace_back(absl::StrCat("empty filter name at index ", i));
336
+ continue;
336
337
  }
337
338
  if (names_seen.find(name) != names_seen.end()) {
338
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
339
- absl::StrCat("duplicate HTTP filter name: ", name));
339
+ errors.emplace_back(absl::StrCat("duplicate HTTP filter name: ", name));
340
+ continue;
340
341
  }
341
342
  names_seen.insert(name);
342
343
  const bool is_optional =
@@ -346,56 +347,64 @@ grpc_error_handle HttpConnectionManagerParse(
346
347
  envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_typed_config(
347
348
  http_filter);
348
349
  if (any == nullptr) {
349
- if (is_optional) continue;
350
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
351
- absl::StrCat("no filter config specified for filter name ", name));
350
+ if (!is_optional) {
351
+ errors.emplace_back(absl::StrCat(
352
+ "no filter config specified for filter name ", name));
353
+ }
354
+ continue;
352
355
  }
353
356
  auto filter_type = ExtractExtensionTypeName(context, any);
354
357
  if (!filter_type.ok()) {
355
- return absl_status_to_grpc_error(filter_type.status());
358
+ errors.emplace_back(absl::StrCat("filter name ", name, ": ",
359
+ filter_type.status().message()));
360
+ continue;
356
361
  }
357
362
  const XdsHttpFilterImpl* filter_impl =
358
363
  XdsHttpFilterRegistry::GetFilterForType(filter_type->type);
359
364
  if (filter_impl == nullptr) {
360
- if (is_optional) continue;
361
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
362
- "no filter registered for config type ", filter_type->type));
365
+ if (!is_optional) {
366
+ errors.emplace_back(absl::StrCat(
367
+ "no filter registered for config type ", filter_type->type));
368
+ }
369
+ continue;
363
370
  }
364
371
  if ((is_client && !filter_impl->IsSupportedOnClients()) ||
365
372
  (!is_client && !filter_impl->IsSupportedOnServers())) {
366
- if (is_optional) continue;
367
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
368
- "Filter %s is not supported on %s", filter_type->type,
369
- is_client ? "clients" : "servers"));
373
+ if (!is_optional) {
374
+ errors.emplace_back(absl::StrFormat(
375
+ "Filter %s is not supported on %s", filter_type->type,
376
+ is_client ? "clients" : "servers"));
377
+ }
378
+ continue;
370
379
  }
371
380
  absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
372
381
  filter_impl->GenerateFilterConfig(google_protobuf_Any_value(any),
373
382
  context.arena);
374
383
  if (!filter_config.ok()) {
375
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
384
+ errors.emplace_back(absl::StrCat(
376
385
  "filter config for type ", filter_type->type,
377
386
  " failed to parse: ", StatusToString(filter_config.status())));
387
+ continue;
378
388
  }
379
- http_connection_manager->http_filters.emplace_back(
389
+ http_connection_manager.http_filters.emplace_back(
380
390
  XdsListenerResource::HttpConnectionManager::HttpFilter{
381
391
  std::string(name), std::move(*filter_config)});
382
392
  }
383
- if (http_connection_manager->http_filters.empty()) {
384
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
385
- "Expected at least one HTTP filter");
393
+ if (http_connection_manager.http_filters.empty()) {
394
+ errors.emplace_back("Expected at least one HTTP filter");
386
395
  }
387
396
  // Make sure that the last filter is terminal and non-last filters are
388
397
  // non-terminal. Note that this check is being performed in a separate loop
389
398
  // to take care of the case where there are two terminal filters in the list
390
399
  // out of which only one gets added in the final list.
391
- for (const auto& http_filter : http_connection_manager->http_filters) {
400
+ for (const auto& http_filter : http_connection_manager.http_filters) {
392
401
  const XdsHttpFilterImpl* filter_impl =
393
402
  XdsHttpFilterRegistry::GetFilterForType(
394
403
  http_filter.config.config_proto_type_name);
395
- if (&http_filter != &http_connection_manager->http_filters.back()) {
404
+ if (&http_filter != &http_connection_manager.http_filters.back()) {
396
405
  // Filters before the last filter must not be terminal.
397
406
  if (filter_impl->IsTerminalFilter()) {
398
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
407
+ errors.emplace_back(
399
408
  absl::StrCat("terminal filter for config type ",
400
409
  http_filter.config.config_proto_type_name,
401
410
  " must be the last filter in the chain"));
@@ -403,7 +412,7 @@ grpc_error_handle HttpConnectionManagerParse(
403
412
  } else {
404
413
  // The last filter must be terminal.
405
414
  if (!filter_impl->IsTerminalFilter()) {
406
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
415
+ errors.emplace_back(
407
416
  absl::StrCat("non-terminal filter for config type ",
408
417
  http_filter.config.config_proto_type_name,
409
418
  " is the last filter in the chain"));
@@ -415,7 +424,7 @@ grpc_error_handle HttpConnectionManagerParse(
415
424
  // router filter without actually looking at the config. This ensures
416
425
  // that the right thing happens in the xds resolver without having
417
426
  // to expose whether the resource we received was v2 or v3.
418
- http_connection_manager->http_filters.emplace_back(
427
+ http_connection_manager.http_filters.emplace_back(
419
428
  XdsListenerResource::HttpConnectionManager::HttpFilter{
420
429
  "router", {kXdsHttpRouterFilterConfigName, Json()}});
421
430
  }
@@ -429,261 +438,290 @@ grpc_error_handle HttpConnectionManagerParse(
429
438
  const envoy_config_route_v3_RouteConfiguration* route_config =
430
439
  envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_route_config(
431
440
  http_connection_manager_proto);
432
- XdsRouteConfigResource rds_update;
433
- grpc_error_handle error =
434
- XdsRouteConfigResource::Parse(context, route_config, &rds_update);
435
- if (!GRPC_ERROR_IS_NONE(error)) return error;
436
- http_connection_manager->rds_update = std::move(rds_update);
437
- return GRPC_ERROR_NONE;
438
- }
439
- // Validate that RDS must be used to get the route_config dynamically.
440
- const envoy_extensions_filters_network_http_connection_manager_v3_Rds* rds =
441
- envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_rds(
442
- http_connection_manager_proto);
443
- if (rds == nullptr) {
444
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
445
- "HttpConnectionManager neither has inlined route_config nor RDS.");
446
- }
447
- // Check that the ConfigSource specifies ADS.
448
- const envoy_config_core_v3_ConfigSource* config_source =
449
- envoy_extensions_filters_network_http_connection_manager_v3_Rds_config_source(
450
- rds);
451
- if (config_source == nullptr) {
452
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
453
- "HttpConnectionManager missing config_source for RDS.");
454
- }
455
- if (!envoy_config_core_v3_ConfigSource_has_ads(config_source) &&
456
- !envoy_config_core_v3_ConfigSource_has_self(config_source)) {
457
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
458
- "HttpConnectionManager ConfigSource for RDS does not specify ADS "
459
- "or SELF.");
441
+ auto rds_update = XdsRouteConfigResource::Parse(context, route_config);
442
+ if (!rds_update.ok()) {
443
+ errors.emplace_back(rds_update.status().message());
444
+ } else {
445
+ http_connection_manager.rds_update = std::move(*rds_update);
446
+ }
447
+ } else {
448
+ // Validate that RDS must be used to get the route_config dynamically.
449
+ const envoy_extensions_filters_network_http_connection_manager_v3_Rds* rds =
450
+ envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_rds(
451
+ http_connection_manager_proto);
452
+ if (rds == nullptr) {
453
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
454
+ "HttpConnectionManager neither has inlined route_config nor RDS.");
455
+ }
456
+ // Check that the ConfigSource specifies ADS.
457
+ const envoy_config_core_v3_ConfigSource* config_source =
458
+ envoy_extensions_filters_network_http_connection_manager_v3_Rds_config_source(
459
+ rds);
460
+ if (config_source == nullptr) {
461
+ errors.emplace_back(
462
+ "HttpConnectionManager missing config_source for RDS.");
463
+ } else if (!envoy_config_core_v3_ConfigSource_has_ads(config_source) &&
464
+ !envoy_config_core_v3_ConfigSource_has_self(config_source)) {
465
+ errors.emplace_back(
466
+ "HttpConnectionManager ConfigSource for RDS does not specify ADS "
467
+ "or SELF.");
468
+ } else {
469
+ // Get the route_config_name.
470
+ http_connection_manager.route_config_name = UpbStringToStdString(
471
+ envoy_extensions_filters_network_http_connection_manager_v3_Rds_route_config_name(
472
+ rds));
473
+ }
460
474
  }
461
- // Get the route_config_name.
462
- http_connection_manager->route_config_name = UpbStringToStdString(
463
- envoy_extensions_filters_network_http_connection_manager_v3_Rds_route_config_name(
464
- rds));
465
475
  }
466
- return GRPC_ERROR_NONE;
476
+ // Return result.
477
+ if (!errors.empty()) {
478
+ return absl::InvalidArgumentError(
479
+ absl::StrCat("Errors parsing HttpConnectionManager config: [",
480
+ absl::StrJoin(errors, "; "), "]"));
481
+ }
482
+ return http_connection_manager;
467
483
  }
468
484
 
469
- grpc_error_handle LdsResourceParseClient(
470
- const XdsEncodingContext& context,
471
- const envoy_config_listener_v3_ApiListener* api_listener, bool is_v2,
472
- XdsListenerResource* lds_update) {
473
- lds_update->type = XdsListenerResource::ListenerType::kHttpApiListener;
485
+ absl::StatusOr<XdsListenerResource> LdsResourceParseClient(
486
+ const XdsResourceType::DecodeContext& context,
487
+ const envoy_config_listener_v3_ApiListener* api_listener, bool is_v2) {
474
488
  const upb_StringView encoded_api_listener = google_protobuf_Any_value(
475
489
  envoy_config_listener_v3_ApiListener_api_listener(api_listener));
476
490
  const auto* http_connection_manager =
477
491
  envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_parse(
478
492
  encoded_api_listener.data, encoded_api_listener.size, context.arena);
479
493
  if (http_connection_manager == nullptr) {
480
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
494
+ return absl::InvalidArgumentError(
481
495
  "Could not parse HttpConnectionManager config from ApiListener");
482
496
  }
483
- return HttpConnectionManagerParse(true /* is_client */, context,
484
- http_connection_manager, is_v2,
485
- &lds_update->http_connection_manager);
497
+ auto hcm = HttpConnectionManagerParse(true /* is_client */, context,
498
+ http_connection_manager, is_v2);
499
+ if (!hcm.ok()) return hcm.status();
500
+ XdsListenerResource lds_update;
501
+ lds_update.type = XdsListenerResource::ListenerType::kHttpApiListener;
502
+ lds_update.http_connection_manager = std::move(*hcm);
503
+ return lds_update;
486
504
  }
487
505
 
488
- grpc_error_handle DownstreamTlsContextParse(
489
- const XdsEncodingContext& context,
490
- const envoy_config_core_v3_TransportSocket* transport_socket,
491
- XdsListenerResource::DownstreamTlsContext* downstream_tls_context) {
492
- absl::string_view name = UpbStringToAbsl(
493
- envoy_config_core_v3_TransportSocket_name(transport_socket));
494
- if (name != "envoy.transport_sockets.tls") {
495
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
496
- absl::StrCat("Unrecognized transport socket: ", name));
497
- }
498
- auto* typed_config =
506
+ absl::StatusOr<XdsListenerResource::DownstreamTlsContext>
507
+ DownstreamTlsContextParse(
508
+ const XdsResourceType::DecodeContext& context,
509
+ const envoy_config_core_v3_TransportSocket* transport_socket) {
510
+ const auto* typed_config =
499
511
  envoy_config_core_v3_TransportSocket_typed_config(transport_socket);
500
- std::vector<grpc_error_handle> errors;
501
- if (typed_config != nullptr) {
502
- const upb_StringView encoded_downstream_tls_context =
503
- google_protobuf_Any_value(typed_config);
504
- auto* downstream_tls_context_proto =
505
- envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_parse(
506
- encoded_downstream_tls_context.data,
507
- encoded_downstream_tls_context.size, context.arena);
508
- if (downstream_tls_context_proto == nullptr) {
509
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
510
- "Can't decode downstream tls context.");
511
- }
512
- auto* common_tls_context =
513
- envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_common_tls_context(
514
- downstream_tls_context_proto);
515
- if (common_tls_context != nullptr) {
516
- grpc_error_handle error =
517
- CommonTlsContext::Parse(context, common_tls_context,
518
- &downstream_tls_context->common_tls_context);
519
- if (!GRPC_ERROR_IS_NONE(error)) errors.push_back(error);
520
- }
521
- auto* require_client_certificate =
522
- envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_client_certificate(
523
- downstream_tls_context_proto);
524
- if (require_client_certificate != nullptr) {
525
- downstream_tls_context->require_client_certificate =
526
- google_protobuf_BoolValue_value(require_client_certificate);
527
- }
528
- auto* require_sni =
529
- envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_sni(
530
- downstream_tls_context_proto);
531
- if (require_sni != nullptr &&
532
- google_protobuf_BoolValue_value(require_sni)) {
533
- errors.push_back(
534
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("require_sni: unsupported"));
535
- }
536
- if (envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_ocsp_staple_policy(
537
- downstream_tls_context_proto) !=
538
- envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_LENIENT_STAPLING) {
539
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
540
- "ocsp_staple_policy: Only LENIENT_STAPLING supported"));
512
+ if (typed_config == nullptr) {
513
+ return absl::InvalidArgumentError("transport socket typed config unset");
514
+ }
515
+ absl::string_view type_url = absl::StripPrefix(
516
+ UpbStringToAbsl(google_protobuf_Any_type_url(typed_config)),
517
+ "type.googleapis.com/");
518
+ if (type_url !=
519
+ "envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext") {
520
+ return absl::InvalidArgumentError(
521
+ absl::StrCat("Unrecognized transport socket type: ", type_url));
522
+ }
523
+ const upb_StringView encoded_downstream_tls_context =
524
+ google_protobuf_Any_value(typed_config);
525
+ const auto* downstream_tls_context_proto =
526
+ envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_parse(
527
+ encoded_downstream_tls_context.data,
528
+ encoded_downstream_tls_context.size, context.arena);
529
+ if (downstream_tls_context_proto == nullptr) {
530
+ return absl::InvalidArgumentError("Can't decode downstream tls context.");
531
+ }
532
+ std::vector<std::string> errors;
533
+ XdsListenerResource::DownstreamTlsContext downstream_tls_context;
534
+ auto* common_tls_context =
535
+ envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_common_tls_context(
536
+ downstream_tls_context_proto);
537
+ if (common_tls_context != nullptr) {
538
+ auto common_context = CommonTlsContext::Parse(context, common_tls_context);
539
+ if (!common_context.ok()) {
540
+ errors.emplace_back(common_context.status().message());
541
+ } else {
542
+ downstream_tls_context.common_tls_context = std::move(*common_context);
541
543
  }
542
544
  }
543
- if (downstream_tls_context->common_tls_context
545
+ auto* require_client_certificate =
546
+ envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_client_certificate(
547
+ downstream_tls_context_proto);
548
+ if (require_client_certificate != nullptr) {
549
+ downstream_tls_context.require_client_certificate =
550
+ google_protobuf_BoolValue_value(require_client_certificate);
551
+ }
552
+ auto* require_sni =
553
+ envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_sni(
554
+ downstream_tls_context_proto);
555
+ if (require_sni != nullptr && google_protobuf_BoolValue_value(require_sni)) {
556
+ errors.emplace_back("require_sni: unsupported");
557
+ }
558
+ if (envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_ocsp_staple_policy(
559
+ downstream_tls_context_proto) !=
560
+ envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_LENIENT_STAPLING) {
561
+ errors.emplace_back("ocsp_staple_policy: Only LENIENT_STAPLING supported");
562
+ }
563
+ if (downstream_tls_context.common_tls_context
544
564
  .tls_certificate_provider_instance.instance_name.empty()) {
545
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
565
+ errors.emplace_back(
546
566
  "TLS configuration provided but no "
547
- "tls_certificate_provider_instance found."));
567
+ "tls_certificate_provider_instance found.");
548
568
  }
549
- if (downstream_tls_context->require_client_certificate &&
550
- downstream_tls_context->common_tls_context.certificate_validation_context
569
+ if (downstream_tls_context.require_client_certificate &&
570
+ downstream_tls_context.common_tls_context.certificate_validation_context
551
571
  .ca_certificate_provider_instance.instance_name.empty()) {
552
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
572
+ errors.emplace_back(
553
573
  "TLS configuration requires client certificates but no certificate "
554
- "provider instance specified for validation."));
574
+ "provider instance specified for validation.");
555
575
  }
556
- if (!downstream_tls_context->common_tls_context.certificate_validation_context
576
+ if (!downstream_tls_context.common_tls_context.certificate_validation_context
557
577
  .match_subject_alt_names.empty()) {
558
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
559
- "match_subject_alt_names not supported on servers"));
578
+ errors.emplace_back("match_subject_alt_names not supported on servers");
560
579
  }
561
- return GRPC_ERROR_CREATE_FROM_VECTOR("Error parsing DownstreamTlsContext",
562
- &errors);
580
+ // Return result.
581
+ if (!errors.empty()) {
582
+ return absl::InvalidArgumentError(
583
+ absl::StrCat("Errors parsing DownstreamTlsContext: [",
584
+ absl::StrJoin(errors, "; "), "]"));
585
+ }
586
+ return downstream_tls_context;
563
587
  }
564
588
 
565
- grpc_error_handle CidrRangeParse(
566
- const envoy_config_core_v3_CidrRange* cidr_range_proto,
567
- XdsListenerResource::FilterChainMap::CidrRange* cidr_range) {
589
+ absl::StatusOr<XdsListenerResource::FilterChainMap::CidrRange> CidrRangeParse(
590
+ const envoy_config_core_v3_CidrRange* cidr_range_proto) {
591
+ XdsListenerResource::FilterChainMap::CidrRange cidr_range;
568
592
  std::string address_prefix = UpbStringToStdString(
569
593
  envoy_config_core_v3_CidrRange_address_prefix(cidr_range_proto));
570
- grpc_error_handle error =
571
- grpc_string_to_sockaddr(&cidr_range->address, address_prefix.c_str(), 0);
572
- if (!GRPC_ERROR_IS_NONE(error)) return error;
573
- cidr_range->prefix_len = 0;
594
+ auto address = StringToSockaddr(address_prefix, /*port=*/0);
595
+ if (!address.ok()) return address.status();
596
+ cidr_range.address = *address;
597
+ cidr_range.prefix_len = 0;
574
598
  auto* prefix_len_proto =
575
599
  envoy_config_core_v3_CidrRange_prefix_len(cidr_range_proto);
576
600
  if (prefix_len_proto != nullptr) {
577
- cidr_range->prefix_len = std::min(
601
+ cidr_range.prefix_len = std::min(
578
602
  google_protobuf_UInt32Value_value(prefix_len_proto),
579
- (reinterpret_cast<const grpc_sockaddr*>(cidr_range->address.addr))
603
+ (reinterpret_cast<const grpc_sockaddr*>(cidr_range.address.addr))
580
604
  ->sa_family == GRPC_AF_INET
581
605
  ? uint32_t(32)
582
606
  : uint32_t(128));
583
607
  }
584
608
  // Normalize the network address by masking it with prefix_len
585
- grpc_sockaddr_mask_bits(&cidr_range->address, cidr_range->prefix_len);
586
- return GRPC_ERROR_NONE;
609
+ grpc_sockaddr_mask_bits(&cidr_range.address, cidr_range.prefix_len);
610
+ return cidr_range;
587
611
  }
588
612
 
589
- grpc_error_handle FilterChainMatchParse(
590
- const envoy_config_listener_v3_FilterChainMatch* filter_chain_match_proto,
591
- FilterChain::FilterChainMatch* filter_chain_match) {
613
+ absl::StatusOr<FilterChain::FilterChainMatch> FilterChainMatchParse(
614
+ const envoy_config_listener_v3_FilterChainMatch* filter_chain_match_proto) {
615
+ std::vector<std::string> errors;
616
+ FilterChain::FilterChainMatch filter_chain_match;
592
617
  auto* destination_port =
593
618
  envoy_config_listener_v3_FilterChainMatch_destination_port(
594
619
  filter_chain_match_proto);
595
620
  if (destination_port != nullptr) {
596
- filter_chain_match->destination_port =
621
+ filter_chain_match.destination_port =
597
622
  google_protobuf_UInt32Value_value(destination_port);
598
623
  }
599
624
  size_t size = 0;
600
625
  auto* prefix_ranges = envoy_config_listener_v3_FilterChainMatch_prefix_ranges(
601
626
  filter_chain_match_proto, &size);
602
- filter_chain_match->prefix_ranges.reserve(size);
627
+ filter_chain_match.prefix_ranges.reserve(size);
603
628
  for (size_t i = 0; i < size; i++) {
604
- XdsListenerResource::FilterChainMap::CidrRange cidr_range;
605
- grpc_error_handle error = CidrRangeParse(prefix_ranges[i], &cidr_range);
606
- if (!GRPC_ERROR_IS_NONE(error)) return error;
607
- filter_chain_match->prefix_ranges.push_back(cidr_range);
629
+ auto cidr_range = CidrRangeParse(prefix_ranges[i]);
630
+ if (!cidr_range.ok()) {
631
+ errors.emplace_back(absl::StrCat("prefix range ", i, ": ",
632
+ cidr_range.status().message()));
633
+ continue;
634
+ }
635
+ filter_chain_match.prefix_ranges.push_back(*cidr_range);
608
636
  }
609
- filter_chain_match->source_type =
637
+ filter_chain_match.source_type =
610
638
  static_cast<XdsListenerResource::FilterChainMap::ConnectionSourceType>(
611
639
  envoy_config_listener_v3_FilterChainMatch_source_type(
612
640
  filter_chain_match_proto));
613
641
  auto* source_prefix_ranges =
614
642
  envoy_config_listener_v3_FilterChainMatch_source_prefix_ranges(
615
643
  filter_chain_match_proto, &size);
616
- filter_chain_match->source_prefix_ranges.reserve(size);
644
+ filter_chain_match.source_prefix_ranges.reserve(size);
617
645
  for (size_t i = 0; i < size; i++) {
618
- XdsListenerResource::FilterChainMap::CidrRange cidr_range;
619
- grpc_error_handle error =
620
- CidrRangeParse(source_prefix_ranges[i], &cidr_range);
621
- if (!GRPC_ERROR_IS_NONE(error)) return error;
622
- filter_chain_match->source_prefix_ranges.push_back(cidr_range);
646
+ auto cidr_range = CidrRangeParse(source_prefix_ranges[i]);
647
+ if (!cidr_range.ok()) {
648
+ errors.emplace_back(absl::StrCat("source prefix range ", i, ": ",
649
+ cidr_range.status().message()));
650
+ continue;
651
+ }
652
+ filter_chain_match.source_prefix_ranges.push_back(*cidr_range);
623
653
  }
624
654
  auto* source_ports = envoy_config_listener_v3_FilterChainMatch_source_ports(
625
655
  filter_chain_match_proto, &size);
626
- filter_chain_match->source_ports.reserve(size);
656
+ filter_chain_match.source_ports.reserve(size);
627
657
  for (size_t i = 0; i < size; i++) {
628
- filter_chain_match->source_ports.push_back(source_ports[i]);
658
+ filter_chain_match.source_ports.push_back(source_ports[i]);
629
659
  }
630
660
  auto* server_names = envoy_config_listener_v3_FilterChainMatch_server_names(
631
661
  filter_chain_match_proto, &size);
632
662
  for (size_t i = 0; i < size; i++) {
633
- filter_chain_match->server_names.push_back(
663
+ filter_chain_match.server_names.push_back(
634
664
  UpbStringToStdString(server_names[i]));
635
665
  }
636
- filter_chain_match->transport_protocol = UpbStringToStdString(
666
+ filter_chain_match.transport_protocol = UpbStringToStdString(
637
667
  envoy_config_listener_v3_FilterChainMatch_transport_protocol(
638
668
  filter_chain_match_proto));
639
669
  auto* application_protocols =
640
670
  envoy_config_listener_v3_FilterChainMatch_application_protocols(
641
671
  filter_chain_match_proto, &size);
642
672
  for (size_t i = 0; i < size; i++) {
643
- filter_chain_match->application_protocols.push_back(
673
+ filter_chain_match.application_protocols.push_back(
644
674
  UpbStringToStdString(application_protocols[i]));
645
675
  }
646
- return GRPC_ERROR_NONE;
676
+ // Return result.
677
+ if (!errors.empty()) {
678
+ return absl::InvalidArgumentError(
679
+ absl::StrCat("errors parsing filter chain match: [",
680
+ absl::StrJoin(errors, "; "), "]"));
681
+ }
682
+ return filter_chain_match;
647
683
  }
648
684
 
649
- grpc_error_handle FilterChainParse(
650
- const XdsEncodingContext& context,
651
- const envoy_config_listener_v3_FilterChain* filter_chain_proto, bool is_v2,
652
- FilterChain* filter_chain) {
653
- std::vector<grpc_error_handle> errors;
685
+ absl::StatusOr<FilterChain> FilterChainParse(
686
+ const XdsResourceType::DecodeContext& context,
687
+ const envoy_config_listener_v3_FilterChain* filter_chain_proto,
688
+ bool is_v2) {
689
+ FilterChain filter_chain;
690
+ std::vector<std::string> errors;
654
691
  auto* filter_chain_match =
655
692
  envoy_config_listener_v3_FilterChain_filter_chain_match(
656
693
  filter_chain_proto);
657
694
  if (filter_chain_match != nullptr) {
658
- grpc_error_handle error = FilterChainMatchParse(
659
- filter_chain_match, &filter_chain->filter_chain_match);
660
- if (!GRPC_ERROR_IS_NONE(error)) errors.push_back(error);
695
+ auto match = FilterChainMatchParse(filter_chain_match);
696
+ if (!match.ok()) {
697
+ errors.emplace_back(match.status().message());
698
+ } else {
699
+ filter_chain.filter_chain_match = std::move(*match);
700
+ }
661
701
  }
662
- filter_chain->filter_chain_data =
702
+ filter_chain.filter_chain_data =
663
703
  std::make_shared<XdsListenerResource::FilterChainData>();
664
704
  // Parse the filters list. Currently we only support HttpConnectionManager.
665
705
  size_t size = 0;
666
706
  auto* filters =
667
707
  envoy_config_listener_v3_FilterChain_filters(filter_chain_proto, &size);
668
708
  if (size != 1) {
669
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
709
+ errors.push_back(
670
710
  "FilterChain should have exactly one filter: HttpConnectionManager; no "
671
- "other filter is supported at the moment"));
711
+ "other filter is supported at the moment");
672
712
  } else {
673
713
  auto* typed_config =
674
714
  envoy_config_listener_v3_Filter_typed_config(filters[0]);
675
715
  if (typed_config == nullptr) {
676
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
677
- "No typed_config found in filter."));
716
+ errors.emplace_back("No typed_config found in filter.");
678
717
  } else {
679
- absl::string_view type_url =
680
- UpbStringToAbsl(google_protobuf_Any_type_url(typed_config));
718
+ absl::string_view type_url = absl::StripPrefix(
719
+ UpbStringToAbsl(google_protobuf_Any_type_url(typed_config)),
720
+ "type.googleapis.com/");
681
721
  if (type_url !=
682
- "type.googleapis.com/"
683
722
  "envoy.extensions.filters.network.http_connection_manager.v3."
684
723
  "HttpConnectionManager") {
685
- errors.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
686
- absl::StrCat("Unsupported filter type ", type_url)));
724
+ errors.emplace_back(absl::StrCat("Unsupported filter type ", type_url));
687
725
  } else {
688
726
  const upb_StringView encoded_http_connection_manager =
689
727
  google_protobuf_Any_value(typed_config);
@@ -692,14 +730,18 @@ grpc_error_handle FilterChainParse(
692
730
  encoded_http_connection_manager.data,
693
731
  encoded_http_connection_manager.size, context.arena);
694
732
  if (http_connection_manager == nullptr) {
695
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
733
+ errors.emplace_back(
696
734
  "Could not parse HttpConnectionManager config from filter "
697
- "typed_config"));
735
+ "typed_config");
698
736
  } else {
699
- grpc_error_handle error = HttpConnectionManagerParse(
700
- false /* is_client */, context, http_connection_manager, is_v2,
701
- &filter_chain->filter_chain_data->http_connection_manager);
702
- if (!GRPC_ERROR_IS_NONE(error)) errors.push_back(error);
737
+ auto hcm = HttpConnectionManagerParse(
738
+ /*is_client=*/false, context, http_connection_manager, is_v2);
739
+ if (!hcm.ok()) {
740
+ errors.emplace_back(hcm.status().message());
741
+ } else {
742
+ filter_chain.filter_chain_data->http_connection_manager =
743
+ std::move(*hcm);
744
+ }
703
745
  }
704
746
  }
705
747
  }
@@ -707,36 +749,42 @@ grpc_error_handle FilterChainParse(
707
749
  auto* transport_socket =
708
750
  envoy_config_listener_v3_FilterChain_transport_socket(filter_chain_proto);
709
751
  if (transport_socket != nullptr) {
710
- grpc_error_handle error = DownstreamTlsContextParse(
711
- context, transport_socket,
712
- &filter_chain->filter_chain_data->downstream_tls_context);
713
- if (!GRPC_ERROR_IS_NONE(error)) errors.push_back(error);
752
+ auto downstream_context =
753
+ DownstreamTlsContextParse(context, transport_socket);
754
+ if (!downstream_context.ok()) {
755
+ errors.emplace_back(downstream_context.status().message());
756
+ } else {
757
+ filter_chain.filter_chain_data->downstream_tls_context =
758
+ std::move(*downstream_context);
759
+ }
760
+ }
761
+ // Return result.
762
+ if (!errors.empty()) {
763
+ return absl::InvalidArgumentError(absl::StrCat(
764
+ "Errors parsing FilterChain: [", absl::StrJoin(errors, "; "), "]"));
714
765
  }
715
- return GRPC_ERROR_CREATE_FROM_VECTOR("Error parsing FilterChain", &errors);
766
+ return filter_chain;
716
767
  }
717
768
 
718
- grpc_error_handle AddressParse(
719
- const envoy_config_core_v3_Address* address_proto, std::string* address) {
769
+ absl::StatusOr<std::string> AddressParse(
770
+ const envoy_config_core_v3_Address* address_proto) {
720
771
  const auto* socket_address =
721
772
  envoy_config_core_v3_Address_socket_address(address_proto);
722
773
  if (socket_address == nullptr) {
723
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
724
- "Address does not have socket_address");
774
+ return absl::InvalidArgumentError("Address does not have socket_address");
725
775
  }
726
776
  if (envoy_config_core_v3_SocketAddress_protocol(socket_address) !=
727
777
  envoy_config_core_v3_SocketAddress_TCP) {
728
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
729
- "SocketAddress protocol is not TCP");
778
+ return absl::InvalidArgumentError("SocketAddress protocol is not TCP");
730
779
  }
731
780
  uint32_t port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
732
781
  if (port > 65535) {
733
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid port");
782
+ return absl::InvalidArgumentError("Invalid port");
734
783
  }
735
- *address = JoinHostPort(
784
+ return JoinHostPort(
736
785
  UpbStringToAbsl(
737
786
  envoy_config_core_v3_SocketAddress_address(socket_address)),
738
787
  port);
739
- return GRPC_ERROR_NONE;
740
788
  }
741
789
 
742
790
  // An intermediate map for filter chains that we create to validate the list of
@@ -755,37 +803,36 @@ struct InternalFilterChainMap {
755
803
  DestinationIpMap destination_ip_map;
756
804
  };
757
805
 
758
- grpc_error_handle AddFilterChainDataForSourcePort(
759
- const FilterChain& filter_chain,
760
- XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map,
761
- uint32_t port) {
806
+ absl::Status AddFilterChainDataForSourcePort(
807
+ const FilterChain& filter_chain, uint32_t port,
808
+ XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map) {
762
809
  auto insert_result = ports_map->emplace(
763
810
  port, XdsListenerResource::FilterChainMap::FilterChainDataSharedPtr{
764
811
  filter_chain.filter_chain_data});
765
812
  if (!insert_result.second) {
766
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
813
+ return absl::InvalidArgumentError(absl::StrCat(
767
814
  "Duplicate matching rules detected when adding filter chain: ",
768
815
  filter_chain.filter_chain_match.ToString()));
769
816
  }
770
- return GRPC_ERROR_NONE;
817
+ return absl::OkStatus();
771
818
  }
772
819
 
773
- grpc_error_handle AddFilterChainDataForSourcePorts(
820
+ absl::Status AddFilterChainDataForSourcePorts(
774
821
  const FilterChain& filter_chain,
775
822
  XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map) {
776
823
  if (filter_chain.filter_chain_match.source_ports.empty()) {
777
- return AddFilterChainDataForSourcePort(filter_chain, ports_map, 0);
824
+ return AddFilterChainDataForSourcePort(filter_chain, 0, ports_map);
778
825
  } else {
779
826
  for (uint32_t port : filter_chain.filter_chain_match.source_ports) {
780
- grpc_error_handle error =
781
- AddFilterChainDataForSourcePort(filter_chain, ports_map, port);
782
- if (!GRPC_ERROR_IS_NONE(error)) return error;
827
+ absl::Status status =
828
+ AddFilterChainDataForSourcePort(filter_chain, port, ports_map);
829
+ if (!status.ok()) return status;
783
830
  }
784
831
  }
785
- return GRPC_ERROR_NONE;
832
+ return absl::OkStatus();
786
833
  }
787
834
 
788
- grpc_error_handle AddFilterChainDataForSourceIpRange(
835
+ absl::Status AddFilterChainDataForSourceIpRange(
789
836
  const FilterChain& filter_chain,
790
837
  InternalFilterChainMap::SourceIpMap* source_ip_map) {
791
838
  if (filter_chain.filter_chain_match.source_prefix_ranges.empty()) {
@@ -797,24 +844,22 @@ grpc_error_handle AddFilterChainDataForSourceIpRange(
797
844
  for (const auto& prefix_range :
798
845
  filter_chain.filter_chain_match.source_prefix_ranges) {
799
846
  auto addr_str = grpc_sockaddr_to_string(&prefix_range.address, false);
800
- if (!addr_str.ok()) {
801
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_str.status().ToString());
802
- }
847
+ if (!addr_str.ok()) return addr_str.status();
803
848
  auto insert_result = source_ip_map->emplace(
804
849
  absl::StrCat(*addr_str, "/", prefix_range.prefix_len),
805
850
  XdsListenerResource::FilterChainMap::SourceIp());
806
851
  if (insert_result.second) {
807
852
  insert_result.first->second.prefix_range.emplace(prefix_range);
808
853
  }
809
- grpc_error_handle error = AddFilterChainDataForSourcePorts(
854
+ absl::Status status = AddFilterChainDataForSourcePorts(
810
855
  filter_chain, &insert_result.first->second.ports_map);
811
- if (!GRPC_ERROR_IS_NONE(error)) return error;
856
+ if (!status.ok()) return status;
812
857
  }
813
858
  }
814
- return GRPC_ERROR_NONE;
859
+ return absl::OkStatus();
815
860
  }
816
861
 
817
- grpc_error_handle AddFilterChainDataForSourceType(
862
+ absl::Status AddFilterChainDataForSourceType(
818
863
  const FilterChain& filter_chain,
819
864
  InternalFilterChainMap::DestinationIp* destination_ip) {
820
865
  GPR_ASSERT(static_cast<unsigned int>(
@@ -824,31 +869,31 @@ grpc_error_handle AddFilterChainDataForSourceType(
824
869
  filter_chain.filter_chain_match.source_type)]);
825
870
  }
826
871
 
827
- grpc_error_handle AddFilterChainDataForApplicationProtocols(
872
+ absl::Status AddFilterChainDataForApplicationProtocols(
828
873
  const FilterChain& filter_chain,
829
874
  InternalFilterChainMap::DestinationIp* destination_ip) {
830
875
  // Only allow filter chains that do not mention application protocols
831
876
  if (!filter_chain.filter_chain_match.application_protocols.empty()) {
832
- return GRPC_ERROR_NONE;
877
+ return absl::OkStatus();
833
878
  }
834
879
  return AddFilterChainDataForSourceType(filter_chain, destination_ip);
835
880
  }
836
881
 
837
- grpc_error_handle AddFilterChainDataForTransportProtocol(
882
+ absl::Status AddFilterChainDataForTransportProtocol(
838
883
  const FilterChain& filter_chain,
839
884
  InternalFilterChainMap::DestinationIp* destination_ip) {
840
885
  const std::string& transport_protocol =
841
886
  filter_chain.filter_chain_match.transport_protocol;
842
887
  // Only allow filter chains with no transport protocol or "raw_buffer"
843
888
  if (!transport_protocol.empty() && transport_protocol != "raw_buffer") {
844
- return GRPC_ERROR_NONE;
889
+ return absl::OkStatus();
845
890
  }
846
891
  // If for this configuration, we've already seen filter chains that mention
847
892
  // the transport protocol as "raw_buffer", we will never match filter chains
848
893
  // that do not mention it.
849
894
  if (destination_ip->transport_protocol_raw_buffer_provided &&
850
895
  transport_protocol.empty()) {
851
- return GRPC_ERROR_NONE;
896
+ return absl::OkStatus();
852
897
  }
853
898
  if (!transport_protocol.empty() &&
854
899
  !destination_ip->transport_protocol_raw_buffer_provided) {
@@ -862,17 +907,17 @@ grpc_error_handle AddFilterChainDataForTransportProtocol(
862
907
  destination_ip);
863
908
  }
864
909
 
865
- grpc_error_handle AddFilterChainDataForServerNames(
910
+ absl::Status AddFilterChainDataForServerNames(
866
911
  const FilterChain& filter_chain,
867
912
  InternalFilterChainMap::DestinationIp* destination_ip) {
868
913
  // Don't continue adding filter chains with server names mentioned
869
914
  if (!filter_chain.filter_chain_match.server_names.empty()) {
870
- return GRPC_ERROR_NONE;
915
+ return absl::OkStatus();
871
916
  }
872
917
  return AddFilterChainDataForTransportProtocol(filter_chain, destination_ip);
873
918
  }
874
919
 
875
- grpc_error_handle AddFilterChainDataForDestinationIpRange(
920
+ absl::Status AddFilterChainDataForDestinationIpRange(
876
921
  const FilterChain& filter_chain,
877
922
  InternalFilterChainMap::DestinationIpMap* destination_ip_map) {
878
923
  if (filter_chain.filter_chain_match.prefix_ranges.empty()) {
@@ -884,21 +929,19 @@ grpc_error_handle AddFilterChainDataForDestinationIpRange(
884
929
  for (const auto& prefix_range :
885
930
  filter_chain.filter_chain_match.prefix_ranges) {
886
931
  auto addr_str = grpc_sockaddr_to_string(&prefix_range.address, false);
887
- if (!addr_str.ok()) {
888
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_str.status().ToString());
889
- }
932
+ if (!addr_str.ok()) return addr_str.status();
890
933
  auto insert_result = destination_ip_map->emplace(
891
934
  absl::StrCat(*addr_str, "/", prefix_range.prefix_len),
892
935
  InternalFilterChainMap::DestinationIp());
893
936
  if (insert_result.second) {
894
937
  insert_result.first->second.prefix_range.emplace(prefix_range);
895
938
  }
896
- grpc_error_handle error = AddFilterChainDataForServerNames(
939
+ absl::Status status = AddFilterChainDataForServerNames(
897
940
  filter_chain, &insert_result.first->second);
898
- if (!GRPC_ERROR_IS_NONE(error)) return error;
941
+ if (!status.ok()) return status;
899
942
  }
900
943
  }
901
- return GRPC_ERROR_NONE;
944
+ return absl::OkStatus();
902
945
  }
903
946
 
904
947
  XdsListenerResource::FilterChainMap BuildFromInternalFilterChainMap(
@@ -920,36 +963,33 @@ XdsListenerResource::FilterChainMap BuildFromInternalFilterChainMap(
920
963
  return filter_chain_map;
921
964
  }
922
965
 
923
- grpc_error_handle BuildFilterChainMap(
924
- const std::vector<FilterChain>& filter_chains,
925
- XdsListenerResource::FilterChainMap* filter_chain_map) {
966
+ absl::StatusOr<XdsListenerResource::FilterChainMap> BuildFilterChainMap(
967
+ const std::vector<FilterChain>& filter_chains) {
926
968
  InternalFilterChainMap internal_filter_chain_map;
927
969
  for (const auto& filter_chain : filter_chains) {
928
970
  // Discard filter chain entries that specify destination port
929
971
  if (filter_chain.filter_chain_match.destination_port != 0) continue;
930
- grpc_error_handle error = AddFilterChainDataForDestinationIpRange(
972
+ absl::Status status = AddFilterChainDataForDestinationIpRange(
931
973
  filter_chain, &internal_filter_chain_map.destination_ip_map);
932
- if (!GRPC_ERROR_IS_NONE(error)) return error;
974
+ if (!status.ok()) return status;
933
975
  }
934
- *filter_chain_map =
935
- BuildFromInternalFilterChainMap(&internal_filter_chain_map);
936
- return GRPC_ERROR_NONE;
976
+ return BuildFromInternalFilterChainMap(&internal_filter_chain_map);
937
977
  }
938
978
 
939
- grpc_error_handle LdsResourceParseServer(
940
- const XdsEncodingContext& context,
941
- const envoy_config_listener_v3_Listener* listener, bool is_v2,
942
- XdsListenerResource* lds_update) {
943
- lds_update->type = XdsListenerResource::ListenerType::kTcpListener;
944
- grpc_error_handle error =
945
- AddressParse(envoy_config_listener_v3_Listener_address(listener),
946
- &lds_update->address);
947
- if (!GRPC_ERROR_IS_NONE(error)) return error;
979
+ absl::StatusOr<XdsListenerResource> LdsResourceParseServer(
980
+ const XdsResourceType::DecodeContext& context,
981
+ const envoy_config_listener_v3_Listener* listener, bool is_v2) {
982
+ XdsListenerResource lds_update;
983
+ lds_update.type = XdsListenerResource::ListenerType::kTcpListener;
984
+ auto address =
985
+ AddressParse(envoy_config_listener_v3_Listener_address(listener));
986
+ if (!address.ok()) return address.status();
987
+ lds_update.address = std::move(*address);
948
988
  const auto* use_original_dst =
949
989
  envoy_config_listener_v3_Listener_use_original_dst(listener);
950
990
  if (use_original_dst != nullptr) {
951
991
  if (google_protobuf_BoolValue_value(use_original_dst)) {
952
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
992
+ return absl::InvalidArgumentError(
953
993
  "Field \'use_original_dst\' is not supported.");
954
994
  }
955
995
  }
@@ -959,36 +999,32 @@ grpc_error_handle LdsResourceParseServer(
959
999
  std::vector<FilterChain> parsed_filter_chains;
960
1000
  parsed_filter_chains.reserve(size);
961
1001
  for (size_t i = 0; i < size; i++) {
962
- FilterChain filter_chain;
963
- error = FilterChainParse(context, filter_chains[i], is_v2, &filter_chain);
964
- if (!GRPC_ERROR_IS_NONE(error)) return error;
965
- parsed_filter_chains.push_back(std::move(filter_chain));
966
- }
967
- error =
968
- BuildFilterChainMap(parsed_filter_chains, &lds_update->filter_chain_map);
969
- if (!GRPC_ERROR_IS_NONE(error)) return error;
1002
+ auto filter_chain = FilterChainParse(context, filter_chains[i], is_v2);
1003
+ if (!filter_chain.ok()) return filter_chain.status();
1004
+ parsed_filter_chains.push_back(std::move(*filter_chain));
1005
+ }
1006
+ auto filter_chain_map = BuildFilterChainMap(parsed_filter_chains);
1007
+ if (!filter_chain_map.ok()) return filter_chain_map.status();
1008
+ lds_update.filter_chain_map = std::move(*filter_chain_map);
970
1009
  auto* default_filter_chain =
971
1010
  envoy_config_listener_v3_Listener_default_filter_chain(listener);
972
1011
  if (default_filter_chain != nullptr) {
973
- FilterChain filter_chain;
974
- error =
975
- FilterChainParse(context, default_filter_chain, is_v2, &filter_chain);
976
- if (!GRPC_ERROR_IS_NONE(error)) return error;
977
- if (filter_chain.filter_chain_data != nullptr) {
978
- lds_update->default_filter_chain =
979
- std::move(*filter_chain.filter_chain_data);
1012
+ auto filter_chain = FilterChainParse(context, default_filter_chain, is_v2);
1013
+ if (!filter_chain.ok()) return filter_chain.status();
1014
+ if (filter_chain->filter_chain_data != nullptr) {
1015
+ lds_update.default_filter_chain =
1016
+ std::move(*filter_chain->filter_chain_data);
980
1017
  }
981
1018
  }
982
1019
  if (size == 0 && default_filter_chain == nullptr) {
983
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No filter chain provided.");
1020
+ return absl::InvalidArgumentError("No filter chain provided.");
984
1021
  }
985
- return GRPC_ERROR_NONE;
1022
+ return lds_update;
986
1023
  }
987
1024
 
988
- grpc_error_handle LdsResourceParse(
989
- const XdsEncodingContext& context,
990
- const envoy_config_listener_v3_Listener* listener, bool is_v2,
991
- XdsListenerResource* lds_update) {
1025
+ absl::StatusOr<XdsListenerResource> LdsResourceParse(
1026
+ const XdsResourceType::DecodeContext& context,
1027
+ const envoy_config_listener_v3_Listener* listener, bool is_v2) {
992
1028
  // Check whether it's a client or server listener.
993
1029
  const envoy_config_listener_v3_ApiListener* api_listener =
994
1030
  envoy_config_listener_v3_Listener_api_listener(listener);
@@ -997,24 +1033,22 @@ grpc_error_handle LdsResourceParse(
997
1033
  // TODO(roth): Re-enable the following check once
998
1034
  // github.com/istio/istio/issues/38914 is resolved.
999
1035
  // if (api_listener != nullptr && address != nullptr) {
1000
- // return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1036
+ // return absl::InvalidArgumentError(
1001
1037
  // "Listener has both address and ApiListener");
1002
1038
  // }
1003
1039
  if (api_listener == nullptr && address == nullptr) {
1004
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1040
+ return absl::InvalidArgumentError(
1005
1041
  "Listener has neither address nor ApiListener");
1006
1042
  }
1007
- // Validate Listener fields.
1008
- grpc_error_handle error = GRPC_ERROR_NONE;
1043
+ // If api_listener is present, it's for a client; otherwise, it's
1044
+ // for a server.
1009
1045
  if (api_listener != nullptr) {
1010
- error = LdsResourceParseClient(context, api_listener, is_v2, lds_update);
1011
- } else {
1012
- error = LdsResourceParseServer(context, listener, is_v2, lds_update);
1046
+ return LdsResourceParseClient(context, api_listener, is_v2);
1013
1047
  }
1014
- return error;
1048
+ return LdsResourceParseServer(context, listener, is_v2);
1015
1049
  }
1016
1050
 
1017
- void MaybeLogListener(const XdsEncodingContext& context,
1051
+ void MaybeLogListener(const XdsResourceType::DecodeContext& context,
1018
1052
  const envoy_config_listener_v3_Listener* listener) {
1019
1053
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
1020
1054
  gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
@@ -1028,40 +1062,41 @@ void MaybeLogListener(const XdsEncodingContext& context,
1028
1062
 
1029
1063
  } // namespace
1030
1064
 
1031
- absl::StatusOr<XdsResourceType::DecodeResult> XdsListenerResourceType::Decode(
1032
- const XdsEncodingContext& context, absl::string_view serialized_resource,
1033
- bool is_v2) const {
1065
+ XdsResourceType::DecodeResult XdsListenerResourceType::Decode(
1066
+ const XdsResourceType::DecodeContext& context,
1067
+ absl::string_view serialized_resource, bool is_v2) const {
1068
+ DecodeResult result;
1034
1069
  // Parse serialized proto.
1035
1070
  auto* resource = envoy_config_listener_v3_Listener_parse(
1036
1071
  serialized_resource.data(), serialized_resource.size(), context.arena);
1037
1072
  if (resource == nullptr) {
1038
- return absl::InvalidArgumentError("Can't parse Listener resource.");
1073
+ result.resource =
1074
+ absl::InvalidArgumentError("Can't parse Listener resource.");
1075
+ return result;
1039
1076
  }
1040
1077
  MaybeLogListener(context, resource);
1041
1078
  // Validate resource.
1042
- DecodeResult result;
1043
1079
  result.name =
1044
1080
  UpbStringToStdString(envoy_config_listener_v3_Listener_name(resource));
1045
- auto listener_data = absl::make_unique<ResourceDataSubclass>();
1046
- grpc_error_handle error =
1047
- LdsResourceParse(context, resource, is_v2, &listener_data->resource);
1048
- if (!GRPC_ERROR_IS_NONE(error)) {
1049
- std::string error_str = grpc_error_std_string(error);
1050
- GRPC_ERROR_UNREF(error);
1081
+ auto listener = LdsResourceParse(context, resource, is_v2);
1082
+ if (!listener.ok()) {
1051
1083
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
1052
1084
  gpr_log(GPR_ERROR, "[xds_client %p] invalid Listener %s: %s",
1053
- context.client, result.name.c_str(), error_str.c_str());
1085
+ context.client, result.name->c_str(),
1086
+ listener.status().ToString().c_str());
1054
1087
  }
1055
- result.resource = absl::InvalidArgumentError(error_str);
1088
+ result.resource = listener.status();
1056
1089
  } else {
1057
1090
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
1058
1091
  gpr_log(GPR_INFO, "[xds_client %p] parsed Listener %s: %s",
1059
- context.client, result.name.c_str(),
1060
- listener_data->resource.ToString().c_str());
1092
+ context.client, result.name->c_str(),
1093
+ listener->ToString().c_str());
1061
1094
  }
1062
- result.resource = std::move(listener_data);
1095
+ auto resource = absl::make_unique<ResourceDataSubclass>();
1096
+ resource->resource = std::move(*listener);
1097
+ result.resource = std::move(resource);
1063
1098
  }
1064
- return std::move(result);
1099
+ return result;
1065
1100
  }
1066
1101
 
1067
1102
  } // namespace grpc_core