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
@@ -0,0 +1,683 @@
|
|
1
|
+
// Copyright 2025 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include "src/core/channelz/v2tov1/convert.h"
|
16
|
+
|
17
|
+
#include <optional>
|
18
|
+
#include <string>
|
19
|
+
#include <vector>
|
20
|
+
|
21
|
+
#include "absl/cleanup/cleanup.h"
|
22
|
+
#include "absl/status/status.h"
|
23
|
+
#include "absl/status/statusor.h"
|
24
|
+
#include "absl/strings/escaping.h"
|
25
|
+
#include "absl/strings/str_cat.h"
|
26
|
+
#include "absl/strings/strip.h"
|
27
|
+
#include "google/protobuf/any.upb.h"
|
28
|
+
#include "google/protobuf/duration.upb.h"
|
29
|
+
#include "google/protobuf/timestamp.upb.h"
|
30
|
+
#include "google/protobuf/wrappers.upb.h"
|
31
|
+
#include "src/core/channelz/v2tov1/property_list.h"
|
32
|
+
#include "src/core/lib/address_utils/parse_address.h"
|
33
|
+
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
34
|
+
#include "src/core/util/json/json.h"
|
35
|
+
#include "src/core/util/json/json_writer.h"
|
36
|
+
#include "src/core/util/upb_utils.h"
|
37
|
+
#include "src/core/util/uri.h"
|
38
|
+
#include "src/proto/grpc/channelz/channelz.upb.h"
|
39
|
+
#include "src/proto/grpc/channelz/channelz.upbdefs.h"
|
40
|
+
#include "src/proto/grpc/channelz/v2/channelz.upb.h"
|
41
|
+
#include "src/proto/grpc/channelz/v2/property_list.upb.h"
|
42
|
+
#include "upb/base/status.h"
|
43
|
+
#include "upb/json/encode.h"
|
44
|
+
#include "upb/mem/arena.hpp"
|
45
|
+
#include "upb/reflection/def.hpp"
|
46
|
+
|
47
|
+
namespace grpc_core {
|
48
|
+
namespace channelz {
|
49
|
+
namespace v2tov1 {
|
50
|
+
|
51
|
+
namespace {
|
52
|
+
const grpc_channelz_v2_Data* FindData(const grpc_channelz_v2_Entity* entity,
|
53
|
+
absl::string_view name) {
|
54
|
+
size_t num_data;
|
55
|
+
const grpc_channelz_v2_Data* const* data =
|
56
|
+
grpc_channelz_v2_Entity_data(entity, &num_data);
|
57
|
+
for (size_t i = 0; i < num_data; ++i) {
|
58
|
+
upb_StringView data_name = grpc_channelz_v2_Data_name(data[i]);
|
59
|
+
if (absl::string_view(data_name.data, data_name.size) == name) {
|
60
|
+
return data[i];
|
61
|
+
}
|
62
|
+
}
|
63
|
+
return nullptr;
|
64
|
+
}
|
65
|
+
|
66
|
+
const grpc_channelz_v2_PropertyList* GetPropertyList(
|
67
|
+
const grpc_channelz_v2_Entity* entity, absl::string_view name,
|
68
|
+
upb_Arena* arena) {
|
69
|
+
const auto* data = FindData(entity, name);
|
70
|
+
if (data == nullptr) return nullptr;
|
71
|
+
const auto* value = grpc_channelz_v2_Data_value(data);
|
72
|
+
if (value == nullptr) return nullptr;
|
73
|
+
upb_StringView type_url = google_protobuf_Any_type_url(value);
|
74
|
+
if (absl::string_view(type_url.data, type_url.size) !=
|
75
|
+
"type.googleapis.com/grpc.channelz.v2.PropertyList") {
|
76
|
+
return nullptr;
|
77
|
+
}
|
78
|
+
upb_StringView bytes = google_protobuf_Any_value(value);
|
79
|
+
return grpc_channelz_v2_PropertyList_parse(bytes.data, bytes.size, arena);
|
80
|
+
}
|
81
|
+
|
82
|
+
void ParseAddress(const std::string& addr_str, upb_Arena* arena,
|
83
|
+
grpc_channelz_v1_Address* address) {
|
84
|
+
absl::StatusOr<URI> uri = URI::Parse(addr_str);
|
85
|
+
if (!uri.ok()) {
|
86
|
+
grpc_channelz_v1_Address_OtherAddress_set_name(
|
87
|
+
grpc_channelz_v1_Address_mutable_other_address(address, arena),
|
88
|
+
CopyStdStringToUpbString(addr_str, arena));
|
89
|
+
return;
|
90
|
+
}
|
91
|
+
if (uri->scheme() == "ipv4" || uri->scheme() == "ipv6") {
|
92
|
+
absl::StatusOr<grpc_resolved_address> resolved_address =
|
93
|
+
StringToSockaddr(absl::StripPrefix(uri->path(), "/"));
|
94
|
+
if (resolved_address.ok()) {
|
95
|
+
auto* tcpip_address =
|
96
|
+
grpc_channelz_v1_Address_mutable_tcpip_address(address, arena);
|
97
|
+
grpc_channelz_v1_Address_TcpIpAddress_set_port(
|
98
|
+
tcpip_address, grpc_sockaddr_get_port(&*resolved_address));
|
99
|
+
grpc_channelz_v1_Address_TcpIpAddress_set_ip_address(
|
100
|
+
tcpip_address,
|
101
|
+
CopyStdStringToUpbString(
|
102
|
+
grpc_sockaddr_get_packed_host(&*resolved_address), arena));
|
103
|
+
return;
|
104
|
+
}
|
105
|
+
} else if (uri->scheme() == "unix") {
|
106
|
+
grpc_channelz_v1_Address_UdsAddress_set_filename(
|
107
|
+
grpc_channelz_v1_Address_mutable_uds_address(address, arena),
|
108
|
+
CopyStdStringToUpbString(std::string(uri->path()), arena));
|
109
|
+
return;
|
110
|
+
}
|
111
|
+
grpc_channelz_v1_Address_OtherAddress_set_name(
|
112
|
+
grpc_channelz_v1_Address_mutable_other_address(address, arena),
|
113
|
+
CopyStdStringToUpbString(addr_str, arena));
|
114
|
+
}
|
115
|
+
|
116
|
+
absl::StatusOr<std::string> SerializeJson(
|
117
|
+
const upb_Message* msg,
|
118
|
+
const upb_MessageDef* (*msg_def_maker)(upb_DefPool*)) {
|
119
|
+
upb::DefPool pool;
|
120
|
+
auto* msg_def = msg_def_maker(pool.ptr());
|
121
|
+
upb_Status status;
|
122
|
+
upb_Status_Clear(&status);
|
123
|
+
size_t len = upb_JsonEncode(msg, msg_def, pool.ptr(),
|
124
|
+
upb_JsonEncode_EmitDefaults, nullptr, 0, &status);
|
125
|
+
if (!upb_Status_IsOk(&status)) {
|
126
|
+
return absl::InternalError(absl::StrCat("Failed to serialize to JSON: ",
|
127
|
+
upb_Status_ErrorMessage(&status)));
|
128
|
+
}
|
129
|
+
auto buf = std::make_unique<char[]>(len + 1);
|
130
|
+
upb_JsonEncode(msg, msg_def, pool.ptr(), upb_JsonEncode_EmitDefaults,
|
131
|
+
buf.get(), len + 1, &status);
|
132
|
+
if (!upb_Status_IsOk(&status)) {
|
133
|
+
return absl::InternalError(absl::StrCat("Failed to serialize to JSON: ",
|
134
|
+
upb_Status_ErrorMessage(&status)));
|
135
|
+
}
|
136
|
+
return std::string(buf.get(), len);
|
137
|
+
}
|
138
|
+
|
139
|
+
grpc_channelz_v1_ChannelConnectivityState_State ConnectivityStateFromString(
|
140
|
+
absl::string_view state) {
|
141
|
+
if (state == "READY") return grpc_channelz_v1_ChannelConnectivityState_READY;
|
142
|
+
if (state == "IDLE") return grpc_channelz_v1_ChannelConnectivityState_IDLE;
|
143
|
+
if (state == "CONNECTING") {
|
144
|
+
return grpc_channelz_v1_ChannelConnectivityState_CONNECTING;
|
145
|
+
}
|
146
|
+
if (state == "TRANSIENT_FAILURE") {
|
147
|
+
return grpc_channelz_v1_ChannelConnectivityState_TRANSIENT_FAILURE;
|
148
|
+
}
|
149
|
+
if (state == "SHUTDOWN") {
|
150
|
+
return grpc_channelz_v1_ChannelConnectivityState_SHUTDOWN;
|
151
|
+
}
|
152
|
+
return grpc_channelz_v1_ChannelConnectivityState_UNKNOWN;
|
153
|
+
}
|
154
|
+
|
155
|
+
void PopulateV1Trace(const grpc_channelz_v2_TraceEvent* const* trace_events,
|
156
|
+
size_t num_events, upb_Arena* arena,
|
157
|
+
grpc_channelz_v1_ChannelTrace* trace) {
|
158
|
+
for (size_t i = 0; i < num_events; ++i) {
|
159
|
+
auto* v1_event = grpc_channelz_v1_ChannelTrace_add_events(trace, arena);
|
160
|
+
upb_StringView description =
|
161
|
+
grpc_channelz_v2_TraceEvent_description(trace_events[i]);
|
162
|
+
grpc_channelz_v1_ChannelTraceEvent_set_description(v1_event, description);
|
163
|
+
const auto* ts = grpc_channelz_v2_TraceEvent_timestamp(trace_events[i]);
|
164
|
+
if (ts != nullptr) {
|
165
|
+
auto* v1_ts =
|
166
|
+
grpc_channelz_v1_ChannelTraceEvent_mutable_timestamp(v1_event, arena);
|
167
|
+
google_protobuf_Timestamp_set_seconds(
|
168
|
+
v1_ts, google_protobuf_Timestamp_seconds(ts));
|
169
|
+
google_protobuf_Timestamp_set_nanos(v1_ts,
|
170
|
+
google_protobuf_Timestamp_nanos(ts));
|
171
|
+
}
|
172
|
+
grpc_channelz_v1_ChannelTraceEvent_set_severity(
|
173
|
+
v1_event, grpc_channelz_v1_ChannelTraceEvent_CT_INFO);
|
174
|
+
}
|
175
|
+
}
|
176
|
+
|
177
|
+
void PopulateV1ChannelData(
|
178
|
+
const grpc_channelz_v2_PropertyList* channel_props,
|
179
|
+
const grpc_channelz_v2_PropertyList* call_counts,
|
180
|
+
const grpc_channelz_v2_TraceEvent* const* trace_events, size_t num_events,
|
181
|
+
upb_Arena* arena, grpc_channelz_v1_ChannelData* data) {
|
182
|
+
if (channel_props) {
|
183
|
+
if (auto target = StringFromPropertyList(channel_props, "target");
|
184
|
+
target.has_value()) {
|
185
|
+
grpc_channelz_v1_ChannelData_set_target(
|
186
|
+
data, CopyStdStringToUpbString(*target, arena));
|
187
|
+
}
|
188
|
+
if (auto state =
|
189
|
+
StringFromPropertyList(channel_props, "connectivity_state");
|
190
|
+
state.has_value()) {
|
191
|
+
grpc_channelz_v1_ChannelConnectivityState_set_state(
|
192
|
+
grpc_channelz_v1_ChannelData_mutable_state(data, arena),
|
193
|
+
ConnectivityStateFromString(*state));
|
194
|
+
}
|
195
|
+
}
|
196
|
+
if (call_counts != nullptr) {
|
197
|
+
grpc_channelz_v1_ChannelData_set_calls_started(
|
198
|
+
data, Int64FromPropertyList(call_counts, "calls_started").value_or(0));
|
199
|
+
grpc_channelz_v1_ChannelData_set_calls_succeeded(
|
200
|
+
data,
|
201
|
+
Int64FromPropertyList(call_counts, "calls_succeeded").value_or(0));
|
202
|
+
grpc_channelz_v1_ChannelData_set_calls_failed(
|
203
|
+
data, Int64FromPropertyList(call_counts, "calls_failed").value_or(0));
|
204
|
+
if (auto* last_call_started_timestamp = TimestampFromPropertyList(
|
205
|
+
call_counts, "last_call_started_timestamp");
|
206
|
+
last_call_started_timestamp != nullptr) {
|
207
|
+
auto* v1_ts =
|
208
|
+
grpc_channelz_v1_ChannelData_mutable_last_call_started_timestamp(
|
209
|
+
data, arena);
|
210
|
+
google_protobuf_Timestamp_set_seconds(
|
211
|
+
v1_ts,
|
212
|
+
google_protobuf_Timestamp_seconds(last_call_started_timestamp));
|
213
|
+
google_protobuf_Timestamp_set_nanos(
|
214
|
+
v1_ts, google_protobuf_Timestamp_nanos(last_call_started_timestamp));
|
215
|
+
}
|
216
|
+
}
|
217
|
+
if (num_events > 0) {
|
218
|
+
auto* trace = grpc_channelz_v1_ChannelData_mutable_trace(data, arena);
|
219
|
+
PopulateV1Trace(trace_events, num_events, arena, trace);
|
220
|
+
}
|
221
|
+
}
|
222
|
+
|
223
|
+
} // namespace
|
224
|
+
|
225
|
+
absl::StatusOr<std::string> ConvertServer(const std::string& serialized_entity,
|
226
|
+
EntityFetcher& fetcher, bool json) {
|
227
|
+
upb::Arena arena;
|
228
|
+
const auto* entity = grpc_channelz_v2_Entity_parse(
|
229
|
+
serialized_entity.data(), serialized_entity.size(), arena.ptr());
|
230
|
+
if (entity == nullptr) {
|
231
|
+
return absl::InvalidArgumentError("Failed to parse entity");
|
232
|
+
}
|
233
|
+
|
234
|
+
upb_StringView kind = grpc_channelz_v2_Entity_kind(entity);
|
235
|
+
if (absl::string_view(kind.data, kind.size) != "server") {
|
236
|
+
return absl::InvalidArgumentError("Entity kind is not server");
|
237
|
+
}
|
238
|
+
|
239
|
+
grpc_channelz_v1_Server* v1 = grpc_channelz_v1_Server_new(arena.ptr());
|
240
|
+
grpc_channelz_v1_ServerRef_set_server_id(
|
241
|
+
grpc_channelz_v1_Server_mutable_ref(v1, arena.ptr()),
|
242
|
+
grpc_channelz_v2_Entity_id(entity));
|
243
|
+
const auto* call_counts = GetPropertyList(entity, "call_counts", arena.ptr());
|
244
|
+
size_t num_events;
|
245
|
+
const auto* trace_events = grpc_channelz_v2_Entity_trace(entity, &num_events);
|
246
|
+
if (call_counts != nullptr || num_events > 0) {
|
247
|
+
auto* data = grpc_channelz_v1_Server_mutable_data(v1, arena.ptr());
|
248
|
+
if (call_counts != nullptr) {
|
249
|
+
grpc_channelz_v1_ServerData_set_calls_started(
|
250
|
+
data,
|
251
|
+
Int64FromPropertyList(call_counts, "calls_started").value_or(0));
|
252
|
+
grpc_channelz_v1_ServerData_set_calls_succeeded(
|
253
|
+
data,
|
254
|
+
Int64FromPropertyList(call_counts, "calls_succeeded").value_or(0));
|
255
|
+
grpc_channelz_v1_ServerData_set_calls_failed(
|
256
|
+
data, Int64FromPropertyList(call_counts, "calls_failed").value_or(0));
|
257
|
+
if (auto* last_call_started_timestamp = TimestampFromPropertyList(
|
258
|
+
call_counts, "last_call_started_timestamp")) {
|
259
|
+
auto* v1_ts =
|
260
|
+
grpc_channelz_v1_ServerData_mutable_last_call_started_timestamp(
|
261
|
+
data, arena.ptr());
|
262
|
+
google_protobuf_Timestamp_set_seconds(
|
263
|
+
v1_ts,
|
264
|
+
google_protobuf_Timestamp_seconds(last_call_started_timestamp));
|
265
|
+
google_protobuf_Timestamp_set_nanos(
|
266
|
+
v1_ts,
|
267
|
+
google_protobuf_Timestamp_nanos(last_call_started_timestamp));
|
268
|
+
}
|
269
|
+
}
|
270
|
+
if (num_events > 0) {
|
271
|
+
auto* trace =
|
272
|
+
grpc_channelz_v1_ServerData_mutable_trace(data, arena.ptr());
|
273
|
+
PopulateV1Trace(trace_events, num_events, arena.ptr(), trace);
|
274
|
+
}
|
275
|
+
}
|
276
|
+
auto children =
|
277
|
+
fetcher.GetEntitiesWithParent(grpc_channelz_v2_Entity_id(entity));
|
278
|
+
if (children.ok()) {
|
279
|
+
for (const auto& child_str : *children) {
|
280
|
+
const auto* child_entity = grpc_channelz_v2_Entity_parse(
|
281
|
+
child_str.data(), child_str.size(), arena.ptr());
|
282
|
+
if (child_entity == nullptr) continue;
|
283
|
+
upb_StringView kind = grpc_channelz_v2_Entity_kind(child_entity);
|
284
|
+
if (absl::string_view(kind.data, kind.size) != "listen_socket") {
|
285
|
+
continue;
|
286
|
+
}
|
287
|
+
auto* added = grpc_channelz_v1_Server_add_listen_socket(v1, arena.ptr());
|
288
|
+
grpc_channelz_v1_SocketRef_set_socket_id(
|
289
|
+
added, grpc_channelz_v2_Entity_id(child_entity));
|
290
|
+
if (auto v1_compat =
|
291
|
+
GetPropertyList(child_entity, "v1_compatibility", arena.ptr());
|
292
|
+
v1_compat != nullptr) {
|
293
|
+
if (auto name = StringFromPropertyList(v1_compat, "name");
|
294
|
+
name.has_value()) {
|
295
|
+
grpc_channelz_v1_SocketRef_set_name(
|
296
|
+
added, CopyStdStringToUpbString(*name, arena.ptr()));
|
297
|
+
}
|
298
|
+
}
|
299
|
+
}
|
300
|
+
}
|
301
|
+
if (json) {
|
302
|
+
return SerializeJson((upb_Message*)v1, grpc_channelz_v1_Server_getmsgdef);
|
303
|
+
}
|
304
|
+
size_t length;
|
305
|
+
char* bytes = grpc_channelz_v1_Server_serialize(v1, arena.ptr(), &length);
|
306
|
+
return std::string(bytes, length);
|
307
|
+
}
|
308
|
+
|
309
|
+
absl::StatusOr<std::string> ConvertSocket(const std::string& serialized_entity,
|
310
|
+
EntityFetcher&, bool json) {
|
311
|
+
upb::Arena arena;
|
312
|
+
const auto* entity = grpc_channelz_v2_Entity_parse(
|
313
|
+
serialized_entity.data(), serialized_entity.size(), arena.ptr());
|
314
|
+
if (entity == nullptr) {
|
315
|
+
return absl::InvalidArgumentError("Failed to parse entity");
|
316
|
+
}
|
317
|
+
upb_StringView kind = grpc_channelz_v2_Entity_kind(entity);
|
318
|
+
if (absl::string_view(kind.data, kind.size) != "socket") {
|
319
|
+
return absl::InvalidArgumentError("Entity kind is not socket");
|
320
|
+
}
|
321
|
+
|
322
|
+
grpc_channelz_v1_Socket* v1 = grpc_channelz_v1_Socket_new(arena.ptr());
|
323
|
+
auto* v1_ref = grpc_channelz_v1_Socket_mutable_ref(v1, arena.ptr());
|
324
|
+
grpc_channelz_v1_SocketRef_set_socket_id(v1_ref,
|
325
|
+
grpc_channelz_v2_Entity_id(entity));
|
326
|
+
if (auto v1_compat = GetPropertyList(entity, "v1_compatibility", arena.ptr());
|
327
|
+
v1_compat != nullptr) {
|
328
|
+
if (auto name = StringFromPropertyList(v1_compat, "name");
|
329
|
+
name.has_value()) {
|
330
|
+
grpc_channelz_v1_SocketRef_set_name(
|
331
|
+
v1_ref, CopyStdStringToUpbString(*name, arena.ptr()));
|
332
|
+
}
|
333
|
+
}
|
334
|
+
const auto* call_counts = GetPropertyList(entity, "call_counts", arena.ptr());
|
335
|
+
const auto* http2 = GetPropertyList(entity, "http2", arena.ptr());
|
336
|
+
if (call_counts != nullptr || http2 != nullptr) {
|
337
|
+
auto* data = grpc_channelz_v1_Socket_mutable_data(v1, arena.ptr());
|
338
|
+
if (call_counts != nullptr) {
|
339
|
+
if (auto streams_started =
|
340
|
+
Int64FromPropertyList(call_counts, "streams_started");
|
341
|
+
streams_started.has_value()) {
|
342
|
+
grpc_channelz_v1_SocketData_set_streams_started(data, *streams_started);
|
343
|
+
}
|
344
|
+
if (auto streams_succeeded =
|
345
|
+
Int64FromPropertyList(call_counts, "streams_succeeded");
|
346
|
+
streams_succeeded.has_value()) {
|
347
|
+
grpc_channelz_v1_SocketData_set_streams_succeeded(data,
|
348
|
+
*streams_succeeded);
|
349
|
+
}
|
350
|
+
if (auto streams_failed =
|
351
|
+
Int64FromPropertyList(call_counts, "streams_failed");
|
352
|
+
streams_failed.has_value()) {
|
353
|
+
grpc_channelz_v1_SocketData_set_streams_failed(data, *streams_failed);
|
354
|
+
}
|
355
|
+
if (auto messages_sent =
|
356
|
+
Int64FromPropertyList(call_counts, "messages_sent");
|
357
|
+
messages_sent.has_value()) {
|
358
|
+
grpc_channelz_v1_SocketData_set_messages_sent(data, *messages_sent);
|
359
|
+
}
|
360
|
+
if (auto messages_received =
|
361
|
+
Int64FromPropertyList(call_counts, "messages_received");
|
362
|
+
messages_received.has_value()) {
|
363
|
+
grpc_channelz_v1_SocketData_set_messages_received(data,
|
364
|
+
*messages_received);
|
365
|
+
}
|
366
|
+
if (auto keepalives_sent =
|
367
|
+
Int64FromPropertyList(call_counts, "keepalives_sent");
|
368
|
+
keepalives_sent.has_value()) {
|
369
|
+
grpc_channelz_v1_SocketData_set_keep_alives_sent(data,
|
370
|
+
*keepalives_sent);
|
371
|
+
}
|
372
|
+
if (auto* last_local_stream_created_timestamp = TimestampFromPropertyList(
|
373
|
+
call_counts, "last_local_stream_created_timestamp");
|
374
|
+
last_local_stream_created_timestamp != nullptr) {
|
375
|
+
auto* v1_ts =
|
376
|
+
grpc_channelz_v1_SocketData_mutable_last_local_stream_created_timestamp(
|
377
|
+
data, arena.ptr());
|
378
|
+
google_protobuf_Timestamp_set_seconds(
|
379
|
+
v1_ts, google_protobuf_Timestamp_seconds(
|
380
|
+
last_local_stream_created_timestamp));
|
381
|
+
google_protobuf_Timestamp_set_nanos(
|
382
|
+
v1_ts, google_protobuf_Timestamp_nanos(
|
383
|
+
last_local_stream_created_timestamp));
|
384
|
+
}
|
385
|
+
if (auto* last_remote_stream_created_timestamp =
|
386
|
+
TimestampFromPropertyList(call_counts,
|
387
|
+
"last_remote_stream_created_timestamp");
|
388
|
+
last_remote_stream_created_timestamp != nullptr) {
|
389
|
+
auto* v1_ts =
|
390
|
+
grpc_channelz_v1_SocketData_mutable_last_remote_stream_created_timestamp(
|
391
|
+
data, arena.ptr());
|
392
|
+
google_protobuf_Timestamp_set_seconds(
|
393
|
+
v1_ts, google_protobuf_Timestamp_seconds(
|
394
|
+
last_remote_stream_created_timestamp));
|
395
|
+
google_protobuf_Timestamp_set_nanos(
|
396
|
+
v1_ts, google_protobuf_Timestamp_nanos(
|
397
|
+
last_remote_stream_created_timestamp));
|
398
|
+
}
|
399
|
+
if (auto* last_message_sent_timestamp = TimestampFromPropertyList(
|
400
|
+
call_counts, "last_message_sent_timestamp");
|
401
|
+
last_message_sent_timestamp != nullptr) {
|
402
|
+
auto* v1_ts =
|
403
|
+
grpc_channelz_v1_SocketData_mutable_last_message_sent_timestamp(
|
404
|
+
data, arena.ptr());
|
405
|
+
google_protobuf_Timestamp_set_seconds(
|
406
|
+
v1_ts,
|
407
|
+
google_protobuf_Timestamp_seconds(last_message_sent_timestamp));
|
408
|
+
google_protobuf_Timestamp_set_nanos(
|
409
|
+
v1_ts,
|
410
|
+
google_protobuf_Timestamp_nanos(last_message_sent_timestamp));
|
411
|
+
}
|
412
|
+
if (auto* last_message_received_timestamp = TimestampFromPropertyList(
|
413
|
+
call_counts, "last_message_received_timestamp");
|
414
|
+
last_message_received_timestamp != nullptr) {
|
415
|
+
auto* v1_ts =
|
416
|
+
grpc_channelz_v1_SocketData_mutable_last_message_received_timestamp(
|
417
|
+
data, arena.ptr());
|
418
|
+
google_protobuf_Timestamp_set_seconds(
|
419
|
+
v1_ts,
|
420
|
+
google_protobuf_Timestamp_seconds(last_message_received_timestamp));
|
421
|
+
google_protobuf_Timestamp_set_nanos(
|
422
|
+
v1_ts,
|
423
|
+
google_protobuf_Timestamp_nanos(last_message_received_timestamp));
|
424
|
+
}
|
425
|
+
}
|
426
|
+
if (http2 != nullptr) {
|
427
|
+
if (auto flow_control =
|
428
|
+
PropertyListFromPropertyList(http2, "flow_control", arena.ptr());
|
429
|
+
flow_control != nullptr) {
|
430
|
+
if (auto remote_window =
|
431
|
+
Int64FromPropertyList(flow_control, "remote_window");
|
432
|
+
remote_window.has_value()) {
|
433
|
+
google_protobuf_Int64Value_set_value(
|
434
|
+
grpc_channelz_v1_SocketData_mutable_local_flow_control_window(
|
435
|
+
data, arena.ptr()),
|
436
|
+
*remote_window);
|
437
|
+
}
|
438
|
+
if (auto announced_window =
|
439
|
+
Int64FromPropertyList(flow_control, "announced_window");
|
440
|
+
announced_window.has_value()) {
|
441
|
+
google_protobuf_Int64Value_set_value(
|
442
|
+
grpc_channelz_v1_SocketData_mutable_remote_flow_control_window(
|
443
|
+
data, arena.ptr()),
|
444
|
+
*announced_window);
|
445
|
+
}
|
446
|
+
}
|
447
|
+
}
|
448
|
+
}
|
449
|
+
|
450
|
+
if (auto socket_props = GetPropertyList(entity, "socket", arena.ptr());
|
451
|
+
socket_props != nullptr) {
|
452
|
+
if (auto local = StringFromPropertyList(socket_props, "local");
|
453
|
+
local.has_value()) {
|
454
|
+
ParseAddress(*local, arena.ptr(),
|
455
|
+
grpc_channelz_v1_Socket_mutable_local(v1, arena.ptr()));
|
456
|
+
}
|
457
|
+
if (auto remote = StringFromPropertyList(socket_props, "remote");
|
458
|
+
remote.has_value()) {
|
459
|
+
ParseAddress(*remote, arena.ptr(),
|
460
|
+
grpc_channelz_v1_Socket_mutable_remote(v1, arena.ptr()));
|
461
|
+
}
|
462
|
+
}
|
463
|
+
|
464
|
+
if (auto security = GetPropertyList(entity, "security", arena.ptr());
|
465
|
+
security != nullptr) {
|
466
|
+
auto* v1_security =
|
467
|
+
grpc_channelz_v1_Socket_mutable_security(v1, arena.ptr());
|
468
|
+
if (auto other = StringFromPropertyList(security, "other");
|
469
|
+
other.has_value()) {
|
470
|
+
grpc_channelz_v1_Security_OtherSecurity_set_name(
|
471
|
+
grpc_channelz_v1_Security_mutable_other(v1_security, arena.ptr()),
|
472
|
+
CopyStdStringToUpbString(*other, arena.ptr()));
|
473
|
+
} else {
|
474
|
+
auto* tls =
|
475
|
+
grpc_channelz_v1_Security_mutable_tls(v1_security, arena.ptr());
|
476
|
+
if (auto standard_name =
|
477
|
+
StringFromPropertyList(security, "standard_name");
|
478
|
+
standard_name.has_value()) {
|
479
|
+
grpc_channelz_v1_Security_Tls_set_standard_name(
|
480
|
+
tls, CopyStdStringToUpbString(*standard_name, arena.ptr()));
|
481
|
+
}
|
482
|
+
if (auto other_name = StringFromPropertyList(security, "other_name");
|
483
|
+
other_name.has_value()) {
|
484
|
+
grpc_channelz_v1_Security_Tls_set_other_name(
|
485
|
+
tls, CopyStdStringToUpbString(*other_name, arena.ptr()));
|
486
|
+
}
|
487
|
+
if (auto local_cert =
|
488
|
+
StringFromPropertyList(security, "local_certificate");
|
489
|
+
local_cert.has_value()) {
|
490
|
+
std::string decoded;
|
491
|
+
if (absl::Base64Unescape(*local_cert, &decoded)) {
|
492
|
+
grpc_channelz_v1_Security_Tls_set_local_certificate(
|
493
|
+
tls, CopyStdStringToUpbString(decoded, arena.ptr()));
|
494
|
+
}
|
495
|
+
}
|
496
|
+
if (auto remote_cert =
|
497
|
+
StringFromPropertyList(security, "remote_certificate");
|
498
|
+
remote_cert.has_value()) {
|
499
|
+
std::string decoded;
|
500
|
+
if (absl::Base64Unescape(*remote_cert, &decoded)) {
|
501
|
+
grpc_channelz_v1_Security_Tls_set_remote_certificate(
|
502
|
+
tls, CopyStdStringToUpbString(decoded, arena.ptr()));
|
503
|
+
}
|
504
|
+
}
|
505
|
+
}
|
506
|
+
}
|
507
|
+
|
508
|
+
if (json) {
|
509
|
+
return SerializeJson((upb_Message*)v1, grpc_channelz_v1_Socket_getmsgdef);
|
510
|
+
}
|
511
|
+
size_t length;
|
512
|
+
char* bytes = grpc_channelz_v1_Socket_serialize(v1, arena.ptr(), &length);
|
513
|
+
return std::string(bytes, length);
|
514
|
+
}
|
515
|
+
|
516
|
+
absl::StatusOr<std::string> ConvertChannel(const std::string& serialized_entity,
|
517
|
+
EntityFetcher& fetcher, bool json) {
|
518
|
+
upb::Arena arena;
|
519
|
+
const auto* entity = grpc_channelz_v2_Entity_parse(
|
520
|
+
serialized_entity.data(), serialized_entity.size(), arena.ptr());
|
521
|
+
if (entity == nullptr) {
|
522
|
+
return absl::InvalidArgumentError("Failed to parse entity");
|
523
|
+
}
|
524
|
+
upb_StringView kind = grpc_channelz_v2_Entity_kind(entity);
|
525
|
+
if (absl::string_view(kind.data, kind.size) != "channel" &&
|
526
|
+
absl::string_view(kind.data, kind.size) != "top_level_channel") {
|
527
|
+
return absl::InvalidArgumentError(
|
528
|
+
"Entity kind is not channel or top_level_channel");
|
529
|
+
}
|
530
|
+
grpc_channelz_v1_Channel* v1 = grpc_channelz_v1_Channel_new(arena.ptr());
|
531
|
+
grpc_channelz_v1_ChannelRef_set_channel_id(
|
532
|
+
grpc_channelz_v1_Channel_mutable_ref(v1, arena.ptr()),
|
533
|
+
grpc_channelz_v2_Entity_id(entity));
|
534
|
+
const auto* channel_props = GetPropertyList(entity, "channel", arena.ptr());
|
535
|
+
const auto* call_counts = GetPropertyList(entity, "call_counts", arena.ptr());
|
536
|
+
size_t num_events;
|
537
|
+
const auto* trace_events = grpc_channelz_v2_Entity_trace(entity, &num_events);
|
538
|
+
auto* data = grpc_channelz_v1_Channel_mutable_data(v1, arena.ptr());
|
539
|
+
PopulateV1ChannelData(channel_props, call_counts, trace_events, num_events,
|
540
|
+
arena.ptr(), data);
|
541
|
+
auto children =
|
542
|
+
fetcher.GetEntitiesWithParent(grpc_channelz_v2_Entity_id(entity));
|
543
|
+
if (children.ok()) {
|
544
|
+
for (const auto& child_str : *children) {
|
545
|
+
const auto* child = grpc_channelz_v2_Entity_parse(
|
546
|
+
child_str.data(), child_str.size(), arena.ptr());
|
547
|
+
if (child == nullptr) continue;
|
548
|
+
upb_StringView child_kind = grpc_channelz_v2_Entity_kind(child);
|
549
|
+
if (absl::string_view(child_kind.data, child_kind.size) == "channel") {
|
550
|
+
auto* child_ref =
|
551
|
+
grpc_channelz_v1_Channel_add_channel_ref(v1, arena.ptr());
|
552
|
+
grpc_channelz_v1_ChannelRef_set_channel_id(
|
553
|
+
child_ref, grpc_channelz_v2_Entity_id(child));
|
554
|
+
} else if (absl::string_view(child_kind.data, child_kind.size) ==
|
555
|
+
"subchannel") {
|
556
|
+
auto* child_ref =
|
557
|
+
grpc_channelz_v1_Channel_add_subchannel_ref(v1, arena.ptr());
|
558
|
+
grpc_channelz_v1_SubchannelRef_set_subchannel_id(
|
559
|
+
child_ref, grpc_channelz_v2_Entity_id(child));
|
560
|
+
}
|
561
|
+
}
|
562
|
+
}
|
563
|
+
if (json) {
|
564
|
+
return SerializeJson((upb_Message*)v1, grpc_channelz_v1_Channel_getmsgdef);
|
565
|
+
}
|
566
|
+
size_t length;
|
567
|
+
char* bytes = grpc_channelz_v1_Channel_serialize(v1, arena.ptr(), &length);
|
568
|
+
return std::string(bytes, length);
|
569
|
+
}
|
570
|
+
|
571
|
+
absl::StatusOr<std::string> ConvertSubchannel(
|
572
|
+
const std::string& serialized_entity, EntityFetcher& fetcher, bool json) {
|
573
|
+
upb::Arena arena;
|
574
|
+
const auto* entity = grpc_channelz_v2_Entity_parse(
|
575
|
+
serialized_entity.data(), serialized_entity.size(), arena.ptr());
|
576
|
+
if (entity == nullptr) {
|
577
|
+
return absl::InvalidArgumentError("Failed to parse entity");
|
578
|
+
}
|
579
|
+
upb_StringView kind = grpc_channelz_v2_Entity_kind(entity);
|
580
|
+
if (absl::string_view(kind.data, kind.size) != "subchannel") {
|
581
|
+
return absl::InvalidArgumentError("Entity kind is not subchannel");
|
582
|
+
}
|
583
|
+
grpc_channelz_v1_Subchannel* v1 =
|
584
|
+
grpc_channelz_v1_Subchannel_new(arena.ptr());
|
585
|
+
grpc_channelz_v1_SubchannelRef_set_subchannel_id(
|
586
|
+
grpc_channelz_v1_Subchannel_mutable_ref(v1, arena.ptr()),
|
587
|
+
grpc_channelz_v2_Entity_id(entity));
|
588
|
+
const auto* channel_props = GetPropertyList(entity, "channel", arena.ptr());
|
589
|
+
const auto* call_counts = GetPropertyList(entity, "call_counts", arena.ptr());
|
590
|
+
size_t num_events;
|
591
|
+
const auto* trace_events = grpc_channelz_v2_Entity_trace(entity, &num_events);
|
592
|
+
auto* data = grpc_channelz_v1_Subchannel_mutable_data(v1, arena.ptr());
|
593
|
+
PopulateV1ChannelData(channel_props, call_counts, trace_events, num_events,
|
594
|
+
arena.ptr(), data);
|
595
|
+
auto children =
|
596
|
+
fetcher.GetEntitiesWithParent(grpc_channelz_v2_Entity_id(entity));
|
597
|
+
if (children.ok()) {
|
598
|
+
for (const auto& child_str : *children) {
|
599
|
+
const auto* child = grpc_channelz_v2_Entity_parse(
|
600
|
+
child_str.data(), child_str.size(), arena.ptr());
|
601
|
+
if (child == nullptr) continue;
|
602
|
+
upb_StringView child_kind = grpc_channelz_v2_Entity_kind(child);
|
603
|
+
if (absl::string_view(child_kind.data, child_kind.size) == "channel") {
|
604
|
+
auto* child_ref =
|
605
|
+
grpc_channelz_v1_Subchannel_add_channel_ref(v1, arena.ptr());
|
606
|
+
grpc_channelz_v1_ChannelRef_set_channel_id(
|
607
|
+
child_ref, grpc_channelz_v2_Entity_id(child));
|
608
|
+
} else if (absl::string_view(child_kind.data, child_kind.size) ==
|
609
|
+
"subchannel") {
|
610
|
+
auto* child_ref =
|
611
|
+
grpc_channelz_v1_Subchannel_add_subchannel_ref(v1, arena.ptr());
|
612
|
+
grpc_channelz_v1_SubchannelRef_set_subchannel_id(
|
613
|
+
child_ref, grpc_channelz_v2_Entity_id(child));
|
614
|
+
} else if (absl::string_view(child_kind.data, child_kind.size) ==
|
615
|
+
"socket") {
|
616
|
+
auto* child_ref =
|
617
|
+
grpc_channelz_v1_Subchannel_add_socket_ref(v1, arena.ptr());
|
618
|
+
grpc_channelz_v1_SocketRef_set_socket_id(
|
619
|
+
child_ref, grpc_channelz_v2_Entity_id(child));
|
620
|
+
if (auto v1_compat =
|
621
|
+
GetPropertyList(child, "v1_compatibility", arena.ptr());
|
622
|
+
v1_compat != nullptr) {
|
623
|
+
if (auto name = StringFromPropertyList(v1_compat, "name");
|
624
|
+
name.has_value()) {
|
625
|
+
grpc_channelz_v1_SocketRef_set_name(
|
626
|
+
child_ref, CopyStdStringToUpbString(*name, arena.ptr()));
|
627
|
+
}
|
628
|
+
}
|
629
|
+
}
|
630
|
+
}
|
631
|
+
}
|
632
|
+
if (json) {
|
633
|
+
return SerializeJson((upb_Message*)v1,
|
634
|
+
grpc_channelz_v1_Subchannel_getmsgdef);
|
635
|
+
}
|
636
|
+
size_t length;
|
637
|
+
char* bytes = grpc_channelz_v1_Subchannel_serialize(v1, arena.ptr(), &length);
|
638
|
+
return std::string(bytes, length);
|
639
|
+
}
|
640
|
+
|
641
|
+
absl::StatusOr<std::string> ConvertListenSocket(
|
642
|
+
const std::string& serialized_entity, EntityFetcher&, bool json) {
|
643
|
+
upb::Arena arena;
|
644
|
+
const auto* entity = grpc_channelz_v2_Entity_parse(
|
645
|
+
serialized_entity.data(), serialized_entity.size(), arena.ptr());
|
646
|
+
if (entity == nullptr) {
|
647
|
+
return absl::InvalidArgumentError("Failed to parse entity");
|
648
|
+
}
|
649
|
+
upb_StringView kind = grpc_channelz_v2_Entity_kind(entity);
|
650
|
+
if (absl::string_view(kind.data, kind.size) != "listen_socket") {
|
651
|
+
return absl::InvalidArgumentError("Entity kind is not listen_socket");
|
652
|
+
}
|
653
|
+
grpc_channelz_v1_Socket* v1 = grpc_channelz_v1_Socket_new(arena.ptr());
|
654
|
+
auto* v1_ref = grpc_channelz_v1_Socket_mutable_ref(v1, arena.ptr());
|
655
|
+
grpc_channelz_v1_SocketRef_set_socket_id(v1_ref,
|
656
|
+
grpc_channelz_v2_Entity_id(entity));
|
657
|
+
if (auto v1_compat = GetPropertyList(entity, "v1_compatibility", arena.ptr());
|
658
|
+
v1_compat != nullptr) {
|
659
|
+
if (auto name = StringFromPropertyList(v1_compat, "name");
|
660
|
+
name.has_value()) {
|
661
|
+
grpc_channelz_v1_SocketRef_set_name(
|
662
|
+
v1_ref, CopyStdStringToUpbString(*name, arena.ptr()));
|
663
|
+
}
|
664
|
+
}
|
665
|
+
if (auto socket_props = GetPropertyList(entity, "socket", arena.ptr());
|
666
|
+
socket_props != nullptr) {
|
667
|
+
if (auto local = StringFromPropertyList(socket_props, "local");
|
668
|
+
local.has_value()) {
|
669
|
+
ParseAddress(*local, arena.ptr(),
|
670
|
+
grpc_channelz_v1_Socket_mutable_local(v1, arena.ptr()));
|
671
|
+
}
|
672
|
+
}
|
673
|
+
if (json) {
|
674
|
+
return SerializeJson((upb_Message*)v1, grpc_channelz_v1_Socket_getmsgdef);
|
675
|
+
}
|
676
|
+
size_t length;
|
677
|
+
char* bytes = grpc_channelz_v1_Socket_serialize(v1, arena.ptr(), &length);
|
678
|
+
return std::string(bytes, length);
|
679
|
+
}
|
680
|
+
|
681
|
+
} // namespace v2tov1
|
682
|
+
} // namespace channelz
|
683
|
+
} // namespace grpc_core
|