grpc 1.37.1 → 1.40.0.pre1
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 +112 -59
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/endpoint_config.h +48 -0
- data/include/grpc/event_engine/event_engine.h +330 -0
- data/include/grpc/event_engine/port.h +41 -0
- data/include/grpc/event_engine/slice_allocator.h +66 -0
- data/include/grpc/grpc.h +11 -4
- data/include/grpc/grpc_security.h +32 -0
- data/include/grpc/grpc_security_constants.h +15 -0
- data/include/grpc/impl/codegen/grpc_types.h +44 -19
- data/include/grpc/impl/codegen/port_platform.h +46 -0
- data/include/grpc/module.modulemap +14 -14
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
- data/src/core/ext/filters/client_channel/client_channel.cc +975 -3282
- data/src/core/ext/filters/client_channel/client_channel.h +513 -55
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
- data/src/core/ext/filters/client_channel/config_selector.h +20 -7
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +28 -27
- data/src/core/ext/filters/client_channel/health/health_check_client.h +30 -29
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
- data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +53 -51
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -23
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +16 -16
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +734 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -17
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +17 -20
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +53 -65
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +36 -44
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +33 -55
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +151 -163
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -16
- data/src/core/ext/filters/client_channel/lb_policy.h +70 -46
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -12
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +20 -13
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +158 -102
- data/src/core/ext/filters/client_channel/resolver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
- data/src/core/ext/filters/client_channel/retry_filter.cc +2598 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +316 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
- data/src/core/ext/filters/client_channel/server_address.cc +1 -1
- data/src/core/ext/filters/client_channel/service_config.cc +15 -14
- data/src/core/ext/filters/client_channel/service_config.h +7 -6
- data/src/core/ext/filters/client_channel/service_config_call_data.h +45 -5
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
- data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
- data/src/core/ext/filters/client_channel/subchannel.h +7 -6
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
- data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +33 -23
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
- data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
- data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
- data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +49 -46
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +66 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +74 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +141 -126
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +9 -9
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +12 -12
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +15 -16
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +11 -10
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +652 -736
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +195 -74
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +33 -28
- data/src/core/ext/transport/chttp2/transport/parsing.cc +129 -106
- data/src/core/ext/transport/chttp2/transport/varint.cc +6 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +56 -35
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +180 -76
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -27
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +97 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +45 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +67 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +66 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +227 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +121 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +90 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +32 -24
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +120 -73
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +4 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +171 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +8 -6
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +27 -19
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +24 -7
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +57 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +29 -17
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +72 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +4 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -5
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +15 -11
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +85 -43
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +274 -91
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +11 -8
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +30 -13
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +33 -5
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +115 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +181 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +1 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +82 -66
- data/src/core/ext/upb-generated/validate/validate.upb.h +220 -124
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +15 -7
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +53 -52
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +318 -277
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +437 -410
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +198 -170
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +219 -163
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +15 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +29 -25
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +135 -125
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +131 -123
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +32 -24
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +69 -55
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +684 -664
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +13 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +13 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +441 -375
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +122 -114
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +112 -79
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +35 -32
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +182 -160
- data/src/core/ext/xds/certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
- data/src/core/ext/xds/xds_api.cc +665 -317
- data/src/core/ext/xds/xds_api.h +52 -14
- data/src/core/ext/xds/xds_bootstrap.cc +101 -160
- data/src/core/ext/xds/xds_bootstrap.h +19 -24
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
- data/src/core/ext/xds/xds_certificate_provider.h +4 -4
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_client.cc +370 -215
- data/src/core/ext/xds/xds_client.h +38 -28
- data/src/core/ext/xds/xds_client_stats.h +3 -2
- data/src/core/ext/xds/xds_http_filters.cc +3 -2
- data/src/core/ext/xds/xds_http_filters.h +3 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
- data/src/core/lib/channel/call_tracer.h +85 -0
- data/src/core/lib/channel/channel_stack.cc +10 -9
- data/src/core/lib/channel/channel_stack.h +11 -10
- data/src/core/lib/channel/channel_stack_builder.cc +2 -2
- data/src/core/lib/channel/channel_stack_builder.h +1 -1
- data/src/core/lib/channel/channelz.cc +21 -13
- data/src/core/lib/channel/channelz.h +3 -0
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/context.h +3 -0
- data/src/core/lib/channel/handshaker.cc +7 -6
- data/src/core/lib/channel/handshaker.h +5 -5
- data/src/core/lib/channel/status_util.h +4 -0
- data/src/core/lib/compression/stream_compression.h +1 -1
- data/src/core/lib/compression/stream_compression_gzip.h +1 -1
- data/src/core/lib/compression/stream_compression_identity.h +1 -1
- data/src/core/lib/debug/stats.h +1 -1
- data/src/core/lib/event_engine/endpoint_config.cc +46 -0
- data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
- data/src/core/lib/event_engine/event_engine.cc +50 -0
- data/src/core/lib/event_engine/sockaddr.cc +40 -0
- data/src/core/lib/event_engine/sockaddr.h +44 -0
- data/src/core/lib/gpr/murmur_hash.cc +4 -2
- data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
- data/src/core/lib/gprpp/manual_constructor.h +1 -1
- data/src/core/lib/gprpp/orphanable.h +3 -3
- data/src/core/lib/gprpp/ref_counted.h +28 -14
- data/src/core/lib/gprpp/status_helper.cc +407 -0
- data/src/core/lib/gprpp/status_helper.h +183 -0
- data/src/core/lib/gprpp/sync.h +2 -30
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli_security_connector.cc +11 -7
- data/src/core/lib/http/parser.cc +16 -16
- data/src/core/lib/http/parser.h +4 -4
- data/src/core/lib/iomgr/buffer_list.cc +8 -10
- data/src/core/lib/iomgr/buffer_list.h +4 -5
- data/src/core/lib/iomgr/call_combiner.cc +15 -12
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
- data/src/core/lib/iomgr/cfstream_handle.h +1 -1
- data/src/core/lib/iomgr/closure.h +7 -6
- data/src/core/lib/iomgr/combiner.cc +14 -12
- data/src/core/lib/iomgr/combiner.h +2 -2
- data/src/core/lib/iomgr/endpoint.cc +1 -1
- data/src/core/lib/iomgr/endpoint.h +2 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
- data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +168 -61
- data/src/core/lib/iomgr/error.h +217 -106
- data/src/core/lib/iomgr/error_cfstream.cc +3 -2
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +5 -1
- data/src/core/lib/iomgr/ev_apple.cc +5 -5
- data/src/core/lib/iomgr/ev_apple.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
- data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
- data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
- data/src/core/lib/iomgr/ev_posix.cc +9 -8
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
- data/src/core/lib/iomgr/event_engine/closure.h +33 -0
- data/src/core/lib/iomgr/event_engine/endpoint.cc +192 -0
- data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
- data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
- data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
- data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
- data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
- data/src/core/lib/iomgr/event_engine/promise.h +51 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
- data/src/core/lib/iomgr/event_engine/tcp.cc +263 -0
- data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
- data/src/core/lib/iomgr/exec_ctx.cc +12 -4
- data/src/core/lib/iomgr/exec_ctx.h +4 -5
- data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
- data/src/core/lib/iomgr/executor/threadpool.h +2 -2
- data/src/core/lib/iomgr/executor.cc +8 -8
- data/src/core/lib/iomgr/executor.h +2 -2
- data/src/core/lib/iomgr/iomgr.cc +2 -2
- data/src/core/lib/iomgr/iomgr.h +1 -1
- data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
- data/src/core/lib/iomgr/iomgr_internal.h +3 -3
- data/src/core/lib/iomgr/iomgr_posix.cc +3 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
- data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +4 -4
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +5 -5
- data/src/core/lib/iomgr/lockfree_event.h +1 -1
- data/src/core/lib/iomgr/pollset.cc +5 -5
- data/src/core/lib/iomgr/pollset.h +9 -9
- data/src/core/lib/iomgr/pollset_custom.cc +7 -7
- data/src/core/lib/iomgr/pollset_custom.h +3 -1
- data/src/core/lib/iomgr/pollset_uv.cc +3 -1
- data/src/core/lib/iomgr/pollset_uv.h +5 -1
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +7 -5
- data/src/core/lib/iomgr/python_util.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +8 -4
- data/src/core/lib/iomgr/resolve_address.h +12 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
- data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +13 -10
- data/src/core/lib/iomgr/sockaddr.h +1 -0
- data/src/core/lib/iomgr/socket_mutator.cc +15 -2
- data/src/core/lib/iomgr/socket_mutator.h +26 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
- data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
- data/src/core/lib/iomgr/tcp_custom.cc +14 -16
- data/src/core/lib/iomgr/tcp_custom.h +13 -12
- data/src/core/lib/iomgr/tcp_posix.cc +78 -73
- data/src/core/lib/iomgr/tcp_posix.h +8 -0
- data/src/core/lib/iomgr/tcp_server.cc +6 -6
- data/src/core/lib/iomgr/tcp_server.h +12 -11
- data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
- data/src/core/lib/iomgr/tcp_server_posix.cc +29 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
- data/src/core/lib/iomgr/tcp_uv.cc +25 -23
- data/src/core/lib/iomgr/tcp_windows.cc +13 -13
- data/src/core/lib/iomgr/tcp_windows.h +2 -2
- data/src/core/lib/iomgr/timer.h +6 -1
- data/src/core/lib/iomgr/timer_custom.cc +2 -1
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +6 -6
- data/src/core/lib/iomgr/timer_manager.cc +1 -1
- data/src/core/lib/iomgr/udp_server.cc +21 -20
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
- data/src/core/lib/iomgr/work_serializer.h +17 -1
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_reader.cc +5 -6
- data/src/core/lib/matchers/matchers.cc +46 -58
- data/src/core/lib/matchers/matchers.h +30 -29
- data/src/core/lib/security/authorization/authorization_engine.h +44 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
- data/src/core/lib/security/authorization/evaluate_args.h +91 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.h +2 -2
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +68 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
- data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
- data/src/core/lib/security/security_connector/security_connector.h +9 -4
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +60 -76
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
- data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
- data/src/core/lib/security/transport/security_handshaker.cc +45 -36
- data/src/core/lib/security/transport/server_auth_filter.cc +17 -18
- data/src/core/lib/security/transport/tsi_error.cc +2 -1
- data/src/core/lib/security/transport/tsi_error.h +2 -1
- data/src/core/lib/security/util/json_util.cc +2 -2
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/slice/slice_internal.h +1 -0
- data/src/core/lib/surface/call.cc +72 -52
- data/src/core/lib/surface/call.h +13 -2
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +3 -2
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +68 -69
- data/src/core/lib/surface/completion_queue.h +3 -2
- data/src/core/lib/surface/completion_queue_factory.cc +1 -2
- data/src/core/lib/surface/init.cc +1 -3
- data/src/core/lib/surface/init.h +10 -1
- data/src/core/lib/surface/lame_client.cc +11 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +31 -23
- data/src/core/lib/surface/server.h +19 -18
- data/src/core/lib/surface/validate_metadata.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +3 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/byte_stream.cc +5 -5
- data/src/core/lib/transport/byte_stream.h +8 -8
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +21 -10
- data/src/core/lib/transport/error_utils.h +11 -5
- data/src/core/lib/transport/metadata_batch.cc +37 -37
- data/src/core/lib/transport/metadata_batch.h +19 -18
- data/src/core/lib/transport/transport.cc +4 -3
- data/src/core/lib/transport/transport.h +6 -4
- data/src/core/lib/transport/transport_op_string.cc +6 -6
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
- data/src/core/tsi/alts/crypt/gsec.h +6 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/ssl_transport_security.cc +32 -14
- data/src/core/tsi/ssl_transport_security.h +3 -4
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
- data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +37 -9
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
- data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
- data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
- data/third_party/abseil-cpp/absl/base/macros.h +11 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/port.h +0 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
- data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
- data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
- data/third_party/abseil-cpp/absl/status/status.cc +29 -22
- data/third_party/abseil-cpp/absl/status/status.h +81 -20
- data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
- data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
- data/third_party/abseil-cpp/absl/strings/match.h +16 -6
- data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
- data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
- data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
- data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
- data/third_party/abseil-cpp/absl/time/clock.h +2 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +26 -24
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- data/third_party/abseil-cpp/absl/types/variant.h +9 -4
- data/third_party/boringssl-with-bazel/err_data.c +483 -461
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +367 -315
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +31 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +20 -49
- data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -1
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
- data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -60
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +8 -31
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- data/third_party/xxhash/xxhash.h +77 -195
- metadata +116 -51
- data/src/core/lib/gpr/arena.h +0 -47
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
- data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -49,7 +49,7 @@ class CertificateProviderFactory {
|
|
49
49
|
virtual const char* name() const = 0;
|
50
50
|
|
51
51
|
virtual RefCountedPtr<Config> CreateCertificateProviderConfig(
|
52
|
-
const Json& config_json,
|
52
|
+
const Json& config_json, grpc_error_handle* error) = 0;
|
53
53
|
|
54
54
|
// Create a CertificateProvider instance from config.
|
55
55
|
virtual RefCountedPtr<grpc_tls_certificate_provider>
|
@@ -92,7 +92,7 @@ class CertificateProviderStore
|
|
92
92
|
};
|
93
93
|
|
94
94
|
RefCountedPtr<CertificateProviderWrapper> CreateCertificateProviderLocked(
|
95
|
-
absl::string_view key);
|
95
|
+
absl::string_view key) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
96
96
|
|
97
97
|
// Releases a previously created certificate provider from the certificate
|
98
98
|
// provider map if the value matches \a wrapper.
|
@@ -101,10 +101,10 @@ class CertificateProviderStore
|
|
101
101
|
|
102
102
|
Mutex mu_;
|
103
103
|
// Map of plugin configurations
|
104
|
-
PluginDefinitionMap plugin_config_map_;
|
104
|
+
const PluginDefinitionMap plugin_config_map_;
|
105
105
|
// Underlying map for the providers.
|
106
106
|
std::map<absl::string_view, CertificateProviderWrapper*>
|
107
|
-
certificate_providers_map_;
|
107
|
+
certificate_providers_map_ ABSL_GUARDED_BY(mu_);
|
108
108
|
};
|
109
109
|
|
110
110
|
} // namespace grpc_core
|
@@ -64,14 +64,14 @@ std::string FileWatcherCertificateProviderFactory::Config::ToString() const {
|
|
64
64
|
|
65
65
|
RefCountedPtr<FileWatcherCertificateProviderFactory::Config>
|
66
66
|
FileWatcherCertificateProviderFactory::Config::Parse(const Json& config_json,
|
67
|
-
|
67
|
+
grpc_error_handle* error) {
|
68
68
|
auto config = MakeRefCounted<FileWatcherCertificateProviderFactory::Config>();
|
69
69
|
if (config_json.type() != Json::Type::OBJECT) {
|
70
70
|
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
71
71
|
"error:config type should be OBJECT.");
|
72
72
|
return nullptr;
|
73
73
|
}
|
74
|
-
std::vector<
|
74
|
+
std::vector<grpc_error_handle> error_list;
|
75
75
|
ParseJsonObjectField(config_json.object_value(), "certificate_file",
|
76
76
|
&config->identity_cert_file_, &error_list, false);
|
77
77
|
ParseJsonObjectField(config_json.object_value(), "private_key_file",
|
@@ -112,7 +112,7 @@ const char* FileWatcherCertificateProviderFactory::name() const {
|
|
112
112
|
|
113
113
|
RefCountedPtr<CertificateProviderFactory::Config>
|
114
114
|
FileWatcherCertificateProviderFactory::CreateCertificateProviderConfig(
|
115
|
-
const Json& config_json,
|
115
|
+
const Json& config_json, grpc_error_handle* error) {
|
116
116
|
return FileWatcherCertificateProviderFactory::Config::Parse(config_json,
|
117
117
|
error);
|
118
118
|
}
|
@@ -31,7 +31,7 @@ class FileWatcherCertificateProviderFactory
|
|
31
31
|
class Config : public CertificateProviderFactory::Config {
|
32
32
|
public:
|
33
33
|
static RefCountedPtr<Config> Parse(const Json& config_json,
|
34
|
-
|
34
|
+
grpc_error_handle* error);
|
35
35
|
|
36
36
|
const char* name() const override;
|
37
37
|
|
@@ -58,7 +58,7 @@ class FileWatcherCertificateProviderFactory
|
|
58
58
|
|
59
59
|
RefCountedPtr<CertificateProviderFactory::Config>
|
60
60
|
CreateCertificateProviderConfig(const Json& config_json,
|
61
|
-
|
61
|
+
grpc_error_handle* error) override;
|
62
62
|
|
63
63
|
RefCountedPtr<grpc_tls_certificate_provider> CreateCertificateProvider(
|
64
64
|
RefCountedPtr<CertificateProviderFactory::Config> config) override;
|
data/src/core/ext/xds/xds_api.cc
CHANGED
@@ -90,13 +90,13 @@
|
|
90
90
|
#include <grpc/support/string_util.h>
|
91
91
|
|
92
92
|
#include "src/core/ext/xds/xds_api.h"
|
93
|
+
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
93
94
|
#include "src/core/lib/gpr/env.h"
|
94
95
|
#include "src/core/lib/gpr/string.h"
|
95
96
|
#include "src/core/lib/gpr/useful.h"
|
96
97
|
#include "src/core/lib/gprpp/host_port.h"
|
97
98
|
#include "src/core/lib/iomgr/error.h"
|
98
99
|
#include "src/core/lib/iomgr/sockaddr.h"
|
99
|
-
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
100
100
|
#include "src/core/lib/iomgr/socket_utils.h"
|
101
101
|
#include "src/core/lib/slice/slice_utils.h"
|
102
102
|
|
@@ -214,6 +214,25 @@ std::string XdsApi::Route::HashPolicy::ToString() const {
|
|
214
214
|
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
215
215
|
}
|
216
216
|
|
217
|
+
//
|
218
|
+
// XdsApi::Route::RetryPolicy
|
219
|
+
//
|
220
|
+
std::string XdsApi::Route::RetryPolicy::RetryBackOff::ToString() const {
|
221
|
+
std::vector<std::string> contents;
|
222
|
+
contents.push_back(
|
223
|
+
absl::StrCat("RetryBackOff Base: ", base_interval.ToString()));
|
224
|
+
contents.push_back(
|
225
|
+
absl::StrCat("RetryBackOff max: ", max_interval.ToString()));
|
226
|
+
return absl::StrJoin(contents, ",");
|
227
|
+
}
|
228
|
+
|
229
|
+
std::string XdsApi::Route::RetryPolicy::ToString() const {
|
230
|
+
std::vector<std::string> contents;
|
231
|
+
contents.push_back(absl::StrFormat("num_retries=%d", num_retries));
|
232
|
+
contents.push_back(retry_back_off.ToString());
|
233
|
+
return absl::StrJoin(contents, ",");
|
234
|
+
}
|
235
|
+
|
217
236
|
//
|
218
237
|
// XdsApi::Route
|
219
238
|
//
|
@@ -255,6 +274,10 @@ std::string XdsApi::Route::ToString() const {
|
|
255
274
|
for (const HashPolicy& hash_policy : hash_policies) {
|
256
275
|
contents.push_back(absl::StrCat("hash_policy=", hash_policy.ToString()));
|
257
276
|
}
|
277
|
+
if (retry_policy.has_value()) {
|
278
|
+
contents.push_back(
|
279
|
+
absl::StrCat("retry_policy={", retry_policy->ToString(), "}"));
|
280
|
+
}
|
258
281
|
if (!cluster_name.empty()) {
|
259
282
|
contents.push_back(absl::StrFormat("Cluster name: %s", cluster_name));
|
260
283
|
}
|
@@ -697,10 +720,24 @@ std::string XdsApi::LdsUpdate::ToString() const {
|
|
697
720
|
//
|
698
721
|
|
699
722
|
std::string XdsApi::CdsUpdate::ToString() const {
|
700
|
-
absl::InlinedVector<std::string,
|
701
|
-
|
702
|
-
|
703
|
-
|
723
|
+
absl::InlinedVector<std::string, 8> contents;
|
724
|
+
switch (cluster_type) {
|
725
|
+
case EDS:
|
726
|
+
contents.push_back("cluster_type=EDS");
|
727
|
+
if (!eds_service_name.empty()) {
|
728
|
+
contents.push_back(
|
729
|
+
absl::StrFormat("eds_service_name=%s", eds_service_name));
|
730
|
+
}
|
731
|
+
break;
|
732
|
+
case LOGICAL_DNS:
|
733
|
+
contents.push_back("cluster_type=LOGICAL_DNS");
|
734
|
+
contents.push_back(absl::StrFormat("dns_hostname=%s", dns_hostname));
|
735
|
+
break;
|
736
|
+
case AGGREGATE:
|
737
|
+
contents.push_back("cluster_type=AGGREGATE");
|
738
|
+
contents.push_back(
|
739
|
+
absl::StrFormat("prioritized_cluster_names=[%s]",
|
740
|
+
absl::StrJoin(prioritized_cluster_names, ", ")));
|
704
741
|
}
|
705
742
|
if (!common_tls_context.Empty()) {
|
706
743
|
contents.push_back(absl::StrFormat("common_tls_context=%s",
|
@@ -710,6 +747,11 @@ std::string XdsApi::CdsUpdate::ToString() const {
|
|
710
747
|
contents.push_back(absl::StrFormat("lrs_load_reporting_server_name=%s",
|
711
748
|
lrs_load_reporting_server_name.value()));
|
712
749
|
}
|
750
|
+
contents.push_back(absl::StrCat("lb_policy=", lb_policy));
|
751
|
+
if (lb_policy == "RING_HASH") {
|
752
|
+
contents.push_back(absl::StrCat("min_ring_size=", min_ring_size));
|
753
|
+
contents.push_back(absl::StrCat("max_ring_size=", max_ring_size));
|
754
|
+
}
|
713
755
|
contents.push_back(
|
714
756
|
absl::StrFormat("max_concurrent_requests=%d", max_concurrent_requests));
|
715
757
|
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
@@ -830,14 +872,42 @@ bool IsEds(absl::string_view type_url) {
|
|
830
872
|
|
831
873
|
} // namespace
|
832
874
|
|
875
|
+
// If gRPC is built with -DGRPC_XDS_USER_AGENT_NAME_SUFFIX="...", that string
|
876
|
+
// will be appended to the user agent name reported to the xDS server.
|
877
|
+
#ifdef GRPC_XDS_USER_AGENT_NAME_SUFFIX
|
878
|
+
#define GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING \
|
879
|
+
" " GRPC_XDS_USER_AGENT_NAME_SUFFIX
|
880
|
+
#else
|
881
|
+
#define GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING ""
|
882
|
+
#endif
|
883
|
+
|
884
|
+
// If gRPC is built with -DGRPC_XDS_USER_AGENT_VERSION_SUFFIX="...", that string
|
885
|
+
// will be appended to the user agent version reported to the xDS server.
|
886
|
+
#ifdef GRPC_XDS_USER_AGENT_VERSION_SUFFIX
|
887
|
+
#define GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING \
|
888
|
+
" " GRPC_XDS_USER_AGENT_VERSION_SUFFIX
|
889
|
+
#else
|
890
|
+
#define GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING ""
|
891
|
+
#endif
|
892
|
+
|
833
893
|
XdsApi::XdsApi(XdsClient* client, TraceFlag* tracer,
|
834
|
-
const XdsBootstrap::Node* node
|
894
|
+
const XdsBootstrap::Node* node,
|
895
|
+
const CertificateProviderStore::PluginDefinitionMap*
|
896
|
+
certificate_provider_definition_map)
|
835
897
|
: client_(client),
|
836
898
|
tracer_(tracer),
|
837
899
|
node_(node),
|
900
|
+
certificate_provider_definition_map_(certificate_provider_definition_map),
|
838
901
|
build_version_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING, " ",
|
839
|
-
grpc_version_string()
|
840
|
-
|
902
|
+
grpc_version_string(),
|
903
|
+
GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING,
|
904
|
+
GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING)),
|
905
|
+
user_agent_name_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING,
|
906
|
+
GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING)),
|
907
|
+
user_agent_version_(
|
908
|
+
absl::StrCat("C-core ", grpc_version_string(),
|
909
|
+
GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING,
|
910
|
+
GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING)) {
|
841
911
|
// Populate upb symtab with xDS proto messages that we want to print
|
842
912
|
// properly in logs.
|
843
913
|
// Note: This won't actually work properly until upb adds support for
|
@@ -859,11 +929,13 @@ XdsApi::XdsApi(XdsClient* client, TraceFlag* tracer,
|
|
859
929
|
namespace {
|
860
930
|
|
861
931
|
struct EncodingContext {
|
862
|
-
XdsClient* client;
|
932
|
+
XdsClient* client; // Used only for logging. Unsafe for dereferencing.
|
863
933
|
TraceFlag* tracer;
|
864
934
|
upb_symtab* symtab;
|
865
935
|
upb_arena* arena;
|
866
936
|
bool use_v3;
|
937
|
+
const CertificateProviderStore::PluginDefinitionMap*
|
938
|
+
certificate_provider_definition_map;
|
867
939
|
};
|
868
940
|
|
869
941
|
// Works for both std::string and absl::string_view.
|
@@ -968,6 +1040,7 @@ void PopulateNode(const EncodingContext& context,
|
|
968
1040
|
const XdsBootstrap::Node* node,
|
969
1041
|
const std::string& build_version,
|
970
1042
|
const std::string& user_agent_name,
|
1043
|
+
const std::string& user_agent_version,
|
971
1044
|
envoy_config_core_v3_Node* node_msg) {
|
972
1045
|
if (node != nullptr) {
|
973
1046
|
if (!node->id.empty()) {
|
@@ -1007,7 +1080,7 @@ void PopulateNode(const EncodingContext& context,
|
|
1007
1080
|
envoy_config_core_v3_Node_set_user_agent_name(
|
1008
1081
|
node_msg, StdStringToUpbString(user_agent_name));
|
1009
1082
|
envoy_config_core_v3_Node_set_user_agent_version(
|
1010
|
-
node_msg,
|
1083
|
+
node_msg, StdStringToUpbString(user_agent_version));
|
1011
1084
|
envoy_config_core_v3_Node_add_client_features(
|
1012
1085
|
node_msg, upb_strview_makez("envoy.lb.does_not_support_overprovisioning"),
|
1013
1086
|
context.arena);
|
@@ -1068,11 +1141,15 @@ absl::string_view TypeUrlExternalToInternal(bool use_v3,
|
|
1068
1141
|
grpc_slice XdsApi::CreateAdsRequest(
|
1069
1142
|
const XdsBootstrap::XdsServer& server, const std::string& type_url,
|
1070
1143
|
const std::set<absl::string_view>& resource_names,
|
1071
|
-
const std::string& version, const std::string& nonce,
|
1072
|
-
bool populate_node) {
|
1144
|
+
const std::string& version, const std::string& nonce,
|
1145
|
+
grpc_error_handle error, bool populate_node) {
|
1073
1146
|
upb::Arena arena;
|
1074
|
-
const EncodingContext context = {client_,
|
1075
|
-
|
1147
|
+
const EncodingContext context = {client_,
|
1148
|
+
tracer_,
|
1149
|
+
symtab_.ptr(),
|
1150
|
+
arena.ptr(),
|
1151
|
+
server.ShouldUseV3(),
|
1152
|
+
certificate_provider_definition_map_};
|
1076
1153
|
// Create a request.
|
1077
1154
|
envoy_service_discovery_v3_DiscoveryRequest* request =
|
1078
1155
|
envoy_service_discovery_v3_DiscoveryRequest_new(arena.ptr());
|
@@ -1092,6 +1169,7 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
1092
1169
|
request, StdStringToUpbString(nonce));
|
1093
1170
|
}
|
1094
1171
|
// Set error_detail if it's a NACK.
|
1172
|
+
std::string error_string_storage;
|
1095
1173
|
if (error != GRPC_ERROR_NONE) {
|
1096
1174
|
google_rpc_Status* error_detail =
|
1097
1175
|
envoy_service_discovery_v3_DiscoveryRequest_mutable_error_detail(
|
@@ -1102,8 +1180,8 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
1102
1180
|
// generate them in the parsing code, and then use that here.
|
1103
1181
|
google_rpc_Status_set_code(error_detail, GRPC_STATUS_INVALID_ARGUMENT);
|
1104
1182
|
// Error description comes from the error that was passed in.
|
1105
|
-
|
1106
|
-
|
1183
|
+
error_string_storage = grpc_error_std_string(error);
|
1184
|
+
upb_strview error_description = StdStringToUpbString(error_string_storage);
|
1107
1185
|
google_rpc_Status_set_message(error_detail, error_description);
|
1108
1186
|
GRPC_ERROR_UNREF(error);
|
1109
1187
|
}
|
@@ -1112,7 +1190,8 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
1112
1190
|
envoy_config_core_v3_Node* node_msg =
|
1113
1191
|
envoy_service_discovery_v3_DiscoveryRequest_mutable_node(request,
|
1114
1192
|
arena.ptr());
|
1115
|
-
PopulateNode(context, node_, build_version_, user_agent_name_,
|
1193
|
+
PopulateNode(context, node_, build_version_, user_agent_name_,
|
1194
|
+
user_agent_version_, node_msg);
|
1116
1195
|
}
|
1117
1196
|
// Add resource_names.
|
1118
1197
|
for (const auto& resource_name : resource_names) {
|
@@ -1197,8 +1276,9 @@ void MaybeLogClusterLoadAssignment(
|
|
1197
1276
|
}
|
1198
1277
|
}
|
1199
1278
|
|
1200
|
-
|
1201
|
-
|
1279
|
+
grpc_error_handle RoutePathMatchParse(
|
1280
|
+
const envoy_config_route_v3_RouteMatch* match, XdsApi::Route* route,
|
1281
|
+
bool* ignore_route) {
|
1202
1282
|
auto* case_sensitive_ptr =
|
1203
1283
|
envoy_config_route_v3_RouteMatch_case_sensitive(match);
|
1204
1284
|
bool case_sensitive = true;
|
@@ -1231,7 +1311,7 @@ grpc_error* RoutePathMatchParse(const envoy_config_route_v3_RouteMatch* match,
|
|
1231
1311
|
return GRPC_ERROR_NONE;
|
1232
1312
|
}
|
1233
1313
|
}
|
1234
|
-
type = StringMatcher::Type::
|
1314
|
+
type = StringMatcher::Type::kPrefix;
|
1235
1315
|
match_string = std::string(prefix);
|
1236
1316
|
} else if (envoy_config_route_v3_RouteMatch_has_path(match)) {
|
1237
1317
|
absl::string_view path =
|
@@ -1265,13 +1345,13 @@ grpc_error* RoutePathMatchParse(const envoy_config_route_v3_RouteMatch* match,
|
|
1265
1345
|
*ignore_route = true;
|
1266
1346
|
return GRPC_ERROR_NONE;
|
1267
1347
|
}
|
1268
|
-
type = StringMatcher::Type::
|
1348
|
+
type = StringMatcher::Type::kExact;
|
1269
1349
|
match_string = std::string(path);
|
1270
1350
|
} else if (envoy_config_route_v3_RouteMatch_has_safe_regex(match)) {
|
1271
1351
|
const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
|
1272
1352
|
envoy_config_route_v3_RouteMatch_safe_regex(match);
|
1273
1353
|
GPR_ASSERT(regex_matcher != nullptr);
|
1274
|
-
type = StringMatcher::Type::
|
1354
|
+
type = StringMatcher::Type::kSafeRegex;
|
1275
1355
|
match_string = UpbStringToStdString(
|
1276
1356
|
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
|
1277
1357
|
} else {
|
@@ -1290,7 +1370,7 @@ grpc_error* RoutePathMatchParse(const envoy_config_route_v3_RouteMatch* match,
|
|
1290
1370
|
return GRPC_ERROR_NONE;
|
1291
1371
|
}
|
1292
1372
|
|
1293
|
-
|
1373
|
+
grpc_error_handle RouteHeaderMatchersParse(
|
1294
1374
|
const envoy_config_route_v3_RouteMatch* match, XdsApi::Route* route) {
|
1295
1375
|
size_t size;
|
1296
1376
|
const envoy_config_route_v3_HeaderMatcher* const* headers =
|
@@ -1305,7 +1385,7 @@ grpc_error* RouteHeaderMatchersParse(
|
|
1305
1385
|
int64_t range_end = 0;
|
1306
1386
|
bool present_match = false;
|
1307
1387
|
if (envoy_config_route_v3_HeaderMatcher_has_exact_match(header)) {
|
1308
|
-
type = HeaderMatcher::Type::
|
1388
|
+
type = HeaderMatcher::Type::kExact;
|
1309
1389
|
match_string = UpbStringToStdString(
|
1310
1390
|
envoy_config_route_v3_HeaderMatcher_exact_match(header));
|
1311
1391
|
} else if (envoy_config_route_v3_HeaderMatcher_has_safe_regex_match(
|
@@ -1313,28 +1393,28 @@ grpc_error* RouteHeaderMatchersParse(
|
|
1313
1393
|
const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
|
1314
1394
|
envoy_config_route_v3_HeaderMatcher_safe_regex_match(header);
|
1315
1395
|
GPR_ASSERT(regex_matcher != nullptr);
|
1316
|
-
type = HeaderMatcher::Type::
|
1396
|
+
type = HeaderMatcher::Type::kSafeRegex;
|
1317
1397
|
match_string = UpbStringToStdString(
|
1318
1398
|
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
|
1319
1399
|
} else if (envoy_config_route_v3_HeaderMatcher_has_range_match(header)) {
|
1320
|
-
type = HeaderMatcher::Type::
|
1400
|
+
type = HeaderMatcher::Type::kRange;
|
1321
1401
|
const envoy_type_v3_Int64Range* range_matcher =
|
1322
1402
|
envoy_config_route_v3_HeaderMatcher_range_match(header);
|
1323
1403
|
range_start = envoy_type_v3_Int64Range_start(range_matcher);
|
1324
1404
|
range_end = envoy_type_v3_Int64Range_end(range_matcher);
|
1325
1405
|
} else if (envoy_config_route_v3_HeaderMatcher_has_present_match(header)) {
|
1326
|
-
type = HeaderMatcher::Type::
|
1406
|
+
type = HeaderMatcher::Type::kPresent;
|
1327
1407
|
present_match = envoy_config_route_v3_HeaderMatcher_present_match(header);
|
1328
1408
|
} else if (envoy_config_route_v3_HeaderMatcher_has_prefix_match(header)) {
|
1329
|
-
type = HeaderMatcher::Type::
|
1409
|
+
type = HeaderMatcher::Type::kPrefix;
|
1330
1410
|
match_string = UpbStringToStdString(
|
1331
1411
|
envoy_config_route_v3_HeaderMatcher_prefix_match(header));
|
1332
1412
|
} else if (envoy_config_route_v3_HeaderMatcher_has_suffix_match(header)) {
|
1333
|
-
type = HeaderMatcher::Type::
|
1413
|
+
type = HeaderMatcher::Type::kSuffix;
|
1334
1414
|
match_string = UpbStringToStdString(
|
1335
1415
|
envoy_config_route_v3_HeaderMatcher_suffix_match(header));
|
1336
1416
|
} else if (envoy_config_route_v3_HeaderMatcher_has_contains_match(header)) {
|
1337
|
-
type = HeaderMatcher::Type::
|
1417
|
+
type = HeaderMatcher::Type::kContains;
|
1338
1418
|
match_string = UpbStringToStdString(
|
1339
1419
|
envoy_config_route_v3_HeaderMatcher_contains_match(header));
|
1340
1420
|
} else {
|
@@ -1357,7 +1437,7 @@ grpc_error* RouteHeaderMatchersParse(
|
|
1357
1437
|
return GRPC_ERROR_NONE;
|
1358
1438
|
}
|
1359
1439
|
|
1360
|
-
|
1440
|
+
grpc_error_handle RouteRuntimeFractionParse(
|
1361
1441
|
const envoy_config_route_v3_RouteMatch* match, XdsApi::Route* route) {
|
1362
1442
|
const envoy_config_core_v3_RuntimeFractionalPercent* runtime_fraction =
|
1363
1443
|
envoy_config_route_v3_RouteMatch_runtime_fraction(match);
|
@@ -1390,9 +1470,9 @@ grpc_error* RouteRuntimeFractionParse(
|
|
1390
1470
|
return GRPC_ERROR_NONE;
|
1391
1471
|
}
|
1392
1472
|
|
1393
|
-
|
1394
|
-
|
1395
|
-
|
1473
|
+
grpc_error_handle ExtractHttpFilterTypeName(const EncodingContext& context,
|
1474
|
+
const google_protobuf_Any* any,
|
1475
|
+
absl::string_view* filter_type) {
|
1396
1476
|
*filter_type = UpbStringToAbsl(google_protobuf_Any_type_url(any));
|
1397
1477
|
if (*filter_type == "type.googleapis.com/udpa.type.v1.TypedStruct") {
|
1398
1478
|
upb_strview any_value = google_protobuf_Any_value(any);
|
@@ -1410,7 +1490,7 @@ grpc_error* ExtractHttpFilterTypeName(const EncodingContext& context,
|
|
1410
1490
|
}
|
1411
1491
|
|
1412
1492
|
template <typename ParentType, typename EntryType>
|
1413
|
-
|
1493
|
+
grpc_error_handle ParseTypedPerFilterConfig(
|
1414
1494
|
const EncodingContext& context, const ParentType* parent,
|
1415
1495
|
const EntryType* (*entry_func)(const ParentType*, size_t*),
|
1416
1496
|
upb_strview (*key_func)(const EntryType*),
|
@@ -1454,7 +1534,8 @@ grpc_error* ParseTypedPerFilterConfig(
|
|
1454
1534
|
.c_str());
|
1455
1535
|
}
|
1456
1536
|
}
|
1457
|
-
|
1537
|
+
grpc_error_handle error =
|
1538
|
+
ExtractHttpFilterTypeName(context, any, &filter_type);
|
1458
1539
|
if (error != GRPC_ERROR_NONE) return error;
|
1459
1540
|
const XdsHttpFilterImpl* filter_impl =
|
1460
1541
|
XdsHttpFilterRegistry::GetFilterForType(filter_type);
|
@@ -1478,9 +1559,103 @@ grpc_error* ParseTypedPerFilterConfig(
|
|
1478
1559
|
return GRPC_ERROR_NONE;
|
1479
1560
|
}
|
1480
1561
|
|
1481
|
-
|
1482
|
-
|
1483
|
-
|
1562
|
+
XdsApi::Duration DurationParse(const google_protobuf_Duration* proto_duration) {
|
1563
|
+
XdsApi::Duration duration;
|
1564
|
+
duration.seconds = google_protobuf_Duration_seconds(proto_duration);
|
1565
|
+
duration.nanos = google_protobuf_Duration_nanos(proto_duration);
|
1566
|
+
return duration;
|
1567
|
+
}
|
1568
|
+
|
1569
|
+
grpc_error_handle RetryPolicyParse(
|
1570
|
+
const EncodingContext& context,
|
1571
|
+
const envoy_config_route_v3_RetryPolicy* retry_policy,
|
1572
|
+
absl::optional<XdsApi::Route::RetryPolicy>* retry) {
|
1573
|
+
std::vector<grpc_error_handle> errors;
|
1574
|
+
XdsApi::Route::RetryPolicy retry_to_return;
|
1575
|
+
auto retry_on = UpbStringToStdString(
|
1576
|
+
envoy_config_route_v3_RetryPolicy_retry_on(retry_policy));
|
1577
|
+
std::vector<absl::string_view> codes = absl::StrSplit(retry_on, ',');
|
1578
|
+
for (const auto& code : codes) {
|
1579
|
+
if (code == "cancelled") {
|
1580
|
+
retry_to_return.retry_on.Add(GRPC_STATUS_CANCELLED);
|
1581
|
+
} else if (code == "deadline-exceeded") {
|
1582
|
+
retry_to_return.retry_on.Add(GRPC_STATUS_DEADLINE_EXCEEDED);
|
1583
|
+
} else if (code == "internal") {
|
1584
|
+
retry_to_return.retry_on.Add(GRPC_STATUS_INTERNAL);
|
1585
|
+
} else if (code == "resource-exhausted") {
|
1586
|
+
retry_to_return.retry_on.Add(GRPC_STATUS_RESOURCE_EXHAUSTED);
|
1587
|
+
} else if (code == "unavailable") {
|
1588
|
+
retry_to_return.retry_on.Add(GRPC_STATUS_UNAVAILABLE);
|
1589
|
+
} else {
|
1590
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
1591
|
+
gpr_log(GPR_INFO, "Unsupported retry_on policy %s.",
|
1592
|
+
std::string(code).c_str());
|
1593
|
+
}
|
1594
|
+
}
|
1595
|
+
}
|
1596
|
+
// TODO(donnadionne): when we add support for per_try_timeout, we will need to
|
1597
|
+
// return a policy if per_try_timeout is set even if retry_on specified no
|
1598
|
+
// supported policies.
|
1599
|
+
if (retry_to_return.retry_on.Empty()) return GRPC_ERROR_NONE;
|
1600
|
+
const google_protobuf_UInt32Value* num_retries =
|
1601
|
+
envoy_config_route_v3_RetryPolicy_num_retries(retry_policy);
|
1602
|
+
if (num_retries != nullptr) {
|
1603
|
+
uint32_t num_retries_value = google_protobuf_UInt32Value_value(num_retries);
|
1604
|
+
if (num_retries_value == 0) {
|
1605
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1606
|
+
"RouteAction RetryPolicy num_retries set to invalid value 0."));
|
1607
|
+
} else {
|
1608
|
+
retry_to_return.num_retries = num_retries_value;
|
1609
|
+
}
|
1610
|
+
} else {
|
1611
|
+
retry_to_return.num_retries = 1;
|
1612
|
+
}
|
1613
|
+
const envoy_config_route_v3_RetryPolicy_RetryBackOff* backoff =
|
1614
|
+
envoy_config_route_v3_RetryPolicy_retry_back_off(retry_policy);
|
1615
|
+
if (backoff != nullptr) {
|
1616
|
+
const google_protobuf_Duration* base_interval =
|
1617
|
+
envoy_config_route_v3_RetryPolicy_RetryBackOff_base_interval(backoff);
|
1618
|
+
if (base_interval == nullptr) {
|
1619
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1620
|
+
"RouteAction RetryPolicy RetryBackoff missing base interval."));
|
1621
|
+
} else {
|
1622
|
+
retry_to_return.retry_back_off.base_interval =
|
1623
|
+
DurationParse(base_interval);
|
1624
|
+
}
|
1625
|
+
const google_protobuf_Duration* max_interval =
|
1626
|
+
envoy_config_route_v3_RetryPolicy_RetryBackOff_max_interval(backoff);
|
1627
|
+
XdsApi::Duration max;
|
1628
|
+
if (max_interval != nullptr) {
|
1629
|
+
max = DurationParse(max_interval);
|
1630
|
+
} else {
|
1631
|
+
// if max interval is not set, it is 10x the base, if the value in nanos
|
1632
|
+
// can yield another second, adjust the value in seconds accordingly.
|
1633
|
+
max.seconds = retry_to_return.retry_back_off.base_interval.seconds * 10;
|
1634
|
+
max.nanos = retry_to_return.retry_back_off.base_interval.nanos * 10;
|
1635
|
+
if (max.nanos > 1000000000) {
|
1636
|
+
max.seconds += max.nanos / 1000000000;
|
1637
|
+
max.nanos = max.nanos % 1000000000;
|
1638
|
+
}
|
1639
|
+
}
|
1640
|
+
retry_to_return.retry_back_off.max_interval = max;
|
1641
|
+
} else {
|
1642
|
+
retry_to_return.retry_back_off.base_interval.seconds = 0;
|
1643
|
+
retry_to_return.retry_back_off.base_interval.nanos = 25000000;
|
1644
|
+
retry_to_return.retry_back_off.max_interval.seconds = 0;
|
1645
|
+
retry_to_return.retry_back_off.max_interval.nanos = 250000000;
|
1646
|
+
}
|
1647
|
+
if (errors.empty()) {
|
1648
|
+
*retry = retry_to_return;
|
1649
|
+
return GRPC_ERROR_NONE;
|
1650
|
+
} else {
|
1651
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing retry policy",
|
1652
|
+
&errors);
|
1653
|
+
}
|
1654
|
+
}
|
1655
|
+
|
1656
|
+
grpc_error_handle RouteActionParse(const EncodingContext& context,
|
1657
|
+
const envoy_config_route_v3_Route* route_msg,
|
1658
|
+
XdsApi::Route* route, bool* ignore_route) {
|
1484
1659
|
if (!envoy_config_route_v3_Route_has_route(route_msg)) {
|
1485
1660
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1486
1661
|
"No RouteAction found in route.");
|
@@ -1533,7 +1708,7 @@ grpc_error* RouteActionParse(const EncodingContext& context,
|
|
1533
1708
|
if (cluster.weight == 0) continue;
|
1534
1709
|
sum_of_weights += cluster.weight;
|
1535
1710
|
if (context.use_v3) {
|
1536
|
-
|
1711
|
+
grpc_error_handle error = ParseTypedPerFilterConfig<
|
1537
1712
|
envoy_config_route_v3_WeightedCluster_ClusterWeight,
|
1538
1713
|
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry>(
|
1539
1714
|
context, cluster_weight,
|
@@ -1571,10 +1746,7 @@ grpc_error* RouteActionParse(const EncodingContext& context,
|
|
1571
1746
|
max_stream_duration);
|
1572
1747
|
}
|
1573
1748
|
if (duration != nullptr) {
|
1574
|
-
|
1575
|
-
duration_in_route.seconds = google_protobuf_Duration_seconds(duration);
|
1576
|
-
duration_in_route.nanos = google_protobuf_Duration_nanos(duration);
|
1577
|
-
route->max_stream_duration = duration_in_route;
|
1749
|
+
route->max_stream_duration = DurationParse(duration);
|
1578
1750
|
}
|
1579
1751
|
}
|
1580
1752
|
}
|
@@ -1602,40 +1774,35 @@ grpc_error* RouteActionParse(const EncodingContext& context,
|
|
1602
1774
|
regex_rewrite =
|
1603
1775
|
envoy_config_route_v3_RouteAction_HashPolicy_Header_regex_rewrite(
|
1604
1776
|
header);
|
1605
|
-
if (regex_rewrite
|
1606
|
-
|
1607
|
-
|
1608
|
-
|
1609
|
-
|
1610
|
-
|
1611
|
-
|
1612
|
-
|
1613
|
-
|
1614
|
-
|
1615
|
-
|
1616
|
-
|
1617
|
-
|
1618
|
-
|
1619
|
-
|
1620
|
-
|
1621
|
-
|
1622
|
-
|
1623
|
-
|
1624
|
-
|
1625
|
-
|
1626
|
-
|
1627
|
-
|
1628
|
-
|
1629
|
-
|
1630
|
-
|
1631
|
-
|
1632
|
-
|
1633
|
-
"compile");
|
1634
|
-
continue;
|
1777
|
+
if (regex_rewrite != nullptr) {
|
1778
|
+
const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
|
1779
|
+
envoy_type_matcher_v3_RegexMatchAndSubstitute_pattern(
|
1780
|
+
regex_rewrite);
|
1781
|
+
if (regex_matcher == nullptr) {
|
1782
|
+
gpr_log(
|
1783
|
+
GPR_DEBUG,
|
1784
|
+
"RouteAction HashPolicy contains policy specifier Header with "
|
1785
|
+
"RegexMatchAndSubstitution but RegexMatcher pattern is "
|
1786
|
+
"missing");
|
1787
|
+
continue;
|
1788
|
+
}
|
1789
|
+
RE2::Options options;
|
1790
|
+
policy.regex = absl::make_unique<RE2>(
|
1791
|
+
UpbStringToStdString(
|
1792
|
+
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher)),
|
1793
|
+
options);
|
1794
|
+
if (!policy.regex->ok()) {
|
1795
|
+
gpr_log(
|
1796
|
+
GPR_DEBUG,
|
1797
|
+
"RouteAction HashPolicy contains policy specifier Header with "
|
1798
|
+
"RegexMatchAndSubstitution but RegexMatcher pattern does not "
|
1799
|
+
"compile");
|
1800
|
+
continue;
|
1801
|
+
}
|
1802
|
+
policy.regex_substitution = UpbStringToStdString(
|
1803
|
+
envoy_type_matcher_v3_RegexMatchAndSubstitute_substitution(
|
1804
|
+
regex_rewrite));
|
1635
1805
|
}
|
1636
|
-
policy.regex_substitution = UpbStringToStdString(
|
1637
|
-
envoy_type_matcher_v3_RegexMatchAndSubstitute_substitution(
|
1638
|
-
regex_rewrite));
|
1639
1806
|
} else if ((filter_state =
|
1640
1807
|
envoy_config_route_v3_RouteAction_HashPolicy_filter_state(
|
1641
1808
|
hash_policy)) != nullptr) {
|
@@ -1660,10 +1827,19 @@ grpc_error* RouteActionParse(const EncodingContext& context,
|
|
1660
1827
|
route->hash_policies.emplace_back(std::move(policy));
|
1661
1828
|
}
|
1662
1829
|
}
|
1830
|
+
// Get retry policy
|
1831
|
+
const envoy_config_route_v3_RetryPolicy* retry_policy =
|
1832
|
+
envoy_config_route_v3_RouteAction_retry_policy(route_action);
|
1833
|
+
if (retry_policy != nullptr) {
|
1834
|
+
absl::optional<XdsApi::Route::RetryPolicy> retry;
|
1835
|
+
grpc_error_handle error = RetryPolicyParse(context, retry_policy, &retry);
|
1836
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1837
|
+
route->retry_policy = retry;
|
1838
|
+
}
|
1663
1839
|
return GRPC_ERROR_NONE;
|
1664
1840
|
}
|
1665
1841
|
|
1666
|
-
|
1842
|
+
grpc_error_handle RouteConfigParse(
|
1667
1843
|
const EncodingContext& context,
|
1668
1844
|
const envoy_config_route_v3_RouteConfiguration* route_config,
|
1669
1845
|
XdsApi::RdsUpdate* rds_update) {
|
@@ -1695,7 +1871,7 @@ grpc_error* RouteConfigParse(
|
|
1695
1871
|
}
|
1696
1872
|
// Parse typed_per_filter_config.
|
1697
1873
|
if (context.use_v3) {
|
1698
|
-
|
1874
|
+
grpc_error_handle error = ParseTypedPerFilterConfig<
|
1699
1875
|
envoy_config_route_v3_VirtualHost,
|
1700
1876
|
envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry>(
|
1701
1877
|
context, virtual_hosts[i],
|
@@ -1705,6 +1881,15 @@ grpc_error* RouteConfigParse(
|
|
1705
1881
|
&vhost.typed_per_filter_config);
|
1706
1882
|
if (error != GRPC_ERROR_NONE) return error;
|
1707
1883
|
}
|
1884
|
+
// Parse retry policy.
|
1885
|
+
absl::optional<XdsApi::Route::RetryPolicy> virtual_host_retry_policy;
|
1886
|
+
const envoy_config_route_v3_RetryPolicy* retry_policy =
|
1887
|
+
envoy_config_route_v3_VirtualHost_retry_policy(virtual_hosts[i]);
|
1888
|
+
if (retry_policy != nullptr) {
|
1889
|
+
grpc_error_handle error =
|
1890
|
+
RetryPolicyParse(context, retry_policy, &virtual_host_retry_policy);
|
1891
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1892
|
+
}
|
1708
1893
|
// Parse routes.
|
1709
1894
|
size_t num_routes;
|
1710
1895
|
const envoy_config_route_v3_Route* const* routes =
|
@@ -1728,7 +1913,8 @@ grpc_error* RouteConfigParse(
|
|
1728
1913
|
}
|
1729
1914
|
XdsApi::Route route;
|
1730
1915
|
bool ignore_route = false;
|
1731
|
-
|
1916
|
+
grpc_error_handle error =
|
1917
|
+
RoutePathMatchParse(match, &route, &ignore_route);
|
1732
1918
|
if (error != GRPC_ERROR_NONE) return error;
|
1733
1919
|
if (ignore_route) continue;
|
1734
1920
|
error = RouteHeaderMatchersParse(match, &route);
|
@@ -1738,8 +1924,11 @@ grpc_error* RouteConfigParse(
|
|
1738
1924
|
error = RouteActionParse(context, routes[j], &route, &ignore_route);
|
1739
1925
|
if (error != GRPC_ERROR_NONE) return error;
|
1740
1926
|
if (ignore_route) continue;
|
1927
|
+
if (route.retry_policy == absl::nullopt && retry_policy != nullptr) {
|
1928
|
+
route.retry_policy = virtual_host_retry_policy;
|
1929
|
+
}
|
1741
1930
|
if (context.use_v3) {
|
1742
|
-
|
1931
|
+
grpc_error_handle error = ParseTypedPerFilterConfig<
|
1743
1932
|
envoy_config_route_v3_Route,
|
1744
1933
|
envoy_config_route_v3_Route_TypedPerFilterConfigEntry>(
|
1745
1934
|
context, routes[j],
|
@@ -1758,24 +1947,32 @@ grpc_error* RouteConfigParse(
|
|
1758
1947
|
return GRPC_ERROR_NONE;
|
1759
1948
|
}
|
1760
1949
|
|
1761
|
-
|
1762
|
-
|
1950
|
+
grpc_error_handle CertificateProviderInstanceParse(
|
1951
|
+
const EncodingContext& context,
|
1763
1952
|
const envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CertificateProviderInstance*
|
1764
|
-
certificate_provider_instance_proto
|
1765
|
-
|
1953
|
+
certificate_provider_instance_proto,
|
1954
|
+
XdsApi::CommonTlsContext::CertificateProviderInstance*
|
1955
|
+
certificate_provider_instance) {
|
1956
|
+
*certificate_provider_instance = {
|
1766
1957
|
UpbStringToStdString(
|
1767
1958
|
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CertificateProviderInstance_instance_name(
|
1768
1959
|
certificate_provider_instance_proto)),
|
1769
1960
|
UpbStringToStdString(
|
1770
1961
|
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CertificateProviderInstance_certificate_name(
|
1771
1962
|
certificate_provider_instance_proto))};
|
1963
|
+
if (context.certificate_provider_definition_map->find(
|
1964
|
+
certificate_provider_instance->instance_name) ==
|
1965
|
+
context.certificate_provider_definition_map->end()) {
|
1966
|
+
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1967
|
+
absl::StrCat("Unrecognized certificate provider instance name: ",
|
1968
|
+
certificate_provider_instance->instance_name)
|
1969
|
+
.c_str());
|
1970
|
+
}
|
1971
|
+
return GRPC_ERROR_NONE;
|
1772
1972
|
}
|
1773
1973
|
|
1774
|
-
|
1775
|
-
const
|
1776
|
-
common_tls_context_proto,
|
1777
|
-
XdsApi::CommonTlsContext* common_tls_context) GRPC_MUST_USE_RESULT;
|
1778
|
-
grpc_error* CommonTlsContextParse(
|
1974
|
+
grpc_error_handle CommonTlsContextParse(
|
1975
|
+
const EncodingContext& context,
|
1779
1976
|
const envoy_extensions_transport_sockets_tls_v3_CommonTlsContext*
|
1780
1977
|
common_tls_context_proto,
|
1781
1978
|
XdsApi::CommonTlsContext* common_tls_context) {
|
@@ -1796,31 +1993,31 @@ grpc_error* CommonTlsContextParse(
|
|
1796
1993
|
std::string matcher;
|
1797
1994
|
if (envoy_type_matcher_v3_StringMatcher_has_exact(
|
1798
1995
|
subject_alt_names_matchers[i])) {
|
1799
|
-
type = StringMatcher::Type::
|
1996
|
+
type = StringMatcher::Type::kExact;
|
1800
1997
|
matcher =
|
1801
1998
|
UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_exact(
|
1802
1999
|
subject_alt_names_matchers[i]));
|
1803
2000
|
} else if (envoy_type_matcher_v3_StringMatcher_has_prefix(
|
1804
2001
|
subject_alt_names_matchers[i])) {
|
1805
|
-
type = StringMatcher::Type::
|
2002
|
+
type = StringMatcher::Type::kPrefix;
|
1806
2003
|
matcher =
|
1807
2004
|
UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_prefix(
|
1808
2005
|
subject_alt_names_matchers[i]));
|
1809
2006
|
} else if (envoy_type_matcher_v3_StringMatcher_has_suffix(
|
1810
2007
|
subject_alt_names_matchers[i])) {
|
1811
|
-
type = StringMatcher::Type::
|
2008
|
+
type = StringMatcher::Type::kSuffix;
|
1812
2009
|
matcher =
|
1813
2010
|
UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_suffix(
|
1814
2011
|
subject_alt_names_matchers[i]));
|
1815
2012
|
} else if (envoy_type_matcher_v3_StringMatcher_has_contains(
|
1816
2013
|
subject_alt_names_matchers[i])) {
|
1817
|
-
type = StringMatcher::Type::
|
2014
|
+
type = StringMatcher::Type::kContains;
|
1818
2015
|
matcher =
|
1819
2016
|
UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_contains(
|
1820
2017
|
subject_alt_names_matchers[i]));
|
1821
2018
|
} else if (envoy_type_matcher_v3_StringMatcher_has_safe_regex(
|
1822
2019
|
subject_alt_names_matchers[i])) {
|
1823
|
-
type = StringMatcher::Type::
|
2020
|
+
type = StringMatcher::Type::kSafeRegex;
|
1824
2021
|
auto* regex_matcher = envoy_type_matcher_v3_StringMatcher_safe_regex(
|
1825
2022
|
subject_alt_names_matchers[i]);
|
1826
2023
|
matcher = UpbStringToStdString(
|
@@ -1840,7 +2037,7 @@ grpc_error* CommonTlsContextParse(
|
|
1840
2037
|
string_matcher.status().message())
|
1841
2038
|
.c_str());
|
1842
2039
|
}
|
1843
|
-
if (type == StringMatcher::Type::
|
2040
|
+
if (type == StringMatcher::Type::kSafeRegex && ignore_case) {
|
1844
2041
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1845
2042
|
"StringMatcher: ignore_case has no effect for SAFE_REGEX.");
|
1846
2043
|
}
|
@@ -1853,24 +2050,26 @@ grpc_error* CommonTlsContextParse(
|
|
1853
2050
|
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CombinedCertificateValidationContext_validation_context_certificate_provider_instance(
|
1854
2051
|
combined_validation_context);
|
1855
2052
|
if (validation_context_certificate_provider_instance != nullptr) {
|
1856
|
-
|
1857
|
-
|
1858
|
-
|
1859
|
-
|
2053
|
+
grpc_error_handle error = CertificateProviderInstanceParse(
|
2054
|
+
context, validation_context_certificate_provider_instance,
|
2055
|
+
&common_tls_context->combined_validation_context
|
2056
|
+
.validation_context_certificate_provider_instance);
|
2057
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1860
2058
|
}
|
1861
2059
|
}
|
1862
2060
|
auto* tls_certificate_certificate_provider_instance =
|
1863
2061
|
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_tls_certificate_certificate_provider_instance(
|
1864
2062
|
common_tls_context_proto);
|
1865
2063
|
if (tls_certificate_certificate_provider_instance != nullptr) {
|
1866
|
-
|
1867
|
-
|
1868
|
-
|
2064
|
+
grpc_error_handle error = CertificateProviderInstanceParse(
|
2065
|
+
context, tls_certificate_certificate_provider_instance,
|
2066
|
+
&common_tls_context->tls_certificate_certificate_provider_instance);
|
2067
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1869
2068
|
}
|
1870
2069
|
return GRPC_ERROR_NONE;
|
1871
2070
|
}
|
1872
2071
|
|
1873
|
-
|
2072
|
+
grpc_error_handle HttpConnectionManagerParse(
|
1874
2073
|
bool is_client, const EncodingContext& context,
|
1875
2074
|
const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
|
1876
2075
|
http_connection_manager_proto,
|
@@ -1885,10 +2084,8 @@ grpc_error* HttpConnectionManagerParse(
|
|
1885
2084
|
const google_protobuf_Duration* duration =
|
1886
2085
|
envoy_config_core_v3_HttpProtocolOptions_max_stream_duration(options);
|
1887
2086
|
if (duration != nullptr) {
|
1888
|
-
http_connection_manager->http_max_stream_duration
|
1889
|
-
|
1890
|
-
http_connection_manager->http_max_stream_duration.nanos =
|
1891
|
-
google_protobuf_Duration_nanos(duration);
|
2087
|
+
http_connection_manager->http_max_stream_duration =
|
2088
|
+
DurationParse(duration);
|
1892
2089
|
}
|
1893
2090
|
}
|
1894
2091
|
// Parse filters.
|
@@ -1925,7 +2122,8 @@ grpc_error* HttpConnectionManagerParse(
|
|
1925
2122
|
.c_str());
|
1926
2123
|
}
|
1927
2124
|
absl::string_view filter_type;
|
1928
|
-
|
2125
|
+
grpc_error_handle error =
|
2126
|
+
ExtractHttpFilterTypeName(context, any, &filter_type);
|
1929
2127
|
if (error != GRPC_ERROR_NONE) return error;
|
1930
2128
|
const XdsHttpFilterImpl* filter_impl =
|
1931
2129
|
XdsHttpFilterRegistry::GetFilterForType(filter_type);
|
@@ -1943,6 +2141,23 @@ grpc_error* HttpConnectionManagerParse(
|
|
1943
2141
|
is_client ? "clients" : "servers")
|
1944
2142
|
.c_str());
|
1945
2143
|
}
|
2144
|
+
if (i < num_filters - 1) {
|
2145
|
+
// Filters before the last filter must not be terminal.
|
2146
|
+
if (filter_impl->IsTerminalFilter()) {
|
2147
|
+
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2148
|
+
absl::StrCat("terminal filter for config type ", filter_type,
|
2149
|
+
" must be the last filter in the chain")
|
2150
|
+
.c_str());
|
2151
|
+
}
|
2152
|
+
} else {
|
2153
|
+
// The last filter must be terminal.
|
2154
|
+
if (!filter_impl->IsTerminalFilter()) {
|
2155
|
+
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2156
|
+
absl::StrCat("non-terminal filter for config type ", filter_type,
|
2157
|
+
" is the last filter in the chain")
|
2158
|
+
.c_str());
|
2159
|
+
}
|
2160
|
+
}
|
1946
2161
|
absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
|
1947
2162
|
filter_impl->GenerateFilterConfig(google_protobuf_Any_value(any),
|
1948
2163
|
context.arena);
|
@@ -1974,7 +2189,8 @@ grpc_error* HttpConnectionManagerParse(
|
|
1974
2189
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_route_config(
|
1975
2190
|
http_connection_manager_proto);
|
1976
2191
|
XdsApi::RdsUpdate rds_update;
|
1977
|
-
|
2192
|
+
grpc_error_handle error =
|
2193
|
+
RouteConfigParse(context, route_config, &rds_update);
|
1978
2194
|
if (error != GRPC_ERROR_NONE) return error;
|
1979
2195
|
http_connection_manager->rds_update = std::move(rds_update);
|
1980
2196
|
return GRPC_ERROR_NONE;
|
@@ -2007,7 +2223,7 @@ grpc_error* HttpConnectionManagerParse(
|
|
2007
2223
|
return GRPC_ERROR_NONE;
|
2008
2224
|
}
|
2009
2225
|
|
2010
|
-
|
2226
|
+
grpc_error_handle LdsResponseParseClient(
|
2011
2227
|
const EncodingContext& context,
|
2012
2228
|
const envoy_config_listener_v3_ApiListener* api_listener, bool is_v2,
|
2013
2229
|
XdsApi::LdsUpdate* lds_update) {
|
@@ -2026,60 +2242,71 @@ grpc_error* LdsResponseParseClient(
|
|
2026
2242
|
&lds_update->http_connection_manager);
|
2027
2243
|
}
|
2028
2244
|
|
2029
|
-
|
2245
|
+
grpc_error_handle DownstreamTlsContextParse(
|
2030
2246
|
const EncodingContext& context,
|
2031
2247
|
const envoy_config_core_v3_TransportSocket* transport_socket,
|
2032
2248
|
XdsApi::DownstreamTlsContext* downstream_tls_context) {
|
2033
2249
|
absl::string_view name = UpbStringToAbsl(
|
2034
2250
|
envoy_config_core_v3_TransportSocket_name(transport_socket));
|
2035
|
-
if (name
|
2036
|
-
|
2037
|
-
|
2038
|
-
|
2039
|
-
|
2040
|
-
|
2041
|
-
|
2042
|
-
|
2043
|
-
|
2044
|
-
|
2045
|
-
|
2046
|
-
|
2047
|
-
|
2048
|
-
|
2049
|
-
auto* common_tls_context =
|
2050
|
-
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_common_tls_context(
|
2051
|
-
downstream_tls_context_proto);
|
2052
|
-
if (common_tls_context != nullptr) {
|
2053
|
-
grpc_error* error = CommonTlsContextParse(
|
2054
|
-
common_tls_context, &downstream_tls_context->common_tls_context);
|
2055
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2056
|
-
}
|
2057
|
-
auto* require_client_certificate =
|
2058
|
-
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_client_certificate(
|
2059
|
-
downstream_tls_context_proto);
|
2060
|
-
if (require_client_certificate != nullptr) {
|
2061
|
-
downstream_tls_context->require_client_certificate =
|
2062
|
-
google_protobuf_BoolValue_value(require_client_certificate);
|
2063
|
-
}
|
2064
|
-
}
|
2065
|
-
if (downstream_tls_context->common_tls_context
|
2066
|
-
.tls_certificate_certificate_provider_instance.instance_name
|
2067
|
-
.empty()) {
|
2251
|
+
if (name != "envoy.transport_sockets.tls") {
|
2252
|
+
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2253
|
+
absl::StrCat("Unrecognized transport socket: ", name).c_str());
|
2254
|
+
}
|
2255
|
+
auto* typed_config =
|
2256
|
+
envoy_config_core_v3_TransportSocket_typed_config(transport_socket);
|
2257
|
+
if (typed_config != nullptr) {
|
2258
|
+
const upb_strview encoded_downstream_tls_context =
|
2259
|
+
google_protobuf_Any_value(typed_config);
|
2260
|
+
auto* downstream_tls_context_proto =
|
2261
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_parse(
|
2262
|
+
encoded_downstream_tls_context.data,
|
2263
|
+
encoded_downstream_tls_context.size, context.arena);
|
2264
|
+
if (downstream_tls_context_proto == nullptr) {
|
2068
2265
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2069
|
-
"
|
2070
|
-
"tls_certificate_certificate_provider_instance found.");
|
2266
|
+
"Can't decode downstream tls context.");
|
2071
2267
|
}
|
2268
|
+
auto* common_tls_context =
|
2269
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_common_tls_context(
|
2270
|
+
downstream_tls_context_proto);
|
2271
|
+
if (common_tls_context != nullptr) {
|
2272
|
+
grpc_error_handle error =
|
2273
|
+
CommonTlsContextParse(context, common_tls_context,
|
2274
|
+
&downstream_tls_context->common_tls_context);
|
2275
|
+
if (error != GRPC_ERROR_NONE) return error;
|
2276
|
+
}
|
2277
|
+
auto* require_client_certificate =
|
2278
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_client_certificate(
|
2279
|
+
downstream_tls_context_proto);
|
2280
|
+
if (require_client_certificate != nullptr) {
|
2281
|
+
downstream_tls_context->require_client_certificate =
|
2282
|
+
google_protobuf_BoolValue_value(require_client_certificate);
|
2283
|
+
}
|
2284
|
+
}
|
2285
|
+
if (downstream_tls_context->common_tls_context
|
2286
|
+
.tls_certificate_certificate_provider_instance.instance_name
|
2287
|
+
.empty()) {
|
2288
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2289
|
+
"TLS configuration provided but no "
|
2290
|
+
"tls_certificate_certificate_provider_instance found.");
|
2291
|
+
}
|
2292
|
+
if (downstream_tls_context->require_client_certificate &&
|
2293
|
+
downstream_tls_context->common_tls_context.combined_validation_context
|
2294
|
+
.validation_context_certificate_provider_instance.instance_name
|
2295
|
+
.empty()) {
|
2296
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2297
|
+
"TLS configuration requires client certificates but no certificate "
|
2298
|
+
"provider instance specified for validation.");
|
2072
2299
|
}
|
2073
2300
|
return GRPC_ERROR_NONE;
|
2074
2301
|
}
|
2075
2302
|
|
2076
|
-
|
2303
|
+
grpc_error_handle CidrRangeParse(
|
2077
2304
|
const envoy_config_core_v3_CidrRange* cidr_range_proto,
|
2078
2305
|
XdsApi::LdsUpdate::FilterChainMap::CidrRange* cidr_range) {
|
2079
2306
|
std::string address_prefix = UpbStringToStdString(
|
2080
2307
|
envoy_config_core_v3_CidrRange_address_prefix(cidr_range_proto));
|
2081
|
-
|
2082
|
-
|
2308
|
+
grpc_error_handle error =
|
2309
|
+
grpc_string_to_sockaddr(&cidr_range->address, address_prefix.c_str(), 0);
|
2083
2310
|
if (error != GRPC_ERROR_NONE) return error;
|
2084
2311
|
cidr_range->prefix_len = 0;
|
2085
2312
|
auto* prefix_len_proto =
|
@@ -2097,7 +2324,7 @@ grpc_error* CidrRangeParse(
|
|
2097
2324
|
return GRPC_ERROR_NONE;
|
2098
2325
|
}
|
2099
2326
|
|
2100
|
-
|
2327
|
+
grpc_error_handle FilterChainMatchParse(
|
2101
2328
|
const envoy_config_listener_v3_FilterChainMatch* filter_chain_match_proto,
|
2102
2329
|
FilterChain::FilterChainMatch* filter_chain_match) {
|
2103
2330
|
auto* destination_port =
|
@@ -2113,7 +2340,7 @@ grpc_error* FilterChainMatchParse(
|
|
2113
2340
|
filter_chain_match->prefix_ranges.reserve(size);
|
2114
2341
|
for (size_t i = 0; i < size; i++) {
|
2115
2342
|
XdsApi::LdsUpdate::FilterChainMap::CidrRange cidr_range;
|
2116
|
-
|
2343
|
+
grpc_error_handle error = CidrRangeParse(prefix_ranges[i], &cidr_range);
|
2117
2344
|
if (error != GRPC_ERROR_NONE) return error;
|
2118
2345
|
filter_chain_match->prefix_ranges.push_back(cidr_range);
|
2119
2346
|
}
|
@@ -2127,7 +2354,8 @@ grpc_error* FilterChainMatchParse(
|
|
2127
2354
|
filter_chain_match->source_prefix_ranges.reserve(size);
|
2128
2355
|
for (size_t i = 0; i < size; i++) {
|
2129
2356
|
XdsApi::LdsUpdate::FilterChainMap::CidrRange cidr_range;
|
2130
|
-
|
2357
|
+
grpc_error_handle error =
|
2358
|
+
CidrRangeParse(source_prefix_ranges[i], &cidr_range);
|
2131
2359
|
if (error != GRPC_ERROR_NONE) return error;
|
2132
2360
|
filter_chain_match->source_prefix_ranges.push_back(cidr_range);
|
2133
2361
|
}
|
@@ -2156,11 +2384,11 @@ grpc_error* FilterChainMatchParse(
|
|
2156
2384
|
return GRPC_ERROR_NONE;
|
2157
2385
|
}
|
2158
2386
|
|
2159
|
-
|
2387
|
+
grpc_error_handle FilterChainParse(
|
2160
2388
|
const EncodingContext& context,
|
2161
2389
|
const envoy_config_listener_v3_FilterChain* filter_chain_proto, bool is_v2,
|
2162
2390
|
FilterChain* filter_chain) {
|
2163
|
-
|
2391
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
2164
2392
|
auto* filter_chain_match =
|
2165
2393
|
envoy_config_listener_v3_FilterChain_filter_chain_match(
|
2166
2394
|
filter_chain_proto);
|
@@ -2223,8 +2451,8 @@ grpc_error* FilterChainParse(
|
|
2223
2451
|
return error;
|
2224
2452
|
}
|
2225
2453
|
|
2226
|
-
|
2227
|
-
|
2454
|
+
grpc_error_handle AddressParse(
|
2455
|
+
const envoy_config_core_v3_Address* address_proto, std::string* address) {
|
2228
2456
|
const auto* socket_address =
|
2229
2457
|
envoy_config_core_v3_Address_socket_address(address_proto);
|
2230
2458
|
if (socket_address == nullptr) {
|
@@ -2263,7 +2491,7 @@ struct InternalFilterChainMap {
|
|
2263
2491
|
DestinationIpMap destination_ip_map;
|
2264
2492
|
};
|
2265
2493
|
|
2266
|
-
|
2494
|
+
grpc_error_handle AddFilterChainDataForSourcePort(
|
2267
2495
|
const FilterChain& filter_chain,
|
2268
2496
|
XdsApi::LdsUpdate::FilterChainMap::SourcePortsMap* ports_map,
|
2269
2497
|
uint32_t port) {
|
@@ -2280,14 +2508,14 @@ grpc_error* AddFilterChainDataForSourcePort(
|
|
2280
2508
|
return GRPC_ERROR_NONE;
|
2281
2509
|
}
|
2282
2510
|
|
2283
|
-
|
2511
|
+
grpc_error_handle AddFilterChainDataForSourcePorts(
|
2284
2512
|
const FilterChain& filter_chain,
|
2285
2513
|
XdsApi::LdsUpdate::FilterChainMap::SourcePortsMap* ports_map) {
|
2286
2514
|
if (filter_chain.filter_chain_match.source_ports.empty()) {
|
2287
2515
|
return AddFilterChainDataForSourcePort(filter_chain, ports_map, 0);
|
2288
2516
|
} else {
|
2289
2517
|
for (uint32_t port : filter_chain.filter_chain_match.source_ports) {
|
2290
|
-
|
2518
|
+
grpc_error_handle error =
|
2291
2519
|
AddFilterChainDataForSourcePort(filter_chain, ports_map, port);
|
2292
2520
|
if (error != GRPC_ERROR_NONE) return error;
|
2293
2521
|
}
|
@@ -2295,7 +2523,7 @@ grpc_error* AddFilterChainDataForSourcePorts(
|
|
2295
2523
|
return GRPC_ERROR_NONE;
|
2296
2524
|
}
|
2297
2525
|
|
2298
|
-
|
2526
|
+
grpc_error_handle AddFilterChainDataForSourceIpRange(
|
2299
2527
|
const FilterChain& filter_chain,
|
2300
2528
|
InternalFilterChainMap::SourceIpMap* source_ip_map) {
|
2301
2529
|
if (filter_chain.filter_chain_match.source_prefix_ranges.empty()) {
|
@@ -2313,7 +2541,7 @@ grpc_error* AddFilterChainDataForSourceIpRange(
|
|
2313
2541
|
if (insert_result.second) {
|
2314
2542
|
insert_result.first->second.prefix_range.emplace(prefix_range);
|
2315
2543
|
}
|
2316
|
-
|
2544
|
+
grpc_error_handle error = AddFilterChainDataForSourcePorts(
|
2317
2545
|
filter_chain, &insert_result.first->second.ports_map);
|
2318
2546
|
if (error != GRPC_ERROR_NONE) return error;
|
2319
2547
|
}
|
@@ -2321,7 +2549,7 @@ grpc_error* AddFilterChainDataForSourceIpRange(
|
|
2321
2549
|
return GRPC_ERROR_NONE;
|
2322
2550
|
}
|
2323
2551
|
|
2324
|
-
|
2552
|
+
grpc_error_handle AddFilterChainDataForSourceType(
|
2325
2553
|
const FilterChain& filter_chain,
|
2326
2554
|
InternalFilterChainMap::DestinationIp* destination_ip) {
|
2327
2555
|
GPR_ASSERT(static_cast<unsigned int>(
|
@@ -2331,7 +2559,7 @@ grpc_error* AddFilterChainDataForSourceType(
|
|
2331
2559
|
filter_chain.filter_chain_match.source_type)]);
|
2332
2560
|
}
|
2333
2561
|
|
2334
|
-
|
2562
|
+
grpc_error_handle AddFilterChainDataForApplicationProtocols(
|
2335
2563
|
const FilterChain& filter_chain,
|
2336
2564
|
InternalFilterChainMap::DestinationIp* destination_ip) {
|
2337
2565
|
// Only allow filter chains that do not mention application protocols
|
@@ -2341,7 +2569,7 @@ grpc_error* AddFilterChainDataForApplicationProtocols(
|
|
2341
2569
|
return AddFilterChainDataForSourceType(filter_chain, destination_ip);
|
2342
2570
|
}
|
2343
2571
|
|
2344
|
-
|
2572
|
+
grpc_error_handle AddFilterChainDataForTransportProtocol(
|
2345
2573
|
const FilterChain& filter_chain,
|
2346
2574
|
InternalFilterChainMap::DestinationIp* destination_ip) {
|
2347
2575
|
const std::string& transport_protocol =
|
@@ -2369,7 +2597,7 @@ grpc_error* AddFilterChainDataForTransportProtocol(
|
|
2369
2597
|
destination_ip);
|
2370
2598
|
}
|
2371
2599
|
|
2372
|
-
|
2600
|
+
grpc_error_handle AddFilterChainDataForServerNames(
|
2373
2601
|
const FilterChain& filter_chain,
|
2374
2602
|
InternalFilterChainMap::DestinationIp* destination_ip) {
|
2375
2603
|
// Don't continue adding filter chains with server names mentioned
|
@@ -2379,7 +2607,7 @@ grpc_error* AddFilterChainDataForServerNames(
|
|
2379
2607
|
return AddFilterChainDataForTransportProtocol(filter_chain, destination_ip);
|
2380
2608
|
}
|
2381
2609
|
|
2382
|
-
|
2610
|
+
grpc_error_handle AddFilterChainDataForDestinationIpRange(
|
2383
2611
|
const FilterChain& filter_chain,
|
2384
2612
|
InternalFilterChainMap::DestinationIpMap* destination_ip_map) {
|
2385
2613
|
if (filter_chain.filter_chain_match.prefix_ranges.empty()) {
|
@@ -2397,7 +2625,7 @@ grpc_error* AddFilterChainDataForDestinationIpRange(
|
|
2397
2625
|
if (insert_result.second) {
|
2398
2626
|
insert_result.first->second.prefix_range.emplace(prefix_range);
|
2399
2627
|
}
|
2400
|
-
|
2628
|
+
grpc_error_handle error = AddFilterChainDataForServerNames(
|
2401
2629
|
filter_chain, &insert_result.first->second);
|
2402
2630
|
if (error != GRPC_ERROR_NONE) return error;
|
2403
2631
|
}
|
@@ -2424,14 +2652,14 @@ XdsApi::LdsUpdate::FilterChainMap BuildFromInternalFilterChainMap(
|
|
2424
2652
|
return filter_chain_map;
|
2425
2653
|
}
|
2426
2654
|
|
2427
|
-
|
2655
|
+
grpc_error_handle BuildFilterChainMap(
|
2428
2656
|
const std::vector<FilterChain>& filter_chains,
|
2429
2657
|
XdsApi::LdsUpdate::FilterChainMap* filter_chain_map) {
|
2430
2658
|
InternalFilterChainMap internal_filter_chain_map;
|
2431
2659
|
for (const auto& filter_chain : filter_chains) {
|
2432
2660
|
// Discard filter chain entries that specify destination port
|
2433
2661
|
if (filter_chain.filter_chain_match.destination_port != 0) continue;
|
2434
|
-
|
2662
|
+
grpc_error_handle error = AddFilterChainDataForDestinationIpRange(
|
2435
2663
|
filter_chain, &internal_filter_chain_map.destination_ip_map);
|
2436
2664
|
if (error != GRPC_ERROR_NONE) return error;
|
2437
2665
|
}
|
@@ -2440,12 +2668,12 @@ grpc_error* BuildFilterChainMap(
|
|
2440
2668
|
return GRPC_ERROR_NONE;
|
2441
2669
|
}
|
2442
2670
|
|
2443
|
-
|
2671
|
+
grpc_error_handle LdsResponseParseServer(
|
2444
2672
|
const EncodingContext& context,
|
2445
2673
|
const envoy_config_listener_v3_Listener* listener, bool is_v2,
|
2446
2674
|
XdsApi::LdsUpdate* lds_update) {
|
2447
2675
|
lds_update->type = XdsApi::LdsUpdate::ListenerType::kTcpListener;
|
2448
|
-
|
2676
|
+
grpc_error_handle error =
|
2449
2677
|
AddressParse(envoy_config_listener_v3_Listener_address(listener),
|
2450
2678
|
&lds_update->address);
|
2451
2679
|
if (error != GRPC_ERROR_NONE) return error;
|
@@ -2489,13 +2717,13 @@ grpc_error* LdsResponseParseServer(
|
|
2489
2717
|
return GRPC_ERROR_NONE;
|
2490
2718
|
}
|
2491
2719
|
|
2492
|
-
|
2720
|
+
grpc_error_handle LdsResponseParse(
|
2493
2721
|
const EncodingContext& context,
|
2494
2722
|
const envoy_service_discovery_v3_DiscoveryResponse* response,
|
2495
2723
|
const std::set<absl::string_view>& expected_listener_names,
|
2496
2724
|
XdsApi::LdsUpdateMap* lds_update_map,
|
2497
2725
|
std::set<std::string>* resource_names_failed) {
|
2498
|
-
std::vector<
|
2726
|
+
std::vector<grpc_error_handle> errors;
|
2499
2727
|
// Get the resources from the response.
|
2500
2728
|
size_t size;
|
2501
2729
|
const google_protobuf_Any* const* resources =
|
@@ -2564,7 +2792,7 @@ grpc_error* LdsResponseParse(
|
|
2564
2792
|
resource_names_failed->insert(listener_name);
|
2565
2793
|
continue;
|
2566
2794
|
}
|
2567
|
-
|
2795
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
2568
2796
|
if (api_listener != nullptr) {
|
2569
2797
|
error = LdsResponseParseClient(context, api_listener, is_v2, &lds_update);
|
2570
2798
|
} else {
|
@@ -2581,13 +2809,13 @@ grpc_error* LdsResponseParse(
|
|
2581
2809
|
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing LDS response", &errors);
|
2582
2810
|
}
|
2583
2811
|
|
2584
|
-
|
2812
|
+
grpc_error_handle RdsResponseParse(
|
2585
2813
|
const EncodingContext& context,
|
2586
2814
|
const envoy_service_discovery_v3_DiscoveryResponse* response,
|
2587
2815
|
const std::set<absl::string_view>& expected_route_configuration_names,
|
2588
2816
|
XdsApi::RdsUpdateMap* rds_update_map,
|
2589
2817
|
std::set<std::string>* resource_names_failed) {
|
2590
|
-
std::vector<
|
2818
|
+
std::vector<grpc_error_handle> errors;
|
2591
2819
|
// Get the resources from the response.
|
2592
2820
|
size_t size;
|
2593
2821
|
const google_protobuf_Any* const* resources =
|
@@ -2638,7 +2866,8 @@ grpc_error* RdsResponseParse(
|
|
2638
2866
|
rds_resource_data.serialized_proto =
|
2639
2867
|
UpbStringToStdString(encoded_route_config);
|
2640
2868
|
// Parse the route_config.
|
2641
|
-
|
2869
|
+
grpc_error_handle error =
|
2870
|
+
RouteConfigParse(context, route_config, &rds_update);
|
2642
2871
|
if (error != GRPC_ERROR_NONE) {
|
2643
2872
|
errors.push_back(grpc_error_add_child(
|
2644
2873
|
GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
@@ -2650,13 +2879,61 @@ grpc_error* RdsResponseParse(
|
|
2650
2879
|
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing RDS response", &errors);
|
2651
2880
|
}
|
2652
2881
|
|
2653
|
-
|
2882
|
+
grpc_error_handle UpstreamTlsContextParse(
|
2883
|
+
const EncodingContext& context,
|
2884
|
+
const envoy_config_core_v3_TransportSocket* transport_socket,
|
2885
|
+
XdsApi::CommonTlsContext* common_tls_context) {
|
2886
|
+
// Record Upstream tls context
|
2887
|
+
absl::string_view name = UpbStringToAbsl(
|
2888
|
+
envoy_config_core_v3_TransportSocket_name(transport_socket));
|
2889
|
+
if (name != "envoy.transport_sockets.tls") {
|
2890
|
+
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2891
|
+
absl::StrCat("Unrecognized transport socket: ", name).c_str());
|
2892
|
+
}
|
2893
|
+
auto* typed_config =
|
2894
|
+
envoy_config_core_v3_TransportSocket_typed_config(transport_socket);
|
2895
|
+
if (typed_config != nullptr) {
|
2896
|
+
const upb_strview encoded_upstream_tls_context =
|
2897
|
+
google_protobuf_Any_value(typed_config);
|
2898
|
+
auto* upstream_tls_context =
|
2899
|
+
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_parse(
|
2900
|
+
encoded_upstream_tls_context.data,
|
2901
|
+
encoded_upstream_tls_context.size, context.arena);
|
2902
|
+
if (upstream_tls_context == nullptr) {
|
2903
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2904
|
+
"Can't decode upstream tls context.");
|
2905
|
+
}
|
2906
|
+
auto* common_tls_context_proto =
|
2907
|
+
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_common_tls_context(
|
2908
|
+
upstream_tls_context);
|
2909
|
+
if (common_tls_context_proto != nullptr) {
|
2910
|
+
grpc_error_handle error = CommonTlsContextParse(
|
2911
|
+
context, common_tls_context_proto, common_tls_context);
|
2912
|
+
if (error != GRPC_ERROR_NONE) {
|
2913
|
+
return grpc_error_add_child(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2914
|
+
"Error parsing UpstreamTlsContext"),
|
2915
|
+
error);
|
2916
|
+
}
|
2917
|
+
}
|
2918
|
+
}
|
2919
|
+
if (common_tls_context->combined_validation_context
|
2920
|
+
.validation_context_certificate_provider_instance.instance_name
|
2921
|
+
.empty()) {
|
2922
|
+
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2923
|
+
"UpstreamTlsContext: TLS configuration provided but no "
|
2924
|
+
"validation_context_certificate_provider_instance "
|
2925
|
+
"found.");
|
2926
|
+
}
|
2927
|
+
return GRPC_ERROR_NONE;
|
2928
|
+
}
|
2929
|
+
|
2930
|
+
grpc_error_handle CdsResponseParse(
|
2654
2931
|
const EncodingContext& context,
|
2655
2932
|
const envoy_service_discovery_v3_DiscoveryResponse* response,
|
2656
2933
|
const std::set<absl::string_view>& expected_cluster_names,
|
2657
2934
|
XdsApi::CdsUpdateMap* cds_update_map,
|
2658
2935
|
std::set<std::string>* resource_names_failed) {
|
2659
|
-
std::vector<
|
2936
|
+
std::vector<grpc_error_handle> errors;
|
2660
2937
|
// Get the resources from the response.
|
2661
2938
|
size_t size;
|
2662
2939
|
const google_protobuf_Any* const* resources =
|
@@ -2699,10 +2976,11 @@ grpc_error* CdsResponseParse(
|
|
2699
2976
|
resource_names_failed->insert(cluster_name);
|
2700
2977
|
continue;
|
2701
2978
|
}
|
2702
|
-
//
|
2979
|
+
// Add the cluster to cds_update_map.
|
2703
2980
|
XdsApi::CdsResourceData& cds_resource_data =
|
2704
2981
|
(*cds_update_map)[cluster_name];
|
2705
2982
|
XdsApi::CdsUpdate& cds_update = cds_resource_data.resource;
|
2983
|
+
// Store serialized proto.
|
2706
2984
|
cds_resource_data.serialized_proto = UpbStringToStdString(encoded_cluster);
|
2707
2985
|
// Check the cluster_discovery_type.
|
2708
2986
|
if (!envoy_config_cluster_v3_Cluster_has_type(cluster) &&
|
@@ -2744,6 +3022,102 @@ grpc_error* CdsResponseParse(
|
|
2744
3022
|
} else if (envoy_config_cluster_v3_Cluster_type(cluster) ==
|
2745
3023
|
envoy_config_cluster_v3_Cluster_LOGICAL_DNS) {
|
2746
3024
|
cds_update.cluster_type = XdsApi::CdsUpdate::ClusterType::LOGICAL_DNS;
|
3025
|
+
const auto* load_assignment =
|
3026
|
+
envoy_config_cluster_v3_Cluster_load_assignment(cluster);
|
3027
|
+
if (load_assignment == nullptr) {
|
3028
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3029
|
+
absl::StrCat(
|
3030
|
+
cluster_name,
|
3031
|
+
": load_assignment not present for LOGICAL_DNS cluster")
|
3032
|
+
.c_str()));
|
3033
|
+
resource_names_failed->insert(cluster_name);
|
3034
|
+
continue;
|
3035
|
+
}
|
3036
|
+
size_t num_localities;
|
3037
|
+
const auto* const* localities =
|
3038
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(
|
3039
|
+
load_assignment, &num_localities);
|
3040
|
+
if (num_localities != 1) {
|
3041
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3042
|
+
absl::StrCat(cluster_name,
|
3043
|
+
": load_assignment for LOGICAL_DNS cluster must have "
|
3044
|
+
"exactly one locality, found ",
|
3045
|
+
num_localities)
|
3046
|
+
.c_str()));
|
3047
|
+
resource_names_failed->insert(cluster_name);
|
3048
|
+
continue;
|
3049
|
+
}
|
3050
|
+
size_t num_endpoints;
|
3051
|
+
const auto* const* endpoints =
|
3052
|
+
envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(
|
3053
|
+
localities[0], &num_endpoints);
|
3054
|
+
if (num_endpoints != 1) {
|
3055
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3056
|
+
absl::StrCat(cluster_name,
|
3057
|
+
": locality for LOGICAL_DNS cluster must have "
|
3058
|
+
"exactly one endpoint, found ",
|
3059
|
+
num_endpoints)
|
3060
|
+
.c_str()));
|
3061
|
+
resource_names_failed->insert(cluster_name);
|
3062
|
+
continue;
|
3063
|
+
}
|
3064
|
+
const auto* endpoint =
|
3065
|
+
envoy_config_endpoint_v3_LbEndpoint_endpoint(endpoints[0]);
|
3066
|
+
if (endpoint == nullptr) {
|
3067
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3068
|
+
absl::StrCat(cluster_name, ": LbEndpoint endpoint field not set")
|
3069
|
+
.c_str()));
|
3070
|
+
resource_names_failed->insert(cluster_name);
|
3071
|
+
continue;
|
3072
|
+
}
|
3073
|
+
const auto* address = envoy_config_endpoint_v3_Endpoint_address(endpoint);
|
3074
|
+
if (address == nullptr) {
|
3075
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3076
|
+
absl::StrCat(cluster_name, ": Endpoint address field not set")
|
3077
|
+
.c_str()));
|
3078
|
+
resource_names_failed->insert(cluster_name);
|
3079
|
+
continue;
|
3080
|
+
}
|
3081
|
+
const auto* socket_address =
|
3082
|
+
envoy_config_core_v3_Address_socket_address(address);
|
3083
|
+
if (socket_address == nullptr) {
|
3084
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3085
|
+
absl::StrCat(cluster_name, ": Address socket_address field not set")
|
3086
|
+
.c_str()));
|
3087
|
+
resource_names_failed->insert(cluster_name);
|
3088
|
+
continue;
|
3089
|
+
}
|
3090
|
+
if (envoy_config_core_v3_SocketAddress_resolver_name(socket_address)
|
3091
|
+
.size != 0) {
|
3092
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3093
|
+
absl::StrCat(
|
3094
|
+
cluster_name,
|
3095
|
+
": LOGICAL_DNS clusters must NOT have a custom resolver "
|
3096
|
+
"name set")
|
3097
|
+
.c_str()));
|
3098
|
+
resource_names_failed->insert(cluster_name);
|
3099
|
+
continue;
|
3100
|
+
}
|
3101
|
+
absl::string_view address_str = UpbStringToAbsl(
|
3102
|
+
envoy_config_core_v3_SocketAddress_address(socket_address));
|
3103
|
+
if (address_str.empty()) {
|
3104
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3105
|
+
absl::StrCat(cluster_name, ": SocketAddress address field not set")
|
3106
|
+
.c_str()));
|
3107
|
+
resource_names_failed->insert(cluster_name);
|
3108
|
+
continue;
|
3109
|
+
}
|
3110
|
+
if (!envoy_config_core_v3_SocketAddress_has_port_value(socket_address)) {
|
3111
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3112
|
+
absl::StrCat(cluster_name,
|
3113
|
+
": SocketAddress port_value field not set")
|
3114
|
+
.c_str()));
|
3115
|
+
resource_names_failed->insert(cluster_name);
|
3116
|
+
continue;
|
3117
|
+
}
|
3118
|
+
cds_update.dns_hostname = JoinHostPort(
|
3119
|
+
address_str,
|
3120
|
+
envoy_config_core_v3_SocketAddress_port_value(socket_address));
|
2747
3121
|
} else {
|
2748
3122
|
if (envoy_config_cluster_v3_Cluster_has_cluster_type(cluster)) {
|
2749
3123
|
const envoy_config_cluster_v3_Cluster_CustomClusterType*
|
@@ -2807,75 +3181,61 @@ grpc_error* CdsResponseParse(
|
|
2807
3181
|
// Record ring hash lb config
|
2808
3182
|
auto* ring_hash_config =
|
2809
3183
|
envoy_config_cluster_v3_Cluster_ring_hash_lb_config(cluster);
|
2810
|
-
if (ring_hash_config
|
2811
|
-
|
2812
|
-
|
2813
|
-
|
2814
|
-
|
2815
|
-
|
2816
|
-
|
2817
|
-
|
2818
|
-
|
2819
|
-
|
2820
|
-
|
2821
|
-
|
2822
|
-
|
2823
|
-
|
2824
|
-
|
2825
|
-
|
2826
|
-
|
2827
|
-
absl::StrCat(
|
2828
|
-
cluster_name,
|
2829
|
-
": max_ring_size is not in the range of 1 to 8388608.")
|
2830
|
-
.c_str()));
|
2831
|
-
resource_names_failed->insert(cluster_name);
|
2832
|
-
continue;
|
3184
|
+
if (ring_hash_config != nullptr) {
|
3185
|
+
const google_protobuf_UInt64Value* max_ring_size =
|
3186
|
+
envoy_config_cluster_v3_Cluster_RingHashLbConfig_maximum_ring_size(
|
3187
|
+
ring_hash_config);
|
3188
|
+
if (max_ring_size != nullptr) {
|
3189
|
+
cds_update.max_ring_size =
|
3190
|
+
google_protobuf_UInt64Value_value(max_ring_size);
|
3191
|
+
if (cds_update.max_ring_size > 8388608 ||
|
3192
|
+
cds_update.max_ring_size == 0) {
|
3193
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3194
|
+
absl::StrCat(
|
3195
|
+
cluster_name,
|
3196
|
+
": max_ring_size is not in the range of 1 to 8388608.")
|
3197
|
+
.c_str()));
|
3198
|
+
resource_names_failed->insert(cluster_name);
|
3199
|
+
continue;
|
3200
|
+
}
|
2833
3201
|
}
|
2834
|
-
|
2835
|
-
|
2836
|
-
|
2837
|
-
|
2838
|
-
|
2839
|
-
|
2840
|
-
|
2841
|
-
|
2842
|
-
|
2843
|
-
|
2844
|
-
|
2845
|
-
|
2846
|
-
|
2847
|
-
|
2848
|
-
|
2849
|
-
|
3202
|
+
const google_protobuf_UInt64Value* min_ring_size =
|
3203
|
+
envoy_config_cluster_v3_Cluster_RingHashLbConfig_minimum_ring_size(
|
3204
|
+
ring_hash_config);
|
3205
|
+
if (min_ring_size != nullptr) {
|
3206
|
+
cds_update.min_ring_size =
|
3207
|
+
google_protobuf_UInt64Value_value(min_ring_size);
|
3208
|
+
if (cds_update.min_ring_size > 8388608 ||
|
3209
|
+
cds_update.min_ring_size == 0) {
|
3210
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3211
|
+
absl::StrCat(
|
3212
|
+
cluster_name,
|
3213
|
+
": min_ring_size is not in the range of 1 to 8388608.")
|
3214
|
+
.c_str()));
|
3215
|
+
resource_names_failed->insert(cluster_name);
|
3216
|
+
continue;
|
3217
|
+
}
|
3218
|
+
if (cds_update.min_ring_size > cds_update.max_ring_size) {
|
3219
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3220
|
+
absl::StrCat(
|
3221
|
+
cluster_name,
|
3222
|
+
": min_ring_size cannot be greater than max_ring_size.")
|
3223
|
+
.c_str()));
|
3224
|
+
resource_names_failed->insert(cluster_name);
|
3225
|
+
continue;
|
3226
|
+
}
|
2850
3227
|
}
|
2851
|
-
if (
|
3228
|
+
if (envoy_config_cluster_v3_Cluster_RingHashLbConfig_hash_function(
|
3229
|
+
ring_hash_config) !=
|
3230
|
+
envoy_config_cluster_v3_Cluster_RingHashLbConfig_XX_HASH) {
|
2852
3231
|
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2853
|
-
absl::StrCat(
|
2854
|
-
|
2855
|
-
": min_ring_size cannot be greater than max_ring_size.")
|
3232
|
+
absl::StrCat(cluster_name,
|
3233
|
+
": ring hash lb config has invalid hash function.")
|
2856
3234
|
.c_str()));
|
2857
3235
|
resource_names_failed->insert(cluster_name);
|
2858
3236
|
continue;
|
2859
3237
|
}
|
2860
3238
|
}
|
2861
|
-
if (envoy_config_cluster_v3_Cluster_RingHashLbConfig_hash_function(
|
2862
|
-
ring_hash_config) ==
|
2863
|
-
envoy_config_cluster_v3_Cluster_RingHashLbConfig_XX_HASH) {
|
2864
|
-
cds_update.hash_function = XdsApi::CdsUpdate::HashFunction::XX_HASH;
|
2865
|
-
} else if (
|
2866
|
-
envoy_config_cluster_v3_Cluster_RingHashLbConfig_hash_function(
|
2867
|
-
ring_hash_config) ==
|
2868
|
-
envoy_config_cluster_v3_Cluster_RingHashLbConfig_MURMUR_HASH_2) {
|
2869
|
-
cds_update.hash_function =
|
2870
|
-
XdsApi::CdsUpdate::HashFunction::MURMUR_HASH_2;
|
2871
|
-
} else {
|
2872
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2873
|
-
absl::StrCat(cluster_name,
|
2874
|
-
": ring hash lb config has invalid hash function.")
|
2875
|
-
.c_str()));
|
2876
|
-
resource_names_failed->insert(cluster_name);
|
2877
|
-
continue;
|
2878
|
-
}
|
2879
3239
|
} else {
|
2880
3240
|
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2881
3241
|
absl::StrCat(cluster_name, ": LB policy is not supported.").c_str()));
|
@@ -2883,60 +3243,21 @@ grpc_error* CdsResponseParse(
|
|
2883
3243
|
continue;
|
2884
3244
|
}
|
2885
3245
|
if (XdsSecurityEnabled()) {
|
2886
|
-
// Record Upstream tls context
|
2887
3246
|
auto* transport_socket =
|
2888
3247
|
envoy_config_cluster_v3_Cluster_transport_socket(cluster);
|
2889
3248
|
if (transport_socket != nullptr) {
|
2890
|
-
|
2891
|
-
|
2892
|
-
if (
|
2893
|
-
|
2894
|
-
|
2895
|
-
|
2896
|
-
|
2897
|
-
|
2898
|
-
|
2899
|
-
|
2900
|
-
|
2901
|
-
|
2902
|
-
encoded_upstream_tls_context.size, context.arena);
|
2903
|
-
if (upstream_tls_context == nullptr) {
|
2904
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2905
|
-
absl::StrCat(cluster_name,
|
2906
|
-
": Can't decode upstream tls context.")
|
2907
|
-
.c_str()));
|
2908
|
-
resource_names_failed->insert(cluster_name);
|
2909
|
-
continue;
|
2910
|
-
}
|
2911
|
-
auto* common_tls_context =
|
2912
|
-
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_common_tls_context(
|
2913
|
-
upstream_tls_context);
|
2914
|
-
if (common_tls_context != nullptr) {
|
2915
|
-
grpc_error* error = CommonTlsContextParse(
|
2916
|
-
common_tls_context, &cds_update.common_tls_context);
|
2917
|
-
if (error != GRPC_ERROR_NONE) {
|
2918
|
-
errors.push_back(grpc_error_add_child(
|
2919
|
-
GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2920
|
-
absl::StrCat(cluster_name, ": error in TLS context")
|
2921
|
-
.c_str()),
|
2922
|
-
error));
|
2923
|
-
resource_names_failed->insert(cluster_name);
|
2924
|
-
continue;
|
2925
|
-
}
|
2926
|
-
}
|
2927
|
-
}
|
2928
|
-
if (cds_update.common_tls_context.combined_validation_context
|
2929
|
-
.validation_context_certificate_provider_instance
|
2930
|
-
.instance_name.empty()) {
|
2931
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2932
|
-
absl::StrCat(cluster_name,
|
2933
|
-
"TLS configuration provided but no "
|
2934
|
-
"validation_context_certificate_provider_instance "
|
2935
|
-
"found.")
|
2936
|
-
.c_str()));
|
2937
|
-
resource_names_failed->insert(cluster_name);
|
2938
|
-
continue;
|
2939
|
-
}
|
3249
|
+
grpc_error_handle error = UpstreamTlsContextParse(
|
3250
|
+
context, transport_socket, &cds_update.common_tls_context);
|
3251
|
+
if (error != GRPC_ERROR_NONE) {
|
3252
|
+
errors.push_back(grpc_error_add_child(
|
3253
|
+
GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3254
|
+
absl::StrCat(
|
3255
|
+
"Error parsing security configuration for cluster: ",
|
3256
|
+
cluster_name)
|
3257
|
+
.c_str()),
|
3258
|
+
error));
|
3259
|
+
resource_names_failed->insert(cluster_name);
|
3260
|
+
continue;
|
2940
3261
|
}
|
2941
3262
|
}
|
2942
3263
|
}
|
@@ -2983,7 +3304,7 @@ grpc_error* CdsResponseParse(
|
|
2983
3304
|
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing CDS response", &errors);
|
2984
3305
|
}
|
2985
3306
|
|
2986
|
-
|
3307
|
+
grpc_error_handle ServerAddressParseAndAppend(
|
2987
3308
|
const envoy_config_endpoint_v3_LbEndpoint* lb_endpoint,
|
2988
3309
|
ServerAddressList* list) {
|
2989
3310
|
// If health_status is not HEALTHY or UNKNOWN, skip this endpoint.
|
@@ -3006,17 +3327,32 @@ grpc_error* ServerAddressParseAndAppend(
|
|
3006
3327
|
if (GPR_UNLIKELY(port >> 16) != 0) {
|
3007
3328
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid port.");
|
3008
3329
|
}
|
3330
|
+
// Find load_balancing_weight for the endpoint.
|
3331
|
+
const google_protobuf_UInt32Value* load_balancing_weight =
|
3332
|
+
envoy_config_endpoint_v3_LbEndpoint_load_balancing_weight(lb_endpoint);
|
3333
|
+
const int32_t weight =
|
3334
|
+
load_balancing_weight != nullptr
|
3335
|
+
? google_protobuf_UInt32Value_value(load_balancing_weight)
|
3336
|
+
: 500;
|
3337
|
+
if (weight == 0) {
|
3338
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3339
|
+
"Invalid endpoint weight of 0.");
|
3340
|
+
}
|
3009
3341
|
// Populate grpc_resolved_address.
|
3010
3342
|
grpc_resolved_address addr;
|
3011
|
-
|
3012
|
-
|
3343
|
+
grpc_error_handle error =
|
3344
|
+
grpc_string_to_sockaddr(&addr, address_str.c_str(), port);
|
3013
3345
|
if (error != GRPC_ERROR_NONE) return error;
|
3014
3346
|
// Append the address to the list.
|
3015
|
-
|
3347
|
+
std::map<const char*, std::unique_ptr<ServerAddress::AttributeInterface>>
|
3348
|
+
attributes;
|
3349
|
+
attributes[ServerAddressWeightAttribute::kServerAddressWeightAttributeKey] =
|
3350
|
+
absl::make_unique<ServerAddressWeightAttribute>(weight);
|
3351
|
+
list->emplace_back(addr, nullptr, std::move(attributes));
|
3016
3352
|
return GRPC_ERROR_NONE;
|
3017
3353
|
}
|
3018
3354
|
|
3019
|
-
|
3355
|
+
grpc_error_handle LocalityParse(
|
3020
3356
|
const envoy_config_endpoint_v3_LocalityLbEndpoints* locality_lb_endpoints,
|
3021
3357
|
XdsApi::EdsUpdate::Priority::Locality* output_locality, size_t* priority) {
|
3022
3358
|
// Parse LB weight.
|
@@ -3050,7 +3386,7 @@ grpc_error* LocalityParse(
|
|
3050
3386
|
envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(
|
3051
3387
|
locality_lb_endpoints, &size);
|
3052
3388
|
for (size_t i = 0; i < size; ++i) {
|
3053
|
-
|
3389
|
+
grpc_error_handle error = ServerAddressParseAndAppend(
|
3054
3390
|
lb_endpoints[i], &output_locality->endpoints);
|
3055
3391
|
if (error != GRPC_ERROR_NONE) return error;
|
3056
3392
|
}
|
@@ -3060,7 +3396,7 @@ grpc_error* LocalityParse(
|
|
3060
3396
|
return GRPC_ERROR_NONE;
|
3061
3397
|
}
|
3062
3398
|
|
3063
|
-
|
3399
|
+
grpc_error_handle DropParseAndAppend(
|
3064
3400
|
const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload*
|
3065
3401
|
drop_overload,
|
3066
3402
|
XdsApi::EdsUpdate::DropConfig* drop_config) {
|
@@ -3099,13 +3435,13 @@ grpc_error* DropParseAndAppend(
|
|
3099
3435
|
return GRPC_ERROR_NONE;
|
3100
3436
|
}
|
3101
3437
|
|
3102
|
-
|
3438
|
+
grpc_error_handle EdsResponseParse(
|
3103
3439
|
const EncodingContext& context,
|
3104
3440
|
const envoy_service_discovery_v3_DiscoveryResponse* response,
|
3105
3441
|
const std::set<absl::string_view>& expected_eds_service_names,
|
3106
3442
|
XdsApi::EdsUpdateMap* eds_update_map,
|
3107
3443
|
std::set<std::string>* resource_names_failed) {
|
3108
|
-
std::vector<
|
3444
|
+
std::vector<grpc_error_handle> errors;
|
3109
3445
|
// Get the resources from the response.
|
3110
3446
|
size_t size;
|
3111
3447
|
const google_protobuf_Any* const* resources =
|
@@ -3162,7 +3498,7 @@ grpc_error* EdsResponseParse(
|
|
3162
3498
|
const envoy_config_endpoint_v3_LocalityLbEndpoints* const* endpoints =
|
3163
3499
|
envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(
|
3164
3500
|
cluster_load_assignment, &locality_size);
|
3165
|
-
|
3501
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
3166
3502
|
for (size_t j = 0; j < locality_size; ++j) {
|
3167
3503
|
size_t priority;
|
3168
3504
|
XdsApi::EdsUpdate::Priority::Locality locality;
|
@@ -3257,8 +3593,12 @@ XdsApi::AdsParseResult XdsApi::ParseAdsResponse(
|
|
3257
3593
|
const std::set<absl::string_view>& expected_eds_service_names) {
|
3258
3594
|
AdsParseResult result;
|
3259
3595
|
upb::Arena arena;
|
3260
|
-
const EncodingContext context = {client_,
|
3261
|
-
|
3596
|
+
const EncodingContext context = {client_,
|
3597
|
+
tracer_,
|
3598
|
+
symtab_.ptr(),
|
3599
|
+
arena.ptr(),
|
3600
|
+
server.ShouldUseV3(),
|
3601
|
+
certificate_provider_definition_map_};
|
3262
3602
|
// Decode the response.
|
3263
3603
|
const envoy_service_discovery_v3_DiscoveryResponse* response =
|
3264
3604
|
envoy_service_discovery_v3_DiscoveryResponse_parse(
|
@@ -3345,8 +3685,12 @@ grpc_slice SerializeLrsRequest(
|
|
3345
3685
|
grpc_slice XdsApi::CreateLrsInitialRequest(
|
3346
3686
|
const XdsBootstrap::XdsServer& server) {
|
3347
3687
|
upb::Arena arena;
|
3348
|
-
const EncodingContext context = {client_,
|
3349
|
-
|
3688
|
+
const EncodingContext context = {client_,
|
3689
|
+
tracer_,
|
3690
|
+
symtab_.ptr(),
|
3691
|
+
arena.ptr(),
|
3692
|
+
server.ShouldUseV3(),
|
3693
|
+
certificate_provider_definition_map_};
|
3350
3694
|
// Create a request.
|
3351
3695
|
envoy_service_load_stats_v3_LoadStatsRequest* request =
|
3352
3696
|
envoy_service_load_stats_v3_LoadStatsRequest_new(arena.ptr());
|
@@ -3354,7 +3698,8 @@ grpc_slice XdsApi::CreateLrsInitialRequest(
|
|
3354
3698
|
envoy_config_core_v3_Node* node_msg =
|
3355
3699
|
envoy_service_load_stats_v3_LoadStatsRequest_mutable_node(request,
|
3356
3700
|
arena.ptr());
|
3357
|
-
PopulateNode(context, node_, build_version_, user_agent_name_,
|
3701
|
+
PopulateNode(context, node_, build_version_, user_agent_name_,
|
3702
|
+
user_agent_version_, node_msg);
|
3358
3703
|
envoy_config_core_v3_Node_add_client_features(
|
3359
3704
|
node_msg, upb_strview_makez("envoy.lrs.supports_send_all_clusters"),
|
3360
3705
|
arena.ptr());
|
@@ -3415,8 +3760,9 @@ void LocalityStatsPopulate(
|
|
3415
3760
|
grpc_slice XdsApi::CreateLrsRequest(
|
3416
3761
|
ClusterLoadReportMap cluster_load_report_map) {
|
3417
3762
|
upb::Arena arena;
|
3418
|
-
const EncodingContext context = {
|
3419
|
-
|
3763
|
+
const EncodingContext context = {
|
3764
|
+
client_, tracer_, symtab_.ptr(),
|
3765
|
+
arena.ptr(), false, certificate_provider_definition_map_};
|
3420
3766
|
// Create a request.
|
3421
3767
|
envoy_service_load_stats_v3_LoadStatsRequest* request =
|
3422
3768
|
envoy_service_load_stats_v3_LoadStatsRequest_new(arena.ptr());
|
@@ -3476,10 +3822,10 @@ grpc_slice XdsApi::CreateLrsRequest(
|
|
3476
3822
|
return SerializeLrsRequest(context, request);
|
3477
3823
|
}
|
3478
3824
|
|
3479
|
-
|
3480
|
-
|
3481
|
-
|
3482
|
-
|
3825
|
+
grpc_error_handle XdsApi::ParseLrsResponse(
|
3826
|
+
const grpc_slice& encoded_response, bool* send_all_clusters,
|
3827
|
+
std::set<std::string>* cluster_names,
|
3828
|
+
grpc_millis* load_reporting_interval) {
|
3483
3829
|
upb::Arena arena;
|
3484
3830
|
// Decode the response.
|
3485
3831
|
const envoy_service_load_stats_v3_LoadStatsResponse* decoded_response =
|
@@ -3749,9 +4095,11 @@ std::string XdsApi::AssembleClientConfig(
|
|
3749
4095
|
// Fill-in the node information
|
3750
4096
|
auto* node = envoy_service_status_v3_ClientConfig_mutable_node(client_config,
|
3751
4097
|
arena.ptr());
|
3752
|
-
const EncodingContext context = {
|
3753
|
-
|
3754
|
-
|
4098
|
+
const EncodingContext context = {
|
4099
|
+
client_, tracer_, symtab_.ptr(),
|
4100
|
+
arena.ptr(), true, certificate_provider_definition_map_};
|
4101
|
+
PopulateNode(context, node_, build_version_, user_agent_name_,
|
4102
|
+
user_agent_version_, node);
|
3755
4103
|
// Dump each xDS-type config into PerXdsConfig
|
3756
4104
|
for (auto& p : resource_type_metadata_map) {
|
3757
4105
|
absl::string_view type_url = p.first;
|