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
@@ -91,9 +91,10 @@
91
91
  //
92
92
  // 1. `using Backend = ...;`: Specifies the backend type (e.g.,
93
93
  // `LowContentionBackend`, `HighContentionBackend`).
94
- // 2. `static constexpr auto kLabels = std::tuple(...);`: Defines the names
95
- // of the labels for this domain. The types of the labels are inferred
96
- // from the arguments passed to `GetStorage()`.
94
+ // 2. `GRPC_INSTRUMENT_DOMAIN_LABELS("label1", "label2", ...);`: Defines the
95
+ // names of the labels for this domain via a macro that generates a
96
+ // static `Labels()` method. The types of the labels are inferred from
97
+ // the arguments passed to `GetStorage()`.
97
98
  //
98
99
  // Instruments are registered as static members within the domain class using
99
100
  // the `Register*` methods.
@@ -102,7 +103,7 @@
102
103
  // class MyDomain : public InstrumentDomain<MyDomain> {
103
104
  // public:
104
105
  // using Backend = LowContentionBackend;
105
- // static constexpr auto kLabels = std::tuple("my_label", "another_label");
106
+ // GRPC_INSTRUMENT_DOMAIN_LABELS("my_label", "another_label");
106
107
  //
107
108
  // // Register a counter:
108
109
  // static inline const auto kMyCounter = RegisterCounter(
@@ -179,6 +180,7 @@
179
180
  #include <atomic>
180
181
  #include <cstddef>
181
182
  #include <cstdint>
183
+ #include <initializer_list>
182
184
  #include <memory>
183
185
  #include <optional>
184
186
  #include <string>
@@ -191,6 +193,7 @@
191
193
  #include "src/core/channelz/channelz.h"
192
194
  #include "src/core/telemetry/histogram.h"
193
195
  #include "src/core/util/avl.h"
196
+ #include "src/core/util/bitset.h"
194
197
  #include "src/core/util/dual_ref_counted.h"
195
198
  #include "src/core/util/grpc_check.h"
196
199
  #include "src/core/util/per_cpu.h"
@@ -222,6 +225,165 @@ class QueryableDomain;
222
225
  class DomainStorage;
223
226
  } // namespace instrument_detail
224
227
 
228
+ class InstrumentLabel {
229
+ public:
230
+ static constexpr size_t kMaxLabelsPerProcess = 63;
231
+ static constexpr size_t kMaxLabelsPerDomain = 15;
232
+
233
+ InstrumentLabel() : index_(kSentinelIndex) {}
234
+ explicit InstrumentLabel(absl::string_view label);
235
+ explicit InstrumentLabel(const char* label)
236
+ : InstrumentLabel(absl::string_view(label)) {}
237
+
238
+ static InstrumentLabel FromIndex(uint8_t index) {
239
+ InstrumentLabel label;
240
+ label.index_ = index;
241
+ return label;
242
+ }
243
+
244
+ uint8_t index() const { return index_; }
245
+ absl::string_view label() const {
246
+ CHECK_NE(index_, kSentinelIndex);
247
+ std::atomic<const std::string*>* labels = GetLabels();
248
+ const std::string* label = labels[index_].load(std::memory_order_acquire);
249
+ CHECK_NE(label, nullptr)
250
+ << "Label index " << static_cast<int>(index_) << " is out of range";
251
+ return *label;
252
+ }
253
+
254
+ template <typename Sink>
255
+ friend void AbslStringify(Sink& sink, InstrumentLabel label) {
256
+ sink.Append(label.label());
257
+ }
258
+
259
+ template <typename H>
260
+ friend H AbslHashValue(H h, InstrumentLabel label) {
261
+ return H::combine(std::move(h), label.index_);
262
+ }
263
+
264
+ friend bool operator==(InstrumentLabel a, InstrumentLabel b) {
265
+ return a.index_ == b.index_;
266
+ }
267
+
268
+ friend bool operator!=(InstrumentLabel a, InstrumentLabel b) {
269
+ return a.index_ != b.index_;
270
+ }
271
+
272
+ friend bool operator<(InstrumentLabel a, InstrumentLabel b) {
273
+ return a.index_ < b.index_;
274
+ }
275
+
276
+ friend bool operator>(InstrumentLabel a, InstrumentLabel b) {
277
+ return a.index_ > b.index_;
278
+ }
279
+
280
+ static std::string RegistrationDebugString();
281
+ static std::atomic<const std::string*>* GetLabels();
282
+
283
+ private:
284
+ static constexpr uint8_t kSentinelIndex = 255;
285
+ uint8_t index_ = kSentinelIndex;
286
+ };
287
+
288
+ class InstrumentLabelList;
289
+
290
+ class InstrumentLabelSet {
291
+ public:
292
+ InstrumentLabelSet() = default;
293
+ InstrumentLabelSet(std::initializer_list<absl::string_view> labels) {
294
+ for (const auto& label : labels) {
295
+ set_.set(InstrumentLabel(label).index());
296
+ }
297
+ }
298
+
299
+ void Set(InstrumentLabel label) { set_.set(label.index()); }
300
+ bool empty() const { return set_.none(); }
301
+ bool contains(InstrumentLabel label) const {
302
+ return set_.is_set(label.index());
303
+ }
304
+ void Merge(InstrumentLabelSet other) { set_.Merge(other.set_); }
305
+ InstrumentLabelList ToList() const;
306
+
307
+ private:
308
+ BitSet<InstrumentLabel::kMaxLabelsPerProcess> set_;
309
+ };
310
+
311
+ class InstrumentLabelList {
312
+ public:
313
+ InstrumentLabelList() = default;
314
+ InstrumentLabelList(std::initializer_list<absl::string_view> labels) {
315
+ for (const auto& label : labels) {
316
+ Append(InstrumentLabel(label));
317
+ }
318
+ }
319
+
320
+ void Append(InstrumentLabel label) {
321
+ GRPC_DCHECK_LT(count_, InstrumentLabel::kMaxLabelsPerProcess);
322
+ labels_[count_++] = label;
323
+ }
324
+
325
+ bool empty() const { return count_ == 0; }
326
+ size_t size() const { return count_; }
327
+
328
+ InstrumentLabel operator[](size_t i) const {
329
+ DCHECK_LT(i, count_);
330
+ return labels_[i];
331
+ }
332
+
333
+ InstrumentLabelList Remove(InstrumentLabelSet labels);
334
+
335
+ const InstrumentLabel* begin() const { return labels_; }
336
+ const InstrumentLabel* end() const { return labels_ + count_; }
337
+
338
+ std::string DebugString() const;
339
+
340
+ private:
341
+ uint8_t count_ = 0;
342
+ InstrumentLabel labels_[InstrumentLabel::kMaxLabelsPerProcess];
343
+ };
344
+
345
+ template <size_t kNumLabels>
346
+ class FixedInstrumentLabelList {
347
+ public:
348
+ template <typename... Args>
349
+ explicit FixedInstrumentLabelList(Args&&... args)
350
+ : labels_{InstrumentLabel(std::forward<Args>(args))...} {
351
+ static_assert(kNumLabels == sizeof...(args));
352
+ }
353
+
354
+ InstrumentLabel operator[](size_t i) const {
355
+ CHECK_LT(i, kNumLabels);
356
+ return labels_[i];
357
+ }
358
+
359
+ static constexpr size_t count() { return kNumLabels; }
360
+
361
+ InstrumentLabelList ToList() const {
362
+ InstrumentLabelList list;
363
+ for (size_t i = 0; i < kNumLabels; ++i) {
364
+ list.Append(labels_[i]);
365
+ }
366
+ return list;
367
+ }
368
+
369
+ private:
370
+ InstrumentLabel labels_[kNumLabels];
371
+ };
372
+
373
+ template <>
374
+ class FixedInstrumentLabelList<0> {
375
+ public:
376
+ explicit FixedInstrumentLabelList() {}
377
+
378
+ InstrumentLabel operator[](size_t i) const {
379
+ LOG(FATAL) << "Index out of bounds: " << i << " for label list of size 0";
380
+ }
381
+
382
+ static constexpr size_t count() { return 0; }
383
+
384
+ InstrumentLabelList ToList() const { return InstrumentLabelList(); }
385
+ };
386
+
225
387
  class CollectionScope;
226
388
 
227
389
  class InstrumentMetadata {
@@ -278,7 +440,7 @@ void RegisterHistogramCollectionHook(HistogramCollectionHook hook);
278
440
  class CollectionScope : public RefCounted<CollectionScope> {
279
441
  public:
280
442
  CollectionScope(std::vector<RefCountedPtr<CollectionScope>> parents,
281
- absl::Span<const std::string> labels,
443
+ InstrumentLabelSet labels_of_interest,
282
444
  size_t child_shards_count, size_t storage_shards_count);
283
445
  ~CollectionScope() override;
284
446
 
@@ -287,7 +449,7 @@ class CollectionScope : public RefCounted<CollectionScope> {
287
449
  void ForEachUniqueStorage(
288
450
  absl::FunctionRef<void(instrument_detail::DomainStorage*)> cb);
289
451
 
290
- bool ObservesLabel(absl::string_view label) const {
452
+ bool ObservesLabel(InstrumentLabel label) const {
291
453
  return labels_of_interest_.contains(label);
292
454
  }
293
455
 
@@ -316,7 +478,7 @@ class CollectionScope : public RefCounted<CollectionScope> {
316
478
  }
317
479
 
318
480
  std::vector<RefCountedPtr<CollectionScope>> parents_;
319
- absl::flat_hash_set<std::string> labels_of_interest_;
481
+ InstrumentLabelSet labels_of_interest_;
320
482
  std::vector<ChildShard> child_shards_;
321
483
  std::vector<StorageShard> storage_shards_;
322
484
 
@@ -378,6 +540,7 @@ class DomainStorage : public DualRefCounted<DomainStorage>,
378
540
 
379
541
  virtual uint64_t SumCounter(size_t index) = 0;
380
542
  virtual void Add(DomainStorage* other) = 0;
543
+ virtual void FillGaugeStorage(GaugeStorage& gauge_storage) = 0;
381
544
 
382
545
  // Returns the label values of the CollectionScope that owns this storage.
383
546
  // This is the full set of labels published by the domain, with unused labels
@@ -385,8 +548,6 @@ class DomainStorage : public DualRefCounted<DomainStorage>,
385
548
  absl::Span<const std::string> label() const { return label_; }
386
549
  QueryableDomain* domain() const { return domain_; }
387
550
 
388
- virtual void FillGaugeStorage(GaugeStorage& gauge_storage) = 0;
389
-
390
551
  void AddData(channelz::DataSink sink) override;
391
552
 
392
553
  private:
@@ -436,7 +597,7 @@ class QueryableDomain {
436
597
  absl::FunctionRef<void(const InstrumentMetadata::Description*)> fn);
437
598
 
438
599
  // Returns the names of the labels in the domain.
439
- absl::Span<const std::string> label_names() const { return label_names_; }
600
+ InstrumentLabelList label_names() const { return label_names_; }
440
601
 
441
602
  // Reset the internal state of all domains. For test use only.
442
603
  static void TestOnlyResetAll();
@@ -471,9 +632,9 @@ class QueryableDomain {
471
632
  }
472
633
 
473
634
  protected:
474
- QueryableDomain(std::string name, std::vector<std::string> label_names,
635
+ QueryableDomain(std::string name, InstrumentLabelList label_names,
475
636
  size_t map_shards_size)
476
- : label_names_(std::move(label_names)),
637
+ : label_names_(label_names),
477
638
  map_shards_size_(label_names_.empty() ? 1 : map_shards_size),
478
639
  map_shards_(std::make_unique<MapShard[]>(map_shards_size_)),
479
640
  name_(std::move(name)) {}
@@ -550,7 +711,7 @@ class QueryableDomain {
550
711
  static inline QueryableDomain* last_ = nullptr;
551
712
  QueryableDomain* prev_ = nullptr;
552
713
 
553
- const std::vector<std::string> label_names_;
714
+ const InstrumentLabelList label_names_;
554
715
  std::vector<const InstrumentMetadata::Description*> metrics_;
555
716
  uint64_t allocated_counter_slots_ = 0;
556
717
  uint64_t allocated_double_gauge_slots_ = 0;
@@ -587,6 +748,7 @@ class InstrumentHandle {
587
748
  absl::string_view name() const { return description_->name; }
588
749
  absl::string_view description() const { return description_->description; }
589
750
  absl::string_view unit() const { return description_->unit; }
751
+ uint64_t offset() const { return offset_; }
590
752
 
591
753
  private:
592
754
  friend Domain;
@@ -605,12 +767,6 @@ class InstrumentHandle {
605
767
  const InstrumentMetadata::Description* description_ = nullptr;
606
768
  };
607
769
 
608
- template <typename T>
609
- using StdString = std::string;
610
-
611
- template <typename T>
612
- using AbslStringView = absl::string_view;
613
-
614
770
  } // namespace instrument_detail
615
771
 
616
772
  // A domain backend for low contention domains.
@@ -670,23 +826,23 @@ class MetricsSink {
670
826
  public:
671
827
  // Called once per label per metric, with the value of that metric for that
672
828
  // label.
673
- virtual void Counter(absl::Span<const std::string> label_keys,
829
+ virtual void Counter(InstrumentLabelList label_keys,
674
830
  absl::Span<const std::string> label_values,
675
831
  absl::string_view name, uint64_t value) = 0;
676
- virtual void UpDownCounter(absl::Span<const std::string> label_keys,
832
+ virtual void UpDownCounter(InstrumentLabelList label_keys,
677
833
  absl::Span<const std::string> label_values,
678
834
  absl::string_view name, uint64_t value) = 0;
679
- virtual void Histogram(absl::Span<const std::string> label_keys,
835
+ virtual void Histogram(InstrumentLabelList label_keys,
680
836
  absl::Span<const std::string> label_values,
681
837
  absl::string_view name, HistogramBuckets bounds,
682
838
  absl::Span<const uint64_t> counts) = 0;
683
- virtual void DoubleGauge(absl::Span<const std::string> label_keys,
839
+ virtual void DoubleGauge(InstrumentLabelList label_keys,
684
840
  absl::Span<const std::string> label_values,
685
841
  absl::string_view name, double value) = 0;
686
- virtual void IntGauge(absl::Span<const std::string> label_keys,
842
+ virtual void IntGauge(InstrumentLabelList label_keys,
687
843
  absl::Span<const std::string> label_values,
688
844
  absl::string_view name, int64_t value) = 0;
689
- virtual void UintGauge(absl::Span<const std::string> label_keys,
845
+ virtual void UintGauge(InstrumentLabelList label_keys,
690
846
  absl::Span<const std::string> label_values,
691
847
  absl::string_view name, uint64_t value) = 0;
692
848
 
@@ -707,7 +863,7 @@ class MetricsQuery {
707
863
  MetricsQuery& WithLabelEq(absl::string_view label, std::string value);
708
864
  // Collapse labels, effectively omitting them. Counters are summed over the
709
865
  // remaining dimensions, etc.
710
- MetricsQuery& CollapseLabels(absl::Span<const std::string> labels);
866
+ MetricsQuery& CollapseLabels(absl::Span<const InstrumentLabel> labels);
711
867
  // Only include metrics that are in `metrics`.
712
868
  MetricsQuery& OnlyMetrics(std::vector<std::string> metrics);
713
869
 
@@ -722,16 +878,16 @@ class MetricsQuery {
722
878
  private:
723
879
  // Adapts `sink` by including the filtering requested, and then calls `fn`
724
880
  // with the filtering sink. This is mainly an implementation detail.
725
- void Apply(absl::Span<const std::string> label_names,
881
+ void Apply(InstrumentLabelList label_names,
726
882
  absl::FunctionRef<void(MetricsSink&)> fn, MetricsSink& sink) const;
727
883
 
728
- void ApplyLabelChecks(absl::Span<const std::string> label_names,
884
+ void ApplyLabelChecks(InstrumentLabelList label_names,
729
885
  absl::FunctionRef<void(MetricsSink&)> fn,
730
886
  MetricsSink& sink) const;
731
887
 
732
- absl::flat_hash_map<absl::string_view, std::string> label_eqs_;
888
+ absl::flat_hash_map<InstrumentLabel, std::string> label_eqs_;
733
889
  std::optional<std::vector<std::string>> only_metrics_;
734
- absl::flat_hash_set<std::string> collapsed_labels_;
890
+ InstrumentLabelSet collapsed_labels_;
735
891
  };
736
892
 
737
893
  namespace instrument_detail {
@@ -861,6 +1017,15 @@ class InstrumentDomainImpl final : public QueryableDomain {
861
1017
  backend_.Add(handle.offset_ + handle.shape_->BucketFor(value), 1);
862
1018
  }
863
1019
 
1020
+ uint64_t SumCounter(size_t offset) override { return backend_.Sum(offset); }
1021
+ void FillGaugeStorage(GaugeStorage& storage) override {
1022
+ GaugeSink sink(storage);
1023
+ MutexLock lock(&gauge_providers_mu_);
1024
+ for (auto* provider : gauge_providers_) {
1025
+ provider->PopulateGaugeData(sink);
1026
+ }
1027
+ }
1028
+
864
1029
  private:
865
1030
  friend class InstrumentDomainImpl<Backend, N, Tag>;
866
1031
  friend class GaugeProvider;
@@ -870,8 +1035,6 @@ class InstrumentDomainImpl final : public QueryableDomain {
870
1035
  : DomainStorage(instrument_domain, std::move(labels)),
871
1036
  backend_(instrument_domain->allocated_counter_slots()) {}
872
1037
 
873
- uint64_t SumCounter(size_t offset) override { return backend_.Sum(offset); }
874
-
875
1038
  void RegisterGaugeProvider(GaugeProvider* provider) {
876
1039
  MutexLock lock(&gauge_providers_mu_);
877
1040
  gauge_providers_.push_back(provider);
@@ -884,14 +1047,6 @@ class InstrumentDomainImpl final : public QueryableDomain {
884
1047
  gauge_providers_.end());
885
1048
  }
886
1049
 
887
- void FillGaugeStorage(GaugeStorage& storage) override {
888
- GaugeSink sink(storage);
889
- MutexLock lock(&gauge_providers_mu_);
890
- for (auto* provider : gauge_providers_) {
891
- provider->PopulateGaugeData(sink);
892
- }
893
- }
894
-
895
1050
  Backend backend_;
896
1051
  Mutex gauge_providers_mu_;
897
1052
  std::vector<GaugeProvider*> gauge_providers_
@@ -899,10 +1054,9 @@ class InstrumentDomainImpl final : public QueryableDomain {
899
1054
  };
900
1055
 
901
1056
  GPR_ATTRIBUTE_NOINLINE explicit InstrumentDomainImpl(
902
- std::string name, std::vector<std::string> label_names,
1057
+ std::string name, FixedInstrumentLabelList<N> labels,
903
1058
  size_t map_shards = std::min(16u, gpr_cpu_num_cores()))
904
- : QueryableDomain(std::move(name), std::move(label_names), map_shards) {
905
- GRPC_CHECK_EQ(this->label_names().size(), N);
1059
+ : QueryableDomain(std::move(name), labels.ToList(), map_shards) {
906
1060
  Constructed();
907
1061
  }
908
1062
 
@@ -980,30 +1134,20 @@ class InstrumentDomainImpl final : public QueryableDomain {
980
1134
  ~InstrumentDomainImpl() = delete;
981
1135
  };
982
1136
 
983
- class MakeLabel {
984
- public:
985
- template <typename... LabelNames>
986
- auto operator()(LabelNames... t) {
987
- return std::vector<std::string>{absl::StrCat(t)...};
988
- }
989
- };
990
-
991
- template <typename... LabelNames>
992
- GPR_ATTRIBUTE_NOINLINE auto MakeLabelFromTuple(
993
- std::tuple<LabelNames...> t) noexcept {
994
- return std::apply(MakeLabel(), t);
995
- }
996
1137
  } // namespace instrument_detail
997
1138
 
998
1139
  template <class Derived>
999
1140
  class InstrumentDomain {
1000
1141
  public:
1001
1142
  static auto* Domain() {
1002
- static auto* domain = new instrument_detail::InstrumentDomainImpl<
1003
- typename Derived::Backend,
1004
- std::tuple_size_v<decltype(Derived::kLabels)>, Derived>(
1005
- absl::StrCat(Derived::kName),
1006
- instrument_detail::MakeLabelFromTuple(Derived::kLabels));
1143
+ static const auto labels = Derived::Labels();
1144
+ static auto* domain =
1145
+ new instrument_detail::InstrumentDomainImpl<typename Derived::Backend,
1146
+ labels.count(), Derived>(
1147
+ absl::StrCat(Derived::kName), labels);
1148
+ for (size_t i = 0; i < labels.count(); ++i) {
1149
+ GRPC_DCHECK_EQ(domain->label_names()[i], labels[i]);
1150
+ }
1007
1151
  return domain;
1008
1152
  }
1009
1153
 
@@ -1017,8 +1161,28 @@ class InstrumentDomain {
1017
1161
 
1018
1162
  protected:
1019
1163
  template <typename... Label>
1020
- static constexpr auto Labels(Label... labels) {
1021
- return std::tuple<instrument_detail::AbslStringView<Label>...>{labels...};
1164
+ static FixedInstrumentLabelList<sizeof...(Label)> MakeLabels(
1165
+ Label... labels) {
1166
+ if constexpr (sizeof...(Label) == 0) {
1167
+ return FixedInstrumentLabelList<0>();
1168
+ } else {
1169
+ InstrumentLabel l[] = {InstrumentLabel(labels)...};
1170
+ for (size_t i = 0; i < sizeof...(Label); ++i) {
1171
+ for (size_t j = i + 1; j < sizeof...(Label); ++j) {
1172
+ GRPC_CHECK_NE(l[i], l[j]);
1173
+ }
1174
+ }
1175
+ auto list = FixedInstrumentLabelList<sizeof...(Label)>(
1176
+ std::forward<Label>(labels)...);
1177
+ const std::vector<std::string> label_names{std::string(labels)...};
1178
+ for (size_t i = 0; i < sizeof...(Label); ++i) {
1179
+ CHECK_EQ(label_names[i], list[i].label());
1180
+ for (size_t j = i + 1; j < sizeof...(Label); ++j) {
1181
+ GRPC_CHECK_NE(list[i], list[j]);
1182
+ }
1183
+ }
1184
+ return list;
1185
+ }
1022
1186
  }
1023
1187
 
1024
1188
  static auto RegisterCounter(absl::string_view name,
@@ -1091,15 +1255,32 @@ void TestOnlyResetInstruments();
1091
1255
  // parameters for sharding internal data structures.
1092
1256
  RefCountedPtr<CollectionScope> CreateCollectionScope(
1093
1257
  std::vector<RefCountedPtr<CollectionScope>> parents,
1094
- absl::Span<const std::string> labels, size_t child_shards_count = 1,
1258
+ InstrumentLabelSet labels, size_t child_shards_count = 1,
1095
1259
  size_t storage_shards_count = 1);
1096
1260
 
1097
1261
  RefCountedPtr<CollectionScope> CreateRootCollectionScope(
1098
- absl::Span<const std::string> labels, size_t child_shards_count = 1,
1262
+ InstrumentLabelSet labels, size_t child_shards_count = 1,
1099
1263
  size_t storage_shards_count = 1);
1100
1264
 
1101
1265
  RefCountedPtr<CollectionScope> GlobalCollectionScope();
1102
1266
 
1103
1267
  } // namespace grpc_core
1104
1268
 
1269
+ #define GRPC_INSTRUMENT_DOMAIN_LABELS_NUM_LABELS(...) \
1270
+ (std::tuple_size<decltype(std::tuple(__VA_ARGS__))>::value)
1271
+
1272
+ #define GRPC_INSTRUMENT_DOMAIN_LABELS(...) \
1273
+ static grpc_core::FixedInstrumentLabelList< \
1274
+ GRPC_INSTRUMENT_DOMAIN_LABELS_NUM_LABELS(__VA_ARGS__)> \
1275
+ Labels() { \
1276
+ return MakeLabels(__VA_ARGS__); \
1277
+ }
1278
+
1279
+ // GCC-8 has trouble compiling `GRPC_INSTRUMENT_DOMAIN_LABELS()`, so use this
1280
+ // instead if there are no labels for a domain.
1281
+ #define GRPC_EMPTY_INSTRUMENT_DOMAIN_LABELS() \
1282
+ static grpc_core::FixedInstrumentLabelList<0> Labels() { \
1283
+ return grpc_core::FixedInstrumentLabelList<0>(); \
1284
+ }
1285
+
1105
1286
  #endif // GRPC_SRC_CORE_TELEMETRY_INSTRUMENT_H
@@ -396,7 +396,9 @@ static tsi_result fake_protector_unprotect(
396
396
  }
397
397
 
398
398
  // Now process the protected_bytes.
399
- if (frame->needs_draining) return TSI_INTERNAL_ERROR;
399
+ if (*protected_frames_bytes_size == 0) {
400
+ return TSI_OK;
401
+ }
400
402
  result = tsi_fake_frame_decode(protected_frames_bytes,
401
403
  protected_frames_bytes_size, frame,
402
404
  /*error=*/nullptr);