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
@@ -18,18 +18,59 @@
18
18
 
19
19
  #include "src/core/telemetry/call_tracer.h"
20
20
 
21
- #include <grpc/support/port_platform.h>
22
-
23
21
  #include <memory>
22
+ #include <string>
24
23
  #include <utility>
25
24
  #include <vector>
26
25
 
26
+ #include "src/core/call/message.h"
27
+ #include "src/core/call/metadata_batch.h"
28
+ #include "src/core/lib/channel/channel_args.h"
29
+ #include "src/core/lib/experiments/experiments.h"
30
+ #include "src/core/lib/iomgr/error.h"
27
31
  #include "src/core/lib/promise/context.h"
32
+ #include "src/core/lib/resource_quota/arena.h"
33
+ #include "src/core/lib/transport/call_final_info.h"
28
34
  #include "src/core/telemetry/tcp_tracer.h"
29
35
  #include "src/core/util/grpc_check.h"
36
+ #include "src/core/util/ref_counted_string.h"
37
+ #include "absl/functional/function_ref.h"
38
+ #include "absl/status/status.h"
39
+ #include "absl/strings/string_view.h"
40
+ #include "absl/types/span.h"
30
41
 
31
42
  namespace grpc_core {
32
43
 
44
+ std::string SendInitialMetadataAnnotation::ToString() const {
45
+ return "SendInitialMetadata";
46
+ }
47
+
48
+ void SendInitialMetadataAnnotation::ForEachKeyValue(
49
+ absl::FunctionRef<void(absl::string_view, ValueType)> f) const {
50
+ metadata_->Log([f](absl::string_view key, absl::string_view value) {
51
+ if (IsMetadataKeyAllowedInDebugOutput(key)) {
52
+ f(key, value);
53
+ } else {
54
+ f(key, "[REDACTED]");
55
+ }
56
+ });
57
+ }
58
+
59
+ std::string SendTrailingMetadataAnnotation::ToString() const {
60
+ return "SendTrailingMetadata";
61
+ }
62
+
63
+ void SendTrailingMetadataAnnotation::ForEachKeyValue(
64
+ absl::FunctionRef<void(absl::string_view, ValueType)> f) const {
65
+ metadata_->Log([f](absl::string_view key, absl::string_view value) {
66
+ if (IsMetadataKeyAllowedInDebugOutput(key)) {
67
+ f(key, value);
68
+ } else {
69
+ f(key, "[REDACTED]");
70
+ }
71
+ });
72
+ }
73
+
33
74
  CallTracerInterface::TransportByteSize&
34
75
  CallTracerInterface::TransportByteSize::operator+=(
35
76
  const CallTracerInterface::TransportByteSize& other) {
@@ -95,12 +136,24 @@ class DelegatingClientCallTracer : public ClientCallTracerInterface {
95
136
  tracer->RecordSendInitialMetadata(send_initial_metadata);
96
137
  }
97
138
  }
139
+ void MutateSendInitialMetadata(
140
+ grpc_metadata_batch* send_initial_metadata) override {
141
+ for (auto* tracer : tracers_) {
142
+ tracer->MutateSendInitialMetadata(send_initial_metadata);
143
+ }
144
+ }
98
145
  void RecordSendTrailingMetadata(
99
146
  grpc_metadata_batch* send_trailing_metadata) override {
100
147
  for (auto* tracer : tracers_) {
101
148
  tracer->RecordSendTrailingMetadata(send_trailing_metadata);
102
149
  }
103
150
  }
151
+ void MutateSendTrailingMetadata(
152
+ grpc_metadata_batch* send_trailing_metadata) override {
153
+ for (auto* tracer : tracers_) {
154
+ tracer->MutateSendTrailingMetadata(send_trailing_metadata);
155
+ }
156
+ }
104
157
  void RecordSendMessage(const Message& send_message) override {
105
158
  for (auto* tracer : tracers_) {
106
159
  tracer->RecordSendMessage(send_message);
@@ -249,12 +302,24 @@ class DelegatingServerCallTracer : public ServerCallTracerInterface {
249
302
  tracer->RecordSendInitialMetadata(send_initial_metadata);
250
303
  }
251
304
  }
305
+ void MutateSendInitialMetadata(
306
+ grpc_metadata_batch* send_initial_metadata) override {
307
+ for (auto* tracer : tracers_) {
308
+ tracer->MutateSendInitialMetadata(send_initial_metadata);
309
+ }
310
+ }
252
311
  void RecordSendTrailingMetadata(
253
312
  grpc_metadata_batch* send_trailing_metadata) override {
254
313
  for (auto* tracer : tracers_) {
255
314
  tracer->RecordSendTrailingMetadata(send_trailing_metadata);
256
315
  }
257
316
  }
317
+ void MutateSendTrailingMetadata(
318
+ grpc_metadata_batch* send_trailing_metadata) override {
319
+ for (auto* tracer : tracers_) {
320
+ tracer->MutateSendTrailingMetadata(send_trailing_metadata);
321
+ }
322
+ }
258
323
  void RecordSendMessage(const Message& send_message) override {
259
324
  for (auto* tracer : tracers_) {
260
325
  tracer->RecordSendMessage(send_message);
@@ -339,6 +404,26 @@ class DelegatingServerCallTracer : public ServerCallTracerInterface {
339
404
  std::vector<ServerCallTracerInterface*> tracers_;
340
405
  };
341
406
 
407
+ void CallTracer::RecordSendInitialMetadata(
408
+ grpc_metadata_batch* send_initial_metadata) {
409
+ if (IsCallTracerSendInitialMetadataIsAnAnnotationEnabled()) {
410
+ RecordAnnotation(SendInitialMetadataAnnotation(send_initial_metadata));
411
+ interface_->MutateSendInitialMetadata(send_initial_metadata);
412
+ } else {
413
+ interface_->RecordSendInitialMetadata(send_initial_metadata);
414
+ }
415
+ }
416
+
417
+ void CallTracer::RecordSendTrailingMetadata(
418
+ grpc_metadata_batch* send_trailing_metadata) {
419
+ if (IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()) {
420
+ RecordAnnotation(SendTrailingMetadataAnnotation(send_trailing_metadata));
421
+ interface_->MutateSendTrailingMetadata(send_trailing_metadata);
422
+ } else {
423
+ interface_->RecordSendTrailingMetadata(send_trailing_metadata);
424
+ }
425
+ }
426
+
342
427
  void SetClientCallTracer(Arena* arena,
343
428
  absl::Span<ClientCallTracerInterface* const> tracer) {
344
429
  GRPC_DCHECK_EQ(arena->GetContext<CallSpan>(), nullptr);
@@ -23,8 +23,8 @@
23
23
  #include <grpc/support/time.h>
24
24
 
25
25
  #include <memory>
26
- #include <optional>
27
26
  #include <string>
27
+ #include <variant>
28
28
 
29
29
  #include "src/core/call/message.h"
30
30
  #include "src/core/call/metadata_batch.h"
@@ -32,10 +32,10 @@
32
32
  #include "src/core/lib/iomgr/error.h"
33
33
  #include "src/core/lib/promise/context.h"
34
34
  #include "src/core/lib/resource_quota/arena.h"
35
- #include "src/core/lib/slice/slice_buffer.h"
36
35
  #include "src/core/lib/transport/call_final_info.h"
37
36
  #include "src/core/telemetry/tcp_tracer.h"
38
37
  #include "src/core/util/ref_counted_string.h"
38
+ #include "absl/functional/function_ref.h"
39
39
  #include "absl/status/status.h"
40
40
  #include "absl/strings/string_view.h"
41
41
 
@@ -70,15 +70,21 @@ class CallTracerAnnotationInterface {
70
70
  enum class AnnotationType {
71
71
  kMetadataSizes,
72
72
  kHttpTransport,
73
+ kSendInitialMetadata,
74
+ kSendTrailingMetadata,
73
75
  kDoNotUse_MustBeLast,
74
76
  };
75
77
 
76
78
  // Base class to define a new type of annotation.
77
79
  class Annotation {
78
80
  public:
81
+ using ValueType = std::variant<bool, int64_t, double, absl::string_view>;
82
+
79
83
  explicit Annotation(AnnotationType type) : type_(type) {}
80
84
  AnnotationType type() const { return type_; }
81
85
  virtual std::string ToString() const = 0;
86
+ virtual void ForEachKeyValue(
87
+ absl::FunctionRef<void(absl::string_view, ValueType)>) const = 0;
82
88
  virtual ~Annotation() = default;
83
89
 
84
90
  private:
@@ -100,6 +106,38 @@ class CallTracerAnnotationInterface {
100
106
  virtual bool IsDelegatingTracer() { return false; }
101
107
  };
102
108
 
109
+ class SendInitialMetadataAnnotation final
110
+ : public CallTracerAnnotationInterface::Annotation {
111
+ public:
112
+ explicit SendInitialMetadataAnnotation(grpc_metadata_batch* metadata)
113
+ : Annotation(CallTracerAnnotationInterface::AnnotationType::
114
+ kSendInitialMetadata),
115
+ metadata_(metadata) {}
116
+ const grpc_metadata_batch* metadata() const { return metadata_; }
117
+ std::string ToString() const override;
118
+ void ForEachKeyValue(
119
+ absl::FunctionRef<void(absl::string_view, ValueType)> f) const override;
120
+
121
+ private:
122
+ const grpc_metadata_batch* metadata_;
123
+ };
124
+
125
+ class SendTrailingMetadataAnnotation final
126
+ : public CallTracerAnnotationInterface::Annotation {
127
+ public:
128
+ explicit SendTrailingMetadataAnnotation(grpc_metadata_batch* metadata)
129
+ : Annotation(CallTracerAnnotationInterface::AnnotationType::
130
+ kSendTrailingMetadata),
131
+ metadata_(metadata) {}
132
+ const grpc_metadata_batch* metadata() const { return metadata_; }
133
+ std::string ToString() const override;
134
+ void ForEachKeyValue(
135
+ absl::FunctionRef<void(absl::string_view, ValueType)> f) const override;
136
+
137
+ private:
138
+ const grpc_metadata_batch* metadata_;
139
+ };
140
+
103
141
  // The base class for CallAttemptTracer and ServerCallTracer.
104
142
  // TODO(yashykt): What's a better name for this?
105
143
  class CallTracerInterface : public CallTracerAnnotationInterface {
@@ -109,8 +147,12 @@ class CallTracerInterface : public CallTracerAnnotationInterface {
109
147
  // arguments.
110
148
  virtual void RecordSendInitialMetadata(
111
149
  grpc_metadata_batch* send_initial_metadata) = 0;
150
+ virtual void MutateSendInitialMetadata(
151
+ grpc_metadata_batch* send_initial_metadata) = 0;
112
152
  virtual void RecordSendTrailingMetadata(
113
153
  grpc_metadata_batch* send_trailing_metadata) = 0;
154
+ virtual void MutateSendTrailingMetadata(
155
+ grpc_metadata_batch* send_trailing_metadata) = 0;
114
156
  virtual void RecordSendMessage(const Message& send_message) = 0;
115
157
  // Only invoked if message was actually compressed.
116
158
  virtual void RecordSendCompressedMessage(
@@ -282,12 +324,8 @@ class CallTracer : public CallSpan {
282
324
  explicit CallTracer(CallTracerInterface* interface)
283
325
  : CallSpan(interface), interface_(interface) {}
284
326
 
285
- void RecordSendInitialMetadata(grpc_metadata_batch* send_initial_metadata) {
286
- interface_->RecordSendInitialMetadata(send_initial_metadata);
287
- }
288
- void RecordSendTrailingMetadata(grpc_metadata_batch* send_trailing_metadata) {
289
- interface_->RecordSendTrailingMetadata(send_trailing_metadata);
290
- }
327
+ void RecordSendInitialMetadata(grpc_metadata_batch* send_initial_metadata);
328
+ void RecordSendTrailingMetadata(grpc_metadata_batch* send_trailing_metadata);
291
329
  void RecordSendMessage(const Message& send_message) {
292
330
  interface_->RecordSendMessage(send_message);
293
331
  }
@@ -30,6 +30,7 @@
30
30
  #include "src/core/channelz/channelz.h"
31
31
  #include "src/core/channelz/property_list.h"
32
32
  #include "src/core/telemetry/histogram.h"
33
+ #include "src/core/util/bitset.h"
33
34
  #include "src/core/util/grpc_check.h"
34
35
  #include "src/core/util/match.h"
35
36
  #include "src/core/util/ref_counted_ptr.h"
@@ -45,9 +46,71 @@
45
46
  #include "absl/strings/str_join.h"
46
47
  #include "absl/strings/string_view.h"
47
48
  #include "absl/types/span.h"
48
-
49
49
  namespace grpc_core {
50
50
 
51
+ std::atomic<const std::string*>* InstrumentLabel::GetLabels() {
52
+ static std::atomic<const std::string*>* static_labels = new std::atomic<
53
+ const std::string*>[InstrumentLabel::kMaxLabelsPerProcess] {};
54
+ return static_labels;
55
+ }
56
+
57
+ std::string InstrumentLabel::RegistrationDebugString() {
58
+ return absl::StrJoin(
59
+ absl::MakeSpan(GetLabels(), kMaxLabelsPerProcess), ", ",
60
+ [](std::string* s, const std::atomic<const std::string*>& p) {
61
+ auto* loaded_p = p.load(std::memory_order_acquire);
62
+ if (loaded_p == nullptr) {
63
+ s->append("<null>");
64
+ } else {
65
+ s->append(*loaded_p);
66
+ }
67
+ });
68
+ }
69
+
70
+ InstrumentLabel::InstrumentLabel(absl::string_view label) {
71
+ auto* labels = GetLabels();
72
+ std::unique_ptr<std::string> label_copy;
73
+ for (size_t i = 0; i < InstrumentLabel::kMaxLabelsPerProcess; ++i) {
74
+ auto* current_value = labels[i].load(std::memory_order_acquire);
75
+ while (current_value == nullptr) {
76
+ if (label_copy == nullptr) {
77
+ label_copy = std::make_unique<std::string>(label);
78
+ }
79
+ if (!labels[i].compare_exchange_weak(current_value, label_copy.get(),
80
+ std::memory_order_acq_rel)) {
81
+ continue;
82
+ }
83
+ std::ignore = label_copy.release();
84
+ index_ = i;
85
+ return;
86
+ }
87
+ GRPC_CHECK(current_value != nullptr);
88
+ if (*current_value == label) {
89
+ index_ = i;
90
+ return;
91
+ }
92
+ }
93
+ GRPC_CHECK(false) << "Too many instrument labels registered";
94
+ }
95
+
96
+ InstrumentLabelList InstrumentLabelSet::ToList() const {
97
+ InstrumentLabelList list;
98
+ for (size_t i = 0; i < InstrumentLabel::kMaxLabelsPerProcess; ++i) {
99
+ if (set_.is_set(i)) list.Append(InstrumentLabel::FromIndex(i));
100
+ }
101
+ return list;
102
+ }
103
+
104
+ std::string InstrumentLabelList::DebugString() const {
105
+ return absl::StrJoin(absl::MakeSpan(labels_, count_), ", ",
106
+ [](std::string* s, const InstrumentLabel& label) {
107
+ s->append(label.label());
108
+ s->append("[idx=");
109
+ s->append(std::to_string(label.index()));
110
+ s->append("]");
111
+ });
112
+ }
113
+
51
114
  namespace {
52
115
  struct Hook {
53
116
  HistogramCollectionHook hook;
@@ -81,8 +144,8 @@ void CallHistogramCollectionHooks(
81
144
 
82
145
  namespace {
83
146
  std::vector<std::string> FilterLabels(
84
- absl::Span<const std::string> domain_label_names,
85
- const absl::flat_hash_set<std::string>& scope_labels_of_interest,
147
+ InstrumentLabelList domain_label_names,
148
+ InstrumentLabelSet scope_labels_of_interest,
86
149
  absl::Span<const std::string> full_label_values) {
87
150
  std::vector<std::string> result;
88
151
  result.reserve(domain_label_names.size());
@@ -99,10 +162,10 @@ std::vector<std::string> FilterLabels(
99
162
 
100
163
  CollectionScope::CollectionScope(
101
164
  std::vector<RefCountedPtr<CollectionScope>> parents,
102
- absl::Span<const std::string> labels, size_t child_shards_count,
165
+ InstrumentLabelSet labels_of_interest, size_t child_shards_count,
103
166
  size_t storage_shards_count)
104
167
  : parents_(std::move(parents)),
105
- labels_of_interest_(labels.begin(), labels.end()),
168
+ labels_of_interest_(labels_of_interest),
106
169
  child_shards_(child_shards_count),
107
170
  storage_shards_(storage_shards_count) {
108
171
  // Sort parents (by address) and then remove any duplicates.
@@ -110,8 +173,7 @@ CollectionScope::CollectionScope(
110
173
  parents_.erase(std::unique(parents_.begin(), parents_.end()), parents_.end());
111
174
  for (const auto& parent : parents_) {
112
175
  if (parent != nullptr) {
113
- labels_of_interest_.insert(parent->labels_of_interest_.begin(),
114
- parent->labels_of_interest_.end());
176
+ labels_of_interest_.Merge(parent->labels_of_interest_);
115
177
  auto& shard = parent->child_shard(this);
116
178
  MutexLock lock(&shard.mu);
117
179
  shard.children.insert(this);
@@ -191,7 +253,7 @@ void CollectionScope::TestOnlyReset() {
191
253
 
192
254
  RefCountedPtr<CollectionScope> CreateCollectionScope(
193
255
  std::vector<RefCountedPtr<CollectionScope>> parents,
194
- absl::Span<const std::string> labels, size_t child_shards_count,
256
+ InstrumentLabelSet labels, size_t child_shards_count,
195
257
  size_t storage_shards_count) {
196
258
  return MakeRefCounted<CollectionScope>(
197
259
  std::move(parents), labels, child_shards_count, storage_shards_count);
@@ -227,9 +289,9 @@ MetricsQuery& MetricsQuery::WithLabelEq(absl::string_view label,
227
289
  }
228
290
 
229
291
  MetricsQuery& MetricsQuery::CollapseLabels(
230
- absl::Span<const std::string> labels) {
292
+ absl::Span<const InstrumentLabel> labels) {
231
293
  for (const auto& label : labels) {
232
- collapsed_labels_.insert(label);
294
+ collapsed_labels_.Set(label);
233
295
  }
234
296
  return *this;
235
297
  }
@@ -336,7 +398,7 @@ void MetricsQuery::Run(RefCountedPtr<CollectionScope> scope,
336
398
  }
337
399
  }
338
400
 
339
- void MetricsQuery::Apply(absl::Span<const std::string> label_names,
401
+ void MetricsQuery::Apply(InstrumentLabelList label_names,
340
402
  absl::FunctionRef<void(MetricsSink&)> fn,
341
403
  MetricsSink& sink) const {
342
404
  if (collapsed_labels_.empty()) {
@@ -344,11 +406,11 @@ void MetricsQuery::Apply(absl::Span<const std::string> label_names,
344
406
  return;
345
407
  }
346
408
  std::vector<size_t> include_labels;
347
- std::vector<std::string> label_keys;
409
+ InstrumentLabelList label_keys;
348
410
  for (size_t i = 0; i < label_names.size(); ++i) {
349
411
  if (!collapsed_labels_.contains(label_names[i])) {
350
412
  include_labels.push_back(i);
351
- label_keys.push_back(label_names[i]);
413
+ label_keys.Append(label_names[i]);
352
414
  }
353
415
  }
354
416
  if (include_labels.size() == label_names.size()) {
@@ -358,22 +420,22 @@ void MetricsQuery::Apply(absl::Span<const std::string> label_names,
358
420
  class Filter final : public MetricsSink {
359
421
  public:
360
422
  explicit Filter(absl::Span<const size_t> include_labels,
361
- absl::Span<const std::string> label_keys)
423
+ InstrumentLabelList label_keys)
362
424
  : include_labels_(include_labels), label_keys_(label_keys) {}
363
425
 
364
- void Counter(absl::Span<const std::string> /* label_keys */,
426
+ void Counter(InstrumentLabelList /* label_keys */,
365
427
  absl::Span<const std::string> label_values,
366
428
  absl::string_view name, uint64_t value) override {
367
429
  uint64_counters_[ConstructKey(label_values, name)] += value;
368
430
  }
369
431
 
370
- void UpDownCounter(absl::Span<const std::string> /* label_keys */,
432
+ void UpDownCounter(InstrumentLabelList /* label_keys */,
371
433
  absl::Span<const std::string> label_values,
372
434
  absl::string_view name, uint64_t value) override {
373
435
  uint64_up_down_counters_[ConstructKey(label_values, name)] += value;
374
436
  }
375
437
 
376
- void Histogram(absl::Span<const std::string> /* label_keys */,
438
+ void Histogram(InstrumentLabelList /* label_keys */,
377
439
  absl::Span<const std::string> label_values,
378
440
  absl::string_view name, HistogramBuckets bounds,
379
441
  absl::Span<const uint64_t> counts) override {
@@ -395,17 +457,17 @@ void MetricsQuery::Apply(absl::Span<const std::string> label_names,
395
457
  }
396
458
  }
397
459
 
398
- void DoubleGauge(absl::Span<const std::string> /* label_keys */,
460
+ void DoubleGauge(InstrumentLabelList /* label_keys */,
399
461
  absl::Span<const std::string>, absl::string_view,
400
462
  double) override {
401
463
  // Not aggregatable
402
464
  }
403
- void IntGauge(absl::Span<const std::string> /* label_keys */,
465
+ void IntGauge(InstrumentLabelList /* label_keys */,
404
466
  absl::Span<const std::string>, absl::string_view,
405
467
  int64_t) override {
406
468
  // Not aggregatable
407
469
  }
408
- void UintGauge(absl::Span<const std::string> /* label_keys */,
470
+ void UintGauge(InstrumentLabelList /* label_keys */,
409
471
  absl::Span<const std::string>, absl::string_view,
410
472
  uint64_t) override {
411
473
  // Not aggregatable
@@ -438,7 +500,7 @@ void MetricsQuery::Apply(absl::Span<const std::string> label_names,
438
500
  }
439
501
 
440
502
  absl::Span<const size_t> include_labels_;
441
- absl::Span<const std::string> label_keys_;
503
+ InstrumentLabelList label_keys_;
442
504
  absl::flat_hash_map<std::tuple<std::vector<std::string>, absl::string_view>,
443
505
  uint64_t>
444
506
  uint64_counters_;
@@ -460,7 +522,7 @@ void MetricsQuery::Apply(absl::Span<const std::string> label_names,
460
522
  filter.Publish(sink);
461
523
  }
462
524
 
463
- void MetricsQuery::ApplyLabelChecks(absl::Span<const std::string> label_names,
525
+ void MetricsQuery::ApplyLabelChecks(InstrumentLabelList label_names,
464
526
  absl::FunctionRef<void(MetricsSink&)> fn,
465
527
  MetricsSink& sink) const {
466
528
  if (label_eqs_.empty()) {
@@ -486,21 +548,21 @@ void MetricsQuery::ApplyLabelChecks(absl::Span<const std::string> label_names,
486
548
  absl::Span<const LabelEq> inclusion_checks)
487
549
  : inclusion_checks_(inclusion_checks), sink_(sink) {}
488
550
 
489
- void Counter(absl::Span<const std::string> label_keys,
551
+ void Counter(InstrumentLabelList label_keys,
490
552
  absl::Span<const std::string> label_values,
491
553
  absl::string_view name, uint64_t value) override {
492
554
  if (!Matches(label_values)) return;
493
555
  sink_.Counter(label_keys, label_values, name, value);
494
556
  }
495
557
 
496
- void UpDownCounter(absl::Span<const std::string> label_keys,
558
+ void UpDownCounter(InstrumentLabelList label_keys,
497
559
  absl::Span<const std::string> label_values,
498
560
  absl::string_view name, uint64_t value) override {
499
561
  if (!Matches(label_values)) return;
500
562
  sink_.UpDownCounter(label_keys, label_values, name, value);
501
563
  }
502
564
 
503
- void Histogram(absl::Span<const std::string> label_keys,
565
+ void Histogram(InstrumentLabelList label_keys,
504
566
  absl::Span<const std::string> label_values,
505
567
  absl::string_view name, HistogramBuckets bounds,
506
568
  absl::Span<const uint64_t> counts) override {
@@ -508,19 +570,19 @@ void MetricsQuery::ApplyLabelChecks(absl::Span<const std::string> label_names,
508
570
  sink_.Histogram(label_keys, label_values, name, bounds, counts);
509
571
  }
510
572
 
511
- void DoubleGauge(absl::Span<const std::string> label_keys,
573
+ void DoubleGauge(InstrumentLabelList label_keys,
512
574
  absl::Span<const std::string> label_values,
513
575
  absl::string_view name, double value) override {
514
576
  if (!Matches(label_values)) return;
515
577
  sink_.DoubleGauge(label_keys, label_values, name, value);
516
578
  }
517
- void IntGauge(absl::Span<const std::string> label_keys,
579
+ void IntGauge(InstrumentLabelList label_keys,
518
580
  absl::Span<const std::string> label_values,
519
581
  absl::string_view name, int64_t value) override {
520
582
  if (!Matches(label_values)) return;
521
583
  sink_.IntGauge(label_keys, label_values, name, value);
522
584
  }
523
- void UintGauge(absl::Span<const std::string> label_keys,
585
+ void UintGauge(InstrumentLabelList label_keys,
524
586
  absl::Span<const std::string> label_values,
525
587
  absl::string_view name, uint64_t value) override {
526
588
  if (!Matches(label_values)) return;
@@ -599,7 +661,7 @@ void DomainStorage::AddData(channelz::DataSink sink) {
599
661
  channelz::PropertyGrid grid;
600
662
  for (size_t i = 0; i < label_.size(); ++i) {
601
663
  grid.SetRow(
602
- domain_->label_names()[i],
664
+ domain_->label_names()[i].label(),
603
665
  channelz::PropertyList().Set("value", label_[i]));
604
666
  }
605
667
  return grid;
@@ -893,9 +955,9 @@ class GlobalCollectionScopeManager {
893
955
  return *manager;
894
956
  }
895
957
 
896
- RefCountedPtr<CollectionScope> CreateRootScope(
897
- absl::Span<const std::string> labels, size_t child_shards_count,
898
- size_t storage_shards_count) {
958
+ RefCountedPtr<CollectionScope> CreateRootScope(InstrumentLabelSet labels,
959
+ size_t child_shards_count,
960
+ size_t storage_shards_count) {
899
961
  MutexLock lock(&mu_);
900
962
  if (auto* building = std::get_if<Building>(&state_); building != nullptr) {
901
963
  auto scope = CreateCollectionScope({}, labels, child_shards_count,
@@ -905,15 +967,15 @@ class GlobalCollectionScopeManager {
905
967
  } else {
906
968
  // Global scope is already created, we can no longer subset labels.
907
969
  auto& published = std::get<Published>(state_);
908
- std::vector<std::string> missing_labels;
909
- for (const auto& label : labels) {
970
+ std::vector<absl::string_view> missing_labels;
971
+ for (const auto& label : labels.ToList()) {
910
972
  if (!published.global_scope->ObservesLabel(label)) {
911
- missing_labels.push_back(label);
973
+ missing_labels.push_back(label.label());
912
974
  }
913
975
  }
914
976
  if (missing_labels.empty()) {
915
977
  LOG(ERROR) << "Attempt to create a root scope with labels ["
916
- << absl::StrJoin(labels, ", ")
978
+ << absl::StrJoin(labels.ToList(), ", ")
917
979
  << "] after the global scope was already created. "
918
980
  "All requested labels are collected by the global scope, "
919
981
  "so this scope will be returned instead. "
@@ -922,7 +984,7 @@ class GlobalCollectionScopeManager {
922
984
  "to GlobalCollectionScope().";
923
985
  } else {
924
986
  LOG(ERROR) << "Attempt to create a root scope with labels ["
925
- << absl::StrJoin(labels, ", ")
987
+ << absl::StrJoin(labels.ToList(), ", ")
926
988
  << "] after the global scope was already created. "
927
989
  "The following labels are not collected by the global "
928
990
  "scope, and so will not be available: ["
@@ -939,8 +1001,8 @@ class GlobalCollectionScopeManager {
939
1001
  RefCountedPtr<CollectionScope> GetGlobalScope() {
940
1002
  MutexLock lock(&mu_);
941
1003
  if (auto* building = std::get_if<Building>(&state_); building != nullptr) {
942
- auto global_scope =
943
- CreateCollectionScope(building->root_scopes, {}, 32, 32);
1004
+ auto global_scope = CreateCollectionScope(building->root_scopes,
1005
+ InstrumentLabelSet(), 32, 32);
944
1006
  state_ = Published{global_scope};
945
1007
  return global_scope;
946
1008
  } else {
@@ -974,7 +1036,7 @@ class GlobalCollectionScopeManager {
974
1036
  };
975
1037
 
976
1038
  RefCountedPtr<CollectionScope> CreateRootCollectionScope(
977
- absl::Span<const std::string> labels, size_t child_shards_count,
1039
+ InstrumentLabelSet labels, size_t child_shards_count,
978
1040
  size_t storage_shards_count) {
979
1041
  return GlobalCollectionScopeManager::Get().CreateRootScope(
980
1042
  labels, child_shards_count, storage_shards_count);