grpc 1.74.1 → 1.75.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +83 -41
- data/include/grpc/credentials.h +7 -1
- data/src/core/call/client_call.cc +4 -4
- data/src/core/call/filter_fusion.h +1230 -0
- data/src/core/call/metadata.cc +22 -0
- data/src/core/call/metadata.h +24 -2
- data/src/core/channelz/channelz.cc +10 -17
- data/src/core/channelz/channelz.h +58 -19
- data/src/core/channelz/channelz_registry.cc +0 -162
- data/src/core/channelz/channelz_registry.h +14 -7
- data/src/core/channelz/property_list.cc +19 -23
- data/src/core/channelz/property_list.h +3 -1
- data/src/core/channelz/v2tov1/convert.cc +683 -0
- data/src/core/channelz/v2tov1/convert.h +58 -0
- data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
- data/src/core/channelz/v2tov1/legacy_api.h +32 -0
- data/src/core/channelz/v2tov1/property_list.cc +118 -0
- data/src/core/channelz/v2tov1/property_list.h +52 -0
- data/src/core/client_channel/client_channel_filter.cc +5 -4
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_internal.h +2 -1
- data/src/core/client_channel/load_balanced_call_destination.cc +6 -5
- data/src/core/client_channel/subchannel.cc +14 -6
- data/src/core/client_channel/subchannel.h +2 -0
- data/src/core/config/core_configuration.cc +3 -1
- data/src/core/config/core_configuration.h +12 -0
- data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
- data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +3 -1
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
- data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
- data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
- data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
- data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
- data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
- data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
- data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
- data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame.cc +89 -6
- data/src/core/ext/transport/chttp2/transport/frame.h +38 -0
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +5 -14
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +294 -78
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +128 -9
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +52 -35
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +81 -3
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +12 -1
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +2 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +22 -5
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +6 -4
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +142 -54
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +18 -14
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +2 -2
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +86 -88
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +2 -2
- data/src/core/filter/auth/auth_filters.h +2 -2
- data/src/core/filter/fused_filters.cc +154 -0
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +1 -1
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
- data/src/core/handshaker/security/secure_endpoint.cc +28 -13
- data/src/core/handshaker/security/secure_endpoint.h +8 -0
- data/src/core/lib/channel/promise_based_filter.cc +15 -25
- data/src/core/lib/channel/promise_based_filter.h +6 -5
- data/src/core/lib/event_engine/ares_resolver.h +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +9 -5
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -1
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +12 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -10
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +6 -4
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -14
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -5
- data/src/core/lib/event_engine/posix_engine/event_poller.h +0 -8
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -5
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +1 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +188 -199
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +30 -45
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +2 -1
- data/src/core/lib/experiments/experiments.cc +120 -6
- data/src/core/lib/experiments/experiments.h +46 -3
- data/src/core/lib/iomgr/combiner.cc +1 -1
- data/src/core/lib/iomgr/exec_ctx.h +3 -9
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +3 -3
- data/src/core/lib/promise/activity.h +2 -2
- data/src/core/lib/promise/mpsc.cc +8 -8
- data/src/core/lib/promise/party.cc +7 -7
- data/src/core/lib/promise/party.h +4 -4
- data/src/core/lib/promise/poll.h +10 -0
- data/src/core/lib/resource_quota/memory_quota.cc +90 -3
- data/src/core/lib/resource_quota/memory_quota.h +20 -9
- data/src/core/lib/resource_quota/periodic_update.cc +14 -0
- data/src/core/lib/resource_quota/periodic_update.h +8 -0
- data/src/core/lib/resource_quota/resource_quota.cc +15 -4
- data/src/core/lib/resource_quota/resource_quota.h +3 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
- data/src/core/lib/surface/call.cc +5 -5
- data/src/core/lib/surface/call.h +6 -5
- data/src/core/lib/surface/completion_queue.cc +2 -4
- data/src/core/lib/surface/filter_stack_call.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.h +3 -3
- data/src/core/load_balancing/endpoint_list.cc +29 -2
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
- data/src/core/load_balancing/pick_first/pick_first.cc +12 -5
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
- data/src/core/net/socket_mutator.cc +19 -0
- data/src/core/net/socket_mutator.h +25 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
- data/src/core/resolver/xds/xds_dependency_manager.cc +1 -1
- data/src/core/server/server.cc +1 -1
- data/src/core/server/server_call_tracer_filter.cc +0 -66
- data/src/core/server/server_call_tracer_filter.h +64 -0
- data/src/core/server/server_config_selector_filter.cc +1 -1
- data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
- data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
- data/src/core/telemetry/call_tracer.cc +20 -14
- data/src/core/telemetry/call_tracer.h +22 -17
- data/src/core/telemetry/metrics.h +8 -8
- data/src/core/telemetry/stats_data.cc +151 -151
- data/src/core/telemetry/stats_data.h +87 -87
- data/src/core/transport/auth_context.cc +20 -0
- data/src/core/transport/auth_context.h +4 -0
- data/src/core/transport/auth_context_comparator_registry.h +69 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
- data/src/core/tsi/ssl_transport_security.cc +202 -32
- data/src/core/tsi/ssl_transport_security.h +19 -10
- data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
- data/src/core/tsi/ssl_transport_security_utils.h +4 -0
- data/src/core/util/http_client/httpcli_security_connector.cc +3 -1
- data/src/core/util/latent_see.cc +178 -146
- data/src/core/util/latent_see.h +245 -188
- data/src/core/util/single_set_ptr.h +5 -2
- data/src/core/util/useful.h +91 -0
- data/src/core/util/windows/directory_reader.cc +1 -0
- data/src/core/util/windows/thd.cc +1 -3
- data/src/core/util/work_serializer.cc +1 -1
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -0
- data/src/core/xds/grpc/xds_certificate_provider.cc +5 -6
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/cares/cares/include/ares.h +925 -460
- data/third_party/cares/cares/include/ares_dns.h +86 -71
- data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
- data/third_party/cares/cares/include/ares_nameser.h +215 -189
- data/third_party/cares/cares/include/ares_version.h +37 -14
- data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
- data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
- data/third_party/cares/cares/src/lib/ares_android.c +216 -164
- data/third_party/cares/cares/src/lib/ares_android.h +25 -14
- data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
- data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
- data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
- data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
- data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
- data/third_party/cares/cares/src/lib/ares_data.c +93 -181
- data/third_party/cares/cares/src/lib/ares_data.h +50 -39
- data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
- data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
- data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
- data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
- data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
- data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
- data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
- data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
- data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
- data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
- data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
- data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
- data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
- data/third_party/cares/cares/src/lib/ares_options.c +418 -332
- data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
- data/third_party/cares/cares/src/lib/ares_private.h +558 -356
- data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
- data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
- data/third_party/cares/cares/src/lib/ares_query.c +126 -121
- data/third_party/cares/cares/src/lib/ares_search.c +564 -262
- data/third_party/cares/cares/src/lib/ares_send.c +264 -93
- data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
- data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
- data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
- data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
- data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
- data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
- data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
- data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
- data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
- data/third_party/cares/cares/src/lib/ares_version.c +29 -4
- data/third_party/cares/cares/src/lib/config-dos.h +88 -89
- data/third_party/cares/cares/src/lib/config-win32.h +122 -77
- data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
- data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
- data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
- data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
- data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
- data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
- data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
- data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
- data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
- data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
- data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
- data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
- data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
- data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
- data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
- data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
- data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
- data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
- data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
- data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
- data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
- data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
- data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
- data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
- data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
- data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
- data/third_party/cares/cares/src/lib/windows_port.c +16 -9
- metadata +121 -49
- data/src/core/util/ring_buffer.h +0 -122
- data/third_party/cares/cares/include/ares_rules.h +0 -125
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
- data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
- data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
- data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
- data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
- data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
- data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
- data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
- data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
- data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
- data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
- data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
- data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
- data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
- data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
- data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
- data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
- data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
- data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
- data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
- data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
- data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
- data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
- data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
- data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
- data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
- data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
- data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
- data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
- data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
- data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
- data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
- data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
- data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
- data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
- data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
- data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
- data/third_party/cares/cares/src/lib/setup_once.h +0 -554
- data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
data/src/core/call/metadata.cc
CHANGED
@@ -34,6 +34,28 @@ ServerMetadataHandle ServerMetadataFromStatus(const absl::Status& status) {
|
|
34
34
|
return hdl;
|
35
35
|
}
|
36
36
|
|
37
|
+
absl::Status ServerMetadataToStatus(ServerMetadata& md) {
|
38
|
+
const auto grpc_status =
|
39
|
+
md.get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
|
40
|
+
const auto* error_slice = md.get_pointer(GrpcMessageMetadata());
|
41
|
+
return grpc_error_set_int(
|
42
|
+
absl::Status(static_cast<absl::StatusCode>(grpc_status),
|
43
|
+
error_slice->as_string_view()),
|
44
|
+
StatusIntProperty::kRpcStatus, grpc_status);
|
45
|
+
}
|
46
|
+
|
47
|
+
void SetServerMetadataFromStatus(ServerMetadata& md,
|
48
|
+
const absl::Status& status) {
|
49
|
+
grpc_status_code code;
|
50
|
+
std::string message;
|
51
|
+
grpc_error_get_status(status, Timestamp::InfFuture(), &code, &message,
|
52
|
+
nullptr, nullptr);
|
53
|
+
md.Set(GrpcStatusMetadata(), code);
|
54
|
+
if (!status.ok()) {
|
55
|
+
md.Set(GrpcMessageMetadata(), Slice::FromCopiedString(message));
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
37
59
|
ServerMetadataHandle CancelledServerMetadataFromStatus(
|
38
60
|
const absl::Status& status) {
|
39
61
|
auto hdl = ServerMetadataFromStatus(status);
|
data/src/core/call/metadata.h
CHANGED
@@ -32,6 +32,14 @@ using ServerMetadataHandle = Arena::PoolPtr<ServerMetadata>;
|
|
32
32
|
using ClientMetadata = grpc_metadata_batch;
|
33
33
|
using ClientMetadataHandle = Arena::PoolPtr<ClientMetadata>;
|
34
34
|
|
35
|
+
// Convert absl::Status to ServerMetadata
|
36
|
+
ServerMetadataHandle ServerMetadataFromStatus(const absl::Status& status);
|
37
|
+
|
38
|
+
absl::Status ServerMetadataToStatus(ServerMetadata& md);
|
39
|
+
|
40
|
+
void SetServerMetadataFromStatus(ServerMetadata& md,
|
41
|
+
const absl::Status& status);
|
42
|
+
|
35
43
|
template <typename T>
|
36
44
|
class ServerMetadataOrHandle {
|
37
45
|
public:
|
@@ -95,6 +103,22 @@ struct FailureStatusCastImpl<ServerMetadataOrHandle<T>, ServerMetadataHandle&> {
|
|
95
103
|
}
|
96
104
|
};
|
97
105
|
|
106
|
+
template <>
|
107
|
+
struct FailureStatusCastImpl<ServerMetadataOrHandle<ServerMetadata>,
|
108
|
+
const absl::Status&> {
|
109
|
+
static ServerMetadataOrHandle<ServerMetadata> Cast(const absl::Status& t) {
|
110
|
+
return ServerMetadataOrHandle<ServerMetadata>::Failure(
|
111
|
+
ServerMetadataFromStatus(t));
|
112
|
+
}
|
113
|
+
};
|
114
|
+
|
115
|
+
template <>
|
116
|
+
struct FailureStatusCastImpl<absl::Status, ServerMetadataHandle&> {
|
117
|
+
static absl::Status Cast(ServerMetadataHandle& t) {
|
118
|
+
return ServerMetadataToStatus(*t);
|
119
|
+
}
|
120
|
+
};
|
121
|
+
|
98
122
|
template <>
|
99
123
|
struct FailureStatusCastImpl<ServerMetadataHandle, ServerMetadataHandle&> {
|
100
124
|
static ServerMetadataHandle Cast(ServerMetadataHandle& t) {
|
@@ -156,8 +180,6 @@ inline bool IsStatusOk(const ServerMetadataHandle& m) {
|
|
156
180
|
GRPC_STATUS_OK;
|
157
181
|
}
|
158
182
|
|
159
|
-
// Convert absl::Status to ServerMetadata
|
160
|
-
ServerMetadataHandle ServerMetadataFromStatus(const absl::Status& status);
|
161
183
|
// Convert absl::Status to ServerMetadata, and set GrpcCallWasCancelled() to
|
162
184
|
// true
|
163
185
|
ServerMetadataHandle CancelledServerMetadataFromStatus(
|
@@ -206,6 +206,8 @@ void BaseNode::SerializeEntity(grpc_channelz_v2_Entity* entity,
|
|
206
206
|
data_source->AddData(make_data_sink());
|
207
207
|
}
|
208
208
|
}
|
209
|
+
make_data_sink().AddData("v1_compatibility",
|
210
|
+
PropertyList().Set("name", name()));
|
209
211
|
bool completed =
|
210
212
|
done->WaitForNotificationWithTimeout(absl::Milliseconds(100));
|
211
213
|
sink_impl->Finalize(!completed, entity, arena);
|
@@ -442,7 +444,7 @@ void ChannelNode::AddNodeSpecificData(DataSink sink) {
|
|
442
444
|
.Set("target", target_)
|
443
445
|
.Set("connectivity_state", connectivity_state()));
|
444
446
|
sink.AddData("call_counts", call_counter_.GetCallCounts().ToPropertyList());
|
445
|
-
sink.AddData("channel_args",
|
447
|
+
sink.AddData("channel_args", channel_args().ToPropertyList());
|
446
448
|
}
|
447
449
|
|
448
450
|
void ChannelNode::PopulateChildRefs(Json::Object* json) {
|
@@ -491,12 +493,6 @@ void SubchannelNode::UpdateConnectivityState(grpc_connectivity_state state) {
|
|
491
493
|
connectivity_state_.store(state, std::memory_order_relaxed);
|
492
494
|
}
|
493
495
|
|
494
|
-
void SubchannelNode::SetChildSocket(RefCountedPtr<SocketNode> socket) {
|
495
|
-
MutexLock lock(&socket_mu_);
|
496
|
-
child_socket_ =
|
497
|
-
socket == nullptr ? nullptr : socket->WeakRefAsSubclass<SocketNode>();
|
498
|
-
}
|
499
|
-
|
500
496
|
std::string SubchannelNode::connectivity_state() const {
|
501
497
|
grpc_connectivity_state state =
|
502
498
|
connectivity_state_.load(std::memory_order_relaxed);
|
@@ -526,16 +522,13 @@ Json SubchannelNode::RenderJson() {
|
|
526
522
|
{"data", Json::FromObject(std::move(data))},
|
527
523
|
};
|
528
524
|
// Populate the child socket.
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
child_socket = child_socket_;
|
533
|
-
}
|
534
|
-
if (child_socket != nullptr && child_socket->uuid() != 0) {
|
525
|
+
auto [children, _] = ChannelzRegistry::GetChildrenOfType(
|
526
|
+
0, this, BaseNode::EntityType::kSocket, 1);
|
527
|
+
if (!children.empty()) {
|
535
528
|
object["socketRef"] = Json::FromArray({
|
536
529
|
Json::FromObject({
|
537
|
-
{"socketId", Json::FromString(absl::StrCat(
|
538
|
-
{"name", Json::FromString(
|
530
|
+
{"socketId", Json::FromString(absl::StrCat(children[0]->uuid()))},
|
531
|
+
{"name", Json::FromString(children[0]->name())},
|
539
532
|
}),
|
540
533
|
});
|
541
534
|
}
|
@@ -548,7 +541,7 @@ void SubchannelNode::AddNodeSpecificData(DataSink sink) {
|
|
548
541
|
.Set("target", target_)
|
549
542
|
.Set("connectivity_state", connectivity_state()));
|
550
543
|
sink.AddData("call_counts", call_counter_.GetCallCounts().ToPropertyList());
|
551
|
-
sink.AddData("channel_args",
|
544
|
+
sink.AddData("channel_args", channel_args().ToPropertyList());
|
552
545
|
}
|
553
546
|
|
554
547
|
//
|
@@ -620,7 +613,7 @@ Json ServerNode::RenderJson() {
|
|
620
613
|
|
621
614
|
void ServerNode::AddNodeSpecificData(DataSink sink) {
|
622
615
|
sink.AddData("call_counts", call_counter_.GetCallCounts().ToPropertyList());
|
623
|
-
sink.AddData("channel_args",
|
616
|
+
sink.AddData("channel_args", channel_args().ToPropertyList());
|
624
617
|
}
|
625
618
|
|
626
619
|
std::map<intptr_t, WeakRefCountedPtr<ListenSocketNode>>
|
@@ -105,6 +105,7 @@ class BaseNode : public DualRefCounted<BaseNode> {
|
|
105
105
|
kListenSocket,
|
106
106
|
kSocket,
|
107
107
|
kCall,
|
108
|
+
kResourceQuota,
|
108
109
|
};
|
109
110
|
|
110
111
|
static absl::string_view EntityTypeString(EntityType type) {
|
@@ -123,6 +124,8 @@ class BaseNode : public DualRefCounted<BaseNode> {
|
|
123
124
|
return "socket";
|
124
125
|
case EntityType::kCall:
|
125
126
|
return "call";
|
127
|
+
case EntityType::kResourceQuota:
|
128
|
+
return "resource_quota";
|
126
129
|
}
|
127
130
|
return "unknown";
|
128
131
|
}
|
@@ -143,6 +146,8 @@ class BaseNode : public DualRefCounted<BaseNode> {
|
|
143
146
|
return "socket";
|
144
147
|
case EntityType::kCall:
|
145
148
|
return "call";
|
149
|
+
case EntityType::kResourceQuota:
|
150
|
+
return "resource_quota";
|
146
151
|
}
|
147
152
|
}
|
148
153
|
|
@@ -154,6 +159,7 @@ class BaseNode : public DualRefCounted<BaseNode> {
|
|
154
159
|
if (kind == "listen_socket") return EntityType::kListenSocket;
|
155
160
|
if (kind == "socket") return EntityType::kSocket;
|
156
161
|
if (kind == "call") return EntityType::kCall;
|
162
|
+
if (kind == "resource_quota") return EntityType::kResourceQuota;
|
157
163
|
return std::nullopt;
|
158
164
|
}
|
159
165
|
|
@@ -371,6 +377,7 @@ class DataSource {
|
|
371
377
|
protected:
|
372
378
|
~DataSource();
|
373
379
|
RefCountedPtr<BaseNode> channelz_node() { return node_; }
|
380
|
+
const BaseNode* channelz_node() const { return node_.get(); }
|
374
381
|
|
375
382
|
// This method must be called in the most derived class's constructor.
|
376
383
|
// It adds this data source to the node's list of data sources.
|
@@ -462,7 +469,11 @@ class ChannelNode final : public BaseNode {
|
|
462
469
|
bool is_internal_channel);
|
463
470
|
|
464
471
|
void Orphaned() override {
|
465
|
-
|
472
|
+
ChannelArgs to_destroy;
|
473
|
+
{
|
474
|
+
MutexLock lock(&channel_args_mu_);
|
475
|
+
std::swap(channel_args_, to_destroy);
|
476
|
+
}
|
466
477
|
BaseNode::Orphaned();
|
467
478
|
}
|
468
479
|
|
@@ -481,6 +492,9 @@ class ChannelNode final : public BaseNode {
|
|
481
492
|
|
482
493
|
// proxy methods to composed classes.
|
483
494
|
void SetChannelArgs(const ChannelArgs& channel_args) {
|
495
|
+
ChannelArgs to_destroy;
|
496
|
+
MutexLock lock(&channel_args_mu_);
|
497
|
+
std::swap(channel_args_, to_destroy);
|
484
498
|
channel_args_ = channel_args;
|
485
499
|
}
|
486
500
|
void RecordCallStarted() { call_counter_.RecordCallStarted(); }
|
@@ -494,7 +508,10 @@ class ChannelNode final : public BaseNode {
|
|
494
508
|
CallCounts GetCallCounts() const { return call_counter_.GetCallCounts(); }
|
495
509
|
std::set<intptr_t> child_channels() const;
|
496
510
|
std::set<intptr_t> child_subchannels() const;
|
497
|
-
|
511
|
+
ChannelArgs channel_args() const {
|
512
|
+
MutexLock lock(&channel_args_mu_);
|
513
|
+
return channel_args_;
|
514
|
+
}
|
498
515
|
|
499
516
|
private:
|
500
517
|
void PopulateChildRefs(Json::Object* json);
|
@@ -504,7 +521,8 @@ class ChannelNode final : public BaseNode {
|
|
504
521
|
CallCountingHelper call_counter_;
|
505
522
|
// TODO(ctiller): keeping channel args here can create odd circular references
|
506
523
|
// that are hard to reason about. Consider moving this to a DataSource.
|
507
|
-
|
524
|
+
mutable Mutex channel_args_mu_;
|
525
|
+
ChannelArgs channel_args_ ABSL_GUARDED_BY(channel_args_mu_);
|
508
526
|
|
509
527
|
// Least significant bit indicates whether the value is set. Remaining
|
510
528
|
// bits are a grpc_connectivity_state value.
|
@@ -518,22 +536,24 @@ class SubchannelNode final : public BaseNode {
|
|
518
536
|
~SubchannelNode() override;
|
519
537
|
|
520
538
|
void Orphaned() override {
|
521
|
-
|
539
|
+
ChannelArgs to_destroy;
|
540
|
+
{
|
541
|
+
MutexLock lock(&channel_args_mu_);
|
542
|
+
std::swap(channel_args_, to_destroy);
|
543
|
+
}
|
522
544
|
BaseNode::Orphaned();
|
523
545
|
}
|
524
546
|
|
525
547
|
// Sets the subchannel's connectivity state without health checking.
|
526
548
|
void UpdateConnectivityState(grpc_connectivity_state state);
|
527
549
|
|
528
|
-
// Used when the subchannel's child socket changes. This should be set when
|
529
|
-
// the subchannel's transport is created and set to nullptr when the
|
530
|
-
// subchannel unrefs the transport.
|
531
|
-
void SetChildSocket(RefCountedPtr<SocketNode> socket);
|
532
|
-
|
533
550
|
Json RenderJson() override;
|
534
551
|
|
535
552
|
// proxy methods to composed classes.
|
536
553
|
void SetChannelArgs(const ChannelArgs& channel_args) {
|
554
|
+
ChannelArgs to_destroy;
|
555
|
+
MutexLock lock(&channel_args_mu_);
|
556
|
+
std::swap(channel_args_, to_destroy);
|
537
557
|
channel_args_ = channel_args;
|
538
558
|
}
|
539
559
|
void RecordCallStarted() { call_counter_.RecordCallStarted(); }
|
@@ -543,11 +563,10 @@ class SubchannelNode final : public BaseNode {
|
|
543
563
|
const std::string& target() const { return target_; }
|
544
564
|
std::string connectivity_state() const;
|
545
565
|
CallCounts GetCallCounts() const { return call_counter_.GetCallCounts(); }
|
546
|
-
|
547
|
-
MutexLock lock(&
|
548
|
-
return
|
566
|
+
ChannelArgs channel_args() const {
|
567
|
+
MutexLock lock(&channel_args_mu_);
|
568
|
+
return channel_args_;
|
549
569
|
}
|
550
|
-
const ChannelArgs& channel_args() const { return channel_args_; }
|
551
570
|
|
552
571
|
private:
|
553
572
|
void AddNodeSpecificData(DataSink sink) override;
|
@@ -556,13 +575,12 @@ class SubchannelNode final : public BaseNode {
|
|
556
575
|
friend class testing::SubchannelNodePeer;
|
557
576
|
|
558
577
|
std::atomic<grpc_connectivity_state> connectivity_state_{GRPC_CHANNEL_IDLE};
|
559
|
-
mutable Mutex socket_mu_;
|
560
|
-
WeakRefCountedPtr<SocketNode> child_socket_ ABSL_GUARDED_BY(socket_mu_);
|
561
578
|
std::string target_;
|
562
579
|
CallCountingHelper call_counter_;
|
563
580
|
// TODO(ctiller): keeping channel args here can create odd circular references
|
564
581
|
// that are hard to reason about. Consider moving this to a DataSource.
|
565
|
-
|
582
|
+
mutable Mutex channel_args_mu_;
|
583
|
+
ChannelArgs channel_args_ ABSL_GUARDED_BY(channel_args_mu_);
|
566
584
|
};
|
567
585
|
|
568
586
|
// Handles channelz bookkeeping for servers
|
@@ -573,7 +591,11 @@ class ServerNode final : public BaseNode {
|
|
573
591
|
~ServerNode() override;
|
574
592
|
|
575
593
|
void Orphaned() override {
|
576
|
-
|
594
|
+
ChannelArgs to_destroy;
|
595
|
+
{
|
596
|
+
MutexLock lock(&channel_args_mu_);
|
597
|
+
std::swap(channel_args_, to_destroy);
|
598
|
+
}
|
577
599
|
BaseNode::Orphaned();
|
578
600
|
}
|
579
601
|
|
@@ -584,6 +606,9 @@ class ServerNode final : public BaseNode {
|
|
584
606
|
|
585
607
|
// proxy methods to composed classes.
|
586
608
|
void SetChannelArgs(const ChannelArgs& channel_args) {
|
609
|
+
ChannelArgs to_destroy;
|
610
|
+
MutexLock lock(&channel_args_mu_);
|
611
|
+
std::swap(channel_args_, to_destroy);
|
587
612
|
channel_args_ = channel_args;
|
588
613
|
}
|
589
614
|
void RecordCallStarted() { call_counter_.RecordCallStarted(); }
|
@@ -596,7 +621,10 @@ class ServerNode final : public BaseNode {
|
|
596
621
|
const;
|
597
622
|
std::map<intptr_t, WeakRefCountedPtr<SocketNode>> child_sockets() const;
|
598
623
|
|
599
|
-
|
624
|
+
ChannelArgs channel_args() const {
|
625
|
+
MutexLock lock(&channel_args_mu_);
|
626
|
+
return channel_args_;
|
627
|
+
}
|
600
628
|
|
601
629
|
private:
|
602
630
|
void AddNodeSpecificData(DataSink sink) override;
|
@@ -604,7 +632,8 @@ class ServerNode final : public BaseNode {
|
|
604
632
|
PerCpuCallCountingHelper call_counter_;
|
605
633
|
// TODO(ctiller): keeping channel args here can create odd circular references
|
606
634
|
// that are hard to reason about. Consider moving this to a DataSource.
|
607
|
-
|
635
|
+
mutable Mutex channel_args_mu_;
|
636
|
+
ChannelArgs channel_args_ ABSL_GUARDED_BY(channel_args_mu_);
|
608
637
|
};
|
609
638
|
|
610
639
|
#define GRPC_ARG_CHANNELZ_SECURITY "grpc.internal.channelz_security"
|
@@ -751,6 +780,16 @@ class CallNode final : public BaseNode {
|
|
751
780
|
Json RenderJson() override;
|
752
781
|
};
|
753
782
|
|
783
|
+
class ResourceQuotaNode final : public BaseNode {
|
784
|
+
public:
|
785
|
+
explicit ResourceQuotaNode(std::string name)
|
786
|
+
: BaseNode(EntityType::kResourceQuota, 0, std::move(name)) {
|
787
|
+
NodeConstructed();
|
788
|
+
}
|
789
|
+
|
790
|
+
Json RenderJson() override { return Json::FromString("ResourceQuota"); }
|
791
|
+
};
|
792
|
+
|
754
793
|
} // namespace channelz
|
755
794
|
} // namespace grpc_core
|
756
795
|
|
@@ -47,61 +47,6 @@
|
|
47
47
|
namespace grpc_core {
|
48
48
|
namespace channelz {
|
49
49
|
|
50
|
-
namespace {
|
51
|
-
template <typename T>
|
52
|
-
std::string RenderArray(std::tuple<T, bool> values_and_end,
|
53
|
-
const std::string& key) {
|
54
|
-
auto& [values, end] = values_and_end;
|
55
|
-
Json::Object object;
|
56
|
-
if (!values.empty()) {
|
57
|
-
// Create list of channels.
|
58
|
-
Json::Array array;
|
59
|
-
for (size_t i = 0; i < values.size(); ++i) {
|
60
|
-
array.emplace_back(values[i]->RenderJson());
|
61
|
-
}
|
62
|
-
object[key] = Json::FromArray(std::move(array));
|
63
|
-
}
|
64
|
-
if (end) {
|
65
|
-
object["end"] = Json::FromBool(true);
|
66
|
-
}
|
67
|
-
return JsonDump(Json::FromObject(std::move(object)));
|
68
|
-
}
|
69
|
-
|
70
|
-
Json RemoveAdditionalInfo(const Json& json) {
|
71
|
-
switch (json.type()) {
|
72
|
-
case Json::Type::kArray: {
|
73
|
-
Json::Array out;
|
74
|
-
for (const auto& node : json.array()) {
|
75
|
-
out.emplace_back(RemoveAdditionalInfo(node));
|
76
|
-
}
|
77
|
-
return Json::FromArray(std::move(out));
|
78
|
-
} break;
|
79
|
-
case Json::Type::kObject: {
|
80
|
-
Json::Object out;
|
81
|
-
for (const auto& [key, value] : json.object()) {
|
82
|
-
if (key == "additionalInfo") continue;
|
83
|
-
out[key] = RemoveAdditionalInfo(value);
|
84
|
-
}
|
85
|
-
return Json::FromObject(std::move(out));
|
86
|
-
} break;
|
87
|
-
default:
|
88
|
-
return json;
|
89
|
-
}
|
90
|
-
}
|
91
|
-
|
92
|
-
// TODO(ctiller): Temporary hack to remove fields that are objectionable to the
|
93
|
-
// protobuf parser (because we've not published them in protobuf yet).
|
94
|
-
char* ApplyHacks(const std::string& json_str) {
|
95
|
-
return gpr_strdup(StripAdditionalInfoFromJson(json_str).c_str());
|
96
|
-
}
|
97
|
-
} // namespace
|
98
|
-
|
99
|
-
std::string StripAdditionalInfoFromJson(absl::string_view json_str) {
|
100
|
-
auto json = JsonParse(json_str);
|
101
|
-
if (!json.ok()) return gpr_strdup(std::string(json_str).c_str());
|
102
|
-
return JsonDump(RemoveAdditionalInfo(*json));
|
103
|
-
}
|
104
|
-
|
105
50
|
ChannelzRegistry* ChannelzRegistry::Default() {
|
106
51
|
static ChannelzRegistry* singleton = new ChannelzRegistry();
|
107
52
|
return singleton;
|
@@ -121,14 +66,6 @@ void ChannelzRegistry::InternalLogAllEntities() {
|
|
121
66
|
}
|
122
67
|
}
|
123
68
|
|
124
|
-
std::string ChannelzRegistry::GetTopChannelsJson(intptr_t start_channel_id) {
|
125
|
-
return RenderArray(GetTopChannels(start_channel_id), "channel");
|
126
|
-
}
|
127
|
-
|
128
|
-
std::string ChannelzRegistry::GetServersJson(intptr_t start_server_id) {
|
129
|
-
return RenderArray(GetServers(start_server_id), "server");
|
130
|
-
}
|
131
|
-
|
132
69
|
void ChannelzRegistry::InternalRegister(BaseNode* node) {
|
133
70
|
DCHECK_EQ(node->uuid_, -1);
|
134
71
|
const size_t node_shard_index = NodeShardIndex(node);
|
@@ -379,102 +316,3 @@ void ChannelzRegistry::TestOnlyReset() {
|
|
379
316
|
|
380
317
|
} // namespace channelz
|
381
318
|
} // namespace grpc_core
|
382
|
-
|
383
|
-
char* grpc_channelz_get_top_channels(intptr_t start_channel_id) {
|
384
|
-
grpc_core::ExecCtx exec_ctx;
|
385
|
-
return grpc_core::channelz::ApplyHacks(
|
386
|
-
grpc_core::channelz::ChannelzRegistry::GetTopChannelsJson(
|
387
|
-
start_channel_id)
|
388
|
-
.c_str());
|
389
|
-
}
|
390
|
-
|
391
|
-
char* grpc_channelz_get_servers(intptr_t start_server_id) {
|
392
|
-
grpc_core::ExecCtx exec_ctx;
|
393
|
-
return grpc_core::channelz::ApplyHacks(
|
394
|
-
grpc_core::channelz::ChannelzRegistry::GetServersJson(start_server_id)
|
395
|
-
.c_str());
|
396
|
-
}
|
397
|
-
|
398
|
-
char* grpc_channelz_get_server(intptr_t server_id) {
|
399
|
-
grpc_core::ExecCtx exec_ctx;
|
400
|
-
grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode> server_node =
|
401
|
-
grpc_core::channelz::ChannelzRegistry::Get(server_id);
|
402
|
-
if (server_node == nullptr ||
|
403
|
-
server_node->type() !=
|
404
|
-
grpc_core::channelz::BaseNode::EntityType::kServer) {
|
405
|
-
return nullptr;
|
406
|
-
}
|
407
|
-
grpc_core::Json json = grpc_core::Json::FromObject({
|
408
|
-
{"server", server_node->RenderJson()},
|
409
|
-
});
|
410
|
-
return grpc_core::channelz::ApplyHacks(grpc_core::JsonDump(json).c_str());
|
411
|
-
}
|
412
|
-
|
413
|
-
char* grpc_channelz_get_server_sockets(intptr_t server_id,
|
414
|
-
intptr_t start_socket_id,
|
415
|
-
intptr_t max_results) {
|
416
|
-
grpc_core::ExecCtx exec_ctx;
|
417
|
-
// Validate inputs before handing them of to the renderer.
|
418
|
-
grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode> base_node =
|
419
|
-
grpc_core::channelz::ChannelzRegistry::Get(server_id);
|
420
|
-
if (base_node == nullptr ||
|
421
|
-
base_node->type() != grpc_core::channelz::BaseNode::EntityType::kServer ||
|
422
|
-
start_socket_id < 0 || max_results < 0) {
|
423
|
-
return nullptr;
|
424
|
-
}
|
425
|
-
// This cast is ok since we have just checked to make sure base_node is
|
426
|
-
// actually a server node.
|
427
|
-
grpc_core::channelz::ServerNode* server_node =
|
428
|
-
static_cast<grpc_core::channelz::ServerNode*>(base_node.get());
|
429
|
-
return grpc_core::channelz::ApplyHacks(
|
430
|
-
server_node->RenderServerSockets(start_socket_id, max_results).c_str());
|
431
|
-
}
|
432
|
-
|
433
|
-
char* grpc_channelz_get_channel(intptr_t channel_id) {
|
434
|
-
grpc_core::ExecCtx exec_ctx;
|
435
|
-
grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode> channel_node =
|
436
|
-
grpc_core::channelz::ChannelzRegistry::Get(channel_id);
|
437
|
-
if (channel_node == nullptr ||
|
438
|
-
(channel_node->type() !=
|
439
|
-
grpc_core::channelz::BaseNode::EntityType::kTopLevelChannel &&
|
440
|
-
channel_node->type() !=
|
441
|
-
grpc_core::channelz::BaseNode::EntityType::kInternalChannel)) {
|
442
|
-
return nullptr;
|
443
|
-
}
|
444
|
-
grpc_core::Json json = grpc_core::Json::FromObject({
|
445
|
-
{"channel", channel_node->RenderJson()},
|
446
|
-
});
|
447
|
-
return grpc_core::channelz::ApplyHacks(grpc_core::JsonDump(json).c_str());
|
448
|
-
}
|
449
|
-
|
450
|
-
char* grpc_channelz_get_subchannel(intptr_t subchannel_id) {
|
451
|
-
grpc_core::ExecCtx exec_ctx;
|
452
|
-
grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode> subchannel_node =
|
453
|
-
grpc_core::channelz::ChannelzRegistry::Get(subchannel_id);
|
454
|
-
if (subchannel_node == nullptr ||
|
455
|
-
subchannel_node->type() !=
|
456
|
-
grpc_core::channelz::BaseNode::EntityType::kSubchannel) {
|
457
|
-
return nullptr;
|
458
|
-
}
|
459
|
-
grpc_core::Json json = grpc_core::Json::FromObject({
|
460
|
-
{"subchannel", subchannel_node->RenderJson()},
|
461
|
-
});
|
462
|
-
return grpc_core::channelz::ApplyHacks(grpc_core::JsonDump(json).c_str());
|
463
|
-
}
|
464
|
-
|
465
|
-
char* grpc_channelz_get_socket(intptr_t socket_id) {
|
466
|
-
grpc_core::ExecCtx exec_ctx;
|
467
|
-
grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode> socket_node =
|
468
|
-
grpc_core::channelz::ChannelzRegistry::Get(socket_id);
|
469
|
-
if (socket_node == nullptr ||
|
470
|
-
(socket_node->type() !=
|
471
|
-
grpc_core::channelz::BaseNode::EntityType::kSocket &&
|
472
|
-
socket_node->type() !=
|
473
|
-
grpc_core::channelz::BaseNode::EntityType::kListenSocket)) {
|
474
|
-
return nullptr;
|
475
|
-
}
|
476
|
-
grpc_core::Json json = grpc_core::Json::FromObject({
|
477
|
-
{"socket", socket_node->RenderJson()},
|
478
|
-
});
|
479
|
-
return grpc_core::channelz::ApplyHacks(grpc_core::JsonDump(json).c_str());
|
480
|
-
}
|
@@ -95,9 +95,6 @@ class ChannelzRegistry final {
|
|
95
95
|
start_socket_id);
|
96
96
|
}
|
97
97
|
|
98
|
-
static std::string GetTopChannelsJson(intptr_t start_channel_id);
|
99
|
-
static std::string GetServersJson(intptr_t start_server_id);
|
100
|
-
|
101
98
|
// Returns the allocated JSON string that represents the proto
|
102
99
|
// GetServersResponse as per channelz.proto.
|
103
100
|
static auto GetServers(intptr_t start_server_id) {
|
@@ -106,6 +103,11 @@ class ChannelzRegistry final {
|
|
106
103
|
start_server_id);
|
107
104
|
}
|
108
105
|
|
106
|
+
static std::tuple<std::vector<WeakRefCountedPtr<BaseNode>>, bool> GetChildren(
|
107
|
+
const BaseNode* parent, intptr_t start_node, size_t max_results) {
|
108
|
+
return Default()->InternalGetChildren(parent, start_node, max_results);
|
109
|
+
}
|
110
|
+
|
109
111
|
static std::tuple<std::vector<WeakRefCountedPtr<BaseNode>>, bool>
|
110
112
|
GetChildrenOfType(intptr_t start_node, const BaseNode* parent,
|
111
113
|
BaseNode::EntityType type, size_t max_results) {
|
@@ -215,6 +217,15 @@ class ChannelzRegistry final {
|
|
215
217
|
absl::FunctionRef<bool(const BaseNode*)> discriminator,
|
216
218
|
size_t max_results);
|
217
219
|
|
220
|
+
std::tuple<std::vector<WeakRefCountedPtr<BaseNode>>, bool>
|
221
|
+
InternalGetChildren(const BaseNode* parent, intptr_t start_node,
|
222
|
+
size_t max_results) {
|
223
|
+
return QueryNodes(
|
224
|
+
start_node,
|
225
|
+
[parent](const BaseNode* n) { return n->HasParent(parent); },
|
226
|
+
max_results);
|
227
|
+
}
|
228
|
+
|
218
229
|
std::tuple<std::vector<WeakRefCountedPtr<BaseNode>>, bool>
|
219
230
|
InternalGetChildrenOfType(intptr_t start_node, const BaseNode* parent,
|
220
231
|
BaseNode::EntityType type, size_t max_results) {
|
@@ -273,10 +284,6 @@ class ChannelzRegistry final {
|
|
273
284
|
size_t max_orphaned_per_shard_;
|
274
285
|
};
|
275
286
|
|
276
|
-
// `additionalInfo` section is not yet in the protobuf format, so we
|
277
|
-
// provide a utility to strip it for compatibility.
|
278
|
-
std::string StripAdditionalInfoFromJson(absl::string_view json);
|
279
|
-
|
280
287
|
} // namespace channelz
|
281
288
|
} // namespace grpc_core
|
282
289
|
|
@@ -119,15 +119,13 @@ grpc_channelz_v2_PropertyValue* ToUpbProto(const PropertyValue& value,
|
|
119
119
|
void PropertyList::SetInternal(absl::string_view key,
|
120
120
|
std::optional<PropertyValue> value) {
|
121
121
|
if (value.has_value()) {
|
122
|
-
property_list_.
|
123
|
-
} else {
|
124
|
-
property_list_.erase(std::string(key));
|
122
|
+
property_list_.emplace_back(std::string(key), *std::move(value));
|
125
123
|
}
|
126
124
|
}
|
127
125
|
|
128
126
|
PropertyList& PropertyList::Merge(PropertyList other) {
|
129
127
|
for (auto& [key, value] : other.property_list_) {
|
130
|
-
SetInternal(key, value);
|
128
|
+
SetInternal(key, std::move(value));
|
131
129
|
}
|
132
130
|
return *this;
|
133
131
|
}
|
@@ -135,16 +133,24 @@ PropertyList& PropertyList::Merge(PropertyList other) {
|
|
135
133
|
Json::Object PropertyList::TakeJsonObject() {
|
136
134
|
Json::Object json;
|
137
135
|
for (auto& [key, value] : property_list_) {
|
138
|
-
json.emplace(key, ToJson(value));
|
136
|
+
json.emplace(std::string(key), ToJson(value));
|
139
137
|
}
|
140
138
|
return json;
|
141
139
|
}
|
142
140
|
|
143
141
|
void PropertyList::FillUpbProto(grpc_channelz_v2_PropertyList* proto,
|
144
142
|
upb_Arena* arena) {
|
143
|
+
auto* elements = grpc_channelz_v2_PropertyList_resize_properties(
|
144
|
+
proto, property_list_.size(), arena);
|
145
|
+
size_t i = 0;
|
145
146
|
for (auto& [key, value] : property_list_) {
|
146
|
-
|
147
|
-
|
147
|
+
auto* element = grpc_channelz_v2_PropertyList_Element_new(arena);
|
148
|
+
grpc_channelz_v2_PropertyList_Element_set_key(
|
149
|
+
element, CopyStdStringToUpbString(key, arena));
|
150
|
+
grpc_channelz_v2_PropertyList_Element_set_value(element,
|
151
|
+
ToUpbProto(value, arena));
|
152
|
+
elements[i] = element;
|
153
|
+
i++;
|
148
154
|
}
|
149
155
|
}
|
150
156
|
|
@@ -244,28 +250,18 @@ void PropertyGrid::SetInternal(absl::string_view column, absl::string_view row,
|
|
244
250
|
PropertyGrid& PropertyGrid::SetColumn(absl::string_view column,
|
245
251
|
PropertyList values) {
|
246
252
|
int c = GetIndex(columns_, column);
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
}
|
251
|
-
std::sort(keys.begin(), keys.end());
|
252
|
-
for (const auto& key : keys) {
|
253
|
-
grid_.emplace(std::pair(c, GetIndex(rows_, key)),
|
254
|
-
std::move(values.property_list_.at(key)));
|
253
|
+
for (auto& [key, value] : values.property_list_) {
|
254
|
+
grid_.emplace(std::pair(c, GetIndex(rows_, std::move(key))),
|
255
|
+
std::move(value));
|
255
256
|
}
|
256
257
|
return *this;
|
257
258
|
}
|
258
259
|
|
259
260
|
PropertyGrid& PropertyGrid::SetRow(absl::string_view row, PropertyList values) {
|
260
261
|
int r = GetIndex(rows_, row);
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
}
|
265
|
-
std::sort(keys.begin(), keys.end());
|
266
|
-
for (const auto& key : keys) {
|
267
|
-
grid_.emplace(std::pair(GetIndex(columns_, key), r),
|
268
|
-
std::move(values.property_list_.at(key)));
|
262
|
+
for (auto& [key, value] : values.property_list_) {
|
263
|
+
grid_.emplace(std::pair(GetIndex(columns_, std::move(key)), r),
|
264
|
+
std::move(value));
|
269
265
|
}
|
270
266
|
return *this;
|
271
267
|
}
|
@@ -17,6 +17,8 @@
|
|
17
17
|
|
18
18
|
#include <cstddef>
|
19
19
|
#include <type_traits>
|
20
|
+
#include <utility>
|
21
|
+
#include <vector>
|
20
22
|
|
21
23
|
#include "absl/container/flat_hash_map.h"
|
22
24
|
#include "absl/status/status.h"
|
@@ -139,7 +141,7 @@ class PropertyList final : public OtherPropertyValue {
|
|
139
141
|
friend class PropertyGrid;
|
140
142
|
friend class PropertyTable;
|
141
143
|
|
142
|
-
|
144
|
+
std::vector<std::pair<std::string, PropertyValue>> property_list_;
|
143
145
|
};
|
144
146
|
|
145
147
|
// PropertyGrid is much the same as PropertyList, but it is two dimensional.
|