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.
- checksums.yaml +4 -4
- data/Makefile +57 -58
- data/include/grpc/event_engine/event_engine.h +13 -6
- data/include/grpc/impl/channel_arg_names.h +7 -3
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/passive_listener.h +62 -0
- data/include/grpc/support/log.h +7 -17
- data/include/grpc/support/port_platform.h +3 -0
- data/src/core/channelz/channel_trace.cc +1 -1
- data/src/core/channelz/channel_trace.h +1 -1
- data/src/core/channelz/channelz.cc +3 -3
- data/src/core/channelz/channelz.h +7 -7
- data/src/core/channelz/channelz_registry.cc +4 -3
- data/src/core/client_channel/backup_poller.cc +4 -5
- data/src/core/client_channel/client_channel.cc +1324 -0
- data/src/core/client_channel/client_channel.h +243 -0
- data/src/core/client_channel/client_channel_filter.cc +266 -709
- data/src/core/client_channel/client_channel_filter.h +11 -64
- data/src/core/client_channel/client_channel_internal.h +16 -5
- data/src/core/client_channel/client_channel_plugin.cc +1 -14
- data/src/core/client_channel/client_channel_service_config.h +3 -3
- data/src/core/client_channel/config_selector.cc +1 -1
- data/src/core/client_channel/config_selector.h +1 -1
- data/src/core/client_channel/dynamic_filters.cc +3 -3
- data/src/core/client_channel/dynamic_filters.h +1 -3
- data/src/core/client_channel/load_balanced_call_destination.cc +336 -0
- data/src/core/client_channel/load_balanced_call_destination.h +49 -0
- data/src/core/client_channel/retry_filter.cc +2 -9
- data/src/core/client_channel/retry_filter.h +2 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +65 -72
- data/src/core/client_channel/retry_filter_legacy_call_data.h +0 -2
- data/src/core/client_channel/retry_service_config.cc +4 -5
- data/src/core/client_channel/retry_service_config.h +3 -3
- data/src/core/client_channel/subchannel.cc +220 -112
- data/src/core/client_channel/subchannel.h +31 -18
- data/src/core/client_channel/subchannel_pool_interface.cc +0 -2
- data/src/core/client_channel/subchannel_pool_interface.h +2 -4
- data/src/core/client_channel/subchannel_stream_client.cc +36 -49
- data/src/core/client_channel/subchannel_stream_client.h +2 -4
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +7 -10
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +7 -0
- data/src/core/ext/filters/census/grpc_context.cc +2 -4
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +8 -15
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -7
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -0
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +3 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +1 -0
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -0
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -0
- data/src/core/ext/filters/http/client_authority_filter.h +1 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +10 -15
- data/src/core/ext/filters/http/message_compress/compression_filter.h +2 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +2 -2
- data/src/core/ext/filters/http/server/http_server_filter.h +1 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +6 -9
- data/src/core/ext/filters/message_size/message_size_filter.h +6 -6
- data/src/core/ext/filters/rbac/rbac_filter.cc +2 -5
- data/src/core/ext/filters/rbac/rbac_filter.h +1 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +2 -6
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +1 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +3 -3
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -25
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -5
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +223 -148
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +131 -107
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +8 -8
- data/src/core/ext/transport/chttp2/transport/context_list_entry.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +9 -5
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +9 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -43
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +3 -8
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +29 -19
- data/src/core/ext/transport/chttp2/transport/parsing.cc +15 -25
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +0 -2
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +29 -13
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +5 -4
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -5
- data/src/core/ext/transport/chttp2/transport/writing.cc +24 -25
- data/src/core/ext/transport/inproc/inproc_transport.cc +56 -32
- data/src/core/ext/transport/inproc/inproc_transport.h +1 -3
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +13 -15
- data/src/core/ext/transport/inproc/legacy_inproc_transport.h +0 -2
- data/src/core/handshaker/handshaker.cc +6 -14
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +9 -17
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +3 -2
- data/src/core/handshaker/security/secure_endpoint.cc +38 -32
- data/src/core/handshaker/security/secure_endpoint.h +0 -2
- data/src/core/handshaker/security/security_handshaker.cc +25 -37
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -1
- data/src/core/lib/address_utils/parse_address.cc +27 -39
- data/src/core/lib/address_utils/sockaddr_utils.cc +5 -6
- data/src/core/lib/avl/avl.h +1 -1
- data/src/core/lib/channel/channel_args.cc +13 -17
- data/src/core/lib/channel/channel_args.h +19 -8
- data/src/core/lib/channel/channel_stack.cc +5 -63
- data/src/core/lib/channel/channel_stack.h +13 -37
- data/src/core/lib/channel/channel_stack_builder.h +0 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +0 -142
- data/src/core/lib/channel/channel_stack_builder_impl.h +0 -2
- data/src/core/lib/channel/connected_channel.cc +37 -676
- data/src/core/lib/channel/promise_based_filter.cc +41 -47
- data/src/core/lib/channel/promise_based_filter.h +124 -477
- data/src/core/lib/channel/status_util.cc +1 -1
- data/src/core/lib/compression/compression.cc +1 -1
- data/src/core/lib/compression/message_compress.cc +6 -6
- data/src/core/lib/config/config_vars.cc +3 -8
- data/src/core/lib/config/config_vars.h +1 -5
- data/src/core/lib/debug/event_log.h +1 -1
- data/src/core/lib/debug/trace.cc +43 -59
- data/src/core/lib/debug/trace.h +2 -97
- data/src/core/lib/debug/trace_flags.cc +255 -0
- data/src/core/lib/debug/trace_flags.h +133 -0
- data/src/core/lib/debug/trace_impl.h +115 -0
- data/src/core/lib/event_engine/ares_resolver.cc +5 -7
- data/src/core/lib/event_engine/ares_resolver.h +1 -3
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +17 -22
- data/src/core/lib/event_engine/event_engine.cc +29 -4
- data/src/core/lib/event_engine/extensions/supports_fd.h +7 -0
- data/src/core/lib/event_engine/extensions/tcp_trace.h +43 -0
- data/src/core/lib/event_engine/forkable.cc +4 -5
- data/src/core/lib/event_engine/forkable.h +0 -11
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +10 -11
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +4 -3
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +19 -33
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +24 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +2 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +14 -16
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +18 -22
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +13 -17
- data/src/core/lib/event_engine/posix_engine/timer.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -6
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -1
- data/src/core/lib/event_engine/shim.cc +1 -1
- data/src/core/lib/event_engine/tcp_socket_utils.cc +6 -8
- data/src/core/lib/event_engine/thread_local.h +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +19 -21
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -6
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +14 -13
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +4 -3
- data/src/core/lib/event_engine/trace.h +6 -17
- data/src/core/lib/event_engine/windows/iocp.h +1 -1
- data/src/core/lib/event_engine/windows/win_socket.cc +23 -17
- data/src/core/lib/event_engine/windows/win_socket.h +4 -5
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +6 -9
- data/src/core/lib/event_engine/windows/windows_engine.cc +201 -87
- data/src/core/lib/event_engine/windows/windows_engine.h +136 -25
- data/src/core/lib/event_engine/windows/windows_listener.cc +12 -23
- data/src/core/lib/experiments/experiments.cc +35 -151
- data/src/core/lib/experiments/experiments.h +12 -45
- data/src/core/lib/gprpp/bitset.h +1 -1
- data/src/core/lib/gprpp/crash.cc +2 -3
- data/src/core/lib/gprpp/dual_ref_counted.h +45 -33
- data/src/core/lib/gprpp/dump_args.cc +54 -0
- data/src/core/lib/gprpp/dump_args.h +69 -0
- data/src/core/lib/gprpp/glob.cc +70 -0
- data/src/core/lib/gprpp/glob.h +29 -0
- data/src/core/lib/gprpp/per_cpu.cc +1 -1
- data/src/core/lib/gprpp/posix/stat.cc +3 -4
- data/src/core/lib/gprpp/posix/thd.cc +8 -9
- data/src/core/lib/gprpp/ref_counted.h +30 -22
- data/src/core/lib/gprpp/single_set_ptr.h +5 -3
- data/src/core/lib/gprpp/status_helper.cc +11 -30
- data/src/core/lib/gprpp/status_helper.h +3 -31
- data/src/core/lib/gprpp/time.cc +3 -4
- data/src/core/lib/gprpp/time.h +3 -2
- data/src/core/lib/gprpp/unique_type_name.h +1 -1
- data/src/core/lib/gprpp/validation_errors.cc +10 -1
- data/src/core/lib/gprpp/validation_errors.h +11 -0
- data/src/core/lib/gprpp/windows/stat.cc +3 -4
- data/src/core/lib/gprpp/windows/thd.cc +3 -2
- data/src/core/lib/gprpp/work_serializer.cc +48 -57
- data/src/core/lib/iomgr/buffer_list.cc +4 -2
- data/src/core/lib/iomgr/call_combiner.cc +18 -27
- data/src/core/lib/iomgr/call_combiner.h +1 -3
- data/src/core/lib/iomgr/cfstream_handle.cc +4 -6
- data/src/core/lib/iomgr/closure.h +2 -4
- data/src/core/lib/iomgr/combiner.cc +6 -8
- data/src/core/lib/iomgr/combiner.h +0 -2
- data/src/core/lib/iomgr/endpoint.cc +0 -6
- data/src/core/lib/iomgr/endpoint.h +0 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +19 -41
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
- data/src/core/lib/iomgr/error.cc +13 -21
- data/src/core/lib/iomgr/error.h +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +3 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +43 -42
- data/src/core/lib/iomgr/ev_poll_posix.cc +38 -29
- data/src/core/lib/iomgr/ev_posix.cc +8 -9
- data/src/core/lib/iomgr/ev_posix.h +10 -7
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +2 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +14 -28
- data/src/core/lib/iomgr/exec_ctx.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/executor.cc +6 -15
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +8 -10
- data/src/core/lib/iomgr/fork_windows.cc +3 -1
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -3
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +3 -5
- data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
- data/src/core/lib/iomgr/iocp_windows.cc +4 -3
- data/src/core/lib/iomgr/iomgr.cc +13 -17
- data/src/core/lib/iomgr/lockfree_event.cc +3 -5
- data/src/core/lib/iomgr/pollset.h +0 -2
- data/src/core/lib/iomgr/pollset_windows.cc +0 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +7 -14
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +11 -17
- data/src/core/lib/iomgr/socket_windows.cc +4 -6
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +3 -5
- data/src/core/lib/iomgr/tcp_client_posix.cc +9 -15
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -4
- data/src/core/lib/iomgr/tcp_posix.cc +57 -84
- data/src/core/lib/iomgr/tcp_posix.h +0 -2
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +4 -6
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_windows.cc +10 -16
- data/src/core/lib/iomgr/tcp_windows.cc +25 -41
- data/src/core/lib/iomgr/timer_generic.cc +17 -20
- data/src/core/lib/iomgr/timer_heap.cc +1 -1
- data/src/core/lib/iomgr/timer_manager.cc +17 -30
- data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
- data/src/core/lib/iomgr/vsock.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +3 -3
- data/src/core/lib/promise/activity.h +27 -4
- data/src/core/lib/promise/cancel_callback.h +24 -0
- data/src/core/lib/promise/context.h +11 -0
- data/src/core/lib/promise/detail/basic_seq.h +1 -2
- data/src/core/lib/promise/detail/join_state.h +354 -398
- data/src/core/lib/promise/detail/promise_like.h +6 -5
- data/src/core/lib/promise/detail/seq_state.h +1178 -1178
- data/src/core/lib/promise/for_each.h +6 -6
- data/src/core/lib/promise/interceptor_list.h +6 -7
- data/src/core/lib/promise/latch.h +9 -9
- data/src/core/lib/promise/map.h +17 -0
- data/src/core/lib/promise/observable.h +182 -0
- data/src/core/lib/promise/party.cc +7 -8
- data/src/core/lib/promise/party.h +10 -8
- data/src/core/lib/promise/pipe.h +16 -35
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/status_flag.h +2 -0
- data/src/core/lib/resource_quota/arena.cc +56 -79
- data/src/core/lib/resource_quota/arena.h +118 -209
- data/src/core/lib/resource_quota/memory_quota.cc +12 -13
- data/src/core/lib/resource_quota/memory_quota.h +2 -3
- data/src/core/lib/resource_quota/periodic_update.cc +1 -1
- data/src/core/lib/resource_quota/resource_quota.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +6 -8
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +5 -6
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -0
- data/src/core/lib/security/authorization/matchers.cc +3 -3
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +2 -2
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +2 -3
- data/src/core/lib/security/context/security_context.cc +12 -13
- data/src/core/lib/security/context/security_context.h +31 -8
- data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +3 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +5 -5
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +3 -3
- data/src/core/lib/security/credentials/call_creds_util.cc +2 -1
- data/src/core/lib/security/credentials/channel_creds_registry.h +2 -2
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +5 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +1 -1
- data/src/core/lib/security/credentials/credentials.cc +6 -6
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -4
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +2 -2
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -11
- data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +2 -2
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -1
- data/src/core/lib/security/credentials/fake/fake_credentials.h +1 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +11 -11
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.h +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.cc +14 -15
- data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +6 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +50 -54
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
- data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +12 -11
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -3
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +15 -21
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +21 -30
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +3 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +14 -16
- data/src/core/lib/security/credentials/tls/tls_utils.cc +4 -4
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -16
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +15 -12
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +6 -6
- data/src/core/lib/security/security_connector/load_system_roots_windows.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +8 -12
- data/src/core/lib/security/security_connector/security_connector.cc +1 -4
- data/src/core/lib/security/security_connector/security_connector.h +1 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +17 -19
- data/src/core/lib/security/security_connector/ssl_utils.cc +19 -21
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +29 -40
- data/src/core/lib/security/transport/auth_filters.h +1 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +7 -13
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -8
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/slice/slice.h +1 -1
- data/src/core/lib/slice/slice_refcount.h +2 -4
- data/src/core/lib/slice/slice_string_helpers.cc +1 -1
- data/src/core/lib/surface/api_trace.h +1 -3
- data/src/core/lib/surface/call.cc +64 -3738
- data/src/core/lib/surface/call.h +41 -143
- data/src/core/lib/surface/call_log_batch.cc +1 -1
- data/src/core/lib/surface/call_utils.cc +276 -0
- data/src/core/lib/surface/call_utils.h +449 -0
- data/src/core/lib/surface/channel.cc +8 -3
- data/src/core/lib/surface/channel.h +10 -7
- data/src/core/lib/surface/channel_create.cc +14 -6
- data/src/core/lib/surface/channel_create.h +3 -2
- data/src/core/lib/surface/channel_init.cc +21 -77
- data/src/core/lib/surface/channel_init.h +19 -97
- data/src/core/lib/surface/client_call.cc +419 -0
- data/src/core/lib/surface/client_call.h +180 -0
- data/src/core/lib/surface/completion_queue.cc +28 -33
- data/src/core/lib/surface/completion_queue.h +0 -8
- data/src/core/lib/surface/filter_stack_call.cc +1157 -0
- data/src/core/lib/surface/filter_stack_call.h +369 -0
- data/src/core/lib/surface/init.cc +7 -6
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/legacy_channel.cc +40 -27
- data/src/core/lib/surface/legacy_channel.h +9 -18
- data/src/core/lib/surface/server_call.cc +222 -0
- data/src/core/lib/surface/server_call.h +167 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -5
- data/src/core/lib/transport/bdp_estimator.h +2 -4
- data/src/core/lib/transport/call_arena_allocator.h +9 -7
- data/src/core/lib/transport/call_destination.h +76 -0
- data/src/core/lib/transport/call_filters.cc +28 -10
- data/src/core/lib/transport/call_filters.h +128 -22
- data/src/core/lib/transport/call_spine.cc +5 -6
- data/src/core/lib/transport/call_spine.h +159 -334
- data/src/core/lib/transport/connectivity_state.cc +8 -10
- data/src/core/lib/transport/connectivity_state.h +0 -2
- data/src/core/lib/transport/interception_chain.cc +155 -0
- data/src/core/lib/transport/interception_chain.h +236 -0
- data/src/core/lib/transport/metadata_batch.h +10 -1
- data/src/core/lib/transport/metadata_info.h +1 -1
- data/src/core/lib/transport/transport.cc +3 -6
- data/src/core/lib/transport/transport.h +43 -40
- data/src/core/load_balancing/child_policy_handler.cc +8 -8
- data/src/core/load_balancing/endpoint_list.cc +5 -5
- data/src/core/load_balancing/endpoint_list.h +1 -1
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +1 -0
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/load_balancing/grpclb/grpclb.cc +25 -29
- data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/load_balancing/grpclb/load_balancer_api.cc +3 -4
- data/src/core/load_balancing/health_check_client.cc +10 -13
- data/src/core/load_balancing/lb_policy.cc +5 -8
- data/src/core/load_balancing/lb_policy.h +19 -3
- data/src/core/load_balancing/lb_policy_factory.h +1 -1
- data/src/core/load_balancing/lb_policy_registry.cc +2 -3
- data/src/core/load_balancing/lb_policy_registry.h +1 -1
- data/src/core/load_balancing/oob_backend_metric.cc +2 -4
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/load_balancing/outlier_detection/outlier_detection.h +3 -3
- data/src/core/load_balancing/pick_first/pick_first.cc +65 -65
- data/src/core/load_balancing/priority/priority.cc +26 -28
- data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -13
- data/src/core/load_balancing/ring_hash/ring_hash.h +3 -3
- data/src/core/load_balancing/rls/rls.cc +82 -82
- data/src/core/load_balancing/round_robin/round_robin.cc +17 -20
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +54 -43
- data/src/core/load_balancing/weighted_target/weighted_target.cc +21 -24
- data/src/core/load_balancing/xds/cds.cc +14 -16
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +16 -18
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +15 -17
- data/src/core/load_balancing/xds/xds_override_host.cc +40 -41
- data/src/core/load_balancing/xds/xds_override_host.h +3 -3
- data/src/core/load_balancing/xds/xds_wrr_locality.cc +10 -12
- data/src/core/plugin_registry/grpc_plugin_registry.cc +5 -1
- data/src/core/resolver/binder/binder_resolver.cc +3 -2
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +3 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +7 -14
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -5
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -5
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +4 -9
- data/src/core/resolver/dns/event_engine/service_config_helper.cc +5 -5
- data/src/core/resolver/dns/native/dns_resolver.cc +8 -9
- data/src/core/resolver/endpoint_addresses.cc +1 -1
- data/src/core/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/resolver/fake/fake_resolver.h +1 -1
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +13 -14
- data/src/core/resolver/polling_resolver.cc +30 -35
- data/src/core/resolver/resolver.cc +2 -6
- data/src/core/resolver/resolver.h +0 -2
- data/src/core/resolver/resolver_registry.cc +6 -8
- data/src/core/resolver/sockaddr/sockaddr_resolver.cc +3 -3
- data/src/core/resolver/xds/xds_dependency_manager.cc +22 -23
- data/src/core/resolver/xds/xds_resolver.cc +13 -15
- data/src/core/server/server.cc +269 -389
- data/src/core/server/server.h +37 -19
- data/src/core/server/server_call_tracer_filter.cc +7 -14
- data/src/core/server/server_config_selector.h +1 -1
- data/src/core/server/server_config_selector_filter.cc +3 -3
- data/src/core/server/server_interface.h +2 -0
- data/src/core/server/xds_channel_stack_modifier.cc +1 -1
- data/src/core/server/xds_channel_stack_modifier.h +1 -1
- data/src/core/server/xds_server_config_fetcher.cc +1 -4
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_call_data.h +13 -11
- data/src/core/service_config/service_config_channel_arg_filter.cc +6 -4
- data/src/core/service_config/service_config_impl.cc +5 -5
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/service_config/service_config_parser.cc +3 -6
- data/src/core/service_config/service_config_parser.h +1 -1
- data/src/core/{lib/channel → telemetry}/call_tracer.cc +20 -30
- data/src/core/{lib/channel → telemetry}/call_tracer.h +32 -9
- data/src/core/{lib/debug → telemetry}/histogram_view.cc +1 -1
- data/src/core/{lib/debug → telemetry}/histogram_view.h +3 -3
- data/src/core/telemetry/metrics.cc +178 -0
- data/src/core/telemetry/metrics.h +562 -0
- data/src/core/{lib/debug → telemetry}/stats.cc +1 -1
- data/src/core/{lib/debug → telemetry}/stats.h +5 -5
- data/src/core/{lib/debug → telemetry}/stats_data.cc +1 -1
- data/src/core/{lib/debug → telemetry}/stats_data.h +4 -4
- data/src/core/{lib/channel → telemetry}/tcp_tracer.h +3 -3
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +12 -13
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +25 -27
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -33
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +5 -4
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +5 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -3
- data/src/core/tsi/fake_transport_security.cc +14 -17
- data/src/core/tsi/local_transport_security.cc +6 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +4 -4
- data/src/core/tsi/ssl_transport_security.cc +76 -81
- data/src/core/tsi/ssl_transport_security_utils.cc +74 -18
- data/src/core/tsi/ssl_transport_security_utils.h +11 -0
- data/src/core/tsi/transport_security.cc +0 -4
- data/src/core/tsi/transport_security.h +0 -2
- data/src/core/tsi/transport_security_interface.h +0 -4
- data/src/core/{lib/gpr → util}/alloc.h +3 -3
- data/src/core/{lib/gpr → util}/android/log.cc +0 -19
- data/src/core/{lib/gpr → util}/atm.cc +1 -1
- data/src/core/{ext/gcp/metadata_query.cc → util/gcp_metadata_query.cc} +25 -26
- data/src/core/{ext/gcp/metadata_query.h → util/gcp_metadata_query.h} +11 -11
- data/src/core/{lib/http → util/http_client}/format_request.cc +4 -3
- data/src/core/{lib/http → util/http_client}/format_request.h +6 -5
- data/src/core/{lib/http → util/http_client}/httpcli.cc +9 -10
- data/src/core/{lib/http → util/http_client}/httpcli.h +6 -5
- data/src/core/{lib/http → util/http_client}/httpcli_security_connector.cc +9 -9
- data/src/core/{lib/http → util/http_client}/httpcli_ssl_credentials.h +5 -4
- data/src/core/{lib/http → util/http_client}/parser.cc +4 -5
- data/src/core/{lib/http → util/http_client}/parser.h +5 -6
- data/src/core/{lib → util}/json/json.h +5 -4
- data/src/core/{lib → util}/json/json_args.h +5 -5
- data/src/core/{lib → util}/json/json_channel_args.h +6 -6
- data/src/core/{lib → util}/json/json_object_loader.cc +3 -2
- data/src/core/{lib → util}/json/json_object_loader.h +7 -7
- data/src/core/{lib → util}/json/json_reader.cc +3 -2
- data/src/core/{lib → util}/json/json_reader.h +6 -6
- data/src/core/{lib → util}/json/json_util.cc +4 -4
- data/src/core/{lib → util}/json/json_util.h +6 -6
- data/src/core/{lib → util}/json/json_writer.cc +3 -3
- data/src/core/{lib → util}/json/json_writer.h +6 -6
- data/src/core/{lib/gpr → util}/linux/log.cc +0 -45
- data/src/core/util/log.cc +165 -0
- data/src/core/{lib/gpr → util}/msys/tmpfile.cc +2 -2
- data/src/core/{lib/gpr → util}/posix/cpu.cc +1 -1
- data/src/core/{lib/gpr → util}/posix/log.cc +0 -42
- data/src/core/{lib/gpr → util}/posix/time.cc +1 -1
- data/src/core/{lib/gpr → util}/posix/tmpfile.cc +2 -2
- data/src/core/{lib/gpr → util}/spinlock.h +3 -3
- data/src/core/{lib/gpr → util}/string.cc +2 -2
- data/src/core/{lib/gpr → util}/string.h +3 -3
- data/src/core/{lib/gpr → util}/time_precise.cc +1 -1
- data/src/core/{lib/gpr → util}/time_precise.h +3 -3
- data/src/core/{lib/gpr → util}/tmpfile.h +3 -3
- data/src/core/{lib/gpr → util}/useful.h +3 -3
- data/src/core/{lib/gpr → util}/windows/log.cc +1 -44
- data/src/core/{lib/gpr → util}/windows/string.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/string_util.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/time.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/tmpfile.cc +1 -1
- data/src/core/xds/grpc/certificate_provider_store.cc +3 -3
- data/src/core/xds/grpc/certificate_provider_store.h +4 -4
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +3 -3
- data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +5 -5
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +3 -3
- data/src/core/xds/grpc/xds_certificate_provider.h +1 -1
- data/src/core/xds/grpc/xds_client_grpc.cc +27 -23
- data/src/core/xds/grpc/xds_client_grpc.h +2 -2
- data/src/core/xds/grpc/xds_cluster.cc +4 -5
- data/src/core/xds/grpc/xds_cluster.h +1 -1
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
- data/src/core/xds/grpc/xds_common_types.cc +1 -1
- data/src/core/xds/grpc/xds_common_types.h +1 -1
- data/src/core/xds/grpc/xds_endpoint.cc +4 -5
- data/src/core/xds/grpc/xds_http_fault_filter.cc +2 -2
- data/src/core/xds/grpc/xds_http_filters.h +2 -2
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -3
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +2 -2
- data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
- data/src/core/xds/grpc/xds_listener.cc +4 -6
- data/src/core/xds/grpc/xds_route_config.cc +7 -8
- data/src/core/xds/grpc/xds_transport_grpc.cc +2 -2
- data/src/core/xds/grpc/xds_transport_grpc.h +1 -1
- data/src/core/xds/xds_client/xds_api.cc +5 -9
- data/src/core/xds/xds_client/xds_bootstrap.cc +1 -1
- data/src/core/xds/xds_client/xds_bootstrap.h +1 -1
- data/src/core/xds/xds_client/xds_client.cc +39 -45
- data/src/core/xds/xds_client/xds_client.h +0 -3
- data/src/core/xds/xds_client/xds_client_stats.cc +6 -6
- data/src/core/xds/xds_client/xds_client_stats.h +2 -2
- data/src/ruby/bin/math_pb.rb +1 -22
- data/src/ruby/ext/grpc/rb_call.c +8 -1
- data/src/ruby/ext/grpc/rb_completion_queue.c +15 -32
- data/src/ruby/ext/grpc/rb_completion_queue.h +7 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
- data/src/ruby/ext/grpc/rb_server.c +39 -22
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +1 -22
- data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +5 -5
- data/src/ruby/pb/grpc/testing/metrics_pb.rb +10 -19
- data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +5 -5
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -22
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -22
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +12 -12
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +66 -41
- data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +1497 -0
- data/third_party/boringssl-with-bazel/src/crypto/dilithium/internal.h +58 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -3
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +45 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +33 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +6 -0
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_utl.c +49 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +7 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +8 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +125 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +0 -23
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -10
- metadata +103 -93
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +0 -19
- data/src/core/ext/transport/chttp2/transport/http_trace.h +0 -24
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -23
- data/src/core/handshaker/security/tsi_error.cc +0 -31
- data/src/core/handshaker/security/tsi_error.h +0 -30
- data/src/core/lib/channel/channel_stack_trace.cc +0 -19
- data/src/core/lib/channel/channel_stack_trace.h +0 -24
- data/src/core/lib/channel/context.h +0 -105
- data/src/core/lib/channel/metrics.cc +0 -334
- data/src/core/lib/channel/metrics.h +0 -365
- data/src/core/lib/event_engine/trace.cc +0 -25
- data/src/core/lib/gpr/log.cc +0 -166
- data/src/core/lib/iomgr/ev_windows.cc +0 -30
- data/src/core/lib/promise/trace.cc +0 -20
- data/src/core/lib/promise/trace.h +0 -24
- data/src/core/lib/resource_quota/trace.cc +0 -19
- data/src/core/lib/resource_quota/trace.h +0 -24
- data/src/core/lib/slice/slice_refcount.cc +0 -20
- data/src/core/lib/surface/api_trace.cc +0 -25
- data/src/core/lib/surface/call_trace.h +0 -24
- data/src/core/lib/surface/wait_for_cq_end_op.cc +0 -75
- data/src/core/lib/surface/wait_for_cq_end_op.h +0 -72
- data/src/core/lib/transport/batch_builder.cc +0 -172
- data/src/core/lib/transport/batch_builder.h +0 -474
- data/src/core/resolver/xds/xds_resolver_trace.cc +0 -25
- data/src/core/resolver/xds/xds_resolver_trace.h +0 -30
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -122
- /data/src/core/{lib/gpr → util}/alloc.cc +0 -0
- /data/src/core/{lib/gpr → util}/iphone/cpu.cc +0 -0
- /data/src/core/{lib/gpr → util}/linux/cpu.cc +0 -0
- /data/src/core/{lib/gpr → util}/posix/string.cc +0 -0
- /data/src/core/{lib/gpr → util}/posix/sync.cc +0 -0
- /data/src/core/{lib/gpr → util}/sync.cc +0 -0
- /data/src/core/{lib/gpr → util}/sync_abseil.cc +0 -0
- /data/src/core/{lib/gpr → util}/time.cc +0 -0
- /data/src/core/{lib/gpr → util}/windows/cpu.cc +0 -0
- /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,8 +16,8 @@
|
|
16
16
|
//
|
17
17
|
//
|
18
18
|
|
19
|
-
#ifndef
|
20
|
-
#define
|
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 //
|
64
|
+
#endif // GRPC_SRC_CORE_TELEMETRY_STATS_H
|
@@ -14,8 +14,8 @@
|
|
14
14
|
|
15
15
|
// Automatically generated by tools/codegen/core/gen_stats_data.py
|
16
16
|
|
17
|
-
#ifndef
|
18
|
-
#define
|
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 //
|
579
|
+
#endif // GRPC_SRC_CORE_TELEMETRY_STATS_DATA_H
|
@@ -16,8 +16,8 @@
|
|
16
16
|
//
|
17
17
|
//
|
18
18
|
|
19
|
-
#ifndef
|
20
|
-
#define
|
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 //
|
144
|
+
#endif // GRPC_SRC_CORE_TELEMETRY_TCP_TRACER_H
|