grpc 1.60.2 → 1.61.0.pre2
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 +208 -165
- data/include/grpc/event_engine/event_engine.h +59 -12
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
- data/include/grpc/event_engine/internal/slice_cast.h +12 -0
- data/include/grpc/event_engine/memory_allocator.h +3 -1
- data/include/grpc/event_engine/slice.h +5 -0
- data/include/grpc/grpc_security.h +22 -1
- data/include/grpc/impl/call.h +29 -0
- data/include/grpc/impl/channel_arg_names.h +12 -1
- data/include/grpc/impl/slice_type.h +1 -1
- data/include/grpc/module.modulemap +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
- data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
- data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
- data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
- data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/client_authority_filter.h +12 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
- data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
- data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
- data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
- data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
- data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +68 -145
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
- data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -36
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
- data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
- data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
- data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
- data/src/core/ext/xds/certificate_provider_store.cc +2 -1
- data/src/core/ext/xds/certificate_provider_store.h +0 -5
- data/src/core/ext/xds/xds_api.cc +31 -18
- data/src/core/ext/xds/xds_api.h +2 -2
- data/src/core/ext/xds/xds_bootstrap.h +3 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
- data/src/core/ext/xds/xds_certificate_provider.h +44 -111
- data/src/core/ext/xds/xds_client.cc +420 -414
- data/src/core/ext/xds/xds_client.h +31 -22
- data/src/core/ext/xds/xds_client_grpc.cc +3 -1
- data/src/core/ext/xds/xds_cluster.cc +104 -11
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
- data/src/core/ext/xds/xds_common_types.cc +14 -10
- data/src/core/ext/xds/xds_endpoint.cc +9 -4
- data/src/core/ext/xds/xds_endpoint.h +5 -1
- data/src/core/ext/xds/xds_health_status.cc +12 -2
- data/src/core/ext/xds/xds_health_status.h +4 -2
- data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
- data/src/core/ext/xds/xds_listener.cc +14 -8
- data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
- data/src/core/ext/xds/xds_route_config.cc +34 -22
- data/src/core/ext/xds/xds_route_config.h +1 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
- data/src/core/ext/xds/xds_transport.h +3 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
- data/src/core/ext/xds/xds_transport_grpc.h +4 -0
- data/src/core/lib/channel/call_tracer.cc +12 -0
- data/src/core/lib/channel/call_tracer.h +17 -3
- data/src/core/lib/channel/channel_args.cc +24 -14
- data/src/core/lib/channel/channel_args.h +74 -13
- data/src/core/lib/channel/channel_stack.cc +27 -0
- data/src/core/lib/channel/channel_stack.h +10 -10
- data/src/core/lib/channel/connected_channel.cc +64 -18
- data/src/core/lib/channel/promise_based_filter.h +1041 -1
- data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
- data/src/core/lib/compression/compression_internal.cc +0 -3
- data/src/core/lib/event_engine/ares_resolver.cc +35 -14
- data/src/core/lib/event_engine/ares_resolver.h +9 -10
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
- data/src/core/lib/experiments/config.cc +13 -0
- data/src/core/lib/experiments/config.h +3 -0
- data/src/core/lib/experiments/experiments.cc +245 -366
- data/src/core/lib/experiments/experiments.h +50 -156
- data/src/core/lib/gprpp/debug_location.h +13 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
- data/src/core/lib/gprpp/orphanable.h +27 -0
- data/src/core/lib/gprpp/ref_counted.h +63 -22
- data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
- data/src/core/lib/gprpp/ref_counted_string.h +13 -0
- data/src/core/lib/gprpp/status_helper.cc +1 -2
- data/src/core/lib/iomgr/combiner.cc +15 -51
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
- data/src/core/lib/load_balancing/lb_policy.h +1 -1
- data/src/core/lib/promise/activity.cc +17 -2
- data/src/core/lib/promise/activity.h +5 -4
- data/src/core/lib/promise/all_ok.h +80 -0
- data/src/core/lib/promise/detail/join_state.h +2077 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -0
- data/src/core/lib/promise/detail/promise_like.h +8 -1
- data/src/core/lib/promise/detail/seq_state.h +3458 -150
- data/src/core/lib/promise/detail/status.h +42 -5
- data/src/core/lib/promise/for_each.h +13 -1
- data/src/core/lib/promise/if.h +4 -0
- data/src/core/lib/promise/latch.h +6 -3
- data/src/core/lib/promise/party.cc +33 -31
- data/src/core/lib/promise/party.h +142 -6
- data/src/core/lib/promise/poll.h +39 -13
- data/src/core/lib/promise/promise.h +4 -0
- data/src/core/lib/promise/seq.h +107 -7
- data/src/core/lib/promise/status_flag.h +196 -0
- data/src/core/lib/promise/try_join.h +132 -0
- data/src/core/lib/promise/try_seq.h +132 -10
- data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
- data/src/core/lib/resolver/endpoint_addresses.h +48 -0
- data/src/core/lib/resource_quota/arena.h +2 -2
- data/src/core/lib/resource_quota/memory_quota.cc +57 -8
- data/src/core/lib/resource_quota/memory_quota.h +6 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
- data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
- data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
- data/src/core/lib/security/transport/auth_filters.h +71 -4
- data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
- data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
- data/src/core/lib/slice/slice_buffer.h +3 -0
- data/src/core/lib/surface/builtins.cc +1 -1
- data/src/core/lib/surface/call.cc +683 -196
- data/src/core/lib/surface/call.h +26 -13
- data/src/core/lib/surface/call_trace.cc +42 -1
- data/src/core/lib/surface/channel.cc +0 -1
- data/src/core/lib/surface/channel.h +0 -6
- data/src/core/lib/surface/channel_init.h +26 -0
- data/src/core/lib/surface/init.cc +14 -8
- data/src/core/lib/surface/server.cc +256 -237
- data/src/core/lib/surface/server.h +26 -54
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
- data/src/core/lib/transport/call_final_info.cc +38 -0
- data/src/core/lib/transport/call_final_info.h +54 -0
- data/src/core/lib/transport/connectivity_state.cc +3 -2
- data/src/core/lib/transport/connectivity_state.h +4 -0
- data/src/core/lib/transport/metadata_batch.h +4 -4
- data/src/core/lib/transport/transport.cc +70 -19
- data/src/core/lib/transport/transport.h +395 -25
- data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +65 -43
- data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc.c +0 -1
- data/src/ruby/ext/grpc/rb_grpc.h +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/upb/upb/reflection/def_pool.h +2 -2
- data/third_party/zlib/adler32.c +5 -27
- data/third_party/zlib/compress.c +5 -16
- data/third_party/zlib/crc32.c +86 -162
- data/third_party/zlib/deflate.c +233 -336
- data/third_party/zlib/deflate.h +8 -8
- data/third_party/zlib/gzguts.h +11 -12
- data/third_party/zlib/infback.c +7 -23
- data/third_party/zlib/inffast.c +1 -4
- data/third_party/zlib/inffast.h +1 -1
- data/third_party/zlib/inflate.c +30 -99
- data/third_party/zlib/inftrees.c +6 -11
- data/third_party/zlib/inftrees.h +3 -3
- data/third_party/zlib/trees.c +224 -302
- data/third_party/zlib/uncompr.c +4 -12
- data/third_party/zlib/zconf.h +6 -2
- data/third_party/zlib/zlib.h +191 -188
- data/third_party/zlib/zutil.c +16 -44
- data/third_party/zlib/zutil.h +10 -10
- metadata +35 -13
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
- data/src/core/lib/event_engine/memory_allocator.cc +0 -74
- data/src/core/lib/transport/pid_controller.cc +0 -51
- data/src/core/lib/transport/pid_controller.h +0 -116
- data/third_party/upb/upb/collections/array.h +0 -17
- data/third_party/upb/upb/collections/map.h +0 -17
- data/third_party/upb/upb/upb.hpp +0 -18
@@ -79,7 +79,7 @@ namespace experimental {
|
|
79
79
|
///
|
80
80
|
///
|
81
81
|
/// Blocking EventEngine Callbacks
|
82
|
-
///
|
82
|
+
/// ------------------------------
|
83
83
|
///
|
84
84
|
/// Doing blocking work in EventEngine callbacks is generally not advisable.
|
85
85
|
/// While gRPC's default EventEngine implementations have some capacity to scale
|
@@ -90,6 +90,15 @@ namespace experimental {
|
|
90
90
|
/// *Best Practice* : Occasional blocking work may be fine, but we do not
|
91
91
|
/// recommend running a mostly blocking workload in EventEngine threads.
|
92
92
|
///
|
93
|
+
///
|
94
|
+
/// Thread-safety guarantees
|
95
|
+
/// ------------------------
|
96
|
+
///
|
97
|
+
/// All EventEngine methods are guaranteed to be thread-safe, no external
|
98
|
+
/// synchronization is required to call any EventEngine method. Please note that
|
99
|
+
/// this does not apply to application callbacks, which may be run concurrently;
|
100
|
+
/// application state synchronization must be managed by the application.
|
101
|
+
///
|
93
102
|
////////////////////////////////////////////////////////////////////////////////
|
94
103
|
class EventEngine : public std::enable_shared_from_this<EventEngine> {
|
95
104
|
public:
|
@@ -246,6 +255,45 @@ class EventEngine : public std::enable_shared_from_this<EventEngine> {
|
|
246
255
|
/// values are expected to remain valid for the life of the Endpoint.
|
247
256
|
virtual const ResolvedAddress& GetPeerAddress() const = 0;
|
248
257
|
virtual const ResolvedAddress& GetLocalAddress() const = 0;
|
258
|
+
|
259
|
+
/// A method which allows users to query whether an Endpoint implementation
|
260
|
+
/// supports a specified extension. The name of the extension is provided
|
261
|
+
/// as an input.
|
262
|
+
///
|
263
|
+
/// An extension could be any type with a unique string id. Each extension
|
264
|
+
/// may support additional capabilities and if the Endpoint implementation
|
265
|
+
/// supports the queried extension, it should return a valid pointer to the
|
266
|
+
/// extension type.
|
267
|
+
///
|
268
|
+
/// E.g., use case of an EventEngine::Endpoint supporting a custom
|
269
|
+
/// extension.
|
270
|
+
///
|
271
|
+
/// class CustomEndpointExtension {
|
272
|
+
/// public:
|
273
|
+
/// static constexpr std::string name = "my.namespace.extension_name";
|
274
|
+
/// void Process() { ... }
|
275
|
+
/// }
|
276
|
+
///
|
277
|
+
///
|
278
|
+
/// class CustomEndpoint :
|
279
|
+
/// public EventEngine::Endpoint, CustomEndpointExtension {
|
280
|
+
/// public:
|
281
|
+
/// void* QueryExtension(absl::string_view id) override {
|
282
|
+
/// if (id == CustomEndpointExtension::name) {
|
283
|
+
/// return static_cast<CustomEndpointExtension*>(this);
|
284
|
+
/// }
|
285
|
+
/// return nullptr;
|
286
|
+
/// }
|
287
|
+
/// ...
|
288
|
+
/// }
|
289
|
+
///
|
290
|
+
/// auto ext_ =
|
291
|
+
/// static_cast<CustomEndpointExtension*>(
|
292
|
+
/// endpoint->QueryExtension(CustomrEndpointExtension::name));
|
293
|
+
/// if (ext_ != nullptr) { ext_->Process(); }
|
294
|
+
///
|
295
|
+
///
|
296
|
+
virtual void* QueryExtension(absl::string_view /*id*/) { return nullptr; }
|
249
297
|
};
|
250
298
|
|
251
299
|
/// Called when a new connection is established.
|
@@ -405,8 +453,8 @@ class EventEngine : public std::enable_shared_from_this<EventEngine> {
|
|
405
453
|
|
406
454
|
/// Asynchronously executes a task as soon as possible.
|
407
455
|
///
|
408
|
-
/// \a Closures
|
409
|
-
///
|
456
|
+
/// \a Closures passed to \a Run cannot be cancelled. The \a closure will not
|
457
|
+
/// be deleted after it has been run, ownership remains with the caller.
|
410
458
|
///
|
411
459
|
/// Implementations must not execute the closure in the calling thread before
|
412
460
|
/// \a Run returns. For example, if the caller must release a lock before the
|
@@ -415,9 +463,9 @@ class EventEngine : public std::enable_shared_from_this<EventEngine> {
|
|
415
463
|
virtual void Run(Closure* closure) = 0;
|
416
464
|
/// Asynchronously executes a task as soon as possible.
|
417
465
|
///
|
418
|
-
/// \a Closures
|
419
|
-
///
|
420
|
-
///
|
466
|
+
/// \a Closures passed to \a Run cannot be cancelled. Unlike the overloaded \a
|
467
|
+
/// Closure alternative, the absl::AnyInvocable version's \a closure will be
|
468
|
+
/// deleted by the EventEngine after the closure has been run.
|
421
469
|
///
|
422
470
|
/// This version of \a Run may be less performant than the \a Closure version
|
423
471
|
/// in some scenarios. This overload is useful in situations where performance
|
@@ -453,13 +501,12 @@ class EventEngine : public std::enable_shared_from_this<EventEngine> {
|
|
453
501
|
absl::AnyInvocable<void()> closure) = 0;
|
454
502
|
/// Request cancellation of a task.
|
455
503
|
///
|
456
|
-
/// If the associated closure
|
457
|
-
///
|
504
|
+
/// If the associated closure cannot be cancelled for any reason, this
|
505
|
+
/// function will return false.
|
458
506
|
///
|
459
|
-
/// If the associated closure
|
460
|
-
///
|
461
|
-
/// absl::AnyInvocable
|
462
|
-
/// was an absl::AnyInvocable, it will be destroyed before the method returns.
|
507
|
+
/// If the associated closure can be cancelled, the associated callback will
|
508
|
+
/// never be run, and this method will return true. If the callback type was
|
509
|
+
/// an absl::AnyInvocable, it will be destroyed before the method returns.
|
463
510
|
virtual bool Cancel(TaskHandle handle) = 0;
|
464
511
|
};
|
465
512
|
|
@@ -50,6 +50,12 @@ class MemoryAllocatorImpl
|
|
50
50
|
/// request.max() inclusively.
|
51
51
|
virtual size_t Reserve(MemoryRequest request) = 0;
|
52
52
|
|
53
|
+
/// Allocate a slice, using MemoryRequest to size the number of returned
|
54
|
+
/// bytes. For a variable length request, check the returned slice length to
|
55
|
+
/// verify how much memory was allocated. Takes care of reserving memory for
|
56
|
+
/// any relevant control structures also.
|
57
|
+
virtual grpc_slice MakeSlice(MemoryRequest request) = 0;
|
58
|
+
|
53
59
|
/// Release some bytes that were previously reserved.
|
54
60
|
/// If more bytes are released than were reserved, we will have undefined
|
55
61
|
/// behavior.
|
@@ -60,6 +60,18 @@ Result& SliceCast(T& value, SliceCastable<Result, T> = {}) {
|
|
60
60
|
return reinterpret_cast<Result&>(value);
|
61
61
|
}
|
62
62
|
|
63
|
+
// Cast to `Result&&` from `T&&` without any runtime checks.
|
64
|
+
// This is only valid if `sizeof(Result) == sizeof(T)`, and if `Result`, `T` are
|
65
|
+
// opted in as compatible via `SliceCastable`.
|
66
|
+
template <typename Result, typename T>
|
67
|
+
Result&& SliceCast(T&& value, SliceCastable<Result, T> = {}) {
|
68
|
+
// Insist upon sizes being equal to catch mismatches.
|
69
|
+
// We assume if sizes are opted in and sizes are equal then yes, these two
|
70
|
+
// types are expected to be layout compatible and actually appear to be.
|
71
|
+
static_assert(sizeof(Result) == sizeof(T), "size mismatch");
|
72
|
+
return reinterpret_cast<Result&&>(value);
|
73
|
+
}
|
74
|
+
|
63
75
|
} // namespace internal
|
64
76
|
} // namespace experimental
|
65
77
|
} // namespace grpc_event_engine
|
@@ -134,7 +134,9 @@ class MemoryAllocator {
|
|
134
134
|
/// bytes. For a variable length request, check the returned slice length to
|
135
135
|
/// verify how much memory was allocated. Takes care of reserving memory for
|
136
136
|
/// any relevant control structures also.
|
137
|
-
grpc_slice MakeSlice(MemoryRequest request)
|
137
|
+
grpc_slice MakeSlice(MemoryRequest request) {
|
138
|
+
return allocator_->MakeSlice(request);
|
139
|
+
}
|
138
140
|
|
139
141
|
/// A C++ allocator for containers of T.
|
140
142
|
template <typename T>
|
@@ -169,6 +169,11 @@ struct CopyConstructors {
|
|
169
169
|
return Out(grpc_slice_from_copied_buffer(p, len));
|
170
170
|
}
|
171
171
|
|
172
|
+
static Out FromCopiedBuffer(const uint8_t* p, size_t len) {
|
173
|
+
return Out(
|
174
|
+
grpc_slice_from_copied_buffer(reinterpret_cast<const char*>(p), len));
|
175
|
+
}
|
176
|
+
|
172
177
|
template <typename Buffer>
|
173
178
|
static Out FromCopiedBuffer(const Buffer& buffer) {
|
174
179
|
return FromCopiedBuffer(reinterpret_cast<const char*>(buffer.data()),
|
@@ -815,6 +815,24 @@ GRPCAPI void grpc_tls_certificate_provider_release(
|
|
815
815
|
*/
|
816
816
|
GRPCAPI grpc_tls_credentials_options* grpc_tls_credentials_options_create(void);
|
817
817
|
|
818
|
+
/**
|
819
|
+
* EXPERIMENTAL API - Subject to change
|
820
|
+
*
|
821
|
+
* Sets the minimum TLS version that will be negotiated during the TLS
|
822
|
+
* handshake. If not set, the underlying SSL library will set it to TLS v1.2.
|
823
|
+
*/
|
824
|
+
GRPCAPI void grpc_tls_credentials_options_set_min_tls_version(
|
825
|
+
grpc_tls_credentials_options* options, grpc_tls_version min_tls_version);
|
826
|
+
|
827
|
+
/**
|
828
|
+
* EXPERIMENTAL API - Subject to change
|
829
|
+
*
|
830
|
+
* Sets the maximum TLS version that will be negotiated during the TLS
|
831
|
+
* handshake. If not set, the underlying SSL library will set it to TLS v1.3.
|
832
|
+
*/
|
833
|
+
GRPCAPI void grpc_tls_credentials_options_set_max_tls_version(
|
834
|
+
grpc_tls_credentials_options* options, grpc_tls_version max_tls_version);
|
835
|
+
|
818
836
|
/**
|
819
837
|
* EXPERIMENTAL API - Subject to change
|
820
838
|
*
|
@@ -894,7 +912,10 @@ GRPCAPI void grpc_tls_credentials_options_set_identity_cert_name(
|
|
894
912
|
GRPCAPI void grpc_tls_credentials_options_set_cert_request_type(
|
895
913
|
grpc_tls_credentials_options* options,
|
896
914
|
grpc_ssl_client_certificate_request_type type);
|
897
|
-
|
915
|
+
|
916
|
+
/** Deprecated in favor of grpc_tls_credentials_options_set_crl_provider. The
|
917
|
+
* crl provider interface provides a significantly more flexible approach to
|
918
|
+
* using CRLs. See gRFC A69 for details.
|
898
919
|
* EXPERIMENTAL API - Subject to change
|
899
920
|
*
|
900
921
|
* If set, gRPC will read all hashed x.509 CRL files in the directory and
|
@@ -0,0 +1,29 @@
|
|
1
|
+
// Copyright 2023 The gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_IMPL_CALL_H
|
16
|
+
#define GRPC_IMPL_CALL_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include "absl/functional/any_invocable.h"
|
21
|
+
|
22
|
+
#include <grpc/grpc.h>
|
23
|
+
|
24
|
+
// Run a callback in the call's EventEngine.
|
25
|
+
// Internal-only
|
26
|
+
void grpc_call_run_in_event_engine(const grpc_call* call,
|
27
|
+
absl::AnyInvocable<void()> cb);
|
28
|
+
|
29
|
+
#endif /* GRPC_IMPL_CALL_H */
|
@@ -15,7 +15,7 @@
|
|
15
15
|
#ifndef GRPC_IMPL_CHANNEL_ARG_NAMES_H
|
16
16
|
#define GRPC_IMPL_CHANNEL_ARG_NAMES_H
|
17
17
|
|
18
|
-
// IWYU pragma: private, include
|
18
|
+
// IWYU pragma: private, include <grpc/grpc.h>
|
19
19
|
// IWYU pragma: friend "src/.*"
|
20
20
|
// IWYU pragma: friend "test/.*"
|
21
21
|
|
@@ -106,6 +106,12 @@
|
|
106
106
|
*/
|
107
107
|
#define GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS \
|
108
108
|
"grpc.http2.min_ping_interval_without_data_ms"
|
109
|
+
/** Maximum time to allow a request to be:
|
110
|
+
(1) received by the server, but
|
111
|
+
(2) not requested by a RequestCall (in the completion queue based API)
|
112
|
+
before the request is cancelled */
|
113
|
+
#define GRPC_ARG_SERVER_MAX_UNREQUESTED_TIME_IN_SERVER_SECONDS \
|
114
|
+
"grpc.server_max_unrequested_time_in_server"
|
109
115
|
/** Channel arg to override the http2 :scheme header */
|
110
116
|
#define GRPC_ARG_HTTP2_SCHEME "grpc.http2_scheme"
|
111
117
|
/** How many pings can the client send before needing to send a
|
@@ -384,6 +390,11 @@
|
|
384
390
|
* Defaults to 250ms. */
|
385
391
|
#define GRPC_ARG_HAPPY_EYEBALLS_CONNECTION_ATTEMPT_DELAY_MS \
|
386
392
|
"grpc.happy_eyeballs_connection_attempt_delay_ms"
|
393
|
+
/** It accepts a MemoryAllocatorFactory as input and If specified, it forces
|
394
|
+
* the default event engine to use memory allocators created using the provided
|
395
|
+
* factory. */
|
396
|
+
#define GRPC_ARG_EVENT_ENGINE_USE_MEMORY_ALLOCATOR_FACTORY \
|
397
|
+
"grpc.event_engine_use_memory_allocator_factory"
|
387
398
|
/** \} */
|
388
399
|
|
389
400
|
#endif /* GRPC_IMPL_CHANNEL_ARG_NAMES_H */
|
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
#include "absl/strings/string_view.h"
|
28
28
|
#include "upb/base/string_view.h"
|
29
|
-
#include "upb/
|
29
|
+
#include "upb/mem/arena.hpp"
|
30
30
|
#include "xds/data/orca/v3/orca_load_report.upb.h"
|
31
31
|
|
32
32
|
#include <grpc/impl/channel_arg_names.h>
|
@@ -37,6 +37,7 @@
|
|
37
37
|
#include "src/core/lib/channel/context.h"
|
38
38
|
#include "src/core/lib/config/core_configuration.h"
|
39
39
|
#include "src/core/lib/debug/trace.h"
|
40
|
+
#include "src/core/lib/experiments/experiments.h"
|
40
41
|
#include "src/core/lib/promise/context.h"
|
41
42
|
#include "src/core/lib/promise/map.h"
|
42
43
|
#include "src/core/lib/slice/slice.h"
|
@@ -47,8 +48,15 @@ namespace grpc_core {
|
|
47
48
|
|
48
49
|
TraceFlag grpc_backend_metric_filter_trace(false, "backend_metric_filter");
|
49
50
|
|
50
|
-
|
51
|
-
|
51
|
+
const NoInterceptor BackendMetricFilter::Call::OnClientInitialMetadata;
|
52
|
+
const NoInterceptor BackendMetricFilter::Call::OnServerInitialMetadata;
|
53
|
+
const NoInterceptor BackendMetricFilter::Call::OnClientToServerMessage;
|
54
|
+
const NoInterceptor BackendMetricFilter::Call::OnServerToClientMessage;
|
55
|
+
const NoInterceptor BackendMetricFilter::Call::OnFinalize;
|
56
|
+
|
57
|
+
namespace {
|
58
|
+
absl::optional<std::string> MaybeSerializeBackendMetrics(
|
59
|
+
BackendMetricProvider* provider) {
|
52
60
|
if (provider == nullptr) return absl::nullopt;
|
53
61
|
BackendMetricData data = provider->GetBackendMetricData();
|
54
62
|
upb::Arena arena;
|
@@ -107,17 +115,27 @@ absl::optional<std::string> BackendMetricFilter::MaybeSerializeBackendMetrics(
|
|
107
115
|
xds_data_orca_v3_OrcaLoadReport_serialize(response, arena.ptr(), &len);
|
108
116
|
return std::string(buf, len);
|
109
117
|
}
|
118
|
+
} // namespace
|
119
|
+
|
120
|
+
const grpc_channel_filter LegacyBackendMetricFilter::kFilter =
|
121
|
+
MakePromiseBasedFilter<LegacyBackendMetricFilter, FilterEndpoint::kServer>(
|
122
|
+
"backend_metric");
|
110
123
|
|
111
124
|
const grpc_channel_filter BackendMetricFilter::kFilter =
|
112
125
|
MakePromiseBasedFilter<BackendMetricFilter, FilterEndpoint::kServer>(
|
113
126
|
"backend_metric");
|
114
127
|
|
128
|
+
absl::StatusOr<LegacyBackendMetricFilter> LegacyBackendMetricFilter::Create(
|
129
|
+
const ChannelArgs&, ChannelFilter::Args) {
|
130
|
+
return LegacyBackendMetricFilter();
|
131
|
+
}
|
132
|
+
|
115
133
|
absl::StatusOr<BackendMetricFilter> BackendMetricFilter::Create(
|
116
134
|
const ChannelArgs&, ChannelFilter::Args) {
|
117
135
|
return BackendMetricFilter();
|
118
136
|
}
|
119
137
|
|
120
|
-
ArenaPromise<ServerMetadataHandle>
|
138
|
+
ArenaPromise<ServerMetadataHandle> LegacyBackendMetricFilter::MakeCallPromise(
|
121
139
|
CallArgs call_args, NextPromiseFactory next_promise_factory) {
|
122
140
|
return ArenaPromise<ServerMetadataHandle>(Map(
|
123
141
|
next_promise_factory(std::move(call_args)),
|
@@ -148,10 +166,39 @@ ArenaPromise<ServerMetadataHandle> BackendMetricFilter::MakeCallPromise(
|
|
148
166
|
}));
|
149
167
|
}
|
150
168
|
|
169
|
+
void BackendMetricFilter::Call::OnServerTrailingMetadata(ServerMetadata& md) {
|
170
|
+
auto* ctx = &GetContext<
|
171
|
+
grpc_call_context_element>()[GRPC_CONTEXT_BACKEND_METRIC_PROVIDER];
|
172
|
+
if (ctx == nullptr) {
|
173
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_backend_metric_filter_trace)) {
|
174
|
+
gpr_log(GPR_INFO, "[%p] No BackendMetricProvider.", this);
|
175
|
+
}
|
176
|
+
return;
|
177
|
+
}
|
178
|
+
absl::optional<std::string> serialized = MaybeSerializeBackendMetrics(
|
179
|
+
reinterpret_cast<BackendMetricProvider*>(ctx->value));
|
180
|
+
if (serialized.has_value() && !serialized->empty()) {
|
181
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_backend_metric_filter_trace)) {
|
182
|
+
gpr_log(GPR_INFO, "[%p] Backend metrics serialized. size: %" PRIuPTR,
|
183
|
+
this, serialized->size());
|
184
|
+
}
|
185
|
+
md.Set(EndpointLoadMetricsBinMetadata(),
|
186
|
+
Slice::FromCopiedString(std::move(*serialized)));
|
187
|
+
} else if (GRPC_TRACE_FLAG_ENABLED(grpc_backend_metric_filter_trace)) {
|
188
|
+
gpr_log(GPR_INFO, "[%p] No backend metrics.", this);
|
189
|
+
}
|
190
|
+
}
|
191
|
+
|
151
192
|
void RegisterBackendMetricFilter(CoreConfiguration::Builder* builder) {
|
152
|
-
|
153
|
-
|
154
|
-
|
193
|
+
if (IsV3BackendMetricFilterEnabled()) {
|
194
|
+
builder->channel_init()
|
195
|
+
->RegisterFilter<BackendMetricFilter>(GRPC_SERVER_CHANNEL)
|
196
|
+
.IfHasChannelArg(GRPC_ARG_SERVER_CALL_METRIC_RECORDING);
|
197
|
+
} else {
|
198
|
+
builder->channel_init()
|
199
|
+
->RegisterFilter<LegacyBackendMetricFilter>(GRPC_SERVER_CHANNEL)
|
200
|
+
.IfHasChannelArg(GRPC_ARG_SERVER_CALL_METRIC_RECORDING);
|
201
|
+
}
|
155
202
|
}
|
156
203
|
|
157
204
|
} // namespace grpc_core
|
@@ -31,20 +31,34 @@
|
|
31
31
|
|
32
32
|
namespace grpc_core {
|
33
33
|
|
34
|
-
class
|
34
|
+
class LegacyBackendMetricFilter : public ChannelFilter {
|
35
35
|
public:
|
36
36
|
static const grpc_channel_filter kFilter;
|
37
37
|
|
38
|
-
static absl::StatusOr<
|
39
|
-
|
38
|
+
static absl::StatusOr<LegacyBackendMetricFilter> Create(
|
39
|
+
const ChannelArgs& args, ChannelFilter::Args);
|
40
40
|
|
41
41
|
// Construct a promise for one call.
|
42
42
|
ArenaPromise<ServerMetadataHandle> MakeCallPromise(
|
43
43
|
CallArgs call_args, NextPromiseFactory next_promise_factory) override;
|
44
|
+
};
|
45
|
+
|
46
|
+
class BackendMetricFilter : public ImplementChannelFilter<BackendMetricFilter> {
|
47
|
+
public:
|
48
|
+
static const grpc_channel_filter kFilter;
|
49
|
+
|
50
|
+
static absl::StatusOr<BackendMetricFilter> Create(const ChannelArgs& args,
|
51
|
+
ChannelFilter::Args);
|
44
52
|
|
45
|
-
|
46
|
-
|
47
|
-
|
53
|
+
class Call {
|
54
|
+
public:
|
55
|
+
static const NoInterceptor OnClientInitialMetadata;
|
56
|
+
static const NoInterceptor OnServerInitialMetadata;
|
57
|
+
void OnServerTrailingMetadata(ServerMetadata& md);
|
58
|
+
static const NoInterceptor OnClientToServerMessage;
|
59
|
+
static const NoInterceptor OnServerToClientMessage;
|
60
|
+
static const NoInterceptor OnFinalize;
|
61
|
+
};
|
48
62
|
};
|
49
63
|
|
50
64
|
} // namespace grpc_core
|
@@ -56,6 +56,13 @@
|
|
56
56
|
|
57
57
|
namespace grpc_core {
|
58
58
|
|
59
|
+
const NoInterceptor ChannelIdleFilter::Call::OnClientInitialMetadata;
|
60
|
+
const NoInterceptor ChannelIdleFilter::Call::OnServerInitialMetadata;
|
61
|
+
const NoInterceptor ChannelIdleFilter::Call::OnServerTrailingMetadata;
|
62
|
+
const NoInterceptor ChannelIdleFilter::Call::OnClientToServerMessage;
|
63
|
+
const NoInterceptor ChannelIdleFilter::Call::OnServerToClientMessage;
|
64
|
+
const NoInterceptor ChannelIdleFilter::Call::OnFinalize;
|
65
|
+
|
59
66
|
namespace {
|
60
67
|
|
61
68
|
// TODO(roth): This can go back to being a constant when the experiment
|
@@ -221,17 +228,6 @@ void MaxAgeFilter::PostInit() {
|
|
221
228
|
}
|
222
229
|
}
|
223
230
|
|
224
|
-
// Construct a promise for one call.
|
225
|
-
ArenaPromise<ServerMetadataHandle> ChannelIdleFilter::MakeCallPromise(
|
226
|
-
CallArgs call_args, NextPromiseFactory next_promise_factory) {
|
227
|
-
using Decrementer = std::unique_ptr<ChannelIdleFilter, CallCountDecreaser>;
|
228
|
-
IncreaseCallCount();
|
229
|
-
return ArenaPromise<ServerMetadataHandle>(
|
230
|
-
[decrementer = Decrementer(this),
|
231
|
-
next = next_promise_factory(std::move(call_args))]() mutable
|
232
|
-
-> Poll<ServerMetadataHandle> { return next(); });
|
233
|
-
}
|
234
|
-
|
235
231
|
bool ChannelIdleFilter::StartTransportOp(grpc_transport_op* op) {
|
236
232
|
// Catch the disconnect_with_error transport op.
|
237
233
|
if (!op->disconnect_with_error.ok()) Shutdown();
|
@@ -298,14 +294,15 @@ const grpc_channel_filter MaxAgeFilter::kFilter =
|
|
298
294
|
MakePromiseBasedFilter<MaxAgeFilter, FilterEndpoint::kServer>("max_age");
|
299
295
|
|
300
296
|
void RegisterChannelIdleFilters(CoreConfiguration::Builder* builder) {
|
297
|
+
if (!IsV3ChannelIdleFiltersEnabled()) return;
|
301
298
|
builder->channel_init()
|
302
|
-
->RegisterFilter(GRPC_CLIENT_CHANNEL
|
299
|
+
->RegisterFilter<ClientIdleFilter>(GRPC_CLIENT_CHANNEL)
|
303
300
|
.ExcludeFromMinimalStack()
|
304
301
|
.If([](const ChannelArgs& channel_args) {
|
305
302
|
return GetClientIdleTimeout(channel_args) != Duration::Infinity();
|
306
303
|
});
|
307
304
|
builder->channel_init()
|
308
|
-
->RegisterFilter(GRPC_SERVER_CHANNEL
|
305
|
+
->RegisterFilter<MaxAgeFilter>(GRPC_SERVER_CHANNEL)
|
309
306
|
.ExcludeFromMinimalStack()
|
310
307
|
.If([](const ChannelArgs& channel_args) {
|
311
308
|
return MaxAgeFilter::Config::FromChannelArgs(channel_args).enable();
|
@@ -40,7 +40,7 @@
|
|
40
40
|
|
41
41
|
namespace grpc_core {
|
42
42
|
|
43
|
-
class ChannelIdleFilter : public
|
43
|
+
class ChannelIdleFilter : public ImplementChannelFilter<ChannelIdleFilter> {
|
44
44
|
public:
|
45
45
|
~ChannelIdleFilter() override = default;
|
46
46
|
|
@@ -49,9 +49,23 @@ class ChannelIdleFilter : public ChannelFilter {
|
|
49
49
|
ChannelIdleFilter(ChannelIdleFilter&&) = default;
|
50
50
|
ChannelIdleFilter& operator=(ChannelIdleFilter&&) = default;
|
51
51
|
|
52
|
-
|
53
|
-
|
54
|
-
|
52
|
+
class Call {
|
53
|
+
public:
|
54
|
+
explicit Call(ChannelIdleFilter* filter) : filter_(filter) {
|
55
|
+
filter_->IncreaseCallCount();
|
56
|
+
}
|
57
|
+
~Call() { filter_->DecreaseCallCount(); }
|
58
|
+
|
59
|
+
static const NoInterceptor OnClientInitialMetadata;
|
60
|
+
static const NoInterceptor OnServerInitialMetadata;
|
61
|
+
static const NoInterceptor OnServerTrailingMetadata;
|
62
|
+
static const NoInterceptor OnClientToServerMessage;
|
63
|
+
static const NoInterceptor OnServerToClientMessage;
|
64
|
+
static const NoInterceptor OnFinalize;
|
65
|
+
|
66
|
+
private:
|
67
|
+
ChannelIdleFilter* filter_;
|
68
|
+
};
|
55
69
|
|
56
70
|
bool StartTransportOp(grpc_transport_op* op) override;
|
57
71
|
|
@@ -75,12 +89,6 @@ class ChannelIdleFilter : public ChannelFilter {
|
|
75
89
|
private:
|
76
90
|
void StartIdleTimer();
|
77
91
|
|
78
|
-
struct CallCountDecreaser {
|
79
|
-
void operator()(ChannelIdleFilter* filter) const {
|
80
|
-
filter->DecreaseCallCount();
|
81
|
-
}
|
82
|
-
};
|
83
|
-
|
84
92
|
// The channel stack to which we take refs for pending callbacks.
|
85
93
|
grpc_channel_stack* channel_stack_;
|
86
94
|
Duration client_idle_timeout_;
|