grpc 1.41.0.pre2 → 1.42.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +57 -44
- data/etc/roots.pem +335 -326
- data/include/grpc/event_engine/event_engine.h +82 -42
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
- data/include/grpc/event_engine/memory_allocator.h +210 -0
- data/include/grpc/grpc.h +4 -0
- data/include/grpc/grpc_security.h +18 -0
- data/include/grpc/grpc_security_constants.h +1 -0
- data/include/grpc/impl/codegen/port_platform.h +7 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
- data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
- data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
- data/src/core/ext/filters/client_channel/client_channel.h +74 -27
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +4 -5
- data/src/core/ext/filters/client_channel/connector.h +18 -18
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
- data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
- data/src/core/ext/filters/client_channel/resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
- data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
- data/src/core/ext/filters/client_channel/server_address.h +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
- data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
- data/src/core/ext/filters/client_channel/subchannel.h +29 -49
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
- data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
- data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
- data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
- data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
- data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
- data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
- data/src/core/ext/service_config/service_config_call_data.h +72 -0
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
- data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
- data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
- data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
- data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/xds/xds_api.cc +325 -362
- data/src/core/ext/xds/xds_api.h +134 -82
- data/src/core/ext/xds/xds_bootstrap.h +10 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
- data/src/core/ext/xds/xds_client.cc +527 -314
- data/src/core/ext/xds/xds_client.h +42 -37
- data/src/core/ext/xds/xds_client_stats.h +1 -1
- data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
- data/src/core/lib/address_utils/parse_address.cc +2 -0
- data/src/core/lib/avl/avl.cc +5 -5
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/channel/channel_args.cc +24 -6
- data/src/core/lib/channel/channel_args.h +9 -0
- data/src/core/lib/channel/channel_stack_builder.cc +3 -3
- data/src/core/lib/channel/channel_trace.cc +1 -1
- data/src/core/lib/channel/channel_trace.h +1 -1
- data/src/core/lib/channel/channelz.cc +3 -3
- data/src/core/lib/channel/channelz.h +2 -2
- data/src/core/lib/channel/channelz_registry.cc +1 -1
- data/src/core/lib/channel/channelz_registry.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +1 -3
- data/src/core/lib/channel/connected_channel.h +1 -2
- data/src/core/lib/compression/compression.cc +2 -2
- data/src/core/lib/compression/compression_args.cc +6 -4
- data/src/core/lib/compression/compression_internal.cc +2 -2
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +44 -2
- data/src/core/lib/config/core_configuration.h +39 -1
- data/src/core/lib/debug/stats.cc +1 -1
- data/src/core/lib/debug/stats_data.cc +13 -13
- data/src/core/lib/gpr/atm.cc +1 -1
- data/src/core/lib/gpr/cpu_posix.cc +1 -1
- data/src/core/lib/gpr/string.cc +2 -2
- data/src/core/lib/gpr/tls.h +1 -1
- data/src/core/lib/gpr/useful.h +79 -32
- data/src/core/lib/gprpp/arena.h +10 -0
- data/src/core/lib/gprpp/bitset.h +38 -16
- data/src/core/lib/gprpp/chunked_vector.h +211 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -1
- data/src/core/lib/gprpp/match.h +1 -1
- data/src/core/lib/gprpp/memory.h +6 -0
- data/src/core/lib/gprpp/overload.h +1 -1
- data/src/core/lib/gprpp/status_helper.cc +23 -3
- data/src/core/lib/gprpp/status_helper.h +12 -1
- data/src/core/lib/gprpp/table.h +411 -0
- data/src/core/lib/http/httpcli.cc +200 -182
- data/src/core/lib/http/parser.cc +2 -2
- data/src/core/lib/iomgr/call_combiner.cc +28 -10
- data/src/core/lib/iomgr/combiner.cc +6 -21
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
- data/src/core/lib/iomgr/error.cc +113 -52
- data/src/core/lib/iomgr/error.h +50 -9
- data/src/core/lib/iomgr/error_cfstream.cc +5 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
- data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
- data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
- data/src/core/lib/iomgr/event_engine/closure.h +10 -1
- data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
- data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
- data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
- data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
- data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
- data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
- data/src/core/lib/iomgr/exec_ctx.cc +1 -9
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
- data/src/core/lib/iomgr/executor.cc +6 -20
- data/src/core/lib/iomgr/iomgr.cc +3 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
- data/src/core/lib/iomgr/iomgr_internal.h +3 -2
- data/src/core/lib/iomgr/load_file.cc +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +18 -0
- data/src/core/lib/iomgr/pollset_custom.cc +1 -1
- data/src/core/lib/iomgr/pollset_custom.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
- data/src/core/lib/iomgr/resource_quota.cc +13 -11
- data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_mutator.cc +2 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
- data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_posix.cc +4 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
- data/src/core/lib/iomgr/tcp_windows.cc +2 -2
- data/src/core/lib/iomgr/timer_generic.cc +13 -13
- data/src/core/lib/iomgr/timer_heap.cc +1 -1
- data/src/core/lib/json/json_util.cc +68 -0
- data/src/core/lib/json/json_util.h +57 -99
- data/src/core/lib/json/json_writer.cc +0 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/credentials.cc +4 -2
- data/src/core/lib/security/credentials/credentials.h +6 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
- data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/security_connector.cc +9 -4
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.cc +73 -43
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
- data/src/core/lib/security/transport/tsi_error.cc +3 -5
- data/src/core/lib/slice/slice.cc +0 -16
- data/src/core/lib/slice/slice_api.cc +39 -0
- data/src/core/lib/slice/slice_buffer.cc +5 -5
- data/src/core/lib/slice/slice_intern.cc +8 -13
- data/src/core/lib/slice/slice_internal.h +1 -244
- data/src/core/lib/slice/slice_refcount.cc +17 -0
- data/src/core/lib/slice/slice_refcount.h +121 -0
- data/src/core/lib/slice/slice_refcount_base.h +173 -0
- data/src/core/lib/slice/slice_split.cc +100 -0
- data/src/core/lib/slice/slice_split.h +40 -0
- data/src/core/lib/slice/slice_string_helpers.cc +0 -83
- data/src/core/lib/slice/slice_string_helpers.h +0 -11
- data/src/core/lib/slice/static_slice.cc +529 -0
- data/src/core/lib/slice/static_slice.h +331 -0
- data/src/core/lib/surface/builtins.cc +49 -0
- data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
- data/src/core/lib/surface/call.cc +103 -120
- data/src/core/lib/surface/call.h +0 -6
- data/src/core/lib/surface/channel.cc +19 -32
- data/src/core/lib/surface/channel.h +0 -9
- data/src/core/lib/surface/channel_init.cc +23 -76
- data/src/core/lib/surface/channel_init.h +52 -44
- data/src/core/lib/surface/completion_queue.cc +6 -5
- data/src/core/lib/surface/init.cc +0 -39
- data/src/core/lib/surface/init_secure.cc +17 -14
- data/src/core/lib/surface/lame_client.cc +18 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +25 -17
- data/src/core/lib/surface/server.h +17 -10
- data/src/core/lib/surface/validate_metadata.cc +5 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +42 -17
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/metadata.cc +31 -10
- data/src/core/lib/transport/metadata.h +2 -1
- data/src/core/lib/transport/metadata_batch.cc +35 -371
- data/src/core/lib/transport/metadata_batch.h +905 -71
- data/src/core/lib/transport/parsed_metadata.h +263 -0
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/static_metadata.cc +714 -846
- data/src/core/lib/transport/static_metadata.h +115 -379
- data/src/core/lib/transport/status_metadata.cc +1 -0
- data/src/core/lib/transport/transport.cc +4 -5
- data/src/core/lib/transport/transport_op_string.cc +40 -20
- data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
- data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
- data/src/core/tsi/fake_transport_security.cc +15 -7
- data/src/core/tsi/local_transport_security.cc +36 -73
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
- data/src/core/tsi/ssl_transport_security.cc +10 -2
- data/src/core/tsi/transport_security.cc +12 -0
- data/src/core/tsi/transport_security.h +16 -1
- data/src/core/tsi/transport_security_interface.h +26 -0
- data/src/ruby/ext/grpc/extconf.rb +12 -9
- 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/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
- data/third_party/address_sorting/address_sorting_posix.c +1 -0
- data/third_party/boringssl-with-bazel/err_data.c +278 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +38 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +12 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +366 -227
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +28 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +529 -91
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
- data/third_party/re2/re2/compile.cc +91 -109
- data/third_party/re2/re2/dfa.cc +27 -39
- data/third_party/re2/re2/filtered_re2.cc +18 -2
- data/third_party/re2/re2/filtered_re2.h +10 -5
- data/third_party/re2/re2/nfa.cc +1 -1
- data/third_party/re2/re2/parse.cc +42 -23
- data/third_party/re2/re2/perl_groups.cc +34 -34
- data/third_party/re2/re2/prefilter.cc +3 -2
- data/third_party/re2/re2/prog.cc +182 -4
- data/third_party/re2/re2/prog.h +28 -9
- data/third_party/re2/re2/re2.cc +87 -118
- data/third_party/re2/re2/re2.h +156 -141
- data/third_party/re2/re2/regexp.cc +12 -5
- data/third_party/re2/re2/regexp.h +8 -2
- data/third_party/re2/re2/set.cc +31 -9
- data/third_party/re2/re2/set.h +9 -4
- data/third_party/re2/re2/simplify.cc +11 -3
- data/third_party/re2/re2/tostring.cc +1 -1
- data/third_party/re2/re2/walker-inl.h +1 -1
- data/third_party/re2/util/mutex.h +2 -2
- data/third_party/re2/util/pcre.h +3 -3
- metadata +81 -68
- data/include/grpc/event_engine/slice_allocator.h +0 -71
- data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
- data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
- data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
- data/src/core/ext/transport/chttp2/client/authority.h +0 -36
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
- data/src/core/lib/iomgr/udp_server.cc +0 -747
- data/src/core/lib/iomgr/udp_server.h +0 -103
- data/src/core/lib/transport/authority_override.cc +0 -40
- data/src/core/lib/transport/authority_override.h +0 -37
data/src/core/ext/xds/xds_api.cc
CHANGED
@@ -82,10 +82,10 @@
|
|
82
82
|
#include "google/protobuf/timestamp.upb.h"
|
83
83
|
#include "google/protobuf/wrappers.upb.h"
|
84
84
|
#include "google/rpc/status.upb.h"
|
85
|
-
#include "udpa/type/v1/typed_struct.upb.h"
|
86
85
|
#include "upb/text_encode.h"
|
87
86
|
#include "upb/upb.h"
|
88
87
|
#include "upb/upb.hpp"
|
88
|
+
#include "xds/type/v3/typed_struct.upb.h"
|
89
89
|
|
90
90
|
#include <grpc/impl/codegen/log.h>
|
91
91
|
#include <grpc/support/alloc.h>
|
@@ -94,12 +94,12 @@
|
|
94
94
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
95
95
|
#include "src/core/lib/gpr/env.h"
|
96
96
|
#include "src/core/lib/gpr/string.h"
|
97
|
-
#include "src/core/lib/gpr/useful.h"
|
98
97
|
#include "src/core/lib/gprpp/host_port.h"
|
99
98
|
#include "src/core/lib/iomgr/error.h"
|
100
99
|
#include "src/core/lib/iomgr/sockaddr.h"
|
101
100
|
#include "src/core/lib/iomgr/socket_utils.h"
|
102
101
|
#include "src/core/lib/slice/slice_utils.h"
|
102
|
+
#include "src/core/lib/uri/uri_parser.h"
|
103
103
|
|
104
104
|
namespace grpc_core {
|
105
105
|
|
@@ -116,11 +116,58 @@ bool XdsAggregateAndLogicalDnsClusterEnabled() {
|
|
116
116
|
return parse_succeeded && parsed_value;
|
117
117
|
}
|
118
118
|
|
119
|
+
// TODO(yashykt): Remove once RBAC is no longer experimental
|
120
|
+
bool XdsRbacEnabled() {
|
121
|
+
char* value = gpr_getenv("GRPC_XDS_EXPERIMENTAL_RBAC");
|
122
|
+
bool parsed_value;
|
123
|
+
bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
|
124
|
+
gpr_free(value);
|
125
|
+
return parse_succeeded && parsed_value;
|
126
|
+
}
|
127
|
+
|
128
|
+
//
|
129
|
+
// XdsApi::RetryPolicy
|
130
|
+
//
|
131
|
+
|
132
|
+
std::string XdsApi::RetryPolicy::RetryBackOff::ToString() const {
|
133
|
+
std::vector<std::string> contents;
|
134
|
+
contents.push_back(
|
135
|
+
absl::StrCat("RetryBackOff Base: ", base_interval.ToString()));
|
136
|
+
contents.push_back(
|
137
|
+
absl::StrCat("RetryBackOff max: ", max_interval.ToString()));
|
138
|
+
return absl::StrJoin(contents, ",");
|
139
|
+
}
|
140
|
+
|
141
|
+
std::string XdsApi::RetryPolicy::ToString() const {
|
142
|
+
std::vector<std::string> contents;
|
143
|
+
contents.push_back(absl::StrFormat("num_retries=%d", num_retries));
|
144
|
+
contents.push_back(retry_back_off.ToString());
|
145
|
+
return absl::StrCat("{", absl::StrJoin(contents, ","), "}");
|
146
|
+
}
|
147
|
+
|
148
|
+
//
|
149
|
+
// XdsApi::Route::Matchers
|
150
|
+
//
|
151
|
+
|
152
|
+
std::string XdsApi::Route::Matchers::ToString() const {
|
153
|
+
std::vector<std::string> contents;
|
154
|
+
contents.push_back(
|
155
|
+
absl::StrFormat("PathMatcher{%s}", path_matcher.ToString()));
|
156
|
+
for (const HeaderMatcher& header_matcher : header_matchers) {
|
157
|
+
contents.push_back(header_matcher.ToString());
|
158
|
+
}
|
159
|
+
if (fraction_per_million.has_value()) {
|
160
|
+
contents.push_back(absl::StrFormat("Fraction Per Million %d",
|
161
|
+
fraction_per_million.value()));
|
162
|
+
}
|
163
|
+
return absl::StrJoin(contents, "\n");
|
164
|
+
}
|
165
|
+
|
119
166
|
//
|
120
|
-
// XdsApi::Route::HashPolicy
|
167
|
+
// XdsApi::Route::RouteAction::HashPolicy
|
121
168
|
//
|
122
169
|
|
123
|
-
XdsApi::Route::HashPolicy::HashPolicy(const HashPolicy& other)
|
170
|
+
XdsApi::Route::RouteAction::HashPolicy::HashPolicy(const HashPolicy& other)
|
124
171
|
: type(other.type),
|
125
172
|
header_name(other.header_name),
|
126
173
|
regex_substitution(other.regex_substitution) {
|
@@ -130,8 +177,8 @@ XdsApi::Route::HashPolicy::HashPolicy(const HashPolicy& other)
|
|
130
177
|
}
|
131
178
|
}
|
132
179
|
|
133
|
-
XdsApi::Route::HashPolicy&
|
134
|
-
|
180
|
+
XdsApi::Route::RouteAction::HashPolicy&
|
181
|
+
XdsApi::Route::RouteAction::HashPolicy::operator=(const HashPolicy& other) {
|
135
182
|
type = other.type;
|
136
183
|
header_name = other.header_name;
|
137
184
|
if (other.regex != nullptr) {
|
@@ -142,14 +189,14 @@ XdsApi::Route::HashPolicy& XdsApi::Route::HashPolicy::operator=(
|
|
142
189
|
return *this;
|
143
190
|
}
|
144
191
|
|
145
|
-
XdsApi::Route::HashPolicy::HashPolicy(HashPolicy&& other) noexcept
|
192
|
+
XdsApi::Route::RouteAction::HashPolicy::HashPolicy(HashPolicy&& other) noexcept
|
146
193
|
: type(other.type),
|
147
194
|
header_name(std::move(other.header_name)),
|
148
195
|
regex(std::move(other.regex)),
|
149
196
|
regex_substitution(std::move(other.regex_substitution)) {}
|
150
197
|
|
151
|
-
XdsApi::Route::HashPolicy&
|
152
|
-
|
198
|
+
XdsApi::Route::RouteAction::HashPolicy&
|
199
|
+
XdsApi::Route::RouteAction::HashPolicy::operator=(HashPolicy&& other) noexcept {
|
153
200
|
type = other.type;
|
154
201
|
header_name = std::move(other.header_name);
|
155
202
|
regex = std::move(other.regex);
|
@@ -157,7 +204,7 @@ XdsApi::Route::HashPolicy& XdsApi::Route::HashPolicy::operator=(
|
|
157
204
|
return *this;
|
158
205
|
}
|
159
206
|
|
160
|
-
bool XdsApi::Route::HashPolicy::HashPolicy::operator==(
|
207
|
+
bool XdsApi::Route::RouteAction::HashPolicy::HashPolicy::operator==(
|
161
208
|
const HashPolicy& other) const {
|
162
209
|
if (type != other.type) return false;
|
163
210
|
if (type == Type::HEADER) {
|
@@ -173,7 +220,7 @@ bool XdsApi::Route::HashPolicy::HashPolicy::operator==(
|
|
173
220
|
return true;
|
174
221
|
}
|
175
222
|
|
176
|
-
std::string XdsApi::Route::HashPolicy::ToString() const {
|
223
|
+
std::string XdsApi::Route::RouteAction::HashPolicy::ToString() const {
|
177
224
|
std::vector<std::string> contents;
|
178
225
|
switch (type) {
|
179
226
|
case Type::HEADER:
|
@@ -194,43 +241,10 @@ std::string XdsApi::Route::HashPolicy::ToString() const {
|
|
194
241
|
}
|
195
242
|
|
196
243
|
//
|
197
|
-
// XdsApi::Route::
|
198
|
-
//
|
199
|
-
std::string XdsApi::Route::RetryPolicy::RetryBackOff::ToString() const {
|
200
|
-
std::vector<std::string> contents;
|
201
|
-
contents.push_back(
|
202
|
-
absl::StrCat("RetryBackOff Base: ", base_interval.ToString()));
|
203
|
-
contents.push_back(
|
204
|
-
absl::StrCat("RetryBackOff max: ", max_interval.ToString()));
|
205
|
-
return absl::StrJoin(contents, ",");
|
206
|
-
}
|
207
|
-
|
208
|
-
std::string XdsApi::Route::RetryPolicy::ToString() const {
|
209
|
-
std::vector<std::string> contents;
|
210
|
-
contents.push_back(absl::StrFormat("num_retries=%d", num_retries));
|
211
|
-
contents.push_back(retry_back_off.ToString());
|
212
|
-
return absl::StrJoin(contents, ",");
|
213
|
-
}
|
214
|
-
|
215
|
-
//
|
216
|
-
// XdsApi::Route
|
244
|
+
// XdsApi::Route::RouteAction::ClusterWeight
|
217
245
|
//
|
218
246
|
|
219
|
-
std::string XdsApi::Route::
|
220
|
-
std::vector<std::string> contents;
|
221
|
-
contents.push_back(
|
222
|
-
absl::StrFormat("PathMatcher{%s}", path_matcher.ToString()));
|
223
|
-
for (const HeaderMatcher& header_matcher : header_matchers) {
|
224
|
-
contents.push_back(header_matcher.ToString());
|
225
|
-
}
|
226
|
-
if (fraction_per_million.has_value()) {
|
227
|
-
contents.push_back(absl::StrFormat("Fraction Per Million %d",
|
228
|
-
fraction_per_million.value()));
|
229
|
-
}
|
230
|
-
return absl::StrJoin(contents, "\n");
|
231
|
-
}
|
232
|
-
|
233
|
-
std::string XdsApi::Route::ClusterWeight::ToString() const {
|
247
|
+
std::string XdsApi::Route::RouteAction::ClusterWeight::ToString() const {
|
234
248
|
std::vector<std::string> contents;
|
235
249
|
contents.push_back(absl::StrCat("cluster=", name));
|
236
250
|
contents.push_back(absl::StrCat("weight=", weight));
|
@@ -247,15 +261,17 @@ std::string XdsApi::Route::ClusterWeight::ToString() const {
|
|
247
261
|
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
248
262
|
}
|
249
263
|
|
250
|
-
|
264
|
+
//
|
265
|
+
// XdsApi::Route::RouteAction
|
266
|
+
//
|
267
|
+
|
268
|
+
std::string XdsApi::Route::RouteAction::ToString() const {
|
251
269
|
std::vector<std::string> contents;
|
252
|
-
contents.push_back(matchers.ToString());
|
253
270
|
for (const HashPolicy& hash_policy : hash_policies) {
|
254
271
|
contents.push_back(absl::StrCat("hash_policy=", hash_policy.ToString()));
|
255
272
|
}
|
256
273
|
if (retry_policy.has_value()) {
|
257
|
-
contents.push_back(
|
258
|
-
absl::StrCat("retry_policy={", retry_policy->ToString(), "}"));
|
274
|
+
contents.push_back(absl::StrCat("retry_policy=", retry_policy->ToString()));
|
259
275
|
}
|
260
276
|
if (!cluster_name.empty()) {
|
261
277
|
contents.push_back(absl::StrFormat("Cluster name: %s", cluster_name));
|
@@ -266,6 +282,25 @@ std::string XdsApi::Route::ToString() const {
|
|
266
282
|
if (max_stream_duration.has_value()) {
|
267
283
|
contents.push_back(max_stream_duration->ToString());
|
268
284
|
}
|
285
|
+
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
286
|
+
}
|
287
|
+
|
288
|
+
//
|
289
|
+
// XdsApi::Route
|
290
|
+
//
|
291
|
+
|
292
|
+
std::string XdsApi::Route::ToString() const {
|
293
|
+
std::vector<std::string> contents;
|
294
|
+
contents.push_back(matchers.ToString());
|
295
|
+
auto* route_action = absl::get_if<XdsApi::Route::RouteAction>(&action);
|
296
|
+
if (route_action != nullptr) {
|
297
|
+
contents.push_back(absl::StrCat("route=", route_action->ToString()));
|
298
|
+
} else if (absl::holds_alternative<XdsApi::Route::NonForwardingAction>(
|
299
|
+
action)) {
|
300
|
+
contents.push_back("non_forwarding_action={}");
|
301
|
+
} else {
|
302
|
+
contents.push_back("unknown_action={}");
|
303
|
+
}
|
269
304
|
if (!typed_per_filter_config.empty()) {
|
270
305
|
contents.push_back("typed_per_filter_config={");
|
271
306
|
for (const auto& p : typed_per_filter_config) {
|
@@ -804,7 +839,7 @@ const char* kCdsV2TypeUrl = "type.googleapis.com/envoy.api.v2.Cluster";
|
|
804
839
|
const char* kEdsV2TypeUrl =
|
805
840
|
"type.googleapis.com/envoy.api.v2.ClusterLoadAssignment";
|
806
841
|
|
807
|
-
bool
|
842
|
+
bool IsLdsInternal(absl::string_view type_url, bool* is_v2 = nullptr) {
|
808
843
|
if (type_url == XdsApi::kLdsTypeUrl) return true;
|
809
844
|
if (type_url == kLdsV2TypeUrl) {
|
810
845
|
if (is_v2 != nullptr) *is_v2 = true;
|
@@ -813,18 +848,46 @@ bool IsLds(absl::string_view type_url, bool* is_v2 = nullptr) {
|
|
813
848
|
return false;
|
814
849
|
}
|
815
850
|
|
816
|
-
bool
|
851
|
+
bool IsRdsInternal(absl::string_view type_url, bool* /*is_v2*/ = nullptr) {
|
817
852
|
return type_url == XdsApi::kRdsTypeUrl || type_url == kRdsV2TypeUrl;
|
818
853
|
}
|
819
854
|
|
820
|
-
bool
|
855
|
+
bool IsCdsInternal(absl::string_view type_url, bool* /*is_v2*/ = nullptr) {
|
821
856
|
return type_url == XdsApi::kCdsTypeUrl || type_url == kCdsV2TypeUrl;
|
822
857
|
}
|
823
858
|
|
824
|
-
bool
|
859
|
+
bool IsEdsInternal(absl::string_view type_url, bool* /*is_v2*/ = nullptr) {
|
825
860
|
return type_url == XdsApi::kEdsTypeUrl || type_url == kEdsV2TypeUrl;
|
826
861
|
}
|
827
862
|
|
863
|
+
absl::StatusOr<XdsApi::ResourceName> ParseResourceNameInternal(
|
864
|
+
absl::string_view name,
|
865
|
+
std::function<bool(absl::string_view, bool*)> is_expected_type) {
|
866
|
+
// Old-style names use the empty string for authority.
|
867
|
+
// ID is prefixed with "old:" to indicate that it's an old-style name.
|
868
|
+
if (!absl::StartsWith(name, "xdstp:")) {
|
869
|
+
return XdsApi::ResourceName{"", absl::StrCat("old:", name)};
|
870
|
+
}
|
871
|
+
// New style name. Parse URI.
|
872
|
+
auto uri = URI::Parse(name);
|
873
|
+
if (!uri.ok()) return uri.status();
|
874
|
+
// Split the resource type off of the path to get the id.
|
875
|
+
std::pair<absl::string_view, absl::string_view> path_parts =
|
876
|
+
absl::StrSplit(uri->path(), absl::MaxSplits('/', 1));
|
877
|
+
if (!is_expected_type(path_parts.first, nullptr)) {
|
878
|
+
return absl::InvalidArgumentError(
|
879
|
+
"xdstp URI path must indicate valid xDS resource type");
|
880
|
+
}
|
881
|
+
std::vector<std::pair<absl::string_view, absl::string_view>> query_parameters(
|
882
|
+
uri->query_parameter_map().begin(), uri->query_parameter_map().end());
|
883
|
+
std::sort(query_parameters.begin(), query_parameters.end());
|
884
|
+
return XdsApi::ResourceName{
|
885
|
+
uri->authority(),
|
886
|
+
absl::StrCat(
|
887
|
+
"xdstp:", path_parts.second, (query_parameters.empty() ? "?" : ""),
|
888
|
+
absl::StrJoin(query_parameters, "&", absl::PairFormatter("=")))};
|
889
|
+
}
|
890
|
+
|
828
891
|
} // namespace
|
829
892
|
|
830
893
|
// If gRPC is built with -DGRPC_XDS_USER_AGENT_NAME_SUFFIX="...", that string
|
@@ -881,6 +944,41 @@ XdsApi::XdsApi(XdsClient* client, TraceFlag* tracer,
|
|
881
944
|
XdsHttpFilterRegistry::PopulateSymtab(symtab_.ptr());
|
882
945
|
}
|
883
946
|
|
947
|
+
bool XdsApi::IsLds(absl::string_view type_url) {
|
948
|
+
return IsLdsInternal(type_url);
|
949
|
+
}
|
950
|
+
|
951
|
+
bool XdsApi::IsRds(absl::string_view type_url) {
|
952
|
+
return IsRdsInternal(type_url);
|
953
|
+
}
|
954
|
+
|
955
|
+
bool XdsApi::IsCds(absl::string_view type_url) {
|
956
|
+
return IsCdsInternal(type_url);
|
957
|
+
}
|
958
|
+
|
959
|
+
bool XdsApi::IsEds(absl::string_view type_url) {
|
960
|
+
return IsEdsInternal(type_url);
|
961
|
+
}
|
962
|
+
|
963
|
+
absl::StatusOr<XdsApi::ResourceName> XdsApi::ParseResourceName(
|
964
|
+
absl::string_view name, bool (*is_expected_type)(absl::string_view)) {
|
965
|
+
return ParseResourceNameInternal(
|
966
|
+
name, [is_expected_type](absl::string_view type, bool*) {
|
967
|
+
return is_expected_type(type);
|
968
|
+
});
|
969
|
+
}
|
970
|
+
|
971
|
+
std::string XdsApi::ConstructFullResourceName(absl::string_view authority,
|
972
|
+
absl::string_view resource_type,
|
973
|
+
absl::string_view name) {
|
974
|
+
if (absl::StartsWith(name, "xdstp:")) {
|
975
|
+
return absl::StrCat("xdstp://", authority, "/", resource_type,
|
976
|
+
absl::StripPrefix(name, "xdstp:"));
|
977
|
+
} else {
|
978
|
+
return std::string(absl::StripPrefix(name, "old:"));
|
979
|
+
}
|
980
|
+
}
|
981
|
+
|
884
982
|
namespace {
|
885
983
|
|
886
984
|
struct EncodingContext {
|
@@ -1095,7 +1193,8 @@ absl::string_view TypeUrlExternalToInternal(bool use_v3,
|
|
1095
1193
|
|
1096
1194
|
grpc_slice XdsApi::CreateAdsRequest(
|
1097
1195
|
const XdsBootstrap::XdsServer& server, const std::string& type_url,
|
1098
|
-
const std::
|
1196
|
+
const std::map<absl::string_view /*authority*/,
|
1197
|
+
std::set<absl::string_view /*name*/>>& resource_names,
|
1099
1198
|
const std::string& version, const std::string& nonce,
|
1100
1199
|
grpc_error_handle error, bool populate_node) {
|
1101
1200
|
upb::Arena arena;
|
@@ -1148,10 +1247,27 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
1148
1247
|
PopulateNode(context, node_, build_version_, user_agent_name_,
|
1149
1248
|
user_agent_version_, node_msg);
|
1150
1249
|
}
|
1250
|
+
// A vector for temporary local storage of resource name strings.
|
1251
|
+
std::vector<std::string> resource_name_storage;
|
1252
|
+
// Make sure the vector is sized right up-front, so that reallocations
|
1253
|
+
// don't move the strings out from under the upb proto object that
|
1254
|
+
// points to them.
|
1255
|
+
size_t size = 0;
|
1256
|
+
for (const auto& p : resource_names) {
|
1257
|
+
size += p.second.size();
|
1258
|
+
}
|
1259
|
+
resource_name_storage.reserve(size);
|
1151
1260
|
// Add resource_names.
|
1152
|
-
for (const auto&
|
1153
|
-
|
1154
|
-
|
1261
|
+
for (const auto& a : resource_names) {
|
1262
|
+
absl::string_view authority = a.first;
|
1263
|
+
for (const auto& p : a.second) {
|
1264
|
+
absl::string_view resource_id = p;
|
1265
|
+
resource_name_storage.push_back(
|
1266
|
+
ConstructFullResourceName(authority, type_url, resource_id));
|
1267
|
+
envoy_service_discovery_v3_DiscoveryRequest_add_resource_names(
|
1268
|
+
request, StdStringToUpbString(resource_name_storage.back()),
|
1269
|
+
arena.ptr());
|
1270
|
+
}
|
1155
1271
|
}
|
1156
1272
|
MaybeLogDiscoveryRequest(context, request);
|
1157
1273
|
return SerializeDiscoveryRequest(context, request);
|
@@ -1438,16 +1554,17 @@ grpc_error_handle ExtractHttpFilterTypeName(const EncodingContext& context,
|
|
1438
1554
|
const google_protobuf_Any* any,
|
1439
1555
|
absl::string_view* filter_type) {
|
1440
1556
|
*filter_type = UpbStringToAbsl(google_protobuf_Any_type_url(any));
|
1441
|
-
if (*filter_type == "type.googleapis.com/
|
1557
|
+
if (*filter_type == "type.googleapis.com/xds.type.v3.TypedStruct" ||
|
1558
|
+
*filter_type == "type.googleapis.com/udpa.type.v1.TypedStruct") {
|
1442
1559
|
upb_strview any_value = google_protobuf_Any_value(any);
|
1443
|
-
const auto* typed_struct =
|
1560
|
+
const auto* typed_struct = xds_type_v3_TypedStruct_parse(
|
1444
1561
|
any_value.data, any_value.size, context.arena);
|
1445
1562
|
if (typed_struct == nullptr) {
|
1446
1563
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1447
1564
|
"could not parse TypedStruct from filter config");
|
1448
1565
|
}
|
1449
1566
|
*filter_type =
|
1450
|
-
UpbStringToAbsl(
|
1567
|
+
UpbStringToAbsl(xds_type_v3_TypedStruct_type_url(typed_struct));
|
1451
1568
|
}
|
1452
1569
|
*filter_type = absl::StripPrefix(*filter_type, "type.googleapis.com/");
|
1453
1570
|
return GRPC_ERROR_NONE;
|
@@ -1528,9 +1645,9 @@ XdsApi::Duration DurationParse(const google_protobuf_Duration* proto_duration) {
|
|
1528
1645
|
grpc_error_handle RetryPolicyParse(
|
1529
1646
|
const EncodingContext& context,
|
1530
1647
|
const envoy_config_route_v3_RetryPolicy* retry_policy,
|
1531
|
-
absl::optional<XdsApi::
|
1648
|
+
absl::optional<XdsApi::RetryPolicy>* retry) {
|
1532
1649
|
std::vector<grpc_error_handle> errors;
|
1533
|
-
XdsApi::
|
1650
|
+
XdsApi::RetryPolicy retry_to_return;
|
1534
1651
|
auto retry_on = UpbStringToStdString(
|
1535
1652
|
envoy_config_route_v3_RetryPolicy_retry_on(retry_policy));
|
1536
1653
|
std::vector<absl::string_view> codes = absl::StrSplit(retry_on, ',');
|
@@ -1552,10 +1669,6 @@ grpc_error_handle RetryPolicyParse(
|
|
1552
1669
|
}
|
1553
1670
|
}
|
1554
1671
|
}
|
1555
|
-
// TODO(donnadionne): when we add support for per_try_timeout, we will need to
|
1556
|
-
// return a policy if per_try_timeout is set even if retry_on specified no
|
1557
|
-
// supported policies.
|
1558
|
-
if (retry_to_return.retry_on.Empty()) return GRPC_ERROR_NONE;
|
1559
1672
|
const google_protobuf_UInt32Value* num_retries =
|
1560
1673
|
envoy_config_route_v3_RetryPolicy_num_retries(retry_policy);
|
1561
1674
|
if (num_retries != nullptr) {
|
@@ -1614,11 +1727,8 @@ grpc_error_handle RetryPolicyParse(
|
|
1614
1727
|
|
1615
1728
|
grpc_error_handle RouteActionParse(const EncodingContext& context,
|
1616
1729
|
const envoy_config_route_v3_Route* route_msg,
|
1617
|
-
XdsApi::Route* route,
|
1618
|
-
|
1619
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1620
|
-
"No RouteAction found in route.");
|
1621
|
-
}
|
1730
|
+
XdsApi::Route::RouteAction* route,
|
1731
|
+
bool* ignore_route) {
|
1622
1732
|
const envoy_config_route_v3_RouteAction* route_action =
|
1623
1733
|
envoy_config_route_v3_Route_route(route_msg);
|
1624
1734
|
// Get the cluster or weighted_clusters in the RouteAction.
|
@@ -1647,7 +1757,7 @@ grpc_error_handle RouteActionParse(const EncodingContext& context,
|
|
1647
1757
|
for (size_t j = 0; j < clusters_size; ++j) {
|
1648
1758
|
const envoy_config_route_v3_WeightedCluster_ClusterWeight*
|
1649
1759
|
cluster_weight = clusters[j];
|
1650
|
-
XdsApi::Route::ClusterWeight cluster;
|
1760
|
+
XdsApi::Route::RouteAction::ClusterWeight cluster;
|
1651
1761
|
cluster.name = UpbStringToStdString(
|
1652
1762
|
envoy_config_route_v3_WeightedCluster_ClusterWeight_name(
|
1653
1763
|
cluster_weight));
|
@@ -1716,7 +1826,7 @@ grpc_error_handle RouteActionParse(const EncodingContext& context,
|
|
1716
1826
|
for (size_t i = 0; i < size; ++i) {
|
1717
1827
|
const envoy_config_route_v3_RouteAction_HashPolicy* hash_policy =
|
1718
1828
|
hash_policies[i];
|
1719
|
-
XdsApi::Route::HashPolicy policy;
|
1829
|
+
XdsApi::Route::RouteAction::HashPolicy policy;
|
1720
1830
|
policy.terminal =
|
1721
1831
|
envoy_config_route_v3_RouteAction_HashPolicy_terminal(hash_policy);
|
1722
1832
|
const envoy_config_route_v3_RouteAction_HashPolicy_Header* header;
|
@@ -1724,7 +1834,7 @@ grpc_error_handle RouteActionParse(const EncodingContext& context,
|
|
1724
1834
|
filter_state;
|
1725
1835
|
if ((header = envoy_config_route_v3_RouteAction_HashPolicy_header(
|
1726
1836
|
hash_policy)) != nullptr) {
|
1727
|
-
policy.type = XdsApi::Route::HashPolicy::Type::HEADER;
|
1837
|
+
policy.type = XdsApi::Route::RouteAction::HashPolicy::Type::HEADER;
|
1728
1838
|
policy.header_name = UpbStringToStdString(
|
1729
1839
|
envoy_config_route_v3_RouteAction_HashPolicy_Header_header_name(
|
1730
1840
|
header));
|
@@ -1768,7 +1878,7 @@ grpc_error_handle RouteActionParse(const EncodingContext& context,
|
|
1768
1878
|
envoy_config_route_v3_RouteAction_HashPolicy_FilterState_key(
|
1769
1879
|
filter_state));
|
1770
1880
|
if (key == "io.grpc.channel_id") {
|
1771
|
-
policy.type = XdsApi::Route::HashPolicy::Type::CHANNEL_ID;
|
1881
|
+
policy.type = XdsApi::Route::RouteAction::HashPolicy::Type::CHANNEL_ID;
|
1772
1882
|
} else {
|
1773
1883
|
gpr_log(GPR_DEBUG,
|
1774
1884
|
"RouteAction HashPolicy contains policy specifier "
|
@@ -1787,7 +1897,7 @@ grpc_error_handle RouteActionParse(const EncodingContext& context,
|
|
1787
1897
|
const envoy_config_route_v3_RetryPolicy* retry_policy =
|
1788
1898
|
envoy_config_route_v3_RouteAction_retry_policy(route_action);
|
1789
1899
|
if (retry_policy != nullptr) {
|
1790
|
-
absl::optional<XdsApi::
|
1900
|
+
absl::optional<XdsApi::RetryPolicy> retry;
|
1791
1901
|
grpc_error_handle error = RetryPolicyParse(context, retry_policy, &retry);
|
1792
1902
|
if (error != GRPC_ERROR_NONE) return error;
|
1793
1903
|
route->retry_policy = retry;
|
@@ -1837,7 +1947,7 @@ grpc_error_handle RouteConfigParse(
|
|
1837
1947
|
if (error != GRPC_ERROR_NONE) return error;
|
1838
1948
|
}
|
1839
1949
|
// Parse retry policy.
|
1840
|
-
absl::optional<XdsApi::
|
1950
|
+
absl::optional<XdsApi::RetryPolicy> virtual_host_retry_policy;
|
1841
1951
|
const envoy_config_route_v3_RetryPolicy* retry_policy =
|
1842
1952
|
envoy_config_route_v3_VirtualHost_retry_policy(virtual_hosts[i]);
|
1843
1953
|
if (retry_policy != nullptr) {
|
@@ -1876,11 +1986,21 @@ grpc_error_handle RouteConfigParse(
|
|
1876
1986
|
if (error != GRPC_ERROR_NONE) return error;
|
1877
1987
|
error = RouteRuntimeFractionParse(match, &route);
|
1878
1988
|
if (error != GRPC_ERROR_NONE) return error;
|
1879
|
-
|
1880
|
-
|
1881
|
-
|
1882
|
-
|
1883
|
-
|
1989
|
+
if (envoy_config_route_v3_Route_has_route(routes[j])) {
|
1990
|
+
route.action.emplace<XdsApi::Route::RouteAction>();
|
1991
|
+
auto& route_action =
|
1992
|
+
absl::get<XdsApi::Route::RouteAction>(route.action);
|
1993
|
+
error =
|
1994
|
+
RouteActionParse(context, routes[j], &route_action, &ignore_route);
|
1995
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1996
|
+
if (ignore_route) continue;
|
1997
|
+
if (route_action.retry_policy == absl::nullopt &&
|
1998
|
+
retry_policy != nullptr) {
|
1999
|
+
route_action.retry_policy = virtual_host_retry_policy;
|
2000
|
+
}
|
2001
|
+
} else if (envoy_config_route_v3_Route_has_non_forwarding_action(
|
2002
|
+
routes[j])) {
|
2003
|
+
route.action.emplace<XdsApi::Route::NonForwardingAction>();
|
1884
2004
|
}
|
1885
2005
|
if (context.use_v3) {
|
1886
2006
|
grpc_error_handle error = ParseTypedPerFilterConfig<
|
@@ -2237,32 +2357,47 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
2237
2357
|
absl::StrFormat("Filter %s is not supported on %s", filter_type,
|
2238
2358
|
is_client ? "clients" : "servers"));
|
2239
2359
|
}
|
2240
|
-
|
2360
|
+
absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
|
2361
|
+
filter_impl->GenerateFilterConfig(google_protobuf_Any_value(any),
|
2362
|
+
context.arena);
|
2363
|
+
if (!filter_config.ok()) {
|
2364
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
2365
|
+
"filter config for type ", filter_type,
|
2366
|
+
" failed to parse: ", filter_config.status().ToString()));
|
2367
|
+
}
|
2368
|
+
http_connection_manager->http_filters.emplace_back(
|
2369
|
+
XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter{
|
2370
|
+
std::string(name), std::move(*filter_config)});
|
2371
|
+
}
|
2372
|
+
if (http_connection_manager->http_filters.empty()) {
|
2373
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2374
|
+
"Expected at least one HTTP filter");
|
2375
|
+
}
|
2376
|
+
// Make sure that the last filter is terminal and non-last filters are
|
2377
|
+
// non-terminal. Note that this check is being performed in a separate loop
|
2378
|
+
// to take care of the case where there are two terminal filters in the list
|
2379
|
+
// out of which only one gets added in the final list.
|
2380
|
+
for (const auto& http_filter : http_connection_manager->http_filters) {
|
2381
|
+
const XdsHttpFilterImpl* filter_impl =
|
2382
|
+
XdsHttpFilterRegistry::GetFilterForType(
|
2383
|
+
http_filter.config.config_proto_type_name);
|
2384
|
+
if (&http_filter != &http_connection_manager->http_filters.back()) {
|
2241
2385
|
// Filters before the last filter must not be terminal.
|
2242
2386
|
if (filter_impl->IsTerminalFilter()) {
|
2243
2387
|
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2244
|
-
absl::StrCat("terminal filter for config type ",
|
2388
|
+
absl::StrCat("terminal filter for config type ",
|
2389
|
+
http_filter.config.config_proto_type_name,
|
2245
2390
|
" must be the last filter in the chain"));
|
2246
2391
|
}
|
2247
2392
|
} else {
|
2248
2393
|
// The last filter must be terminal.
|
2249
2394
|
if (!filter_impl->IsTerminalFilter()) {
|
2250
2395
|
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2251
|
-
absl::StrCat("non-terminal filter for config type ",
|
2396
|
+
absl::StrCat("non-terminal filter for config type ",
|
2397
|
+
http_filter.config.config_proto_type_name,
|
2252
2398
|
" is the last filter in the chain"));
|
2253
2399
|
}
|
2254
2400
|
}
|
2255
|
-
absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
|
2256
|
-
filter_impl->GenerateFilterConfig(google_protobuf_Any_value(any),
|
2257
|
-
context.arena);
|
2258
|
-
if (!filter_config.ok()) {
|
2259
|
-
return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
2260
|
-
"filter config for type ", filter_type,
|
2261
|
-
" failed to parse: ", filter_config.status().ToString()));
|
2262
|
-
}
|
2263
|
-
http_connection_manager->http_filters.emplace_back(
|
2264
|
-
XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter{
|
2265
|
-
std::string(name), std::move(*filter_config)});
|
2266
2401
|
}
|
2267
2402
|
} else {
|
2268
2403
|
// If using a v2 config, we just hard-code a list containing only the
|
@@ -2273,7 +2408,10 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
2273
2408
|
XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter{
|
2274
2409
|
"router", {kXdsHttpRouterFilterConfigName, Json()}});
|
2275
2410
|
}
|
2276
|
-
|
2411
|
+
// Guarding parsing of RouteConfig on the server side with the environmental
|
2412
|
+
// variable since that's the first feature on the server side that will be
|
2413
|
+
// using this.
|
2414
|
+
if (is_client || XdsRbacEnabled()) {
|
2277
2415
|
// Found inlined route_config. Parse it to find the cluster_name.
|
2278
2416
|
if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_has_route_config(
|
2279
2417
|
http_connection_manager_proto)) {
|
@@ -2508,6 +2646,8 @@ grpc_error_handle FilterChainParse(
|
|
2508
2646
|
filter_chain_match, &filter_chain->filter_chain_match);
|
2509
2647
|
if (error != GRPC_ERROR_NONE) errors.push_back(error);
|
2510
2648
|
}
|
2649
|
+
filter_chain->filter_chain_data =
|
2650
|
+
std::make_shared<XdsApi::LdsUpdate::FilterChainData>();
|
2511
2651
|
// Parse the filters list. Currently we only support HttpConnectionManager.
|
2512
2652
|
size_t size = 0;
|
2513
2653
|
auto* filters =
|
@@ -2543,8 +2683,6 @@ grpc_error_handle FilterChainParse(
|
|
2543
2683
|
"Could not parse HttpConnectionManager config from filter "
|
2544
2684
|
"typed_config"));
|
2545
2685
|
} else {
|
2546
|
-
filter_chain->filter_chain_data =
|
2547
|
-
std::make_shared<XdsApi::LdsUpdate::FilterChainData>();
|
2548
2686
|
grpc_error_handle error = HttpConnectionManagerParse(
|
2549
2687
|
false /* is_client */, context, http_connection_manager, is_v2,
|
2550
2688
|
&filter_chain->filter_chain_data->http_connection_manager);
|
@@ -3277,7 +3415,7 @@ grpc_error_handle DropParseAndAppend(
|
|
3277
3415
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unknown denominator type");
|
3278
3416
|
}
|
3279
3417
|
// Cap numerator to 1000000.
|
3280
|
-
numerator =
|
3418
|
+
numerator = std::min(numerator, 1000000u);
|
3281
3419
|
drop_config->AddCategory(std::move(category), numerator);
|
3282
3420
|
return GRPC_ERROR_NONE;
|
3283
3421
|
}
|
@@ -3351,10 +3489,13 @@ grpc_error_handle AdsResponseParse(
|
|
3351
3489
|
ResourceTypeSelectorFunction resource_type_selector_function,
|
3352
3490
|
ProtoLogFunction proto_log_function,
|
3353
3491
|
ResourceParseFunction resource_parse_function,
|
3354
|
-
const envoy_service_discovery_v3_DiscoveryResponse* response,
|
3355
3492
|
const char* resource_type_string,
|
3356
|
-
const
|
3357
|
-
|
3493
|
+
const envoy_service_discovery_v3_DiscoveryResponse* response,
|
3494
|
+
const std::map<absl::string_view /*authority*/,
|
3495
|
+
std::set<absl::string_view /*name*/>>&
|
3496
|
+
subscribed_resource_names,
|
3497
|
+
UpdateMap* update_map,
|
3498
|
+
std::set<XdsApi::ResourceName>* resource_names_failed) {
|
3358
3499
|
std::vector<grpc_error_handle> errors;
|
3359
3500
|
// Get the resources from the response.
|
3360
3501
|
size_t size;
|
@@ -3385,15 +3526,23 @@ grpc_error_handle AdsResponseParse(
|
|
3385
3526
|
// Check the resource name. Ignore unexpected names.
|
3386
3527
|
std::string resource_name =
|
3387
3528
|
UpbStringToStdString(proto_resource_name_function(resource));
|
3388
|
-
|
3389
|
-
|
3529
|
+
auto resource_name_status = ParseResourceNameInternal(
|
3530
|
+
resource_name, resource_type_selector_function);
|
3531
|
+
if (!resource_name_status.ok()) {
|
3532
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
3533
|
+
"Cannot parse xDS resource name \"", resource_name, "\"")));
|
3534
|
+
continue;
|
3535
|
+
}
|
3536
|
+
auto iter = subscribed_resource_names.find(resource_name_status->authority);
|
3537
|
+
if (iter == subscribed_resource_names.end() ||
|
3538
|
+
iter->second.find(resource_name_status->id) == iter->second.end()) {
|
3390
3539
|
continue;
|
3391
3540
|
}
|
3392
3541
|
// Fail on duplicate resources.
|
3393
|
-
if (update_map->find(
|
3542
|
+
if (update_map->find(*resource_name_status) != update_map->end()) {
|
3394
3543
|
errors.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
3395
3544
|
absl::StrCat("duplicate resource name \"", resource_name, "\"")));
|
3396
|
-
resource_names_failed->insert(
|
3545
|
+
resource_names_failed->insert(*resource_name_status);
|
3397
3546
|
continue;
|
3398
3547
|
}
|
3399
3548
|
// Validate resource.
|
@@ -3405,10 +3554,10 @@ grpc_error_handle AdsResponseParse(
|
|
3405
3554
|
grpc_error_add_child(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
3406
3555
|
resource_name, ": validation error")),
|
3407
3556
|
error));
|
3408
|
-
resource_names_failed->insert(
|
3557
|
+
resource_names_failed->insert(*resource_name_status);
|
3409
3558
|
} else {
|
3410
3559
|
// Store result in update map, in both validated and serialized form.
|
3411
|
-
auto& resource_data = (*update_map)[
|
3560
|
+
auto& resource_data = (*update_map)[*resource_name_status];
|
3412
3561
|
resource_data.resource = std::move(update);
|
3413
3562
|
resource_data.serialized_proto =
|
3414
3563
|
UpbStringToStdString(serialized_resource);
|
@@ -3455,10 +3604,18 @@ upb_strview EdsResourceName(
|
|
3455
3604
|
|
3456
3605
|
XdsApi::AdsParseResult XdsApi::ParseAdsResponse(
|
3457
3606
|
const XdsBootstrap::XdsServer& server, const grpc_slice& encoded_response,
|
3458
|
-
const std::
|
3459
|
-
|
3460
|
-
|
3461
|
-
const std::
|
3607
|
+
const std::map<absl::string_view /*authority*/,
|
3608
|
+
std::set<absl::string_view /*name*/>>&
|
3609
|
+
subscribed_listener_names,
|
3610
|
+
const std::map<absl::string_view /*authority*/,
|
3611
|
+
std::set<absl::string_view /*name*/>>&
|
3612
|
+
subscribed_route_config_names,
|
3613
|
+
const std::map<absl::string_view /*authority*/,
|
3614
|
+
std::set<absl::string_view /*name*/>>&
|
3615
|
+
subscribed_cluster_names,
|
3616
|
+
const std::map<absl::string_view /*authority*/,
|
3617
|
+
std::set<absl::string_view /*name*/>>&
|
3618
|
+
subscribed_eds_service_names) {
|
3462
3619
|
AdsParseResult result;
|
3463
3620
|
upb::Arena arena;
|
3464
3621
|
const EncodingContext context = {client_,
|
@@ -3493,27 +3650,27 @@ XdsApi::AdsParseResult XdsApi::ParseAdsResponse(
|
|
3493
3650
|
if (IsLds(result.type_url)) {
|
3494
3651
|
result.parse_error = AdsResponseParse(
|
3495
3652
|
context, envoy_config_listener_v3_Listener_parse, LdsResourceName,
|
3496
|
-
|
3497
|
-
|
3653
|
+
IsLdsInternal, MaybeLogListener, LdsResourceParse, "LDS", response,
|
3654
|
+
subscribed_listener_names, &result.lds_update_map,
|
3498
3655
|
&result.resource_names_failed);
|
3499
3656
|
} else if (IsRds(result.type_url)) {
|
3500
3657
|
result.parse_error = AdsResponseParse(
|
3501
3658
|
context, envoy_config_route_v3_RouteConfiguration_parse,
|
3502
|
-
RdsResourceName,
|
3503
|
-
|
3659
|
+
RdsResourceName, IsRdsInternal, MaybeLogRouteConfiguration,
|
3660
|
+
RouteConfigParse, "RDS", response, subscribed_route_config_names,
|
3504
3661
|
&result.rds_update_map, &result.resource_names_failed);
|
3505
3662
|
} else if (IsCds(result.type_url)) {
|
3506
3663
|
result.parse_error = AdsResponseParse(
|
3507
|
-
context, envoy_config_cluster_v3_Cluster_parse, CdsResourceName,
|
3508
|
-
MaybeLogCluster, CdsResourceParse,
|
3509
|
-
|
3664
|
+
context, envoy_config_cluster_v3_Cluster_parse, CdsResourceName,
|
3665
|
+
IsCdsInternal, MaybeLogCluster, CdsResourceParse, "CDS", response,
|
3666
|
+
subscribed_cluster_names, &result.cds_update_map,
|
3510
3667
|
&result.resource_names_failed);
|
3511
3668
|
} else if (IsEds(result.type_url)) {
|
3512
3669
|
result.parse_error = AdsResponseParse(
|
3513
3670
|
context, envoy_config_endpoint_v3_ClusterLoadAssignment_parse,
|
3514
|
-
EdsResourceName,
|
3515
|
-
|
3516
|
-
&result.resource_names_failed);
|
3671
|
+
EdsResourceName, IsEdsInternal, MaybeLogClusterLoadAssignment,
|
3672
|
+
EdsResourceParse, "EDS", response, subscribed_eds_service_names,
|
3673
|
+
&result.eds_update_map, &result.resource_names_failed);
|
3517
3674
|
}
|
3518
3675
|
return result;
|
3519
3676
|
}
|
@@ -3726,6 +3883,7 @@ grpc_error_handle XdsApi::ParseLrsResponse(
|
|
3726
3883
|
}
|
3727
3884
|
|
3728
3885
|
namespace {
|
3886
|
+
|
3729
3887
|
google_protobuf_Timestamp* GrpcMillisToTimestamp(const EncodingContext& context,
|
3730
3888
|
grpc_millis value) {
|
3731
3889
|
google_protobuf_Timestamp* timestamp =
|
@@ -3736,218 +3894,6 @@ google_protobuf_Timestamp* GrpcMillisToTimestamp(const EncodingContext& context,
|
|
3736
3894
|
return timestamp;
|
3737
3895
|
}
|
3738
3896
|
|
3739
|
-
envoy_admin_v3_UpdateFailureState* CreateUpdateFailureStateUpb(
|
3740
|
-
const EncodingContext& context,
|
3741
|
-
const XdsApi::ResourceMetadata* resource_metadata) {
|
3742
|
-
auto* update_failure_state =
|
3743
|
-
envoy_admin_v3_UpdateFailureState_new(context.arena);
|
3744
|
-
envoy_admin_v3_UpdateFailureState_set_details(
|
3745
|
-
update_failure_state,
|
3746
|
-
StdStringToUpbString(resource_metadata->failed_details));
|
3747
|
-
envoy_admin_v3_UpdateFailureState_set_version_info(
|
3748
|
-
update_failure_state,
|
3749
|
-
StdStringToUpbString(resource_metadata->failed_version));
|
3750
|
-
envoy_admin_v3_UpdateFailureState_set_last_update_attempt(
|
3751
|
-
update_failure_state,
|
3752
|
-
GrpcMillisToTimestamp(context, resource_metadata->failed_update_time));
|
3753
|
-
return update_failure_state;
|
3754
|
-
}
|
3755
|
-
|
3756
|
-
void DumpLdsConfig(const EncodingContext& context,
|
3757
|
-
const XdsApi::ResourceTypeMetadata& resource_type_metadata,
|
3758
|
-
envoy_service_status_v3_PerXdsConfig* per_xds_config) {
|
3759
|
-
upb_strview kLdsTypeUrlUpb = upb_strview_makez(XdsApi::kLdsTypeUrl);
|
3760
|
-
auto* listener_config_dump =
|
3761
|
-
envoy_service_status_v3_PerXdsConfig_mutable_listener_config(
|
3762
|
-
per_xds_config, context.arena);
|
3763
|
-
envoy_admin_v3_ListenersConfigDump_set_version_info(
|
3764
|
-
listener_config_dump,
|
3765
|
-
StdStringToUpbString(resource_type_metadata.version));
|
3766
|
-
for (auto& p : resource_type_metadata.resource_metadata_map) {
|
3767
|
-
absl::string_view name = p.first;
|
3768
|
-
const XdsApi::ResourceMetadata* meta = p.second;
|
3769
|
-
const upb_strview name_upb = StdStringToUpbString(name);
|
3770
|
-
auto* dynamic_listener =
|
3771
|
-
envoy_admin_v3_ListenersConfigDump_add_dynamic_listeners(
|
3772
|
-
listener_config_dump, context.arena);
|
3773
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListener_set_name(
|
3774
|
-
dynamic_listener, name_upb);
|
3775
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListener_set_client_status(
|
3776
|
-
dynamic_listener, meta->client_status);
|
3777
|
-
if (!meta->serialized_proto.empty()) {
|
3778
|
-
// Set in-effective listeners
|
3779
|
-
auto* dynamic_listener_state =
|
3780
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListener_mutable_active_state(
|
3781
|
-
dynamic_listener, context.arena);
|
3782
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListenerState_set_version_info(
|
3783
|
-
dynamic_listener_state, StdStringToUpbString(meta->version));
|
3784
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListenerState_set_last_updated(
|
3785
|
-
dynamic_listener_state,
|
3786
|
-
GrpcMillisToTimestamp(context, meta->update_time));
|
3787
|
-
auto* listener_any =
|
3788
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListenerState_mutable_listener(
|
3789
|
-
dynamic_listener_state, context.arena);
|
3790
|
-
google_protobuf_Any_set_type_url(listener_any, kLdsTypeUrlUpb);
|
3791
|
-
google_protobuf_Any_set_value(
|
3792
|
-
listener_any, StdStringToUpbString(meta->serialized_proto));
|
3793
|
-
}
|
3794
|
-
if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
|
3795
|
-
// Set error_state if NACKED
|
3796
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListener_set_error_state(
|
3797
|
-
dynamic_listener, CreateUpdateFailureStateUpb(context, meta));
|
3798
|
-
}
|
3799
|
-
}
|
3800
|
-
}
|
3801
|
-
|
3802
|
-
void DumpRdsConfig(const EncodingContext& context,
|
3803
|
-
const XdsApi::ResourceTypeMetadata& resource_type_metadata,
|
3804
|
-
envoy_service_status_v3_PerXdsConfig* per_xds_config) {
|
3805
|
-
upb_strview kRdsTypeUrlUpb = upb_strview_makez(XdsApi::kRdsTypeUrl);
|
3806
|
-
auto* route_config_dump =
|
3807
|
-
envoy_service_status_v3_PerXdsConfig_mutable_route_config(per_xds_config,
|
3808
|
-
context.arena);
|
3809
|
-
for (auto& p : resource_type_metadata.resource_metadata_map) {
|
3810
|
-
absl::string_view name = p.first;
|
3811
|
-
const XdsApi::ResourceMetadata* meta = p.second;
|
3812
|
-
const upb_strview name_upb = StdStringToUpbString(name);
|
3813
|
-
auto* dynamic_route_config =
|
3814
|
-
envoy_admin_v3_RoutesConfigDump_add_dynamic_route_configs(
|
3815
|
-
route_config_dump, context.arena);
|
3816
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_client_status(
|
3817
|
-
dynamic_route_config, meta->client_status);
|
3818
|
-
auto* route_config_any =
|
3819
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_mutable_route_config(
|
3820
|
-
dynamic_route_config, context.arena);
|
3821
|
-
if (!meta->serialized_proto.empty()) {
|
3822
|
-
// Set in-effective route configs
|
3823
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_version_info(
|
3824
|
-
dynamic_route_config, StdStringToUpbString(meta->version));
|
3825
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_last_updated(
|
3826
|
-
dynamic_route_config,
|
3827
|
-
GrpcMillisToTimestamp(context, meta->update_time));
|
3828
|
-
google_protobuf_Any_set_type_url(route_config_any, kRdsTypeUrlUpb);
|
3829
|
-
google_protobuf_Any_set_value(
|
3830
|
-
route_config_any, StdStringToUpbString(meta->serialized_proto));
|
3831
|
-
} else {
|
3832
|
-
// If there isn't a working route config, we still need to print the
|
3833
|
-
// name.
|
3834
|
-
auto* route_config =
|
3835
|
-
envoy_config_route_v3_RouteConfiguration_new(context.arena);
|
3836
|
-
envoy_config_route_v3_RouteConfiguration_set_name(route_config, name_upb);
|
3837
|
-
size_t length;
|
3838
|
-
char* bytes = envoy_config_route_v3_RouteConfiguration_serialize(
|
3839
|
-
route_config, context.arena, &length);
|
3840
|
-
google_protobuf_Any_set_type_url(route_config_any, kRdsTypeUrlUpb);
|
3841
|
-
google_protobuf_Any_set_value(route_config_any,
|
3842
|
-
upb_strview_make(bytes, length));
|
3843
|
-
}
|
3844
|
-
if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
|
3845
|
-
// Set error_state if NACKED
|
3846
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_error_state(
|
3847
|
-
dynamic_route_config, CreateUpdateFailureStateUpb(context, meta));
|
3848
|
-
}
|
3849
|
-
}
|
3850
|
-
}
|
3851
|
-
|
3852
|
-
void DumpCdsConfig(const EncodingContext& context,
|
3853
|
-
const XdsApi::ResourceTypeMetadata& resource_type_metadata,
|
3854
|
-
envoy_service_status_v3_PerXdsConfig* per_xds_config) {
|
3855
|
-
upb_strview kCdsTypeUrlUpb = upb_strview_makez(XdsApi::kCdsTypeUrl);
|
3856
|
-
auto* cluster_config_dump =
|
3857
|
-
envoy_service_status_v3_PerXdsConfig_mutable_cluster_config(
|
3858
|
-
per_xds_config, context.arena);
|
3859
|
-
envoy_admin_v3_ClustersConfigDump_set_version_info(
|
3860
|
-
cluster_config_dump,
|
3861
|
-
StdStringToUpbString(resource_type_metadata.version));
|
3862
|
-
for (auto& p : resource_type_metadata.resource_metadata_map) {
|
3863
|
-
absl::string_view name = p.first;
|
3864
|
-
const XdsApi::ResourceMetadata* meta = p.second;
|
3865
|
-
const upb_strview name_upb = StdStringToUpbString(name);
|
3866
|
-
auto* dynamic_cluster =
|
3867
|
-
envoy_admin_v3_ClustersConfigDump_add_dynamic_active_clusters(
|
3868
|
-
cluster_config_dump, context.arena);
|
3869
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_client_status(
|
3870
|
-
dynamic_cluster, meta->client_status);
|
3871
|
-
auto* cluster_any =
|
3872
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_mutable_cluster(
|
3873
|
-
dynamic_cluster, context.arena);
|
3874
|
-
if (!meta->serialized_proto.empty()) {
|
3875
|
-
// Set in-effective clusters
|
3876
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_version_info(
|
3877
|
-
dynamic_cluster, StdStringToUpbString(meta->version));
|
3878
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_last_updated(
|
3879
|
-
dynamic_cluster, GrpcMillisToTimestamp(context, meta->update_time));
|
3880
|
-
google_protobuf_Any_set_type_url(cluster_any, kCdsTypeUrlUpb);
|
3881
|
-
google_protobuf_Any_set_value(
|
3882
|
-
cluster_any, StdStringToUpbString(meta->serialized_proto));
|
3883
|
-
} else {
|
3884
|
-
// If there isn't a working cluster, we still need to print the name.
|
3885
|
-
auto* cluster = envoy_config_cluster_v3_Cluster_new(context.arena);
|
3886
|
-
envoy_config_cluster_v3_Cluster_set_name(cluster, name_upb);
|
3887
|
-
size_t length;
|
3888
|
-
char* bytes = envoy_config_cluster_v3_Cluster_serialize(
|
3889
|
-
cluster, context.arena, &length);
|
3890
|
-
google_protobuf_Any_set_type_url(cluster_any, kCdsTypeUrlUpb);
|
3891
|
-
google_protobuf_Any_set_value(cluster_any,
|
3892
|
-
upb_strview_make(bytes, length));
|
3893
|
-
}
|
3894
|
-
if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
|
3895
|
-
// Set error_state if NACKED
|
3896
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_error_state(
|
3897
|
-
dynamic_cluster, CreateUpdateFailureStateUpb(context, meta));
|
3898
|
-
}
|
3899
|
-
}
|
3900
|
-
}
|
3901
|
-
|
3902
|
-
void DumpEdsConfig(const EncodingContext& context,
|
3903
|
-
const XdsApi::ResourceTypeMetadata& resource_type_metadata,
|
3904
|
-
envoy_service_status_v3_PerXdsConfig* per_xds_config) {
|
3905
|
-
upb_strview kEdsTypeUrlUpb = upb_strview_makez(XdsApi::kEdsTypeUrl);
|
3906
|
-
auto* endpoint_config_dump =
|
3907
|
-
envoy_service_status_v3_PerXdsConfig_mutable_endpoint_config(
|
3908
|
-
per_xds_config, context.arena);
|
3909
|
-
for (auto& p : resource_type_metadata.resource_metadata_map) {
|
3910
|
-
absl::string_view name = p.first;
|
3911
|
-
const XdsApi::ResourceMetadata* meta = p.second;
|
3912
|
-
const upb_strview name_upb = StdStringToUpbString(name);
|
3913
|
-
auto* dynamic_endpoint =
|
3914
|
-
envoy_admin_v3_EndpointsConfigDump_add_dynamic_endpoint_configs(
|
3915
|
-
endpoint_config_dump, context.arena);
|
3916
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_client_status(
|
3917
|
-
dynamic_endpoint, meta->client_status);
|
3918
|
-
auto* endpoint_any =
|
3919
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_mutable_endpoint_config(
|
3920
|
-
dynamic_endpoint, context.arena);
|
3921
|
-
if (!meta->serialized_proto.empty()) {
|
3922
|
-
// Set in-effective endpoints
|
3923
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_version_info(
|
3924
|
-
dynamic_endpoint, StdStringToUpbString(meta->version));
|
3925
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_last_updated(
|
3926
|
-
dynamic_endpoint, GrpcMillisToTimestamp(context, meta->update_time));
|
3927
|
-
google_protobuf_Any_set_type_url(endpoint_any, kEdsTypeUrlUpb);
|
3928
|
-
google_protobuf_Any_set_value(
|
3929
|
-
endpoint_any, StdStringToUpbString(meta->serialized_proto));
|
3930
|
-
} else {
|
3931
|
-
// If there isn't a working endpoint, we still need to print the name.
|
3932
|
-
auto* cluster_load_assignment =
|
3933
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_new(context.arena);
|
3934
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_set_cluster_name(
|
3935
|
-
cluster_load_assignment, name_upb);
|
3936
|
-
size_t length;
|
3937
|
-
char* bytes = envoy_config_endpoint_v3_ClusterLoadAssignment_serialize(
|
3938
|
-
cluster_load_assignment, context.arena, &length);
|
3939
|
-
google_protobuf_Any_set_type_url(endpoint_any, kEdsTypeUrlUpb);
|
3940
|
-
google_protobuf_Any_set_value(endpoint_any,
|
3941
|
-
upb_strview_make(bytes, length));
|
3942
|
-
}
|
3943
|
-
if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
|
3944
|
-
// Set error_state if NACKED
|
3945
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_error_state(
|
3946
|
-
dynamic_endpoint, CreateUpdateFailureStateUpb(context, meta));
|
3947
|
-
}
|
3948
|
-
}
|
3949
|
-
}
|
3950
|
-
|
3951
3897
|
} // namespace
|
3952
3898
|
|
3953
3899
|
std::string XdsApi::AssembleClientConfig(
|
@@ -3963,33 +3909,50 @@ std::string XdsApi::AssembleClientConfig(
|
|
3963
3909
|
arena.ptr(), true, certificate_provider_definition_map_};
|
3964
3910
|
PopulateNode(context, node_, build_version_, user_agent_name_,
|
3965
3911
|
user_agent_version_, node);
|
3966
|
-
// Dump each
|
3967
|
-
for (auto& p : resource_type_metadata_map) {
|
3912
|
+
// Dump each resource.
|
3913
|
+
for (const auto& p : resource_type_metadata_map) {
|
3968
3914
|
absl::string_view type_url = p.first;
|
3969
|
-
const
|
3970
|
-
|
3971
|
-
|
3972
|
-
|
3973
|
-
|
3974
|
-
|
3975
|
-
|
3976
|
-
|
3977
|
-
|
3978
|
-
|
3979
|
-
|
3980
|
-
|
3981
|
-
|
3982
|
-
|
3983
|
-
|
3984
|
-
|
3985
|
-
|
3986
|
-
|
3987
|
-
|
3988
|
-
|
3989
|
-
|
3990
|
-
|
3991
|
-
|
3992
|
-
|
3915
|
+
const ResourceMetadataMap& resource_metadata_map = p.second;
|
3916
|
+
for (const auto& q : resource_metadata_map) {
|
3917
|
+
absl::string_view resource_name = q.first;
|
3918
|
+
const ResourceMetadata& metadata = *q.second;
|
3919
|
+
auto* entry =
|
3920
|
+
envoy_service_status_v3_ClientConfig_add_generic_xds_configs(
|
3921
|
+
client_config, context.arena);
|
3922
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_type_url(
|
3923
|
+
entry, StdStringToUpbString(type_url));
|
3924
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_name(
|
3925
|
+
entry, StdStringToUpbString(resource_name));
|
3926
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_client_status(
|
3927
|
+
entry, metadata.client_status);
|
3928
|
+
if (!metadata.serialized_proto.empty()) {
|
3929
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_version_info(
|
3930
|
+
entry, StdStringToUpbString(metadata.version));
|
3931
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_last_updated(
|
3932
|
+
entry, GrpcMillisToTimestamp(context, metadata.update_time));
|
3933
|
+
auto* any_field =
|
3934
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_mutable_xds_config(
|
3935
|
+
entry, context.arena);
|
3936
|
+
google_protobuf_Any_set_type_url(any_field,
|
3937
|
+
StdStringToUpbString(type_url));
|
3938
|
+
google_protobuf_Any_set_value(
|
3939
|
+
any_field, StdStringToUpbString(metadata.serialized_proto));
|
3940
|
+
}
|
3941
|
+
if (metadata.client_status == XdsApi::ResourceMetadata::NACKED) {
|
3942
|
+
auto* update_failure_state =
|
3943
|
+
envoy_admin_v3_UpdateFailureState_new(context.arena);
|
3944
|
+
envoy_admin_v3_UpdateFailureState_set_details(
|
3945
|
+
update_failure_state,
|
3946
|
+
StdStringToUpbString(metadata.failed_details));
|
3947
|
+
envoy_admin_v3_UpdateFailureState_set_version_info(
|
3948
|
+
update_failure_state,
|
3949
|
+
StdStringToUpbString(metadata.failed_version));
|
3950
|
+
envoy_admin_v3_UpdateFailureState_set_last_update_attempt(
|
3951
|
+
update_failure_state,
|
3952
|
+
GrpcMillisToTimestamp(context, metadata.failed_update_time));
|
3953
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_error_state(
|
3954
|
+
entry, update_failure_state);
|
3955
|
+
}
|
3993
3956
|
}
|
3994
3957
|
}
|
3995
3958
|
// Serialize the upb message to bytes
|