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/util/latent_see.cc
CHANGED
@@ -14,174 +14,206 @@
|
|
14
14
|
|
15
15
|
#include "src/core/util/latent_see.h"
|
16
16
|
|
17
|
-
#ifdef GRPC_ENABLE_LATENT_SEE
|
18
17
|
#include <atomic>
|
19
|
-
#include <chrono>
|
20
18
|
#include <cstdint>
|
21
|
-
#include <
|
19
|
+
#include <memory>
|
22
20
|
#include <string>
|
23
21
|
#include <vector>
|
24
22
|
|
23
|
+
#include "absl/log/log.h"
|
25
24
|
#include "absl/strings/str_cat.h"
|
26
|
-
#include "
|
27
|
-
#include "
|
28
|
-
#include "src/core/util/ring_buffer.h"
|
25
|
+
#include "src/core/util/backoff.h"
|
26
|
+
#include "src/core/util/notification.h"
|
29
27
|
#include "src/core/util/sync.h"
|
30
28
|
|
29
|
+
namespace grpc_core::latent_see {
|
30
|
+
|
31
|
+
thread_local std::unique_ptr<Bin> Appender::bin_;
|
32
|
+
std::atomic<Sink*> Appender::active_sink_;
|
33
|
+
|
34
|
+
std::string JsonOutput::MicrosString(int64_t nanos) {
|
35
|
+
CHECK_GE(nanos, 0);
|
36
|
+
const auto micros = nanos / 1000;
|
37
|
+
const auto remainder = nanos % 1000;
|
38
|
+
return absl::StrFormat("%d.%03d", micros, remainder);
|
39
|
+
}
|
40
|
+
|
41
|
+
void JsonOutput::Mark(absl::string_view name, int64_t tid, int64_t timestamp) {
|
42
|
+
out_ << absl::StrCat(sep_, "{\"name\":\"", name,
|
43
|
+
"\",\"ph\":\"i\",\"ts\":", MicrosString(timestamp),
|
44
|
+
",\"pid\":0,\"tid\":", tid, "}");
|
45
|
+
sep_ = ",\n";
|
46
|
+
}
|
47
|
+
|
48
|
+
void JsonOutput::FlowBegin(absl::string_view name, int64_t tid,
|
49
|
+
int64_t timestamp, int64_t flow_id) {
|
50
|
+
out_ << absl::StrCat(sep_, "{\"name\":\"", name,
|
51
|
+
"\",\"ph\":\"s\",\"ts\":", MicrosString(timestamp),
|
52
|
+
",\"pid\":0,\"tid\":", tid, ",\"id\":", flow_id, "}");
|
53
|
+
sep_ = ",\n";
|
54
|
+
}
|
55
|
+
|
56
|
+
void JsonOutput::FlowEnd(absl::string_view name, int64_t tid, int64_t timestamp,
|
57
|
+
int64_t flow_id) {
|
58
|
+
out_ << absl::StrCat(sep_, "{\"name\":\"", name,
|
59
|
+
"\",\"ph\":\"f\",\"ts\":", MicrosString(timestamp),
|
60
|
+
",\"pid\":0,\"tid\":", tid, ",\"id\":", flow_id, "}");
|
61
|
+
sep_ = ",\n";
|
62
|
+
}
|
63
|
+
|
64
|
+
void JsonOutput::Span(absl::string_view name, int64_t tid,
|
65
|
+
int64_t timestamp_begin, int64_t duration) {
|
66
|
+
out_ << absl::StrCat(sep_, "{\"name\":\"", name,
|
67
|
+
"\",\"ph\":\"X\",\"ts\":", MicrosString(timestamp_begin),
|
68
|
+
",\"pid\":0,\"tid\":", tid,
|
69
|
+
",\"dur\":", MicrosString(duration), "}");
|
70
|
+
sep_ = ",\n";
|
71
|
+
}
|
72
|
+
|
73
|
+
void JsonOutput::Finish() { out_ << "\n]"; }
|
74
|
+
} // namespace grpc_core::latent_see
|
75
|
+
|
76
|
+
#ifndef GRPC_DISABLE_LATENT_SEE
|
77
|
+
|
31
78
|
namespace grpc_core {
|
32
79
|
namespace latent_see {
|
33
80
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
std::chrono::steady_clock::now();
|
41
|
-
|
42
|
-
void Log::InstallAtExitHandler() {
|
43
|
-
atexit([] {
|
44
|
-
auto& log = Log::Get();
|
45
|
-
auto json = log.TryGenerateJson();
|
46
|
-
if (!json.has_value()) {
|
47
|
-
LOG(INFO) << "Failed to generate latent_see.json (contention with "
|
48
|
-
"another writer)";
|
49
|
-
return;
|
50
|
-
}
|
51
|
-
if (log.stats_flusher_ != nullptr) {
|
52
|
-
log.stats_flusher_(*json);
|
53
|
-
return;
|
54
|
-
}
|
55
|
-
LOG(INFO) << "Writing latent_see.json in " << get_current_dir_name();
|
56
|
-
FILE* f = fopen("latent_see.json", "w");
|
57
|
-
if (f == nullptr) return;
|
58
|
-
fprintf(f, "%s", json->c_str());
|
59
|
-
fclose(f);
|
60
|
-
});
|
81
|
+
namespace {
|
82
|
+
const Duration kMaxBackoff = Duration::Milliseconds(300);
|
83
|
+
}
|
84
|
+
|
85
|
+
void Appender::Enable(Sink* sink) {
|
86
|
+
active_sink_.store(sink, std::memory_order_release);
|
61
87
|
}
|
62
88
|
|
63
|
-
void
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
89
|
+
void Appender::Disable() {
|
90
|
+
active_sink_.store(nullptr, std::memory_order_relaxed);
|
91
|
+
}
|
92
|
+
|
93
|
+
Sink::Sink() : gatherer_("grpc_latent_see_gatherer", [this]() { Gather(); }) {
|
94
|
+
gatherer_.Start();
|
95
|
+
}
|
96
|
+
|
97
|
+
void Sink::Append(std::unique_ptr<Bin> bin) { appending_.Push(bin.release()); }
|
98
|
+
|
99
|
+
void Sink::Gather() {
|
100
|
+
BackOff backoff(BackOff::Options()
|
101
|
+
.set_initial_backoff(Duration::Milliseconds(1))
|
102
|
+
.set_multiplier(1.1)
|
103
|
+
.set_jitter(0.05)
|
104
|
+
.set_max_backoff(kMaxBackoff));
|
105
|
+
while (true) {
|
106
|
+
std::unique_ptr<Bin> bin(static_cast<Bin*>(appending_.Pop()));
|
107
|
+
if (bin == nullptr) {
|
108
|
+
absl::SleepFor(absl::Milliseconds(backoff.NextAttemptDelay().millis()));
|
109
|
+
continue;
|
72
110
|
}
|
73
|
-
|
74
|
-
|
75
|
-
// Now we hold the lock; swap all active fragments to flushing.
|
76
|
-
// This is relatively quick and ensures that we don't stall capture for
|
77
|
-
// long.
|
78
|
-
for (auto& fragment : fragments_) {
|
79
|
-
CHECK_EQ(fragment.flushing.size(), 0);
|
80
|
-
MutexLock lock(&fragment.mu_active);
|
81
|
-
fragment.flushing.swap(fragment.active);
|
111
|
+
backoff.Reset();
|
112
|
+
Record(std::move(bin));
|
82
113
|
}
|
83
|
-
// Now we've swapped out, call the callback repeatedly with each fragment.
|
84
|
-
// This is the slow part - there's a lot of copying and transformation that
|
85
|
-
// happens here.
|
86
|
-
// We keep the mu_flushing_ held so that we can guarantee only one thread is
|
87
|
-
// consumed by this at a time.
|
88
|
-
// Once we've called the callback for each fragment we can clear it, so that
|
89
|
-
// when we next swap it with the active fragment it will be empty.
|
90
|
-
// This also retains the memory, so if we're serializing with a regular
|
91
|
-
// cadence we'll tend to stabilize memory usage for latent_see relatively
|
92
|
-
// quickly.
|
93
|
-
for (auto& fragment : fragments_) {
|
94
|
-
callback(fragment.flushing);
|
95
|
-
fragment.flushing.clear();
|
96
|
-
}
|
97
|
-
mu_flushing_.Unlock();
|
98
114
|
}
|
99
115
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
++callbacks;
|
107
|
-
for (const auto& event : events) {
|
108
|
-
absl::string_view phase;
|
109
|
-
bool has_id;
|
110
|
-
switch (event.event.type) {
|
111
|
-
case EventType::kBegin:
|
112
|
-
phase = "B";
|
113
|
-
has_id = false;
|
114
|
-
break;
|
115
|
-
case EventType::kEnd:
|
116
|
-
phase = "E";
|
117
|
-
has_id = false;
|
118
|
-
break;
|
119
|
-
case EventType::kFlowStart:
|
120
|
-
phase = "s";
|
121
|
-
has_id = true;
|
122
|
-
break;
|
123
|
-
case EventType::kFlowEnd:
|
124
|
-
phase = "f";
|
125
|
-
has_id = true;
|
126
|
-
break;
|
127
|
-
case EventType::kMark:
|
128
|
-
phase = "i";
|
129
|
-
has_id = false;
|
130
|
-
break;
|
131
|
-
}
|
132
|
-
if (!first) {
|
133
|
-
absl::StrAppend(&json, ",\n");
|
134
|
-
}
|
135
|
-
first = false;
|
136
|
-
if (event.event.metadata->name[0] != '"') {
|
137
|
-
absl::StrAppend(
|
138
|
-
&json, "{\"name\": \"", event.event.metadata->name,
|
139
|
-
"\", \"ph\": \"", phase, "\", \"ts\": ",
|
140
|
-
absl::StrFormat(
|
141
|
-
"%.12g",
|
142
|
-
Nanos(event.event.timestamp - start_time).count() / 1000.0),
|
143
|
-
", \"pid\": 0, \"tid\": ", event.thread_id);
|
144
|
-
} else {
|
145
|
-
absl::StrAppend(
|
146
|
-
&json, "{\"name\": ", event.event.metadata->name, ", \"ph\": \"",
|
147
|
-
phase, "\", \"ts\": ",
|
148
|
-
absl::StrFormat(
|
149
|
-
"%.12g",
|
150
|
-
Nanos(event.event.timestamp - start_time).count() / 1000.0),
|
151
|
-
", \"pid\": 0, \"tid\": ", event.thread_id);
|
152
|
-
}
|
116
|
+
void Sink::Start(size_t max_bins) {
|
117
|
+
auto events = std::make_unique<EventDump>();
|
118
|
+
MutexLock lock(&mu_);
|
119
|
+
max_bins_ = max_bins;
|
120
|
+
events_ = std::move(events);
|
121
|
+
}
|
153
122
|
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
if (
|
167
|
-
absl::StrAppend(&json, "\n]");
|
168
|
-
return json;
|
123
|
+
std::unique_ptr<Sink::EventDump> Sink::Stop() {
|
124
|
+
MutexLock lock(&mu_);
|
125
|
+
auto events = std::move(events_);
|
126
|
+
events_ = nullptr;
|
127
|
+
return events;
|
128
|
+
}
|
129
|
+
|
130
|
+
void Sink::Record(std::unique_ptr<Bin> bin) {
|
131
|
+
MutexLock lock(&mu_);
|
132
|
+
if (events_ == nullptr) return;
|
133
|
+
CHECK_LE(bin->num_events, Bin::kEventsPerBin);
|
134
|
+
events_->emplace_back(std::move(bin));
|
135
|
+
if (events_->size() > max_bins_) events_->pop_front();
|
169
136
|
}
|
170
137
|
|
171
|
-
void
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
138
|
+
void Collect(Notification* n, absl::Duration timeout, size_t memory_limit,
|
139
|
+
Output* output) {
|
140
|
+
static Sink* sink = new Sink;
|
141
|
+
static Mutex* mu = new Mutex;
|
142
|
+
|
143
|
+
// Collection phase - under a mutex to prevent multiple collections at once.
|
144
|
+
mu->Lock();
|
145
|
+
// First we enable the appender and then wait for a short time to clear out
|
146
|
+
// any backoff
|
147
|
+
LOG(INFO) << "Latent-see collection enabling";
|
148
|
+
Appender::Enable(sink);
|
149
|
+
absl::SleepFor(2 * absl::Milliseconds(kMaxBackoff.millis()));
|
150
|
+
// Now we start the collection
|
151
|
+
LOG(INFO) << "Latent-see collection recording";
|
152
|
+
sink->Start(memory_limit / sizeof(Bin) + 1);
|
153
|
+
// If we got a Notification object, use that to sleep until we're notified;
|
154
|
+
// if not just sleep.
|
155
|
+
if (n == nullptr) {
|
156
|
+
absl::SleepFor(timeout);
|
157
|
+
} else {
|
158
|
+
n->WaitForNotificationWithTimeout(timeout);
|
159
|
+
}
|
160
|
+
// Grab all events
|
161
|
+
LOG(INFO) << "Latent-see collection stopping";
|
162
|
+
auto events = sink->Stop();
|
163
|
+
// Disable the sink
|
164
|
+
Appender::Disable();
|
165
|
+
mu->Unlock();
|
166
|
+
CHECK(events != nullptr);
|
167
|
+
LOG(INFO) << "Latent-see collection stopped: processing " << events->size()
|
168
|
+
<< " bins";
|
169
|
+
|
170
|
+
// Next: find the earliest timestamp
|
171
|
+
// We save a lot of bytes by subtracting that out
|
172
|
+
int64_t earliest_timestamp = std::numeric_limits<int64_t>::max();
|
173
|
+
for (const auto& bin : *events) {
|
174
|
+
for (const auto& event : *bin) {
|
175
|
+
// Exclude negative timestamps as they're used for event type markers
|
176
|
+
if (event.timestamp_begin > 0) {
|
177
|
+
earliest_timestamp = std::min(
|
178
|
+
{earliest_timestamp, event.timestamp_begin, event.timestamp_end});
|
179
|
+
} else {
|
180
|
+
earliest_timestamp = std::min(earliest_timestamp, -event.timestamp_end);
|
181
|
+
}
|
182
|
+
}
|
183
|
+
}
|
184
|
+
std::string json = "[\n";
|
185
|
+
// TODO(ctiller): Fuschia Trace Format backend
|
186
|
+
absl::flat_hash_map<gpr_thd_id, size_t> thread_id_map;
|
187
|
+
for (const auto& bin : *events) {
|
188
|
+
size_t displayed_thread_id;
|
189
|
+
auto it = thread_id_map.find(bin->thd_id);
|
190
|
+
if (it == thread_id_map.end()) {
|
191
|
+
displayed_thread_id = thread_id_map.size() + 1;
|
192
|
+
thread_id_map[bin->thd_id] = displayed_thread_id;
|
193
|
+
} else {
|
194
|
+
displayed_thread_id = it->second;
|
195
|
+
}
|
196
|
+
for (const auto& event : *bin) {
|
197
|
+
if (event.timestamp_begin == event.timestamp_end) {
|
198
|
+
output->Mark(event.metadata->name, displayed_thread_id,
|
199
|
+
event.timestamp_begin - earliest_timestamp);
|
200
|
+
} else if (event.timestamp_begin < 0 && event.timestamp_end > 0) {
|
201
|
+
output->FlowBegin(event.metadata->name, displayed_thread_id,
|
202
|
+
event.timestamp_end - earliest_timestamp,
|
203
|
+
-event.timestamp_begin);
|
204
|
+
} else if (event.timestamp_begin < 0) {
|
205
|
+
output->FlowEnd(event.metadata->name, displayed_thread_id,
|
206
|
+
-event.timestamp_end - earliest_timestamp,
|
207
|
+
-event.timestamp_begin);
|
208
|
+
} else {
|
209
|
+
output->Span(event.metadata->name, displayed_thread_id,
|
210
|
+
event.timestamp_begin - earliest_timestamp,
|
211
|
+
event.timestamp_end - event.timestamp_begin);
|
212
|
+
}
|
182
213
|
}
|
183
214
|
}
|
184
|
-
|
215
|
+
output->Finish();
|
216
|
+
LOG(INFO) << "Latent-see collection complete";
|
185
217
|
}
|
186
218
|
|
187
219
|
} // namespace latent_see
|