grpc 1.75.0.pre1 → 1.76.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +18 -5
- data/include/grpc/credentials.h +21 -5
- data/src/core/call/call_filters.cc +4 -4
- data/src/core/call/call_filters.h +36 -36
- data/src/core/call/call_spine.h +27 -27
- data/src/core/call/client_call.cc +6 -5
- data/src/core/call/filter_fusion.h +5 -5
- data/src/core/call/metadata_batch.h +3 -3
- data/src/core/call/security_context.cc +1 -1
- data/src/core/call/server_call.cc +4 -4
- data/src/core/call/server_call.h +1 -1
- data/src/core/channelz/channelz.cc +12 -18
- data/src/core/channelz/channelz.h +32 -16
- data/src/core/channelz/channelz_registry.h +11 -0
- data/src/core/channelz/property_list.cc +18 -0
- data/src/core/channelz/property_list.h +10 -1
- data/src/core/channelz/text_encode.cc +66 -0
- data/src/core/channelz/text_encode.h +29 -0
- data/src/core/channelz/v2tov1/convert.cc +11 -0
- data/src/core/channelz/v2tov1/legacy_api.cc +15 -8
- data/src/core/channelz/ztrace_collector.h +247 -86
- data/src/core/client_channel/backup_poller.cc +5 -6
- data/src/core/client_channel/client_channel.cc +20 -13
- data/src/core/client_channel/client_channel_filter.cc +53 -45
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_internal.h +3 -4
- data/src/core/client_channel/config_selector.h +3 -3
- data/src/core/client_channel/dynamic_filters.cc +3 -3
- data/src/core/client_channel/global_subchannel_pool.cc +0 -37
- data/src/core/client_channel/global_subchannel_pool.h +0 -27
- data/src/core/client_channel/load_balanced_call_destination.cc +7 -7
- data/src/core/client_channel/local_subchannel_pool.cc +4 -4
- data/src/core/client_channel/retry_filter.h +3 -3
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/subchannel.cc +8 -8
- data/src/core/client_channel/subchannel_stream_client.cc +4 -4
- data/src/core/config/config_vars.cc +30 -1
- data/src/core/config/config_vars.h +21 -0
- data/src/core/config/core_configuration.cc +5 -5
- data/src/core/config/core_configuration.h +7 -7
- data/src/core/config/load_config.cc +12 -0
- data/src/core/config/load_config.h +2 -0
- data/src/core/credentials/call/call_credentials.h +2 -2
- data/src/core/credentials/call/call_creds_util.cc +4 -3
- data/src/core/credentials/call/composite/composite_call_credentials.cc +4 -4
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +3 -3
- data/src/core/credentials/call/external/external_account_credentials.cc +1 -1
- data/src/core/credentials/call/external/url_external_account_credentials.cc +1 -1
- data/src/core/credentials/call/iam/iam_credentials.cc +4 -4
- data/src/core/credentials/call/jwt/json_token.cc +3 -3
- data/src/core/credentials/call/jwt/jwt_credentials.cc +2 -2
- data/src/core/credentials/call/jwt/jwt_verifier.cc +14 -13
- data/src/core/credentials/call/oauth2/oauth2_credentials.cc +20 -12
- data/src/core/credentials/call/plugin/plugin_credentials.cc +2 -2
- data/src/core/credentials/transport/alts/alts_credentials.cc +4 -4
- data/src/core/credentials/transport/alts/alts_security_connector.cc +14 -12
- data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +22 -2
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.cc +10 -1
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +31 -0
- data/src/core/credentials/transport/alts/grpc_alts_credentials_server_options.cc +8 -3
- data/src/core/credentials/transport/composite/composite_channel_credentials.cc +5 -5
- data/src/core/credentials/transport/fake/fake_security_connector.cc +2 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +78 -28
- data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
- data/src/core/credentials/transport/local/local_security_connector.cc +8 -8
- data/src/core/credentials/transport/security_connector.cc +5 -5
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +12 -12
- data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +3 -3
- data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +24 -24
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +5 -5
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +17 -17
- data/src/core/credentials/transport/tls/ssl_utils.cc +14 -9
- data/src/core/credentials/transport/tls/tls_credentials.cc +2 -2
- data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -11
- data/src/core/credentials/transport/transport_credentials.cc +2 -2
- data/src/core/credentials/transport/transport_credentials.h +2 -2
- data/src/core/credentials/transport/xds/xds_credentials.cc +5 -5
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +2 -0
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
- data/src/core/ext/filters/http/message_compress/compression_filter.h +3 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -7
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -2
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +10 -9
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +96 -88
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -7
- data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +60 -0
- data/src/core/ext/transport/chttp2/transport/frame.cc +32 -10
- data/src/core/ext/transport/chttp2/transport/frame.h +16 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +28 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -27
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +543 -366
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +198 -277
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +11 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +179 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +51 -23
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +13 -6
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +115 -71
- data/src/core/ext/transport/chttp2/transport/internal.h +6 -14
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +7 -7
- data/src/core/ext/transport/chttp2/transport/parsing.cc +17 -15
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +62 -26
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +58 -22
- data/src/core/ext/transport/chttp2/transport/stream.h +207 -0
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +328 -187
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +17 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.h +52 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +181 -79
- data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +1 -1
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +3 -3
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +740 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +218 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +46 -0
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +87 -55
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +23 -21
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.c +80 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.h +47 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.c +129 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.h +72 -0
- data/src/core/filter/auth/server_auth_filter.cc +2 -2
- data/src/core/handshaker/handshaker.cc +3 -3
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +2 -2
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +2 -2
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +31 -8
- data/src/core/handshaker/security/secure_endpoint.cc +16 -6
- data/src/core/handshaker/security/security_handshaker.cc +3 -3
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/channel/channel_stack.cc +8 -5
- data/src/core/lib/channel/channel_stack.h +3 -0
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -0
- data/src/core/lib/channel/connected_channel.cc +2 -2
- data/src/core/lib/channel/promise_based_filter.cc +69 -64
- data/src/core/lib/channel/promise_based_filter.h +16 -15
- data/src/core/lib/compression/compression_internal.cc +2 -2
- data/src/core/lib/compression/message_compress.cc +7 -7
- data/src/core/lib/event_engine/ares_resolver.cc +22 -20
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +2 -2
- data/src/core/lib/event_engine/extensions/channelz.h +2 -2
- data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +8 -8
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +10 -10
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +23 -22
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -11
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +168 -170
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +33 -54
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -3
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +1 -1
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +3 -3
- data/src/core/lib/event_engine/resolved_address.cc +3 -3
- data/src/core/lib/event_engine/shim.cc +8 -11
- data/src/core/lib/event_engine/shim.h +2 -1
- data/src/core/lib/event_engine/slice.cc +2 -2
- data/src/core/lib/event_engine/tcp_socket_utils.cc +11 -11
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +7 -7
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +31 -31
- data/src/core/lib/event_engine/windows/iocp.cc +10 -10
- data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -11
- data/src/core/lib/event_engine/windows/windows_engine.cc +16 -14
- data/src/core/lib/event_engine/windows/windows_listener.cc +7 -7
- data/src/core/lib/experiments/experiments.cc +105 -18
- data/src/core/lib/experiments/experiments.h +43 -11
- data/src/core/lib/iomgr/call_combiner.cc +3 -3
- data/src/core/lib/iomgr/endpoint_cfstream.cc +6 -6
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +5 -5
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +15 -14
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +15 -15
- data/src/core/lib/iomgr/ev_poll_posix.cc +11 -11
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +5 -4
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
- data/src/core/lib/iomgr/iocp_windows.cc +8 -8
- data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
- data/src/core/lib/iomgr/lockfree_event.cc +2 -2
- data/src/core/lib/iomgr/polling_entity.cc +3 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_windows.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
- data/src/core/lib/iomgr/tcp_posix.cc +42 -42
- data/src/core/lib/iomgr/tcp_server.cc +5 -0
- data/src/core/lib/iomgr/tcp_server.h +7 -0
- data/src/core/lib/iomgr/tcp_server_posix.cc +47 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +68 -29
- data/src/core/lib/iomgr/tcp_windows.cc +7 -7
- data/src/core/lib/iomgr/timer_generic.cc +2 -2
- data/src/core/lib/iomgr/timer_manager.cc +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
- data/src/core/lib/promise/activity.cc +2 -2
- data/src/core/lib/promise/activity.h +6 -6
- data/src/core/lib/promise/context.h +2 -2
- data/src/core/lib/promise/detail/join_state.h +9 -9
- data/src/core/lib/promise/detail/seq_state.h +13 -13
- data/src/core/lib/promise/detail/status.h +2 -2
- data/src/core/lib/promise/for_each.h +5 -5
- data/src/core/lib/promise/interceptor_list.h +2 -2
- data/src/core/lib/promise/latch.h +7 -7
- data/src/core/lib/promise/mpsc.cc +26 -26
- data/src/core/lib/promise/mpsc.h +2 -2
- data/src/core/lib/promise/observable.h +4 -4
- data/src/core/lib/promise/party.cc +32 -25
- data/src/core/lib/promise/party.h +16 -19
- data/src/core/lib/promise/pipe.h +15 -15
- data/src/core/lib/promise/poll.h +5 -4
- data/src/core/lib/promise/promise.h +0 -2
- data/src/core/lib/promise/sleep.cc +3 -1
- data/src/core/lib/promise/status_flag.h +7 -7
- data/src/core/lib/promise/try_join.h +2 -2
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resource_quota/arena.h +15 -2
- data/src/core/lib/resource_quota/connection_quota.cc +9 -7
- data/src/core/lib/resource_quota/memory_quota.cc +45 -24
- data/src/core/lib/resource_quota/memory_quota.h +48 -16
- data/src/core/lib/resource_quota/telemetry.h +54 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -2
- data/src/core/lib/resource_tracker/resource_tracker.cc +33 -0
- data/src/core/lib/resource_tracker/resource_tracker.h +46 -0
- data/src/core/lib/security/authorization/audit_logging.cc +5 -5
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +2 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -2
- data/src/core/lib/surface/call.cc +16 -14
- data/src/core/lib/surface/call.h +1 -1
- data/src/core/lib/surface/call_utils.cc +2 -2
- data/src/core/lib/surface/call_utils.h +2 -2
- data/src/core/lib/surface/channel.cc +4 -4
- data/src/core/lib/surface/channel_create.cc +10 -6
- data/src/core/lib/surface/channel_init.cc +80 -23
- data/src/core/lib/surface/channel_init.h +26 -11
- data/src/core/lib/surface/completion_queue.cc +17 -16
- data/src/core/lib/surface/completion_queue_factory.cc +7 -7
- data/src/core/lib/surface/connection_context.h +45 -2
- data/src/core/lib/surface/filter_stack_call.cc +12 -23
- data/src/core/lib/surface/filter_stack_call.h +3 -4
- data/src/core/lib/surface/legacy_channel.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.h +3 -3
- data/src/core/lib/transport/promise_endpoint.cc +3 -3
- data/src/core/lib/transport/promise_endpoint.h +8 -8
- data/src/core/lib/transport/timeout_encoding.cc +4 -4
- data/src/core/load_balancing/child_policy_handler.cc +4 -4
- data/src/core/load_balancing/endpoint_list.cc +2 -2
- data/src/core/load_balancing/grpclb/grpclb.cc +24 -24
- data/src/core/load_balancing/health_check_client.cc +4 -4
- data/src/core/load_balancing/health_check_client_internal.h +2 -2
- data/src/core/load_balancing/lb_policy_registry.cc +2 -2
- data/src/core/load_balancing/oob_backend_metric.cc +4 -4
- data/src/core/load_balancing/oob_backend_metric_internal.h +2 -2
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
- data/src/core/load_balancing/pick_first/pick_first.cc +14 -14
- data/src/core/load_balancing/priority/priority.cc +23 -24
- data/src/core/load_balancing/ring_hash/ring_hash.cc +3 -3
- data/src/core/load_balancing/rls/rls.cc +13 -13
- data/src/core/load_balancing/round_robin/round_robin.cc +9 -9
- data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +3 -3
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +33 -26
- data/src/core/load_balancing/weighted_target/weighted_target.cc +5 -5
- data/src/core/load_balancing/xds/cds.cc +76 -32
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +3 -3
- data/src/core/load_balancing/xds/xds_override_host.cc +4 -4
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +33 -33
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -10
- data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -3
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +2 -2
- data/src/core/resolver/endpoint_addresses.cc +3 -3
- data/src/core/resolver/endpoint_addresses.h +3 -0
- data/src/core/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +41 -54
- data/src/core/resolver/polling_resolver.cc +3 -3
- data/src/core/resolver/resolver_registry.cc +5 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +5 -5
- data/src/core/resolver/xds/xds_resolver.cc +9 -9
- data/src/core/server/server.cc +38 -38
- data/src/core/server/server_call_tracer_filter.h +4 -4
- data/src/core/server/server_config_selector_filter.cc +2 -2
- data/src/core/server/xds_server_config_fetcher.cc +9 -8
- data/src/core/service_config/service_config_impl.h +2 -2
- data/src/core/telemetry/call_tracer.cc +39 -49
- data/src/core/telemetry/call_tracer.h +199 -22
- data/src/core/telemetry/histogram.h +205 -0
- data/src/core/telemetry/instrument.cc +719 -0
- data/src/core/telemetry/instrument.h +932 -0
- data/src/core/telemetry/metrics.cc +13 -5
- data/src/core/telemetry/metrics.h +3 -1
- data/src/core/telemetry/stats_data.cc +0 -19
- data/src/core/telemetry/stats_data.h +0 -19
- data/src/core/transport/auth_context.cc +2 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +78 -45
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -0
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +39 -31
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +3 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +3 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +7 -7
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +3 -3
- data/src/core/tsi/fake_transport_security.cc +4 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +4 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +9 -9
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +3 -3
- data/src/core/tsi/ssl_transport_security.cc +26 -25
- data/src/core/tsi/ssl_transport_security_utils.cc +9 -9
- data/src/core/util/chunked_vector.h +4 -4
- data/src/core/util/event_log.cc +2 -2
- data/src/core/util/gcp_metadata_query.cc +2 -2
- data/src/core/util/grpc_check.cc +22 -0
- data/src/core/util/grpc_check.h +103 -0
- data/src/core/util/http_client/httpcli.cc +3 -3
- data/src/core/util/http_client/parser.cc +4 -4
- data/src/core/util/latent_see.h +7 -4
- data/src/core/util/lru_cache.h +4 -4
- data/src/core/util/memory_usage.h +16 -0
- data/src/core/util/posix/directory_reader.cc +3 -2
- data/src/core/util/posix/sync.cc +24 -24
- data/src/core/util/postmortem_emit.cc +52 -0
- data/src/core/util/postmortem_emit.h +30 -0
- data/src/core/util/ref_counted_ptr.h +5 -0
- data/src/core/util/trie_lookup.h +170 -0
- data/src/core/util/unique_ptr_with_bitset.h +5 -5
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +6 -1
- data/src/core/xds/grpc/xds_certificate_provider.cc +3 -3
- data/src/core/xds/grpc/xds_client_grpc.cc +34 -15
- data/src/core/xds/grpc/xds_client_grpc.h +4 -1
- data/src/core/xds/grpc/xds_cluster_parser.cc +2 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- data/src/core/xds/grpc/xds_endpoint_parser.cc +2 -2
- data/src/core/xds/grpc/xds_http_filter_registry.cc +4 -3
- data/src/core/xds/grpc/xds_listener_parser.cc +3 -3
- data/src/core/xds/grpc/xds_matcher.cc +277 -0
- data/src/core/xds/grpc/xds_matcher.h +432 -0
- data/src/core/xds/grpc/xds_matcher_action.cc +47 -0
- data/src/core/xds/grpc/xds_matcher_action.h +48 -0
- data/src/core/xds/grpc/xds_matcher_context.cc +29 -0
- data/src/core/xds/grpc/xds_matcher_context.h +46 -0
- data/src/core/xds/grpc/xds_matcher_input.cc +79 -0
- data/src/core/xds/grpc/xds_matcher_input.h +105 -0
- data/src/core/xds/grpc/xds_matcher_parse.cc +356 -0
- data/src/core/xds/grpc/xds_matcher_parse.h +39 -0
- data/src/core/xds/grpc/xds_metadata.cc +4 -3
- data/src/core/xds/grpc/xds_route_config_parser.cc +6 -6
- data/src/core/xds/grpc/xds_routing.cc +3 -3
- data/src/core/xds/grpc/xds_transport_grpc.cc +10 -10
- data/src/core/xds/xds_client/lrs_client.cc +6 -6
- data/src/core/xds/xds_client/xds_client.cc +9 -9
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
- data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
- metadata +37 -2
@@ -41,12 +41,27 @@
|
|
41
41
|
|
42
42
|
namespace grpc_core {
|
43
43
|
|
44
|
-
//
|
45
|
-
//
|
46
|
-
//
|
47
|
-
//
|
48
|
-
//
|
49
|
-
//
|
44
|
+
// 🚨🚨🚨 REFACTORING IN PROGRESS 🚨🚨🚨
|
45
|
+
//
|
46
|
+
// There are significant changes in flight for this file.
|
47
|
+
// It's worth checking in with ctiller before making substantial changes.
|
48
|
+
//
|
49
|
+
// General theme: we're moving to a concrete set of CallTracer types, and
|
50
|
+
// thinning the interface down - the result will be more commonality between
|
51
|
+
// tracer implementations, and less indirect calls out to the tracers.
|
52
|
+
|
53
|
+
// Inheritance hierarchy for concrete types:
|
54
|
+
//
|
55
|
+
// CallSpan (wraps CallTracerAnnotationInterface)
|
56
|
+
// |
|
57
|
+
// +-- CallTracer (wraps CallTracerInterface)
|
58
|
+
// | |
|
59
|
+
// | +-- CallAttemptTracer
|
60
|
+
// | | (wraps ClientCallTracerInterface::CallAttemptTracer)
|
61
|
+
// | |
|
62
|
+
// | +-- ServerCallTracer (wraps ServerCallTracerInterface)
|
63
|
+
// |
|
64
|
+
// +-- ClientCallTracer (wraps ClientCallTracerInterface)
|
50
65
|
|
51
66
|
// The base class for all tracer implementations.
|
52
67
|
class CallTracerAnnotationInterface {
|
@@ -148,6 +163,7 @@ class ClientCallTracerInterface : public CallTracerAnnotationInterface {
|
|
148
163
|
kXdsServiceName, // not public
|
149
164
|
kXdsServiceNamespace, // not public
|
150
165
|
kLocality,
|
166
|
+
kBackendService,
|
151
167
|
kSize // should be last
|
152
168
|
};
|
153
169
|
|
@@ -228,42 +244,203 @@ class ServerCallTracerFactory {
|
|
228
244
|
static absl::string_view ChannelArgName();
|
229
245
|
};
|
230
246
|
|
231
|
-
//
|
247
|
+
// Concrete class for a call span.
|
248
|
+
// Wraps a CallTracerAnnotationInterface.
|
249
|
+
class CallSpan {
|
250
|
+
public:
|
251
|
+
explicit CallSpan(CallTracerAnnotationInterface* interface)
|
252
|
+
: interface_(interface) {}
|
253
|
+
|
254
|
+
void RecordAnnotation(absl::string_view annotation) {
|
255
|
+
interface_->RecordAnnotation(annotation);
|
256
|
+
}
|
257
|
+
void RecordAnnotation(
|
258
|
+
const CallTracerAnnotationInterface::Annotation& annotation) {
|
259
|
+
interface_->RecordAnnotation(annotation);
|
260
|
+
}
|
261
|
+
std::string TraceId() { return interface_->TraceId(); }
|
262
|
+
std::string SpanId() { return interface_->SpanId(); }
|
263
|
+
bool IsSampled() { return interface_->IsSampled(); }
|
264
|
+
|
265
|
+
CallTracerAnnotationInterface* span_impl() { return interface_; }
|
266
|
+
|
267
|
+
protected:
|
268
|
+
~CallSpan() = default;
|
269
|
+
|
270
|
+
private:
|
271
|
+
#ifndef NDEBUG
|
272
|
+
virtual void VirtualMethodToEnsureDownCastBuildsInDebug() {}
|
273
|
+
#endif
|
274
|
+
|
275
|
+
CallTracerAnnotationInterface* interface_;
|
276
|
+
};
|
277
|
+
|
278
|
+
// Concrete class for a call tracer.
|
279
|
+
// Wraps a CallTracerInterface.
|
280
|
+
class CallTracer : public CallSpan {
|
281
|
+
public:
|
282
|
+
explicit CallTracer(CallTracerInterface* interface)
|
283
|
+
: CallSpan(interface), interface_(interface) {}
|
284
|
+
|
285
|
+
void RecordSendInitialMetadata(grpc_metadata_batch* send_initial_metadata) {
|
286
|
+
interface_->RecordSendInitialMetadata(send_initial_metadata);
|
287
|
+
}
|
288
|
+
void RecordSendTrailingMetadata(grpc_metadata_batch* send_trailing_metadata) {
|
289
|
+
interface_->RecordSendTrailingMetadata(send_trailing_metadata);
|
290
|
+
}
|
291
|
+
void RecordSendMessage(const Message& send_message) {
|
292
|
+
interface_->RecordSendMessage(send_message);
|
293
|
+
}
|
294
|
+
void RecordSendCompressedMessage(const Message& send_compressed_message) {
|
295
|
+
interface_->RecordSendCompressedMessage(send_compressed_message);
|
296
|
+
}
|
297
|
+
void RecordReceivedInitialMetadata(
|
298
|
+
grpc_metadata_batch* recv_initial_metadata) {
|
299
|
+
interface_->RecordReceivedInitialMetadata(recv_initial_metadata);
|
300
|
+
}
|
301
|
+
void RecordReceivedMessage(const Message& recv_message) {
|
302
|
+
interface_->RecordReceivedMessage(recv_message);
|
303
|
+
}
|
304
|
+
void RecordReceivedDecompressedMessage(
|
305
|
+
const Message& recv_decompressed_message) {
|
306
|
+
interface_->RecordReceivedDecompressedMessage(recv_decompressed_message);
|
307
|
+
}
|
308
|
+
void RecordCancel(grpc_error_handle cancel_error) {
|
309
|
+
interface_->RecordCancel(cancel_error);
|
310
|
+
}
|
311
|
+
void RecordIncomingBytes(
|
312
|
+
const CallTracerInterface::TransportByteSize& transport_byte_size) {
|
313
|
+
interface_->RecordIncomingBytes(transport_byte_size);
|
314
|
+
}
|
315
|
+
void RecordOutgoingBytes(
|
316
|
+
const CallTracerInterface::TransportByteSize& transport_byte_size) {
|
317
|
+
interface_->RecordOutgoingBytes(transport_byte_size);
|
318
|
+
}
|
319
|
+
std::shared_ptr<TcpCallTracer> StartNewTcpTrace() {
|
320
|
+
return interface_->StartNewTcpTrace();
|
321
|
+
}
|
322
|
+
|
323
|
+
protected:
|
324
|
+
~CallTracer() = default;
|
325
|
+
|
326
|
+
private:
|
327
|
+
CallTracerInterface* interface_;
|
328
|
+
};
|
329
|
+
|
330
|
+
// Concrete class for a client call tracer.
|
331
|
+
// Wraps a ClientCallTracerInterface.
|
332
|
+
class ClientCallTracer final : public CallSpan {
|
333
|
+
public:
|
334
|
+
explicit ClientCallTracer(ClientCallTracerInterface* interface)
|
335
|
+
: CallSpan(interface), interface_(interface) {}
|
336
|
+
|
337
|
+
ClientCallTracerInterface::CallAttemptTracer* StartNewAttempt(
|
338
|
+
bool is_transparent_retry) {
|
339
|
+
return interface_->StartNewAttempt(is_transparent_retry);
|
340
|
+
}
|
341
|
+
|
342
|
+
private:
|
343
|
+
ClientCallTracerInterface* interface_;
|
344
|
+
};
|
345
|
+
|
346
|
+
// Concrete class for a client call attempt tracer.
|
347
|
+
// Wraps a ClientCallTracerInterface::CallAttemptTracer.
|
348
|
+
class CallAttemptTracer final : public CallTracer {
|
349
|
+
public:
|
350
|
+
explicit CallAttemptTracer(
|
351
|
+
ClientCallTracerInterface::CallAttemptTracer* interface)
|
352
|
+
: CallTracer(interface), interface_(interface) {}
|
353
|
+
|
354
|
+
void RecordReceivedTrailingMetadata(
|
355
|
+
absl::Status status, grpc_metadata_batch* recv_trailing_metadata,
|
356
|
+
const grpc_transport_stream_stats* transport_stream_stats) {
|
357
|
+
interface_->RecordReceivedTrailingMetadata(status, recv_trailing_metadata,
|
358
|
+
transport_stream_stats);
|
359
|
+
}
|
360
|
+
void RecordEnd() { interface_->RecordEnd(); }
|
361
|
+
void SetOptionalLabel(
|
362
|
+
ClientCallTracerInterface::CallAttemptTracer::OptionalLabelKey key,
|
363
|
+
RefCountedStringValue value) {
|
364
|
+
interface_->SetOptionalLabel(key, value);
|
365
|
+
}
|
366
|
+
|
367
|
+
private:
|
368
|
+
ClientCallTracerInterface::CallAttemptTracer* interface_;
|
369
|
+
};
|
370
|
+
|
371
|
+
// Concrete class for a server call tracer.
|
372
|
+
// Wraps a ServerCallTracerInterface.
|
373
|
+
class ServerCallTracer final : public CallTracer {
|
374
|
+
public:
|
375
|
+
explicit ServerCallTracer(ServerCallTracerInterface* interface)
|
376
|
+
: CallTracer(interface), interface_(interface) {}
|
377
|
+
|
378
|
+
void RecordReceivedTrailingMetadata(
|
379
|
+
grpc_metadata_batch* recv_trailing_metadata) {
|
380
|
+
interface_->RecordReceivedTrailingMetadata(recv_trailing_metadata);
|
381
|
+
}
|
382
|
+
void RecordEnd(const grpc_call_final_info* final_info) {
|
383
|
+
interface_->RecordEnd(final_info);
|
384
|
+
}
|
385
|
+
|
386
|
+
private:
|
387
|
+
ServerCallTracerInterface* interface_;
|
388
|
+
};
|
389
|
+
|
390
|
+
// Convenience functions to set call tracer on a call context. Allows setting
|
232
391
|
// multiple call tracers to a single call. It is only valid to add client call
|
233
392
|
// tracers before the client_channel filter sees the send_initial_metadata op.
|
234
|
-
void
|
235
|
-
|
393
|
+
void SetClientCallTracer(Arena* arena,
|
394
|
+
absl::Span<ClientCallTracerInterface* const> tracer);
|
236
395
|
|
237
396
|
// TODO(yashykt): We want server call tracers to be registered through the
|
238
397
|
// ServerCallTracerFactory, which has yet to be made into a list.
|
239
|
-
void
|
240
|
-
|
398
|
+
void SetServerCallTracer(Arena* arena,
|
399
|
+
absl::Span<ServerCallTracerInterface* const> tracer);
|
241
400
|
|
242
401
|
template <>
|
243
|
-
struct ArenaContextType<
|
244
|
-
static void Destroy(
|
402
|
+
struct ArenaContextType<CallTracer> {
|
403
|
+
static void Destroy(CallTracer*) {}
|
245
404
|
};
|
246
405
|
|
247
406
|
template <>
|
248
|
-
struct ArenaContextType<
|
249
|
-
static void Destroy(
|
407
|
+
struct ArenaContextType<CallSpan> {
|
408
|
+
static void Destroy(CallSpan*) {}
|
250
409
|
};
|
251
410
|
|
252
411
|
template <>
|
253
|
-
struct ContextSubclass<
|
254
|
-
using Base =
|
412
|
+
struct ContextSubclass<CallAttemptTracer> {
|
413
|
+
using Base = CallTracer;
|
255
414
|
};
|
256
415
|
|
257
416
|
template <>
|
258
|
-
struct ContextSubclass<
|
259
|
-
using Base =
|
417
|
+
struct ContextSubclass<ServerCallTracer> {
|
418
|
+
using Base = CallTracer;
|
260
419
|
};
|
261
420
|
|
262
421
|
template <>
|
263
|
-
struct ContextSubclass<
|
264
|
-
using Base =
|
422
|
+
struct ContextSubclass<ClientCallTracer> {
|
423
|
+
using Base = CallSpan;
|
265
424
|
};
|
266
425
|
|
426
|
+
inline ClientCallTracer* WrapClientCallTracer(
|
427
|
+
ClientCallTracerInterface* interface, Arena* arena) {
|
428
|
+
if (interface == nullptr) return nullptr;
|
429
|
+
return arena->ManagedNew<ClientCallTracer>(interface);
|
430
|
+
}
|
431
|
+
|
432
|
+
inline ServerCallTracer* WrapServerCallTracer(
|
433
|
+
ServerCallTracerInterface* interface, Arena* arena) {
|
434
|
+
if (interface == nullptr) return nullptr;
|
435
|
+
return arena->ManagedNew<ServerCallTracer>(interface);
|
436
|
+
}
|
437
|
+
|
438
|
+
inline CallAttemptTracer* WrapCallAttemptTracer(
|
439
|
+
ClientCallTracerInterface::CallAttemptTracer* interface, Arena* arena) {
|
440
|
+
if (interface == nullptr) return nullptr;
|
441
|
+
return arena->ManagedNew<CallAttemptTracer>(interface);
|
442
|
+
}
|
443
|
+
|
267
444
|
} // namespace grpc_core
|
268
445
|
|
269
|
-
#endif // GRPC_SRC_CORE_TELEMETRY_CALL_TRACER_H
|
446
|
+
#endif // GRPC_SRC_CORE_TELEMETRY_CALL_TRACER_H
|
@@ -0,0 +1,205 @@
|
|
1
|
+
// Copyright 2025 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_HISTOGRAM_H
|
16
|
+
#define GRPC_SRC_CORE_TELEMETRY_HISTOGRAM_H
|
17
|
+
|
18
|
+
#include <cmath>
|
19
|
+
#include <cstddef>
|
20
|
+
#include <cstdint>
|
21
|
+
#include <optional>
|
22
|
+
#include <vector>
|
23
|
+
|
24
|
+
#include "absl/log/log.h"
|
25
|
+
#include "absl/strings/str_join.h"
|
26
|
+
#include "absl/types/span.h"
|
27
|
+
#include "src/core/util/grpc_check.h"
|
28
|
+
|
29
|
+
namespace grpc_core {
|
30
|
+
|
31
|
+
// Bucket layout for a histogram.
|
32
|
+
//
|
33
|
+
// The bucket layout is a vector of bucket boundaries. The bucket with index i
|
34
|
+
// collects values in the half-open interval [bounds[i-1], bounds[i]).
|
35
|
+
//
|
36
|
+
// Bucket 0 includes all values less than bounds[0]. Similarly, bucket
|
37
|
+
// bounds.size() - 1 includes all values greater than bounds.back().
|
38
|
+
//
|
39
|
+
// The bucket layout must be sorted in ascending order.
|
40
|
+
using HistogramBuckets = absl::Span<const int64_t>;
|
41
|
+
|
42
|
+
// Returns the bucket index for the given value in the given bounds.
|
43
|
+
// The bounds must be sorted in ascending order.
|
44
|
+
// The bounds array holds the upper bound of the bucket with the given index.
|
45
|
+
inline int64_t BucketInBoundsFor(absl::Span<const int64_t> bounds,
|
46
|
+
int64_t value) {
|
47
|
+
GRPC_CHECK(!bounds.empty());
|
48
|
+
if (value < bounds[0]) return 0;
|
49
|
+
if (value > bounds.back()) return bounds.size() - 1;
|
50
|
+
// Find the first element in bounds strictly greater than value
|
51
|
+
auto it = std::upper_bound(bounds.begin(), bounds.end(), value);
|
52
|
+
if (it == bounds.end()) return bounds.size() - 1;
|
53
|
+
// The bucket index is the index of the element just before it.
|
54
|
+
return std::distance(bounds.begin(), it);
|
55
|
+
}
|
56
|
+
|
57
|
+
class LinearHistogramShape {
|
58
|
+
public:
|
59
|
+
LinearHistogramShape(int64_t min, int64_t max) : min_(min), max_(max) {}
|
60
|
+
|
61
|
+
size_t buckets() const { return max_ - min_ + 1; }
|
62
|
+
size_t BucketFor(int64_t value) const {
|
63
|
+
if (value < min_) return 0;
|
64
|
+
if (value > max_) return buckets() - 1;
|
65
|
+
return value - min_;
|
66
|
+
}
|
67
|
+
|
68
|
+
private:
|
69
|
+
int64_t min_;
|
70
|
+
int64_t max_;
|
71
|
+
};
|
72
|
+
|
73
|
+
class ExponentialHistogramShape {
|
74
|
+
public:
|
75
|
+
ExponentialHistogramShape(int64_t max, size_t buckets)
|
76
|
+
: max_(max), buckets_(buckets) {
|
77
|
+
first_non_trivial_ = -1;
|
78
|
+
GRPC_CHECK_GT(max, 0);
|
79
|
+
GRPC_CHECK_LT(buckets, 1000000000u);
|
80
|
+
if (max <= static_cast<int64_t>(buckets)) {
|
81
|
+
for (size_t i = 0; i < static_cast<size_t>(max); ++i) {
|
82
|
+
bounds_.push_back(i + 1);
|
83
|
+
}
|
84
|
+
first_non_trivial_ = max;
|
85
|
+
buckets_ = max;
|
86
|
+
return;
|
87
|
+
}
|
88
|
+
int64_t first_bucket = std::ceil(std::pow(max, 1.0 / (buckets_ + 1)));
|
89
|
+
if (first_bucket <= 1) first_bucket = 1;
|
90
|
+
if (first_bucket != 1) first_non_trivial_ = 0;
|
91
|
+
bounds_.push_back(first_bucket);
|
92
|
+
while (bounds_.size() < buckets) {
|
93
|
+
int64_t nextb;
|
94
|
+
int64_t prevb = bounds_.empty() ? 0 : bounds_.back();
|
95
|
+
if (bounds_.size() == buckets - 1) {
|
96
|
+
nextb = max;
|
97
|
+
} else {
|
98
|
+
double mul = std::pow(static_cast<double>(max) / prevb,
|
99
|
+
1.0 / (buckets - bounds_.size()));
|
100
|
+
nextb = static_cast<long long>(std::ceil(bounds_.back() * mul));
|
101
|
+
}
|
102
|
+
if (nextb <= bounds_.back() + 1) {
|
103
|
+
nextb = bounds_.back() + 1;
|
104
|
+
} else if (first_non_trivial_ == -1) {
|
105
|
+
first_non_trivial_ = bounds_.size();
|
106
|
+
}
|
107
|
+
bounds_.push_back(nextb);
|
108
|
+
}
|
109
|
+
GRPC_CHECK_EQ(bounds_.size(), buckets_);
|
110
|
+
if (first_non_trivial_ == -1) {
|
111
|
+
first_non_trivial_ = max_;
|
112
|
+
offset_ = 0;
|
113
|
+
shift_ = 0;
|
114
|
+
return;
|
115
|
+
}
|
116
|
+
offset_ = DoubleToUint(first_non_trivial_);
|
117
|
+
for (shift_ = 63; shift_ > 0; --shift_) {
|
118
|
+
bool found_alias = false;
|
119
|
+
for (size_t i = first_non_trivial_ + 1; i < bounds_.size(); ++i) {
|
120
|
+
if ((DoubleToUint(bounds_[i]) - offset_) >> shift_ ==
|
121
|
+
(DoubleToUint(bounds_[i - 1]) - offset_) >> shift_) {
|
122
|
+
found_alias = true;
|
123
|
+
break;
|
124
|
+
}
|
125
|
+
}
|
126
|
+
if (!found_alias) {
|
127
|
+
break;
|
128
|
+
}
|
129
|
+
}
|
130
|
+
GRPC_CHECK_GE(shift_, 0u);
|
131
|
+
GRPC_CHECK_LT(shift_, 64u);
|
132
|
+
for (size_t i = 0; i <= (DoubleToUint(max_) - offset_) >> shift_; ++i) {
|
133
|
+
lookup_table_.push_back(
|
134
|
+
BucketInBoundsFor(bounds_, UintToDouble((i << shift_) + offset_)));
|
135
|
+
}
|
136
|
+
}
|
137
|
+
|
138
|
+
ExponentialHistogramShape(const ExponentialHistogramShape&) = delete;
|
139
|
+
ExponentialHistogramShape& operator=(const ExponentialHistogramShape&) =
|
140
|
+
delete;
|
141
|
+
ExponentialHistogramShape(ExponentialHistogramShape&&) = default;
|
142
|
+
ExponentialHistogramShape& operator=(ExponentialHistogramShape&&) = default;
|
143
|
+
|
144
|
+
size_t buckets() const { return buckets_; }
|
145
|
+
size_t BucketFor(int64_t value) const {
|
146
|
+
if (value >= max_) return buckets_ - 1;
|
147
|
+
if (value < first_non_trivial_) {
|
148
|
+
if (value < 0) return 0;
|
149
|
+
return value;
|
150
|
+
}
|
151
|
+
auto index = (DoubleToUint(value) - offset_) >> shift_;
|
152
|
+
size_t bucket = lookup_table_[index];
|
153
|
+
GRPC_DCHECK_LT(bucket, buckets_) << absl::StrJoin(lookup_table_, ",");
|
154
|
+
GRPC_DCHECK_LT(bucket, bounds_.size()) << absl::StrJoin(bounds_, ",");
|
155
|
+
while (bucket < bounds_.size() - 1 && value >= bounds_[bucket]) {
|
156
|
+
++bucket;
|
157
|
+
}
|
158
|
+
while (bucket > 0 && value < bounds_[bucket - 1]) {
|
159
|
+
--bucket;
|
160
|
+
}
|
161
|
+
GRPC_DCHECK_LT(value, bounds_[bucket]);
|
162
|
+
return bucket;
|
163
|
+
}
|
164
|
+
|
165
|
+
HistogramBuckets bounds() const { return bounds_; }
|
166
|
+
absl::Span<const size_t> lookup_table() const { return lookup_table_; }
|
167
|
+
|
168
|
+
private:
|
169
|
+
union DblUint {
|
170
|
+
double dbl;
|
171
|
+
uint64_t uint;
|
172
|
+
};
|
173
|
+
|
174
|
+
static double UintToDouble(uint64_t x) {
|
175
|
+
union DblUint {
|
176
|
+
double dbl;
|
177
|
+
uint64_t uint;
|
178
|
+
};
|
179
|
+
DblUint val;
|
180
|
+
val.uint = x;
|
181
|
+
return val.dbl;
|
182
|
+
}
|
183
|
+
|
184
|
+
static uint64_t DoubleToUint(double x) {
|
185
|
+
union DblUint {
|
186
|
+
double dbl;
|
187
|
+
uint64_t uint;
|
188
|
+
};
|
189
|
+
DblUint val;
|
190
|
+
val.dbl = x;
|
191
|
+
return val.uint;
|
192
|
+
}
|
193
|
+
|
194
|
+
int64_t max_;
|
195
|
+
int64_t first_non_trivial_;
|
196
|
+
uint64_t offset_;
|
197
|
+
uint64_t shift_;
|
198
|
+
std::vector<size_t> lookup_table_;
|
199
|
+
std::vector<int64_t> bounds_;
|
200
|
+
size_t buckets_;
|
201
|
+
};
|
202
|
+
|
203
|
+
} // namespace grpc_core
|
204
|
+
|
205
|
+
#endif // GRPC_SRC_CORE_TELEMETRY_HISTOGRAM_H
|