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.h
CHANGED
@@ -16,30 +16,73 @@
|
|
16
16
|
#define GRPC_SRC_CORE_UTIL_LATENT_SEE_H
|
17
17
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
|
-
|
20
|
-
#ifdef GRPC_ENABLE_LATENT_SEE
|
21
|
-
#include <sys/syscall.h>
|
22
|
-
#include <unistd.h>
|
19
|
+
#include <grpc/support/thd_id.h>
|
23
20
|
|
24
21
|
#include <atomic>
|
25
|
-
#include <chrono>
|
26
22
|
#include <cstdint>
|
27
23
|
#include <cstdio>
|
28
24
|
#include <cstdlib>
|
29
|
-
#include <
|
30
|
-
#include <string>
|
25
|
+
#include <memory>
|
31
26
|
#include <utility>
|
32
|
-
#include <vector>
|
33
27
|
|
34
|
-
#include "absl/
|
35
|
-
#include "absl/functional/any_invocable.h"
|
36
|
-
#include "absl/functional/function_ref.h"
|
37
|
-
#include "absl/log/log.h"
|
28
|
+
#include "absl/container/flat_hash_map.h"
|
38
29
|
#include "absl/strings/string_view.h"
|
39
|
-
#include "
|
40
|
-
#include "src/core/util/
|
30
|
+
#include "absl/time/clock.h"
|
31
|
+
#include "src/core/util/mpscq.h"
|
32
|
+
#include "src/core/util/notification.h"
|
33
|
+
#include "src/core/util/thd.h"
|
34
|
+
|
35
|
+
namespace grpc_core {
|
36
|
+
namespace latent_see {
|
37
|
+
|
38
|
+
class Output {
|
39
|
+
public:
|
40
|
+
virtual void Mark(absl::string_view name, int64_t tid, int64_t timestamp) = 0;
|
41
|
+
virtual void FlowBegin(absl::string_view name, int64_t tid, int64_t timestamp,
|
42
|
+
int64_t flow_id) = 0;
|
43
|
+
virtual void FlowEnd(absl::string_view name, int64_t tid, int64_t timestamp,
|
44
|
+
int64_t flow_id) = 0;
|
45
|
+
virtual void Span(absl::string_view name, int64_t tid,
|
46
|
+
int64_t timestamp_begin, int64_t duration) = 0;
|
47
|
+
virtual void Finish() = 0;
|
48
|
+
|
49
|
+
protected:
|
50
|
+
~Output() = default;
|
51
|
+
};
|
52
|
+
|
53
|
+
class DiscardOutput final : public Output {
|
54
|
+
public:
|
55
|
+
void Mark(absl::string_view, int64_t, int64_t) override {}
|
56
|
+
void FlowBegin(absl::string_view, int64_t, int64_t, int64_t) override {}
|
57
|
+
void FlowEnd(absl::string_view, int64_t, int64_t, int64_t) override {}
|
58
|
+
void Span(absl::string_view, int64_t, int64_t, int64_t) override {}
|
59
|
+
void Finish() override {}
|
60
|
+
};
|
61
|
+
|
62
|
+
class JsonOutput final : public Output {
|
63
|
+
public:
|
64
|
+
explicit JsonOutput(std::ostream& out) : out_(out) { out_ << "[\n"; }
|
65
|
+
|
66
|
+
void Mark(absl::string_view name, int64_t tid, int64_t timestamp) override;
|
67
|
+
void FlowBegin(absl::string_view name, int64_t tid, int64_t timestamp,
|
68
|
+
int64_t flow_id) override;
|
69
|
+
void FlowEnd(absl::string_view name, int64_t tid, int64_t timestamp,
|
70
|
+
int64_t flow_id) override;
|
71
|
+
void Span(absl::string_view name, int64_t tid, int64_t timestamp_begin,
|
72
|
+
int64_t duration) override;
|
73
|
+
void Finish() override;
|
74
|
+
|
75
|
+
private:
|
76
|
+
static std::string MicrosString(int64_t nanos);
|
77
|
+
|
78
|
+
std::ostream& out_;
|
79
|
+
const char* sep_ = "";
|
80
|
+
};
|
81
|
+
|
82
|
+
} // namespace latent_see
|
83
|
+
} // namespace grpc_core
|
41
84
|
|
42
|
-
#
|
85
|
+
#ifndef GRPC_DISABLE_LATENT_SEE
|
43
86
|
|
44
87
|
namespace grpc_core {
|
45
88
|
namespace latent_see {
|
@@ -50,211 +93,215 @@ struct Metadata {
|
|
50
93
|
absl::string_view name;
|
51
94
|
};
|
52
95
|
|
53
|
-
enum class EventType : uint8_t { kBegin, kEnd, kFlowStart, kFlowEnd, kMark };
|
54
|
-
|
55
96
|
// A bin collects all events that occur within a parent scope.
|
56
|
-
struct Bin {
|
97
|
+
struct Bin : public MultiProducerSingleConsumerQueue::Node {
|
57
98
|
struct Event {
|
58
99
|
const Metadata* metadata;
|
59
|
-
|
60
|
-
|
61
|
-
|
100
|
+
int64_t timestamp_begin;
|
101
|
+
int64_t timestamp_end;
|
102
|
+
|
103
|
+
static constexpr uint64_t kSpan = 0;
|
104
|
+
static constexpr uint64_t kFlow = 1;
|
62
105
|
};
|
63
106
|
|
64
|
-
|
65
|
-
|
66
|
-
|
107
|
+
bool Append(const Metadata* metadata, int64_t timestamp_begin,
|
108
|
+
int64_t timestamp_end) {
|
109
|
+
Event* ev = &events[num_events];
|
110
|
+
++num_events;
|
111
|
+
ev->metadata = metadata;
|
112
|
+
ev->timestamp_begin = timestamp_begin;
|
113
|
+
ev->timestamp_end = timestamp_end;
|
114
|
+
return num_events == kEventsPerBin;
|
67
115
|
}
|
68
116
|
|
69
|
-
|
70
|
-
|
117
|
+
const Event* begin() const { return events.data(); }
|
118
|
+
const Event* end() const { return events.data() + num_events; }
|
119
|
+
|
120
|
+
static constexpr size_t kEventsPerBin = 8192 / sizeof(Event) - 1;
|
121
|
+
size_t num_events = 0;
|
122
|
+
gpr_thd_id thd_id = gpr_thd_currentid();
|
123
|
+
std::array<Event, kEventsPerBin> events;
|
71
124
|
};
|
72
125
|
|
73
|
-
|
126
|
+
void Collect(Notification* notification, absl::Duration timeout,
|
127
|
+
size_t memory_limit, Output* output);
|
128
|
+
|
129
|
+
class Sink {
|
74
130
|
public:
|
75
|
-
|
131
|
+
using EventDump = std::deque<std::unique_ptr<Bin>>;
|
76
132
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
Bin::Event event;
|
81
|
-
};
|
133
|
+
Sink();
|
134
|
+
~Sink() = delete;
|
135
|
+
void Append(std::unique_ptr<Bin> bin);
|
82
136
|
|
83
|
-
|
84
|
-
|
85
|
-
return input + (1UL << TAGGED_POINTER_SIZE_BITS);
|
86
|
-
}
|
137
|
+
private:
|
138
|
+
friend void Collect(Notification*, absl::Duration, size_t, Output*);
|
87
139
|
|
88
|
-
|
89
|
-
|
90
|
-
}
|
140
|
+
void Gather();
|
141
|
+
void Record(std::unique_ptr<Bin> bin);
|
91
142
|
|
92
|
-
|
93
|
-
|
94
|
-
Bin* bin;
|
95
|
-
do {
|
96
|
-
if (bin_descriptor == 0) {
|
97
|
-
bin = new Bin();
|
98
|
-
break;
|
99
|
-
}
|
100
|
-
bin = ToBin(bin_descriptor);
|
101
|
-
} while (!free_bins_.compare_exchange_strong(bin_descriptor, bin->next_free,
|
102
|
-
std::memory_order_acq_rel));
|
103
|
-
bin_ = bin;
|
104
|
-
bin_owner_ = owner;
|
105
|
-
return reinterpret_cast<uintptr_t>(bin);
|
106
|
-
}
|
143
|
+
void Start(size_t max_bins);
|
144
|
+
std::unique_ptr<EventDump> Stop();
|
107
145
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
146
|
+
MultiProducerSingleConsumerQueue appending_;
|
147
|
+
Thread gatherer_;
|
148
|
+
Mutex mu_;
|
149
|
+
std::unique_ptr<EventDump> events_ ABSL_GUARDED_BY(mu_);
|
150
|
+
size_t max_bins_ ABSL_GUARDED_BY(mu_);
|
151
|
+
};
|
152
|
+
|
153
|
+
class Appender {
|
154
|
+
public:
|
155
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION Appender()
|
156
|
+
: Appender(active_sink_.load(std::memory_order_acquire)) {};
|
157
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit Appender(Sink* sink)
|
158
|
+
: sink_(sink) {}
|
159
|
+
Appender(const Appender&) = delete;
|
160
|
+
Appender& operator=(const Appender&) = delete;
|
161
|
+
|
162
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION bool Enabled() const {
|
163
|
+
return sink_ != nullptr;
|
164
|
+
}
|
165
|
+
void Append(const Metadata* metadata, int64_t timestamp_begin,
|
166
|
+
int64_t timestamp_end) {
|
167
|
+
DCHECK(Enabled());
|
168
|
+
DCHECK_NE(metadata, nullptr);
|
169
|
+
if (GPR_UNLIKELY(bin_ == nullptr)) bin_ = std::make_unique<Bin>();
|
170
|
+
if (GPR_UNLIKELY(bin_->Append(metadata, timestamp_begin, timestamp_end))) {
|
171
|
+
sink_->Append(std::move(bin_));
|
114
172
|
}
|
115
|
-
bin_ = nullptr;
|
116
|
-
bin_owner_ = nullptr;
|
117
173
|
}
|
118
174
|
|
119
|
-
|
120
|
-
|
121
|
-
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION static Log& Get() {
|
122
|
-
static Log* log = new Log();
|
123
|
-
return *log;
|
175
|
+
void Flush() {
|
176
|
+
if (GPR_UNLIKELY(bin_ != nullptr)) sink_->Append(std::move(bin_));
|
124
177
|
}
|
125
178
|
|
126
|
-
|
127
|
-
|
128
|
-
std::optional<std::string> TryGenerateJson();
|
129
|
-
|
130
|
-
void OverrideStatsFlusher(
|
131
|
-
absl::AnyInvocable<void(absl::string_view)> stats_exporter) {
|
132
|
-
stats_flusher_ = std::move(stats_exporter);
|
133
|
-
}
|
179
|
+
private:
|
180
|
+
friend void Collect(Notification*, absl::Duration, size_t, Output*);
|
134
181
|
|
135
|
-
|
136
|
-
|
137
|
-
static void InstallAtExitHandler();
|
182
|
+
static void Enable(Sink* sink);
|
183
|
+
static void Disable();
|
138
184
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
static void FlushBin(Bin* bin);
|
143
|
-
|
144
|
-
std::atomic<uint64_t> next_thread_id_{1};
|
145
|
-
std::atomic<uint64_t> next_batch_id_{1};
|
146
|
-
static thread_local uint64_t thread_id_;
|
147
|
-
static thread_local Bin* bin_;
|
148
|
-
static thread_local void* bin_owner_;
|
149
|
-
static std::atomic<uintptr_t> free_bins_;
|
150
|
-
absl::AnyInvocable<void(absl::string_view)> stats_flusher_ = nullptr;
|
151
|
-
Mutex mu_flushing_;
|
152
|
-
struct Fragment {
|
153
|
-
Mutex mu_active ABSL_ACQUIRED_AFTER(mu_flushing_);
|
154
|
-
std::vector<RecordedEvent> active ABSL_GUARDED_BY(mu_active);
|
155
|
-
std::vector<RecordedEvent> flushing ABSL_GUARDED_BY(&Log::mu_flushing_);
|
156
|
-
};
|
157
|
-
PerCpu<Fragment> fragments_{PerCpuOptions()};
|
185
|
+
Sink* sink_;
|
186
|
+
static thread_local std::unique_ptr<Bin> bin_;
|
187
|
+
static std::atomic<Sink*> active_sink_;
|
158
188
|
};
|
159
189
|
|
160
|
-
|
161
|
-
|
190
|
+
inline void Flush() {
|
191
|
+
Appender appender;
|
192
|
+
if (GPR_UNLIKELY(!appender.Enabled())) return;
|
193
|
+
appender.Flush();
|
194
|
+
}
|
195
|
+
|
196
|
+
class Scope final {
|
162
197
|
public:
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
bin_->Append(metadata_, EventType::kBegin, 0);
|
198
|
+
Scope(const Scope&) = delete;
|
199
|
+
Scope& operator=(const Scope&) = delete;
|
200
|
+
|
201
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit Scope(
|
202
|
+
const Metadata* metadata) {
|
203
|
+
if (GPR_LIKELY(!appender_.Enabled())) return;
|
204
|
+
metadata_ = metadata;
|
205
|
+
timestamp_begin_ = absl::GetCurrentTimeNanos();
|
172
206
|
}
|
207
|
+
|
173
208
|
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION ~Scope() {
|
174
|
-
|
175
|
-
|
209
|
+
if (GPR_LIKELY(!appender_.Enabled())) return;
|
210
|
+
appender_.Append(metadata_, timestamp_begin_, absl::GetCurrentTimeNanos());
|
176
211
|
}
|
177
212
|
|
178
|
-
Scope(const Scope&) = delete;
|
179
|
-
Scope& operator=(const Scope&) = delete;
|
180
|
-
|
181
213
|
private:
|
182
|
-
|
183
|
-
|
184
|
-
|
214
|
+
Appender appender_;
|
215
|
+
int64_t timestamp_begin_;
|
216
|
+
const Metadata* metadata_;
|
185
217
|
};
|
186
218
|
|
187
|
-
|
188
|
-
|
219
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION static inline void Mark(
|
220
|
+
const Metadata* metadata) {
|
221
|
+
Appender appender;
|
222
|
+
if (GPR_LIKELY(!appender.Enabled())) return;
|
223
|
+
const auto ts = absl::GetCurrentTimeNanos();
|
224
|
+
appender.Append(metadata, ts, ts);
|
225
|
+
}
|
189
226
|
|
190
227
|
class Flow {
|
191
228
|
public:
|
192
|
-
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION Flow() :
|
193
|
-
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit Flow(const Metadata* metadata)
|
194
|
-
|
195
|
-
|
196
|
-
|
229
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION Flow() : id_(0) {}
|
230
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit Flow(const Metadata* metadata) {
|
231
|
+
Appender appender;
|
232
|
+
if (GPR_LIKELY(!appender.Enabled())) {
|
233
|
+
id_ = 0;
|
234
|
+
return;
|
235
|
+
}
|
236
|
+
metadata_ = metadata;
|
237
|
+
AppendBegin(appender);
|
197
238
|
}
|
198
239
|
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION ~Flow() {
|
199
|
-
if (
|
200
|
-
|
201
|
-
|
240
|
+
if (GPR_LIKELY(id_ == 0)) return;
|
241
|
+
Appender appender;
|
242
|
+
if (GPR_LIKELY(!appender.Enabled())) return;
|
243
|
+
AppendEnd(appender);
|
202
244
|
}
|
203
245
|
|
204
246
|
Flow(const Flow&) = delete;
|
205
247
|
Flow& operator=(const Flow&) = delete;
|
206
248
|
Flow(Flow&& other) noexcept
|
207
|
-
: metadata_(
|
249
|
+
: metadata_(other.metadata_), id_(std::exchange(other.id_, 0)) {}
|
208
250
|
Flow& operator=(Flow&& other) noexcept {
|
209
|
-
if (
|
210
|
-
|
251
|
+
if (id_ != 0) {
|
252
|
+
Appender appender;
|
253
|
+
if (GPR_LIKELY(!appender.Enabled())) AppendEnd(appender);
|
211
254
|
}
|
212
|
-
metadata_ =
|
213
|
-
id_ = other.id_;
|
255
|
+
metadata_ = other.metadata_;
|
256
|
+
id_ = std::exchange(other.id_, 0);
|
214
257
|
return *this;
|
215
258
|
}
|
216
259
|
|
217
260
|
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION bool is_active() const {
|
218
|
-
return
|
261
|
+
return id_ != 0;
|
219
262
|
}
|
220
263
|
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION void End() {
|
221
|
-
if (
|
222
|
-
|
223
|
-
|
264
|
+
if (GPR_LIKELY(id_ == 0)) return;
|
265
|
+
Appender appender;
|
266
|
+
if (GPR_LIKELY(!appender.Enabled())) return;
|
267
|
+
AppendEnd(appender);
|
224
268
|
}
|
225
269
|
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION void Begin(const Metadata* metadata) {
|
226
|
-
|
227
|
-
if (
|
228
|
-
|
229
|
-
}
|
270
|
+
Appender appender;
|
271
|
+
if (GPR_LIKELY(!appender.Enabled())) return;
|
272
|
+
if (id_ != 0) AppendEnd(appender);
|
230
273
|
metadata_ = metadata;
|
231
|
-
|
232
|
-
id_ = next_flow_id_.fetch_add(1, std::memory_order_relaxed);
|
233
|
-
bin->Append(metadata_, EventType::kFlowStart, id_);
|
274
|
+
AppendBegin(appender);
|
234
275
|
}
|
276
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION void Begin() { Begin(metadata_); }
|
235
277
|
|
236
278
|
private:
|
279
|
+
void AppendBegin(Appender& appender) {
|
280
|
+
id_ = next_id_.fetch_add(1, std::memory_order_relaxed);
|
281
|
+
appender.Append(metadata_, -id_, absl::GetCurrentTimeNanos());
|
282
|
+
}
|
283
|
+
void AppendEnd(Appender& appender) {
|
284
|
+
DCHECK_NE(id_, 0);
|
285
|
+
appender.Append(metadata_, -id_, -absl::GetCurrentTimeNanos());
|
286
|
+
id_ = 0;
|
287
|
+
}
|
237
288
|
const Metadata* metadata_;
|
238
|
-
|
239
|
-
|
289
|
+
static inline std::atomic<int64_t> next_id_{1};
|
290
|
+
int64_t id_;
|
240
291
|
};
|
241
292
|
|
242
|
-
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline void Mark(const Metadata* md) {
|
243
|
-
Log::CurrentThreadBin()->Append(md, EventType::kMark, 0);
|
244
|
-
}
|
245
|
-
|
246
293
|
template <typename P>
|
247
294
|
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto Promise(const Metadata* md_poll,
|
248
295
|
const Metadata* md_flow,
|
249
296
|
P promise) {
|
250
|
-
return
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
297
|
+
return
|
298
|
+
[md_poll, promise = std::move(promise), flow = Flow(md_flow)]() mutable {
|
299
|
+
Scope scope(md_poll);
|
300
|
+
flow.End();
|
301
|
+
auto r = promise();
|
302
|
+
if (IsPending(r)) flow.Begin();
|
303
|
+
return r;
|
304
|
+
};
|
258
305
|
}
|
259
306
|
|
260
307
|
} // namespace latent_see
|
@@ -268,30 +315,35 @@ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto Promise(const Metadata* md_poll,
|
|
268
315
|
name}; \
|
269
316
|
return &metadata; \
|
270
317
|
}()
|
271
|
-
//
|
272
|
-
|
273
|
-
|
274
|
-
#define GRPC_LATENT_SEE_PARENT_SCOPE(name) \
|
275
|
-
grpc_core::latent_see::ParentScope GRPC_LATENT_SEE_SYMBOL(latent_see_scope)( \
|
276
|
-
GRPC_LATENT_SEE_METADATA(name))
|
277
|
-
// Inner scope: logs a begin and end event. Lighter weight than parent scope,
|
278
|
-
// but does not flush the thread state - so should only be enclosed by a parent
|
279
|
-
// scope.
|
280
|
-
#define GRPC_LATENT_SEE_INNER_SCOPE(name) \
|
281
|
-
grpc_core::latent_see::InnerScope GRPC_LATENT_SEE_SYMBOL(latent_see_scope)( \
|
318
|
+
// Scope: marks a begin/end event in the log.
|
319
|
+
#define GRPC_LATENT_SEE_ALWAYS_ON_SCOPE(name) \
|
320
|
+
grpc_core::latent_see::Scope GRPC_LATENT_SEE_SYMBOL(latent_see_scope)( \
|
282
321
|
GRPC_LATENT_SEE_METADATA(name))
|
283
322
|
// Mark: logs a single event.
|
284
|
-
|
285
|
-
// scope.
|
286
|
-
#define GRPC_LATENT_SEE_MARK(name) \
|
323
|
+
#define GRPC_LATENT_SEE_ALWAYS_ON_MARK(name) \
|
287
324
|
grpc_core::latent_see::Mark(GRPC_LATENT_SEE_METADATA(name))
|
288
|
-
#define
|
289
|
-
grpc_core::latent_see::Promise(
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
325
|
+
#define GRPC_LATENT_SEE_ALWAYS_ON_PROMISE(name, promise) \
|
326
|
+
grpc_core::latent_see::Promise( \
|
327
|
+
GRPC_LATENT_SEE_METADATA("Poll:" name), GRPC_LATENT_SEE_METADATA(name), \
|
328
|
+
[&]() { \
|
329
|
+
GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("Setup:" name); \
|
330
|
+
return promise; \
|
331
|
+
}())
|
332
|
+
#ifdef GRPC_EXTRA_LATENT_SEE
|
333
|
+
#define GRPC_LATENT_SEE_SCOPE(name) GRPC_LATENT_SEE_ALWAYS_ON_SCOPE(name)
|
334
|
+
#define GRPC_LATENT_SEE_MARK(name) GRPC_LATENT_SEE_ALWAYS_ON_MARK(name)
|
335
|
+
#define GRPC_LATENT_SEE_PROMISE(name, promise) \
|
336
|
+
GRPC_LATENT_SEE_ALWAYS_ON_PROMISE(name, promise)
|
337
|
+
#else
|
338
|
+
#define GRPC_LATENT_SEE_SCOPE(name) \
|
339
|
+
do { \
|
340
|
+
} while (0)
|
341
|
+
#define GRPC_LATENT_SEE_MARK(name) \
|
342
|
+
do { \
|
343
|
+
} while (0)
|
344
|
+
#define GRPC_LATENT_SEE_PROMISE(name, promise) promise
|
345
|
+
#endif
|
346
|
+
#else // def(GRPC_DISABLE_LATENT_SEE)
|
295
347
|
namespace grpc_core {
|
296
348
|
namespace latent_see {
|
297
349
|
struct Metadata {};
|
@@ -300,26 +352,31 @@ struct Flow {
|
|
300
352
|
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION void End() {}
|
301
353
|
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION void Begin(Metadata*) {}
|
302
354
|
};
|
303
|
-
struct
|
304
|
-
explicit
|
305
|
-
};
|
306
|
-
struct InnerScope {
|
307
|
-
explicit InnerScope(Metadata*) {}
|
355
|
+
struct Scope {
|
356
|
+
explicit Scope(Metadata*) {}
|
308
357
|
};
|
358
|
+
|
359
|
+
inline void Collect(Notification*, absl::Duration, size_t, Output* output) {
|
360
|
+
output->Finish();
|
361
|
+
}
|
309
362
|
} // namespace latent_see
|
310
363
|
} // namespace grpc_core
|
311
364
|
#define GRPC_LATENT_SEE_METADATA(name) nullptr
|
312
365
|
#define GRPC_LATENT_SEE_METADATA_RAW(name) nullptr
|
313
|
-
#define
|
314
|
-
do {
|
366
|
+
#define GRPC_LATENT_SEE_ALWAYS_ON_SCOPE(name) \
|
367
|
+
do { \
|
368
|
+
} while (0)
|
369
|
+
#define GRPC_LATENT_SEE_ALWAYS_ON_MARK(name) \
|
370
|
+
do { \
|
315
371
|
} while (0)
|
316
|
-
#define
|
317
|
-
|
372
|
+
#define GRPC_LATENT_SEE_ALWAYS_ON_PROMISE(name, promise) promise
|
373
|
+
#define GRPC_LATENT_SEE_SCOPE(name) \
|
374
|
+
do { \
|
318
375
|
} while (0)
|
319
376
|
#define GRPC_LATENT_SEE_MARK(name) \
|
320
377
|
do { \
|
321
378
|
} while (0)
|
322
379
|
#define GRPC_LATENT_SEE_PROMISE(name, promise) promise
|
323
|
-
#endif //
|
380
|
+
#endif // GRPC_DISABLE_LATENT_SEE
|
324
381
|
|
325
382
|
#endif // GRPC_SRC_CORE_UTIL_LATENT_SEE_H
|
@@ -90,9 +90,10 @@ class SingleSetRefCountedPtr {
|
|
90
90
|
|
91
91
|
bool is_set() const { return p_.is_set(); }
|
92
92
|
|
93
|
-
|
93
|
+
template <typename... Args>
|
94
|
+
RefCountedPtr<T> GetOrCreate(Args&&... args) {
|
94
95
|
T* p = Get();
|
95
|
-
if (p == nullptr) p = Set(MakeRefCounted<T>());
|
96
|
+
if (p == nullptr) p = Set(MakeRefCounted<T>(std::forward<Args>(args)...));
|
96
97
|
return p->Ref();
|
97
98
|
}
|
98
99
|
T* Get() const { return p_.Get(); }
|
@@ -107,6 +108,8 @@ class SingleSetRefCountedPtr {
|
|
107
108
|
|
108
109
|
T* Set(RefCountedPtr<T> p) { return p_.Set(p.release()); }
|
109
110
|
|
111
|
+
void Reset() { p_.Reset(); }
|
112
|
+
|
110
113
|
private:
|
111
114
|
struct UnrefDeleter {
|
112
115
|
void operator()(T* p) { p->Unref(); }
|
data/src/core/util/useful.h
CHANGED
@@ -197,6 +197,97 @@ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline uint64_t LowestOneBit(uint64_t x) {
|
|
197
197
|
return x & -x;
|
198
198
|
}
|
199
199
|
|
200
|
+
namespace useful_detail {
|
201
|
+
|
202
|
+
// Constexpr implementation of std::log for base e.
|
203
|
+
// This is a simple implementation using a Taylor series expansion and may not
|
204
|
+
// be as accurate as std::log from <cmath>. It is intended for use in constexpr
|
205
|
+
// contexts.
|
206
|
+
// It uses the identity log(y) = 2 * atanh((y-1)/(y+1))
|
207
|
+
// where atanh(x) = x + x^3/3 + x^5/5 + ...
|
208
|
+
constexpr double ConstexprLog(double y) {
|
209
|
+
if (y < 0) {
|
210
|
+
return std::numeric_limits<double>::quiet_NaN();
|
211
|
+
}
|
212
|
+
if (y == 0) {
|
213
|
+
return -std::numeric_limits<double>::infinity();
|
214
|
+
}
|
215
|
+
if (y == 1) {
|
216
|
+
return 0.0;
|
217
|
+
}
|
218
|
+
// Bring y into the range [1, 2) to improve convergence.
|
219
|
+
// log(y) = log(y / 2^k) + k*log(2)
|
220
|
+
int k = 0;
|
221
|
+
while (y > 2.0) {
|
222
|
+
y /= 2.0;
|
223
|
+
k++;
|
224
|
+
}
|
225
|
+
while (y < 1.0) {
|
226
|
+
y *= 2.0;
|
227
|
+
k--;
|
228
|
+
}
|
229
|
+
// Now y is in [1, 2).
|
230
|
+
// x = (y-1)/(y+1) is in [0, 1/3).
|
231
|
+
// The series will converge quickly.
|
232
|
+
double x = (y - 1) / (y + 1);
|
233
|
+
double x2 = x * x;
|
234
|
+
double term = x;
|
235
|
+
double sum = term;
|
236
|
+
for (int i = 1; i < 100; ++i) {
|
237
|
+
term *= x2;
|
238
|
+
double next_sum = sum + term / (2 * i + 1);
|
239
|
+
if (next_sum == sum) break;
|
240
|
+
sum = next_sum;
|
241
|
+
}
|
242
|
+
constexpr double kLog2 = 0.693147180559945309417;
|
243
|
+
return 2 * sum + k * kLog2;
|
244
|
+
}
|
245
|
+
|
246
|
+
// Constexpr implementation of std::exp.
|
247
|
+
// This is a simple implementation using a Taylor series expansion and may not
|
248
|
+
// be as accurate as std::exp from <cmath>. It is intended for use in constexpr
|
249
|
+
// contexts.
|
250
|
+
// It uses exp(x) = 1 + x + x^2/2! + x^3/3! + ...
|
251
|
+
// For better convergence, we use range reduction via exp(x) = (exp(x/2))^2.
|
252
|
+
constexpr double ConstexprExp(double x) {
|
253
|
+
if (x > 2.0 || x < -2.0) {
|
254
|
+
const double half = ConstexprExp(x / 2.0);
|
255
|
+
return half * half;
|
256
|
+
}
|
257
|
+
double sum = 1.0;
|
258
|
+
double term = 1.0;
|
259
|
+
for (int i = 1; i < 30; ++i) {
|
260
|
+
term *= x / i;
|
261
|
+
double next_sum = sum + term;
|
262
|
+
if (next_sum == sum) break;
|
263
|
+
sum = next_sum;
|
264
|
+
}
|
265
|
+
return sum;
|
266
|
+
}
|
267
|
+
|
268
|
+
} // namespace useful_detail
|
269
|
+
|
270
|
+
// Constexpr implementation of std::pow.
|
271
|
+
// This is a simple implementation and may not be as accurate as std::pow from
|
272
|
+
// <cmath>. It is intended for use in constexpr contexts.
|
273
|
+
// Fuzztests exist in useful_fuzztest.cc to test that the constexpr and
|
274
|
+
// non-constexpr implementations are within an acceptable error bound.
|
275
|
+
// Replace with std::pow when we move to C++26.
|
276
|
+
constexpr double ConstexprPow(double base, double exponent) {
|
277
|
+
// For simplicity, only handle non-negative bases.
|
278
|
+
// std::pow has more complex rules for negative bases.
|
279
|
+
if (base < 0) return std::numeric_limits<double>::quiet_NaN();
|
280
|
+
if (base == 0) {
|
281
|
+
if (exponent > 0) return 0.0;
|
282
|
+
if (exponent == 0) return 1.0;
|
283
|
+
return std::numeric_limits<double>::infinity();
|
284
|
+
}
|
285
|
+
if (exponent == 0.0) return 1.0;
|
286
|
+
if (exponent == 1.0) return base;
|
287
|
+
return useful_detail::ConstexprExp(exponent *
|
288
|
+
useful_detail::ConstexprLog(base));
|
289
|
+
}
|
290
|
+
|
200
291
|
} // namespace grpc_core
|
201
292
|
|
202
293
|
#define GPR_ARRAY_SIZE(array) (sizeof(array) / sizeof(*(array)))
|