grpc 1.73.0 → 1.74.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 +38 -17
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +11 -5
- data/include/grpc/event_engine/event_engine.h +74 -17
- data/include/grpc/grpc_posix.h +20 -1
- data/include/grpc/impl/channel_arg_names.h +2 -4
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/support/json.h +24 -0
- data/src/core/call/interception_chain.h +7 -11
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +270 -181
- data/src/core/channelz/channelz.h +168 -55
- data/src/core/channelz/channelz_registry.cc +2 -1
- data/src/core/channelz/channelz_registry.h +24 -0
- data/src/core/channelz/property_list.cc +357 -0
- data/src/core/channelz/property_list.h +202 -0
- data/src/core/channelz/ztrace_collector.h +3 -2
- data/src/core/client_channel/backup_poller.cc +17 -2
- data/src/core/client_channel/client_channel.cc +17 -28
- data/src/core/client_channel/client_channel_filter.cc +19 -29
- data/src/core/client_channel/config_selector.h +8 -2
- data/src/core/client_channel/dynamic_filters.cc +5 -6
- data/src/core/client_channel/dynamic_filters.h +1 -1
- data/src/core/client_channel/global_subchannel_pool.cc +4 -1
- data/src/core/client_channel/retry_filter.cc +21 -27
- data/src/core/client_channel/retry_filter.h +10 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
- data/src/core/client_channel/retry_interceptor.cc +30 -44
- data/src/core/client_channel/retry_interceptor.h +18 -17
- data/src/core/client_channel/retry_throttle.cc +46 -61
- data/src/core/client_channel/retry_throttle.h +17 -39
- data/src/core/client_channel/subchannel.cc +43 -19
- data/src/core/client_channel/subchannel.h +8 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +1 -0
- data/src/core/config/core_configuration.h +11 -0
- data/src/core/credentials/call/call_creds_registry.h +125 -0
- data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
- data/src/core/credentials/call/jwt_util.cc +70 -0
- data/src/core/credentials/call/jwt_util.h +32 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
- data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
- data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
- data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
- data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
- data/src/core/filter/auth/auth_filters.h +0 -25
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- data/src/core/handshaker/handshaker.cc +23 -14
- data/src/core/handshaker/handshaker.h +3 -0
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
- data/src/core/handshaker/security/secure_endpoint.cc +70 -25
- data/src/core/handshaker/security/security_handshaker.cc +4 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
- data/src/core/lib/channel/channel_args.cc +15 -0
- data/src/core/lib/channel/channel_args.h +3 -0
- data/src/core/lib/channel/channel_stack.cc +22 -23
- data/src/core/lib/channel/channel_stack.h +9 -7
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
- data/src/core/lib/channel/promise_based_filter.h +5 -5
- data/src/core/lib/debug/trace_impl.h +0 -1
- data/src/core/lib/event_engine/ares_resolver.cc +165 -46
- data/src/core/lib/event_engine/ares_resolver.h +48 -2
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
- data/src/core/lib/event_engine/event_engine.cc +7 -0
- data/src/core/lib/event_engine/extensions/channelz.h +10 -6
- data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
- data/src/core/lib/event_engine/shim.cc +9 -0
- data/src/core/lib/event_engine/shim.h +3 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
- data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
- data/src/core/lib/experiments/experiments.cc +45 -93
- data/src/core/lib/experiments/experiments.h +21 -51
- data/src/core/lib/iomgr/endpoint.cc +4 -3
- data/src/core/lib/iomgr/endpoint.h +7 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
- data/src/core/lib/iomgr/tcp_posix.cc +12 -6
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +1 -0
- data/src/core/lib/promise/arena_promise.h +23 -7
- data/src/core/lib/promise/detail/promise_factory.h +10 -0
- data/src/core/lib/promise/detail/promise_like.h +118 -11
- data/src/core/lib/promise/detail/promise_variant.h +50 -0
- data/src/core/lib/promise/detail/seq_state.h +687 -548
- data/src/core/lib/promise/if.h +20 -0
- data/src/core/lib/promise/inter_activity_latch.h +147 -0
- data/src/core/lib/promise/inter_activity_mutex.h +547 -0
- data/src/core/lib/promise/loop.h +65 -3
- data/src/core/lib/promise/map.h +24 -0
- data/src/core/lib/promise/match_promise.h +103 -0
- data/src/core/lib/promise/mpsc.cc +425 -0
- data/src/core/lib/promise/mpsc.h +490 -0
- data/src/core/lib/promise/party.cc +50 -1
- data/src/core/lib/promise/party.h +66 -1
- data/src/core/lib/promise/race.h +31 -0
- data/src/core/lib/promise/seq.h +4 -1
- data/src/core/lib/promise/status_flag.h +7 -0
- data/src/core/lib/promise/try_seq.h +4 -1
- data/src/core/lib/promise/wait_set.cc +28 -0
- data/src/core/lib/promise/wait_set.h +86 -0
- data/src/core/lib/resource_quota/arena.h +19 -0
- data/src/core/lib/slice/slice.h +5 -0
- data/src/core/lib/surface/channel_create.cc +88 -13
- data/src/core/lib/surface/channel_create.h +4 -0
- data/src/core/lib/surface/channel_init.cc +164 -47
- data/src/core/lib/surface/channel_init.h +64 -1
- data/src/core/lib/surface/filter_stack_call.cc +18 -9
- data/src/core/lib/surface/init.cc +6 -15
- data/src/core/lib/surface/legacy_channel.cc +3 -5
- data/src/core/lib/surface/legacy_channel.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +110 -0
- data/src/core/lib/transport/promise_endpoint.h +307 -0
- data/src/core/load_balancing/child_policy_handler.cc +2 -4
- data/src/core/load_balancing/delegating_helper.h +2 -3
- data/src/core/load_balancing/health_check_client.cc +1 -5
- data/src/core/load_balancing/lb_policy.h +1 -3
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/xds/xds_config.cc +6 -3
- data/src/core/resolver/xds/xds_config.h +9 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
- data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +31 -11
- data/src/core/server/server.cc +83 -12
- data/src/core/server/server.h +21 -2
- data/src/core/server/xds_server_config_fetcher.cc +63 -25
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/stats_data.cc +233 -207
- data/src/core/telemetry/stats_data.h +250 -153
- data/src/core/telemetry/tcp_tracer.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
- data/src/core/tsi/fake_transport_security.cc +17 -0
- data/src/core/tsi/ssl_transport_security.cc +2 -0
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/backoff.cc +1 -5
- data/src/core/util/backoff.h +1 -0
- data/src/core/util/down_cast.h +1 -1
- data/src/core/util/function_signature.h +15 -1
- data/src/core/util/http_client/httpcli.cc +12 -5
- data/src/core/util/http_client/httpcli.h +4 -1
- data/src/core/util/latent_see.h +8 -5
- data/src/core/util/log.cc +4 -0
- data/src/core/util/memory_usage.h +268 -0
- data/src/core/util/per_cpu.cc +2 -0
- data/src/core/util/per_cpu.h +7 -0
- data/src/core/util/shared_bit_gen.h +20 -0
- data/src/core/util/single_set_ptr.h +2 -2
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +53 -2
- data/src/core/util/wait_for_single_owner.cc +31 -0
- data/src/core/util/wait_for_single_owner.h +24 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
- data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
- data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_filter.h +7 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
- data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
- data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
- data/src/core/xds/grpc/xds_server_grpc.h +10 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
- data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
- data/src/core/xds/xds_client/xds_client.cc +26 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -8
- data/src/ruby/ext/grpc/rb_channel.c +72 -568
- data/src/ruby/ext/grpc/rb_channel.h +0 -3
- data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
- data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
- data/src/ruby/ext/grpc/rb_grpc.c +9 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/ext/grpc/rb_loader.c +0 -4
- data/src/ruby/ext/grpc/rb_server.c +31 -50
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/core_spec.rb +22 -0
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
- data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
- data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
- data/third_party/abseil-cpp/absl/base/config.h +20 -129
- data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
- data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
- data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
- data/third_party/abseil-cpp/absl/base/options.h +3 -80
- data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
- data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
- data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
- data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
- data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
- data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
- data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
- data/third_party/abseil-cpp/absl/log/check.h +2 -1
- data/third_party/abseil-cpp/absl/log/globals.h +4 -5
- data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
- data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
- data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
- data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
- data/third_party/abseil-cpp/absl/log/log.h +48 -35
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
- data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- data/third_party/abseil-cpp/absl/random/random.h +88 -53
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
- data/third_party/abseil-cpp/absl/status/status.cc +4 -8
- data/third_party/abseil-cpp/absl/status/status.h +8 -8
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
- data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
- data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
- data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
- data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
- data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
- data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
- data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
- data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
- data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- data/third_party/abseil-cpp/absl/time/time.h +20 -15
- data/third_party/abseil-cpp/absl/types/optional.h +7 -747
- data/third_party/abseil-cpp/absl/types/span.h +13 -11
- data/third_party/abseil-cpp/absl/types/variant.h +5 -784
- data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
- metadata +72 -20
- data/src/core/lib/event_engine/forkable.cc +0 -105
- data/src/core/lib/event_engine/forkable.h +0 -67
- data/src/core/lib/iomgr/python_util.h +0 -46
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
- data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
- data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -32,6 +32,7 @@
|
|
32
32
|
#include <optional>
|
33
33
|
#include <set>
|
34
34
|
#include <string>
|
35
|
+
#include <type_traits>
|
35
36
|
#include <utility>
|
36
37
|
|
37
38
|
#include "absl/base/thread_annotations.h"
|
@@ -50,6 +51,7 @@
|
|
50
51
|
#include "src/core/util/time.h"
|
51
52
|
#include "src/core/util/time_precise.h"
|
52
53
|
#include "src/core/util/useful.h"
|
54
|
+
#include "src/proto/grpc/channelz/v2/channelz.upb.h"
|
53
55
|
|
54
56
|
// Channel arg key for channelz node.
|
55
57
|
#define GRPC_ARG_CHANNELZ_CHANNEL_NODE \
|
@@ -80,6 +82,8 @@ namespace channelz {
|
|
80
82
|
class SocketNode;
|
81
83
|
class ListenSocketNode;
|
82
84
|
class DataSource;
|
85
|
+
class DataSink;
|
86
|
+
class PropertyList;
|
83
87
|
class ZTrace;
|
84
88
|
|
85
89
|
namespace testing {
|
@@ -123,8 +127,42 @@ class BaseNode : public DualRefCounted<BaseNode> {
|
|
123
127
|
return "unknown";
|
124
128
|
}
|
125
129
|
|
130
|
+
static absl::string_view EntityTypeToKind(EntityType type) {
|
131
|
+
switch (type) {
|
132
|
+
case EntityType::kTopLevelChannel:
|
133
|
+
return "channel";
|
134
|
+
case EntityType::kInternalChannel:
|
135
|
+
return "internal_channel";
|
136
|
+
case EntityType::kSubchannel:
|
137
|
+
return "subchannel";
|
138
|
+
case EntityType::kServer:
|
139
|
+
return "server";
|
140
|
+
case EntityType::kListenSocket:
|
141
|
+
return "listen_socket";
|
142
|
+
case EntityType::kSocket:
|
143
|
+
return "socket";
|
144
|
+
case EntityType::kCall:
|
145
|
+
return "call";
|
146
|
+
}
|
147
|
+
}
|
148
|
+
|
149
|
+
static std::optional<EntityType> KindToEntityType(absl::string_view kind) {
|
150
|
+
if (kind == "channel") return EntityType::kTopLevelChannel;
|
151
|
+
if (kind == "internal_channel") return EntityType::kInternalChannel;
|
152
|
+
if (kind == "subchannel") return EntityType::kSubchannel;
|
153
|
+
if (kind == "server") return EntityType::kServer;
|
154
|
+
if (kind == "listen_socket") return EntityType::kListenSocket;
|
155
|
+
if (kind == "socket") return EntityType::kSocket;
|
156
|
+
if (kind == "call") return EntityType::kCall;
|
157
|
+
return std::nullopt;
|
158
|
+
}
|
159
|
+
|
126
160
|
protected:
|
127
|
-
BaseNode(EntityType type, std::string name);
|
161
|
+
BaseNode(EntityType type, size_t max_trace_memory, std::string name);
|
162
|
+
|
163
|
+
// Leaf derived types should call NodeConstructed() in their constructors
|
164
|
+
// to complete the initialization.
|
165
|
+
void NodeConstructed();
|
128
166
|
|
129
167
|
public:
|
130
168
|
void Orphaned() override;
|
@@ -173,8 +211,25 @@ class BaseNode : public DualRefCounted<BaseNode> {
|
|
173
211
|
absl::AnyInvocable<void(Json output)> callback);
|
174
212
|
Json::Object AdditionalInfo();
|
175
213
|
|
214
|
+
const ChannelTrace& trace() const { return trace_; }
|
215
|
+
template <typename... Args>
|
216
|
+
ChannelTrace::Node NewTraceNode(Args&&... args) {
|
217
|
+
return trace_.NewNode(std::forward<Args>(args)...);
|
218
|
+
}
|
219
|
+
ChannelTrace& mutable_trace() { return trace_; }
|
220
|
+
|
221
|
+
void SerializeEntity(grpc_channelz_v2_Entity* entity, upb_Arena* arena);
|
222
|
+
|
223
|
+
std::string SerializeEntityToString();
|
224
|
+
|
176
225
|
protected:
|
177
226
|
void PopulateJsonFromDataSources(Json::Object& json);
|
227
|
+
// V2: Add any node-specific data to the sink.
|
228
|
+
// This is information that used to be provided by overloaded RenderJson
|
229
|
+
// methods.
|
230
|
+
// Over time the hope is that we can eliminate this method and move all
|
231
|
+
// functionality into data sources.
|
232
|
+
virtual void AddNodeSpecificData(DataSink sink);
|
178
233
|
|
179
234
|
private:
|
180
235
|
// to allow the ChannelzRegistry to set uuid_ under its lock.
|
@@ -188,6 +243,7 @@ class BaseNode : public DualRefCounted<BaseNode> {
|
|
188
243
|
intptr_t UuidSlow();
|
189
244
|
|
190
245
|
const EntityType type_;
|
246
|
+
bool node_constructed_called_ = false;
|
191
247
|
uint64_t orphaned_index_ = 0; // updated by registry
|
192
248
|
std::atomic<intptr_t> uuid_;
|
193
249
|
std::string name_;
|
@@ -198,8 +254,22 @@ class BaseNode : public DualRefCounted<BaseNode> {
|
|
198
254
|
BaseNode* next_; // updated by registry
|
199
255
|
mutable Mutex parent_mu_;
|
200
256
|
ParentSet parents_ ABSL_GUARDED_BY(parent_mu_);
|
257
|
+
ChannelTrace trace_;
|
201
258
|
};
|
202
259
|
|
260
|
+
namespace detail {
|
261
|
+
inline ChannelTrace* LogOutputFrom(BaseNode* n) {
|
262
|
+
if (n == nullptr) return nullptr;
|
263
|
+
return LogOutputFrom(n->mutable_trace());
|
264
|
+
}
|
265
|
+
|
266
|
+
template <typename N>
|
267
|
+
inline std::enable_if_t<std::is_base_of_v<BaseNode, N>, ChannelTrace*>
|
268
|
+
LogOutputFrom(const RefCountedPtr<N>& n) {
|
269
|
+
return LogOutputFrom(n.get());
|
270
|
+
}
|
271
|
+
} // namespace detail
|
272
|
+
|
203
273
|
class ZTrace {
|
204
274
|
public:
|
205
275
|
virtual ~ZTrace() = default;
|
@@ -209,15 +279,79 @@ class ZTrace {
|
|
209
279
|
absl::AnyInvocable<void(Json)>) = 0;
|
210
280
|
};
|
211
281
|
|
282
|
+
// This class is used to collect additional information about the channelz
|
283
|
+
// node. It's the backing implementation for DataSink. channelz users should
|
284
|
+
// use DataSink instead of this class directly.
|
285
|
+
// We form a shared_ptr<> around this class during collection.
|
286
|
+
// In DataSink we use a weak_ptr<> to allow rapid resource reclamation once
|
287
|
+
// the collection is complete (or has timed out).
|
288
|
+
class DataSinkImplementation {
|
289
|
+
public:
|
290
|
+
class Data {
|
291
|
+
public:
|
292
|
+
virtual ~Data() = default;
|
293
|
+
virtual Json::Object ToJson() = 0;
|
294
|
+
virtual void FillProto(google_protobuf_Any* any, upb_Arena* arena) = 0;
|
295
|
+
};
|
296
|
+
|
297
|
+
void AddData(absl::string_view name, std::unique_ptr<Data> data);
|
298
|
+
Json::Object Finalize(bool timed_out);
|
299
|
+
void Finalize(bool timed_out, grpc_channelz_v2_Entity* entity,
|
300
|
+
upb_Arena* arena);
|
301
|
+
|
302
|
+
private:
|
303
|
+
Mutex mu_;
|
304
|
+
std::map<std::string, std::unique_ptr<Data>> additional_info_
|
305
|
+
ABSL_GUARDED_BY(mu_);
|
306
|
+
};
|
307
|
+
|
308
|
+
// Wrapper around absl::AnyInvocable<void()> that is used to notify when the
|
309
|
+
// DataSink has completed.
|
310
|
+
// We hold a shared_ptr<> around this class in DataSink to keep knowledge of
|
311
|
+
// when the DataSink has completed.
|
312
|
+
class DataSinkCompletionNotification {
|
313
|
+
public:
|
314
|
+
explicit DataSinkCompletionNotification(absl::AnyInvocable<void()> callback)
|
315
|
+
: callback_(std::move(callback)) {}
|
316
|
+
~DataSinkCompletionNotification() { callback_(); }
|
317
|
+
|
318
|
+
private:
|
319
|
+
absl::AnyInvocable<void()> callback_;
|
320
|
+
};
|
321
|
+
|
212
322
|
class DataSink {
|
213
323
|
public:
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
324
|
+
DataSink(std::shared_ptr<DataSinkImplementation> impl,
|
325
|
+
std::shared_ptr<DataSinkCompletionNotification> notification)
|
326
|
+
: impl_(impl), notification_(std::move(notification)) {}
|
327
|
+
|
328
|
+
template <typename T>
|
329
|
+
std::void_t<decltype(std::declval<T>().TakeJsonObject())> AddData(
|
330
|
+
absl::string_view name, T value) {
|
331
|
+
class DataImpl final : public DataSinkImplementation::Data {
|
332
|
+
public:
|
333
|
+
explicit DataImpl(T value) : value_(std::move(value)) {}
|
334
|
+
Json::Object ToJson() override { return value_.TakeJsonObject(); }
|
335
|
+
void FillProto(google_protobuf_Any* any, upb_Arena* arena) override {
|
336
|
+
value_.FillAny(any, arena);
|
337
|
+
}
|
338
|
+
|
339
|
+
private:
|
340
|
+
T value_;
|
341
|
+
};
|
342
|
+
AddData(name, std::make_unique<DataImpl>(std::move(value)));
|
343
|
+
}
|
218
344
|
|
219
|
-
|
220
|
-
|
345
|
+
private:
|
346
|
+
void AddData(absl::string_view name,
|
347
|
+
std::unique_ptr<DataSinkImplementation::Data> data) {
|
348
|
+
auto impl = impl_.lock();
|
349
|
+
if (impl == nullptr) return;
|
350
|
+
impl->AddData(name, std::move(data));
|
351
|
+
}
|
352
|
+
|
353
|
+
std::weak_ptr<DataSinkImplementation> impl_;
|
354
|
+
std::shared_ptr<DataSinkCompletionNotification> notification_;
|
221
355
|
};
|
222
356
|
|
223
357
|
class DataSource {
|
@@ -227,7 +361,7 @@ class DataSource {
|
|
227
361
|
// Add any relevant json fragments to the output.
|
228
362
|
// This method must not cause the DataSource to be deleted, or else there will
|
229
363
|
// be a deadlock.
|
230
|
-
virtual void AddData(DataSink
|
364
|
+
virtual void AddData(DataSink) {}
|
231
365
|
|
232
366
|
// If this data source exports some ztrace, return it here.
|
233
367
|
virtual std::unique_ptr<ZTrace> GetZTrace(absl::string_view /*name*/) {
|
@@ -238,11 +372,15 @@ class DataSource {
|
|
238
372
|
~DataSource();
|
239
373
|
RefCountedPtr<BaseNode> channelz_node() { return node_; }
|
240
374
|
|
375
|
+
// This method must be called in the most derived class's constructor.
|
376
|
+
// It adds this data source to the node's list of data sources.
|
377
|
+
void SourceConstructed();
|
378
|
+
|
241
379
|
// This method must be called in the most derived class's destructor.
|
242
380
|
// It removes this data source from the node's list of data sources.
|
243
381
|
// If it is not called, then the AddData() function pointer may be invalid
|
244
382
|
// when the node is queried.
|
245
|
-
void
|
383
|
+
void SourceDestructing();
|
246
384
|
|
247
385
|
private:
|
248
386
|
RefCountedPtr<BaseNode> node_;
|
@@ -260,6 +398,7 @@ struct CallCounts {
|
|
260
398
|
}
|
261
399
|
|
262
400
|
void PopulateJson(Json::Object& json) const;
|
401
|
+
PropertyList ToPropertyList() const;
|
263
402
|
};
|
264
403
|
|
265
404
|
// This class is a helper class for channelz entities that deal with Channels,
|
@@ -319,7 +458,7 @@ class PerCpuCallCountingHelper final {
|
|
319
458
|
// Handles channelz bookkeeping for channels
|
320
459
|
class ChannelNode final : public BaseNode {
|
321
460
|
public:
|
322
|
-
ChannelNode(std::string target, size_t
|
461
|
+
ChannelNode(std::string target, size_t max_trace_memory,
|
323
462
|
bool is_internal_channel);
|
324
463
|
|
325
464
|
void Orphaned() override {
|
@@ -341,15 +480,6 @@ class ChannelNode final : public BaseNode {
|
|
341
480
|
Json RenderJson() override;
|
342
481
|
|
343
482
|
// proxy methods to composed classes.
|
344
|
-
void AddTraceEvent(ChannelTrace::Severity severity, const grpc_slice& data) {
|
345
|
-
trace_.AddTraceEvent(severity, data);
|
346
|
-
}
|
347
|
-
void AddTraceEventWithReference(ChannelTrace::Severity severity,
|
348
|
-
const grpc_slice& data,
|
349
|
-
RefCountedPtr<BaseNode> referenced_channel) {
|
350
|
-
trace_.AddTraceEventWithReference(severity, data,
|
351
|
-
std::move(referenced_channel));
|
352
|
-
}
|
353
483
|
void SetChannelArgs(const ChannelArgs& channel_args) {
|
354
484
|
channel_args_ = channel_args;
|
355
485
|
}
|
@@ -364,15 +494,14 @@ class ChannelNode final : public BaseNode {
|
|
364
494
|
CallCounts GetCallCounts() const { return call_counter_.GetCallCounts(); }
|
365
495
|
std::set<intptr_t> child_channels() const;
|
366
496
|
std::set<intptr_t> child_subchannels() const;
|
367
|
-
const ChannelTrace& trace() const { return trace_; }
|
368
497
|
const ChannelArgs& channel_args() const { return channel_args_; }
|
369
498
|
|
370
499
|
private:
|
371
500
|
void PopulateChildRefs(Json::Object* json);
|
501
|
+
void AddNodeSpecificData(DataSink sink) override;
|
372
502
|
|
373
503
|
std::string target_;
|
374
504
|
CallCountingHelper call_counter_;
|
375
|
-
ChannelTrace trace_;
|
376
505
|
// TODO(ctiller): keeping channel args here can create odd circular references
|
377
506
|
// that are hard to reason about. Consider moving this to a DataSource.
|
378
507
|
ChannelArgs channel_args_;
|
@@ -385,7 +514,7 @@ class ChannelNode final : public BaseNode {
|
|
385
514
|
// Handles channelz bookkeeping for subchannels
|
386
515
|
class SubchannelNode final : public BaseNode {
|
387
516
|
public:
|
388
|
-
SubchannelNode(std::string target_address, size_t
|
517
|
+
SubchannelNode(std::string target_address, size_t max_trace_memory);
|
389
518
|
~SubchannelNode() override;
|
390
519
|
|
391
520
|
void Orphaned() override {
|
@@ -404,18 +533,9 @@ class SubchannelNode final : public BaseNode {
|
|
404
533
|
Json RenderJson() override;
|
405
534
|
|
406
535
|
// proxy methods to composed classes.
|
407
|
-
void AddTraceEvent(ChannelTrace::Severity severity, const grpc_slice& data) {
|
408
|
-
trace_.AddTraceEvent(severity, data);
|
409
|
-
}
|
410
536
|
void SetChannelArgs(const ChannelArgs& channel_args) {
|
411
537
|
channel_args_ = channel_args;
|
412
538
|
}
|
413
|
-
void AddTraceEventWithReference(ChannelTrace::Severity severity,
|
414
|
-
const grpc_slice& data,
|
415
|
-
RefCountedPtr<BaseNode> referenced_channel) {
|
416
|
-
trace_.AddTraceEventWithReference(severity, data,
|
417
|
-
std::move(referenced_channel));
|
418
|
-
}
|
419
539
|
void RecordCallStarted() { call_counter_.RecordCallStarted(); }
|
420
540
|
void RecordCallFailed() { call_counter_.RecordCallFailed(); }
|
421
541
|
void RecordCallSucceeded() { call_counter_.RecordCallSucceeded(); }
|
@@ -423,23 +543,23 @@ class SubchannelNode final : public BaseNode {
|
|
423
543
|
const std::string& target() const { return target_; }
|
424
544
|
std::string connectivity_state() const;
|
425
545
|
CallCounts GetCallCounts() const { return call_counter_.GetCallCounts(); }
|
426
|
-
|
546
|
+
WeakRefCountedPtr<SocketNode> child_socket() const {
|
427
547
|
MutexLock lock(&socket_mu_);
|
428
548
|
return child_socket_;
|
429
549
|
}
|
430
|
-
const ChannelTrace& trace() const { return trace_; }
|
431
550
|
const ChannelArgs& channel_args() const { return channel_args_; }
|
432
551
|
|
433
552
|
private:
|
553
|
+
void AddNodeSpecificData(DataSink sink) override;
|
554
|
+
|
434
555
|
// Allows the channel trace test to access trace_.
|
435
556
|
friend class testing::SubchannelNodePeer;
|
436
557
|
|
437
558
|
std::atomic<grpc_connectivity_state> connectivity_state_{GRPC_CHANNEL_IDLE};
|
438
559
|
mutable Mutex socket_mu_;
|
439
|
-
|
560
|
+
WeakRefCountedPtr<SocketNode> child_socket_ ABSL_GUARDED_BY(socket_mu_);
|
440
561
|
std::string target_;
|
441
562
|
CallCountingHelper call_counter_;
|
442
|
-
ChannelTrace trace_;
|
443
563
|
// TODO(ctiller): keeping channel args here can create odd circular references
|
444
564
|
// that are hard to reason about. Consider moving this to a DataSource.
|
445
565
|
ChannelArgs channel_args_;
|
@@ -448,7 +568,7 @@ class SubchannelNode final : public BaseNode {
|
|
448
568
|
// Handles channelz bookkeeping for servers
|
449
569
|
class ServerNode final : public BaseNode {
|
450
570
|
public:
|
451
|
-
explicit ServerNode(size_t
|
571
|
+
explicit ServerNode(size_t max_trace_memory);
|
452
572
|
|
453
573
|
~ServerNode() override;
|
454
574
|
|
@@ -463,15 +583,6 @@ class ServerNode final : public BaseNode {
|
|
463
583
|
intptr_t max_results);
|
464
584
|
|
465
585
|
// proxy methods to composed classes.
|
466
|
-
void AddTraceEvent(ChannelTrace::Severity severity, const grpc_slice& data) {
|
467
|
-
trace_.AddTraceEvent(severity, data);
|
468
|
-
}
|
469
|
-
void AddTraceEventWithReference(ChannelTrace::Severity severity,
|
470
|
-
const grpc_slice& data,
|
471
|
-
RefCountedPtr<BaseNode> referenced_channel) {
|
472
|
-
trace_.AddTraceEventWithReference(severity, data,
|
473
|
-
std::move(referenced_channel));
|
474
|
-
}
|
475
586
|
void SetChannelArgs(const ChannelArgs& channel_args) {
|
476
587
|
channel_args_ = channel_args;
|
477
588
|
}
|
@@ -481,16 +592,16 @@ class ServerNode final : public BaseNode {
|
|
481
592
|
|
482
593
|
CallCounts GetCallCounts() const { return call_counter_.GetCallCounts(); }
|
483
594
|
|
484
|
-
std::map<intptr_t,
|
595
|
+
std::map<intptr_t, WeakRefCountedPtr<ListenSocketNode>> child_listen_sockets()
|
485
596
|
const;
|
486
|
-
std::map<intptr_t,
|
597
|
+
std::map<intptr_t, WeakRefCountedPtr<SocketNode>> child_sockets() const;
|
487
598
|
|
488
|
-
const ChannelTrace& trace() const { return trace_; }
|
489
599
|
const ChannelArgs& channel_args() const { return channel_args_; }
|
490
600
|
|
491
601
|
private:
|
602
|
+
void AddNodeSpecificData(DataSink sink) override;
|
603
|
+
|
492
604
|
PerCpuCallCountingHelper call_counter_;
|
493
|
-
ChannelTrace trace_;
|
494
605
|
// TODO(ctiller): keeping channel args here can create odd circular references
|
495
606
|
// that are hard to reason about. Consider moving this to a DataSource.
|
496
607
|
ChannelArgs channel_args_;
|
@@ -514,6 +625,7 @@ class SocketNode final : public BaseNode {
|
|
514
625
|
std::string remote_certificate;
|
515
626
|
|
516
627
|
Json RenderJson();
|
628
|
+
PropertyList ToPropertyList() const;
|
517
629
|
};
|
518
630
|
enum class ModelType { kUnset = 0, kTls = 1, kOther = 2 };
|
519
631
|
ModelType type = ModelType::kUnset;
|
@@ -521,6 +633,7 @@ class SocketNode final : public BaseNode {
|
|
521
633
|
std::optional<Json> other;
|
522
634
|
|
523
635
|
Json RenderJson();
|
636
|
+
PropertyList ToPropertyList() const;
|
524
637
|
|
525
638
|
static absl::string_view ChannelArgName() {
|
526
639
|
return GRPC_ARG_CHANNELZ_SECURITY;
|
@@ -529,11 +642,6 @@ class SocketNode final : public BaseNode {
|
|
529
642
|
static int ChannelArgsCompare(const Security* a, const Security* b) {
|
530
643
|
return QsortCompare(a, b);
|
531
644
|
}
|
532
|
-
|
533
|
-
grpc_arg MakeChannelArg() const;
|
534
|
-
|
535
|
-
static RefCountedPtr<Security> GetFromChannelArgs(
|
536
|
-
const grpc_channel_args* args);
|
537
645
|
};
|
538
646
|
|
539
647
|
SocketNode(std::string local, std::string remote, std::string name,
|
@@ -602,6 +710,7 @@ class SocketNode final : public BaseNode {
|
|
602
710
|
gpr_cycle_counter cycle_counter) const {
|
603
711
|
return gpr_format_timespec(gpr_cycle_counter_to_time(cycle_counter));
|
604
712
|
}
|
713
|
+
void AddNodeSpecificData(DataSink sink) override;
|
605
714
|
|
606
715
|
std::atomic<int64_t> streams_started_{0};
|
607
716
|
std::atomic<int64_t> streams_succeeded_{0};
|
@@ -627,13 +736,17 @@ class ListenSocketNode final : public BaseNode {
|
|
627
736
|
Json RenderJson() override;
|
628
737
|
|
629
738
|
private:
|
739
|
+
void AddNodeSpecificData(DataSink sink) override;
|
740
|
+
|
630
741
|
std::string local_addr_;
|
631
742
|
};
|
632
743
|
|
633
744
|
class CallNode final : public BaseNode {
|
634
745
|
public:
|
635
746
|
explicit CallNode(std::string name)
|
636
|
-
: BaseNode(EntityType::kCall, std::move(name)) {
|
747
|
+
: BaseNode(EntityType::kCall, 0, std::move(name)) {
|
748
|
+
NodeConstructed();
|
749
|
+
}
|
637
750
|
|
638
751
|
Json RenderJson() override;
|
639
752
|
};
|
@@ -288,7 +288,8 @@ WeakRefCountedPtr<BaseNode> ChannelzRegistry::InternalGet(intptr_t uuid) {
|
|
288
288
|
|
289
289
|
intptr_t ChannelzRegistry::InternalNumberNode(BaseNode* node) {
|
290
290
|
// node must be strongly owned still
|
291
|
-
node->
|
291
|
+
auto strong_node = node->RefIfNonZero();
|
292
|
+
if (strong_node == nullptr) return 0;
|
292
293
|
const size_t node_shard_index = NodeShardIndex(node);
|
293
294
|
NodeShard& node_shard = node_shards_[node_shard_index];
|
294
295
|
MutexLock index_lock(&index_mu_);
|
@@ -89,6 +89,12 @@ class ChannelzRegistry final {
|
|
89
89
|
start_channel_id);
|
90
90
|
}
|
91
91
|
|
92
|
+
static auto GetTopSockets(intptr_t start_socket_id) {
|
93
|
+
return Default()
|
94
|
+
->InternalGetObjects<SocketNode, BaseNode::EntityType::kSocket>(
|
95
|
+
start_socket_id);
|
96
|
+
}
|
97
|
+
|
92
98
|
static std::string GetTopChannelsJson(intptr_t start_channel_id);
|
93
99
|
static std::string GetServersJson(intptr_t start_server_id);
|
94
100
|
|
@@ -107,6 +113,16 @@ class ChannelzRegistry final {
|
|
107
113
|
max_results);
|
108
114
|
}
|
109
115
|
|
116
|
+
static WeakRefCountedPtr<BaseNode> GetNode(intptr_t uuid) {
|
117
|
+
return Default()->InternalGet(uuid);
|
118
|
+
}
|
119
|
+
|
120
|
+
static std::tuple<std::vector<WeakRefCountedPtr<BaseNode>>, bool>
|
121
|
+
GetNodesOfType(intptr_t start_node, BaseNode::EntityType type,
|
122
|
+
size_t max_results) {
|
123
|
+
return Default()->InternalGetNodesOfType(start_node, type, max_results);
|
124
|
+
}
|
125
|
+
|
110
126
|
// Test only helper function to dump the JSON representation to std out.
|
111
127
|
// This can aid in debugging channelz code.
|
112
128
|
static void LogAllEntities() { Default()->InternalLogAllEntities(); }
|
@@ -210,6 +226,14 @@ class ChannelzRegistry final {
|
|
210
226
|
max_results);
|
211
227
|
}
|
212
228
|
|
229
|
+
std::tuple<std::vector<WeakRefCountedPtr<BaseNode>>, bool>
|
230
|
+
InternalGetNodesOfType(intptr_t start_node, BaseNode::EntityType type,
|
231
|
+
size_t max_results) {
|
232
|
+
return QueryNodes(
|
233
|
+
start_node, [type](const BaseNode* n) { return n->type() == type; },
|
234
|
+
max_results);
|
235
|
+
}
|
236
|
+
|
213
237
|
template <typename T, BaseNode::EntityType entity_type>
|
214
238
|
WeakRefCountedPtr<T> InternalGetTyped(intptr_t uuid) {
|
215
239
|
WeakRefCountedPtr<BaseNode> node = InternalGet(uuid);
|