grpc 1.58.0 → 1.59.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (551) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +48 -33
  3. data/include/grpc/event_engine/event_engine.h +6 -10
  4. data/include/grpc/impl/channel_arg_names.h +4 -0
  5. data/include/grpc/support/port_platform.h +74 -1
  6. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +22 -9
  7. data/src/core/ext/filters/client_channel/client_channel.cc +422 -56
  8. data/src/core/ext/filters/client_channel/client_channel.h +52 -8
  9. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +15 -1
  10. data/src/core/ext/filters/client_channel/dynamic_filters.h +2 -0
  11. data/src/core/ext/filters/client_channel/{http_proxy.cc → http_proxy_mapper.cc} +1 -1
  12. data/src/core/ext/filters/client_channel/{http_proxy.h → http_proxy_mapper.h} +3 -3
  13. data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +188 -0
  14. data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +214 -0
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +17 -4
  16. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +41 -6
  17. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +5 -3
  18. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +32 -103
  19. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +0 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +416 -139
  21. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.h +16 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +434 -459
  23. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +410 -26
  24. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +14 -46
  25. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +851 -57
  26. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +16 -10
  27. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +47 -32
  28. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +55 -3
  29. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +105 -175
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +14 -7
  31. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +24 -6
  32. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +36 -2
  33. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +54 -44
  34. data/src/core/ext/filters/client_channel/subchannel.cc +33 -0
  35. data/src/core/ext/filters/client_channel/subchannel.h +9 -0
  36. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -1
  37. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +11 -6
  38. data/src/core/ext/transport/chttp2/transport/flow_control.cc +28 -22
  39. data/src/core/ext/transport/chttp2/transport/flow_control.h +27 -4
  40. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  41. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -1
  42. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +9 -0
  43. data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -1
  44. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
  45. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -1
  46. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +1 -1
  47. data/src/core/ext/transport/chttp2/transport/frame_settings.h +1 -1
  48. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -1
  49. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  50. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +19 -10
  51. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -1
  52. data/src/core/ext/transport/chttp2/transport/internal.h +66 -47
  53. data/src/core/ext/transport/chttp2/transport/{frame.h → legacy_frame.h} +3 -3
  54. data/src/core/ext/transport/chttp2/transport/parsing.cc +4 -2
  55. data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc +10 -0
  56. data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.h +4 -0
  57. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +1 -1
  58. data/src/core/ext/transport/chttp2/transport/writing.cc +2 -1
  59. data/src/core/ext/transport/inproc/inproc_transport.cc +9 -0
  60. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +16 -18
  61. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +75 -83
  62. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +27 -29
  63. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +102 -110
  64. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +16 -18
  65. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +73 -81
  66. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +65 -67
  67. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +294 -302
  68. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +4 -6
  69. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +20 -28
  70. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +5 -7
  71. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +24 -32
  72. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -9
  73. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +19 -27
  74. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -6
  75. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +10 -18
  76. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -6
  77. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +10 -18
  78. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +42 -44
  79. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +141 -149
  80. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -5
  81. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +8 -16
  82. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +5 -7
  83. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -9
  84. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +3 -5
  85. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +4 -12
  86. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +36 -38
  87. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +157 -165
  88. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +87 -89
  89. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +372 -380
  90. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -15
  91. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +55 -63
  92. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +111 -113
  93. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +441 -449
  94. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -5
  95. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +8 -16
  96. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +23 -25
  97. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +88 -96
  98. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +40 -42
  99. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +180 -188
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +26 -28
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +108 -116
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +3 -5
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +9 -17
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +65 -67
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +245 -253
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +27 -29
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +119 -127
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -4
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -14
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +3 -5
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +8 -16
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +4 -6
  113. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +20 -28
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +49 -51
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +184 -192
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +49 -51
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +225 -233
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -6
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +13 -21
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +63 -65
  121. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +246 -254
  122. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +5 -7
  123. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +19 -27
  124. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +5 -7
  125. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +19 -27
  126. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +8 -10
  127. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +30 -38
  128. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +7 -9
  129. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +28 -36
  130. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +3 -5
  131. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +9 -17
  132. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +12 -14
  133. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +48 -56
  134. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +23 -25
  135. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +92 -100
  136. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +27 -29
  137. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +108 -116
  138. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -4
  139. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +5 -13
  140. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +38 -40
  141. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +167 -175
  142. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +34 -36
  143. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +162 -170
  144. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +10 -12
  145. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +37 -45
  146. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +4 -6
  147. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -21
  148. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +6 -8
  149. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +18 -26
  150. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +22 -24
  151. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +97 -105
  152. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +24 -26
  153. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +111 -119
  154. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +43 -45
  155. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +183 -191
  156. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +20 -22
  157. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +102 -110
  158. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +253 -255
  159. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +1108 -1116
  160. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +8 -10
  161. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +31 -39
  162. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +35 -37
  163. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +150 -158
  164. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +4 -6
  165. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +10 -18
  166. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -5
  167. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +8 -16
  168. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +4 -6
  169. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +13 -21
  170. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -7
  171. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +19 -27
  172. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +14 -16
  173. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +53 -61
  174. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +3 -5
  175. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +8 -16
  176. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -4
  177. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +5 -13
  178. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +7 -9
  179. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +24 -32
  180. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -3
  181. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -9
  182. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +7 -9
  183. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +23 -31
  184. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +8 -10
  185. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +23 -31
  186. data/src/core/ext/upb-generated/envoy/data/accesslog/v3/accesslog.upb.c +114 -116
  187. data/src/core/ext/upb-generated/envoy/data/accesslog/v3/accesslog.upb.h +372 -380
  188. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -4
  189. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +9 -17
  190. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +8 -10
  191. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -38
  192. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +21 -23
  193. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +81 -89
  194. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +7 -9
  195. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +24 -32
  196. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +12 -14
  197. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +52 -60
  198. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +4 -6
  199. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +14 -22
  200. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +114 -116
  201. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +468 -476
  202. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +2 -4
  203. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +5 -13
  204. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +7 -9
  205. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +25 -33
  206. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +11 -13
  207. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +40 -48
  208. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.c +2 -4
  209. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +4 -12
  210. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +8 -10
  211. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +27 -35
  212. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +2 -4
  213. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +5 -13
  214. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +1 -3
  215. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -9
  216. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +35 -37
  217. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +165 -173
  218. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +9 -11
  219. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +32 -40
  220. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +39 -41
  221. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +169 -177
  222. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +4 -6
  223. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +16 -24
  224. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -3
  225. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +1 -9
  226. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +55 -57
  227. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +241 -249
  228. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -9
  229. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -39
  230. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +23 -25
  231. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +98 -106
  232. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -6
  233. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +11 -19
  234. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -6
  235. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +18 -26
  236. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +3 -5
  237. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +9 -17
  238. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +6 -8
  239. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +16 -24
  240. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +6 -8
  241. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +24 -32
  242. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -5
  243. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +13 -21
  244. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -5
  245. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +10 -18
  246. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -4
  247. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -14
  248. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -8
  249. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +20 -28
  250. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +1 -3
  251. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +1 -9
  252. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +8 -10
  253. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +33 -41
  254. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +4 -6
  255. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +18 -26
  256. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +8 -10
  257. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +31 -39
  258. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +8 -10
  259. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +34 -42
  260. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +14 -16
  261. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +47 -55
  262. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +4 -6
  263. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +13 -21
  264. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +1 -3
  265. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -9
  266. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -4
  267. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +4 -12
  268. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +4 -6
  269. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +10 -18
  270. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +7 -9
  271. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -27
  272. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +6 -8
  273. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +20 -28
  274. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +1 -3
  275. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +1 -9
  276. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -6
  277. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +10 -18
  278. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +4 -6
  279. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +12 -20
  280. data/src/core/ext/upb-generated/google/api/annotations.upb.c +2 -4
  281. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -9
  282. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +45 -47
  283. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +190 -198
  284. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +54 -56
  285. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +210 -218
  286. data/src/core/ext/upb-generated/google/api/http.upb.c +15 -17
  287. data/src/core/ext/upb-generated/google/api/http.upb.h +60 -68
  288. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -6
  289. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +15 -23
  290. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -5
  291. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -15
  292. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +359 -204
  293. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1340 -760
  294. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -5
  295. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -15
  296. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -3
  297. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -9
  298. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +11 -13
  299. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +43 -51
  300. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -5
  301. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -15
  302. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +10 -12
  303. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +28 -36
  304. data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -6
  305. data/src/core/ext/upb-generated/google/rpc/status.upb.h +15 -23
  306. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +11 -13
  307. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +35 -43
  308. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +10 -12
  309. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +28 -36
  310. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +48 -50
  311. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +190 -198
  312. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -7
  313. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +15 -23
  314. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +3 -5
  315. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +7 -15
  316. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +21 -23
  317. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +80 -88
  318. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +9 -11
  319. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +29 -37
  320. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +32 -34
  321. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +147 -155
  322. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +10 -12
  323. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +13 -21
  324. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +4 -6
  325. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -15
  326. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +2 -4
  327. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -9
  328. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +4 -6
  329. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -15
  330. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +3 -5
  331. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +4 -12
  332. data/src/core/ext/upb-generated/validate/validate.upb.c +201 -203
  333. data/src/core/ext/upb-generated/validate/validate.upb.h +924 -932
  334. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +10 -12
  335. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +13 -21
  336. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +4 -6
  337. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -15
  338. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +2 -4
  339. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +1 -9
  340. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +9 -11
  341. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +16 -24
  342. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +3 -5
  343. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +4 -12
  344. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -4
  345. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +4 -12
  346. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +3 -5
  347. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +8 -16
  348. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +6 -8
  349. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +20 -28
  350. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +4 -6
  351. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +9 -17
  352. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -5
  353. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +8 -16
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +4 -6
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +12 -20
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +9 -11
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +35 -43
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -7
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +14 -22
  360. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +16 -18
  361. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +43 -51
  362. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +3 -5
  363. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +13 -21
  364. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +2 -4
  365. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +5 -13
  366. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +4 -6
  367. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +21 -29
  368. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +1 -3
  369. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +1 -9
  370. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +5 -7
  371. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +24 -32
  372. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +24 -26
  373. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +103 -111
  374. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +10 -12
  375. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +61 -69
  376. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +3 -5
  377. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +9 -17
  378. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +8 -10
  379. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +33 -41
  380. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +5 -7
  381. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +18 -26
  382. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +7 -9
  383. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +19 -27
  384. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -5
  385. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +8 -16
  386. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +367 -290
  387. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +10 -0
  388. data/src/core/ext/xds/xds_client.cc +6 -9
  389. data/src/core/ext/xds/xds_client.h +2 -2
  390. data/src/core/ext/xds/xds_cluster.cc +30 -42
  391. data/src/core/ext/xds/xds_cluster.h +0 -4
  392. data/src/core/ext/xds/xds_endpoint.cc +12 -19
  393. data/src/core/ext/xds/xds_endpoint.h +0 -1
  394. data/src/core/ext/xds/xds_http_filters.cc +1 -4
  395. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +1 -4
  396. data/src/core/ext/xds/xds_listener.cc +14 -14
  397. data/src/core/ext/xds/xds_listener.h +13 -3
  398. data/src/core/ext/xds/xds_resource_type.h +1 -7
  399. data/src/core/ext/xds/xds_resource_type_impl.h +9 -11
  400. data/src/core/ext/xds/xds_route_config.cc +10 -11
  401. data/src/core/ext/xds/xds_route_config.h +1 -1
  402. data/src/core/ext/xds/xds_server_config_fetcher.cc +53 -28
  403. data/src/core/ext/xds/xds_transport_grpc.cc +11 -1
  404. data/src/core/lib/backoff/random_early_detection.cc +4 -2
  405. data/src/core/lib/backoff/random_early_detection.h +2 -4
  406. data/src/core/lib/channel/call_tracer.cc +7 -1
  407. data/src/core/lib/channel/call_tracer.h +4 -1
  408. data/src/core/lib/channel/channelz_registry.h +4 -2
  409. data/src/core/lib/channel/connected_channel.cc +1 -1
  410. data/src/core/lib/config/config_vars.h +1 -1
  411. data/src/core/lib/config/core_configuration.cc +2 -1
  412. data/src/core/lib/config/core_configuration.h +5 -4
  413. data/src/core/lib/debug/stats_data.cc +146 -51
  414. data/src/core/lib/debug/stats_data.h +81 -20
  415. data/src/core/lib/event_engine/ares_resolver.cc +9 -0
  416. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -0
  417. data/src/core/lib/event_engine/cf_engine/cf_engine.h +3 -0
  418. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +3 -0
  419. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +3 -0
  420. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +3 -0
  421. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +15 -3
  422. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +3 -0
  423. data/src/core/lib/event_engine/nameser.h +102 -0
  424. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1 -1
  425. data/src/core/lib/event_engine/thread_pool/thread_count.h +15 -0
  426. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +3 -15
  427. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +10 -4
  428. data/src/core/lib/experiments/config.cc +9 -1
  429. data/src/core/lib/experiments/experiments.cc +409 -144
  430. data/src/core/lib/experiments/experiments.h +153 -39
  431. data/src/core/lib/gprpp/fork.h +1 -1
  432. data/src/core/lib/gprpp/manual_constructor.h +1 -2
  433. data/src/core/lib/gprpp/no_destruct.h +1 -1
  434. data/src/core/lib/gprpp/per_cpu.cc +2 -0
  435. data/src/core/lib/gprpp/per_cpu.h +36 -7
  436. data/src/core/lib/gprpp/ref_counted_ptr.h +63 -0
  437. data/src/core/lib/gprpp/work_serializer.cc +297 -25
  438. data/src/core/lib/gprpp/work_serializer.h +25 -9
  439. data/src/core/lib/iomgr/combiner.cc +54 -15
  440. data/src/core/lib/iomgr/combiner.h +8 -3
  441. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -4
  442. data/src/core/lib/iomgr/exec_ctx.cc +12 -0
  443. data/src/core/lib/iomgr/exec_ctx.h +55 -19
  444. data/src/core/lib/iomgr/polling_entity.cc +10 -0
  445. data/src/core/lib/iomgr/polling_entity.h +2 -0
  446. data/src/core/lib/iomgr/port.h +14 -0
  447. data/src/core/lib/iomgr/tcp_posix.cc +17 -14
  448. data/src/core/lib/load_balancing/lb_policy.h +10 -9
  449. data/src/core/lib/promise/arena_promise.h +5 -1
  450. data/src/core/lib/promise/detail/seq_state.h +418 -0
  451. data/src/core/lib/promise/latch.h +1 -0
  452. data/src/core/lib/promise/loop.h +8 -5
  453. data/src/core/lib/promise/pipe.h +24 -24
  454. data/src/core/lib/promise/poll.h +4 -6
  455. data/src/core/lib/resolver/server_address.h +1 -0
  456. data/src/core/lib/resource_quota/memory_quota.cc +58 -2
  457. data/src/core/lib/resource_quota/memory_quota.h +4 -1
  458. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +115 -9
  459. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +14 -0
  460. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_match.cc +86 -0
  461. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +0 -59
  462. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +2 -0
  463. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +7 -57
  464. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +1 -1
  465. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +2 -14
  466. data/src/core/lib/slice/slice.h +6 -0
  467. data/src/core/lib/slice/slice_buffer.cc +15 -0
  468. data/src/core/lib/slice/slice_buffer.h +16 -4
  469. data/src/core/lib/slice/slice_refcount.h +1 -1
  470. data/src/core/lib/surface/call.cc +92 -34
  471. data/src/core/lib/surface/call.h +4 -0
  472. data/src/core/lib/surface/channel.cc +7 -4
  473. data/src/core/lib/surface/channel_init.h +3 -2
  474. data/src/core/lib/surface/server.cc +45 -5
  475. data/src/core/lib/surface/server.h +18 -6
  476. data/src/core/lib/surface/version.cc +2 -2
  477. data/src/core/lib/transport/batch_builder.cc +3 -5
  478. data/src/core/lib/transport/metadata_batch.cc +6 -0
  479. data/src/core/lib/transport/metadata_batch.h +20 -1
  480. data/src/core/lib/transport/parsed_metadata.h +2 -4
  481. data/src/core/lib/transport/simple_slice_based_metadata.h +1 -2
  482. data/src/core/lib/transport/transport.h +21 -11
  483. data/src/core/tsi/ssl_transport_security.cc +7 -0
  484. data/src/core/tsi/ssl_transport_security.h +4 -0
  485. data/src/ruby/ext/grpc/extconf.rb +1 -1
  486. data/src/ruby/ext/grpc/rb_channel_args.c +6 -4
  487. data/src/ruby/lib/grpc/version.rb +1 -1
  488. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -1
  489. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +185 -0
  490. data/third_party/upb/upb/collections/array.c +6 -0
  491. data/third_party/upb/upb/collections/array.h +6 -0
  492. data/third_party/upb/upb/collections/map.c +7 -0
  493. data/third_party/upb/upb/collections/map.h +5 -0
  494. data/third_party/upb/upb/collections/map_sorter_internal.h +1 -1
  495. data/third_party/upb/upb/collections/message_value.h +8 -1
  496. data/third_party/upb/upb/generated_code_support.h +54 -0
  497. data/third_party/upb/upb/hash/common.c +5 -0
  498. data/third_party/upb/upb/hash/common.h +1 -0
  499. data/third_party/upb/upb/hash/str_table.h +1 -0
  500. data/third_party/upb/upb/message/accessors.c +25 -1
  501. data/third_party/upb/upb/message/accessors.h +46 -25
  502. data/third_party/upb/upb/message/accessors_internal.h +69 -3
  503. data/third_party/upb/upb/message/extension_internal.h +1 -1
  504. data/third_party/upb/upb/message/internal/map_entry.h +64 -0
  505. data/third_party/upb/upb/message/internal.h +2 -6
  506. data/third_party/upb/upb/message/message.c +0 -6
  507. data/third_party/upb/upb/message/message.h +1 -1
  508. data/third_party/upb/upb/message/tagged_ptr.h +89 -0
  509. data/third_party/upb/upb/mini_descriptor/build_enum.c +150 -0
  510. data/third_party/upb/upb/mini_descriptor/build_enum.h +63 -0
  511. data/third_party/upb/upb/{mini_table → mini_descriptor}/decode.c +122 -374
  512. data/third_party/upb/upb/{mini_table → mini_descriptor}/decode.h +11 -50
  513. data/third_party/upb/upb/mini_descriptor/internal/base92.c +46 -0
  514. data/third_party/upb/upb/mini_descriptor/internal/base92.h +81 -0
  515. data/third_party/upb/upb/mini_descriptor/internal/decoder.h +73 -0
  516. data/third_party/upb/upb/{mini_table → mini_descriptor/internal}/encode.c +58 -32
  517. data/third_party/upb/upb/{mini_table/encode_internal.h → mini_descriptor/internal/encode.h} +3 -4
  518. data/third_party/upb/upb/{mini_table/encode_internal.hpp → mini_descriptor/internal/encode.hpp} +1 -1
  519. data/third_party/upb/upb/mini_descriptor/internal/modifiers.h +50 -0
  520. data/third_party/upb/upb/{mini_table/common_internal.h → mini_descriptor/internal/wire_constants.h} +3 -23
  521. data/third_party/upb/upb/mini_descriptor/link.c +142 -0
  522. data/third_party/upb/upb/mini_descriptor/link.h +104 -0
  523. data/third_party/upb/upb/mini_table/{types.h → enum.h} +19 -9
  524. data/third_party/upb/upb/mini_table/extension.h +40 -0
  525. data/third_party/upb/upb/mini_table/extension_registry.c +1 -1
  526. data/third_party/upb/upb/mini_table/extension_registry.h +2 -1
  527. data/third_party/upb/upb/mini_table/field.h +118 -0
  528. data/third_party/upb/upb/{json_decode.h → mini_table/file.h} +5 -6
  529. data/third_party/upb/upb/mini_table/{enum_internal.h → internal/enum.h} +7 -19
  530. data/third_party/upb/upb/mini_table/{extension_internal.h → internal/extension.h} +8 -8
  531. data/third_party/upb/upb/mini_table/{field_internal.h → internal/field.h} +10 -66
  532. data/third_party/upb/upb/mini_table/{file_internal.h → internal/file.h} +6 -4
  533. data/third_party/upb/upb/mini_table/internal/message.c +39 -0
  534. data/third_party/upb/upb/mini_table/{message_internal.h → internal/message.h} +14 -37
  535. data/third_party/upb/upb/mini_table/{sub_internal.h → internal/sub.h} +7 -6
  536. data/third_party/upb/upb/mini_table/{common.c → message.c} +2 -33
  537. data/third_party/upb/upb/mini_table/{common.h → message.h} +12 -77
  538. data/third_party/upb/upb/{json_encode.h → mini_table/sub.h} +5 -6
  539. data/third_party/upb/upb/reflection/def.hpp +16 -4
  540. data/third_party/upb/upb/reflection/def_pool_internal.h +1 -1
  541. data/third_party/upb/upb/reflection/desc_state_internal.h +1 -1
  542. data/third_party/upb/upb/reflection/enum_def.c +1 -1
  543. data/third_party/upb/upb/reflection/field_def.c +2 -1
  544. data/third_party/upb/upb/reflection/message.c +2 -2
  545. data/third_party/upb/upb/reflection/message_def.c +3 -1
  546. data/third_party/upb/upb/wire/decode.c +68 -29
  547. data/third_party/upb/upb/wire/decode.h +40 -0
  548. data/third_party/upb/upb/wire/encode.c +23 -13
  549. metadata +44 -27
  550. data/src/core/lib/event_engine/thread_pool/original_thread_pool.cc +0 -256
  551. data/src/core/lib/event_engine/thread_pool/original_thread_pool.h +0 -137
@@ -107,6 +107,11 @@ UPB_INLINE const upb_MessageDef *google_protobuf_FieldOptions_getmsgdef(upb_DefP
107
107
  return upb_DefPool_FindMessageByName(s, "google.protobuf.FieldOptions");
108
108
  }
109
109
 
110
+ UPB_INLINE const upb_MessageDef *google_protobuf_FieldOptions_EditionDefault_getmsgdef(upb_DefPool *s) {
111
+ _upb_DefPool_LoadDefInit(s, &google_protobuf_descriptor_proto_upbdefinit);
112
+ return upb_DefPool_FindMessageByName(s, "google.protobuf.FieldOptions.EditionDefault");
113
+ }
114
+
110
115
  UPB_INLINE const upb_MessageDef *google_protobuf_OneofOptions_getmsgdef(upb_DefPool *s) {
111
116
  _upb_DefPool_LoadDefInit(s, &google_protobuf_descriptor_proto_upbdefinit);
112
117
  return upb_DefPool_FindMessageByName(s, "google.protobuf.OneofOptions");
@@ -142,6 +147,11 @@ UPB_INLINE const upb_MessageDef *google_protobuf_UninterpretedOption_NamePart_ge
142
147
  return upb_DefPool_FindMessageByName(s, "google.protobuf.UninterpretedOption.NamePart");
143
148
  }
144
149
 
150
+ UPB_INLINE const upb_MessageDef *google_protobuf_FeatureSet_getmsgdef(upb_DefPool *s) {
151
+ _upb_DefPool_LoadDefInit(s, &google_protobuf_descriptor_proto_upbdefinit);
152
+ return upb_DefPool_FindMessageByName(s, "google.protobuf.FeatureSet");
153
+ }
154
+
145
155
  UPB_INLINE const upb_MessageDef *google_protobuf_SourceCodeInfo_getmsgdef(upb_DefPool *s) {
146
156
  _upb_DefPool_LoadDefInit(s, &google_protobuf_descriptor_proto_upbdefinit);
147
157
  return upb_DefPool_FindMessageByName(s, "google.protobuf.SourceCodeInfo");
@@ -865,15 +865,12 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
865
865
  std::string(serialized_resource), result_.version, update_time_);
866
866
  // Notify watchers.
867
867
  auto& watchers_list = resource_state.watchers;
868
- auto* value =
869
- result_.type->CopyResource(resource_state.resource.get()).release();
870
868
  xds_client()->work_serializer_.Schedule(
871
- [watchers_list, value]()
869
+ [watchers_list, value = resource_state.resource]()
872
870
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client()->work_serializer_) {
873
871
  for (const auto& p : watchers_list) {
874
872
  p.first->OnGenericResourceChanged(value);
875
873
  }
876
- delete value;
877
874
  },
878
875
  DEBUG_LOCATION);
879
876
  }
@@ -1494,6 +1491,7 @@ XdsClient::XdsClient(
1494
1491
  xds_federation_enabled_(XdsFederationEnabled()),
1495
1492
  api_(this, &grpc_xds_client_trace, bootstrap_->node(), &symtab_,
1496
1493
  std::move(user_agent_name), std::move(user_agent_version)),
1494
+ work_serializer_(engine),
1497
1495
  engine_(std::move(engine)) {
1498
1496
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1499
1497
  gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
@@ -1604,12 +1602,11 @@ void XdsClient::WatchResource(const XdsResourceType* type,
1604
1602
  "[xds_client %p] returning cached listener data for %s", this,
1605
1603
  std::string(name).c_str());
1606
1604
  }
1607
- auto* value = type->CopyResource(resource_state.resource.get()).release();
1608
1605
  work_serializer_.Schedule(
1609
- [watcher, value]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
1610
- watcher->OnGenericResourceChanged(value);
1611
- delete value;
1612
- },
1606
+ [watcher, value = resource_state.resource]()
1607
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
1608
+ watcher->OnGenericResourceChanged(value);
1609
+ },
1613
1610
  DEBUG_LOCATION);
1614
1611
  } else if (resource_state.meta.client_status ==
1615
1612
  XdsApi::ResourceMetadata::DOES_NOT_EXIST) {
@@ -63,7 +63,7 @@ class XdsClient : public DualRefCounted<XdsClient> {
63
63
  class ResourceWatcherInterface : public RefCounted<ResourceWatcherInterface> {
64
64
  public:
65
65
  virtual void OnGenericResourceChanged(
66
- const XdsResourceType::ResourceData* resource)
66
+ std::shared_ptr<const XdsResourceType::ResourceData> resource)
67
67
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) = 0;
68
68
  virtual void OnError(absl::Status status)
69
69
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) = 0;
@@ -238,7 +238,7 @@ class XdsClient : public DualRefCounted<XdsClient> {
238
238
  std::map<ResourceWatcherInterface*, RefCountedPtr<ResourceWatcherInterface>>
239
239
  watchers;
240
240
  // The latest data seen for the resource.
241
- std::unique_ptr<XdsResourceType::ResourceData> resource;
241
+ std::shared_ptr<const XdsResourceType::ResourceData> resource;
242
242
  XdsApi::ResourceMetadata meta;
243
243
  bool ignored_deletion = false;
244
244
  };
@@ -20,6 +20,8 @@
20
20
 
21
21
  #include <stddef.h>
22
22
 
23
+ #include <algorithm>
24
+ #include <memory>
23
25
  #include <utility>
24
26
 
25
27
  #include "absl/status/status.h"
@@ -57,8 +59,6 @@
57
59
  #include "src/core/ext/xds/xds_resource_type.h"
58
60
  #include "src/core/lib/config/core_configuration.h"
59
61
  #include "src/core/lib/debug/trace.h"
60
- #include "src/core/lib/gpr/string.h"
61
- #include "src/core/lib/gprpp/env.h"
62
62
  #include "src/core/lib/gprpp/host_port.h"
63
63
  #include "src/core/lib/gprpp/match.h"
64
64
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
@@ -70,15 +70,6 @@
70
70
 
71
71
  namespace grpc_core {
72
72
 
73
- // TODO(eostroukhov): Remove once this feature is no longer experimental.
74
- bool XdsOverrideHostEnabled() {
75
- auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_ENABLE_OVERRIDE_HOST");
76
- if (!value.has_value()) return false;
77
- bool parsed_value;
78
- bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
79
- return parse_succeeded && parsed_value;
80
- }
81
-
82
73
  //
83
74
  // XdsClusterResource
84
75
  //
@@ -416,18 +407,18 @@ void ParseLbPolicyConfig(const XdsResourceType::DecodeContext& context,
416
407
  }
417
408
  }
418
409
 
419
- absl::StatusOr<XdsClusterResource> CdsResourceParse(
410
+ absl::StatusOr<std::shared_ptr<const XdsClusterResource>> CdsResourceParse(
420
411
  const XdsResourceType::DecodeContext& context,
421
412
  const envoy_config_cluster_v3_Cluster* cluster) {
422
- XdsClusterResource cds_update;
413
+ auto cds_update = std::make_shared<XdsClusterResource>();
423
414
  ValidationErrors errors;
424
415
  // Check the cluster discovery type.
425
416
  if (envoy_config_cluster_v3_Cluster_type(cluster) ==
426
417
  envoy_config_cluster_v3_Cluster_EDS) {
427
- cds_update.type = EdsConfigParse(cluster, &errors);
418
+ cds_update->type = EdsConfigParse(cluster, &errors);
428
419
  } else if (envoy_config_cluster_v3_Cluster_type(cluster) ==
429
420
  envoy_config_cluster_v3_Cluster_LOGICAL_DNS) {
430
- cds_update.type = LogicalDnsParse(cluster, &errors);
421
+ cds_update->type = LogicalDnsParse(cluster, &errors);
431
422
  } else if (envoy_config_cluster_v3_Cluster_has_cluster_type(cluster)) {
432
423
  ValidationErrors::ScopedField field(&errors, ".cluster_type");
433
424
  const auto* custom_cluster_type =
@@ -454,7 +445,7 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
454
445
  ".value[envoy.extensions.clusters.aggregate.v3.ClusterConfig]");
455
446
  absl::string_view serialized_config =
456
447
  UpbStringToAbsl(google_protobuf_Any_value(typed_config));
457
- cds_update.type =
448
+ cds_update->type =
458
449
  AggregateClusterParse(context, serialized_config, &errors);
459
450
  }
460
451
  }
@@ -463,13 +454,13 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
463
454
  errors.AddError("unknown discovery type");
464
455
  }
465
456
  // Check the LB policy.
466
- ParseLbPolicyConfig(context, cluster, &cds_update, &errors);
457
+ ParseLbPolicyConfig(context, cluster, cds_update.get(), &errors);
467
458
  // transport_socket
468
459
  auto* transport_socket =
469
460
  envoy_config_cluster_v3_Cluster_transport_socket(cluster);
470
461
  if (transport_socket != nullptr) {
471
462
  ValidationErrors::ScopedField field(&errors, ".transport_socket");
472
- cds_update.common_tls_context =
463
+ cds_update->common_tls_context =
473
464
  UpstreamTlsContextParse(context, transport_socket, &errors);
474
465
  }
475
466
  // Record LRS server name (if any).
@@ -480,7 +471,7 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
480
471
  ValidationErrors::ScopedField field(&errors, ".lrs_server");
481
472
  errors.AddError("ConfigSource is not self");
482
473
  }
483
- cds_update.lrs_load_reporting_server.emplace(
474
+ cds_update->lrs_load_reporting_server.emplace(
484
475
  static_cast<const GrpcXdsBootstrap::GrpcXdsServer&>(context.server));
485
476
  }
486
477
  // The Cluster resource encodes the circuit breaking parameters in a list of
@@ -502,7 +493,7 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
502
493
  envoy_config_cluster_v3_CircuitBreakers_Thresholds_max_requests(
503
494
  threshold);
504
495
  if (max_requests != nullptr) {
505
- cds_update.max_concurrent_requests =
496
+ cds_update->max_concurrent_requests =
506
497
  google_protobuf_UInt32Value_value(max_requests);
507
498
  }
508
499
  break;
@@ -629,27 +620,25 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
629
620
  failure_percentage_ejection;
630
621
  }
631
622
  }
632
- cds_update.outlier_detection = outlier_detection_update;
623
+ cds_update->outlier_detection = outlier_detection_update;
633
624
  }
634
625
  // Validate override host status.
635
- if (XdsOverrideHostEnabled()) {
636
- const auto* common_lb_config =
637
- envoy_config_cluster_v3_Cluster_common_lb_config(cluster);
638
- if (common_lb_config != nullptr) {
639
- ValidationErrors::ScopedField field(&errors, ".common_lb_config");
640
- const auto* override_host_status =
641
- envoy_config_cluster_v3_Cluster_CommonLbConfig_override_host_status(
642
- common_lb_config);
643
- if (override_host_status != nullptr) {
644
- ValidationErrors::ScopedField field(&errors, ".override_host_status");
645
- size_t size;
646
- const int32_t* statuses = envoy_config_core_v3_HealthStatusSet_statuses(
647
- override_host_status, &size);
648
- for (size_t i = 0; i < size; ++i) {
649
- auto status = XdsHealthStatus::FromUpb(statuses[i]);
650
- if (status.has_value()) {
651
- cds_update.override_host_statuses.insert(*status);
652
- }
626
+ const auto* common_lb_config =
627
+ envoy_config_cluster_v3_Cluster_common_lb_config(cluster);
628
+ if (common_lb_config != nullptr) {
629
+ ValidationErrors::ScopedField field(&errors, ".common_lb_config");
630
+ const auto* override_host_status =
631
+ envoy_config_cluster_v3_Cluster_CommonLbConfig_override_host_status(
632
+ common_lb_config);
633
+ if (override_host_status != nullptr) {
634
+ ValidationErrors::ScopedField field(&errors, ".override_host_status");
635
+ size_t size;
636
+ const int32_t* statuses = envoy_config_core_v3_HealthStatusSet_statuses(
637
+ override_host_status, &size);
638
+ for (size_t i = 0; i < size; ++i) {
639
+ auto status = XdsHealthStatus::FromUpb(statuses[i]);
640
+ if (status.has_value()) {
641
+ cds_update->override_host_statuses.insert(*status);
653
642
  }
654
643
  }
655
644
  }
@@ -703,10 +692,9 @@ XdsResourceType::DecodeResult XdsClusterResourceType::Decode(
703
692
  } else {
704
693
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
705
694
  gpr_log(GPR_INFO, "[xds_client %p] parsed Cluster %s: %s", context.client,
706
- result.name->c_str(), cds_resource->ToString().c_str());
695
+ result.name->c_str(), (*cds_resource)->ToString().c_str());
707
696
  }
708
- result.resource =
709
- std::make_unique<XdsClusterResource>(std::move(*cds_resource));
697
+ result.resource = std::move(*cds_resource);
710
698
  }
711
699
  return result;
712
700
  }
@@ -21,8 +21,6 @@
21
21
 
22
22
  #include <stdint.h>
23
23
 
24
- #include <algorithm>
25
- #include <memory>
26
24
  #include <set>
27
25
  #include <string>
28
26
  #include <vector>
@@ -47,8 +45,6 @@
47
45
 
48
46
  namespace grpc_core {
49
47
 
50
- bool XdsOverrideHostEnabled();
51
-
52
48
  struct XdsClusterResource : public XdsResourceType::ResourceData {
53
49
  struct Eds {
54
50
  // If empty, defaults to the cluster name.
@@ -23,6 +23,7 @@
23
23
 
24
24
  #include <algorithm>
25
25
  #include <limits>
26
+ #include <memory>
26
27
  #include <set>
27
28
  #include <vector>
28
29
 
@@ -33,7 +34,6 @@
33
34
  #include "absl/types/optional.h"
34
35
  #include "envoy/config/core/v3/address.upb.h"
35
36
  #include "envoy/config/core/v3/base.upb.h"
36
- #include "envoy/config/core/v3/health_check.upb.h"
37
37
  #include "envoy/config/endpoint/v3/endpoint.upb.h"
38
38
  #include "envoy/config/endpoint/v3/endpoint.upbdefs.h"
39
39
  #include "envoy/config/endpoint/v3/endpoint_components.upb.h"
@@ -44,7 +44,6 @@
44
44
  #include <grpc/support/log.h>
45
45
 
46
46
  #include "src/core/ext/xds/upb_utils.h"
47
- #include "src/core/ext/xds/xds_cluster.h"
48
47
  #include "src/core/ext/xds/xds_health_status.h"
49
48
  #include "src/core/ext/xds/xds_resource_type.h"
50
49
  #include "src/core/lib/address_utils/parse_address.h"
@@ -157,11 +156,6 @@ absl::optional<ServerAddress> ServerAddressParse(
157
156
  // health_status
158
157
  const int32_t health_status =
159
158
  envoy_config_endpoint_v3_LbEndpoint_health_status(lb_endpoint);
160
- if (!XdsOverrideHostEnabled() &&
161
- health_status != envoy_config_core_v3_UNKNOWN &&
162
- health_status != envoy_config_core_v3_HEALTHY) {
163
- return absl::nullopt;
164
- }
165
159
  auto status = XdsHealthStatus::FromUpb(health_status);
166
160
  if (!status.has_value()) return absl::nullopt;
167
161
  // load_balancing_weight
@@ -353,12 +347,12 @@ void DropParseAndAppend(
353
347
  drop_config->AddCategory(std::move(category), numerator);
354
348
  }
355
349
 
356
- absl::StatusOr<XdsEndpointResource> EdsResourceParse(
350
+ absl::StatusOr<std::shared_ptr<const XdsEndpointResource>> EdsResourceParse(
357
351
  const XdsResourceType::DecodeContext& /*context*/,
358
352
  const envoy_config_endpoint_v3_ClusterLoadAssignment*
359
353
  cluster_load_assignment) {
360
354
  ValidationErrors errors;
361
- XdsEndpointResource eds_resource;
355
+ auto eds_resource = std::make_shared<XdsEndpointResource>();
362
356
  // endpoints
363
357
  {
364
358
  ValidationErrors::ScopedField field(&errors, "endpoints");
@@ -374,11 +368,11 @@ absl::StatusOr<XdsEndpointResource> EdsResourceParse(
374
368
  GPR_ASSERT(parsed_locality->locality.lb_weight != 0);
375
369
  // Make sure prorities is big enough. Note that they might not
376
370
  // arrive in priority order.
377
- if (eds_resource.priorities.size() < parsed_locality->priority + 1) {
378
- eds_resource.priorities.resize(parsed_locality->priority + 1);
371
+ if (eds_resource->priorities.size() < parsed_locality->priority + 1) {
372
+ eds_resource->priorities.resize(parsed_locality->priority + 1);
379
373
  }
380
374
  auto& locality_map =
381
- eds_resource.priorities[parsed_locality->priority].localities;
375
+ eds_resource->priorities[parsed_locality->priority].localities;
382
376
  auto it = locality_map.find(parsed_locality->locality.name.get());
383
377
  if (it != locality_map.end()) {
384
378
  errors.AddError(absl::StrCat(
@@ -391,8 +385,8 @@ absl::StatusOr<XdsEndpointResource> EdsResourceParse(
391
385
  }
392
386
  }
393
387
  }
394
- for (size_t i = 0; i < eds_resource.priorities.size(); ++i) {
395
- const auto& priority = eds_resource.priorities[i];
388
+ for (size_t i = 0; i < eds_resource->priorities.size(); ++i) {
389
+ const auto& priority = eds_resource->priorities[i];
396
390
  if (priority.localities.empty()) {
397
391
  errors.AddError(absl::StrCat("priority ", i, " empty"));
398
392
  } else {
@@ -412,7 +406,7 @@ absl::StatusOr<XdsEndpointResource> EdsResourceParse(
412
406
  }
413
407
  }
414
408
  // policy
415
- eds_resource.drop_config = MakeRefCounted<XdsEndpointResource::DropConfig>();
409
+ eds_resource->drop_config = MakeRefCounted<XdsEndpointResource::DropConfig>();
416
410
  const auto* policy = envoy_config_endpoint_v3_ClusterLoadAssignment_policy(
417
411
  cluster_load_assignment);
418
412
  if (policy != nullptr) {
@@ -424,7 +418,7 @@ absl::StatusOr<XdsEndpointResource> EdsResourceParse(
424
418
  for (size_t i = 0; i < drop_size; ++i) {
425
419
  ValidationErrors::ScopedField field(
426
420
  &errors, absl::StrCat(".drop_overloads[", i, "]"));
427
- DropParseAndAppend(drop_overload[i], eds_resource.drop_config.get(),
421
+ DropParseAndAppend(drop_overload[i], eds_resource->drop_config.get(),
428
422
  &errors);
429
423
  }
430
424
  }
@@ -466,10 +460,9 @@ XdsResourceType::DecodeResult XdsEndpointResourceType::Decode(
466
460
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
467
461
  gpr_log(GPR_INFO, "[xds_client %p] parsed ClusterLoadAssignment %s: %s",
468
462
  context.client, result.name->c_str(),
469
- eds_resource->ToString().c_str());
463
+ (*eds_resource)->ToString().c_str());
470
464
  }
471
- result.resource =
472
- std::make_unique<XdsEndpointResource>(std::move(*eds_resource));
465
+ result.resource = std::move(*eds_resource);
473
466
  }
474
467
  return result;
475
468
  }
@@ -23,7 +23,6 @@
23
23
 
24
24
  #include <algorithm>
25
25
  #include <map>
26
- #include <memory>
27
26
  #include <string>
28
27
  #include <utility>
29
28
  #include <vector>
@@ -29,7 +29,6 @@
29
29
 
30
30
  #include <grpc/support/log.h>
31
31
 
32
- #include "src/core/ext/xds/xds_cluster.h"
33
32
  #include "src/core/ext/xds/xds_http_fault_filter.h"
34
33
  #include "src/core/ext/xds/xds_http_rbac_filter.h"
35
34
  #include "src/core/ext/xds/xds_http_stateful_session_filter.h"
@@ -88,9 +87,7 @@ XdsHttpFilterRegistry::XdsHttpFilterRegistry(bool register_builtins) {
88
87
  RegisterFilter(std::make_unique<XdsHttpRouterFilter>());
89
88
  RegisterFilter(std::make_unique<XdsHttpFaultFilter>());
90
89
  RegisterFilter(std::make_unique<XdsHttpRbacFilter>());
91
- if (XdsOverrideHostEnabled()) {
92
- RegisterFilter(std::make_unique<XdsHttpStatefulSessionFilter>());
93
- }
90
+ RegisterFilter(std::make_unique<XdsHttpStatefulSessionFilter>());
94
91
  }
95
92
  }
96
93
 
@@ -77,7 +77,6 @@ Json::Object ValidateStatefulSession(
77
77
  envoy_extensions_filters_http_stateful_session_v3_StatefulSession_session_state(
78
78
  stateful_session);
79
79
  if (session_state == nullptr) {
80
- errors->AddError("field not present");
81
80
  return {};
82
81
  }
83
82
  ValidationErrors::ScopedField field2(errors, ".typed_config");
@@ -188,9 +187,7 @@ XdsHttpStatefulSessionFilter::GenerateFilterConfigOverride(
188
187
  const auto* stateful_session =
189
188
  envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_stateful_session(
190
189
  stateful_session_per_route);
191
- if (stateful_session == nullptr) {
192
- errors->AddError("field not present");
193
- } else {
190
+ if (stateful_session != nullptr) {
194
191
  config = ValidateStatefulSession(context, stateful_session, errors);
195
192
  }
196
193
  }
@@ -74,8 +74,8 @@ std::string XdsListenerResource::HttpConnectionManager::ToString() const {
74
74
  [](const std::string& rds_name) {
75
75
  return absl::StrCat("rds_name=", rds_name);
76
76
  },
77
- [](const XdsRouteConfigResource& route_config) {
78
- return absl::StrCat("route_config=", route_config.ToString());
77
+ [](const std::shared_ptr<const XdsRouteConfigResource>& route_config) {
78
+ return absl::StrCat("route_config=", route_config->ToString());
79
79
  }));
80
80
  contents.push_back(absl::StrCat("http_max_stream_duration=",
81
81
  http_max_stream_duration.ToString()));
@@ -490,17 +490,18 @@ XdsListenerResource::HttpConnectionManager HttpConnectionManagerParse(
490
490
  return http_connection_manager;
491
491
  }
492
492
 
493
- absl::StatusOr<XdsListenerResource> LdsResourceParseClient(
493
+ absl::StatusOr<std::shared_ptr<const XdsListenerResource>>
494
+ LdsResourceParseClient(
494
495
  const XdsResourceType::DecodeContext& context,
495
496
  const envoy_config_listener_v3_ApiListener* api_listener) {
496
- XdsListenerResource lds_update;
497
+ auto lds_update = std::make_shared<XdsListenerResource>();
497
498
  ValidationErrors errors;
498
499
  ValidationErrors::ScopedField field(&errors, "api_listener.api_listener");
499
500
  auto* api_listener_field =
500
501
  envoy_config_listener_v3_ApiListener_api_listener(api_listener);
501
502
  auto extension = ExtractXdsExtension(context, api_listener_field, &errors);
502
503
  if (extension.has_value()) {
503
- lds_update.listener = HttpConnectionManagerParse(
504
+ lds_update->listener = HttpConnectionManagerParse(
504
505
  /*is_client=*/true, context, std::move(*extension), &errors);
505
506
  }
506
507
  if (!errors.ok()) {
@@ -991,9 +992,9 @@ XdsListenerResource::FilterChainMap BuildFilterChainMap(
991
992
  return BuildFromInternalFilterChainMap(&internal_filter_chain_map);
992
993
  }
993
994
 
994
- absl::StatusOr<XdsListenerResource> LdsResourceParseServer(
995
- const XdsResourceType::DecodeContext& context,
996
- const envoy_config_listener_v3_Listener* listener) {
995
+ absl::StatusOr<std::shared_ptr<const XdsListenerResource>>
996
+ LdsResourceParseServer(const XdsResourceType::DecodeContext& context,
997
+ const envoy_config_listener_v3_Listener* listener) {
997
998
  ValidationErrors errors;
998
999
  XdsListenerResource::TcpListener tcp_listener;
999
1000
  // address
@@ -1054,12 +1055,12 @@ absl::StatusOr<XdsListenerResource> LdsResourceParseServer(
1054
1055
  return errors.status(absl::StatusCode::kInvalidArgument,
1055
1056
  "errors validating server Listener");
1056
1057
  }
1057
- XdsListenerResource lds_update;
1058
- lds_update.listener = std::move(tcp_listener);
1058
+ auto lds_update = std::make_shared<XdsListenerResource>();
1059
+ lds_update->listener = std::move(tcp_listener);
1059
1060
  return lds_update;
1060
1061
  }
1061
1062
 
1062
- absl::StatusOr<XdsListenerResource> LdsResourceParse(
1063
+ absl::StatusOr<std::shared_ptr<const XdsListenerResource>> LdsResourceParse(
1063
1064
  const XdsResourceType::DecodeContext& context,
1064
1065
  const envoy_config_listener_v3_Listener* listener) {
1065
1066
  // Check whether it's a client or server listener.
@@ -1127,10 +1128,9 @@ XdsResourceType::DecodeResult XdsListenerResourceType::Decode(
1127
1128
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
1128
1129
  gpr_log(GPR_INFO, "[xds_client %p] parsed Listener %s: %s",
1129
1130
  context.client, result.name->c_str(),
1130
- listener->ToString().c_str());
1131
+ (*listener)->ToString().c_str());
1131
1132
  }
1132
- result.resource =
1133
- std::make_unique<XdsListenerResource>(std::move(*listener));
1133
+ result.resource = std::move(*listener);
1134
1134
  }
1135
1135
  return result;
1136
1136
  }
@@ -51,7 +51,8 @@ namespace grpc_core {
51
51
  struct XdsListenerResource : public XdsResourceType::ResourceData {
52
52
  struct HttpConnectionManager {
53
53
  // The RDS resource name or inline RouteConfiguration.
54
- absl::variant<std::string, XdsRouteConfigResource> route_config;
54
+ absl::variant<std::string, std::shared_ptr<const XdsRouteConfigResource>>
55
+ route_config;
55
56
 
56
57
  // Storing the Http Connection Manager Common Http Protocol Option
57
58
  // max_stream_duration
@@ -70,8 +71,17 @@ struct XdsListenerResource : public XdsResourceType::ResourceData {
70
71
  std::vector<HttpFilter> http_filters;
71
72
 
72
73
  bool operator==(const HttpConnectionManager& other) const {
73
- return route_config == other.route_config &&
74
- http_max_stream_duration == other.http_max_stream_duration &&
74
+ if (absl::holds_alternative<std::string>(route_config)) {
75
+ if (route_config != other.route_config) return false;
76
+ } else {
77
+ auto& rc1 = absl::get<std::shared_ptr<const XdsRouteConfigResource>>(
78
+ route_config);
79
+ auto* rc2 = absl::get_if<std::shared_ptr<const XdsRouteConfigResource>>(
80
+ &other.route_config);
81
+ if (rc2 == nullptr) return false;
82
+ if (!(*rc1 == **rc2)) return false;
83
+ }
84
+ return http_max_stream_duration == other.http_max_stream_duration &&
75
85
  http_filters == other.http_filters;
76
86
  }
77
87
 
@@ -61,7 +61,7 @@ class XdsResourceType {
61
61
  // non-OK status.
62
62
  absl::optional<std::string> name;
63
63
  // The parsed and validated resource, or an error status.
64
- absl::StatusOr<std::unique_ptr<ResourceData>> resource;
64
+ absl::StatusOr<std::shared_ptr<const ResourceData>> resource;
65
65
  };
66
66
 
67
67
  virtual ~XdsResourceType() = default;
@@ -79,12 +79,6 @@ class XdsResourceType {
79
79
  virtual bool ResourcesEqual(const ResourceData* r1,
80
80
  const ResourceData* r2) const = 0;
81
81
 
82
- // Returns a copy of resource.
83
- // Must be invoked only on resources returned by this object's Decode()
84
- // method.
85
- virtual std::unique_ptr<ResourceData> CopyResource(
86
- const ResourceData* resource) const = 0;
87
-
88
82
  // Indicates whether the resource type requires that all resources must
89
83
  // be present in every SotW response from the server. If true, a
90
84
  // response that does not include a previously seen resource will be
@@ -19,6 +19,7 @@
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
21
  #include <memory>
22
+ #include <utility>
22
23
 
23
24
  #include "absl/strings/string_view.h"
24
25
 
@@ -30,8 +31,8 @@ namespace grpc_core {
30
31
 
31
32
  // Base class for XdsResourceType implementations.
32
33
  // Handles all down-casting logic for a particular resource type struct.
33
- // ResourceTypeStruct must inherit from XdsResourceType::ResourceData,
34
- // must be copy-constructible, and must implement operator==().
34
+ // ResourceTypeStruct must inherit from XdsResourceType::ResourceData
35
+ // and must implement operator==().
35
36
  template <typename Subclass, typename ResourceTypeStruct>
36
37
  class XdsResourceTypeImpl : public XdsResourceType {
37
38
  public:
@@ -40,14 +41,17 @@ class XdsResourceTypeImpl : public XdsResourceType {
40
41
  // XdsClient watcher that handles down-casting.
41
42
  class WatcherInterface : public XdsClient::ResourceWatcherInterface {
42
43
  public:
43
- virtual void OnResourceChanged(ResourceType listener) = 0;
44
+ virtual void OnResourceChanged(
45
+ std::shared_ptr<const ResourceType> resource) = 0;
44
46
 
45
47
  private:
46
48
  // Get result from XdsClient generic watcher interface, perform
47
49
  // down-casting, and invoke the caller's OnResourceChanged() method.
48
50
  void OnGenericResourceChanged(
49
- const XdsResourceType::ResourceData* resource) override {
50
- OnResourceChanged(*static_cast<const ResourceType*>(resource));
51
+ std::shared_ptr<const XdsResourceType::ResourceData> resource)
52
+ override {
53
+ OnResourceChanged(
54
+ std::static_pointer_cast<const ResourceType>(std::move(resource)));
51
55
  }
52
56
  };
53
57
 
@@ -75,12 +79,6 @@ class XdsResourceTypeImpl : public XdsResourceType {
75
79
  return *static_cast<const ResourceType*>(r1) ==
76
80
  *static_cast<const ResourceType*>(r2);
77
81
  }
78
-
79
- std::unique_ptr<ResourceData> CopyResource(
80
- const ResourceData* resource) const override {
81
- return std::make_unique<ResourceType>(
82
- *static_cast<const ResourceType*>(resource));
83
- }
84
82
  };
85
83
 
86
84
  } // namespace grpc_core
@@ -1036,20 +1036,20 @@ absl::optional<XdsRouteConfigResource::Route> ParseRoute(
1036
1036
 
1037
1037
  } // namespace
1038
1038
 
1039
- XdsRouteConfigResource XdsRouteConfigResource::Parse(
1039
+ std::shared_ptr<const XdsRouteConfigResource> XdsRouteConfigResource::Parse(
1040
1040
  const XdsResourceType::DecodeContext& context,
1041
1041
  const envoy_config_route_v3_RouteConfiguration* route_config,
1042
1042
  ValidationErrors* errors) {
1043
- XdsRouteConfigResource rds_update;
1043
+ auto rds_update = std::make_shared<XdsRouteConfigResource>();
1044
1044
  // Get the cluster spcifier plugin map.
1045
1045
  if (XdsRlsEnabled()) {
1046
- rds_update.cluster_specifier_plugin_map =
1046
+ rds_update->cluster_specifier_plugin_map =
1047
1047
  ClusterSpecifierPluginParse(context, route_config, errors);
1048
1048
  }
1049
1049
  // Build a set of configured cluster_specifier_plugin names to make sure
1050
1050
  // each is actually referenced by a route action.
1051
1051
  std::set<absl::string_view> cluster_specifier_plugins_not_seen;
1052
- for (auto& plugin : rds_update.cluster_specifier_plugin_map) {
1052
+ for (auto& plugin : rds_update->cluster_specifier_plugin_map) {
1053
1053
  cluster_specifier_plugins_not_seen.emplace(plugin.first);
1054
1054
  }
1055
1055
  // Get the virtual hosts.
@@ -1060,9 +1060,9 @@ XdsRouteConfigResource XdsRouteConfigResource::Parse(
1060
1060
  for (size_t i = 0; i < num_virtual_hosts; ++i) {
1061
1061
  ValidationErrors::ScopedField field(
1062
1062
  errors, absl::StrCat(".virtual_hosts[", i, "]"));
1063
- rds_update.virtual_hosts.emplace_back();
1063
+ rds_update->virtual_hosts.emplace_back();
1064
1064
  XdsRouteConfigResource::VirtualHost& vhost =
1065
- rds_update.virtual_hosts.back();
1065
+ rds_update->virtual_hosts.back();
1066
1066
  // Parse domains.
1067
1067
  size_t domain_size;
1068
1068
  upb_StringView const* domains = envoy_config_route_v3_VirtualHost_domains(
@@ -1111,7 +1111,7 @@ XdsRouteConfigResource XdsRouteConfigResource::Parse(
1111
1111
  for (size_t j = 0; j < num_routes; ++j) {
1112
1112
  ValidationErrors::ScopedField field(errors, absl::StrCat("[", j, "]"));
1113
1113
  auto route = ParseRoute(context, routes[j], virtual_host_retry_policy,
1114
- rds_update.cluster_specifier_plugin_map,
1114
+ rds_update->cluster_specifier_plugin_map,
1115
1115
  &cluster_specifier_plugins_not_seen, errors);
1116
1116
  if (route.has_value()) vhost.routes.emplace_back(std::move(*route));
1117
1117
  }
@@ -1119,7 +1119,7 @@ XdsRouteConfigResource XdsRouteConfigResource::Parse(
1119
1119
  // For cluster specifier plugins that were not used in any route action,
1120
1120
  // delete them from the update, since they will never be used.
1121
1121
  for (auto& unused_plugin : cluster_specifier_plugins_not_seen) {
1122
- rds_update.cluster_specifier_plugin_map.erase(std::string(unused_plugin));
1122
+ rds_update->cluster_specifier_plugin_map.erase(std::string(unused_plugin));
1123
1123
  }
1124
1124
  return rds_update;
1125
1125
  }
@@ -1177,10 +1177,9 @@ XdsResourceType::DecodeResult XdsRouteConfigResourceType::Decode(
1177
1177
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
1178
1178
  gpr_log(GPR_INFO, "[xds_client %p] parsed RouteConfiguration %s: %s",
1179
1179
  context.client, result.name->c_str(),
1180
- rds_update.ToString().c_str());
1180
+ rds_update->ToString().c_str());
1181
1181
  }
1182
- result.resource =
1183
- std::make_unique<XdsRouteConfigResource>(std::move(rds_update));
1182
+ result.resource = std::move(rds_update);
1184
1183
  }
1185
1184
  return result;
1186
1185
  }