grpc 1.60.2 → 1.61.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -52,7 +52,7 @@
|
|
52
52
|
#include "google/protobuf/wrappers.upb.h"
|
53
53
|
#include "re2/re2.h"
|
54
54
|
#include "upb/base/string_view.h"
|
55
|
-
#include "upb/
|
55
|
+
#include "upb/message/map.h"
|
56
56
|
#include "upb/text/encode.h"
|
57
57
|
|
58
58
|
#include <grpc/status.h>
|
@@ -288,33 +288,44 @@ std::string XdsRouteConfigResource::Route::ToString() const {
|
|
288
288
|
return absl::StrJoin(contents, "\n");
|
289
289
|
}
|
290
290
|
|
291
|
+
//
|
292
|
+
// XdsRouteConfigResource::Route
|
293
|
+
//
|
294
|
+
|
295
|
+
std::string XdsRouteConfigResource::VirtualHost::ToString() const {
|
296
|
+
std::vector<std::string> parts;
|
297
|
+
parts.push_back(
|
298
|
+
absl::StrCat("vhost={\n"
|
299
|
+
" domains=[",
|
300
|
+
absl::StrJoin(domains, ", "),
|
301
|
+
"]\n"
|
302
|
+
" routes=[\n"));
|
303
|
+
for (const XdsRouteConfigResource::Route& route : routes) {
|
304
|
+
parts.push_back(" {\n");
|
305
|
+
parts.push_back(route.ToString());
|
306
|
+
parts.push_back("\n }\n");
|
307
|
+
}
|
308
|
+
parts.push_back(" ]\n");
|
309
|
+
parts.push_back(" typed_per_filter_config={\n");
|
310
|
+
for (const auto& p : typed_per_filter_config) {
|
311
|
+
const std::string& name = p.first;
|
312
|
+
const auto& config = p.second;
|
313
|
+
parts.push_back(absl::StrCat(" ", name, "=", config.ToString(), "\n"));
|
314
|
+
}
|
315
|
+
parts.push_back(" }\n");
|
316
|
+
parts.push_back("}\n");
|
317
|
+
return absl::StrJoin(parts, "");
|
318
|
+
}
|
319
|
+
|
291
320
|
//
|
292
321
|
// XdsRouteConfigResource
|
293
322
|
//
|
294
323
|
|
295
324
|
std::string XdsRouteConfigResource::ToString() const {
|
296
325
|
std::vector<std::string> parts;
|
326
|
+
parts.reserve(virtual_hosts.size());
|
297
327
|
for (const VirtualHost& vhost : virtual_hosts) {
|
298
|
-
parts.push_back(
|
299
|
-
absl::StrCat("vhost={\n"
|
300
|
-
" domains=[",
|
301
|
-
absl::StrJoin(vhost.domains, ", "),
|
302
|
-
"]\n"
|
303
|
-
" routes=[\n"));
|
304
|
-
for (const XdsRouteConfigResource::Route& route : vhost.routes) {
|
305
|
-
parts.push_back(" {\n");
|
306
|
-
parts.push_back(route.ToString());
|
307
|
-
parts.push_back("\n }\n");
|
308
|
-
}
|
309
|
-
parts.push_back(" ]\n");
|
310
|
-
parts.push_back(" typed_per_filter_config={\n");
|
311
|
-
for (const auto& p : vhost.typed_per_filter_config) {
|
312
|
-
const std::string& name = p.first;
|
313
|
-
const auto& config = p.second;
|
314
|
-
parts.push_back(absl::StrCat(" ", name, "=", config.ToString(), "\n"));
|
315
|
-
}
|
316
|
-
parts.push_back(" }\n");
|
317
|
-
parts.push_back("]\n");
|
328
|
+
parts.push_back(vhost.ToString());
|
318
329
|
}
|
319
330
|
parts.push_back("cluster_specifier_plugins={\n");
|
320
331
|
for (const auto& it : cluster_specifier_plugin_map) {
|
@@ -1137,7 +1148,8 @@ void MaybeLogRouteConfiguration(
|
|
1137
1148
|
const upb_MessageDef* msg_type =
|
1138
1149
|
envoy_config_route_v3_RouteConfiguration_getmsgdef(context.symtab);
|
1139
1150
|
char buf[10240];
|
1140
|
-
upb_TextEncode(route_config, msg_type,
|
1151
|
+
upb_TextEncode(reinterpret_cast<const upb_Message*>(route_config), msg_type,
|
1152
|
+
nullptr, 0, buf, sizeof(buf));
|
1141
1153
|
gpr_log(GPR_DEBUG, "[xds_client %p] RouteConfiguration: %s", context.client,
|
1142
1154
|
buf);
|
1143
1155
|
}
|
@@ -209,6 +209,7 @@ struct XdsRouteConfigResource : public XdsResourceType::ResourceData {
|
|
209
209
|
return domains == other.domains && routes == other.routes &&
|
210
210
|
typed_per_filter_config == other.typed_per_filter_config;
|
211
211
|
}
|
212
|
+
std::string ToString() const;
|
212
213
|
};
|
213
214
|
|
214
215
|
std::vector<VirtualHost> virtual_hosts;
|
@@ -52,6 +52,7 @@
|
|
52
52
|
#include "src/core/ext/xds/xds_bootstrap_grpc.h"
|
53
53
|
#include "src/core/ext/xds/xds_certificate_provider.h"
|
54
54
|
#include "src/core/ext/xds/xds_channel_stack_modifier.h"
|
55
|
+
#include "src/core/ext/xds/xds_client.h"
|
55
56
|
#include "src/core/ext/xds/xds_client_grpc.h"
|
56
57
|
#include "src/core/ext/xds/xds_common_types.h"
|
57
58
|
#include "src/core/ext/xds/xds_http_filters.h"
|
@@ -91,6 +92,8 @@
|
|
91
92
|
namespace grpc_core {
|
92
93
|
namespace {
|
93
94
|
|
95
|
+
using ReadDelayHandle = XdsClient::ReadDelayHandle;
|
96
|
+
|
94
97
|
TraceFlag grpc_xds_server_config_fetcher_trace(false,
|
95
98
|
"xds_server_config_fetcher");
|
96
99
|
|
@@ -151,11 +154,14 @@ class XdsServerConfigFetcher::ListenerWatcher
|
|
151
154
|
}
|
152
155
|
|
153
156
|
void OnResourceChanged(
|
154
|
-
std::shared_ptr<const XdsListenerResource> listener
|
157
|
+
std::shared_ptr<const XdsListenerResource> listener,
|
158
|
+
RefCountedPtr<ReadDelayHandle> read_delay_handle) override;
|
155
159
|
|
156
|
-
void OnError(absl::Status status
|
160
|
+
void OnError(absl::Status status,
|
161
|
+
RefCountedPtr<ReadDelayHandle> read_delay_handle) override;
|
157
162
|
|
158
|
-
void OnResourceDoesNotExist(
|
163
|
+
void OnResourceDoesNotExist(
|
164
|
+
RefCountedPtr<ReadDelayHandle> read_delay_handle) override;
|
159
165
|
|
160
166
|
const std::string& listening_address() const { return listening_address_; }
|
161
167
|
|
@@ -225,15 +231,6 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager
|
|
225
231
|
}
|
226
232
|
|
227
233
|
private:
|
228
|
-
struct CertificateProviders {
|
229
|
-
// We need to save our own refs to the root and instance certificate
|
230
|
-
// providers since the xds certificate provider just stores a ref to their
|
231
|
-
// distributors.
|
232
|
-
RefCountedPtr<grpc_tls_certificate_provider> root;
|
233
|
-
RefCountedPtr<grpc_tls_certificate_provider> instance;
|
234
|
-
RefCountedPtr<XdsCertificateProvider> xds;
|
235
|
-
};
|
236
|
-
|
237
234
|
class RouteConfigWatcher;
|
238
235
|
struct RdsUpdateState {
|
239
236
|
RouteConfigWatcher* watcher;
|
@@ -271,7 +268,8 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager
|
|
271
268
|
size_t rds_resources_yet_to_fetch_ ABSL_GUARDED_BY(mu_) = 0;
|
272
269
|
std::map<std::string /* resource_name */, RdsUpdateState> rds_map_
|
273
270
|
ABSL_GUARDED_BY(mu_);
|
274
|
-
std::map<const XdsListenerResource::FilterChainData*,
|
271
|
+
std::map<const XdsListenerResource::FilterChainData*,
|
272
|
+
RefCountedPtr<XdsCertificateProvider>>
|
275
273
|
certificate_providers_map_ ABSL_GUARDED_BY(mu_);
|
276
274
|
};
|
277
275
|
|
@@ -292,16 +290,20 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
292
290
|
filter_chain_match_manager_(std::move(filter_chain_match_manager)) {}
|
293
291
|
|
294
292
|
void OnResourceChanged(
|
295
|
-
std::shared_ptr<const XdsRouteConfigResource> route_config
|
293
|
+
std::shared_ptr<const XdsRouteConfigResource> route_config,
|
294
|
+
RefCountedPtr<ReadDelayHandle> /* read_delay_handle */) override {
|
296
295
|
filter_chain_match_manager_->OnRouteConfigChanged(resource_name_,
|
297
296
|
std::move(route_config));
|
298
297
|
}
|
299
298
|
|
300
|
-
void OnError(
|
299
|
+
void OnError(
|
300
|
+
absl::Status status,
|
301
|
+
RefCountedPtr<ReadDelayHandle> /* read_delay_handle */) override {
|
301
302
|
filter_chain_match_manager_->OnError(resource_name_, status);
|
302
303
|
}
|
303
304
|
|
304
|
-
void OnResourceDoesNotExist(
|
305
|
+
void OnResourceDoesNotExist(
|
306
|
+
RefCountedPtr<ReadDelayHandle> /* read_delay_handle */) override {
|
305
307
|
filter_chain_match_manager_->OnResourceDoesNotExist(resource_name_);
|
306
308
|
}
|
307
309
|
|
@@ -488,13 +490,21 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
488
490
|
: parent_(std::move(parent)) {}
|
489
491
|
|
490
492
|
void OnResourceChanged(
|
491
|
-
std::shared_ptr<const XdsRouteConfigResource> route_config
|
493
|
+
std::shared_ptr<const XdsRouteConfigResource> route_config,
|
494
|
+
RefCountedPtr<ReadDelayHandle> /* read_delay_handle */) override {
|
492
495
|
parent_->OnRouteConfigChanged(std::move(route_config));
|
493
496
|
}
|
494
497
|
|
495
|
-
void OnError(
|
498
|
+
void OnError(
|
499
|
+
absl::Status status,
|
500
|
+
RefCountedPtr<ReadDelayHandle> /* read_delay_handle */) override {
|
501
|
+
parent_->OnError(status);
|
502
|
+
}
|
496
503
|
|
497
|
-
void OnResourceDoesNotExist(
|
504
|
+
void OnResourceDoesNotExist(
|
505
|
+
RefCountedPtr<ReadDelayHandle> /* read_delay_handle */) override {
|
506
|
+
parent_->OnResourceDoesNotExist();
|
507
|
+
}
|
498
508
|
|
499
509
|
private:
|
500
510
|
WeakRefCountedPtr<DynamicXdsServerConfigSelectorProvider> parent_;
|
@@ -527,7 +537,7 @@ void XdsServerConfigFetcher::StartWatch(
|
|
527
537
|
std::unique_ptr<grpc_server_config_fetcher::WatcherInterface> watcher) {
|
528
538
|
grpc_server_config_fetcher::WatcherInterface* watcher_ptr = watcher.get();
|
529
539
|
auto listener_watcher = MakeRefCounted<ListenerWatcher>(
|
530
|
-
xds_client_
|
540
|
+
xds_client_.Ref(DEBUG_LOCATION, "ListenerWatcher"), std::move(watcher),
|
531
541
|
serving_status_notifier_, listening_address);
|
532
542
|
auto* listener_watcher_ptr = listener_watcher.get();
|
533
543
|
XdsListenerResourceType::StartWatch(
|
@@ -574,7 +584,8 @@ XdsServerConfigFetcher::ListenerWatcher::ListenerWatcher(
|
|
574
584
|
listening_address_(std::move(listening_address)) {}
|
575
585
|
|
576
586
|
void XdsServerConfigFetcher::ListenerWatcher::OnResourceChanged(
|
577
|
-
std::shared_ptr<const XdsListenerResource> listener
|
587
|
+
std::shared_ptr<const XdsListenerResource> listener,
|
588
|
+
RefCountedPtr<ReadDelayHandle> /* read_delay_handle */) {
|
578
589
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_server_config_fetcher_trace)) {
|
579
590
|
gpr_log(GPR_INFO,
|
580
591
|
"[ListenerWatcher %p] Received LDS update from xds client %p: %s",
|
@@ -595,7 +606,7 @@ void XdsServerConfigFetcher::ListenerWatcher::OnResourceChanged(
|
|
595
606
|
return;
|
596
607
|
}
|
597
608
|
auto new_filter_chain_match_manager = MakeRefCounted<FilterChainMatchManager>(
|
598
|
-
xds_client_
|
609
|
+
xds_client_.Ref(DEBUG_LOCATION, "FilterChainMatchManager"),
|
599
610
|
tcp_listener->filter_chain_map, tcp_listener->default_filter_chain);
|
600
611
|
MutexLock lock(&mu_);
|
601
612
|
if (filter_chain_match_manager_ == nullptr ||
|
@@ -605,11 +616,14 @@ void XdsServerConfigFetcher::ListenerWatcher::OnResourceChanged(
|
|
605
616
|
filter_chain_match_manager_->default_filter_chain())) {
|
606
617
|
pending_filter_chain_match_manager_ =
|
607
618
|
std::move(new_filter_chain_match_manager);
|
608
|
-
pending_filter_chain_match_manager_->StartRdsWatch(
|
619
|
+
pending_filter_chain_match_manager_->StartRdsWatch(
|
620
|
+
RefAsSubclass<ListenerWatcher>());
|
609
621
|
}
|
610
622
|
}
|
611
623
|
|
612
|
-
void XdsServerConfigFetcher::ListenerWatcher::OnError(
|
624
|
+
void XdsServerConfigFetcher::ListenerWatcher::OnError(
|
625
|
+
absl::Status status,
|
626
|
+
RefCountedPtr<ReadDelayHandle> /* read_delay_handle */) {
|
613
627
|
MutexLock lock(&mu_);
|
614
628
|
if (filter_chain_match_manager_ != nullptr ||
|
615
629
|
pending_filter_chain_match_manager_ != nullptr) {
|
@@ -652,7 +666,8 @@ void XdsServerConfigFetcher::ListenerWatcher::OnFatalError(
|
|
652
666
|
}
|
653
667
|
}
|
654
668
|
|
655
|
-
void XdsServerConfigFetcher::ListenerWatcher::OnResourceDoesNotExist(
|
669
|
+
void XdsServerConfigFetcher::ListenerWatcher::OnResourceDoesNotExist(
|
670
|
+
RefCountedPtr<ReadDelayHandle> /* read_delay_handle */) {
|
656
671
|
MutexLock lock(&mu_);
|
657
672
|
OnFatalError(absl::NotFoundError("Requested listener does not exist"));
|
658
673
|
}
|
@@ -743,8 +758,8 @@ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
743
758
|
MutexLock lock(&mu_);
|
744
759
|
for (const auto& resource_name : resource_names) {
|
745
760
|
++rds_resources_yet_to_fetch_;
|
746
|
-
auto route_config_watcher =
|
747
|
-
|
761
|
+
auto route_config_watcher = MakeRefCounted<RouteConfigWatcher>(
|
762
|
+
resource_name, WeakRefAsSubclass<FilterChainMatchManager>());
|
748
763
|
rds_map_.emplace(resource_name, RdsUpdateState{route_config_watcher.get(),
|
749
764
|
absl::nullopt});
|
750
765
|
watchers_to_start.push_back(
|
@@ -786,10 +801,7 @@ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
786
801
|
const XdsListenerResource::FilterChainData* filter_chain) {
|
787
802
|
MutexLock lock(&mu_);
|
788
803
|
auto it = certificate_providers_map_.find(filter_chain);
|
789
|
-
if (it != certificate_providers_map_.end())
|
790
|
-
return it->second.xds;
|
791
|
-
}
|
792
|
-
CertificateProviders certificate_providers;
|
804
|
+
if (it != certificate_providers_map_.end()) return it->second;
|
793
805
|
// Configure root cert.
|
794
806
|
absl::string_view root_provider_instance_name =
|
795
807
|
filter_chain->downstream_tls_context.common_tls_context
|
@@ -799,11 +811,12 @@ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
799
811
|
filter_chain->downstream_tls_context.common_tls_context
|
800
812
|
.certificate_validation_context.ca_certificate_provider_instance
|
801
813
|
.certificate_name;
|
814
|
+
RefCountedPtr<grpc_tls_certificate_provider> root_cert_provider;
|
802
815
|
if (!root_provider_instance_name.empty()) {
|
803
|
-
|
816
|
+
root_cert_provider =
|
804
817
|
xds_client_->certificate_provider_store()
|
805
818
|
.CreateOrGetCertificateProvider(root_provider_instance_name);
|
806
|
-
if (
|
819
|
+
if (root_cert_provider == nullptr) {
|
807
820
|
return absl::NotFoundError(
|
808
821
|
absl::StrCat("Certificate provider instance name: \"",
|
809
822
|
root_provider_instance_name, "\" not recognized."));
|
@@ -816,33 +829,23 @@ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
816
829
|
absl::string_view identity_provider_cert_name =
|
817
830
|
filter_chain->downstream_tls_context.common_tls_context
|
818
831
|
.tls_certificate_provider_instance.certificate_name;
|
832
|
+
RefCountedPtr<grpc_tls_certificate_provider> identity_cert_provider;
|
819
833
|
if (!identity_provider_instance_name.empty()) {
|
820
|
-
|
834
|
+
identity_cert_provider =
|
821
835
|
xds_client_->certificate_provider_store()
|
822
836
|
.CreateOrGetCertificateProvider(identity_provider_instance_name);
|
823
|
-
if (
|
837
|
+
if (identity_cert_provider == nullptr) {
|
824
838
|
return absl::NotFoundError(
|
825
839
|
absl::StrCat("Certificate provider instance name: \"",
|
826
840
|
identity_provider_instance_name, "\" not recognized."));
|
827
841
|
}
|
828
842
|
}
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
certificate_providers.xds->UpdateIdentityCertNameAndDistributor(
|
836
|
-
"", identity_provider_cert_name,
|
837
|
-
certificate_providers.instance == nullptr
|
838
|
-
? nullptr
|
839
|
-
: certificate_providers.instance->distributor());
|
840
|
-
certificate_providers.xds->UpdateRequireClientCertificate(
|
841
|
-
"", filter_chain->downstream_tls_context.require_client_certificate);
|
842
|
-
auto xds_certificate_provider = certificate_providers.xds;
|
843
|
-
certificate_providers_map_.emplace(filter_chain,
|
844
|
-
std::move(certificate_providers));
|
845
|
-
return xds_certificate_provider;
|
843
|
+
auto xds_cert_provider = MakeRefCounted<XdsCertificateProvider>(
|
844
|
+
std::move(root_cert_provider), root_provider_cert_name,
|
845
|
+
std::move(identity_cert_provider), identity_provider_cert_name,
|
846
|
+
filter_chain->downstream_tls_context.require_client_certificate);
|
847
|
+
certificate_providers_map_.emplace(filter_chain, xds_cert_provider);
|
848
|
+
return xds_cert_provider;
|
846
849
|
}
|
847
850
|
|
848
851
|
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
@@ -1122,8 +1125,8 @@ absl::StatusOr<ChannelArgs> XdsServerConfigFetcher::ListenerWatcher::
|
|
1122
1125
|
}
|
1123
1126
|
server_config_selector_provider =
|
1124
1127
|
MakeRefCounted<DynamicXdsServerConfigSelectorProvider>(
|
1125
|
-
xds_client_
|
1126
|
-
|
1128
|
+
xds_client_.Ref(DEBUG_LOCATION,
|
1129
|
+
"DynamicXdsServerConfigSelectorProvider"),
|
1127
1130
|
rds_name, std::move(initial_resource),
|
1128
1131
|
filter_chain->http_connection_manager.http_filters);
|
1129
1132
|
},
|
@@ -1131,8 +1134,8 @@ absl::StatusOr<ChannelArgs> XdsServerConfigFetcher::ListenerWatcher::
|
|
1131
1134
|
[&](const std::shared_ptr<const XdsRouteConfigResource>& route_config) {
|
1132
1135
|
server_config_selector_provider =
|
1133
1136
|
MakeRefCounted<StaticXdsServerConfigSelectorProvider>(
|
1134
|
-
xds_client_
|
1135
|
-
|
1137
|
+
xds_client_.Ref(DEBUG_LOCATION,
|
1138
|
+
"StaticXdsServerConfigSelectorProvider"),
|
1136
1139
|
route_config,
|
1137
1140
|
filter_chain->http_connection_manager.http_filters);
|
1138
1141
|
});
|
@@ -1270,7 +1273,8 @@ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
1270
1273
|
// RouteConfigWatcher is being created here instead of in Watch() to avoid
|
1271
1274
|
// deadlocks from invoking XdsRouteConfigResourceType::StartWatch whilst in a
|
1272
1275
|
// critical region.
|
1273
|
-
auto route_config_watcher = MakeRefCounted<RouteConfigWatcher>(
|
1276
|
+
auto route_config_watcher = MakeRefCounted<RouteConfigWatcher>(
|
1277
|
+
WeakRefAsSubclass<DynamicXdsServerConfigSelectorProvider>());
|
1274
1278
|
route_config_watcher_ = route_config_watcher.get();
|
1275
1279
|
XdsRouteConfigResourceType::StartWatch(xds_client_.get(), resource_name_,
|
1276
1280
|
std::move(route_config_watcher));
|
@@ -58,6 +58,9 @@ class XdsTransportFactory : public InternallyRefCounted<XdsTransportFactory> {
|
|
58
58
|
// Only one message will be in flight at a time; subsequent
|
59
59
|
// messages will not be sent until this one is done.
|
60
60
|
virtual void SendMessage(std::string payload) = 0;
|
61
|
+
|
62
|
+
// Starts a recv_message operation on the stream.
|
63
|
+
virtual void StartRecvMessage() = 0;
|
61
64
|
};
|
62
65
|
|
63
66
|
// Create a streaming call on this transport for the specified method.
|
@@ -86,39 +86,31 @@ GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::GrpcStreamingCall(
|
|
86
86
|
GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this, nullptr);
|
87
87
|
// Start ops on the call.
|
88
88
|
grpc_call_error call_error;
|
89
|
-
grpc_op ops[
|
89
|
+
grpc_op ops[2];
|
90
90
|
memset(ops, 0, sizeof(ops));
|
91
|
-
// Send initial metadata.
|
92
|
-
// care when it finishes.
|
91
|
+
// Send initial metadata.
|
93
92
|
grpc_op* op = ops;
|
94
93
|
op->op = GRPC_OP_SEND_INITIAL_METADATA;
|
95
94
|
op->data.send_initial_metadata.count = 0;
|
96
95
|
op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY |
|
97
96
|
GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
|
98
97
|
op->reserved = nullptr;
|
99
|
-
op
|
100
|
-
call_error = grpc_call_start_batch_and_execute(
|
101
|
-
call_, ops, static_cast<size_t>(op - ops), nullptr);
|
102
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
103
|
-
// Start a batch with recv_initial_metadata and recv_message.
|
104
|
-
op = ops;
|
98
|
+
++op;
|
105
99
|
op->op = GRPC_OP_RECV_INITIAL_METADATA;
|
106
100
|
op->data.recv_initial_metadata.recv_initial_metadata =
|
107
101
|
&initial_metadata_recv_;
|
108
102
|
op->flags = 0;
|
109
103
|
op->reserved = nullptr;
|
110
|
-
op
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
op++;
|
116
|
-
Ref(DEBUG_LOCATION, "OnResponseReceived").release();
|
117
|
-
GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this, nullptr);
|
104
|
+
++op;
|
105
|
+
// Ref will be released in the callback
|
106
|
+
GRPC_CLOSURE_INIT(
|
107
|
+
&on_recv_initial_metadata_, OnRecvInitialMetadata,
|
108
|
+
this->Ref(DEBUG_LOCATION, "OnRecvInitialMetadata").release(), nullptr);
|
118
109
|
call_error = grpc_call_start_batch_and_execute(
|
119
|
-
call_, ops, static_cast<size_t>(op - ops), &
|
110
|
+
call_, ops, static_cast<size_t>(op - ops), &on_recv_initial_metadata_);
|
120
111
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
121
112
|
// Start a batch for recv_trailing_metadata.
|
113
|
+
memset(ops, 0, sizeof(ops));
|
122
114
|
op = ops;
|
123
115
|
op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
|
124
116
|
op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv_;
|
@@ -126,7 +118,7 @@ GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::GrpcStreamingCall(
|
|
126
118
|
op->data.recv_status_on_client.status_details = &status_details_;
|
127
119
|
op->flags = 0;
|
128
120
|
op->reserved = nullptr;
|
129
|
-
op
|
121
|
+
++op;
|
130
122
|
// This callback signals the end of the call, so it relies on the initial
|
131
123
|
// ref instead of a new ref. When it's invoked, it's the initial ref that is
|
132
124
|
// unreffed.
|
@@ -134,11 +126,11 @@ GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::GrpcStreamingCall(
|
|
134
126
|
call_error = grpc_call_start_batch_and_execute(
|
135
127
|
call_, ops, static_cast<size_t>(op - ops), &on_status_received_);
|
136
128
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
129
|
+
GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this, nullptr);
|
137
130
|
}
|
138
131
|
|
139
132
|
GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
|
140
133
|
~GrpcStreamingCall() {
|
141
|
-
grpc_metadata_array_destroy(&initial_metadata_recv_);
|
142
134
|
grpc_metadata_array_destroy(&trailing_metadata_recv_);
|
143
135
|
grpc_byte_buffer_destroy(send_message_payload_);
|
144
136
|
grpc_byte_buffer_destroy(recv_message_payload_);
|
@@ -175,55 +167,59 @@ void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::SendMessage(
|
|
175
167
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
176
168
|
}
|
177
169
|
|
170
|
+
void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
|
171
|
+
StartRecvMessage() {
|
172
|
+
Ref(DEBUG_LOCATION, "StartRecvMessage").release();
|
173
|
+
grpc_op op;
|
174
|
+
memset(&op, 0, sizeof(op));
|
175
|
+
op.op = GRPC_OP_RECV_MESSAGE;
|
176
|
+
op.data.recv_message.recv_message = &recv_message_payload_;
|
177
|
+
GPR_ASSERT(call_ != nullptr);
|
178
|
+
const grpc_call_error call_error =
|
179
|
+
grpc_call_start_batch_and_execute(call_, &op, 1, &on_response_received_);
|
180
|
+
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
181
|
+
}
|
182
|
+
|
183
|
+
void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
|
184
|
+
OnRecvInitialMetadata(void* arg, grpc_error_handle /*error*/) {
|
185
|
+
RefCountedPtr<GrpcStreamingCall> self(static_cast<GrpcStreamingCall*>(arg));
|
186
|
+
grpc_metadata_array_destroy(&self->initial_metadata_recv_);
|
187
|
+
}
|
188
|
+
|
178
189
|
void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
|
179
190
|
OnRequestSent(void* arg, grpc_error_handle error) {
|
180
|
-
|
191
|
+
RefCountedPtr<GrpcStreamingCall> self(static_cast<GrpcStreamingCall*>(arg));
|
181
192
|
// Clean up the sent message.
|
182
193
|
grpc_byte_buffer_destroy(self->send_message_payload_);
|
183
194
|
self->send_message_payload_ = nullptr;
|
184
195
|
// Invoke request handler.
|
185
196
|
self->event_handler_->OnRequestSent(error.ok());
|
186
|
-
// Drop the ref.
|
187
|
-
self->Unref(DEBUG_LOCATION, "OnRequestSent");
|
188
197
|
}
|
189
198
|
|
190
199
|
void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
|
191
200
|
OnResponseReceived(void* arg, grpc_error_handle /*error*/) {
|
192
|
-
|
201
|
+
RefCountedPtr<GrpcStreamingCall> self(static_cast<GrpcStreamingCall*>(arg));
|
193
202
|
// If there was no payload, then we received status before we received
|
194
203
|
// another message, so we stop reading.
|
195
|
-
if (self->recv_message_payload_
|
196
|
-
|
197
|
-
|
204
|
+
if (self->recv_message_payload_ != nullptr) {
|
205
|
+
// Process the response.
|
206
|
+
grpc_byte_buffer_reader bbr;
|
207
|
+
grpc_byte_buffer_reader_init(&bbr, self->recv_message_payload_);
|
208
|
+
grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
|
209
|
+
grpc_byte_buffer_reader_destroy(&bbr);
|
210
|
+
grpc_byte_buffer_destroy(self->recv_message_payload_);
|
211
|
+
self->recv_message_payload_ = nullptr;
|
212
|
+
self->event_handler_->OnRecvMessage(StringViewFromSlice(response_slice));
|
213
|
+
CSliceUnref(response_slice);
|
198
214
|
}
|
199
|
-
// Process the response.
|
200
|
-
grpc_byte_buffer_reader bbr;
|
201
|
-
grpc_byte_buffer_reader_init(&bbr, self->recv_message_payload_);
|
202
|
-
grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
|
203
|
-
grpc_byte_buffer_reader_destroy(&bbr);
|
204
|
-
grpc_byte_buffer_destroy(self->recv_message_payload_);
|
205
|
-
self->recv_message_payload_ = nullptr;
|
206
|
-
self->event_handler_->OnRecvMessage(StringViewFromSlice(response_slice));
|
207
|
-
CSliceUnref(response_slice);
|
208
|
-
// Keep reading.
|
209
|
-
grpc_op op;
|
210
|
-
memset(&op, 0, sizeof(op));
|
211
|
-
op.op = GRPC_OP_RECV_MESSAGE;
|
212
|
-
op.data.recv_message.recv_message = &self->recv_message_payload_;
|
213
|
-
GPR_ASSERT(self->call_ != nullptr);
|
214
|
-
// Reuses the "OnResponseReceived" ref taken in ctor.
|
215
|
-
const grpc_call_error call_error = grpc_call_start_batch_and_execute(
|
216
|
-
self->call_, &op, 1, &self->on_response_received_);
|
217
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
218
215
|
}
|
219
216
|
|
220
217
|
void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
|
221
218
|
OnStatusReceived(void* arg, grpc_error_handle /*error*/) {
|
222
|
-
|
219
|
+
RefCountedPtr<GrpcStreamingCall> self(static_cast<GrpcStreamingCall*>(arg));
|
223
220
|
self->event_handler_->OnStatusReceived(
|
224
221
|
absl::Status(static_cast<absl::StatusCode>(self->status_code_),
|
225
222
|
StringViewFromSlice(self->status_details_)));
|
226
|
-
self->Unref(DEBUG_LOCATION, "OnStatusReceived");
|
227
223
|
}
|
228
224
|
|
229
225
|
//
|
@@ -321,8 +317,9 @@ GrpcXdsTransportFactory::GrpcXdsTransport::CreateStreamingCall(
|
|
321
317
|
const char* method,
|
322
318
|
std::unique_ptr<StreamingCall::EventHandler> event_handler) {
|
323
319
|
return MakeOrphanable<GrpcStreamingCall>(
|
324
|
-
factory_->
|
325
|
-
|
320
|
+
factory_->RefAsSubclass<GrpcXdsTransportFactory>(DEBUG_LOCATION,
|
321
|
+
"StreamingCall"),
|
322
|
+
channel_, method, std::move(event_handler));
|
326
323
|
}
|
327
324
|
|
328
325
|
void GrpcXdsTransportFactory::GrpcXdsTransport::ResetBackoff() {
|
@@ -100,7 +100,10 @@ class GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall
|
|
100
100
|
|
101
101
|
void SendMessage(std::string payload) override;
|
102
102
|
|
103
|
+
void StartRecvMessage() override;
|
104
|
+
|
103
105
|
private:
|
106
|
+
static void OnRecvInitialMetadata(void* arg, grpc_error_handle /*error*/);
|
104
107
|
static void OnRequestSent(void* arg, grpc_error_handle error);
|
105
108
|
static void OnResponseReceived(void* arg, grpc_error_handle /*error*/);
|
106
109
|
static void OnStatusReceived(void* arg, grpc_error_handle /*error*/);
|
@@ -114,6 +117,7 @@ class GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall
|
|
114
117
|
|
115
118
|
// recv_initial_metadata
|
116
119
|
grpc_metadata_array initial_metadata_recv_;
|
120
|
+
grpc_closure on_recv_initial_metadata_;
|
117
121
|
|
118
122
|
// send_message
|
119
123
|
grpc_byte_buffer* send_message_payload_ = nullptr;
|
@@ -60,6 +60,11 @@ void ServerCallTracerFactory::RegisterGlobal(ServerCallTracerFactory* factory) {
|
|
60
60
|
g_server_call_tracer_factory_ = factory;
|
61
61
|
}
|
62
62
|
|
63
|
+
void ServerCallTracerFactory::TestOnlyReset() {
|
64
|
+
delete g_server_call_tracer_factory_;
|
65
|
+
g_server_call_tracer_factory_ = nullptr;
|
66
|
+
}
|
67
|
+
|
63
68
|
absl::string_view ServerCallTracerFactory::ChannelArgName() {
|
64
69
|
return kServerCallTracerFactoryChannelArgName;
|
65
70
|
}
|
@@ -146,6 +151,13 @@ class DelegatingClientCallTracer : public ClientCallTracer {
|
|
146
151
|
std::shared_ptr<TcpTracerInterface> StartNewTcpTrace() override {
|
147
152
|
return nullptr;
|
148
153
|
}
|
154
|
+
void AddOptionalLabels(
|
155
|
+
OptionalLabelComponent component,
|
156
|
+
std::shared_ptr<std::map<std::string, std::string>> labels) override {
|
157
|
+
for (auto* tracer : tracers_) {
|
158
|
+
tracer->AddOptionalLabels(component, labels);
|
159
|
+
}
|
160
|
+
}
|
149
161
|
std::string TraceId() override { return tracers_[0]->TraceId(); }
|
150
162
|
std::string SpanId() override { return tracers_[0]->SpanId(); }
|
151
163
|
bool IsSampled() override { return tracers_[0]->IsSampled(); }
|
@@ -44,9 +44,9 @@ namespace grpc_core {
|
|
44
44
|
|
45
45
|
// The interface hierarchy is as follows -
|
46
46
|
// CallTracerAnnotationInterface
|
47
|
-
//
|
47
|
+
// | |
|
48
48
|
// ClientCallTracer CallTracerInterface
|
49
|
-
//
|
49
|
+
// | |
|
50
50
|
// CallAttemptTracer ServerCallTracer
|
51
51
|
|
52
52
|
// The base class for all tracer implementations.
|
@@ -128,6 +128,11 @@ class ClientCallTracer : public CallTracerAnnotationInterface {
|
|
128
128
|
// as transparent retry attempts.)
|
129
129
|
class CallAttemptTracer : public CallTracerInterface {
|
130
130
|
public:
|
131
|
+
enum class OptionalLabelComponent : std::uint8_t {
|
132
|
+
kXdsServiceLabels = 0,
|
133
|
+
kSize = 1, // keep last
|
134
|
+
};
|
135
|
+
|
131
136
|
~CallAttemptTracer() override {}
|
132
137
|
// TODO(yashykt): The following two methods `RecordReceivedTrailingMetadata`
|
133
138
|
// and `RecordEnd` should be moved into CallTracerInterface.
|
@@ -140,6 +145,11 @@ class ClientCallTracer : public CallTracerAnnotationInterface {
|
|
140
145
|
// Should be the last API call to the object. Once invoked, the tracer
|
141
146
|
// library is free to destroy the object.
|
142
147
|
virtual void RecordEnd(const gpr_timespec& latency) = 0;
|
148
|
+
|
149
|
+
// Adds optional labels to be reported by the underlying tracer in a call.
|
150
|
+
virtual void AddOptionalLabels(
|
151
|
+
OptionalLabelComponent component,
|
152
|
+
std::shared_ptr<std::map<std::string, std::string>> labels) = 0;
|
143
153
|
};
|
144
154
|
|
145
155
|
~ClientCallTracer() override {}
|
@@ -175,7 +185,8 @@ class ServerCallTracerFactory {
|
|
175
185
|
|
176
186
|
virtual ~ServerCallTracerFactory() {}
|
177
187
|
|
178
|
-
virtual ServerCallTracer* CreateNewServerCallTracer(
|
188
|
+
virtual ServerCallTracer* CreateNewServerCallTracer(
|
189
|
+
Arena* arena, const ChannelArgs& channel_args) = 0;
|
179
190
|
|
180
191
|
// Returns true if a server is to be traced, false otherwise.
|
181
192
|
virtual bool IsServerTraced(const ChannelArgs& /*args*/) { return true; }
|
@@ -190,6 +201,9 @@ class ServerCallTracerFactory {
|
|
190
201
|
// this for the lifetime of the process.
|
191
202
|
static void RegisterGlobal(ServerCallTracerFactory* factory);
|
192
203
|
|
204
|
+
// Deletes any previous registered ServerCallTracerFactory.
|
205
|
+
static void TestOnlyReset();
|
206
|
+
|
193
207
|
static absl::string_view ChannelArgName();
|
194
208
|
};
|
195
209
|
|