grpc 1.78.0 → 1.80.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +22 -8
  3. data/include/grpc/credentials.h +47 -37
  4. data/include/grpc/credentials_cpp.h +39 -0
  5. data/include/grpc/event_engine/event_engine.h +8 -3
  6. data/include/grpc/grpc.h +4 -0
  7. data/include/grpc/impl/call.h +9 -0
  8. data/include/grpc/impl/channel_arg_names.h +7 -0
  9. data/include/grpc/module.modulemap +2 -0
  10. data/include/grpc/private_key_signer.h +104 -0
  11. data/include/grpc/support/port_platform.h +6 -0
  12. data/src/core/call/call_filters.h +101 -78
  13. data/src/core/call/call_spine.h +91 -68
  14. data/src/core/call/call_state.h +60 -4
  15. data/src/core/call/client_call.cc +9 -9
  16. data/src/core/call/client_call.h +1 -1
  17. data/src/core/call/metadata_batch.cc +2 -0
  18. data/src/core/call/metadata_batch.h +48 -1
  19. data/src/core/call/metadata_info.cc +35 -0
  20. data/src/core/call/metadata_info.h +2 -0
  21. data/src/core/call/simple_slice_based_metadata.h +2 -1
  22. data/src/core/channelz/channelz.cc +9 -6
  23. data/src/core/channelz/channelz.h +7 -4
  24. data/src/core/channelz/property_list.h +5 -0
  25. data/src/core/channelz/v2tov1/convert.cc +1 -1
  26. data/src/core/channelz/v2tov1/legacy_api.cc +164 -307
  27. data/src/core/client_channel/buffered_call.cc +7 -3
  28. data/src/core/client_channel/buffered_call.h +11 -5
  29. data/src/core/client_channel/client_channel.cc +106 -44
  30. data/src/core/client_channel/client_channel.h +3 -6
  31. data/src/core/client_channel/client_channel_filter.cc +90 -64
  32. data/src/core/client_channel/client_channel_filter.h +3 -6
  33. data/src/core/client_channel/client_channel_internal.h +5 -0
  34. data/src/core/client_channel/config_selector.h +17 -12
  35. data/src/core/client_channel/dynamic_filters.cc +8 -7
  36. data/src/core/client_channel/dynamic_filters.h +7 -5
  37. data/src/core/client_channel/retry_filter.cc +1 -1
  38. data/src/core/client_channel/retry_filter.h +2 -2
  39. data/src/core/client_channel/subchannel.cc +1682 -266
  40. data/src/core/client_channel/subchannel.h +411 -134
  41. data/src/core/client_channel/subchannel_stream_client.cc +22 -18
  42. data/src/core/client_channel/subchannel_stream_client.h +8 -9
  43. data/src/core/client_channel/subchannel_stream_limiter.cc +76 -0
  44. data/src/core/client_channel/subchannel_stream_limiter.h +51 -0
  45. data/src/core/config/config_vars.cc +9 -1
  46. data/src/core/config/config_vars.h +6 -0
  47. data/src/core/credentials/call/call_creds_registry.h +51 -22
  48. data/src/core/credentials/call/call_creds_registry_init.cc +86 -2
  49. data/src/core/credentials/call/external/aws_external_account_credentials.cc +2 -2
  50. data/src/core/credentials/call/external/external_account_credentials.cc +11 -4
  51. data/src/core/credentials/call/external/file_external_account_credentials.cc +2 -2
  52. data/src/core/credentials/transport/channel_creds_registry.h +71 -20
  53. data/src/core/credentials/transport/channel_creds_registry_init.cc +338 -29
  54. data/src/core/credentials/transport/ssl/ssl_credentials.cc +43 -24
  55. data/src/core/credentials/transport/ssl/ssl_credentials.h +7 -1
  56. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +2 -8
  57. data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -3
  58. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +25 -5
  59. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +7 -5
  60. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +181 -109
  61. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +55 -42
  62. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +28 -23
  63. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.h +26 -23
  64. data/src/core/credentials/transport/tls/spiffe_utils.cc +2 -2
  65. data/src/core/credentials/transport/tls/ssl_utils.cc +18 -18
  66. data/src/core/credentials/transport/tls/ssl_utils.h +12 -10
  67. data/src/core/credentials/transport/tls/tls_security_connector.cc +106 -74
  68. data/src/core/credentials/transport/tls/tls_security_connector.h +12 -8
  69. data/src/core/credentials/transport/xds/xds_credentials.cc +76 -32
  70. data/src/core/credentials/transport/xds/xds_credentials.h +4 -2
  71. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +117 -35
  72. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +42 -4
  73. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +58 -29
  74. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +19 -11
  75. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +82 -25
  76. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +28 -3
  77. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +9 -7
  78. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
  79. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h +7 -1
  80. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +117 -67
  81. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
  82. data/src/core/ext/transport/chttp2/transport/flow_control.h +11 -1
  83. data/src/core/ext/transport/chttp2/transport/frame.cc +2 -15
  84. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  85. data/src/core/ext/transport/chttp2/transport/goaway.cc +17 -2
  86. data/src/core/ext/transport/chttp2/transport/goaway.h +27 -6
  87. data/src/core/ext/transport/chttp2/transport/header_assembler.h +8 -21
  88. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +101 -40
  89. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +95 -0
  90. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +923 -772
  91. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +406 -423
  92. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -0
  93. data/src/core/ext/transport/chttp2/transport/http2_settings.h +8 -1
  94. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +25 -13
  95. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +71 -24
  96. data/src/core/ext/transport/chttp2/transport/http2_transport.h +25 -49
  97. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +2 -2
  98. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +29 -9
  99. data/src/core/ext/transport/chttp2/transport/internal.h +6 -2
  100. data/src/core/ext/transport/chttp2/transport/keepalive.cc +14 -20
  101. data/src/core/ext/transport/chttp2/transport/keepalive.h +9 -6
  102. data/src/core/ext/transport/chttp2/transport/parsing.cc +11 -0
  103. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +34 -74
  104. data/src/core/ext/transport/chttp2/transport/ping_promise.h +123 -79
  105. data/src/core/ext/transport/chttp2/transport/security_frame.h +233 -3
  106. data/src/core/ext/transport/chttp2/transport/stream.h +152 -73
  107. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +155 -85
  108. data/src/core/ext/transport/chttp2/transport/transport_common.h +0 -5
  109. data/src/core/ext/transport/chttp2/transport/writable_streams.h +8 -7
  110. data/src/core/ext/transport/chttp2/transport/write_cycle.cc +86 -0
  111. data/src/core/ext/transport/chttp2/transport/write_cycle.h +355 -0
  112. data/src/core/ext/transport/chttp2/transport/writing.cc +31 -29
  113. data/src/core/ext/upb-gen/cel/expr/checked.upb.h +1875 -0
  114. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c +409 -0
  115. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h +56 -0
  116. data/src/core/ext/upb-gen/cel/expr/syntax.upb.h +2223 -0
  117. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c +489 -0
  118. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h +60 -0
  119. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +2 -1
  120. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +130 -18
  121. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +18 -13
  122. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +70 -38
  123. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +20 -17
  124. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +26 -10
  125. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +8 -7
  126. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb.h +495 -0
  127. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c +114 -0
  128. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.h +36 -0
  129. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +26 -10
  130. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +8 -7
  131. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb.h +121 -0
  132. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.c +54 -0
  133. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.h +32 -0
  134. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +143 -9
  135. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +18 -6
  136. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +112 -11
  137. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +22 -9
  138. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +276 -0
  139. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +60 -5
  140. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.h +4 -0
  141. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +72 -0
  142. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +23 -2
  143. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.h +2 -0
  144. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +129 -13
  145. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +36 -10
  146. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.h +2 -0
  147. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +30 -0
  148. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +5 -3
  149. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +16 -0
  150. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +4 -3
  151. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +31 -0
  152. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +5 -3
  153. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +2 -1
  154. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +63 -0
  155. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +12 -7
  156. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +97 -81
  157. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +40 -23
  158. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +604 -228
  159. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +146 -100
  160. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +30 -0
  161. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +5 -3
  162. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +35 -3
  163. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +7 -4
  164. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +66 -14
  165. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +22 -11
  166. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +87 -0
  167. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +29 -2
  168. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.h +2 -0
  169. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +0 -1
  170. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +0 -1
  171. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +20 -4
  172. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +5 -4
  173. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +239 -60
  174. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +59 -28
  175. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h +2 -0
  176. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb.h +89 -0
  177. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.c +50 -0
  178. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.h +32 -0
  179. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb.h +135 -0
  180. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.c +53 -0
  181. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.h +32 -0
  182. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb.h +105 -0
  183. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.c +51 -0
  184. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.h +32 -0
  185. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +32 -0
  186. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +6 -3
  187. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +206 -0
  188. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +41 -8
  189. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.h +2 -0
  190. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +64 -0
  191. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +4 -3
  192. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +64 -0
  193. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +31 -5
  194. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.h +2 -0
  195. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +283 -14
  196. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +48 -11
  197. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +2 -0
  198. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +144 -6
  199. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +35 -7
  200. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.h +2 -0
  201. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +42 -21
  202. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +9 -8
  203. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +164 -1
  204. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +37 -6
  205. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +2 -0
  206. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +0 -1
  207. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +0 -1
  208. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +0 -1
  209. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +0 -1
  210. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +26 -11
  211. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +8 -8
  212. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +33 -0
  213. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +14 -3
  214. data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +90 -10
  215. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +18 -7
  216. data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c +248 -0
  217. data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h +97 -0
  218. data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c +283 -0
  219. data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h +107 -0
  220. data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.c +213 -211
  221. data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +635 -614
  222. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +1012 -1000
  223. data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.c +276 -273
  224. data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.c +152 -0
  225. data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.h +47 -0
  226. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.c +149 -144
  227. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +367 -370
  228. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.c +63 -0
  229. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.h +37 -0
  230. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.c +297 -284
  231. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +492 -469
  232. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.c +74 -43
  233. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +10 -0
  234. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.c +60 -59
  235. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +202 -184
  236. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +5 -0
  237. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.c +354 -339
  238. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  239. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +28 -19
  240. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.c +30 -27
  241. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.c +71 -66
  242. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +94 -91
  243. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +386 -369
  244. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.c +60 -57
  245. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +1974 -1884
  246. data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.c +119 -112
  247. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.c +62 -51
  248. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.c +109 -88
  249. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +54 -36
  250. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +5 -0
  251. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +78 -84
  252. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +48 -46
  253. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +1041 -984
  254. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  255. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +304 -290
  256. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +94 -77
  257. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +5 -0
  258. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +246 -193
  259. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +5 -0
  260. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.c +37 -23
  261. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +5 -0
  262. data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.c +5 -3
  263. data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.c +4 -4
  264. data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.c +4 -5
  265. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +113 -87
  266. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +5 -0
  267. data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c +5 -5
  268. data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c +6 -5
  269. data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c +5 -5
  270. data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c +5 -5
  271. data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c +5 -5
  272. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +25 -30
  273. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c +14 -20
  274. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c +180 -183
  275. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c +56 -47
  276. data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c +69 -47
  277. data/src/core/filter/filter_chain.h +95 -0
  278. data/src/core/handshaker/http_connect/{http_connect_handshaker.cc → http_connect_client_handshaker.cc} +32 -31
  279. data/src/core/handshaker/http_connect/{http_connect_handshaker.h → http_connect_client_handshaker.h} +4 -4
  280. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +1 -1
  281. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
  282. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +14 -13
  283. data/src/core/handshaker/security/secure_endpoint.cc +282 -68
  284. data/src/core/handshaker/security/secure_endpoint.h +0 -7
  285. data/src/core/lib/channel/channel_args.h +1 -1
  286. data/src/core/lib/channel/promise_based_filter.cc +17 -4
  287. data/src/core/lib/channel/promise_based_filter.h +3 -2
  288. data/src/core/lib/debug/trace_flags.cc +2 -0
  289. data/src/core/lib/debug/trace_flags.h +1 -0
  290. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +35 -8
  291. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +1 -2
  292. data/src/core/lib/event_engine/event_engine.cc +9 -0
  293. data/src/core/lib/event_engine/extensions/tcp_trace.h +0 -3
  294. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +2 -2
  295. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +1 -1
  296. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +34 -9
  297. data/src/core/lib/event_engine/posix_engine/posix_engine.h +24 -2
  298. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -3
  299. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +141 -14
  300. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +19 -2
  301. data/src/core/lib/event_engine/posix_engine/posix_interface.h +7 -0
  302. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +21 -3
  303. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +16 -0
  304. data/src/core/lib/experiments/experiments.cc +309 -201
  305. data/src/core/lib/experiments/experiments.h +141 -80
  306. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  307. data/src/core/lib/iomgr/resolve_address.h +0 -2
  308. data/src/core/lib/iomgr/resolved_address.h +0 -2
  309. data/src/core/lib/iomgr/tcp_posix.cc +13 -5
  310. data/src/core/lib/iomgr/tcp_server.cc +0 -5
  311. data/src/core/lib/iomgr/tcp_server.h +0 -7
  312. data/src/core/lib/iomgr/tcp_server_posix.cc +0 -17
  313. data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -3
  314. data/src/core/lib/iomgr/tcp_server_windows.cc +12 -51
  315. data/src/core/lib/promise/all_ok.h +17 -12
  316. data/src/core/lib/promise/cancel_callback.h +12 -13
  317. data/src/core/lib/promise/detail/join_state.h +626 -0
  318. data/src/core/lib/promise/detail/promise_factory.h +14 -14
  319. data/src/core/lib/promise/for_each.h +32 -8
  320. data/src/core/lib/promise/if.h +9 -7
  321. data/src/core/lib/promise/loop.h +18 -16
  322. data/src/core/lib/promise/map.h +54 -47
  323. data/src/core/lib/promise/mpsc.h +11 -10
  324. data/src/core/lib/promise/observable.h +6 -6
  325. data/src/core/lib/promise/party.h +25 -19
  326. data/src/core/lib/promise/poll.h +5 -5
  327. data/src/core/lib/promise/prioritized_race.h +10 -7
  328. data/src/core/lib/promise/promise.h +16 -11
  329. data/src/core/lib/promise/race.h +6 -5
  330. data/src/core/lib/promise/seq.h +109 -74
  331. data/src/core/lib/promise/try_join.h +14 -6
  332. data/src/core/lib/promise/try_seq.h +76 -60
  333. data/src/core/lib/resource_quota/api.cc +7 -0
  334. data/src/core/lib/resource_quota/arena.h +1 -1
  335. data/src/core/lib/resource_quota/memory_quota.cc +4 -1
  336. data/src/core/lib/resource_quota/resource_quota.cc +2 -1
  337. data/src/core/lib/resource_quota/resource_quota.h +3 -0
  338. data/src/core/lib/resource_quota/stream_quota.cc +77 -1
  339. data/src/core/lib/resource_quota/stream_quota.h +64 -1
  340. data/src/core/lib/resource_quota/telemetry.h +1 -1
  341. data/src/core/lib/surface/call.cc +13 -0
  342. data/src/core/lib/surface/call_utils.h +58 -43
  343. data/src/core/lib/surface/channel.h +1 -4
  344. data/src/core/lib/surface/completion_queue.cc +13 -6
  345. data/src/core/lib/surface/validate_metadata.cc +20 -15
  346. data/src/core/lib/surface/validate_metadata.h +3 -1
  347. data/src/core/lib/surface/version.cc +2 -2
  348. data/src/core/lib/transport/promise_endpoint.cc +1 -1
  349. data/src/core/lib/transport/promise_endpoint.h +1 -1
  350. data/src/core/lib/transport/transport.h +5 -0
  351. data/src/core/load_balancing/health_check_client.cc +1 -15
  352. data/src/core/load_balancing/health_check_client_internal.h +0 -2
  353. data/src/core/load_balancing/oob_backend_metric.cc +1 -5
  354. data/src/core/load_balancing/oob_backend_metric_internal.h +0 -1
  355. data/src/core/load_balancing/xds/xds_cluster_impl.cc +12 -9
  356. data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -2
  357. data/src/core/resolver/xds/xds_resolver.cc +162 -116
  358. data/src/core/server/server.cc +18 -1
  359. data/src/core/server/server.h +2 -0
  360. data/src/core/server/xds_server_config_fetcher.cc +4 -4
  361. data/src/core/telemetry/call_tracer.cc +87 -2
  362. data/src/core/telemetry/call_tracer.h +46 -8
  363. data/src/core/telemetry/instrument.cc +102 -40
  364. data/src/core/telemetry/instrument.h +246 -65
  365. data/src/core/tsi/fake_transport_security.cc +3 -1
  366. data/src/core/tsi/ssl_transport_security.cc +516 -137
  367. data/src/core/tsi/ssl_transport_security.h +28 -22
  368. data/src/core/tsi/ssl_transport_security_utils.cc +2 -2
  369. data/src/core/tsi/ssl_transport_security_utils.h +2 -2
  370. data/src/core/util/bitset.h +6 -0
  371. data/src/core/util/function_signature.h +3 -1
  372. data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
  373. data/src/core/util/json/json_reader.cc +0 -4
  374. data/src/core/xds/grpc/certificate_provider_store.cc +2 -1
  375. data/src/core/xds/grpc/certificate_provider_store.h +3 -17
  376. data/src/core/xds/grpc/certificate_provider_store_interface.h +61 -0
  377. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +48 -0
  378. data/src/core/xds/grpc/xds_bootstrap_grpc.h +18 -0
  379. data/src/core/xds/grpc/xds_certificate_provider.cc +7 -2
  380. data/src/core/xds/grpc/xds_certificate_provider.h +13 -2
  381. data/src/core/xds/grpc/xds_client_grpc.cc +13 -6
  382. data/src/core/xds/grpc/xds_client_grpc.h +10 -7
  383. data/src/core/xds/grpc/xds_cluster.cc +18 -4
  384. data/src/core/xds/grpc/xds_cluster.h +17 -2
  385. data/src/core/xds/grpc/xds_cluster_parser.cc +36 -11
  386. data/src/core/xds/grpc/xds_common_types.cc +45 -0
  387. data/src/core/xds/grpc/xds_common_types.h +31 -0
  388. data/src/core/xds/grpc/xds_common_types_parser.cc +274 -16
  389. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  390. data/src/core/xds/grpc/xds_http_fault_filter.cc +128 -24
  391. data/src/core/xds/grpc/xds_http_fault_filter.h +19 -10
  392. data/src/core/xds/grpc/xds_http_filter.cc +38 -0
  393. data/src/core/xds/grpc/xds_http_filter.h +70 -47
  394. data/src/core/xds/grpc/xds_http_filter_registry.cc +48 -14
  395. data/src/core/xds/grpc/xds_http_filter_registry.h +29 -15
  396. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +88 -22
  397. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +22 -11
  398. data/src/core/xds/grpc/xds_http_rbac_filter.cc +36 -20
  399. data/src/core/xds/grpc/xds_http_rbac_filter.h +19 -10
  400. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +143 -26
  401. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +19 -10
  402. data/src/core/xds/grpc/xds_listener.cc +4 -1
  403. data/src/core/xds/grpc/xds_listener.h +10 -2
  404. data/src/core/xds/grpc/xds_listener_parser.cc +23 -18
  405. data/src/core/xds/grpc/xds_matcher.cc +40 -5
  406. data/src/core/xds/grpc/xds_matcher.h +13 -0
  407. data/src/core/xds/grpc/xds_matcher_action.h +1 -1
  408. data/src/core/xds/grpc/xds_matcher_parse.cc +60 -40
  409. data/src/core/xds/grpc/xds_matcher_parse.h +2 -1
  410. data/src/core/xds/grpc/xds_route_config.cc +12 -1
  411. data/src/core/xds/grpc/xds_route_config.h +15 -2
  412. data/src/core/xds/grpc/xds_route_config_parser.cc +11 -5
  413. data/src/core/xds/grpc/xds_routing.cc +181 -6
  414. data/src/core/xds/grpc/xds_routing.h +57 -0
  415. data/src/core/xds/grpc/xds_server_grpc.cc +55 -43
  416. data/src/core/xds/grpc/xds_server_grpc.h +13 -6
  417. data/src/core/xds/grpc/xds_server_grpc_interface.h +3 -2
  418. data/src/core/xds/grpc/xds_transport_grpc.cc +12 -6
  419. data/src/core/xds/grpc/xds_transport_grpc.h +5 -1
  420. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -8
  421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +18 -12
  422. data/src/ruby/lib/grpc/grpc.rb +7 -9
  423. data/src/ruby/lib/grpc/version.rb +1 -1
  424. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  425. data/src/ruby/spec/client_server_spec.rb +1 -1
  426. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
  427. data/src/ruby/spec/generic/rpc_server_spec.rb +3 -4
  428. data/src/ruby/spec/spec_helper.rb +1 -1
  429. metadata +64 -14
  430. data/src/core/ext/transport/chttp2/transport/security_frame.cc +0 -31
  431. data/src/core/handshaker/security/legacy_secure_endpoint.cc +0 -597
@@ -73,6 +73,7 @@ size_t EncodedSizeOfKey(Key, const typename Key::ValueType& value) {
73
73
  // to name this in MetadataMap, but ultimately once the transition is done we
74
74
  // should not need to.
75
75
  struct GrpcTimeoutMetadata {
76
+ static constexpr bool kPublishToApp = false;
76
77
  static constexpr bool kRepeatable = false;
77
78
  static constexpr bool kTransferOnTrailersOnly = false;
78
79
  using ValueType = Timestamp;
@@ -90,6 +91,7 @@ struct GrpcTimeoutMetadata {
90
91
 
91
92
  // TE metadata trait.
92
93
  struct TeMetadata {
94
+ static constexpr bool kPublishToApp = false;
93
95
  static constexpr bool kRepeatable = false;
94
96
  static constexpr bool kTransferOnTrailersOnly = false;
95
97
  // HTTP2 says that TE can either be empty or "trailers".
@@ -120,6 +122,7 @@ inline size_t EncodedSizeOfKey(TeMetadata, TeMetadata::ValueType x) {
120
122
 
121
123
  // content-type metadata trait.
122
124
  struct ContentTypeMetadata {
125
+ static constexpr bool kPublishToApp = false;
123
126
  static constexpr bool kRepeatable = false;
124
127
  static constexpr bool kTransferOnTrailersOnly = true;
125
128
  // gRPC says that content-type can be application/grpc[;something]
@@ -149,6 +152,7 @@ struct ContentTypeMetadata {
149
152
 
150
153
  // scheme metadata trait.
151
154
  struct HttpSchemeMetadata {
155
+ static constexpr bool kPublishToApp = false;
152
156
  static constexpr bool kRepeatable = false;
153
157
  static constexpr bool kTransferOnTrailersOnly = false;
154
158
  enum ValueType : uint8_t {
@@ -179,6 +183,7 @@ size_t EncodedSizeOfKey(HttpSchemeMetadata, HttpSchemeMetadata::ValueType x);
179
183
 
180
184
  // method metadata trait.
181
185
  struct HttpMethodMetadata {
186
+ static constexpr bool kPublishToApp = false;
182
187
  static constexpr bool kRepeatable = false;
183
188
  static constexpr bool kTransferOnTrailersOnly = false;
184
189
  enum ValueType : uint8_t {
@@ -228,6 +233,7 @@ struct CompressionAlgorithmBasedMetadata {
228
233
 
229
234
  // grpc-encoding metadata trait.
230
235
  struct GrpcEncodingMetadata : public CompressionAlgorithmBasedMetadata {
236
+ static constexpr bool kPublishToApp = false;
231
237
  static constexpr bool kRepeatable = false;
232
238
  static constexpr bool kTransferOnTrailersOnly = false;
233
239
  using CompressionTraits =
@@ -237,6 +243,7 @@ struct GrpcEncodingMetadata : public CompressionAlgorithmBasedMetadata {
237
243
 
238
244
  // grpc-internal-encoding-request metadata trait.
239
245
  struct GrpcInternalEncodingRequest : public CompressionAlgorithmBasedMetadata {
246
+ static constexpr bool kPublishToApp = false;
240
247
  static constexpr bool kRepeatable = false;
241
248
  static constexpr bool kTransferOnTrailersOnly = false;
242
249
  using CompressionTraits = NoCompressionCompressor;
@@ -245,6 +252,7 @@ struct GrpcInternalEncodingRequest : public CompressionAlgorithmBasedMetadata {
245
252
 
246
253
  // grpc-accept-encoding metadata trait.
247
254
  struct GrpcAcceptEncodingMetadata {
255
+ static constexpr bool kPublishToApp = false;
248
256
  static constexpr bool kRepeatable = false;
249
257
  static constexpr bool kTransferOnTrailersOnly = false;
250
258
  static absl::string_view key() { return "grpc-accept-encoding"; }
@@ -264,6 +272,7 @@ struct GrpcAcceptEncodingMetadata {
264
272
 
265
273
  // user-agent metadata trait.
266
274
  struct UserAgentMetadata : public SimpleSliceBasedMetadata {
275
+ static constexpr bool kPublishToApp = true;
267
276
  static constexpr bool kRepeatable = false;
268
277
  static constexpr bool kTransferOnTrailersOnly = false;
269
278
  using CompressionTraits = StableValueCompressor;
@@ -272,6 +281,7 @@ struct UserAgentMetadata : public SimpleSliceBasedMetadata {
272
281
 
273
282
  // grpc-message metadata trait.
274
283
  struct GrpcMessageMetadata : public SimpleSliceBasedMetadata {
284
+ static constexpr bool kPublishToApp = false;
275
285
  static constexpr bool kRepeatable = false;
276
286
  static constexpr bool kTransferOnTrailersOnly = false;
277
287
  using CompressionTraits = NoCompressionCompressor;
@@ -280,6 +290,7 @@ struct GrpcMessageMetadata : public SimpleSliceBasedMetadata {
280
290
 
281
291
  // host metadata trait.
282
292
  struct HostMetadata : public SimpleSliceBasedMetadata {
293
+ static constexpr bool kPublishToApp = true;
283
294
  static constexpr bool kRepeatable = false;
284
295
  static constexpr bool kTransferOnTrailersOnly = false;
285
296
  using CompressionTraits = NoCompressionCompressor;
@@ -288,6 +299,7 @@ struct HostMetadata : public SimpleSliceBasedMetadata {
288
299
 
289
300
  // endpoint-load-metrics-bin metadata trait.
290
301
  struct EndpointLoadMetricsBinMetadata : public SimpleSliceBasedMetadata {
302
+ static constexpr bool kPublishToApp = false;
291
303
  static constexpr bool kRepeatable = false;
292
304
  static constexpr bool kTransferOnTrailersOnly = false;
293
305
  using CompressionTraits = NoCompressionCompressor;
@@ -296,6 +308,7 @@ struct EndpointLoadMetricsBinMetadata : public SimpleSliceBasedMetadata {
296
308
 
297
309
  // grpc-server-stats-bin metadata trait.
298
310
  struct GrpcServerStatsBinMetadata : public SimpleSliceBasedMetadata {
311
+ static constexpr bool kPublishToApp = false;
299
312
  static constexpr bool kRepeatable = false;
300
313
  static constexpr bool kTransferOnTrailersOnly = false;
301
314
  using CompressionTraits = NoCompressionCompressor;
@@ -304,6 +317,7 @@ struct GrpcServerStatsBinMetadata : public SimpleSliceBasedMetadata {
304
317
 
305
318
  // grpc-trace-bin metadata trait.
306
319
  struct GrpcTraceBinMetadata : public SimpleSliceBasedMetadata {
320
+ static constexpr bool kPublishToApp = false;
307
321
  static constexpr bool kRepeatable = false;
308
322
  static constexpr bool kTransferOnTrailersOnly = false;
309
323
  using CompressionTraits = FrequentKeyWithNoValueCompressionCompressor;
@@ -312,6 +326,7 @@ struct GrpcTraceBinMetadata : public SimpleSliceBasedMetadata {
312
326
 
313
327
  // grpc-tags-bin metadata trait.
314
328
  struct GrpcTagsBinMetadata : public SimpleSliceBasedMetadata {
329
+ static constexpr bool kPublishToApp = false;
315
330
  static constexpr bool kRepeatable = false;
316
331
  static constexpr bool kTransferOnTrailersOnly = false;
317
332
  using CompressionTraits = FrequentKeyWithNoValueCompressionCompressor;
@@ -320,14 +335,34 @@ struct GrpcTagsBinMetadata : public SimpleSliceBasedMetadata {
320
335
 
321
336
  // XEnvoyPeerMetadata
322
337
  struct XEnvoyPeerMetadata : public SimpleSliceBasedMetadata {
338
+ static constexpr bool kPublishToApp = false;
323
339
  static constexpr bool kRepeatable = false;
324
340
  static constexpr bool kTransferOnTrailersOnly = true;
325
341
  using CompressionTraits = StableValueCompressor;
326
342
  static absl::string_view key() { return "x-envoy-peer-metadata"; }
327
343
  };
328
344
 
345
+ // x-forwarded-for metadata trait for HTTP connect.
346
+ struct XForwardedForMetadata : public SimpleSliceBasedMetadata {
347
+ static constexpr bool kPublishToApp = true;
348
+ static constexpr bool kRepeatable = false;
349
+ static constexpr bool kTransferOnTrailersOnly = false;
350
+ using CompressionTraits = StableValueCompressor;
351
+ static absl::string_view key() { return "x-forwarded-for"; }
352
+ };
353
+
354
+ // x-forwarded-host metadata trait for HTTP connect.
355
+ struct XForwardedHostMetadata : public SimpleSliceBasedMetadata {
356
+ static constexpr bool kPublishToApp = true;
357
+ static constexpr bool kRepeatable = false;
358
+ static constexpr bool kTransferOnTrailersOnly = false;
359
+ using CompressionTraits = StableValueCompressor;
360
+ static absl::string_view key() { return "x-forwarded-host"; }
361
+ };
362
+
329
363
  // :authority metadata trait.
330
364
  struct HttpAuthorityMetadata : public SimpleSliceBasedMetadata {
365
+ static constexpr bool kPublishToApp = false;
331
366
  static constexpr bool kRepeatable = false;
332
367
  static constexpr bool kTransferOnTrailersOnly = false;
333
368
  using CompressionTraits = SmallSetOfValuesCompressor;
@@ -336,6 +371,7 @@ struct HttpAuthorityMetadata : public SimpleSliceBasedMetadata {
336
371
 
337
372
  // :path metadata trait.
338
373
  struct HttpPathMetadata : public SimpleSliceBasedMetadata {
374
+ static constexpr bool kPublishToApp = false;
339
375
  static constexpr bool kRepeatable = false;
340
376
  static constexpr bool kTransferOnTrailersOnly = false;
341
377
  using CompressionTraits = SmallSetOfValuesCompressor;
@@ -415,6 +451,7 @@ struct GrpcStatusMetadata {
415
451
  }
416
452
  }
417
453
  static auto DisplayMemento(MementoType x) { return DisplayValue(x); }
454
+ static constexpr bool kPublishToApp = false;
418
455
  static constexpr bool kRepeatable = false;
419
456
  static constexpr bool kTransferOnTrailersOnly = false;
420
457
  using CompressionTraits = SmallIntegralValuesCompressor<16>;
@@ -441,6 +478,7 @@ struct GrpcStatusMetadata {
441
478
  // grpc-previous-rpc-attempts metadata trait.
442
479
  struct GrpcPreviousRpcAttemptsMetadata
443
480
  : public SimpleIntBasedMetadata<uint32_t, 0> {
481
+ static constexpr bool kPublishToApp = true;
444
482
  static constexpr bool kRepeatable = false;
445
483
  static constexpr bool kTransferOnTrailersOnly = false;
446
484
  using CompressionTraits = NoCompressionCompressor;
@@ -449,6 +487,7 @@ struct GrpcPreviousRpcAttemptsMetadata
449
487
 
450
488
  // grpc-retry-pushback-ms metadata trait.
451
489
  struct GrpcRetryPushbackMsMetadata {
490
+ static constexpr bool kPublishToApp = true;
452
491
  static constexpr bool kRepeatable = false;
453
492
  static constexpr bool kTransferOnTrailersOnly = false;
454
493
  static absl::string_view key() { return "grpc-retry-pushback-ms"; }
@@ -467,6 +506,7 @@ struct GrpcRetryPushbackMsMetadata {
467
506
  // :status metadata trait.
468
507
  // TODO(ctiller): consider moving to uint16_t
469
508
  struct HttpStatusMetadata : public SimpleIntBasedMetadata<uint32_t, 0> {
509
+ static constexpr bool kPublishToApp = false;
470
510
  static constexpr bool kRepeatable = false;
471
511
  static constexpr bool kTransferOnTrailersOnly = true;
472
512
  using CompressionTraits = HttpStatusCompressor;
@@ -478,6 +518,7 @@ struct HttpStatusMetadata : public SimpleIntBasedMetadata<uint32_t, 0> {
478
518
  class GrpcLbClientStats;
479
519
 
480
520
  struct GrpcLbClientStatsMetadata {
521
+ static constexpr bool kPublishToApp = false;
481
522
  static constexpr bool kRepeatable = false;
482
523
  static constexpr bool kTransferOnTrailersOnly = false;
483
524
  static absl::string_view key() { return "grpclb_client_stats"; }
@@ -503,6 +544,7 @@ inline size_t EncodedSizeOfKey(GrpcLbClientStatsMetadata,
503
544
 
504
545
  // lb-token metadata
505
546
  struct LbTokenMetadata : public SimpleSliceBasedMetadata {
547
+ static constexpr bool kPublishToApp = true;
506
548
  static constexpr bool kRepeatable = false;
507
549
  static constexpr bool kTransferOnTrailersOnly = false;
508
550
  using CompressionTraits = NoCompressionCompressor;
@@ -511,6 +553,7 @@ struct LbTokenMetadata : public SimpleSliceBasedMetadata {
511
553
 
512
554
  // lb-cost-bin metadata
513
555
  struct LbCostBinMetadata {
556
+ static constexpr bool kPublishToApp = false;
514
557
  static constexpr bool kRepeatable = true;
515
558
  static constexpr bool kTransferOnTrailersOnly = false;
516
559
  static absl::string_view key() { return "lb-cost-bin"; }
@@ -531,6 +574,7 @@ struct LbCostBinMetadata {
531
574
 
532
575
  // traceparent metadata
533
576
  struct W3CTraceParentMetadata : public SimpleSliceBasedMetadata {
577
+ static constexpr bool kPublishToApp = true;
534
578
  static constexpr bool kRepeatable = false;
535
579
  static constexpr bool kTransferOnTrailersOnly = false;
536
580
  using CompressionTraits = NoCompressionCompressor;
@@ -1278,6 +1322,8 @@ MetadataValueAsSlice(typename Which::ValueType value) {
1278
1322
  // Encodable traits have the following signature:
1279
1323
  // // Traits for the "grpc-xyz" metadata field:
1280
1324
  // struct GrpcXyzMetadata {
1325
+ // // Should this metadata be published to the application?
1326
+ // static constexpr bool kPublishToApp = ...;
1281
1327
  // // Can this metadata field be repeated?
1282
1328
  // static constexpr bool kRepeatable = ...;
1283
1329
  // // Should this metadata be transferred from server headers to trailers on
@@ -1652,7 +1698,8 @@ using grpc_metadata_batch_base = grpc_core::MetadataMap<
1652
1698
  grpc_core::GrpcServerStatsBinMetadata, grpc_core::GrpcTraceBinMetadata,
1653
1699
  grpc_core::GrpcTagsBinMetadata, grpc_core::GrpcLbClientStatsMetadata,
1654
1700
  grpc_core::LbCostBinMetadata, grpc_core::LbTokenMetadata,
1655
- grpc_core::XEnvoyPeerMetadata, grpc_core::W3CTraceParentMetadata,
1701
+ grpc_core::XEnvoyPeerMetadata, grpc_core::XForwardedForMetadata,
1702
+ grpc_core::XForwardedHostMetadata, grpc_core::W3CTraceParentMetadata,
1656
1703
  // Non-encodable things
1657
1704
  grpc_core::GrpcStreamNetworkState, grpc_core::PeerString,
1658
1705
  grpc_core::GrpcStatusContext, grpc_core::GrpcStatusFromWire,
@@ -17,13 +17,40 @@
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
19
  #include <cstddef>
20
+ #include <cstdint>
20
21
  #include <string>
21
22
 
22
23
  #include "src/core/lib/slice/slice.h"
24
+ #include "absl/functional/function_ref.h"
23
25
  #include "absl/strings/str_cat.h"
26
+ #include "absl/strings/string_view.h"
24
27
 
25
28
  namespace grpc_core {
26
29
 
30
+ namespace {
31
+ class KeyValueEmitEncoder {
32
+ public:
33
+ explicit KeyValueEmitEncoder(
34
+ absl::FunctionRef<void(absl::string_view,
35
+ MetadataSizesAnnotation::ValueType)>
36
+ f)
37
+ : f_(f) {}
38
+
39
+ void Encode(const Slice& key, const Slice& value) {
40
+ f_(key.as_string_view(), static_cast<int64_t>(value.size()));
41
+ }
42
+
43
+ template <typename Key, typename Value>
44
+ void Encode(Key, const Value& value) {
45
+ f_(Key::key(), static_cast<int64_t>(EncodedSizeOfKey(Key(), value)));
46
+ }
47
+
48
+ private:
49
+ absl::FunctionRef<void(absl::string_view, MetadataSizesAnnotation::ValueType)>
50
+ f_;
51
+ };
52
+ } // namespace
53
+
27
54
  class MetadataSizesAnnotation::MetadataSizeEncoder {
28
55
  public:
29
56
  explicit MetadataSizeEncoder(std::string& summary, uint64_t soft_limit,
@@ -70,4 +97,12 @@ std::string MetadataSizesAnnotation::ToString() const {
70
97
  return metadata_annotation;
71
98
  }
72
99
 
100
+ void MetadataSizesAnnotation::ForEachKeyValue(
101
+ absl::FunctionRef<void(absl::string_view, ValueType)> f) const {
102
+ f("soft_limit", static_cast<int64_t>(soft_limit_));
103
+ f("hard_limit", static_cast<int64_t>(hard_limit_));
104
+ KeyValueEmitEncoder encoder(f);
105
+ metadata_buffer_->Encode(&encoder);
106
+ }
107
+
73
108
  } // namespace grpc_core
@@ -72,6 +72,8 @@ class MetadataSizesAnnotation
72
72
  hard_limit_(hard_limit) {}
73
73
 
74
74
  std::string ToString() const override;
75
+ void ForEachKeyValue(
76
+ absl::FunctionRef<void(absl::string_view, ValueType)> f) const override;
75
77
 
76
78
  private:
77
79
  class MetadataSizeEncoder;
@@ -25,7 +25,8 @@ namespace grpc_core {
25
25
 
26
26
  // Models grpc metadata (as per the rules for MetadataMap) for a metadata
27
27
  // element that consists of a Slice.
28
- // Use by deriving from this class and adding `kRepeatable` and `key()`.
28
+ // Use by deriving from this class and adding `kPublishToApp`, `kRepeatable` and
29
+ // `key()`.
29
30
  struct SimpleSliceBasedMetadata {
30
31
  using ValueType = Slice;
31
32
  using MementoType = Slice;
@@ -63,14 +63,17 @@ namespace channelz {
63
63
  void DataSinkImplementation::AddData(absl::string_view name,
64
64
  std::unique_ptr<Data> data) {
65
65
  MutexLock lock(&mu_);
66
- additional_info_.emplace(name, std::move(data));
66
+ additional_info_.emplace_back(Element{std::string(name), std::move(data)});
67
67
  }
68
68
 
69
- Json::Object DataSinkImplementation::Finalize(bool) {
69
+ Json::Array DataSinkImplementation::Finalize(bool) {
70
70
  MutexLock lock(&mu_);
71
- Json::Object out;
71
+ Json::Array out;
72
72
  for (auto& [name, additional_info] : additional_info_) {
73
- out[name] = Json::FromObject(additional_info->ToJson());
73
+ Json::Object obj;
74
+ obj["name"] = Json::FromString(name);
75
+ obj["value"] = Json::FromObject(additional_info->ToJson());
76
+ out.push_back(Json::FromObject(std::move(obj)));
74
77
  }
75
78
  return out;
76
79
  }
@@ -119,10 +122,10 @@ std::string BaseNode::RenderJsonString() {
119
122
  void BaseNode::PopulateJsonFromDataSources(Json::Object& json) {
120
123
  auto info = AdditionalInfo();
121
124
  if (info.empty()) return;
122
- json["additionalInfo"] = Json::FromObject(std::move(info));
125
+ json["additionalInfo"] = Json::FromArray(std::move(info));
123
126
  }
124
127
 
125
- Json::Object BaseNode::AdditionalInfo() {
128
+ Json::Array BaseNode::AdditionalInfo() {
126
129
  auto done = std::make_shared<Notification>();
127
130
  auto sink_impl = std::make_shared<DataSinkImplementation>();
128
131
  {
@@ -253,7 +253,7 @@ class BaseNode : public DualRefCounted<BaseNode> {
253
253
  std::shared_ptr<grpc_event_engine::experimental::EventEngine>
254
254
  event_engine,
255
255
  ZTrace::Callback callback);
256
- Json::Object AdditionalInfo();
256
+ Json::Array AdditionalInfo();
257
257
 
258
258
  const ChannelTrace& trace() const { return trace_; }
259
259
  template <typename... Args>
@@ -331,14 +331,17 @@ class DataSinkImplementation {
331
331
  };
332
332
 
333
333
  void AddData(absl::string_view name, std::unique_ptr<Data> data);
334
- Json::Object Finalize(bool timed_out);
334
+ Json::Array Finalize(bool timed_out);
335
335
  void Finalize(bool timed_out, grpc_channelz_v2_Entity* entity,
336
336
  upb_Arena* arena);
337
337
 
338
338
  private:
339
339
  Mutex mu_;
340
- std::map<std::string, std::unique_ptr<Data>> additional_info_
341
- ABSL_GUARDED_BY(mu_);
340
+ struct Element {
341
+ std::string name;
342
+ std::unique_ptr<Data> data;
343
+ };
344
+ std::vector<Element> additional_info_ ABSL_GUARDED_BY(mu_);
342
345
  };
343
346
 
344
347
  // Wrapper around absl::AnyInvocable<void()> that is used to notify when the
@@ -146,6 +146,11 @@ class PropertyList final : public OtherPropertyValue {
146
146
  void FillUpbProto(grpc_channelz_v2_PropertyList* proto, upb_Arena* arena);
147
147
  void FillAny(google_protobuf_Any* any, upb_Arena* arena) override;
148
148
 
149
+ const std::vector<std::pair<std::string, PropertyValue>>& property_list()
150
+ const {
151
+ return property_list_;
152
+ }
153
+
149
154
  private:
150
155
  void SetInternal(absl::string_view key, std::optional<PropertyValue> value);
151
156
 
@@ -673,7 +673,7 @@ absl::StatusOr<std::string> ConvertListenSocket(
673
673
  v1_ref, CopyStdStringToUpbString(*name, arena.ptr()));
674
674
  }
675
675
  }
676
- if (auto socket_props = GetPropertyList(entity, "socket", arena.ptr());
676
+ if (auto socket_props = GetPropertyList(entity, "listen_socket", arena.ptr());
677
677
  socket_props != nullptr) {
678
678
  if (auto local = StringFromPropertyList(socket_props, "local");
679
679
  local.has_value()) {