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
@@ -280,25 +280,35 @@ absl::optional<bool> ChannelArgs::GetBool(absl::string_view name) const {
|
|
280
280
|
}
|
281
281
|
}
|
282
282
|
|
283
|
-
|
284
|
-
|
285
|
-
return std::to_string(reinterpret_cast<intptr_t>(rep_.c_pointer()));
|
286
|
-
}
|
283
|
+
absl::string_view ChannelArgs::Value::ToString(
|
284
|
+
std::list<std::string>& backing_strings) const {
|
287
285
|
if (rep_.c_vtable() == &string_vtable_) {
|
288
|
-
return
|
289
|
-
|
286
|
+
return static_cast<RefCountedString*>(rep_.c_pointer())->as_string_view();
|
287
|
+
}
|
288
|
+
if (rep_.c_vtable() == &int_vtable_) {
|
289
|
+
backing_strings.emplace_back(
|
290
|
+
std::to_string(reinterpret_cast<intptr_t>(rep_.c_pointer())));
|
291
|
+
return backing_strings.back();
|
290
292
|
}
|
291
|
-
|
293
|
+
backing_strings.emplace_back(absl::StrFormat("%p", rep_.c_pointer()));
|
294
|
+
return backing_strings.back();
|
292
295
|
}
|
293
296
|
|
294
297
|
std::string ChannelArgs::ToString() const {
|
295
|
-
std::vector<
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
298
|
+
std::vector<absl::string_view> strings;
|
299
|
+
std::list<std::string> backing_strings;
|
300
|
+
strings.push_back("{");
|
301
|
+
bool first = true;
|
302
|
+
args_.ForEach([&strings, &first, &backing_strings](
|
303
|
+
const RefCountedStringValue& key, const Value& value) {
|
304
|
+
if (!first) strings.push_back(", ");
|
305
|
+
first = false;
|
306
|
+
strings.push_back(key.as_string_view());
|
307
|
+
strings.push_back("=");
|
308
|
+
strings.push_back(value.ToString(backing_strings));
|
309
|
+
});
|
310
|
+
strings.push_back("}");
|
311
|
+
return absl::StrJoin(strings, "");
|
302
312
|
}
|
303
313
|
|
304
314
|
ChannelArgs ChannelArgs::UnionWith(ChannelArgs other) const {
|
@@ -125,6 +125,16 @@ struct ChannelArgTypeTraits<
|
|
125
125
|
};
|
126
126
|
};
|
127
127
|
|
128
|
+
// Define a check for shared_ptr supported types, which must extend
|
129
|
+
// enable_shared_from_this.
|
130
|
+
template <typename T>
|
131
|
+
struct SupportedSharedPtrType
|
132
|
+
: std::integral_constant<
|
133
|
+
bool, std::is_base_of<std::enable_shared_from_this<T>, T>::value> {};
|
134
|
+
template <>
|
135
|
+
struct SupportedSharedPtrType<grpc_event_engine::experimental::EventEngine>
|
136
|
+
: std::true_type {};
|
137
|
+
|
128
138
|
// Specialization for shared_ptr
|
129
139
|
// Incurs an allocation because shared_ptr.release is not a thing.
|
130
140
|
template <typename T>
|
@@ -173,19 +183,27 @@ struct ChannelArgTypeTraits<T,
|
|
173
183
|
};
|
174
184
|
};
|
175
185
|
|
176
|
-
//
|
186
|
+
// Determine if the pointer for a channel arg name should be const or not
|
187
|
+
template <typename T, typename SfinaeVoid = void>
|
188
|
+
struct ChannelArgPointerShouldBeConst {
|
189
|
+
static constexpr bool kValue = false;
|
190
|
+
};
|
191
|
+
|
177
192
|
template <typename T>
|
178
|
-
struct
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
193
|
+
struct ChannelArgPointerShouldBeConst<
|
194
|
+
T, absl::void_t<decltype(T::ChannelArgUseConstPtr())>> {
|
195
|
+
static constexpr bool kValue = T::ChannelArgUseConstPtr();
|
196
|
+
};
|
197
|
+
|
198
|
+
// GetObject support for shared_ptr and RefCountedPtr
|
184
199
|
template <typename T, typename Ignored = void /* for SFINAE */>
|
185
200
|
struct GetObjectImpl;
|
186
201
|
// std::shared_ptr implementation
|
187
202
|
template <typename T>
|
188
|
-
struct GetObjectImpl<
|
203
|
+
struct GetObjectImpl<
|
204
|
+
T, absl::enable_if_t<!ChannelArgPointerShouldBeConst<T>::kValue &&
|
205
|
+
SupportedSharedPtrType<T>::value,
|
206
|
+
void>> {
|
189
207
|
using Result = T*;
|
190
208
|
using ReffedResult = std::shared_ptr<T>;
|
191
209
|
using StoredType = std::shared_ptr<T>*;
|
@@ -205,11 +223,34 @@ struct GetObjectImpl<T, absl::enable_if_t<WrapInSharedPtr<T>::value, void>> {
|
|
205
223
|
};
|
206
224
|
// RefCountedPtr
|
207
225
|
template <typename T>
|
208
|
-
struct GetObjectImpl<
|
226
|
+
struct GetObjectImpl<
|
227
|
+
T, absl::enable_if_t<!ChannelArgPointerShouldBeConst<T>::kValue &&
|
228
|
+
!SupportedSharedPtrType<T>::value,
|
229
|
+
void>> {
|
209
230
|
using Result = T*;
|
210
231
|
using ReffedResult = RefCountedPtr<T>;
|
211
232
|
using StoredType = Result;
|
212
233
|
static Result Get(StoredType p) { return p; };
|
234
|
+
static ReffedResult GetReffed(StoredType p) {
|
235
|
+
if (p == nullptr) return nullptr;
|
236
|
+
return p->template RefAsSubclass<T>();
|
237
|
+
};
|
238
|
+
static ReffedResult GetReffed(StoredType p, const DebugLocation& location,
|
239
|
+
const char* reason) {
|
240
|
+
if (p == nullptr) return nullptr;
|
241
|
+
return p->template RefAsSubclass<T>(location, reason);
|
242
|
+
};
|
243
|
+
};
|
244
|
+
|
245
|
+
template <typename T>
|
246
|
+
struct GetObjectImpl<
|
247
|
+
T, absl::enable_if_t<ChannelArgPointerShouldBeConst<T>::kValue &&
|
248
|
+
!SupportedSharedPtrType<T>::value,
|
249
|
+
void>> {
|
250
|
+
using Result = const T*;
|
251
|
+
using ReffedResult = RefCountedPtr<const T>;
|
252
|
+
using StoredType = Result;
|
253
|
+
static Result Get(StoredType p) { return p; };
|
213
254
|
static ReffedResult GetReffed(StoredType p) {
|
214
255
|
if (p == nullptr) return nullptr;
|
215
256
|
return p->Ref();
|
@@ -237,6 +278,7 @@ struct ChannelArgNameTraits<grpc_event_engine::experimental::EventEngine> {
|
|
237
278
|
return GRPC_INTERNAL_ARG_EVENT_ENGINE;
|
238
279
|
}
|
239
280
|
};
|
281
|
+
|
240
282
|
class ChannelArgs {
|
241
283
|
public:
|
242
284
|
class Pointer {
|
@@ -303,7 +345,7 @@ class ChannelArgs {
|
|
303
345
|
return &rep_;
|
304
346
|
}
|
305
347
|
|
306
|
-
std::string
|
348
|
+
absl::string_view ToString(std::list<std::string>& backing) const;
|
307
349
|
|
308
350
|
grpc_arg MakeCArg(const char* name) const;
|
309
351
|
|
@@ -376,21 +418,38 @@ class ChannelArgs {
|
|
376
418
|
GRPC_MUST_USE_RESULT auto Set(absl::string_view name,
|
377
419
|
RefCountedPtr<T> value) const
|
378
420
|
-> absl::enable_if_t<
|
379
|
-
|
380
|
-
|
381
|
-
|
421
|
+
!ChannelArgPointerShouldBeConst<T>::kValue &&
|
422
|
+
std::is_same<const grpc_arg_pointer_vtable*,
|
423
|
+
decltype(ChannelArgTypeTraits<
|
424
|
+
absl::remove_cvref_t<T>>::VTable())>::value,
|
382
425
|
ChannelArgs> {
|
383
426
|
return Set(
|
384
427
|
name, Pointer(value.release(),
|
385
428
|
ChannelArgTypeTraits<absl::remove_cvref_t<T>>::VTable()));
|
386
429
|
}
|
387
430
|
template <typename T>
|
431
|
+
GRPC_MUST_USE_RESULT auto Set(absl::string_view name,
|
432
|
+
RefCountedPtr<const T> value) const
|
433
|
+
-> absl::enable_if_t<
|
434
|
+
ChannelArgPointerShouldBeConst<T>::kValue &&
|
435
|
+
std::is_same<const grpc_arg_pointer_vtable*,
|
436
|
+
decltype(ChannelArgTypeTraits<
|
437
|
+
absl::remove_cvref_t<T>>::VTable())>::value,
|
438
|
+
ChannelArgs> {
|
439
|
+
return Set(
|
440
|
+
name, Pointer(const_cast<T*>(value.release()),
|
441
|
+
ChannelArgTypeTraits<absl::remove_cvref_t<T>>::VTable()));
|
442
|
+
}
|
443
|
+
template <typename T>
|
388
444
|
GRPC_MUST_USE_RESULT absl::enable_if_t<
|
389
445
|
std::is_same<
|
390
446
|
const grpc_arg_pointer_vtable*,
|
391
447
|
decltype(ChannelArgTypeTraits<std::shared_ptr<T>>::VTable())>::value,
|
392
448
|
ChannelArgs>
|
393
449
|
Set(absl::string_view name, std::shared_ptr<T> value) const {
|
450
|
+
static_assert(SupportedSharedPtrType<T>::value,
|
451
|
+
"Type T must extend std::enable_shared_from_this to be added "
|
452
|
+
"into ChannelArgs as a shared_ptr<T>");
|
394
453
|
auto* store_value = new std::shared_ptr<T>(value);
|
395
454
|
return Set(
|
396
455
|
name,
|
@@ -418,6 +477,8 @@ class ChannelArgs {
|
|
418
477
|
absl::optional<int> GetInt(absl::string_view name) const;
|
419
478
|
absl::optional<absl::string_view> GetString(absl::string_view name) const;
|
420
479
|
absl::optional<std::string> GetOwnedString(absl::string_view name) const;
|
480
|
+
// WARNING: this is broken if `name` represents something that was stored as a
|
481
|
+
// RefCounted<const T> - we will discard the const-ness.
|
421
482
|
void* GetVoidPointer(absl::string_view name) const;
|
422
483
|
template <typename T>
|
423
484
|
typename GetObjectImpl<T>::StoredType GetPointer(
|
@@ -28,6 +28,7 @@
|
|
28
28
|
#include <grpc/support/log.h>
|
29
29
|
|
30
30
|
#include "src/core/lib/channel/channel_args.h"
|
31
|
+
#include "src/core/lib/channel/channel_fwd.h"
|
31
32
|
#include "src/core/lib/channel/channel_stack_trace.h"
|
32
33
|
#include "src/core/lib/gpr/alloc.h"
|
33
34
|
#include "src/core/lib/surface/channel_init.h"
|
@@ -320,3 +321,29 @@ grpc_channel_stack::MakeServerCallPromise(grpc_core::CallArgs call_args) {
|
|
320
321
|
return ServerNext(grpc_channel_stack_element(this, this->count - 1))(
|
321
322
|
std::move(call_args));
|
322
323
|
}
|
324
|
+
|
325
|
+
void grpc_channel_stack::InitClientCallSpine(
|
326
|
+
grpc_core::CallSpineInterface* call) {
|
327
|
+
for (size_t i = 0; i < count; i++) {
|
328
|
+
auto* elem = grpc_channel_stack_element(this, i);
|
329
|
+
if (elem->filter->init_call == nullptr) {
|
330
|
+
grpc_core::Crash(
|
331
|
+
absl::StrCat("Filter '", elem->filter->name,
|
332
|
+
"' does not support the call-v3 interface"));
|
333
|
+
}
|
334
|
+
elem->filter->init_call(elem, call);
|
335
|
+
}
|
336
|
+
}
|
337
|
+
|
338
|
+
void grpc_channel_stack::InitServerCallSpine(
|
339
|
+
grpc_core::CallSpineInterface* call) {
|
340
|
+
for (size_t i = 0; i < count; i++) {
|
341
|
+
auto* elem = grpc_channel_stack_element(this, count - 1 - i);
|
342
|
+
if (elem->filter->init_call == nullptr) {
|
343
|
+
grpc_core::Crash(
|
344
|
+
absl::StrCat("Filter '", elem->filter->name,
|
345
|
+
"' does not support the call-v3 interface"));
|
346
|
+
}
|
347
|
+
elem->filter->init_call(elem, call);
|
348
|
+
}
|
349
|
+
}
|
@@ -72,6 +72,7 @@
|
|
72
72
|
#include "src/core/lib/iomgr/polling_entity.h"
|
73
73
|
#include "src/core/lib/promise/arena_promise.h"
|
74
74
|
#include "src/core/lib/resource_quota/arena.h"
|
75
|
+
#include "src/core/lib/transport/call_final_info.h"
|
75
76
|
#include "src/core/lib/transport/transport.h"
|
76
77
|
|
77
78
|
struct grpc_channel_element_args {
|
@@ -90,16 +91,6 @@ struct grpc_call_element_args {
|
|
90
91
|
grpc_core::Arena* arena;
|
91
92
|
grpc_core::CallCombiner* call_combiner;
|
92
93
|
};
|
93
|
-
struct grpc_call_stats {
|
94
|
-
grpc_transport_stream_stats transport_stream_stats;
|
95
|
-
gpr_timespec latency; // From call creating to enqueing of received status
|
96
|
-
};
|
97
|
-
/// Information about the call upon completion.
|
98
|
-
struct grpc_call_final_info {
|
99
|
-
grpc_call_stats stats;
|
100
|
-
grpc_status_code final_status = GRPC_STATUS_OK;
|
101
|
-
const char* error_string = nullptr;
|
102
|
-
};
|
103
94
|
|
104
95
|
// Channel filters specify:
|
105
96
|
// 1. the amount of memory needed in the channel & call (via the sizeof_XXX
|
@@ -128,6 +119,12 @@ struct grpc_channel_filter {
|
|
128
119
|
grpc_core::ArenaPromise<grpc_core::ServerMetadataHandle> (*make_call_promise)(
|
129
120
|
grpc_channel_element* elem, grpc_core::CallArgs call_args,
|
130
121
|
grpc_core::NextPromiseFactory next_promise_factory);
|
122
|
+
// Register interceptors into a call.
|
123
|
+
// If this is non-null it may be used in preference to make_call_promise.
|
124
|
+
// There is an on-going migration to move all filters to providing this, and
|
125
|
+
// then to drop start_transport_stream_op_batch.
|
126
|
+
void (*init_call)(grpc_channel_element* elem,
|
127
|
+
grpc_core::CallSpineInterface* call_spine);
|
131
128
|
// Called to handle channel level operations - e.g. new calls, or transport
|
132
129
|
// closure.
|
133
130
|
// See grpc_channel_next_op on how to call the next element in the stack
|
@@ -238,6 +235,9 @@ struct grpc_channel_stack {
|
|
238
235
|
MakeClientCallPromise(grpc_core::CallArgs call_args);
|
239
236
|
grpc_core::ArenaPromise<grpc_core::ServerMetadataHandle>
|
240
237
|
MakeServerCallPromise(grpc_core::CallArgs call_args);
|
238
|
+
|
239
|
+
void InitClientCallSpine(grpc_core::CallSpineInterface* call);
|
240
|
+
void InitServerCallSpine(grpc_core::CallSpineInterface* call);
|
241
241
|
};
|
242
242
|
|
243
243
|
// A call stack tracks a set of related filters for one call, and guarantees
|
@@ -411,6 +411,8 @@ auto ConnectedChannelStream::RecvMessages(
|
|
411
411
|
}
|
412
412
|
if (cancel_on_error && !status.ok()) {
|
413
413
|
incoming_messages.CloseWithError();
|
414
|
+
} else {
|
415
|
+
incoming_messages.Close();
|
414
416
|
}
|
415
417
|
return Immediate(LoopCtl<absl::Status>(status.status()));
|
416
418
|
};
|
@@ -857,6 +859,7 @@ grpc_channel_filter MakeConnectedFilter() {
|
|
857
859
|
return {
|
858
860
|
connected_channel_start_transport_stream_op_batch,
|
859
861
|
make_call_promise != nullptr ? make_call_wrapper : nullptr,
|
862
|
+
/* init_call: */ nullptr,
|
860
863
|
connected_channel_start_transport_op,
|
861
864
|
sizeof(call_data),
|
862
865
|
connected_channel_init_call_elem,
|
@@ -870,10 +873,12 @@ grpc_channel_filter MakeConnectedFilter() {
|
|
870
873
|
// do this, and I'm not sure what that is yet. This is only "safe"
|
871
874
|
// because call stacks place no additional data after the last call
|
872
875
|
// element, and the last call element MUST be the connected channel.
|
873
|
-
|
874
|
-
static_cast<channel_data*>(elem->channel_data)
|
875
|
-
|
876
|
-
|
876
|
+
auto* transport =
|
877
|
+
static_cast<channel_data*>(elem->channel_data)->transport;
|
878
|
+
if (transport->filter_stack_transport() != nullptr) {
|
879
|
+
channel_stack->call_stack_size +=
|
880
|
+
transport->filter_stack_transport()->SizeOfStream();
|
881
|
+
}
|
877
882
|
},
|
878
883
|
connected_channel_destroy_channel_elem,
|
879
884
|
connected_channel_get_channel_info,
|
@@ -881,13 +886,27 @@ grpc_channel_filter MakeConnectedFilter() {
|
|
881
886
|
};
|
882
887
|
}
|
883
888
|
|
884
|
-
ArenaPromise<ServerMetadataHandle>
|
889
|
+
ArenaPromise<ServerMetadataHandle> MakeClientTransportCallPromise(
|
885
890
|
Transport* transport, CallArgs call_args, NextPromiseFactory) {
|
886
|
-
|
891
|
+
auto spine = GetContext<CallContext>()->MakeCallSpine(std::move(call_args));
|
892
|
+
transport->client_transport()->StartCall(CallHandler{spine});
|
893
|
+
return Map(spine->server_trailing_metadata().receiver.Next(),
|
894
|
+
[](NextResult<ServerMetadataHandle> r) {
|
895
|
+
if (r.has_value()) {
|
896
|
+
auto md = std::move(r.value());
|
897
|
+
md->Set(GrpcStatusFromWire(), true);
|
898
|
+
return md;
|
899
|
+
}
|
900
|
+
auto m = GetContext<Arena>()->MakePooled<ServerMetadata>(
|
901
|
+
GetContext<Arena>());
|
902
|
+
m->Set(GrpcStatusMetadata(), GRPC_STATUS_CANCELLED);
|
903
|
+
m->Set(GrpcCallWasCancelled(), true);
|
904
|
+
return m;
|
905
|
+
});
|
887
906
|
}
|
888
907
|
|
889
|
-
const grpc_channel_filter
|
890
|
-
MakeConnectedFilter<
|
908
|
+
const grpc_channel_filter kClientPromiseBasedTransportFilter =
|
909
|
+
MakeConnectedFilter<MakeClientTransportCallPromise>();
|
891
910
|
|
892
911
|
#ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_CLIENT_CALL
|
893
912
|
const grpc_channel_filter kClientEmulatedFilter =
|
@@ -905,11 +924,37 @@ const grpc_channel_filter kServerEmulatedFilter =
|
|
905
924
|
MakeConnectedFilter<nullptr>();
|
906
925
|
#endif
|
907
926
|
|
908
|
-
|
927
|
+
// noop filter for the v3 stack: placeholder for now because other code requires
|
928
|
+
// we have a terminator.
|
929
|
+
// TODO(ctiller): delete when v3 transition is complete.
|
930
|
+
const grpc_channel_filter kServerPromiseBasedTransportFilter = {
|
931
|
+
nullptr,
|
932
|
+
[](grpc_channel_element*, CallArgs, NextPromiseFactory)
|
933
|
+
-> ArenaPromise<ServerMetadataHandle> { Crash("not implemented"); },
|
934
|
+
/* init_call: */ [](grpc_channel_element*, CallSpineInterface*) {},
|
935
|
+
connected_channel_start_transport_op,
|
936
|
+
0,
|
937
|
+
nullptr,
|
938
|
+
set_pollset_or_pollset_set,
|
939
|
+
nullptr,
|
940
|
+
sizeof(channel_data),
|
941
|
+
connected_channel_init_channel_elem,
|
942
|
+
+[](grpc_channel_stack*, grpc_channel_element*) {},
|
943
|
+
connected_channel_destroy_channel_elem,
|
944
|
+
connected_channel_get_channel_info,
|
945
|
+
"connected",
|
946
|
+
};
|
947
|
+
|
948
|
+
bool TransportSupportsClientPromiseBasedCalls(const ChannelArgs& args) {
|
909
949
|
auto* transport = args.GetObject<Transport>();
|
910
950
|
return transport->client_transport() != nullptr;
|
911
951
|
}
|
912
952
|
|
953
|
+
bool TransportSupportsServerPromiseBasedCalls(const ChannelArgs& args) {
|
954
|
+
auto* transport = args.GetObject<Transport>();
|
955
|
+
return transport->server_transport() != nullptr;
|
956
|
+
}
|
957
|
+
|
913
958
|
} // namespace
|
914
959
|
|
915
960
|
void RegisterConnectedChannel(CoreConfiguration::Builder* builder) {
|
@@ -922,32 +967,33 @@ void RegisterConnectedChannel(CoreConfiguration::Builder* builder) {
|
|
922
967
|
// Option 1, and our ideal: the transport supports promise based calls,
|
923
968
|
// and so we simply use the transport directly.
|
924
969
|
builder->channel_init()
|
925
|
-
->RegisterFilter(GRPC_CLIENT_SUBCHANNEL,
|
970
|
+
->RegisterFilter(GRPC_CLIENT_SUBCHANNEL,
|
971
|
+
&kClientPromiseBasedTransportFilter)
|
926
972
|
.Terminal()
|
927
|
-
.If(
|
973
|
+
.If(TransportSupportsClientPromiseBasedCalls);
|
928
974
|
builder->channel_init()
|
929
975
|
->RegisterFilter(GRPC_CLIENT_DIRECT_CHANNEL,
|
930
|
-
&
|
976
|
+
&kClientPromiseBasedTransportFilter)
|
931
977
|
.Terminal()
|
932
|
-
.If(
|
978
|
+
.If(TransportSupportsClientPromiseBasedCalls);
|
933
979
|
builder->channel_init()
|
934
|
-
->RegisterFilter(GRPC_SERVER_CHANNEL, &
|
980
|
+
->RegisterFilter(GRPC_SERVER_CHANNEL, &kServerPromiseBasedTransportFilter)
|
935
981
|
.Terminal()
|
936
|
-
.If(
|
982
|
+
.If(TransportSupportsServerPromiseBasedCalls);
|
937
983
|
|
938
984
|
// Option 2: the transport does not support promise based calls.
|
939
985
|
builder->channel_init()
|
940
986
|
->RegisterFilter(GRPC_CLIENT_SUBCHANNEL, &kClientEmulatedFilter)
|
941
987
|
.Terminal()
|
942
|
-
.IfNot(
|
988
|
+
.IfNot(TransportSupportsClientPromiseBasedCalls);
|
943
989
|
builder->channel_init()
|
944
990
|
->RegisterFilter(GRPC_CLIENT_DIRECT_CHANNEL, &kClientEmulatedFilter)
|
945
991
|
.Terminal()
|
946
|
-
.IfNot(
|
992
|
+
.IfNot(TransportSupportsClientPromiseBasedCalls);
|
947
993
|
builder->channel_init()
|
948
994
|
->RegisterFilter(GRPC_SERVER_CHANNEL, &kServerEmulatedFilter)
|
949
995
|
.Terminal()
|
950
|
-
.IfNot(
|
996
|
+
.IfNot(TransportSupportsServerPromiseBasedCalls);
|
951
997
|
}
|
952
998
|
|
953
999
|
} // namespace grpc_core
|