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
@@ -19,7 +19,6 @@
|
|
19
19
|
#ifndef GRPC_SRC_CORE_RESOLVER_DNS_C_ARES_GRPC_ARES_WRAPPER_H
|
20
20
|
#define GRPC_SRC_CORE_RESOLVER_DNS_C_ARES_GRPC_ARES_WRAPPER_H
|
21
21
|
|
22
|
-
#include <ares.h>
|
23
22
|
#include <grpc/support/port_platform.h>
|
24
23
|
#include <stddef.h>
|
25
24
|
|
@@ -36,6 +35,8 @@
|
|
36
35
|
|
37
36
|
#if GRPC_ARES == 1
|
38
37
|
|
38
|
+
#include <ares.h>
|
39
|
+
|
39
40
|
#define GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS 120000
|
40
41
|
|
41
42
|
typedef struct grpc_ares_ev_driver grpc_ares_ev_driver;
|
@@ -940,7 +940,7 @@ void XdsDependencyManager::MaybeReportUpdate() {
|
|
940
940
|
endpoint_watchers_.erase(it++);
|
941
941
|
}
|
942
942
|
// Remove entries in dns_resolvers_ for any DNS name not in
|
943
|
-
//
|
943
|
+
// dns_names_seen.
|
944
944
|
for (auto it = dns_resolvers_.begin(); it != dns_resolvers_.end();) {
|
945
945
|
const std::string& dns_name = it->first;
|
946
946
|
if (dns_names_seen.find(dns_name) != dns_names_seen.end()) {
|
data/src/core/server/server.cc
CHANGED
@@ -1311,7 +1311,7 @@ grpc_error_handle Server::SetupTransport(Transport* transport,
|
|
1311
1311
|
grpc_pollset* accepting_pollset,
|
1312
1312
|
const ChannelArgs& args,
|
1313
1313
|
const Blackboard* blackboard) {
|
1314
|
-
|
1314
|
+
GRPC_LATENT_SEE_SCOPE("Server::SetupTransport");
|
1315
1315
|
// Create channel.
|
1316
1316
|
global_stats().IncrementServerChannelsCreated();
|
1317
1317
|
// Set up channelz node.
|
@@ -18,81 +18,17 @@
|
|
18
18
|
|
19
19
|
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
|
-
#include <functional>
|
22
21
|
#include <memory>
|
23
|
-
#include <utility>
|
24
22
|
|
25
|
-
#include "absl/status/status.h"
|
26
23
|
#include "absl/status/statusor.h"
|
27
|
-
#include "src/core/call/call_finalization.h"
|
28
24
|
#include "src/core/config/core_configuration.h"
|
29
25
|
#include "src/core/lib/channel/channel_args.h"
|
30
26
|
#include "src/core/lib/channel/channel_fwd.h"
|
31
|
-
#include "src/core/lib/channel/channel_stack.h"
|
32
27
|
#include "src/core/lib/channel/promise_based_filter.h"
|
33
|
-
#include "src/core/lib/promise/arena_promise.h"
|
34
|
-
#include "src/core/lib/promise/cancel_callback.h"
|
35
|
-
#include "src/core/lib/promise/context.h"
|
36
|
-
#include "src/core/lib/promise/map.h"
|
37
|
-
#include "src/core/lib/promise/pipe.h"
|
38
28
|
#include "src/core/lib/surface/channel_stack_type.h"
|
39
|
-
#include "src/core/lib/transport/transport.h"
|
40
|
-
#include "src/core/telemetry/call_tracer.h"
|
41
|
-
#include "src/core/util/latent_see.h"
|
42
29
|
|
43
30
|
namespace grpc_core {
|
44
31
|
|
45
|
-
namespace {
|
46
|
-
|
47
|
-
class ServerCallTracerFilter
|
48
|
-
: public ImplementChannelFilter<ServerCallTracerFilter> {
|
49
|
-
public:
|
50
|
-
static const grpc_channel_filter kFilter;
|
51
|
-
|
52
|
-
static absl::string_view TypeName() { return "server_call_tracer"; }
|
53
|
-
|
54
|
-
static absl::StatusOr<std::unique_ptr<ServerCallTracerFilter>> Create(
|
55
|
-
const ChannelArgs& /*args*/, ChannelFilter::Args /*filter_args*/);
|
56
|
-
|
57
|
-
class Call {
|
58
|
-
public:
|
59
|
-
void OnClientInitialMetadata(ClientMetadata& client_initial_metadata) {
|
60
|
-
GRPC_LATENT_SEE_INNER_SCOPE(
|
61
|
-
"ServerCallTracerFilter::Call::OnClientInitialMetadata");
|
62
|
-
auto* call_tracer = MaybeGetContext<ServerCallTracer>();
|
63
|
-
if (call_tracer == nullptr) return;
|
64
|
-
call_tracer->RecordReceivedInitialMetadata(&client_initial_metadata);
|
65
|
-
}
|
66
|
-
|
67
|
-
void OnServerInitialMetadata(ServerMetadata& server_initial_metadata) {
|
68
|
-
GRPC_LATENT_SEE_INNER_SCOPE(
|
69
|
-
"ServerCallTracerFilter::Call::OnServerInitialMetadata");
|
70
|
-
auto* call_tracer = MaybeGetContext<ServerCallTracer>();
|
71
|
-
if (call_tracer == nullptr) return;
|
72
|
-
call_tracer->RecordSendInitialMetadata(&server_initial_metadata);
|
73
|
-
}
|
74
|
-
|
75
|
-
void OnFinalize(const grpc_call_final_info* final_info) {
|
76
|
-
GRPC_LATENT_SEE_INNER_SCOPE("ServerCallTracerFilter::Call::OnFinalize");
|
77
|
-
auto* call_tracer = MaybeGetContext<ServerCallTracer>();
|
78
|
-
if (call_tracer == nullptr) return;
|
79
|
-
call_tracer->RecordEnd(final_info);
|
80
|
-
}
|
81
|
-
|
82
|
-
void OnServerTrailingMetadata(ServerMetadata& server_trailing_metadata) {
|
83
|
-
GRPC_LATENT_SEE_INNER_SCOPE(
|
84
|
-
"ServerCallTracerFilter::Call::OnServerTrailingMetadata");
|
85
|
-
auto* call_tracer = MaybeGetContext<ServerCallTracer>();
|
86
|
-
if (call_tracer == nullptr) return;
|
87
|
-
call_tracer->RecordSendTrailingMetadata(&server_trailing_metadata);
|
88
|
-
}
|
89
|
-
|
90
|
-
static inline const NoInterceptor OnClientToServerMessage;
|
91
|
-
static inline const NoInterceptor OnClientToServerHalfClose;
|
92
|
-
static inline const NoInterceptor OnServerToClientMessage;
|
93
|
-
};
|
94
|
-
};
|
95
|
-
|
96
32
|
const grpc_channel_filter ServerCallTracerFilter::kFilter =
|
97
33
|
MakePromiseBasedFilter<ServerCallTracerFilter, FilterEndpoint::kServer,
|
98
34
|
kFilterExaminesServerInitialMetadata>();
|
@@ -103,8 +39,6 @@ ServerCallTracerFilter::Create(const ChannelArgs& /*args*/,
|
|
103
39
|
return std::make_unique<ServerCallTracerFilter>();
|
104
40
|
}
|
105
41
|
|
106
|
-
} // namespace
|
107
|
-
|
108
42
|
void RegisterServerCallTracerFilter(CoreConfiguration::Builder* builder) {
|
109
43
|
builder->channel_init()->RegisterFilter<ServerCallTracerFilter>(
|
110
44
|
GRPC_SERVER_CHANNEL);
|
@@ -17,10 +17,74 @@
|
|
17
17
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
|
+
#include <functional>
|
21
|
+
#include <utility>
|
22
|
+
|
23
|
+
#include "absl/status/status.h"
|
24
|
+
#include "src/core/call/call_finalization.h"
|
20
25
|
#include "src/core/config/core_configuration.h"
|
26
|
+
#include "src/core/lib/channel/channel_stack.h"
|
27
|
+
#include "src/core/lib/channel/promise_based_filter.h"
|
28
|
+
#include "src/core/lib/promise/arena_promise.h"
|
29
|
+
#include "src/core/lib/promise/cancel_callback.h"
|
30
|
+
#include "src/core/lib/promise/context.h"
|
31
|
+
#include "src/core/lib/promise/map.h"
|
32
|
+
#include "src/core/lib/promise/pipe.h"
|
33
|
+
#include "src/core/lib/transport/transport.h"
|
34
|
+
#include "src/core/telemetry/call_tracer.h"
|
35
|
+
#include "src/core/util/latent_see.h"
|
21
36
|
|
22
37
|
namespace grpc_core {
|
23
38
|
|
39
|
+
class ServerCallTracerFilter
|
40
|
+
: public ImplementChannelFilter<ServerCallTracerFilter> {
|
41
|
+
public:
|
42
|
+
static const grpc_channel_filter kFilter;
|
43
|
+
|
44
|
+
static absl::string_view TypeName() { return "server_call_tracer"; }
|
45
|
+
|
46
|
+
static absl::StatusOr<std::unique_ptr<ServerCallTracerFilter>> Create(
|
47
|
+
const ChannelArgs& /*args*/, ChannelFilter::Args /*filter_args*/);
|
48
|
+
|
49
|
+
class Call {
|
50
|
+
public:
|
51
|
+
void OnClientInitialMetadata(ClientMetadata& client_initial_metadata) {
|
52
|
+
GRPC_LATENT_SEE_SCOPE(
|
53
|
+
"ServerCallTracerFilter::Call::OnClientInitialMetadata");
|
54
|
+
auto* call_tracer = MaybeGetContext<ServerCallTracerInterface>();
|
55
|
+
if (call_tracer == nullptr) return;
|
56
|
+
call_tracer->RecordReceivedInitialMetadata(&client_initial_metadata);
|
57
|
+
}
|
58
|
+
|
59
|
+
void OnServerInitialMetadata(ServerMetadata& server_initial_metadata) {
|
60
|
+
GRPC_LATENT_SEE_SCOPE(
|
61
|
+
"ServerCallTracerFilter::Call::OnServerInitialMetadata");
|
62
|
+
auto* call_tracer = MaybeGetContext<ServerCallTracerInterface>();
|
63
|
+
if (call_tracer == nullptr) return;
|
64
|
+
call_tracer->RecordSendInitialMetadata(&server_initial_metadata);
|
65
|
+
}
|
66
|
+
|
67
|
+
void OnFinalize(const grpc_call_final_info* final_info) {
|
68
|
+
GRPC_LATENT_SEE_SCOPE("ServerCallTracerFilter::Call::OnFinalize");
|
69
|
+
auto* call_tracer = MaybeGetContext<ServerCallTracerInterface>();
|
70
|
+
if (call_tracer == nullptr) return;
|
71
|
+
call_tracer->RecordEnd(final_info);
|
72
|
+
}
|
73
|
+
|
74
|
+
void OnServerTrailingMetadata(ServerMetadata& server_trailing_metadata) {
|
75
|
+
GRPC_LATENT_SEE_SCOPE(
|
76
|
+
"ServerCallTracerFilter::Call::OnServerTrailingMetadata");
|
77
|
+
auto* call_tracer = MaybeGetContext<ServerCallTracerInterface>();
|
78
|
+
if (call_tracer == nullptr) return;
|
79
|
+
call_tracer->RecordSendTrailingMetadata(&server_trailing_metadata);
|
80
|
+
}
|
81
|
+
|
82
|
+
static inline const NoInterceptor OnClientToServerMessage;
|
83
|
+
static inline const NoInterceptor OnClientToServerHalfClose;
|
84
|
+
static inline const NoInterceptor OnServerToClientMessage;
|
85
|
+
};
|
86
|
+
};
|
87
|
+
|
24
88
|
void RegisterServerCallTracerFilter(CoreConfiguration::Builder* builder);
|
25
89
|
|
26
90
|
} // namespace grpc_core
|
@@ -144,7 +144,7 @@ void ServerConfigSelectorFilter::Orphan() {
|
|
144
144
|
|
145
145
|
absl::Status ServerConfigSelectorFilter::Call::OnClientInitialMetadata(
|
146
146
|
ClientMetadata& md, ServerConfigSelectorFilter* filter) {
|
147
|
-
|
147
|
+
GRPC_LATENT_SEE_SCOPE(
|
148
148
|
"ServerConfigSelectorFilter::Call::OnClientInitialMetadata");
|
149
149
|
auto sel = filter->config_selector();
|
150
150
|
if (!sel.ok()) return sel.status();
|
@@ -17,85 +17,30 @@
|
|
17
17
|
// This filter reads GRPC_ARG_SERVICE_CONFIG and populates ServiceConfigCallData
|
18
18
|
// in the call context per call for direct channels.
|
19
19
|
|
20
|
+
#include "src/core/service_config/service_config_channel_arg_filter.h"
|
21
|
+
|
20
22
|
#include <grpc/impl/channel_arg_names.h>
|
21
23
|
#include <grpc/support/port_platform.h>
|
22
24
|
|
23
|
-
#include <functional>
|
24
|
-
#include <memory>
|
25
|
-
#include <optional>
|
26
|
-
#include <string>
|
27
|
-
#include <utility>
|
28
|
-
|
29
|
-
#include "absl/log/log.h"
|
30
|
-
#include "absl/status/status.h"
|
31
|
-
#include "absl/status/statusor.h"
|
32
25
|
#include "src/core/call/metadata_batch.h"
|
33
26
|
#include "src/core/config/core_configuration.h"
|
34
27
|
#include "src/core/ext/filters/message_size/message_size_filter.h"
|
35
|
-
#include "src/core/lib/channel/channel_args.h"
|
36
28
|
#include "src/core/lib/channel/channel_fwd.h"
|
37
|
-
#include "src/core/lib/channel/channel_stack.h"
|
38
29
|
#include "src/core/lib/channel/promise_based_filter.h"
|
39
|
-
#include "src/core/lib/promise/arena_promise.h"
|
40
30
|
#include "src/core/lib/promise/context.h"
|
41
31
|
#include "src/core/lib/resource_quota/arena.h"
|
42
32
|
#include "src/core/lib/surface/channel_stack_type.h"
|
43
|
-
#include "src/core/lib/transport/transport.h"
|
44
33
|
#include "src/core/service_config/service_config.h"
|
45
34
|
#include "src/core/service_config/service_config_call_data.h"
|
46
|
-
#include "src/core/service_config/service_config_impl.h"
|
47
35
|
#include "src/core/service_config/service_config_parser.h"
|
48
36
|
#include "src/core/util/latent_see.h"
|
49
37
|
#include "src/core/util/ref_counted_ptr.h"
|
50
38
|
|
51
39
|
namespace grpc_core {
|
52
40
|
|
53
|
-
namespace {
|
54
|
-
|
55
|
-
class ServiceConfigChannelArgFilter final
|
56
|
-
: public ImplementChannelFilter<ServiceConfigChannelArgFilter> {
|
57
|
-
public:
|
58
|
-
static const grpc_channel_filter kFilter;
|
59
|
-
|
60
|
-
static absl::string_view TypeName() { return "service_config_channel_arg"; }
|
61
|
-
|
62
|
-
static absl::StatusOr<std::unique_ptr<ServiceConfigChannelArgFilter>> Create(
|
63
|
-
const ChannelArgs& args, ChannelFilter::Args) {
|
64
|
-
return std::make_unique<ServiceConfigChannelArgFilter>(args);
|
65
|
-
}
|
66
|
-
|
67
|
-
explicit ServiceConfigChannelArgFilter(const ChannelArgs& args) {
|
68
|
-
auto service_config_str = args.GetOwnedString(GRPC_ARG_SERVICE_CONFIG);
|
69
|
-
if (service_config_str.has_value()) {
|
70
|
-
auto service_config =
|
71
|
-
ServiceConfigImpl::Create(args, *service_config_str);
|
72
|
-
if (!service_config.ok()) {
|
73
|
-
LOG(ERROR) << service_config.status().ToString();
|
74
|
-
} else {
|
75
|
-
service_config_ = std::move(*service_config);
|
76
|
-
}
|
77
|
-
}
|
78
|
-
}
|
79
|
-
|
80
|
-
class Call {
|
81
|
-
public:
|
82
|
-
void OnClientInitialMetadata(ClientMetadata& md,
|
83
|
-
ServiceConfigChannelArgFilter* filter);
|
84
|
-
static inline const NoInterceptor OnServerInitialMetadata;
|
85
|
-
static inline const NoInterceptor OnServerTrailingMetadata;
|
86
|
-
static inline const NoInterceptor OnClientToServerMessage;
|
87
|
-
static inline const NoInterceptor OnClientToServerHalfClose;
|
88
|
-
static inline const NoInterceptor OnServerToClientMessage;
|
89
|
-
static inline const NoInterceptor OnFinalize;
|
90
|
-
};
|
91
|
-
|
92
|
-
private:
|
93
|
-
RefCountedPtr<ServiceConfig> service_config_;
|
94
|
-
};
|
95
|
-
|
96
41
|
void ServiceConfigChannelArgFilter::Call::OnClientInitialMetadata(
|
97
42
|
ClientMetadata& md, ServiceConfigChannelArgFilter* filter) {
|
98
|
-
|
43
|
+
GRPC_LATENT_SEE_SCOPE(
|
99
44
|
"ServiceConfigChannelArgFilter::Call::OnClientInitialMetadata");
|
100
45
|
const ServiceConfigParser::ParsedConfigVector* method_configs = nullptr;
|
101
46
|
if (filter->service_config_ != nullptr) {
|
@@ -112,8 +57,6 @@ const grpc_channel_filter ServiceConfigChannelArgFilter::kFilter =
|
|
112
57
|
MakePromiseBasedFilter<ServiceConfigChannelArgFilter,
|
113
58
|
FilterEndpoint::kClient>();
|
114
59
|
|
115
|
-
} // namespace
|
116
|
-
|
117
60
|
void RegisterServiceConfigChannelArgFilter(
|
118
61
|
CoreConfiguration::Builder* builder) {
|
119
62
|
builder->channel_init()
|
@@ -0,0 +1,82 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2020 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
// This filter reads GRPC_ARG_SERVICE_CONFIG and populates ServiceConfigCallData
|
18
|
+
// in the call context per call for direct channels.
|
19
|
+
|
20
|
+
#ifndef GRPC_SRC_CORE_SERVICE_CONFIG_SERVICE_CONFIG_CHANNEL_ARG_FILTER_H
|
21
|
+
#define GRPC_SRC_CORE_SERVICE_CONFIG_SERVICE_CONFIG_CHANNEL_ARG_FILTER_H
|
22
|
+
|
23
|
+
#include <grpc/slice.h>
|
24
|
+
#include <grpc/support/port_platform.h>
|
25
|
+
#include <stddef.h>
|
26
|
+
|
27
|
+
#include <memory>
|
28
|
+
|
29
|
+
#include "absl/status/statusor.h"
|
30
|
+
#include "src/core/lib/channel/channel_args.h"
|
31
|
+
#include "src/core/lib/channel/channel_fwd.h"
|
32
|
+
#include "src/core/lib/channel/promise_based_filter.h"
|
33
|
+
#include "src/core/service_config/service_config.h"
|
34
|
+
#include "src/core/service_config/service_config_impl.h"
|
35
|
+
#include "src/core/util/ref_counted_ptr.h"
|
36
|
+
|
37
|
+
namespace grpc_core {
|
38
|
+
|
39
|
+
class ServiceConfigChannelArgFilter final
|
40
|
+
: public ImplementChannelFilter<ServiceConfigChannelArgFilter> {
|
41
|
+
public:
|
42
|
+
static const grpc_channel_filter kFilter;
|
43
|
+
|
44
|
+
static absl::string_view TypeName() { return "service_config_channel_arg"; }
|
45
|
+
|
46
|
+
static absl::StatusOr<std::unique_ptr<ServiceConfigChannelArgFilter>> Create(
|
47
|
+
const ChannelArgs& args, ChannelFilter::Args) {
|
48
|
+
return std::make_unique<ServiceConfigChannelArgFilter>(args);
|
49
|
+
}
|
50
|
+
|
51
|
+
explicit ServiceConfigChannelArgFilter(const ChannelArgs& args) {
|
52
|
+
auto service_config_str = args.GetOwnedString(GRPC_ARG_SERVICE_CONFIG);
|
53
|
+
if (service_config_str.has_value()) {
|
54
|
+
auto service_config =
|
55
|
+
ServiceConfigImpl::Create(args, *service_config_str);
|
56
|
+
if (!service_config.ok()) {
|
57
|
+
LOG(ERROR) << service_config.status().ToString();
|
58
|
+
} else {
|
59
|
+
service_config_ = std::move(*service_config);
|
60
|
+
}
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
class Call {
|
65
|
+
public:
|
66
|
+
void OnClientInitialMetadata(ClientMetadata& md,
|
67
|
+
ServiceConfigChannelArgFilter* filter);
|
68
|
+
static inline const NoInterceptor OnServerInitialMetadata;
|
69
|
+
static inline const NoInterceptor OnServerTrailingMetadata;
|
70
|
+
static inline const NoInterceptor OnClientToServerMessage;
|
71
|
+
static inline const NoInterceptor OnClientToServerHalfClose;
|
72
|
+
static inline const NoInterceptor OnServerToClientMessage;
|
73
|
+
static inline const NoInterceptor OnFinalize;
|
74
|
+
};
|
75
|
+
|
76
|
+
private:
|
77
|
+
RefCountedPtr<ServiceConfig> service_config_;
|
78
|
+
};
|
79
|
+
|
80
|
+
} // namespace grpc_core
|
81
|
+
|
82
|
+
#endif // GRPC_SRC_CORE_SERVICE_CONFIG_SERVICE_CONFIG_CHANNEL_ARG_FILTER_H
|
@@ -78,10 +78,10 @@ absl::string_view ServerCallTracerFactory::ChannelArgName() {
|
|
78
78
|
return kServerCallTracerFactoryChannelArgName;
|
79
79
|
}
|
80
80
|
|
81
|
-
class DelegatingClientCallTracer : public
|
81
|
+
class DelegatingClientCallTracer : public ClientCallTracerInterface {
|
82
82
|
public:
|
83
83
|
class DelegatingClientCallAttemptTracer
|
84
|
-
: public
|
84
|
+
: public ClientCallTracerInterface::CallAttemptTracer {
|
85
85
|
public:
|
86
86
|
explicit DelegatingClientCallAttemptTracer(
|
87
87
|
std::vector<CallAttemptTracer*> tracers)
|
@@ -190,7 +190,7 @@ class DelegatingClientCallTracer : public ClientCallTracer {
|
|
190
190
|
// call at any moment).
|
191
191
|
std::vector<CallAttemptTracer*> tracers_;
|
192
192
|
};
|
193
|
-
explicit DelegatingClientCallTracer(
|
193
|
+
explicit DelegatingClientCallTracer(ClientCallTracerInterface* tracer)
|
194
194
|
: tracers_{tracer} {}
|
195
195
|
~DelegatingClientCallTracer() override {}
|
196
196
|
CallAttemptTracer* StartNewAttempt(bool is_transparent_retry) override {
|
@@ -224,15 +224,17 @@ class DelegatingClientCallTracer : public ClientCallTracer {
|
|
224
224
|
// will be adding call tracers to the context and these are already
|
225
225
|
// synchronized through promises/call combiners (single promise running per
|
226
226
|
// call at any moment).
|
227
|
-
void AddTracer(
|
227
|
+
void AddTracer(ClientCallTracerInterface* tracer) {
|
228
|
+
tracers_.push_back(tracer);
|
229
|
+
}
|
228
230
|
|
229
231
|
private:
|
230
|
-
std::vector<
|
232
|
+
std::vector<ClientCallTracerInterface*> tracers_;
|
231
233
|
};
|
232
234
|
|
233
|
-
class DelegatingServerCallTracer : public
|
235
|
+
class DelegatingServerCallTracer : public ServerCallTracerInterface {
|
234
236
|
public:
|
235
|
-
explicit DelegatingServerCallTracer(
|
237
|
+
explicit DelegatingServerCallTracer(ServerCallTracerInterface* tracer)
|
236
238
|
: tracers_{tracer} {}
|
237
239
|
~DelegatingServerCallTracer() override {}
|
238
240
|
void RecordSendInitialMetadata(
|
@@ -319,23 +321,26 @@ class DelegatingServerCallTracer : public ServerCallTracer {
|
|
319
321
|
bool IsSampled() override { return tracers_[0]->IsSampled(); }
|
320
322
|
bool IsDelegatingTracer() override { return true; }
|
321
323
|
|
322
|
-
void AddTracer(
|
324
|
+
void AddTracer(ServerCallTracerInterface* tracer) {
|
325
|
+
tracers_.push_back(tracer);
|
326
|
+
}
|
323
327
|
|
324
328
|
private:
|
325
329
|
// The ServerCallTracerFilter will be responsible for making sure that the
|
326
330
|
// tracers are added in a thread-safe manner. It is imagined that the filter
|
327
331
|
// will just invoke the factories in the server call tracer factory list
|
328
332
|
// sequentially, removing the need for any synchronization.
|
329
|
-
std::vector<
|
333
|
+
std::vector<ServerCallTracerInterface*> tracers_;
|
330
334
|
};
|
331
335
|
|
332
|
-
void AddClientCallTracerToContext(Arena* arena,
|
336
|
+
void AddClientCallTracerToContext(Arena* arena,
|
337
|
+
ClientCallTracerInterface* tracer) {
|
333
338
|
if (arena->GetContext<CallTracerAnnotationInterface>() == nullptr) {
|
334
339
|
// This is the first call tracer. Set it directly.
|
335
340
|
arena->SetContext<CallTracerAnnotationInterface>(tracer);
|
336
341
|
} else {
|
337
342
|
// There was already a call tracer present.
|
338
|
-
auto* orig_tracer = DownCast<
|
343
|
+
auto* orig_tracer = DownCast<ClientCallTracerInterface*>(
|
339
344
|
arena->GetContext<CallTracerAnnotationInterface>());
|
340
345
|
if (orig_tracer->IsDelegatingTracer()) {
|
341
346
|
// We already created a delegating tracer. Just add the new tracer to the
|
@@ -353,7 +358,8 @@ void AddClientCallTracerToContext(Arena* arena, ClientCallTracer* tracer) {
|
|
353
358
|
}
|
354
359
|
}
|
355
360
|
|
356
|
-
void AddServerCallTracerToContext(Arena* arena,
|
361
|
+
void AddServerCallTracerToContext(Arena* arena,
|
362
|
+
ServerCallTracerInterface* tracer) {
|
357
363
|
DCHECK_EQ(arena->GetContext<CallTracerInterface>(),
|
358
364
|
arena->GetContext<CallTracerAnnotationInterface>());
|
359
365
|
if (arena->GetContext<CallTracerAnnotationInterface>() == nullptr) {
|
@@ -362,7 +368,7 @@ void AddServerCallTracerToContext(Arena* arena, ServerCallTracer* tracer) {
|
|
362
368
|
arena->SetContext<CallTracerInterface>(tracer);
|
363
369
|
} else {
|
364
370
|
// There was already a call tracer present.
|
365
|
-
auto* orig_tracer = DownCast<
|
371
|
+
auto* orig_tracer = DownCast<ServerCallTracerInterface*>(
|
366
372
|
arena->GetContext<CallTracerAnnotationInterface>());
|
367
373
|
if (orig_tracer->IsDelegatingTracer()) {
|
368
374
|
// We already created a delegating tracer. Just add the new tracer to the
|
@@ -381,4 +387,4 @@ void AddServerCallTracerToContext(Arena* arena, ServerCallTracer* tracer) {
|
|
381
387
|
}
|
382
388
|
}
|
383
389
|
|
384
|
-
} // namespace grpc_core
|
390
|
+
} // namespace grpc_core
|
@@ -44,9 +44,9 @@ namespace grpc_core {
|
|
44
44
|
// The interface hierarchy is as follows -
|
45
45
|
// CallTracerAnnotationInterface
|
46
46
|
// | |
|
47
|
-
//
|
47
|
+
// ClientCallTracerInterface CallTracerInterface
|
48
48
|
// | |
|
49
|
-
// CallAttemptTracer
|
49
|
+
// CallAttemptTracer ServerCallTracerInterface
|
50
50
|
|
51
51
|
// The base class for all tracer implementations.
|
52
52
|
class CallTracerAnnotationInterface {
|
@@ -129,10 +129,13 @@ class CallTracerInterface : public CallTracerAnnotationInterface {
|
|
129
129
|
virtual std::shared_ptr<TcpCallTracer> StartNewTcpTrace() = 0;
|
130
130
|
};
|
131
131
|
|
132
|
+
class ClientCallTracerInterface;
|
133
|
+
class ServerCallTracerInterface;
|
134
|
+
|
132
135
|
// Interface for a tracer that records activities on a call. Actual attempts for
|
133
136
|
// this call are traced with CallAttemptTracer after invoking RecordNewAttempt()
|
134
137
|
// on the ClientCallTracer object.
|
135
|
-
class
|
138
|
+
class ClientCallTracerInterface : public CallTracerAnnotationInterface {
|
136
139
|
public:
|
137
140
|
// Interface for a tracer that records activities on a particular call
|
138
141
|
// attempt.
|
@@ -170,22 +173,22 @@ class ClientCallTracer : public CallTracerAnnotationInterface {
|
|
170
173
|
RefCountedStringValue value) = 0;
|
171
174
|
};
|
172
175
|
|
173
|
-
~
|
176
|
+
~ClientCallTracerInterface() override {}
|
174
177
|
|
175
178
|
// Records a new attempt for the associated call. \a transparent denotes
|
176
179
|
// whether the attempt is being made as a transparent retry or as a
|
177
180
|
// non-transparent retry/hedging attempt. (There will be at least one attempt
|
178
|
-
// even if the call is not being retried.) The `
|
179
|
-
// retains ownership to the newly created `CallAttemptTracer` object.
|
181
|
+
// even if the call is not being retried.) The `ClientCallTracerInterface`
|
182
|
+
// object retains ownership to the newly created `CallAttemptTracer` object.
|
180
183
|
// RecordEnd() serves as an indication that the call stack is done with all
|
181
184
|
// API calls, and the tracer library is free to destroy it after that.
|
182
185
|
virtual CallAttemptTracer* StartNewAttempt(bool is_transparent_retry) = 0;
|
183
186
|
};
|
184
187
|
|
185
188
|
// Interface for a tracer that records activities on a server call.
|
186
|
-
class
|
189
|
+
class ServerCallTracerInterface : public CallTracerInterface {
|
187
190
|
public:
|
188
|
-
~
|
191
|
+
~ServerCallTracerInterface() override {}
|
189
192
|
// TODO(yashykt): The following two methods `RecordReceivedTrailingMetadata`
|
190
193
|
// and `RecordEnd` should be moved into CallTracerInterface.
|
191
194
|
virtual void RecordReceivedTrailingMetadata(
|
@@ -195,15 +198,15 @@ class ServerCallTracer : public CallTracerInterface {
|
|
195
198
|
virtual void RecordEnd(const grpc_call_final_info* final_info) = 0;
|
196
199
|
};
|
197
200
|
|
198
|
-
// Interface for a factory that can create a
|
199
|
-
// server call.
|
201
|
+
// Interface for a factory that can create a ServerCallTracerInterface object
|
202
|
+
// per server call.
|
200
203
|
class ServerCallTracerFactory {
|
201
204
|
public:
|
202
205
|
struct RawPointerChannelArgTag {};
|
203
206
|
|
204
207
|
virtual ~ServerCallTracerFactory() {}
|
205
208
|
|
206
|
-
virtual
|
209
|
+
virtual ServerCallTracerInterface* CreateNewServerCallTracer(
|
207
210
|
Arena* arena, const ChannelArgs& channel_args) = 0;
|
208
211
|
|
209
212
|
// Returns true if a server is to be traced, false otherwise.
|
@@ -228,11 +231,13 @@ class ServerCallTracerFactory {
|
|
228
231
|
// Convenience functions to add call tracers to a call context. Allows setting
|
229
232
|
// multiple call tracers to a single call. It is only valid to add client call
|
230
233
|
// tracers before the client_channel filter sees the send_initial_metadata op.
|
231
|
-
void AddClientCallTracerToContext(Arena* arena,
|
234
|
+
void AddClientCallTracerToContext(Arena* arena,
|
235
|
+
ClientCallTracerInterface* tracer);
|
232
236
|
|
233
237
|
// TODO(yashykt): We want server call tracers to be registered through the
|
234
238
|
// ServerCallTracerFactory, which has yet to be made into a list.
|
235
|
-
void AddServerCallTracerToContext(Arena* arena,
|
239
|
+
void AddServerCallTracerToContext(Arena* arena,
|
240
|
+
ServerCallTracerInterface* tracer);
|
236
241
|
|
237
242
|
template <>
|
238
243
|
struct ArenaContextType<CallTracerInterface> {
|
@@ -245,20 +250,20 @@ struct ArenaContextType<CallTracerAnnotationInterface> {
|
|
245
250
|
};
|
246
251
|
|
247
252
|
template <>
|
248
|
-
struct ContextSubclass<
|
253
|
+
struct ContextSubclass<ClientCallTracerInterface::CallAttemptTracer> {
|
249
254
|
using Base = CallTracerInterface;
|
250
255
|
};
|
251
256
|
|
252
257
|
template <>
|
253
|
-
struct ContextSubclass<
|
258
|
+
struct ContextSubclass<ServerCallTracerInterface> {
|
254
259
|
using Base = CallTracerInterface;
|
255
260
|
};
|
256
261
|
|
257
262
|
template <>
|
258
|
-
struct ContextSubclass<
|
263
|
+
struct ContextSubclass<ClientCallTracerInterface> {
|
259
264
|
using Base = CallTracerAnnotationInterface;
|
260
265
|
};
|
261
266
|
|
262
267
|
} // namespace grpc_core
|
263
268
|
|
264
|
-
#endif // GRPC_SRC_CORE_TELEMETRY_CALL_TRACER_H
|
269
|
+
#endif // GRPC_SRC_CORE_TELEMETRY_CALL_TRACER_H
|
@@ -285,12 +285,12 @@ class StatsPlugin {
|
|
285
285
|
|
286
286
|
// Whether this stats plugin is enabled for the channel specified by \a scope.
|
287
287
|
// Returns true and a channel-specific ScopeConfig which may then be used to
|
288
|
-
// configure the
|
288
|
+
// configure the ClientCallTracerInterface in GetClientCallTracer().
|
289
289
|
virtual std::pair<bool, std::shared_ptr<ScopeConfig>> IsEnabledForChannel(
|
290
290
|
const experimental::StatsPluginChannelScope& scope) const = 0;
|
291
291
|
// Whether this stats plugin is enabled for the server specified by \a args.
|
292
292
|
// Returns true and a server-specific ScopeConfig which may then be used to
|
293
|
-
// configure the
|
293
|
+
// configure the ServerCallTracerInterface in GetServerCallTracer().
|
294
294
|
virtual std::pair<bool, std::shared_ptr<ScopeConfig>> IsEnabledForServer(
|
295
295
|
const ChannelArgs& args) const = 0;
|
296
296
|
// Gets a scope config for the client channel specified by \a scope. Note that
|
@@ -344,14 +344,14 @@ class StatsPlugin {
|
|
344
344
|
virtual bool IsInstrumentEnabled(
|
345
345
|
GlobalInstrumentsRegistry::GlobalInstrumentHandle handle) const = 0;
|
346
346
|
|
347
|
-
// Gets a
|
348
|
-
// in a call.
|
349
|
-
virtual
|
347
|
+
// Gets a ClientCallTracerInterface associated with this stats plugin which
|
348
|
+
// can be used in a call.
|
349
|
+
virtual ClientCallTracerInterface* GetClientCallTracer(
|
350
350
|
const Slice& path, bool registered_method,
|
351
351
|
std::shared_ptr<ScopeConfig> scope_config) = 0;
|
352
|
-
// Gets a
|
353
|
-
// in a call.
|
354
|
-
virtual
|
352
|
+
// Gets a ServerCallTracerInterface associated with this stats plugin which
|
353
|
+
// can be used in a call.
|
354
|
+
virtual ServerCallTracerInterface* GetServerCallTracer(
|
355
355
|
std::shared_ptr<ScopeConfig> scope_config) = 0;
|
356
356
|
|
357
357
|
// TODO(yijiem): This is an optimization for the StatsPlugin to create its own
|