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
@@ -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
|
|