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
@@ -30,22 +30,28 @@
|
|
30
30
|
#include <string>
|
31
31
|
#include <tuple>
|
32
32
|
|
33
|
+
#include "absl/cleanup/cleanup.h"
|
33
34
|
#include "absl/log/check.h"
|
34
35
|
#include "absl/status/statusor.h"
|
35
36
|
#include "absl/strings/escaping.h"
|
36
37
|
#include "absl/strings/str_cat.h"
|
37
38
|
#include "absl/strings/strip.h"
|
38
39
|
#include "src/core/channelz/channelz_registry.h"
|
40
|
+
#include "src/core/channelz/property_list.h"
|
39
41
|
#include "src/core/lib/address_utils/parse_address.h"
|
40
42
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
41
43
|
#include "src/core/lib/channel/channel_args.h"
|
42
44
|
#include "src/core/lib/iomgr/resolved_address.h"
|
43
45
|
#include "src/core/lib/transport/connectivity_state.h"
|
44
46
|
#include "src/core/util/json/json_writer.h"
|
47
|
+
#include "src/core/util/notification.h"
|
45
48
|
#include "src/core/util/string.h"
|
46
49
|
#include "src/core/util/time.h"
|
50
|
+
#include "src/core/util/time_precise.h"
|
51
|
+
#include "src/core/util/upb_utils.h"
|
47
52
|
#include "src/core/util/uri.h"
|
48
53
|
#include "src/core/util/useful.h"
|
54
|
+
#include "src/proto/grpc/channelz/v2/channelz.upb.h"
|
49
55
|
|
50
56
|
namespace grpc_core {
|
51
57
|
namespace channelz {
|
@@ -54,123 +60,54 @@ namespace channelz {
|
|
54
60
|
// DataSink
|
55
61
|
//
|
56
62
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
}
|
63
|
-
|
64
|
-
void Add(std::vector<RefCountedPtr<BaseNode>> nodes) {
|
65
|
-
for (auto& node : nodes) Add(std::move(node));
|
66
|
-
}
|
67
|
-
|
68
|
-
// Calls AddAdditionalInfo to export the collected child objects.
|
69
|
-
void Finalize(DataSink& sink) {
|
70
|
-
if (child_objects_.empty()) return;
|
71
|
-
Json::Object subobjects;
|
72
|
-
for (const auto& [type, child_objects] : child_objects_) {
|
73
|
-
std::string key;
|
74
|
-
switch (type) {
|
75
|
-
case BaseNode::EntityType::kTopLevelChannel:
|
76
|
-
case BaseNode::EntityType::kSubchannel:
|
77
|
-
case BaseNode::EntityType::kListenSocket:
|
78
|
-
case BaseNode::EntityType::kServer:
|
79
|
-
case BaseNode::EntityType::kInternalChannel: {
|
80
|
-
LOG(ERROR)
|
81
|
-
<< "Nodes of type " << BaseNode::EntityTypeString(type)
|
82
|
-
<< " not supported for child object collection in DataSink";
|
83
|
-
continue;
|
84
|
-
}
|
85
|
-
case BaseNode::EntityType::kSocket:
|
86
|
-
key = "subSockets";
|
87
|
-
break;
|
88
|
-
case BaseNode::EntityType::kCall:
|
89
|
-
key = "calls";
|
90
|
-
break;
|
91
|
-
}
|
92
|
-
Json::Array uuids;
|
93
|
-
uuids.reserve(child_objects.size());
|
94
|
-
for (int64_t uuid : child_objects) {
|
95
|
-
uuids.push_back(Json::FromNumber(uuid));
|
96
|
-
}
|
97
|
-
subobjects[key] = Json::FromArray(std::move(uuids));
|
98
|
-
}
|
99
|
-
sink.AddAdditionalInfo("childObjects", std::move(subobjects));
|
100
|
-
}
|
101
|
-
|
102
|
-
private:
|
103
|
-
std::map<BaseNode::EntityType, std::set<int64_t>> child_objects_;
|
104
|
-
};
|
105
|
-
|
106
|
-
class JsonDataSink final : public DataSink {
|
107
|
-
public:
|
108
|
-
explicit JsonDataSink(Json::Object& output) : output_(output) {
|
109
|
-
CHECK(output_.find("additionalInfo") == output_.end());
|
110
|
-
}
|
111
|
-
~JsonDataSink() {
|
112
|
-
collector_.Finalize(*this);
|
113
|
-
if (additional_info_ != nullptr) {
|
114
|
-
output_["additionalInfo"] =
|
115
|
-
Json::FromObject(std::move(*additional_info_));
|
116
|
-
}
|
117
|
-
}
|
118
|
-
|
119
|
-
void AddAdditionalInfo(absl::string_view name,
|
120
|
-
Json::Object additional_info) override {
|
121
|
-
if (additional_info_ == nullptr) {
|
122
|
-
additional_info_ = std::make_unique<Json::Object>();
|
123
|
-
}
|
124
|
-
additional_info_->emplace(name,
|
125
|
-
Json::FromObject(std::move(additional_info)));
|
126
|
-
}
|
127
|
-
|
128
|
-
void AddChildObjects(
|
129
|
-
std::vector<RefCountedPtr<BaseNode>> child_objects) override {
|
130
|
-
collector_.Add(std::move(child_objects));
|
131
|
-
}
|
132
|
-
|
133
|
-
private:
|
134
|
-
Json::Object& output_;
|
135
|
-
std::unique_ptr<Json::Object> additional_info_;
|
136
|
-
ChildObjectCollector collector_;
|
137
|
-
};
|
138
|
-
|
139
|
-
class ExplicitJsonDataSink final : public DataSink {
|
140
|
-
public:
|
141
|
-
void AddAdditionalInfo(absl::string_view name,
|
142
|
-
Json::Object additional_info) override {
|
143
|
-
additional_info_.emplace(name,
|
144
|
-
Json::FromObject(std::move(additional_info)));
|
145
|
-
}
|
63
|
+
void DataSinkImplementation::AddData(absl::string_view name,
|
64
|
+
std::unique_ptr<Data> data) {
|
65
|
+
MutexLock lock(&mu_);
|
66
|
+
additional_info_.emplace(name, std::move(data));
|
67
|
+
}
|
146
68
|
|
147
|
-
|
148
|
-
|
149
|
-
|
69
|
+
Json::Object DataSinkImplementation::Finalize(bool) {
|
70
|
+
MutexLock lock(&mu_);
|
71
|
+
Json::Object out;
|
72
|
+
for (auto& [name, additional_info] : additional_info_) {
|
73
|
+
out[name] = Json::FromObject(additional_info->ToJson());
|
150
74
|
}
|
75
|
+
return out;
|
76
|
+
}
|
151
77
|
|
152
|
-
|
153
|
-
|
154
|
-
|
78
|
+
void DataSinkImplementation::Finalize(bool timed_out,
|
79
|
+
grpc_channelz_v2_Entity* entity,
|
80
|
+
upb_Arena* arena) {
|
81
|
+
MutexLock lock(&mu_);
|
82
|
+
grpc_channelz_v2_Entity_set_timed_out(entity, timed_out);
|
83
|
+
for (auto& [name, additional_info] : additional_info_) {
|
84
|
+
auto* staple = grpc_channelz_v2_Entity_add_data(entity, arena);
|
85
|
+
grpc_channelz_v2_Data_set_name(staple,
|
86
|
+
CopyStdStringToUpbString(name, arena));
|
87
|
+
additional_info->FillProto(
|
88
|
+
grpc_channelz_v2_Data_mutable_value(staple, arena), arena);
|
155
89
|
}
|
156
|
-
|
157
|
-
private:
|
158
|
-
Json::Object additional_info_;
|
159
|
-
ChildObjectCollector collector_;
|
160
|
-
};
|
161
|
-
} // namespace
|
90
|
+
}
|
162
91
|
|
163
92
|
//
|
164
93
|
// BaseNode
|
165
94
|
//
|
166
95
|
|
167
|
-
BaseNode::BaseNode(EntityType type, std::string name)
|
168
|
-
: type_(type),
|
169
|
-
|
96
|
+
BaseNode::BaseNode(EntityType type, size_t max_trace_memory, std::string name)
|
97
|
+
: type_(type),
|
98
|
+
uuid_(-1),
|
99
|
+
name_(std::move(name)),
|
100
|
+
trace_(max_trace_memory) {}
|
101
|
+
|
102
|
+
void BaseNode::NodeConstructed() {
|
103
|
+
node_constructed_called_ = true;
|
170
104
|
ChannelzRegistry::Register(this);
|
171
105
|
}
|
172
106
|
|
173
|
-
void BaseNode::Orphaned() {
|
107
|
+
void BaseNode::Orphaned() {
|
108
|
+
DCHECK(node_constructed_called_);
|
109
|
+
ChannelzRegistry::Unregister(this);
|
110
|
+
}
|
174
111
|
|
175
112
|
intptr_t BaseNode::UuidSlow() { return ChannelzRegistry::NumberNode(this); }
|
176
113
|
|
@@ -180,20 +117,25 @@ std::string BaseNode::RenderJsonString() {
|
|
180
117
|
}
|
181
118
|
|
182
119
|
void BaseNode::PopulateJsonFromDataSources(Json::Object& json) {
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
data_source->AddData(sink);
|
187
|
-
}
|
120
|
+
auto info = AdditionalInfo();
|
121
|
+
if (info.empty()) return;
|
122
|
+
json["additionalInfo"] = Json::FromObject(std::move(info));
|
188
123
|
}
|
189
124
|
|
190
125
|
Json::Object BaseNode::AdditionalInfo() {
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
126
|
+
auto done = std::make_shared<Notification>();
|
127
|
+
auto sink_impl = std::make_shared<DataSinkImplementation>();
|
128
|
+
{
|
129
|
+
MutexLock lock(&data_sources_mu_);
|
130
|
+
auto done_notifier = std::make_shared<DataSinkCompletionNotification>(
|
131
|
+
[done]() { done->Notify(); });
|
132
|
+
for (DataSource* data_source : data_sources_) {
|
133
|
+
data_source->AddData(DataSink(sink_impl, done_notifier));
|
134
|
+
}
|
195
135
|
}
|
196
|
-
|
136
|
+
bool completed =
|
137
|
+
done->WaitForNotificationWithTimeout(absl::Milliseconds(100));
|
138
|
+
return sink_impl->Finalize(!completed);
|
197
139
|
}
|
198
140
|
|
199
141
|
void BaseNode::RunZTrace(
|
@@ -235,28 +177,86 @@ void BaseNode::RunZTrace(
|
|
235
177
|
ztrace->Run(deadline, std::move(args), event_engine, std::move(callback));
|
236
178
|
}
|
237
179
|
|
180
|
+
void BaseNode::SerializeEntity(grpc_channelz_v2_Entity* entity,
|
181
|
+
upb_Arena* arena) {
|
182
|
+
grpc_channelz_v2_Entity_set_id(entity, uuid());
|
183
|
+
grpc_channelz_v2_Entity_set_kind(
|
184
|
+
entity, StdStringToUpbString(EntityTypeToKind(type_)));
|
185
|
+
{
|
186
|
+
MutexLock lock(&parent_mu_);
|
187
|
+
auto* parents =
|
188
|
+
grpc_channelz_v2_Entity_resize_parents(entity, parents_.size(), arena);
|
189
|
+
for (const auto& parent : parents_) {
|
190
|
+
*parents++ = parent->uuid();
|
191
|
+
}
|
192
|
+
}
|
193
|
+
grpc_channelz_v2_Entity_set_orphaned(entity, orphaned_index_ != 0);
|
194
|
+
|
195
|
+
auto done = std::make_shared<Notification>();
|
196
|
+
auto sink_impl = std::make_shared<DataSinkImplementation>();
|
197
|
+
auto done_notifier = std::make_shared<DataSinkCompletionNotification>(
|
198
|
+
[done]() { done->Notify(); });
|
199
|
+
auto make_data_sink = [sink_impl, done_notifier]() {
|
200
|
+
return DataSink(sink_impl, done_notifier);
|
201
|
+
};
|
202
|
+
AddNodeSpecificData(make_data_sink());
|
203
|
+
{
|
204
|
+
MutexLock lock(&data_sources_mu_);
|
205
|
+
for (DataSource* data_source : data_sources_) {
|
206
|
+
data_source->AddData(make_data_sink());
|
207
|
+
}
|
208
|
+
}
|
209
|
+
bool completed =
|
210
|
+
done->WaitForNotificationWithTimeout(absl::Milliseconds(100));
|
211
|
+
sink_impl->Finalize(!completed, entity, arena);
|
212
|
+
|
213
|
+
trace_.Render(entity, arena);
|
214
|
+
}
|
215
|
+
|
216
|
+
void BaseNode::AddNodeSpecificData(DataSink) {
|
217
|
+
// Default implementation does nothing.
|
218
|
+
}
|
219
|
+
|
220
|
+
std::string BaseNode::SerializeEntityToString() {
|
221
|
+
upb_Arena* arena = upb_Arena_New();
|
222
|
+
auto cleanup = absl::MakeCleanup([arena]() { upb_Arena_Free(arena); });
|
223
|
+
grpc_channelz_v2_Entity* entity = grpc_channelz_v2_Entity_new(arena);
|
224
|
+
SerializeEntity(entity, arena);
|
225
|
+
size_t length;
|
226
|
+
auto* bytes = grpc_channelz_v2_Entity_serialize(entity, arena, &length);
|
227
|
+
return std::string(bytes, length);
|
228
|
+
}
|
229
|
+
|
238
230
|
//
|
239
231
|
// DataSource
|
240
232
|
//
|
241
233
|
|
242
|
-
DataSource::DataSource(RefCountedPtr<BaseNode> node) : node_(std::move(node)) {
|
243
|
-
if (node_ == nullptr) return;
|
244
|
-
MutexLock lock(&node_->data_sources_mu_);
|
245
|
-
node_->data_sources_.push_back(this);
|
246
|
-
}
|
234
|
+
DataSource::DataSource(RefCountedPtr<BaseNode> node) : node_(std::move(node)) {}
|
247
235
|
|
248
236
|
DataSource::~DataSource() {
|
249
237
|
DCHECK(node_ == nullptr) << "DataSource must be ResetDataSource()'d in the "
|
250
238
|
"most derived class before destruction";
|
251
239
|
}
|
252
240
|
|
253
|
-
void DataSource::
|
241
|
+
void DataSource::SourceConstructed() {
|
242
|
+
if (node_ == nullptr) return;
|
243
|
+
MutexLock lock(&node_->data_sources_mu_);
|
244
|
+
node_->data_sources_.push_back(this);
|
245
|
+
}
|
246
|
+
|
247
|
+
void DataSource::SourceDestructing() {
|
254
248
|
RefCountedPtr<BaseNode> node = std::move(node_);
|
255
249
|
if (node == nullptr) return;
|
256
250
|
MutexLock lock(&node->data_sources_mu_);
|
257
|
-
node->data_sources_.
|
258
|
-
|
259
|
-
node->data_sources_.
|
251
|
+
for (size_t i = 0; i < node->data_sources_.size(); ++i) {
|
252
|
+
if (node->data_sources_[i] == this) {
|
253
|
+
std::swap(node->data_sources_[i], node->data_sources_.back());
|
254
|
+
node->data_sources_.pop_back();
|
255
|
+
return;
|
256
|
+
}
|
257
|
+
}
|
258
|
+
LOG(DFATAL) << "DataSource not found in node's data sources -- probably "
|
259
|
+
"SourceConstructed was not called";
|
260
260
|
}
|
261
261
|
|
262
262
|
//
|
@@ -295,6 +295,17 @@ void CallCounts::PopulateJson(Json::Object& json) const {
|
|
295
295
|
}
|
296
296
|
}
|
297
297
|
|
298
|
+
PropertyList CallCounts::ToPropertyList() const {
|
299
|
+
return PropertyList()
|
300
|
+
.Set("calls_started", calls_started)
|
301
|
+
.Set("calls_succeeded", calls_succeeded)
|
302
|
+
.Set("calls_failed", calls_failed)
|
303
|
+
.Set("last_call_started_timestamp", [this]() -> std::optional<Timestamp> {
|
304
|
+
if (last_call_started_cycle == 0) return std::nullopt;
|
305
|
+
return Timestamp::FromCycleCounterRoundDown(last_call_started_cycle);
|
306
|
+
}());
|
307
|
+
}
|
308
|
+
|
298
309
|
//
|
299
310
|
// PerCpuCallCountingHelper
|
300
311
|
//
|
@@ -335,13 +346,14 @@ CallCounts PerCpuCallCountingHelper::GetCallCounts() const {
|
|
335
346
|
// ChannelNode
|
336
347
|
//
|
337
348
|
|
338
|
-
ChannelNode::ChannelNode(std::string target, size_t
|
349
|
+
ChannelNode::ChannelNode(std::string target, size_t max_trace_memory,
|
339
350
|
bool is_internal_channel)
|
340
351
|
: BaseNode(is_internal_channel ? EntityType::kInternalChannel
|
341
352
|
: EntityType::kTopLevelChannel,
|
342
|
-
target),
|
343
|
-
target_(std::move(target))
|
344
|
-
|
353
|
+
max_trace_memory, target),
|
354
|
+
target_(std::move(target)) {
|
355
|
+
NodeConstructed();
|
356
|
+
}
|
345
357
|
|
346
358
|
const char* ChannelNode::GetChannelConnectivityStateChangeString(
|
347
359
|
grpc_connectivity_state state) {
|
@@ -405,7 +417,7 @@ Json ChannelNode::RenderJson() {
|
|
405
417
|
});
|
406
418
|
}
|
407
419
|
// Fill in the channel trace if applicable.
|
408
|
-
Json trace_json =
|
420
|
+
Json trace_json = trace().RenderJson();
|
409
421
|
if (trace_json.type() != Json::Type::kNull) {
|
410
422
|
data["trace"] = std::move(trace_json);
|
411
423
|
}
|
@@ -425,6 +437,14 @@ Json ChannelNode::RenderJson() {
|
|
425
437
|
return Json::FromObject(std::move(json));
|
426
438
|
}
|
427
439
|
|
440
|
+
void ChannelNode::AddNodeSpecificData(DataSink sink) {
|
441
|
+
sink.AddData("channel", PropertyList()
|
442
|
+
.Set("target", target_)
|
443
|
+
.Set("connectivity_state", connectivity_state()));
|
444
|
+
sink.AddData("call_counts", call_counter_.GetCallCounts().ToPropertyList());
|
445
|
+
sink.AddData("channel_args", channel_args_.ToPropertyList());
|
446
|
+
}
|
447
|
+
|
428
448
|
void ChannelNode::PopulateChildRefs(Json::Object* json) {
|
429
449
|
auto child_subchannels = this->child_subchannels();
|
430
450
|
auto child_channels = this->child_channels();
|
@@ -459,10 +479,11 @@ void ChannelNode::SetConnectivityState(grpc_connectivity_state state) {
|
|
459
479
|
//
|
460
480
|
|
461
481
|
SubchannelNode::SubchannelNode(std::string target_address,
|
462
|
-
size_t
|
463
|
-
: BaseNode(EntityType::kSubchannel, target_address),
|
464
|
-
target_(std::move(target_address))
|
465
|
-
|
482
|
+
size_t max_trace_memory)
|
483
|
+
: BaseNode(EntityType::kSubchannel, max_trace_memory, target_address),
|
484
|
+
target_(std::move(target_address)) {
|
485
|
+
NodeConstructed();
|
486
|
+
}
|
466
487
|
|
467
488
|
SubchannelNode::~SubchannelNode() {}
|
468
489
|
|
@@ -472,7 +493,8 @@ void SubchannelNode::UpdateConnectivityState(grpc_connectivity_state state) {
|
|
472
493
|
|
473
494
|
void SubchannelNode::SetChildSocket(RefCountedPtr<SocketNode> socket) {
|
474
495
|
MutexLock lock(&socket_mu_);
|
475
|
-
child_socket_ =
|
496
|
+
child_socket_ =
|
497
|
+
socket == nullptr ? nullptr : socket->WeakRefAsSubclass<SocketNode>();
|
476
498
|
}
|
477
499
|
|
478
500
|
std::string SubchannelNode::connectivity_state() const {
|
@@ -490,7 +512,7 @@ Json SubchannelNode::RenderJson() {
|
|
490
512
|
{"target", Json::FromString(target_)},
|
491
513
|
};
|
492
514
|
// Fill in the channel trace if applicable
|
493
|
-
Json trace_json =
|
515
|
+
Json trace_json = trace().RenderJson();
|
494
516
|
if (trace_json.type() != Json::Type::kNull) {
|
495
517
|
data["trace"] = std::move(trace_json);
|
496
518
|
}
|
@@ -504,7 +526,7 @@ Json SubchannelNode::RenderJson() {
|
|
504
526
|
{"data", Json::FromObject(std::move(data))},
|
505
527
|
};
|
506
528
|
// Populate the child socket.
|
507
|
-
|
529
|
+
WeakRefCountedPtr<SocketNode> child_socket;
|
508
530
|
{
|
509
531
|
MutexLock lock(&socket_mu_);
|
510
532
|
child_socket = child_socket_;
|
@@ -521,12 +543,22 @@ Json SubchannelNode::RenderJson() {
|
|
521
543
|
return Json::FromObject(std::move(object));
|
522
544
|
}
|
523
545
|
|
546
|
+
void SubchannelNode::AddNodeSpecificData(DataSink sink) {
|
547
|
+
sink.AddData("channel", PropertyList()
|
548
|
+
.Set("target", target_)
|
549
|
+
.Set("connectivity_state", connectivity_state()));
|
550
|
+
sink.AddData("call_counts", call_counter_.GetCallCounts().ToPropertyList());
|
551
|
+
sink.AddData("channel_args", channel_args_.ToPropertyList());
|
552
|
+
}
|
553
|
+
|
524
554
|
//
|
525
555
|
// ServerNode
|
526
556
|
//
|
527
557
|
|
528
|
-
ServerNode::ServerNode(size_t
|
529
|
-
: BaseNode(EntityType::kServer, "")
|
558
|
+
ServerNode::ServerNode(size_t max_trace_memory)
|
559
|
+
: BaseNode(EntityType::kServer, max_trace_memory, "") {
|
560
|
+
NodeConstructed();
|
561
|
+
}
|
530
562
|
|
531
563
|
ServerNode::~ServerNode() {}
|
532
564
|
|
@@ -555,7 +587,7 @@ std::string ServerNode::RenderServerSockets(intptr_t start_socket_id,
|
|
555
587
|
Json ServerNode::RenderJson() {
|
556
588
|
Json::Object data;
|
557
589
|
// Fill in the channel trace if applicable.
|
558
|
-
Json trace_json =
|
590
|
+
Json trace_json = trace().RenderJson();
|
559
591
|
if (trace_json.type() != Json::Type::kNull) {
|
560
592
|
data["trace"] = std::move(trace_json);
|
561
593
|
}
|
@@ -586,26 +618,31 @@ Json ServerNode::RenderJson() {
|
|
586
618
|
return Json::FromObject(std::move(object));
|
587
619
|
}
|
588
620
|
|
589
|
-
|
621
|
+
void ServerNode::AddNodeSpecificData(DataSink sink) {
|
622
|
+
sink.AddData("call_counts", call_counter_.GetCallCounts().ToPropertyList());
|
623
|
+
sink.AddData("channel_args", channel_args_.ToPropertyList());
|
624
|
+
}
|
625
|
+
|
626
|
+
std::map<intptr_t, WeakRefCountedPtr<ListenSocketNode>>
|
590
627
|
ServerNode::child_listen_sockets() const {
|
591
|
-
std::map<intptr_t,
|
628
|
+
std::map<intptr_t, WeakRefCountedPtr<ListenSocketNode>> result;
|
592
629
|
auto [children, _] = ChannelzRegistry::GetChildrenOfType(
|
593
630
|
0, this, BaseNode::EntityType::kListenSocket,
|
594
631
|
std::numeric_limits<size_t>::max());
|
595
632
|
for (const auto& child : children) {
|
596
|
-
result[child->uuid()] = child->
|
633
|
+
result[child->uuid()] = child->WeakRefAsSubclass<ListenSocketNode>();
|
597
634
|
}
|
598
635
|
return result;
|
599
636
|
}
|
600
637
|
|
601
|
-
std::map<intptr_t,
|
638
|
+
std::map<intptr_t, WeakRefCountedPtr<SocketNode>> ServerNode::child_sockets()
|
602
639
|
const {
|
603
|
-
std::map<intptr_t,
|
640
|
+
std::map<intptr_t, WeakRefCountedPtr<SocketNode>> result;
|
604
641
|
auto [children, _] = ChannelzRegistry::GetChildrenOfType(
|
605
642
|
0, this, BaseNode::EntityType::kSocket,
|
606
643
|
std::numeric_limits<size_t>::max());
|
607
644
|
for (const auto& child : children) {
|
608
|
-
result[child->uuid()] = child->
|
645
|
+
result[child->uuid()] = child->WeakRefAsSubclass<SocketNode>();
|
609
646
|
}
|
610
647
|
return result;
|
611
648
|
}
|
@@ -632,6 +669,27 @@ Json SocketNode::Security::Tls::RenderJson() {
|
|
632
669
|
return Json::FromObject(std::move(data));
|
633
670
|
}
|
634
671
|
|
672
|
+
PropertyList SocketNode::Security::Tls::ToPropertyList() const {
|
673
|
+
PropertyList result;
|
674
|
+
switch (type) {
|
675
|
+
case NameType::kUnset:
|
676
|
+
break;
|
677
|
+
case NameType::kStandardName:
|
678
|
+
result.Set("standard_name", name);
|
679
|
+
break;
|
680
|
+
case NameType::kOtherName:
|
681
|
+
result.Set("other_name", name);
|
682
|
+
break;
|
683
|
+
}
|
684
|
+
if (!local_certificate.empty()) {
|
685
|
+
result.Set("local_certificate", absl::Base64Escape(local_certificate));
|
686
|
+
}
|
687
|
+
if (!remote_certificate.empty()) {
|
688
|
+
result.Set("remote_certificate", absl::Base64Escape(remote_certificate));
|
689
|
+
}
|
690
|
+
return result;
|
691
|
+
}
|
692
|
+
|
635
693
|
//
|
636
694
|
// SocketNode::Security
|
637
695
|
//
|
@@ -655,38 +713,22 @@ Json SocketNode::Security::RenderJson() {
|
|
655
713
|
return Json::FromObject(std::move(data));
|
656
714
|
}
|
657
715
|
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
}
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
const grpc_arg_pointer_vtable kChannelArgVtable = {
|
675
|
-
SecurityArgCopy, SecurityArgDestroy, SecurityArgCmp};
|
676
|
-
|
677
|
-
} // namespace
|
678
|
-
|
679
|
-
grpc_arg SocketNode::Security::MakeChannelArg() const {
|
680
|
-
return grpc_channel_arg_pointer_create(
|
681
|
-
const_cast<char*>(GRPC_ARG_CHANNELZ_SECURITY),
|
682
|
-
const_cast<SocketNode::Security*>(this), &kChannelArgVtable);
|
683
|
-
}
|
684
|
-
|
685
|
-
RefCountedPtr<SocketNode::Security> SocketNode::Security::GetFromChannelArgs(
|
686
|
-
const grpc_channel_args* args) {
|
687
|
-
Security* security = grpc_channel_args_find_pointer<Security>(
|
688
|
-
args, GRPC_ARG_CHANNELZ_SECURITY);
|
689
|
-
return security != nullptr ? security->Ref() : nullptr;
|
716
|
+
PropertyList SocketNode::Security::ToPropertyList() const {
|
717
|
+
switch (type) {
|
718
|
+
case ModelType::kUnset:
|
719
|
+
break;
|
720
|
+
case ModelType::kTls:
|
721
|
+
if (tls) {
|
722
|
+
return tls->ToPropertyList();
|
723
|
+
}
|
724
|
+
break;
|
725
|
+
case ModelType::kOther:
|
726
|
+
if (other.has_value()) {
|
727
|
+
return PropertyList().Set("other", JsonDump(*other));
|
728
|
+
}
|
729
|
+
break;
|
730
|
+
}
|
731
|
+
return PropertyList();
|
690
732
|
}
|
691
733
|
|
692
734
|
//
|
@@ -736,10 +778,12 @@ void PopulateSocketAddressJson(Json::Object* json, const char* name,
|
|
736
778
|
|
737
779
|
SocketNode::SocketNode(std::string local, std::string remote, std::string name,
|
738
780
|
RefCountedPtr<Security> security)
|
739
|
-
: BaseNode(EntityType::kSocket, std::move(name)),
|
781
|
+
: BaseNode(EntityType::kSocket, 0, std::move(name)),
|
740
782
|
local_(std::move(local)),
|
741
783
|
remote_(std::move(remote)),
|
742
|
-
security_(std::move(security)) {
|
784
|
+
security_(std::move(security)) {
|
785
|
+
NodeConstructed();
|
786
|
+
}
|
743
787
|
|
744
788
|
void SocketNode::RecordStreamStartedFromLocal() {
|
745
789
|
streams_started_.fetch_add(1, std::memory_order_relaxed);
|
@@ -845,13 +889,54 @@ Json SocketNode::RenderJson() {
|
|
845
889
|
return Json::FromObject(std::move(object));
|
846
890
|
}
|
847
891
|
|
892
|
+
void SocketNode::AddNodeSpecificData(DataSink sink) {
|
893
|
+
auto convert_cycle_counter =
|
894
|
+
[](gpr_cycle_counter cycle_counter) -> std::optional<Timestamp> {
|
895
|
+
if (cycle_counter == 0) return std::nullopt;
|
896
|
+
return Timestamp::FromCycleCounterRoundDown(cycle_counter);
|
897
|
+
};
|
898
|
+
sink.AddData("socket",
|
899
|
+
PropertyList().Set("local", local_).Set("remote", remote_));
|
900
|
+
sink.AddData(
|
901
|
+
"call_counts",
|
902
|
+
PropertyList()
|
903
|
+
.Set("streams_started",
|
904
|
+
streams_started_.load(std::memory_order_relaxed))
|
905
|
+
.Set("streams_succeeded",
|
906
|
+
streams_succeeded_.load(std::memory_order_relaxed))
|
907
|
+
.Set("streams_failed",
|
908
|
+
streams_failed_.load(std::memory_order_relaxed))
|
909
|
+
.Set("messages_sent", messages_sent_.load(std::memory_order_relaxed))
|
910
|
+
.Set("messages_received",
|
911
|
+
messages_received_.load(std::memory_order_relaxed))
|
912
|
+
.Set("keepalives_sent",
|
913
|
+
keepalives_sent_.load(std::memory_order_relaxed))
|
914
|
+
.Set("last_local_stream_created_timestamp",
|
915
|
+
convert_cycle_counter(last_local_stream_created_cycle_.load(
|
916
|
+
std::memory_order_relaxed)))
|
917
|
+
.Set("last_remote_stream_created_timestamp",
|
918
|
+
convert_cycle_counter(last_remote_stream_created_cycle_.load(
|
919
|
+
std::memory_order_relaxed)))
|
920
|
+
.Set("last_message_sent_timestamp",
|
921
|
+
convert_cycle_counter(
|
922
|
+
last_message_sent_cycle_.load(std::memory_order_relaxed)))
|
923
|
+
.Set("last_message_received_timestamp",
|
924
|
+
convert_cycle_counter(last_message_received_cycle_.load(
|
925
|
+
std::memory_order_relaxed))));
|
926
|
+
if (security_ != nullptr) {
|
927
|
+
sink.AddData("security", security_->ToPropertyList());
|
928
|
+
}
|
929
|
+
}
|
930
|
+
|
848
931
|
//
|
849
932
|
// ListenSocketNode
|
850
933
|
//
|
851
934
|
|
852
935
|
ListenSocketNode::ListenSocketNode(std::string local_addr, std::string name)
|
853
|
-
: BaseNode(EntityType::kListenSocket, std::move(name)),
|
854
|
-
local_addr_(std::move(local_addr)) {
|
936
|
+
: BaseNode(EntityType::kListenSocket, 0, std::move(name)),
|
937
|
+
local_addr_(std::move(local_addr)) {
|
938
|
+
NodeConstructed();
|
939
|
+
}
|
855
940
|
|
856
941
|
Json ListenSocketNode::RenderJson() {
|
857
942
|
Json::Object object = {
|
@@ -865,6 +950,10 @@ Json ListenSocketNode::RenderJson() {
|
|
865
950
|
return Json::FromObject(std::move(object));
|
866
951
|
}
|
867
952
|
|
953
|
+
void ListenSocketNode::AddNodeSpecificData(DataSink sink) {
|
954
|
+
sink.AddData("listen_socket", PropertyList().Set("local", local_addr_));
|
955
|
+
}
|
956
|
+
|
868
957
|
//
|
869
958
|
// CallNode
|
870
959
|
//
|