grpc 1.64.3 → 1.65.0

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 (632) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +57 -58
  3. data/include/grpc/event_engine/event_engine.h +13 -6
  4. data/include/grpc/impl/channel_arg_names.h +7 -3
  5. data/include/grpc/module.modulemap +1 -0
  6. data/include/grpc/passive_listener.h +62 -0
  7. data/include/grpc/support/log.h +7 -17
  8. data/include/grpc/support/port_platform.h +3 -0
  9. data/src/core/channelz/channel_trace.cc +1 -1
  10. data/src/core/channelz/channel_trace.h +1 -1
  11. data/src/core/channelz/channelz.cc +3 -3
  12. data/src/core/channelz/channelz.h +7 -7
  13. data/src/core/channelz/channelz_registry.cc +4 -3
  14. data/src/core/client_channel/backup_poller.cc +4 -5
  15. data/src/core/client_channel/client_channel.cc +1324 -0
  16. data/src/core/client_channel/client_channel.h +243 -0
  17. data/src/core/client_channel/client_channel_filter.cc +266 -709
  18. data/src/core/client_channel/client_channel_filter.h +11 -64
  19. data/src/core/client_channel/client_channel_internal.h +16 -5
  20. data/src/core/client_channel/client_channel_plugin.cc +1 -14
  21. data/src/core/client_channel/client_channel_service_config.h +3 -3
  22. data/src/core/client_channel/config_selector.cc +1 -1
  23. data/src/core/client_channel/config_selector.h +1 -1
  24. data/src/core/client_channel/dynamic_filters.cc +3 -3
  25. data/src/core/client_channel/dynamic_filters.h +1 -3
  26. data/src/core/client_channel/load_balanced_call_destination.cc +336 -0
  27. data/src/core/client_channel/load_balanced_call_destination.h +49 -0
  28. data/src/core/client_channel/retry_filter.cc +2 -9
  29. data/src/core/client_channel/retry_filter.h +2 -7
  30. data/src/core/client_channel/retry_filter_legacy_call_data.cc +65 -72
  31. data/src/core/client_channel/retry_filter_legacy_call_data.h +0 -2
  32. data/src/core/client_channel/retry_service_config.cc +4 -5
  33. data/src/core/client_channel/retry_service_config.h +3 -3
  34. data/src/core/client_channel/subchannel.cc +220 -112
  35. data/src/core/client_channel/subchannel.h +31 -18
  36. data/src/core/client_channel/subchannel_pool_interface.cc +0 -2
  37. data/src/core/client_channel/subchannel_pool_interface.h +2 -4
  38. data/src/core/client_channel/subchannel_stream_client.cc +36 -49
  39. data/src/core/client_channel/subchannel_stream_client.h +2 -4
  40. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +7 -10
  41. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +1 -0
  42. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +7 -0
  43. data/src/core/ext/filters/census/grpc_context.cc +2 -4
  44. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +8 -15
  45. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -0
  46. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -7
  47. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -0
  48. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +3 -3
  49. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -0
  50. data/src/core/ext/filters/http/client/http_client_filter.h +1 -0
  51. data/src/core/ext/filters/http/client_authority_filter.cc +1 -0
  52. data/src/core/ext/filters/http/client_authority_filter.h +1 -0
  53. data/src/core/ext/filters/http/message_compress/compression_filter.cc +10 -15
  54. data/src/core/ext/filters/http/message_compress/compression_filter.h +2 -0
  55. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -2
  56. data/src/core/ext/filters/http/server/http_server_filter.h +1 -0
  57. data/src/core/ext/filters/message_size/message_size_filter.cc +6 -9
  58. data/src/core/ext/filters/message_size/message_size_filter.h +6 -6
  59. data/src/core/ext/filters/rbac/rbac_filter.cc +2 -5
  60. data/src/core/ext/filters/rbac/rbac_filter.h +1 -0
  61. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
  62. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
  63. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +2 -6
  64. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +1 -0
  65. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +3 -3
  66. data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
  67. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -25
  68. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -5
  69. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +223 -148
  70. data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
  71. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +131 -107
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +8 -8
  73. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +1 -1
  74. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -4
  75. data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -2
  76. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -6
  77. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -2
  78. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +9 -5
  79. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -4
  80. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +9 -2
  81. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -43
  82. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -3
  83. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +3 -8
  84. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
  85. data/src/core/ext/transport/chttp2/transport/http2_settings.h +1 -1
  86. data/src/core/ext/transport/chttp2/transport/internal.h +29 -19
  87. data/src/core/ext/transport/chttp2/transport/parsing.cc +15 -25
  88. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +0 -2
  89. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +0 -2
  90. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +29 -13
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +5 -4
  92. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -5
  93. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -25
  94. data/src/core/ext/transport/inproc/inproc_transport.cc +56 -32
  95. data/src/core/ext/transport/inproc/inproc_transport.h +1 -3
  96. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +13 -15
  97. data/src/core/ext/transport/inproc/legacy_inproc_transport.h +0 -2
  98. data/src/core/handshaker/handshaker.cc +6 -14
  99. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +9 -17
  100. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +3 -2
  101. data/src/core/handshaker/security/secure_endpoint.cc +38 -32
  102. data/src/core/handshaker/security/secure_endpoint.h +0 -2
  103. data/src/core/handshaker/security/security_handshaker.cc +25 -37
  104. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -1
  105. data/src/core/lib/address_utils/parse_address.cc +27 -39
  106. data/src/core/lib/address_utils/sockaddr_utils.cc +5 -6
  107. data/src/core/lib/avl/avl.h +1 -1
  108. data/src/core/lib/channel/channel_args.cc +13 -17
  109. data/src/core/lib/channel/channel_args.h +19 -8
  110. data/src/core/lib/channel/channel_stack.cc +5 -63
  111. data/src/core/lib/channel/channel_stack.h +13 -37
  112. data/src/core/lib/channel/channel_stack_builder.h +0 -5
  113. data/src/core/lib/channel/channel_stack_builder_impl.cc +0 -142
  114. data/src/core/lib/channel/channel_stack_builder_impl.h +0 -2
  115. data/src/core/lib/channel/connected_channel.cc +37 -676
  116. data/src/core/lib/channel/promise_based_filter.cc +41 -47
  117. data/src/core/lib/channel/promise_based_filter.h +124 -477
  118. data/src/core/lib/channel/status_util.cc +1 -1
  119. data/src/core/lib/compression/compression.cc +1 -1
  120. data/src/core/lib/compression/message_compress.cc +6 -6
  121. data/src/core/lib/config/config_vars.cc +3 -8
  122. data/src/core/lib/config/config_vars.h +1 -5
  123. data/src/core/lib/debug/event_log.h +1 -1
  124. data/src/core/lib/debug/trace.cc +43 -59
  125. data/src/core/lib/debug/trace.h +2 -97
  126. data/src/core/lib/debug/trace_flags.cc +255 -0
  127. data/src/core/lib/debug/trace_flags.h +133 -0
  128. data/src/core/lib/debug/trace_impl.h +115 -0
  129. data/src/core/lib/event_engine/ares_resolver.cc +5 -7
  130. data/src/core/lib/event_engine/ares_resolver.h +1 -3
  131. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
  132. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +17 -22
  133. data/src/core/lib/event_engine/event_engine.cc +29 -4
  134. data/src/core/lib/event_engine/extensions/supports_fd.h +7 -0
  135. data/src/core/lib/event_engine/extensions/tcp_trace.h +43 -0
  136. data/src/core/lib/event_engine/forkable.cc +4 -5
  137. data/src/core/lib/event_engine/forkable.h +0 -11
  138. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +10 -11
  139. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +4 -3
  140. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +1 -1
  141. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +19 -33
  142. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -2
  143. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +24 -7
  144. data/src/core/lib/event_engine/posix_engine/posix_engine.h +2 -0
  145. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +14 -16
  146. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +18 -22
  147. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +13 -17
  148. data/src/core/lib/event_engine/posix_engine/timer.cc +1 -1
  149. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -6
  150. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -1
  151. data/src/core/lib/event_engine/shim.cc +1 -1
  152. data/src/core/lib/event_engine/tcp_socket_utils.cc +6 -8
  153. data/src/core/lib/event_engine/thread_local.h +1 -1
  154. data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
  155. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +19 -21
  156. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -6
  157. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +14 -13
  158. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +4 -3
  159. data/src/core/lib/event_engine/trace.h +6 -17
  160. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  161. data/src/core/lib/event_engine/windows/win_socket.cc +23 -17
  162. data/src/core/lib/event_engine/windows/win_socket.h +4 -5
  163. data/src/core/lib/event_engine/windows/windows_endpoint.cc +6 -9
  164. data/src/core/lib/event_engine/windows/windows_engine.cc +201 -87
  165. data/src/core/lib/event_engine/windows/windows_engine.h +136 -25
  166. data/src/core/lib/event_engine/windows/windows_listener.cc +12 -23
  167. data/src/core/lib/experiments/experiments.cc +35 -151
  168. data/src/core/lib/experiments/experiments.h +12 -45
  169. data/src/core/lib/gprpp/bitset.h +1 -1
  170. data/src/core/lib/gprpp/crash.cc +2 -3
  171. data/src/core/lib/gprpp/dual_ref_counted.h +45 -33
  172. data/src/core/lib/gprpp/dump_args.cc +54 -0
  173. data/src/core/lib/gprpp/dump_args.h +69 -0
  174. data/src/core/lib/gprpp/glob.cc +70 -0
  175. data/src/core/lib/gprpp/glob.h +29 -0
  176. data/src/core/lib/gprpp/per_cpu.cc +1 -1
  177. data/src/core/lib/gprpp/posix/stat.cc +3 -4
  178. data/src/core/lib/gprpp/posix/thd.cc +8 -9
  179. data/src/core/lib/gprpp/ref_counted.h +30 -22
  180. data/src/core/lib/gprpp/single_set_ptr.h +5 -3
  181. data/src/core/lib/gprpp/status_helper.cc +11 -30
  182. data/src/core/lib/gprpp/status_helper.h +3 -31
  183. data/src/core/lib/gprpp/time.cc +3 -4
  184. data/src/core/lib/gprpp/time.h +3 -2
  185. data/src/core/lib/gprpp/unique_type_name.h +1 -1
  186. data/src/core/lib/gprpp/validation_errors.cc +10 -1
  187. data/src/core/lib/gprpp/validation_errors.h +11 -0
  188. data/src/core/lib/gprpp/windows/stat.cc +3 -4
  189. data/src/core/lib/gprpp/windows/thd.cc +3 -2
  190. data/src/core/lib/gprpp/work_serializer.cc +48 -57
  191. data/src/core/lib/iomgr/buffer_list.cc +4 -2
  192. data/src/core/lib/iomgr/call_combiner.cc +18 -27
  193. data/src/core/lib/iomgr/call_combiner.h +1 -3
  194. data/src/core/lib/iomgr/cfstream_handle.cc +4 -6
  195. data/src/core/lib/iomgr/closure.h +2 -4
  196. data/src/core/lib/iomgr/combiner.cc +6 -8
  197. data/src/core/lib/iomgr/combiner.h +0 -2
  198. data/src/core/lib/iomgr/endpoint.cc +0 -6
  199. data/src/core/lib/iomgr/endpoint.h +0 -2
  200. data/src/core/lib/iomgr/endpoint_cfstream.cc +19 -41
  201. data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
  202. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
  203. data/src/core/lib/iomgr/error.cc +13 -21
  204. data/src/core/lib/iomgr/error.h +1 -1
  205. data/src/core/lib/iomgr/ev_apple.cc +3 -5
  206. data/src/core/lib/iomgr/ev_epoll1_linux.cc +43 -42
  207. data/src/core/lib/iomgr/ev_poll_posix.cc +38 -29
  208. data/src/core/lib/iomgr/ev_posix.cc +8 -9
  209. data/src/core/lib/iomgr/ev_posix.h +10 -7
  210. data/src/core/lib/iomgr/event_engine_shims/closure.cc +2 -2
  211. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +14 -28
  212. data/src/core/lib/iomgr/exec_ctx.cc +2 -2
  213. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  214. data/src/core/lib/iomgr/executor.cc +6 -15
  215. data/src/core/lib/iomgr/executor.h +1 -1
  216. data/src/core/lib/iomgr/fork_posix.cc +8 -10
  217. data/src/core/lib/iomgr/fork_windows.cc +3 -1
  218. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -3
  219. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +3 -5
  220. data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
  221. data/src/core/lib/iomgr/iocp_windows.cc +4 -3
  222. data/src/core/lib/iomgr/iomgr.cc +13 -17
  223. data/src/core/lib/iomgr/lockfree_event.cc +3 -5
  224. data/src/core/lib/iomgr/pollset.h +0 -2
  225. data/src/core/lib/iomgr/pollset_windows.cc +0 -2
  226. data/src/core/lib/iomgr/resolve_address_posix.cc +7 -14
  227. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  228. data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
  229. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  230. data/src/core/lib/iomgr/socket_utils_common_posix.cc +11 -17
  231. data/src/core/lib/iomgr/socket_windows.cc +4 -6
  232. data/src/core/lib/iomgr/tcp_client_cfstream.cc +3 -5
  233. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -15
  234. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -4
  235. data/src/core/lib/iomgr/tcp_posix.cc +57 -84
  236. data/src/core/lib/iomgr/tcp_posix.h +0 -2
  237. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -3
  238. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +4 -6
  239. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -7
  240. data/src/core/lib/iomgr/tcp_server_windows.cc +10 -16
  241. data/src/core/lib/iomgr/tcp_windows.cc +25 -41
  242. data/src/core/lib/iomgr/timer_generic.cc +17 -20
  243. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  244. data/src/core/lib/iomgr/timer_manager.cc +17 -30
  245. data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
  246. data/src/core/lib/iomgr/vsock.cc +1 -1
  247. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +3 -3
  248. data/src/core/lib/promise/activity.h +27 -4
  249. data/src/core/lib/promise/cancel_callback.h +24 -0
  250. data/src/core/lib/promise/context.h +11 -0
  251. data/src/core/lib/promise/detail/basic_seq.h +1 -2
  252. data/src/core/lib/promise/detail/join_state.h +354 -398
  253. data/src/core/lib/promise/detail/promise_like.h +6 -5
  254. data/src/core/lib/promise/detail/seq_state.h +1178 -1178
  255. data/src/core/lib/promise/for_each.h +6 -6
  256. data/src/core/lib/promise/interceptor_list.h +6 -7
  257. data/src/core/lib/promise/latch.h +9 -9
  258. data/src/core/lib/promise/map.h +17 -0
  259. data/src/core/lib/promise/observable.h +182 -0
  260. data/src/core/lib/promise/party.cc +7 -8
  261. data/src/core/lib/promise/party.h +10 -8
  262. data/src/core/lib/promise/pipe.h +16 -35
  263. data/src/core/lib/promise/promise.h +1 -0
  264. data/src/core/lib/promise/status_flag.h +2 -0
  265. data/src/core/lib/resource_quota/arena.cc +56 -79
  266. data/src/core/lib/resource_quota/arena.h +118 -209
  267. data/src/core/lib/resource_quota/memory_quota.cc +12 -13
  268. data/src/core/lib/resource_quota/memory_quota.h +2 -3
  269. data/src/core/lib/resource_quota/periodic_update.cc +1 -1
  270. data/src/core/lib/resource_quota/resource_quota.h +1 -1
  271. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  272. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  273. data/src/core/lib/security/authorization/evaluate_args.cc +6 -8
  274. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +5 -6
  275. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -0
  276. data/src/core/lib/security/authorization/matchers.cc +3 -3
  277. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +2 -2
  278. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +2 -3
  279. data/src/core/lib/security/context/security_context.cc +12 -13
  280. data/src/core/lib/security/context/security_context.h +31 -8
  281. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  282. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +3 -1
  283. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -3
  284. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +5 -5
  285. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +3 -3
  286. data/src/core/lib/security/credentials/call_creds_util.cc +2 -1
  287. data/src/core/lib/security/credentials/channel_creds_registry.h +2 -2
  288. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +5 -3
  289. data/src/core/lib/security/credentials/composite/composite_credentials.h +1 -1
  290. data/src/core/lib/security/credentials/credentials.cc +6 -6
  291. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -4
  292. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +2 -2
  293. data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -11
  294. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
  295. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +2 -2
  296. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -4
  297. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -1
  298. data/src/core/lib/security/credentials/fake/fake_credentials.h +1 -1
  299. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
  300. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +11 -11
  301. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -1
  302. data/src/core/lib/security/credentials/iam/iam_credentials.h +1 -1
  303. data/src/core/lib/security/credentials/jwt/json_token.cc +14 -15
  304. data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
  305. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +6 -5
  306. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -1
  307. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +50 -54
  308. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
  309. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  310. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +12 -11
  311. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  312. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
  313. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -3
  314. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +15 -21
  315. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  316. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +21 -30
  317. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +1 -1
  318. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +1 -1
  319. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -4
  320. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +3 -5
  321. data/src/core/lib/security/credentials/tls/tls_credentials.cc +14 -16
  322. data/src/core/lib/security/credentials/tls/tls_utils.cc +4 -4
  323. data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -1
  324. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -16
  325. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +15 -12
  326. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +6 -6
  327. data/src/core/lib/security/security_connector/load_system_roots_windows.cc +1 -1
  328. data/src/core/lib/security/security_connector/local/local_security_connector.cc +8 -12
  329. data/src/core/lib/security/security_connector/security_connector.cc +1 -4
  330. data/src/core/lib/security/security_connector/security_connector.h +1 -3
  331. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +17 -19
  332. data/src/core/lib/security/security_connector/ssl_utils.cc +19 -21
  333. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +29 -40
  334. data/src/core/lib/security/transport/auth_filters.h +1 -0
  335. data/src/core/lib/security/transport/client_auth_filter.cc +7 -13
  336. data/src/core/lib/security/transport/server_auth_filter.cc +3 -8
  337. data/src/core/lib/security/util/json_util.h +1 -1
  338. data/src/core/lib/slice/slice.h +1 -1
  339. data/src/core/lib/slice/slice_refcount.h +2 -4
  340. data/src/core/lib/slice/slice_string_helpers.cc +1 -1
  341. data/src/core/lib/surface/api_trace.h +1 -3
  342. data/src/core/lib/surface/call.cc +64 -3738
  343. data/src/core/lib/surface/call.h +41 -143
  344. data/src/core/lib/surface/call_log_batch.cc +1 -1
  345. data/src/core/lib/surface/call_utils.cc +276 -0
  346. data/src/core/lib/surface/call_utils.h +449 -0
  347. data/src/core/lib/surface/channel.cc +8 -3
  348. data/src/core/lib/surface/channel.h +10 -7
  349. data/src/core/lib/surface/channel_create.cc +14 -6
  350. data/src/core/lib/surface/channel_create.h +3 -2
  351. data/src/core/lib/surface/channel_init.cc +21 -77
  352. data/src/core/lib/surface/channel_init.h +19 -97
  353. data/src/core/lib/surface/client_call.cc +419 -0
  354. data/src/core/lib/surface/client_call.h +180 -0
  355. data/src/core/lib/surface/completion_queue.cc +28 -33
  356. data/src/core/lib/surface/completion_queue.h +0 -8
  357. data/src/core/lib/surface/filter_stack_call.cc +1157 -0
  358. data/src/core/lib/surface/filter_stack_call.h +369 -0
  359. data/src/core/lib/surface/init.cc +7 -6
  360. data/src/core/lib/surface/lame_client.cc +1 -1
  361. data/src/core/lib/surface/legacy_channel.cc +40 -27
  362. data/src/core/lib/surface/legacy_channel.h +9 -18
  363. data/src/core/lib/surface/server_call.cc +222 -0
  364. data/src/core/lib/surface/server_call.h +167 -0
  365. data/src/core/lib/surface/version.cc +2 -2
  366. data/src/core/lib/transport/bdp_estimator.cc +3 -5
  367. data/src/core/lib/transport/bdp_estimator.h +2 -4
  368. data/src/core/lib/transport/call_arena_allocator.h +9 -7
  369. data/src/core/lib/transport/call_destination.h +76 -0
  370. data/src/core/lib/transport/call_filters.cc +28 -10
  371. data/src/core/lib/transport/call_filters.h +128 -22
  372. data/src/core/lib/transport/call_spine.cc +5 -6
  373. data/src/core/lib/transport/call_spine.h +159 -334
  374. data/src/core/lib/transport/connectivity_state.cc +8 -10
  375. data/src/core/lib/transport/connectivity_state.h +0 -2
  376. data/src/core/lib/transport/interception_chain.cc +155 -0
  377. data/src/core/lib/transport/interception_chain.h +236 -0
  378. data/src/core/lib/transport/metadata_batch.h +10 -1
  379. data/src/core/lib/transport/metadata_info.h +1 -1
  380. data/src/core/lib/transport/transport.cc +3 -6
  381. data/src/core/lib/transport/transport.h +43 -40
  382. data/src/core/load_balancing/child_policy_handler.cc +8 -8
  383. data/src/core/load_balancing/endpoint_list.cc +5 -5
  384. data/src/core/load_balancing/endpoint_list.h +1 -1
  385. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +1 -0
  386. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -0
  387. data/src/core/load_balancing/grpclb/grpclb.cc +25 -29
  388. data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.cc +1 -1
  389. data/src/core/load_balancing/grpclb/load_balancer_api.cc +3 -4
  390. data/src/core/load_balancing/health_check_client.cc +10 -13
  391. data/src/core/load_balancing/lb_policy.cc +5 -8
  392. data/src/core/load_balancing/lb_policy.h +19 -3
  393. data/src/core/load_balancing/lb_policy_factory.h +1 -1
  394. data/src/core/load_balancing/lb_policy_registry.cc +2 -3
  395. data/src/core/load_balancing/lb_policy_registry.h +1 -1
  396. data/src/core/load_balancing/oob_backend_metric.cc +2 -4
  397. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +33 -35
  398. data/src/core/load_balancing/outlier_detection/outlier_detection.h +3 -3
  399. data/src/core/load_balancing/pick_first/pick_first.cc +65 -65
  400. data/src/core/load_balancing/priority/priority.cc +26 -28
  401. data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -13
  402. data/src/core/load_balancing/ring_hash/ring_hash.h +3 -3
  403. data/src/core/load_balancing/rls/rls.cc +82 -82
  404. data/src/core/load_balancing/round_robin/round_robin.cc +17 -20
  405. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +54 -43
  406. data/src/core/load_balancing/weighted_target/weighted_target.cc +21 -24
  407. data/src/core/load_balancing/xds/cds.cc +14 -16
  408. data/src/core/load_balancing/xds/xds_cluster_impl.cc +16 -18
  409. data/src/core/load_balancing/xds/xds_cluster_manager.cc +15 -17
  410. data/src/core/load_balancing/xds/xds_override_host.cc +40 -41
  411. data/src/core/load_balancing/xds/xds_override_host.h +3 -3
  412. data/src/core/load_balancing/xds/xds_wrr_locality.cc +10 -12
  413. data/src/core/plugin_registry/grpc_plugin_registry.cc +5 -1
  414. data/src/core/resolver/binder/binder_resolver.cc +3 -2
  415. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +3 -2
  416. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  417. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +7 -14
  418. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -5
  419. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  420. data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -5
  421. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +4 -9
  422. data/src/core/resolver/dns/event_engine/service_config_helper.cc +5 -5
  423. data/src/core/resolver/dns/native/dns_resolver.cc +8 -9
  424. data/src/core/resolver/endpoint_addresses.cc +1 -1
  425. data/src/core/resolver/fake/fake_resolver.cc +1 -1
  426. data/src/core/resolver/fake/fake_resolver.h +1 -1
  427. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +13 -14
  428. data/src/core/resolver/polling_resolver.cc +30 -35
  429. data/src/core/resolver/resolver.cc +2 -6
  430. data/src/core/resolver/resolver.h +0 -2
  431. data/src/core/resolver/resolver_registry.cc +6 -8
  432. data/src/core/resolver/sockaddr/sockaddr_resolver.cc +3 -3
  433. data/src/core/resolver/xds/xds_dependency_manager.cc +22 -23
  434. data/src/core/resolver/xds/xds_resolver.cc +13 -15
  435. data/src/core/server/server.cc +269 -389
  436. data/src/core/server/server.h +37 -19
  437. data/src/core/server/server_call_tracer_filter.cc +7 -14
  438. data/src/core/server/server_config_selector.h +1 -1
  439. data/src/core/server/server_config_selector_filter.cc +3 -3
  440. data/src/core/server/server_interface.h +2 -0
  441. data/src/core/server/xds_channel_stack_modifier.cc +1 -1
  442. data/src/core/server/xds_channel_stack_modifier.h +1 -1
  443. data/src/core/server/xds_server_config_fetcher.cc +1 -4
  444. data/src/core/service_config/service_config.h +1 -1
  445. data/src/core/service_config/service_config_call_data.h +13 -11
  446. data/src/core/service_config/service_config_channel_arg_filter.cc +6 -4
  447. data/src/core/service_config/service_config_impl.cc +5 -5
  448. data/src/core/service_config/service_config_impl.h +1 -1
  449. data/src/core/service_config/service_config_parser.cc +3 -6
  450. data/src/core/service_config/service_config_parser.h +1 -1
  451. data/src/core/{lib/channel → telemetry}/call_tracer.cc +20 -30
  452. data/src/core/{lib/channel → telemetry}/call_tracer.h +32 -9
  453. data/src/core/{lib/debug → telemetry}/histogram_view.cc +1 -1
  454. data/src/core/{lib/debug → telemetry}/histogram_view.h +3 -3
  455. data/src/core/telemetry/metrics.cc +178 -0
  456. data/src/core/telemetry/metrics.h +562 -0
  457. data/src/core/{lib/debug → telemetry}/stats.cc +1 -1
  458. data/src/core/{lib/debug → telemetry}/stats.h +5 -5
  459. data/src/core/{lib/debug → telemetry}/stats_data.cc +1 -1
  460. data/src/core/{lib/debug → telemetry}/stats_data.h +4 -4
  461. data/src/core/{lib/channel → telemetry}/tcp_tracer.h +3 -3
  462. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +12 -13
  463. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +25 -27
  464. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -33
  465. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  466. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -1
  467. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +5 -4
  468. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +5 -3
  469. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  470. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -3
  471. data/src/core/tsi/fake_transport_security.cc +14 -17
  472. data/src/core/tsi/local_transport_security.cc +6 -5
  473. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +4 -4
  474. data/src/core/tsi/ssl_transport_security.cc +76 -81
  475. data/src/core/tsi/ssl_transport_security_utils.cc +74 -18
  476. data/src/core/tsi/ssl_transport_security_utils.h +11 -0
  477. data/src/core/tsi/transport_security.cc +0 -4
  478. data/src/core/tsi/transport_security.h +0 -2
  479. data/src/core/tsi/transport_security_interface.h +0 -4
  480. data/src/core/{lib/gpr → util}/alloc.h +3 -3
  481. data/src/core/{lib/gpr → util}/android/log.cc +0 -19
  482. data/src/core/{lib/gpr → util}/atm.cc +1 -1
  483. data/src/core/{ext/gcp/metadata_query.cc → util/gcp_metadata_query.cc} +25 -26
  484. data/src/core/{ext/gcp/metadata_query.h → util/gcp_metadata_query.h} +11 -11
  485. data/src/core/{lib/http → util/http_client}/format_request.cc +4 -3
  486. data/src/core/{lib/http → util/http_client}/format_request.h +6 -5
  487. data/src/core/{lib/http → util/http_client}/httpcli.cc +9 -10
  488. data/src/core/{lib/http → util/http_client}/httpcli.h +6 -5
  489. data/src/core/{lib/http → util/http_client}/httpcli_security_connector.cc +9 -9
  490. data/src/core/{lib/http → util/http_client}/httpcli_ssl_credentials.h +5 -4
  491. data/src/core/{lib/http → util/http_client}/parser.cc +4 -5
  492. data/src/core/{lib/http → util/http_client}/parser.h +5 -6
  493. data/src/core/{lib → util}/json/json.h +5 -4
  494. data/src/core/{lib → util}/json/json_args.h +5 -5
  495. data/src/core/{lib → util}/json/json_channel_args.h +6 -6
  496. data/src/core/{lib → util}/json/json_object_loader.cc +3 -2
  497. data/src/core/{lib → util}/json/json_object_loader.h +7 -7
  498. data/src/core/{lib → util}/json/json_reader.cc +3 -2
  499. data/src/core/{lib → util}/json/json_reader.h +6 -6
  500. data/src/core/{lib → util}/json/json_util.cc +4 -4
  501. data/src/core/{lib → util}/json/json_util.h +6 -6
  502. data/src/core/{lib → util}/json/json_writer.cc +3 -3
  503. data/src/core/{lib → util}/json/json_writer.h +6 -6
  504. data/src/core/{lib/gpr → util}/linux/log.cc +0 -45
  505. data/src/core/util/log.cc +165 -0
  506. data/src/core/{lib/gpr → util}/msys/tmpfile.cc +2 -2
  507. data/src/core/{lib/gpr → util}/posix/cpu.cc +1 -1
  508. data/src/core/{lib/gpr → util}/posix/log.cc +0 -42
  509. data/src/core/{lib/gpr → util}/posix/time.cc +1 -1
  510. data/src/core/{lib/gpr → util}/posix/tmpfile.cc +2 -2
  511. data/src/core/{lib/gpr → util}/spinlock.h +3 -3
  512. data/src/core/{lib/gpr → util}/string.cc +2 -2
  513. data/src/core/{lib/gpr → util}/string.h +3 -3
  514. data/src/core/{lib/gpr → util}/time_precise.cc +1 -1
  515. data/src/core/{lib/gpr → util}/time_precise.h +3 -3
  516. data/src/core/{lib/gpr → util}/tmpfile.h +3 -3
  517. data/src/core/{lib/gpr → util}/useful.h +3 -3
  518. data/src/core/{lib/gpr → util}/windows/log.cc +1 -44
  519. data/src/core/{lib/gpr → util}/windows/string.cc +1 -1
  520. data/src/core/{lib/gpr → util}/windows/string_util.cc +1 -1
  521. data/src/core/{lib/gpr → util}/windows/time.cc +1 -1
  522. data/src/core/{lib/gpr → util}/windows/tmpfile.cc +1 -1
  523. data/src/core/xds/grpc/certificate_provider_store.cc +3 -3
  524. data/src/core/xds/grpc/certificate_provider_store.h +4 -4
  525. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
  526. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +3 -3
  527. data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
  528. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +5 -5
  529. data/src/core/xds/grpc/xds_bootstrap_grpc.h +3 -3
  530. data/src/core/xds/grpc/xds_certificate_provider.h +1 -1
  531. data/src/core/xds/grpc/xds_client_grpc.cc +27 -23
  532. data/src/core/xds/grpc/xds_client_grpc.h +2 -2
  533. data/src/core/xds/grpc/xds_cluster.cc +4 -5
  534. data/src/core/xds/grpc/xds_cluster.h +1 -1
  535. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  536. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
  537. data/src/core/xds/grpc/xds_common_types.cc +1 -1
  538. data/src/core/xds/grpc/xds_common_types.h +1 -1
  539. data/src/core/xds/grpc/xds_endpoint.cc +4 -5
  540. data/src/core/xds/grpc/xds_http_fault_filter.cc +2 -2
  541. data/src/core/xds/grpc/xds_http_filters.h +2 -2
  542. data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -3
  543. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +2 -2
  544. data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
  545. data/src/core/xds/grpc/xds_listener.cc +4 -6
  546. data/src/core/xds/grpc/xds_route_config.cc +7 -8
  547. data/src/core/xds/grpc/xds_transport_grpc.cc +2 -2
  548. data/src/core/xds/grpc/xds_transport_grpc.h +1 -1
  549. data/src/core/xds/xds_client/xds_api.cc +5 -9
  550. data/src/core/xds/xds_client/xds_bootstrap.cc +1 -1
  551. data/src/core/xds/xds_client/xds_bootstrap.h +1 -1
  552. data/src/core/xds/xds_client/xds_client.cc +39 -45
  553. data/src/core/xds/xds_client/xds_client.h +0 -3
  554. data/src/core/xds/xds_client/xds_client_stats.cc +6 -6
  555. data/src/core/xds/xds_client/xds_client_stats.h +2 -2
  556. data/src/ruby/bin/math_pb.rb +1 -22
  557. data/src/ruby/ext/grpc/rb_call.c +8 -1
  558. data/src/ruby/ext/grpc/rb_completion_queue.c +15 -32
  559. data/src/ruby/ext/grpc/rb_completion_queue.h +7 -1
  560. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
  561. data/src/ruby/ext/grpc/rb_server.c +39 -22
  562. data/src/ruby/lib/grpc/version.rb +1 -1
  563. data/src/ruby/pb/grpc/health/v1/health_pb.rb +1 -22
  564. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +5 -5
  565. data/src/ruby/pb/grpc/testing/metrics_pb.rb +10 -19
  566. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +5 -5
  567. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -22
  568. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -22
  569. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -22
  570. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +4 -0
  571. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +12 -12
  572. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +66 -41
  573. data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +1497 -0
  574. data/third_party/boringssl-with-bazel/src/crypto/dilithium/internal.h +58 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -3
  576. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +0 -2
  577. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +2 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +5 -0
  579. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +45 -1
  580. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +33 -23
  581. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +3 -6
  582. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +9 -4
  583. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +6 -0
  584. data/third_party/boringssl-with-bazel/src/crypto/internal.h +7 -0
  585. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +0 -4
  586. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_utl.c +49 -16
  587. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -10
  588. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +7 -17
  589. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +8 -6
  590. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +3 -0
  591. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +125 -0
  592. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +0 -23
  593. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +1 -1
  594. data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -10
  595. metadata +103 -93
  596. data/src/core/ext/transport/chttp2/transport/http_trace.cc +0 -19
  597. data/src/core/ext/transport/chttp2/transport/http_trace.h +0 -24
  598. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -23
  599. data/src/core/handshaker/security/tsi_error.cc +0 -31
  600. data/src/core/handshaker/security/tsi_error.h +0 -30
  601. data/src/core/lib/channel/channel_stack_trace.cc +0 -19
  602. data/src/core/lib/channel/channel_stack_trace.h +0 -24
  603. data/src/core/lib/channel/context.h +0 -105
  604. data/src/core/lib/channel/metrics.cc +0 -334
  605. data/src/core/lib/channel/metrics.h +0 -365
  606. data/src/core/lib/event_engine/trace.cc +0 -25
  607. data/src/core/lib/gpr/log.cc +0 -166
  608. data/src/core/lib/iomgr/ev_windows.cc +0 -30
  609. data/src/core/lib/promise/trace.cc +0 -20
  610. data/src/core/lib/promise/trace.h +0 -24
  611. data/src/core/lib/resource_quota/trace.cc +0 -19
  612. data/src/core/lib/resource_quota/trace.h +0 -24
  613. data/src/core/lib/slice/slice_refcount.cc +0 -20
  614. data/src/core/lib/surface/api_trace.cc +0 -25
  615. data/src/core/lib/surface/call_trace.h +0 -24
  616. data/src/core/lib/surface/wait_for_cq_end_op.cc +0 -75
  617. data/src/core/lib/surface/wait_for_cq_end_op.h +0 -72
  618. data/src/core/lib/transport/batch_builder.cc +0 -172
  619. data/src/core/lib/transport/batch_builder.h +0 -474
  620. data/src/core/resolver/xds/xds_resolver_trace.cc +0 -25
  621. data/src/core/resolver/xds/xds_resolver_trace.h +0 -30
  622. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -122
  623. /data/src/core/{lib/gpr → util}/alloc.cc +0 -0
  624. /data/src/core/{lib/gpr → util}/iphone/cpu.cc +0 -0
  625. /data/src/core/{lib/gpr → util}/linux/cpu.cc +0 -0
  626. /data/src/core/{lib/gpr → util}/posix/string.cc +0 -0
  627. /data/src/core/{lib/gpr → util}/posix/sync.cc +0 -0
  628. /data/src/core/{lib/gpr → util}/sync.cc +0 -0
  629. /data/src/core/{lib/gpr → util}/sync_abseil.cc +0 -0
  630. /data/src/core/{lib/gpr → util}/time.cc +0 -0
  631. /data/src/core/{lib/gpr → util}/windows/cpu.cc +0 -0
  632. /data/src/core/{lib/gpr → util}/windows/sync.cc +0 -0
@@ -0,0 +1,562 @@
1
+ // Copyright 2024 The gRPC Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_SRC_CORE_TELEMETRY_METRICS_H
16
+ #define GRPC_SRC_CORE_TELEMETRY_METRICS_H
17
+
18
+ #include <cstdint>
19
+ #include <memory>
20
+ #include <type_traits>
21
+ #include <vector>
22
+
23
+ #include "absl/functional/any_invocable.h"
24
+ #include "absl/functional/function_ref.h"
25
+ #include "absl/strings/string_view.h"
26
+ #include "absl/types/span.h"
27
+
28
+ #include <grpc/support/log.h>
29
+ #include <grpc/support/metrics.h>
30
+ #include <grpc/support/port_platform.h>
31
+
32
+ #include "src/core/lib/channel/channel_args.h"
33
+ #include "src/core/lib/gprpp/no_destruct.h"
34
+ #include "src/core/lib/gprpp/sync.h"
35
+ #include "src/core/lib/gprpp/time.h"
36
+ #include "src/core/lib/slice/slice.h"
37
+ #include "src/core/telemetry/call_tracer.h"
38
+
39
+ namespace grpc_core {
40
+
41
+ constexpr absl::string_view kMetricLabelTarget = "grpc.target";
42
+
43
+ // A global registry of instruments(metrics). This API is designed to be used
44
+ // to register instruments (Counter, Histogram, and Gauge) as part of program
45
+ // startup, before the execution of the main function (during dynamic
46
+ // initialization time). Using this API after the main function begins may
47
+ // result into missing instruments. This API is thread-unsafe.
48
+ //
49
+ // The registration of instruments is done through the templated
50
+ // RegistrationBuilder API and gets back a handle with an opaque type. At
51
+ // runtime, the handle should be used with the StatsPluginGroup API to record
52
+ // metrics for the instruments.
53
+ //
54
+ // At dynamic initialization time:
55
+ // const auto kMetricHandle =
56
+ // GlobalInstrumentsRegistry::RegisterUInt64Counter(
57
+ // "name",
58
+ // "description",
59
+ // "unit", /*enable_by_default=*/false)
60
+ // .Labels(kLabel1, kLabel2, kLabel3)
61
+ // .OptionalLabels(kOptionalLabel1, kOptionalLabel2)
62
+ // .Build();
63
+ //
64
+ // At runtime time:
65
+ // stats_plugin_group.AddCounter(kMetricHandle, 1,
66
+ // {"label_value_1", "label_value_2", "label_value_3"},
67
+ // {"optional_label_value_1", "optional_label_value_2"});
68
+ //
69
+ class GlobalInstrumentsRegistry {
70
+ public:
71
+ enum class ValueType {
72
+ kUndefined,
73
+ kInt64,
74
+ kUInt64,
75
+ kDouble,
76
+ };
77
+ enum class InstrumentType {
78
+ kUndefined,
79
+ kCounter,
80
+ kHistogram,
81
+ kCallbackGauge,
82
+ };
83
+ using InstrumentID = uint32_t;
84
+ struct GlobalInstrumentDescriptor {
85
+ ValueType value_type;
86
+ InstrumentType instrument_type;
87
+ InstrumentID index;
88
+ bool enable_by_default;
89
+ absl::string_view name;
90
+ absl::string_view description;
91
+ absl::string_view unit;
92
+ std::vector<absl::string_view> label_keys;
93
+ std::vector<absl::string_view> optional_label_keys;
94
+ };
95
+ struct GlobalInstrumentHandle {
96
+ // This is the index for the corresponding registered instrument that
97
+ // StatsPlugins can use to uniquely identify an instrument in the current
98
+ // process. Though this is not guaranteed to be stable between different
99
+ // runs or between different versions.
100
+ InstrumentID index;
101
+ };
102
+
103
+ template <ValueType V, InstrumentType I, size_t M, size_t N>
104
+ struct TypedGlobalInstrumentHandle : public GlobalInstrumentHandle {};
105
+
106
+ template <ValueType V, InstrumentType I, std::size_t M, std::size_t N>
107
+ class RegistrationBuilder {
108
+ public:
109
+ template <typename... Args>
110
+ RegistrationBuilder<V, I, sizeof...(Args), N> Labels(Args&&... args) {
111
+ return RegistrationBuilder<V, I, sizeof...(Args), N>(
112
+ name_, description_, unit_, enable_by_default_,
113
+ std::array<absl::string_view, sizeof...(Args)>({args...}),
114
+ optional_label_keys_);
115
+ }
116
+
117
+ template <typename... Args>
118
+ RegistrationBuilder<V, I, M, sizeof...(Args)> OptionalLabels(
119
+ Args&&... args) {
120
+ return RegistrationBuilder<V, I, M, sizeof...(Args)>(
121
+ name_, description_, unit_, enable_by_default_, label_keys_,
122
+ std::array<absl::string_view, sizeof...(Args)>({args...}));
123
+ }
124
+
125
+ TypedGlobalInstrumentHandle<V, I, M, N> Build() {
126
+ TypedGlobalInstrumentHandle<V, I, M, N> handle;
127
+ handle.index = RegisterInstrument(V, I, name_, description_, unit_,
128
+ enable_by_default_, label_keys_,
129
+ optional_label_keys_);
130
+ return handle;
131
+ }
132
+
133
+ private:
134
+ friend class GlobalInstrumentsRegistry;
135
+
136
+ RegistrationBuilder(absl::string_view name, absl::string_view description,
137
+ absl::string_view unit, bool enable_by_default)
138
+ : name_(name),
139
+ description_(description),
140
+ unit_(unit),
141
+ enable_by_default_(enable_by_default) {}
142
+
143
+ RegistrationBuilder(absl::string_view name, absl::string_view description,
144
+ absl::string_view unit, bool enable_by_default,
145
+ std::array<absl::string_view, M> label_keys,
146
+ std::array<absl::string_view, N> optional_label_keys)
147
+ : name_(name),
148
+ description_(description),
149
+ unit_(unit),
150
+ enable_by_default_(enable_by_default),
151
+ label_keys_(std::move(label_keys)),
152
+ optional_label_keys_(std::move(optional_label_keys)) {}
153
+
154
+ absl::string_view name_;
155
+ absl::string_view description_;
156
+ absl::string_view unit_;
157
+ bool enable_by_default_;
158
+ std::array<absl::string_view, M> label_keys_;
159
+ std::array<absl::string_view, N> optional_label_keys_;
160
+ };
161
+
162
+ // Creates instrument in the GlobalInstrumentsRegistry.
163
+ static RegistrationBuilder<ValueType::kUInt64, InstrumentType::kCounter, 0, 0>
164
+ RegisterUInt64Counter(absl::string_view name, absl::string_view description,
165
+ absl::string_view unit, bool enable_by_default) {
166
+ return RegistrationBuilder<ValueType::kUInt64, InstrumentType::kCounter, 0,
167
+ 0>(name, description, unit, enable_by_default);
168
+ }
169
+ static RegistrationBuilder<ValueType::kDouble, InstrumentType::kCounter, 0, 0>
170
+ RegisterDoubleCounter(absl::string_view name, absl::string_view description,
171
+ absl::string_view unit, bool enable_by_default) {
172
+ return RegistrationBuilder<ValueType::kDouble, InstrumentType::kCounter, 0,
173
+ 0>(name, description, unit, enable_by_default);
174
+ }
175
+ static RegistrationBuilder<ValueType::kUInt64, InstrumentType::kHistogram, 0,
176
+ 0>
177
+ RegisterUInt64Histogram(absl::string_view name, absl::string_view description,
178
+ absl::string_view unit, bool enable_by_default) {
179
+ return RegistrationBuilder<ValueType::kUInt64, InstrumentType::kHistogram,
180
+ 0, 0>(name, description, unit,
181
+ enable_by_default);
182
+ }
183
+ static RegistrationBuilder<ValueType::kDouble, InstrumentType::kHistogram, 0,
184
+ 0>
185
+ RegisterDoubleHistogram(absl::string_view name, absl::string_view description,
186
+ absl::string_view unit, bool enable_by_default) {
187
+ return RegistrationBuilder<ValueType::kDouble, InstrumentType::kHistogram,
188
+ 0, 0>(name, description, unit,
189
+ enable_by_default);
190
+ }
191
+ static RegistrationBuilder<ValueType::kInt64, InstrumentType::kCallbackGauge,
192
+ 0, 0>
193
+ RegisterCallbackInt64Gauge(absl::string_view name,
194
+ absl::string_view description,
195
+ absl::string_view unit, bool enable_by_default) {
196
+ return RegistrationBuilder<ValueType::kInt64,
197
+ InstrumentType::kCallbackGauge, 0, 0>(
198
+ name, description, unit, enable_by_default);
199
+ }
200
+ static RegistrationBuilder<ValueType::kDouble, InstrumentType::kCallbackGauge,
201
+ 0, 0>
202
+ RegisterCallbackDoubleGauge(absl::string_view name,
203
+ absl::string_view description,
204
+ absl::string_view unit, bool enable_by_default) {
205
+ return RegistrationBuilder<ValueType::kDouble,
206
+ InstrumentType::kCallbackGauge, 0, 0>(
207
+ name, description, unit, enable_by_default);
208
+ }
209
+
210
+ static void ForEach(
211
+ absl::FunctionRef<void(const GlobalInstrumentDescriptor&)> f);
212
+ static const GlobalInstrumentDescriptor& GetInstrumentDescriptor(
213
+ GlobalInstrumentHandle handle);
214
+ static absl::optional<GlobalInstrumentsRegistry::GlobalInstrumentHandle>
215
+ FindInstrumentByName(absl::string_view name);
216
+
217
+ private:
218
+ friend class GlobalInstrumentsRegistryTestPeer;
219
+
220
+ GlobalInstrumentsRegistry() = delete;
221
+
222
+ static std::vector<GlobalInstrumentsRegistry::GlobalInstrumentDescriptor>&
223
+ GetInstrumentList();
224
+ static InstrumentID RegisterInstrument(
225
+ ValueType value_type, InstrumentType instrument_type,
226
+ absl::string_view name, absl::string_view description,
227
+ absl::string_view unit, bool enable_by_default,
228
+ absl::Span<const absl::string_view> label_keys,
229
+ absl::Span<const absl::string_view> optional_label_keys);
230
+ };
231
+
232
+ // An interface for implementing callback-style metrics.
233
+ // To be implemented by stats plugins.
234
+ class CallbackMetricReporter {
235
+ public:
236
+ virtual ~CallbackMetricReporter() = default;
237
+
238
+ template <std::size_t M, std::size_t N>
239
+ void Report(
240
+ GlobalInstrumentsRegistry::TypedGlobalInstrumentHandle<
241
+ GlobalInstrumentsRegistry::ValueType::kInt64,
242
+ GlobalInstrumentsRegistry::InstrumentType::kCallbackGauge, M, N>
243
+ handle,
244
+ int64_t value, std::array<absl::string_view, M> label_values,
245
+ std::array<absl::string_view, N> optional_values) {
246
+ ReportInt64(handle, value, label_values, optional_values);
247
+ }
248
+ template <std::size_t M, std::size_t N>
249
+ void Report(
250
+ GlobalInstrumentsRegistry::TypedGlobalInstrumentHandle<
251
+ GlobalInstrumentsRegistry::ValueType::kDouble,
252
+ GlobalInstrumentsRegistry::InstrumentType::kCallbackGauge, M, N>
253
+ handle,
254
+ double value, std::array<absl::string_view, M> label_values,
255
+ std::array<absl::string_view, N> optional_values) {
256
+ ReportDouble(handle, value, label_values, optional_values);
257
+ }
258
+
259
+ private:
260
+ virtual void ReportInt64(
261
+ GlobalInstrumentsRegistry::GlobalInstrumentHandle handle, int64_t value,
262
+ absl::Span<const absl::string_view> label_values,
263
+ absl::Span<const absl::string_view> optional_values) = 0;
264
+ virtual void ReportDouble(
265
+ GlobalInstrumentsRegistry::GlobalInstrumentHandle handle, double value,
266
+ absl::Span<const absl::string_view> label_values,
267
+ absl::Span<const absl::string_view> optional_values) = 0;
268
+ };
269
+
270
+ class RegisteredMetricCallback;
271
+
272
+ // The StatsPlugin interface.
273
+ class StatsPlugin {
274
+ public:
275
+ // A general-purpose way for stats plugin to store per-channel or per-server
276
+ // state.
277
+ class ScopeConfig {
278
+ public:
279
+ virtual ~ScopeConfig() = default;
280
+ };
281
+
282
+ virtual ~StatsPlugin() = default;
283
+
284
+ // Whether this stats plugin is enabled for the channel specified by \a scope.
285
+ // Returns true and a channel-specific ScopeConfig which may then be used to
286
+ // configure the ClientCallTracer in GetClientCallTracer().
287
+ virtual std::pair<bool, std::shared_ptr<ScopeConfig>> IsEnabledForChannel(
288
+ const experimental::StatsPluginChannelScope& scope) const = 0;
289
+ // Whether this stats plugin is enabled for the server specified by \a args.
290
+ // Returns true and a server-specific ScopeConfig which may then be used to
291
+ // configure the ServerCallTracer in GetServerCallTracer().
292
+ virtual std::pair<bool, std::shared_ptr<ScopeConfig>> IsEnabledForServer(
293
+ const ChannelArgs& args) const = 0;
294
+ // Gets a scope config for the client channel specified by \a scope. Note that
295
+ // the stats plugin should have been enabled for the channel.
296
+ virtual std::shared_ptr<StatsPlugin::ScopeConfig> GetChannelScopeConfig(
297
+ const experimental::StatsPluginChannelScope& scope) const = 0;
298
+ // Gets a scope config for the server specified by \a args. Note that the
299
+ // stats plugin should have been enabled for the server.
300
+ virtual std::shared_ptr<StatsPlugin::ScopeConfig> GetServerScopeConfig(
301
+ const ChannelArgs& args) const = 0;
302
+
303
+ // Adds \a value to the uint64 counter specified by \a handle. \a label_values
304
+ // and \a optional_label_values specify attributes that are associated with
305
+ // this measurement and must match with their corresponding keys in
306
+ // GlobalInstrumentsRegistry::RegisterUInt64Counter().
307
+ virtual void AddCounter(
308
+ GlobalInstrumentsRegistry::GlobalInstrumentHandle handle, uint64_t value,
309
+ absl::Span<const absl::string_view> label_values,
310
+ absl::Span<const absl::string_view> optional_label_values) = 0;
311
+ // Adds \a value to the double counter specified by \a handle. \a label_values
312
+ // and \a optional_label_values specify attributes that are associated with
313
+ // this measurement and must match with their corresponding keys in
314
+ // GlobalInstrumentsRegistry::RegisterDoubleCounter().
315
+ virtual void AddCounter(
316
+ GlobalInstrumentsRegistry::GlobalInstrumentHandle handle, double value,
317
+ absl::Span<const absl::string_view> label_values,
318
+ absl::Span<const absl::string_view> optional_label_values) = 0;
319
+ // Records a uint64 \a value to the histogram specified by \a handle. \a
320
+ // label_values and \a optional_label_values specify attributes that are
321
+ // associated with this measurement and must match with their corresponding
322
+ // keys in GlobalInstrumentsRegistry::RegisterUInt64Histogram().
323
+ virtual void RecordHistogram(
324
+ GlobalInstrumentsRegistry::GlobalInstrumentHandle handle, uint64_t value,
325
+ absl::Span<const absl::string_view> label_values,
326
+ absl::Span<const absl::string_view> optional_label_values) = 0;
327
+ // Records a double \a value to the histogram specified by \a handle. \a
328
+ // label_values and \a optional_label_values specify attributes that are
329
+ // associated with this measurement and must match with their corresponding
330
+ // keys in GlobalInstrumentsRegistry::RegisterDoubleHistogram().
331
+ virtual void RecordHistogram(
332
+ GlobalInstrumentsRegistry::GlobalInstrumentHandle handle, double value,
333
+ absl::Span<const absl::string_view> label_values,
334
+ absl::Span<const absl::string_view> optional_label_values) = 0;
335
+ // Adds a callback to be invoked when the stats plugin wants to
336
+ // populate the corresponding metrics (see callback->metrics() for list).
337
+ virtual void AddCallback(RegisteredMetricCallback* callback) = 0;
338
+ // Removes a callback previously added via AddCallback(). The stats
339
+ // plugin may not use the callback after this method returns.
340
+ virtual void RemoveCallback(RegisteredMetricCallback* callback) = 0;
341
+ // Returns true if instrument \a handle is enabled.
342
+ virtual bool IsInstrumentEnabled(
343
+ GlobalInstrumentsRegistry::GlobalInstrumentHandle handle) const = 0;
344
+
345
+ // Gets a ClientCallTracer associated with this stats plugin which can be used
346
+ // in a call.
347
+ virtual ClientCallTracer* GetClientCallTracer(
348
+ const Slice& path, bool registered_method,
349
+ std::shared_ptr<ScopeConfig> scope_config) = 0;
350
+ // Gets a ServerCallTracer associated with this stats plugin which can be used
351
+ // in a call.
352
+ virtual ServerCallTracer* GetServerCallTracer(
353
+ std::shared_ptr<ScopeConfig> scope_config) = 0;
354
+
355
+ // TODO(yijiem): This is an optimization for the StatsPlugin to create its own
356
+ // representation of the label_values and use it multiple times. We would
357
+ // change AddCounter and RecordHistogram to take RefCountedPtr<LabelValueSet>
358
+ // and also change the StatsPluginsGroup to support this.
359
+ // Use the StatsPlugin to get a representation of label values that can be
360
+ // saved for multiple uses later.
361
+ // virtual RefCountedPtr<LabelValueSet> MakeLabelValueSet(
362
+ // absl::Span<absl::string_view> label_values) = 0;
363
+ };
364
+
365
+ // A global registry of stats plugins. It has shared ownership to the registered
366
+ // stats plugins. This API is supposed to be used during runtime after the main
367
+ // function begins. This API is thread-safe.
368
+ class GlobalStatsPluginRegistry {
369
+ public:
370
+ // A stats plugin group object is how the code in gRPC normally interacts with
371
+ // stats plugins. They got a stats plugin group which contains all the stats
372
+ // plugins for a specific scope and all operations on the stats plugin group
373
+ // will be applied to all the stats plugins within the group.
374
+ class StatsPluginGroup {
375
+ public:
376
+ // Adds a stats plugin and a scope config (per-channel or per-server) to the
377
+ // group.
378
+ void AddStatsPlugin(std::shared_ptr<StatsPlugin> plugin,
379
+ std::shared_ptr<StatsPlugin::ScopeConfig> config) {
380
+ PluginState plugin_state;
381
+ plugin_state.plugin = std::move(plugin);
382
+ plugin_state.scope_config = std::move(config);
383
+ plugins_state_.push_back(std::move(plugin_state));
384
+ }
385
+ // Adds a counter in all stats plugins within the group. See the StatsPlugin
386
+ // interface for more documentation and valid types.
387
+ template <std::size_t M, std::size_t N>
388
+ void AddCounter(
389
+ GlobalInstrumentsRegistry::TypedGlobalInstrumentHandle<
390
+ GlobalInstrumentsRegistry::ValueType::kUInt64,
391
+ GlobalInstrumentsRegistry::InstrumentType::kCounter, M, N>
392
+ handle,
393
+ uint64_t value, std::array<absl::string_view, M> label_values,
394
+ std::array<absl::string_view, N> optional_values) {
395
+ for (auto& state : plugins_state_) {
396
+ state.plugin->AddCounter(handle, value, label_values, optional_values);
397
+ }
398
+ }
399
+ template <std::size_t M, std::size_t N>
400
+ void AddCounter(
401
+ GlobalInstrumentsRegistry::TypedGlobalInstrumentHandle<
402
+ GlobalInstrumentsRegistry::ValueType::kDouble,
403
+ GlobalInstrumentsRegistry::InstrumentType::kCounter, M, N>
404
+ handle,
405
+ double value, std::array<absl::string_view, M> label_values,
406
+ std::array<absl::string_view, N> optional_values) {
407
+ for (auto& state : plugins_state_) {
408
+ state.plugin->AddCounter(handle, value, label_values, optional_values);
409
+ }
410
+ }
411
+ // Records a value to a histogram in all stats plugins within the group. See
412
+ // the StatsPlugin interface for more documentation and valid types.
413
+ template <std::size_t M, std::size_t N>
414
+ void RecordHistogram(
415
+ GlobalInstrumentsRegistry::TypedGlobalInstrumentHandle<
416
+ GlobalInstrumentsRegistry::ValueType::kUInt64,
417
+ GlobalInstrumentsRegistry::InstrumentType::kHistogram, M, N>
418
+ handle,
419
+ uint64_t value, std::array<absl::string_view, M> label_values,
420
+ std::array<absl::string_view, N> optional_values) {
421
+ for (auto& state : plugins_state_) {
422
+ state.plugin->RecordHistogram(handle, value, label_values,
423
+ optional_values);
424
+ }
425
+ }
426
+ template <std::size_t M, std::size_t N>
427
+ void RecordHistogram(
428
+ GlobalInstrumentsRegistry::TypedGlobalInstrumentHandle<
429
+ GlobalInstrumentsRegistry::ValueType::kDouble,
430
+ GlobalInstrumentsRegistry::InstrumentType::kHistogram, M, N>
431
+ handle,
432
+ double value, std::array<absl::string_view, M> label_values,
433
+ std::array<absl::string_view, N> optional_values) {
434
+ for (auto& state : plugins_state_) {
435
+ state.plugin->RecordHistogram(handle, value, label_values,
436
+ optional_values);
437
+ }
438
+ }
439
+ // Returns true if any of the stats plugins in the group have enabled \a
440
+ // handle.
441
+ bool IsInstrumentEnabled(
442
+ GlobalInstrumentsRegistry::GlobalInstrumentHandle handle) const {
443
+ for (auto& state : plugins_state_) {
444
+ if (state.plugin->IsInstrumentEnabled(handle)) {
445
+ return true;
446
+ }
447
+ }
448
+ return false;
449
+ }
450
+
451
+ // Registers a callback to be used to populate callback metrics.
452
+ // The callback will update the specified metrics. The callback
453
+ // will be invoked no more often than min_interval. Multiple callbacks may
454
+ // be registered for the same metrics, as long as no two callbacks report
455
+ // data for the same set of labels in which case the behavior is undefined.
456
+ //
457
+ // The returned object is a handle that allows the caller to control
458
+ // the lifetime of the callback; when the returned object is
459
+ // destroyed, the callback is de-registered. The returned object
460
+ // must not outlive the StatsPluginGroup object that created it.
461
+ template <typename... Args>
462
+ GRPC_MUST_USE_RESULT std::unique_ptr<RegisteredMetricCallback>
463
+ RegisterCallback(absl::AnyInvocable<void(CallbackMetricReporter&)> callback,
464
+ Duration min_interval, Args... args) {
465
+ AssertIsCallbackGaugeHandle(args...);
466
+ return std::make_unique<RegisteredMetricCallback>(
467
+ *this, std::move(callback),
468
+ std::vector<GlobalInstrumentsRegistry::GlobalInstrumentHandle>{
469
+ args...},
470
+ min_interval);
471
+ }
472
+
473
+ // Adds all available client call tracers associated with the stats plugins
474
+ // within the group to \a call_context.
475
+ void AddClientCallTracers(const Slice& path, bool registered_method,
476
+ Arena* arena);
477
+ // Adds all available server call tracers associated with the stats plugins
478
+ // within the group to \a call_context.
479
+ void AddServerCallTracers(Arena* arena);
480
+
481
+ private:
482
+ friend class RegisteredMetricCallback;
483
+
484
+ struct PluginState {
485
+ std::shared_ptr<StatsPlugin::ScopeConfig> scope_config;
486
+ std::shared_ptr<StatsPlugin> plugin;
487
+ };
488
+
489
+ // C++17 has fold expression that may simplify this.
490
+ template <GlobalInstrumentsRegistry::ValueType V,
491
+ GlobalInstrumentsRegistry::InstrumentType I, size_t M, size_t N>
492
+ static constexpr void AssertIsCallbackGaugeHandle(
493
+ GlobalInstrumentsRegistry::TypedGlobalInstrumentHandle<V, I, M, N>) {
494
+ static_assert(V == GlobalInstrumentsRegistry::ValueType::kInt64 ||
495
+ V == GlobalInstrumentsRegistry::ValueType::kDouble,
496
+ "ValueType must be kInt64 or kDouble");
497
+ static_assert(
498
+ I == GlobalInstrumentsRegistry::InstrumentType::kCallbackGauge,
499
+ "InstrumentType must be kCallbackGauge");
500
+ }
501
+ template <typename T, typename... Args>
502
+ static constexpr void AssertIsCallbackGaugeHandle(T t, Args&&... args) {
503
+ AssertIsCallbackGaugeHandle(t);
504
+ AssertIsCallbackGaugeHandle(args...);
505
+ }
506
+
507
+ std::vector<PluginState> plugins_state_;
508
+ };
509
+
510
+ // Registers a stats plugin with the global stats plugin registry.
511
+ static void RegisterStatsPlugin(std::shared_ptr<StatsPlugin> plugin);
512
+
513
+ // The following functions can be invoked to get a StatsPluginGroup for
514
+ // a specified scope.
515
+ static StatsPluginGroup GetStatsPluginsForChannel(
516
+ const experimental::StatsPluginChannelScope& scope);
517
+ static StatsPluginGroup GetStatsPluginsForServer(const ChannelArgs& args);
518
+
519
+ private:
520
+ friend class GlobalStatsPluginRegistryTestPeer;
521
+
522
+ GlobalStatsPluginRegistry() = default;
523
+
524
+ static NoDestruct<Mutex> mutex_;
525
+ static NoDestruct<std::vector<std::shared_ptr<StatsPlugin>>> plugins_
526
+ ABSL_GUARDED_BY(mutex_);
527
+ };
528
+
529
+ // A metric callback that is registered with a stats plugin group.
530
+ class RegisteredMetricCallback {
531
+ public:
532
+ RegisteredMetricCallback(
533
+ GlobalStatsPluginRegistry::StatsPluginGroup& stats_plugin_group,
534
+ absl::AnyInvocable<void(CallbackMetricReporter&)> callback,
535
+ std::vector<GlobalInstrumentsRegistry::GlobalInstrumentHandle> metrics,
536
+ Duration min_interval);
537
+
538
+ ~RegisteredMetricCallback();
539
+
540
+ // Invokes the callback. The callback will report metric data via reporter.
541
+ void Run(CallbackMetricReporter& reporter) { callback_(reporter); }
542
+
543
+ // Returns the set of metrics that this callback will modify.
544
+ const std::vector<GlobalInstrumentsRegistry::GlobalInstrumentHandle>&
545
+ metrics() const {
546
+ return metrics_;
547
+ }
548
+
549
+ // Returns the minimum interval at which a stats plugin may invoke the
550
+ // callback.
551
+ Duration min_interval() const { return min_interval_; }
552
+
553
+ private:
554
+ GlobalStatsPluginRegistry::StatsPluginGroup& stats_plugin_group_;
555
+ absl::AnyInvocable<void(CallbackMetricReporter&)> callback_;
556
+ std::vector<GlobalInstrumentsRegistry::GlobalInstrumentHandle> metrics_;
557
+ Duration min_interval_;
558
+ };
559
+
560
+ } // namespace grpc_core
561
+
562
+ #endif // GRPC_SRC_CORE_TELEMETRY_METRICS_H
@@ -16,7 +16,7 @@
16
16
  //
17
17
  //
18
18
 
19
- #include "src/core/lib/debug/stats.h"
19
+ #include "src/core/telemetry/stats.h"
20
20
 
21
21
  #include <stddef.h>
22
22
 
@@ -16,8 +16,8 @@
16
16
  //
17
17
  //
18
18
 
19
- #ifndef GRPC_SRC_CORE_LIB_DEBUG_STATS_H
20
- #define GRPC_SRC_CORE_LIB_DEBUG_STATS_H
19
+ #ifndef GRPC_SRC_CORE_TELEMETRY_STATS_H
20
+ #define GRPC_SRC_CORE_TELEMETRY_STATS_H
21
21
 
22
22
  #include <stdint.h>
23
23
 
@@ -29,9 +29,9 @@
29
29
 
30
30
  #include <grpc/support/port_platform.h>
31
31
 
32
- #include "src/core/lib/debug/histogram_view.h"
33
- #include "src/core/lib/debug/stats_data.h"
34
32
  #include "src/core/lib/gprpp/no_destruct.h"
33
+ #include "src/core/telemetry/histogram_view.h"
34
+ #include "src/core/telemetry/stats_data.h"
35
35
 
36
36
  namespace grpc_core {
37
37
 
@@ -61,4 +61,4 @@ std::string StatsAsJson(T* data) {
61
61
 
62
62
  } // namespace grpc_core
63
63
 
64
- #endif // GRPC_SRC_CORE_LIB_DEBUG_STATS_H
64
+ #endif // GRPC_SRC_CORE_TELEMETRY_STATS_H
@@ -14,7 +14,7 @@
14
14
 
15
15
  // Automatically generated by tools/codegen/core/gen_stats_data.py
16
16
 
17
- #include "src/core/lib/debug/stats_data.h"
17
+ #include "src/core/telemetry/stats_data.h"
18
18
 
19
19
  #include <stdint.h>
20
20
 
@@ -14,8 +14,8 @@
14
14
 
15
15
  // Automatically generated by tools/codegen/core/gen_stats_data.py
16
16
 
17
- #ifndef GRPC_SRC_CORE_LIB_DEBUG_STATS_DATA_H
18
- #define GRPC_SRC_CORE_LIB_DEBUG_STATS_DATA_H
17
+ #ifndef GRPC_SRC_CORE_TELEMETRY_STATS_DATA_H
18
+ #define GRPC_SRC_CORE_TELEMETRY_STATS_DATA_H
19
19
 
20
20
  #include <stdint.h>
21
21
 
@@ -26,8 +26,8 @@
26
26
 
27
27
  #include <grpc/support/port_platform.h>
28
28
 
29
- #include "src/core/lib/debug/histogram_view.h"
30
29
  #include "src/core/lib/gprpp/per_cpu.h"
30
+ #include "src/core/telemetry/histogram_view.h"
31
31
 
32
32
  namespace grpc_core {
33
33
  class HistogramCollector_100000_20;
@@ -576,4 +576,4 @@ class GlobalStatsCollector {
576
576
  };
577
577
  } // namespace grpc_core
578
578
 
579
- #endif // GRPC_SRC_CORE_LIB_DEBUG_STATS_DATA_H
579
+ #endif // GRPC_SRC_CORE_TELEMETRY_STATS_DATA_H
@@ -16,8 +16,8 @@
16
16
  //
17
17
  //
18
18
 
19
- #ifndef GRPC_SRC_CORE_LIB_CHANNEL_TCP_TRACER_H
20
- #define GRPC_SRC_CORE_LIB_CHANNEL_TCP_TRACER_H
19
+ #ifndef GRPC_SRC_CORE_TELEMETRY_TCP_TRACER_H
20
+ #define GRPC_SRC_CORE_TELEMETRY_TCP_TRACER_H
21
21
 
22
22
  #include <stddef.h>
23
23
  #include <stdint.h>
@@ -141,4 +141,4 @@ class TcpTracerInterface {
141
141
 
142
142
  } // namespace grpc_core
143
143
 
144
- #endif // GRPC_SRC_CORE_LIB_CHANNEL_TCP_TRACER_H
144
+ #endif // GRPC_SRC_CORE_TELEMETRY_TCP_TRACER_H