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
@@ -67,22 +67,16 @@ class XdsBootstrap {
|
|
67
67
|
bool ShouldUseV3() const;
|
68
68
|
};
|
69
69
|
|
70
|
-
// Creates bootstrap object
|
71
|
-
// for the environment:
|
72
|
-
// - If the GRPC_XDS_BOOTSTRAP env var is set, reads the file it specifies
|
73
|
-
// to obtain the bootstrap JSON.
|
74
|
-
// - Otherwise, if the GRPC_XDS_BOOTSTRAP_CONFIG env var is set, reads the
|
75
|
-
// content of that env var to obtain the bootstrap JSON.
|
76
|
-
// - Otherwise, the JSON will be read from fallback_config (if non-null).
|
70
|
+
// Creates bootstrap object from json_string.
|
77
71
|
// If *error is not GRPC_ERROR_NONE after returning, then there was an
|
78
|
-
// error
|
79
|
-
static std::unique_ptr<XdsBootstrap> Create(
|
80
|
-
|
81
|
-
const char* fallback_config,
|
82
|
-
grpc_error** error);
|
72
|
+
// error parsing the contents.
|
73
|
+
static std::unique_ptr<XdsBootstrap> Create(absl::string_view json_string,
|
74
|
+
grpc_error_handle* error);
|
83
75
|
|
84
|
-
// Do not instantiate directly -- use
|
85
|
-
XdsBootstrap(Json json,
|
76
|
+
// Do not instantiate directly -- use Create() above instead.
|
77
|
+
XdsBootstrap(Json json, grpc_error_handle* error);
|
78
|
+
|
79
|
+
std::string ToString() const;
|
86
80
|
|
87
81
|
// TODO(roth): We currently support only one server. Fix this when we
|
88
82
|
// add support for fallback for the xds channel.
|
@@ -98,16 +92,17 @@ class XdsBootstrap {
|
|
98
92
|
}
|
99
93
|
|
100
94
|
private:
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
95
|
+
grpc_error_handle ParseXdsServerList(Json* json);
|
96
|
+
grpc_error_handle ParseXdsServer(Json* json, size_t idx);
|
97
|
+
grpc_error_handle ParseChannelCredsArray(Json* json, XdsServer* server);
|
98
|
+
grpc_error_handle ParseChannelCreds(Json* json, size_t idx,
|
99
|
+
XdsServer* server);
|
100
|
+
grpc_error_handle ParseServerFeaturesArray(Json* json, XdsServer* server);
|
101
|
+
grpc_error_handle ParseNode(Json* json);
|
102
|
+
grpc_error_handle ParseLocality(Json* json);
|
103
|
+
grpc_error_handle ParseCertificateProviders(Json* json);
|
104
|
+
grpc_error_handle ParseCertificateProvider(const std::string& instance_name,
|
105
|
+
Json* certificate_provider_json);
|
111
106
|
|
112
107
|
absl::InlinedVector<XdsServer, 1> servers_;
|
113
108
|
std::unique_ptr<Node> node_;
|
@@ -51,8 +51,8 @@ class RootCertificatesWatcher
|
|
51
51
|
}
|
52
52
|
}
|
53
53
|
|
54
|
-
void OnError(
|
55
|
-
|
54
|
+
void OnError(grpc_error_handle root_cert_error,
|
55
|
+
grpc_error_handle identity_cert_error) override {
|
56
56
|
if (root_cert_error != GRPC_ERROR_NONE) {
|
57
57
|
parent_->SetErrorForCert(cert_name_, root_cert_error /* pass the ref */,
|
58
58
|
absl::nullopt);
|
@@ -86,8 +86,8 @@ class IdentityCertificatesWatcher
|
|
86
86
|
}
|
87
87
|
}
|
88
88
|
|
89
|
-
void OnError(
|
90
|
-
|
89
|
+
void OnError(grpc_error_handle root_cert_error,
|
90
|
+
grpc_error_handle identity_cert_error) override {
|
91
91
|
if (identity_cert_error != GRPC_ERROR_NONE) {
|
92
92
|
parent_->SetErrorForCert(cert_name_, absl::nullopt,
|
93
93
|
identity_cert_error /* pass the ref */);
|
@@ -127,9 +127,11 @@ class XdsCertificateProvider : public grpc_tls_certificate_provider {
|
|
127
127
|
void WatchStatusCallback(std::string cert_name, bool root_being_watched,
|
128
128
|
bool identity_being_watched);
|
129
129
|
|
130
|
+
RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
|
131
|
+
|
130
132
|
Mutex mu_;
|
131
133
|
std::map<std::string /*cert_name*/, std::unique_ptr<ClusterCertificateState>>
|
132
|
-
certificate_state_map_;
|
134
|
+
certificate_state_map_ ABSL_GUARDED_BY(mu_);
|
133
135
|
|
134
136
|
// Use a separate mutex for san_matchers_ to avoid deadlocks since
|
135
137
|
// san_matchers_ needs to be accessed when a handshake is being done and we
|
@@ -141,9 +143,7 @@ class XdsCertificateProvider : public grpc_tls_certificate_provider {
|
|
141
143
|
// subject_alternative_names_matchers()
|
142
144
|
Mutex san_matchers_mu_;
|
143
145
|
std::map<std::string /*cluster_name*/, std::vector<StringMatcher>>
|
144
|
-
san_matcher_map_;
|
145
|
-
|
146
|
-
RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
|
146
|
+
san_matcher_map_ ABSL_GUARDED_BY(san_matchers_mu_);
|
147
147
|
};
|
148
148
|
|
149
149
|
} // namespace grpc_core
|
@@ -17,8 +17,11 @@
|
|
17
17
|
#ifndef GRPC_CORE_EXT_XDS_XDS_CHANNEL_ARGS_H
|
18
18
|
#define GRPC_CORE_EXT_XDS_XDS_CHANNEL_ARGS_H
|
19
19
|
|
20
|
-
//
|
21
|
-
|
20
|
+
// Specifies channel args for the xDS client.
|
21
|
+
// Used only when GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_BOOTSTRAP_CONFIG
|
22
|
+
// is set.
|
23
|
+
#define GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_CLIENT_CHANNEL_ARGS \
|
24
|
+
"grpc.xds_client_channel_args"
|
22
25
|
|
23
26
|
// Timeout in milliseconds to wait for a resource to be returned from
|
24
27
|
// the xds server before assuming that it does not exist.
|
@@ -1,20 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
*
|
17
|
-
*/
|
1
|
+
//
|
2
|
+
// Copyright 2018 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
18
16
|
|
19
17
|
#include <grpc/support/port_platform.h>
|
20
18
|
|
@@ -40,16 +38,17 @@
|
|
40
38
|
#include "src/core/ext/xds/xds_client.h"
|
41
39
|
#include "src/core/ext/xds/xds_client_stats.h"
|
42
40
|
#include "src/core/ext/xds/xds_http_filters.h"
|
41
|
+
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
43
42
|
#include "src/core/lib/backoff/backoff.h"
|
44
43
|
#include "src/core/lib/channel/channel_args.h"
|
45
44
|
#include "src/core/lib/channel/channel_stack.h"
|
45
|
+
#include "src/core/lib/gpr/env.h"
|
46
46
|
#include "src/core/lib/gpr/string.h"
|
47
47
|
#include "src/core/lib/gprpp/memory.h"
|
48
48
|
#include "src/core/lib/gprpp/orphanable.h"
|
49
49
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
50
50
|
#include "src/core/lib/gprpp/sync.h"
|
51
51
|
#include "src/core/lib/iomgr/sockaddr.h"
|
52
|
-
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
53
52
|
#include "src/core/lib/iomgr/timer.h"
|
54
53
|
#include "src/core/lib/slice/slice_internal.h"
|
55
54
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
@@ -72,9 +71,9 @@ TraceFlag grpc_xds_client_refcount_trace(false, "xds_client_refcount");
|
|
72
71
|
namespace {
|
73
72
|
|
74
73
|
Mutex* g_mu = nullptr;
|
75
|
-
const grpc_channel_args* g_channel_args = nullptr;
|
76
|
-
XdsClient* g_xds_client = nullptr;
|
77
|
-
char* g_fallback_bootstrap_config = nullptr;
|
74
|
+
const grpc_channel_args* g_channel_args ABSL_GUARDED_BY(*g_mu) = nullptr;
|
75
|
+
XdsClient* g_xds_client ABSL_GUARDED_BY(*g_mu) = nullptr;
|
76
|
+
char* g_fallback_bootstrap_config ABSL_GUARDED_BY(*g_mu) = nullptr;
|
78
77
|
|
79
78
|
} // namespace
|
80
79
|
|
@@ -102,8 +101,8 @@ class XdsClient::ChannelState::RetryableCall
|
|
102
101
|
private:
|
103
102
|
void StartNewCallLocked();
|
104
103
|
void StartRetryTimerLocked();
|
105
|
-
static void OnRetryTimer(void* arg,
|
106
|
-
void OnRetryTimerLocked(
|
104
|
+
static void OnRetryTimer(void* arg, grpc_error_handle error);
|
105
|
+
void OnRetryTimerLocked(grpc_error_handle error);
|
107
106
|
|
108
107
|
// The wrapped xds call that talks to the xds server. It's instantiated
|
109
108
|
// every time we start a new call. It's null during call retry backoff.
|
@@ -135,9 +134,11 @@ class XdsClient::ChannelState::AdsCallState
|
|
135
134
|
XdsClient* xds_client() const { return chand()->xds_client(); }
|
136
135
|
bool seen_response() const { return seen_response_; }
|
137
136
|
|
138
|
-
void
|
139
|
-
|
140
|
-
|
137
|
+
void SubscribeLocked(const std::string& type_url, const std::string& name)
|
138
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
139
|
+
void UnsubscribeLocked(const std::string& type_url, const std::string& name,
|
140
|
+
bool delay_unsubscription)
|
141
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
141
142
|
|
142
143
|
bool HasSubscribedResources() const;
|
143
144
|
|
@@ -178,7 +179,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
178
179
|
}
|
179
180
|
|
180
181
|
private:
|
181
|
-
static void OnTimer(void* arg,
|
182
|
+
static void OnTimer(void* arg, grpc_error_handle error) {
|
182
183
|
ResourceState* self = static_cast<ResourceState*>(arg);
|
183
184
|
{
|
184
185
|
MutexLock lock(&self->ads_calld_->xds_client()->mu_);
|
@@ -188,10 +189,11 @@ class XdsClient::ChannelState::AdsCallState
|
|
188
189
|
self->Unref(DEBUG_LOCATION, "timer");
|
189
190
|
}
|
190
191
|
|
191
|
-
void OnTimerLocked(
|
192
|
+
void OnTimerLocked(grpc_error_handle error)
|
193
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
192
194
|
if (error == GRPC_ERROR_NONE && timer_pending_) {
|
193
195
|
timer_pending_ = false;
|
194
|
-
|
196
|
+
grpc_error_handle watcher_error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
195
197
|
absl::StrFormat(
|
196
198
|
"timeout obtaining resource {type=%s name=%s} from xds server",
|
197
199
|
type_url_, name_)
|
@@ -200,7 +202,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
200
202
|
watcher_error, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
201
203
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
202
204
|
gpr_log(GPR_INFO, "[xds_client %p] %s", ads_calld_->xds_client(),
|
203
|
-
|
205
|
+
grpc_error_std_string(watcher_error).c_str());
|
204
206
|
}
|
205
207
|
if (type_url_ == XdsApi::kLdsTypeUrl) {
|
206
208
|
ListenerState& state = ads_calld_->xds_client()->listener_map_[name_];
|
@@ -250,30 +252,44 @@ class XdsClient::ChannelState::AdsCallState
|
|
250
252
|
|
251
253
|
// Nonce and error for this resource type.
|
252
254
|
std::string nonce;
|
253
|
-
|
255
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
254
256
|
|
255
257
|
// Subscribed resources of this type.
|
256
258
|
std::map<std::string /* name */, OrphanablePtr<ResourceState>>
|
257
259
|
subscribed_resources;
|
258
260
|
};
|
259
261
|
|
260
|
-
void SendMessageLocked(const std::string& type_url)
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
void
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
void
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
262
|
+
void SendMessageLocked(const std::string& type_url)
|
263
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
264
|
+
|
265
|
+
void AcceptLdsUpdateLocked(std::string version, grpc_millis update_time,
|
266
|
+
XdsApi::LdsUpdateMap lds_update_map)
|
267
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
268
|
+
void AcceptRdsUpdateLocked(std::string version, grpc_millis update_time,
|
269
|
+
XdsApi::RdsUpdateMap rds_update_map)
|
270
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
271
|
+
void AcceptCdsUpdateLocked(std::string version, grpc_millis update_time,
|
272
|
+
XdsApi::CdsUpdateMap cds_update_map)
|
273
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
274
|
+
void AcceptEdsUpdateLocked(std::string version, grpc_millis update_time,
|
275
|
+
XdsApi::EdsUpdateMap eds_update_map)
|
276
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
277
|
+
|
278
|
+
template <typename StateMap>
|
279
|
+
void RejectAdsUpdateLocked(grpc_millis update_time,
|
280
|
+
const XdsApi::AdsParseResult& result,
|
281
|
+
StateMap* state_map)
|
282
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
283
|
+
|
284
|
+
static void OnRequestSent(void* arg, grpc_error_handle error);
|
285
|
+
void OnRequestSentLocked(grpc_error_handle error)
|
286
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
287
|
+
static void OnResponseReceived(void* arg, grpc_error_handle error);
|
288
|
+
bool OnResponseReceivedLocked()
|
289
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
290
|
+
static void OnStatusReceived(void* arg, grpc_error_handle error);
|
291
|
+
void OnStatusReceivedLocked(grpc_error_handle error)
|
292
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
277
293
|
|
278
294
|
bool IsCurrentCallOnChannel() const;
|
279
295
|
|
@@ -346,12 +362,15 @@ class XdsClient::ChannelState::LrsCallState
|
|
346
362
|
void Orphan() override;
|
347
363
|
|
348
364
|
private:
|
349
|
-
void ScheduleNextReportLocked()
|
350
|
-
|
351
|
-
|
352
|
-
bool
|
353
|
-
|
354
|
-
bool
|
365
|
+
void ScheduleNextReportLocked()
|
366
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
367
|
+
static void OnNextReportTimer(void* arg, grpc_error_handle error);
|
368
|
+
bool OnNextReportTimerLocked(grpc_error_handle error)
|
369
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
370
|
+
bool SendReportLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
371
|
+
static void OnReportDone(void* arg, grpc_error_handle error);
|
372
|
+
bool OnReportDoneLocked(grpc_error_handle error)
|
373
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
355
374
|
|
356
375
|
bool IsCurrentReporterOnCall() const {
|
357
376
|
return this == parent_->reporter_.get();
|
@@ -370,12 +389,15 @@ class XdsClient::ChannelState::LrsCallState
|
|
370
389
|
grpc_closure on_report_done_;
|
371
390
|
};
|
372
391
|
|
373
|
-
static void OnInitialRequestSent(void* arg,
|
374
|
-
void OnInitialRequestSentLocked()
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
392
|
+
static void OnInitialRequestSent(void* arg, grpc_error_handle error);
|
393
|
+
void OnInitialRequestSentLocked()
|
394
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
395
|
+
static void OnResponseReceived(void* arg, grpc_error_handle error);
|
396
|
+
bool OnResponseReceivedLocked()
|
397
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
398
|
+
static void OnStatusReceived(void* arg, grpc_error_handle error);
|
399
|
+
void OnStatusReceivedLocked(grpc_error_handle error)
|
400
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
379
401
|
|
380
402
|
bool IsCurrentCallOnChannel() const;
|
381
403
|
|
@@ -431,7 +453,7 @@ class XdsClient::ChannelState::StateWatcher
|
|
431
453
|
"[xds_client %p] xds channel in state:TRANSIENT_FAILURE "
|
432
454
|
"status_message:(%s)",
|
433
455
|
parent_->xds_client(), status.ToString().c_str());
|
434
|
-
parent_->
|
456
|
+
parent_->xds_client_->NotifyOnErrorLocked(
|
435
457
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
436
458
|
"xds channel in TRANSIENT_FAILURE"));
|
437
459
|
}
|
@@ -446,26 +468,13 @@ class XdsClient::ChannelState::StateWatcher
|
|
446
468
|
|
447
469
|
namespace {
|
448
470
|
|
449
|
-
grpc_channel* CreateXdsChannel(
|
450
|
-
|
451
|
-
absl::InlinedVector<grpc_arg, 2> args_to_add = {
|
452
|
-
grpc_channel_arg_integer_create(
|
453
|
-
const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
|
454
|
-
5 * 60 * GPR_MS_PER_SEC),
|
455
|
-
grpc_channel_arg_integer_create(
|
456
|
-
const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
|
457
|
-
};
|
458
|
-
grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
|
459
|
-
g_channel_args, args_to_add.data(), args_to_add.size());
|
460
|
-
// Create channel creds.
|
471
|
+
grpc_channel* CreateXdsChannel(grpc_channel_args* args,
|
472
|
+
const XdsBootstrap::XdsServer& server) {
|
461
473
|
RefCountedPtr<grpc_channel_credentials> channel_creds =
|
462
474
|
XdsChannelCredsRegistry::MakeChannelCreds(server.channel_creds_type,
|
463
475
|
server.channel_creds_config);
|
464
|
-
|
465
|
-
|
466
|
-
channel_creds.get(), server.server_uri.c_str(), new_args, nullptr);
|
467
|
-
grpc_channel_args_destroy(new_args);
|
468
|
-
return channel;
|
476
|
+
return grpc_secure_channel_create(channel_creds.get(),
|
477
|
+
server.server_uri.c_str(), args, nullptr);
|
469
478
|
}
|
470
479
|
|
471
480
|
} // namespace
|
@@ -482,7 +491,7 @@ XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
|
|
482
491
|
gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s",
|
483
492
|
xds_client_.get(), server.server_uri.c_str());
|
484
493
|
}
|
485
|
-
channel_ = CreateXdsChannel(server);
|
494
|
+
channel_ = CreateXdsChannel(xds_client_->args_, server);
|
486
495
|
GPR_ASSERT(channel_ != nullptr);
|
487
496
|
StartConnectivityWatchLocked();
|
488
497
|
}
|
@@ -527,24 +536,22 @@ void XdsClient::ChannelState::MaybeStartLrsCall() {
|
|
527
536
|
void XdsClient::ChannelState::StopLrsCall() { lrs_calld_.reset(); }
|
528
537
|
|
529
538
|
void XdsClient::ChannelState::StartConnectivityWatchLocked() {
|
530
|
-
|
531
|
-
|
532
|
-
GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
|
539
|
+
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
540
|
+
GPR_ASSERT(client_channel != nullptr);
|
533
541
|
watcher_ = new StateWatcher(Ref(DEBUG_LOCATION, "ChannelState+watch"));
|
534
|
-
|
535
|
-
|
542
|
+
client_channel->AddConnectivityWatcher(
|
543
|
+
GRPC_CHANNEL_IDLE,
|
536
544
|
OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
|
537
545
|
}
|
538
546
|
|
539
547
|
void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
grpc_client_channel_stop_connectivity_watch(client_channel_elem, watcher_);
|
548
|
+
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
549
|
+
GPR_ASSERT(client_channel != nullptr);
|
550
|
+
client_channel->RemoveConnectivityWatcher(watcher_);
|
544
551
|
}
|
545
552
|
|
546
|
-
void XdsClient::ChannelState::
|
547
|
-
|
553
|
+
void XdsClient::ChannelState::SubscribeLocked(const std::string& type_url,
|
554
|
+
const std::string& name) {
|
548
555
|
if (ads_calld_ == nullptr) {
|
549
556
|
// Start the ADS call if this is the first request.
|
550
557
|
ads_calld_.reset(new RetryableCall<AdsCallState>(
|
@@ -558,16 +565,16 @@ void XdsClient::ChannelState::Subscribe(const std::string& type_url,
|
|
558
565
|
// because when the call is restarted it will resend all necessary requests.
|
559
566
|
if (ads_calld() == nullptr) return;
|
560
567
|
// Subscribe to this resource if the ADS call is active.
|
561
|
-
ads_calld()->
|
568
|
+
ads_calld()->SubscribeLocked(type_url, name);
|
562
569
|
}
|
563
570
|
|
564
|
-
void XdsClient::ChannelState::
|
565
|
-
|
566
|
-
|
571
|
+
void XdsClient::ChannelState::UnsubscribeLocked(const std::string& type_url,
|
572
|
+
const std::string& name,
|
573
|
+
bool delay_unsubscription) {
|
567
574
|
if (ads_calld_ != nullptr) {
|
568
575
|
auto* calld = ads_calld_->calld();
|
569
576
|
if (calld != nullptr) {
|
570
|
-
calld->
|
577
|
+
calld->UnsubscribeLocked(type_url, name, delay_unsubscription);
|
571
578
|
if (!calld->HasSubscribedResources()) ads_calld_.reset();
|
572
579
|
}
|
573
580
|
}
|
@@ -650,7 +657,7 @@ void XdsClient::ChannelState::RetryableCall<T>::StartRetryTimerLocked() {
|
|
650
657
|
|
651
658
|
template <typename T>
|
652
659
|
void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer(
|
653
|
-
void* arg,
|
660
|
+
void* arg, grpc_error_handle error) {
|
654
661
|
RetryableCall* calld = static_cast<RetryableCall*>(arg);
|
655
662
|
{
|
656
663
|
MutexLock lock(&calld->chand_->xds_client()->mu_);
|
@@ -661,7 +668,7 @@ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer(
|
|
661
668
|
|
662
669
|
template <typename T>
|
663
670
|
void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
|
664
|
-
|
671
|
+
grpc_error_handle error) {
|
665
672
|
retry_timer_callback_pending_ = false;
|
666
673
|
if (!shutting_down_ && error == GRPC_ERROR_NONE) {
|
667
674
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -729,16 +736,16 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
729
736
|
GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
|
730
737
|
grpc_schedule_on_exec_ctx);
|
731
738
|
for (const auto& p : xds_client()->listener_map_) {
|
732
|
-
|
739
|
+
SubscribeLocked(XdsApi::kLdsTypeUrl, std::string(p.first));
|
733
740
|
}
|
734
741
|
for (const auto& p : xds_client()->route_config_map_) {
|
735
|
-
|
742
|
+
SubscribeLocked(XdsApi::kRdsTypeUrl, std::string(p.first));
|
736
743
|
}
|
737
744
|
for (const auto& p : xds_client()->cluster_map_) {
|
738
|
-
|
745
|
+
SubscribeLocked(XdsApi::kCdsTypeUrl, std::string(p.first));
|
739
746
|
}
|
740
747
|
for (const auto& p : xds_client()->endpoint_map_) {
|
741
|
-
|
748
|
+
SubscribeLocked(XdsApi::kEdsTypeUrl, std::string(p.first));
|
742
749
|
}
|
743
750
|
// Op: recv initial metadata.
|
744
751
|
op = ops;
|
@@ -802,7 +809,8 @@ void XdsClient::ChannelState::AdsCallState::Orphan() {
|
|
802
809
|
}
|
803
810
|
|
804
811
|
void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
805
|
-
const std::string& type_url)
|
812
|
+
const std::string& type_url)
|
813
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
806
814
|
// Buffer message sending if an existing message is in flight.
|
807
815
|
if (send_message_payload_ != nullptr) {
|
808
816
|
buffered_requests_.insert(type_url);
|
@@ -827,7 +835,7 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
827
835
|
"error=%s resources=%s",
|
828
836
|
xds_client(), type_url.c_str(),
|
829
837
|
xds_client()->resource_version_map_[type_url].c_str(),
|
830
|
-
state.nonce.c_str(),
|
838
|
+
state.nonce.c_str(), grpc_error_std_string(state.error).c_str(),
|
831
839
|
absl::StrJoin(resource_names, " ").c_str());
|
832
840
|
}
|
833
841
|
GRPC_ERROR_UNREF(state.error);
|
@@ -854,7 +862,7 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
854
862
|
}
|
855
863
|
}
|
856
864
|
|
857
|
-
void XdsClient::ChannelState::AdsCallState::
|
865
|
+
void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
|
858
866
|
const std::string& type_url, const std::string& name) {
|
859
867
|
auto& state = state_map_[type_url].subscribed_resources[name];
|
860
868
|
if (state == nullptr) {
|
@@ -864,7 +872,7 @@ void XdsClient::ChannelState::AdsCallState::Subscribe(
|
|
864
872
|
}
|
865
873
|
}
|
866
874
|
|
867
|
-
void XdsClient::ChannelState::AdsCallState::
|
875
|
+
void XdsClient::ChannelState::AdsCallState::UnsubscribeLocked(
|
868
876
|
const std::string& type_url, const std::string& name,
|
869
877
|
bool delay_unsubscription) {
|
870
878
|
state_map_[type_url].subscribed_resources.erase(name);
|
@@ -894,7 +902,7 @@ XdsApi::ResourceMetadata CreateResourceMetadataAcked(
|
|
894
902
|
|
895
903
|
} // namespace
|
896
904
|
|
897
|
-
void XdsClient::ChannelState::AdsCallState::
|
905
|
+
void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdateLocked(
|
898
906
|
std::string version, grpc_millis update_time,
|
899
907
|
XdsApi::LdsUpdateMap lds_update_map) {
|
900
908
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -978,7 +986,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
|
|
978
986
|
}
|
979
987
|
}
|
980
988
|
|
981
|
-
void XdsClient::ChannelState::AdsCallState::
|
989
|
+
void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdateLocked(
|
982
990
|
std::string version, grpc_millis update_time,
|
983
991
|
XdsApi::RdsUpdateMap rds_update_map) {
|
984
992
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -1020,7 +1028,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
|
|
1020
1028
|
}
|
1021
1029
|
}
|
1022
1030
|
|
1023
|
-
void XdsClient::ChannelState::AdsCallState::
|
1031
|
+
void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdateLocked(
|
1024
1032
|
std::string version, grpc_millis update_time,
|
1025
1033
|
XdsApi::CdsUpdateMap cds_update_map) {
|
1026
1034
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -1101,7 +1109,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
|
|
1101
1109
|
}
|
1102
1110
|
}
|
1103
1111
|
|
1104
|
-
void XdsClient::ChannelState::AdsCallState::
|
1112
|
+
void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdateLocked(
|
1105
1113
|
std::string version, grpc_millis update_time,
|
1106
1114
|
XdsApi::EdsUpdateMap eds_update_map) {
|
1107
1115
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -1143,8 +1151,49 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
|
|
1143
1151
|
}
|
1144
1152
|
}
|
1145
1153
|
|
1146
|
-
|
1147
|
-
|
1154
|
+
namespace {
|
1155
|
+
|
1156
|
+
// Update resource_metadata for NACK.
|
1157
|
+
void UpdateResourceMetadataNacked(const std::string& version,
|
1158
|
+
const std::string& details,
|
1159
|
+
grpc_millis update_time,
|
1160
|
+
XdsApi::ResourceMetadata* resource_metadata) {
|
1161
|
+
resource_metadata->client_status = XdsApi::ResourceMetadata::NACKED;
|
1162
|
+
resource_metadata->failed_version = version;
|
1163
|
+
resource_metadata->failed_details = details;
|
1164
|
+
resource_metadata->failed_update_time = update_time;
|
1165
|
+
}
|
1166
|
+
|
1167
|
+
} // namespace
|
1168
|
+
|
1169
|
+
template <typename StateMap>
|
1170
|
+
void XdsClient::ChannelState::AdsCallState::RejectAdsUpdateLocked(
|
1171
|
+
grpc_millis update_time, const XdsApi::AdsParseResult& result,
|
1172
|
+
StateMap* state_map) {
|
1173
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1174
|
+
gpr_log(GPR_INFO,
|
1175
|
+
"[xds_client %p] %s update NACKed containing %" PRIuPTR
|
1176
|
+
" resources",
|
1177
|
+
xds_client(), result.type_url.c_str(),
|
1178
|
+
result.resource_names_failed.size());
|
1179
|
+
}
|
1180
|
+
std::string details = grpc_error_std_string(result.parse_error);
|
1181
|
+
for (auto& name : result.resource_names_failed) {
|
1182
|
+
auto it = state_map->find(name);
|
1183
|
+
if (it == state_map->end()) continue;
|
1184
|
+
auto& state = it->second;
|
1185
|
+
// Notify watchers of error.
|
1186
|
+
for (const auto& p : state.watchers) {
|
1187
|
+
p.first->OnError(GRPC_ERROR_REF(result.parse_error));
|
1188
|
+
}
|
1189
|
+
// Update resource metadata for CSDS.
|
1190
|
+
UpdateResourceMetadataNacked(result.version, details, update_time,
|
1191
|
+
&state.meta);
|
1192
|
+
}
|
1193
|
+
}
|
1194
|
+
|
1195
|
+
void XdsClient::ChannelState::AdsCallState::OnRequestSent(
|
1196
|
+
void* arg, grpc_error_handle error) {
|
1148
1197
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1149
1198
|
{
|
1150
1199
|
MutexLock lock(&ads_calld->xds_client()->mu_);
|
@@ -1154,7 +1203,7 @@ void XdsClient::ChannelState::AdsCallState::OnRequestSent(void* arg,
|
|
1154
1203
|
}
|
1155
1204
|
|
1156
1205
|
void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
|
1157
|
-
|
1206
|
+
grpc_error_handle error) {
|
1158
1207
|
if (IsCurrentCallOnChannel() && error == GRPC_ERROR_NONE) {
|
1159
1208
|
// Clean up the sent message.
|
1160
1209
|
grpc_byte_buffer_destroy(send_message_payload_);
|
@@ -1178,7 +1227,7 @@ void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
|
|
1178
1227
|
}
|
1179
1228
|
|
1180
1229
|
void XdsClient::ChannelState::AdsCallState::OnResponseReceived(
|
1181
|
-
void* arg,
|
1230
|
+
void* arg, grpc_error_handle /* error */) {
|
1182
1231
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1183
1232
|
bool done;
|
1184
1233
|
{
|
@@ -1212,7 +1261,7 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1212
1261
|
// Ignore unparsable response.
|
1213
1262
|
gpr_log(GPR_ERROR,
|
1214
1263
|
"[xds_client %p] Error parsing ADS response (%s) -- ignoring",
|
1215
|
-
xds_client(),
|
1264
|
+
xds_client(), grpc_error_std_string(result.parse_error).c_str());
|
1216
1265
|
GRPC_ERROR_UNREF(result.parse_error);
|
1217
1266
|
} else {
|
1218
1267
|
grpc_millis update_time = grpc_core::ExecCtx::Get()->Now();
|
@@ -1221,32 +1270,46 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1221
1270
|
state.nonce = std::move(result.nonce);
|
1222
1271
|
// NACK or ACK the response.
|
1223
1272
|
if (result.parse_error != GRPC_ERROR_NONE) {
|
1224
|
-
xds_client()->UpdateResourceMetadataWithFailedParseResult(update_time,
|
1225
|
-
result);
|
1226
|
-
GRPC_ERROR_UNREF(state.error);
|
1227
|
-
state.error = result.parse_error;
|
1228
1273
|
// NACK unacceptable update.
|
1229
1274
|
gpr_log(GPR_ERROR,
|
1230
1275
|
"[xds_client %p] ADS response invalid for resource type %s "
|
1231
1276
|
"version %s, will NACK: nonce=%s error=%s",
|
1232
1277
|
xds_client(), result.type_url.c_str(), result.version.c_str(),
|
1233
|
-
state.nonce.c_str(),
|
1278
|
+
state.nonce.c_str(),
|
1279
|
+
grpc_error_std_string(result.parse_error).c_str());
|
1280
|
+
result.parse_error =
|
1281
|
+
grpc_error_set_int(result.parse_error, GRPC_ERROR_INT_GRPC_STATUS,
|
1282
|
+
GRPC_STATUS_UNAVAILABLE);
|
1283
|
+
GRPC_ERROR_UNREF(state.error);
|
1284
|
+
state.error = result.parse_error;
|
1285
|
+
if (result.type_url == XdsApi::kLdsTypeUrl) {
|
1286
|
+
RejectAdsUpdateLocked(update_time, result,
|
1287
|
+
&xds_client()->listener_map_);
|
1288
|
+
} else if (result.type_url == XdsApi::kRdsTypeUrl) {
|
1289
|
+
RejectAdsUpdateLocked(update_time, result,
|
1290
|
+
&xds_client()->route_config_map_);
|
1291
|
+
} else if (result.type_url == XdsApi::kCdsTypeUrl) {
|
1292
|
+
RejectAdsUpdateLocked(update_time, result, &xds_client()->cluster_map_);
|
1293
|
+
} else if (result.type_url == XdsApi::kEdsTypeUrl) {
|
1294
|
+
RejectAdsUpdateLocked(update_time, result,
|
1295
|
+
&xds_client()->endpoint_map_);
|
1296
|
+
}
|
1234
1297
|
SendMessageLocked(result.type_url);
|
1235
1298
|
} else {
|
1236
1299
|
seen_response_ = true;
|
1237
1300
|
// Accept the ADS response according to the type_url.
|
1238
1301
|
if (result.type_url == XdsApi::kLdsTypeUrl) {
|
1239
|
-
|
1240
|
-
|
1302
|
+
AcceptLdsUpdateLocked(result.version, update_time,
|
1303
|
+
std::move(result.lds_update_map));
|
1241
1304
|
} else if (result.type_url == XdsApi::kRdsTypeUrl) {
|
1242
|
-
|
1243
|
-
|
1305
|
+
AcceptRdsUpdateLocked(result.version, update_time,
|
1306
|
+
std::move(result.rds_update_map));
|
1244
1307
|
} else if (result.type_url == XdsApi::kCdsTypeUrl) {
|
1245
|
-
|
1246
|
-
|
1308
|
+
AcceptCdsUpdateLocked(result.version, update_time,
|
1309
|
+
std::move(result.cds_update_map));
|
1247
1310
|
} else if (result.type_url == XdsApi::kEdsTypeUrl) {
|
1248
|
-
|
1249
|
-
|
1311
|
+
AcceptEdsUpdateLocked(result.version, update_time,
|
1312
|
+
std::move(result.eds_update_map));
|
1250
1313
|
}
|
1251
1314
|
xds_client()->resource_version_map_[result.type_url] =
|
1252
1315
|
std::move(result.version);
|
@@ -1277,7 +1340,7 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1277
1340
|
}
|
1278
1341
|
|
1279
1342
|
void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
|
1280
|
-
void* arg,
|
1343
|
+
void* arg, grpc_error_handle error) {
|
1281
1344
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1282
1345
|
{
|
1283
1346
|
MutexLock lock(&ads_calld->xds_client()->mu_);
|
@@ -1287,14 +1350,14 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
|
|
1287
1350
|
}
|
1288
1351
|
|
1289
1352
|
void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
1290
|
-
|
1353
|
+
grpc_error_handle error) {
|
1291
1354
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1292
1355
|
char* status_details = grpc_slice_to_c_string(status_details_);
|
1293
1356
|
gpr_log(GPR_INFO,
|
1294
1357
|
"[xds_client %p] ADS call status received. Status = %d, details "
|
1295
1358
|
"= '%s', (chand: %p, ads_calld: %p, call: %p), error '%s'",
|
1296
1359
|
xds_client(), status_code_, status_details, chand(), this, call_,
|
1297
|
-
|
1360
|
+
grpc_error_std_string(error).c_str());
|
1298
1361
|
gpr_free(status_details);
|
1299
1362
|
}
|
1300
1363
|
// Ignore status from a stale call.
|
@@ -1349,7 +1412,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::
|
|
1349
1412
|
}
|
1350
1413
|
|
1351
1414
|
void XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimer(
|
1352
|
-
void* arg,
|
1415
|
+
void* arg, grpc_error_handle error) {
|
1353
1416
|
Reporter* self = static_cast<Reporter*>(arg);
|
1354
1417
|
bool done;
|
1355
1418
|
{
|
@@ -1360,7 +1423,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimer(
|
|
1360
1423
|
}
|
1361
1424
|
|
1362
1425
|
bool XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimerLocked(
|
1363
|
-
|
1426
|
+
grpc_error_handle error) {
|
1364
1427
|
next_report_timer_callback_pending_ = false;
|
1365
1428
|
if (error != GRPC_ERROR_NONE || !IsCurrentReporterOnCall()) {
|
1366
1429
|
GRPC_ERROR_UNREF(error);
|
@@ -1425,7 +1488,7 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
|
1425
1488
|
}
|
1426
1489
|
|
1427
1490
|
void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDone(
|
1428
|
-
void* arg,
|
1491
|
+
void* arg, grpc_error_handle error) {
|
1429
1492
|
Reporter* self = static_cast<Reporter*>(arg);
|
1430
1493
|
bool done;
|
1431
1494
|
{
|
@@ -1436,7 +1499,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDone(
|
|
1436
1499
|
}
|
1437
1500
|
|
1438
1501
|
bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
|
1439
|
-
|
1502
|
+
grpc_error_handle error) {
|
1440
1503
|
grpc_byte_buffer_destroy(parent_->send_message_payload_);
|
1441
1504
|
parent_->send_message_payload_ = nullptr;
|
1442
1505
|
// If there are no more registered stats to report, cancel the call.
|
@@ -1606,7 +1669,7 @@ void XdsClient::ChannelState::LrsCallState::MaybeStartReportingLocked() {
|
|
1606
1669
|
}
|
1607
1670
|
|
1608
1671
|
void XdsClient::ChannelState::LrsCallState::OnInitialRequestSent(
|
1609
|
-
void* arg,
|
1672
|
+
void* arg, grpc_error_handle /*error*/) {
|
1610
1673
|
LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
|
1611
1674
|
{
|
1612
1675
|
MutexLock lock(&lrs_calld->xds_client()->mu_);
|
@@ -1623,7 +1686,7 @@ void XdsClient::ChannelState::LrsCallState::OnInitialRequestSentLocked() {
|
|
1623
1686
|
}
|
1624
1687
|
|
1625
1688
|
void XdsClient::ChannelState::LrsCallState::OnResponseReceived(
|
1626
|
-
void* arg,
|
1689
|
+
void* arg, grpc_error_handle /*error*/) {
|
1627
1690
|
LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
|
1628
1691
|
bool done;
|
1629
1692
|
{
|
@@ -1651,13 +1714,13 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1651
1714
|
bool send_all_clusters = false;
|
1652
1715
|
std::set<std::string> new_cluster_names;
|
1653
1716
|
grpc_millis new_load_reporting_interval;
|
1654
|
-
|
1717
|
+
grpc_error_handle parse_error = xds_client()->api_.ParseLrsResponse(
|
1655
1718
|
response_slice, &send_all_clusters, &new_cluster_names,
|
1656
1719
|
&new_load_reporting_interval);
|
1657
1720
|
if (parse_error != GRPC_ERROR_NONE) {
|
1658
1721
|
gpr_log(GPR_ERROR,
|
1659
1722
|
"[xds_client %p] LRS response parsing failed. error=%s",
|
1660
|
-
xds_client(),
|
1723
|
+
xds_client(), grpc_error_std_string(parse_error).c_str());
|
1661
1724
|
GRPC_ERROR_UNREF(parse_error);
|
1662
1725
|
return;
|
1663
1726
|
}
|
@@ -1726,7 +1789,7 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1726
1789
|
}
|
1727
1790
|
|
1728
1791
|
void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
|
1729
|
-
void* arg,
|
1792
|
+
void* arg, grpc_error_handle error) {
|
1730
1793
|
LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
|
1731
1794
|
{
|
1732
1795
|
MutexLock lock(&lrs_calld->xds_client()->mu_);
|
@@ -1736,7 +1799,7 @@ void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
|
|
1736
1799
|
}
|
1737
1800
|
|
1738
1801
|
void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
|
1739
|
-
|
1802
|
+
grpc_error_handle error) {
|
1740
1803
|
GPR_ASSERT(call_ != nullptr);
|
1741
1804
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1742
1805
|
char* status_details = grpc_slice_to_c_string(status_details_);
|
@@ -1744,7 +1807,7 @@ void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
|
|
1744
1807
|
"[xds_client %p] LRS call status received. Status = %d, details "
|
1745
1808
|
"= '%s', (chand: %p, calld: %p, call: %p), error '%s'",
|
1746
1809
|
xds_client(), status_code_, status_details, chand(), this, call_,
|
1747
|
-
|
1810
|
+
grpc_error_std_string(error).c_str());
|
1748
1811
|
gpr_free(status_details);
|
1749
1812
|
}
|
1750
1813
|
// Ignore status from a stale call.
|
@@ -1769,36 +1832,42 @@ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
|
|
1769
1832
|
|
1770
1833
|
namespace {
|
1771
1834
|
|
1772
|
-
grpc_millis GetRequestTimeout() {
|
1835
|
+
grpc_millis GetRequestTimeout(const grpc_channel_args* args) {
|
1773
1836
|
return grpc_channel_args_find_integer(
|
1774
|
-
|
1837
|
+
args, GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
|
1775
1838
|
{15000, 0, INT_MAX});
|
1776
1839
|
}
|
1777
1840
|
|
1841
|
+
grpc_channel_args* ModifyChannelArgs(const grpc_channel_args* args) {
|
1842
|
+
absl::InlinedVector<grpc_arg, 2> args_to_add = {
|
1843
|
+
grpc_channel_arg_integer_create(
|
1844
|
+
const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
|
1845
|
+
5 * 60 * GPR_MS_PER_SEC),
|
1846
|
+
grpc_channel_arg_integer_create(
|
1847
|
+
const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
|
1848
|
+
};
|
1849
|
+
return grpc_channel_args_copy_and_add(args, args_to_add.data(),
|
1850
|
+
args_to_add.size());
|
1851
|
+
}
|
1852
|
+
|
1778
1853
|
} // namespace
|
1779
1854
|
|
1780
|
-
XdsClient::XdsClient(
|
1855
|
+
XdsClient::XdsClient(std::unique_ptr<XdsBootstrap> bootstrap,
|
1856
|
+
const grpc_channel_args* args)
|
1781
1857
|
: DualRefCounted<XdsClient>(
|
1782
1858
|
GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace) ? "XdsClient"
|
1783
1859
|
: nullptr),
|
1784
|
-
|
1860
|
+
bootstrap_(std::move(bootstrap)),
|
1861
|
+
args_(ModifyChannelArgs(args)),
|
1862
|
+
request_timeout_(GetRequestTimeout(args)),
|
1785
1863
|
interested_parties_(grpc_pollset_set_create()),
|
1786
|
-
bootstrap_(XdsBootstrap::Create(this, &grpc_xds_client_trace,
|
1787
|
-
g_fallback_bootstrap_config, error)),
|
1788
1864
|
certificate_provider_store_(MakeOrphanable<CertificateProviderStore>(
|
1789
|
-
bootstrap_
|
1790
|
-
|
1791
|
-
|
1792
|
-
api_(this, &grpc_xds_client_trace,
|
1793
|
-
bootstrap_ == nullptr ? nullptr : bootstrap_->node()) {
|
1865
|
+
bootstrap_->certificate_providers())),
|
1866
|
+
api_(this, &grpc_xds_client_trace, bootstrap_->node(),
|
1867
|
+
&bootstrap_->certificate_providers()) {
|
1794
1868
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1795
1869
|
gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
|
1796
1870
|
}
|
1797
|
-
if (*error != GRPC_ERROR_NONE) {
|
1798
|
-
gpr_log(GPR_ERROR, "[xds_client %p] failed to read bootstrap file: %s",
|
1799
|
-
this, grpc_error_string(*error));
|
1800
|
-
return;
|
1801
|
-
}
|
1802
1871
|
// Create ChannelState object.
|
1803
1872
|
chand_ = MakeOrphanable<ChannelState>(
|
1804
1873
|
WeakRef(DEBUG_LOCATION, "XdsClient+ChannelState"), bootstrap_->server());
|
@@ -1808,11 +1877,13 @@ XdsClient::~XdsClient() {
|
|
1808
1877
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1809
1878
|
gpr_log(GPR_INFO, "[xds_client %p] destroying xds client", this);
|
1810
1879
|
}
|
1880
|
+
grpc_channel_args_destroy(args_);
|
1811
1881
|
grpc_pollset_set_destroy(interested_parties_);
|
1812
1882
|
}
|
1813
1883
|
|
1814
1884
|
void XdsClient::AddChannelzLinkage(
|
1815
1885
|
channelz::ChannelNode* parent_channelz_node) {
|
1886
|
+
MutexLock lock(&mu_);
|
1816
1887
|
channelz::ChannelNode* xds_channelz_node =
|
1817
1888
|
grpc_channel_get_channelz_node(chand_->channel());
|
1818
1889
|
if (xds_channelz_node != nullptr) {
|
@@ -1822,6 +1893,7 @@ void XdsClient::AddChannelzLinkage(
|
|
1822
1893
|
|
1823
1894
|
void XdsClient::RemoveChannelzLinkage(
|
1824
1895
|
channelz::ChannelNode* parent_channelz_node) {
|
1896
|
+
MutexLock lock(&mu_);
|
1825
1897
|
channelz::ChannelNode* xds_channelz_node =
|
1826
1898
|
grpc_channel_get_channelz_node(chand_->channel());
|
1827
1899
|
if (xds_channelz_node != nullptr) {
|
@@ -1872,7 +1944,7 @@ void XdsClient::WatchListenerData(
|
|
1872
1944
|
}
|
1873
1945
|
w->OnListenerChanged(*listener_state.update);
|
1874
1946
|
}
|
1875
|
-
chand_->
|
1947
|
+
chand_->SubscribeLocked(XdsApi::kLdsTypeUrl, listener_name_str);
|
1876
1948
|
}
|
1877
1949
|
|
1878
1950
|
void XdsClient::CancelListenerDataWatch(absl::string_view listener_name,
|
@@ -1887,8 +1959,8 @@ void XdsClient::CancelListenerDataWatch(absl::string_view listener_name,
|
|
1887
1959
|
listener_state.watchers.erase(it);
|
1888
1960
|
if (listener_state.watchers.empty()) {
|
1889
1961
|
listener_map_.erase(listener_name_str);
|
1890
|
-
chand_->
|
1891
|
-
|
1962
|
+
chand_->UnsubscribeLocked(XdsApi::kLdsTypeUrl, listener_name_str,
|
1963
|
+
delay_unsubscription);
|
1892
1964
|
}
|
1893
1965
|
}
|
1894
1966
|
}
|
@@ -1912,7 +1984,7 @@ void XdsClient::WatchRouteConfigData(
|
|
1912
1984
|
}
|
1913
1985
|
w->OnRouteConfigChanged(*route_config_state.update);
|
1914
1986
|
}
|
1915
|
-
chand_->
|
1987
|
+
chand_->SubscribeLocked(XdsApi::kRdsTypeUrl, route_config_name_str);
|
1916
1988
|
}
|
1917
1989
|
|
1918
1990
|
void XdsClient::CancelRouteConfigDataWatch(absl::string_view route_config_name,
|
@@ -1928,8 +2000,8 @@ void XdsClient::CancelRouteConfigDataWatch(absl::string_view route_config_name,
|
|
1928
2000
|
route_config_state.watchers.erase(it);
|
1929
2001
|
if (route_config_state.watchers.empty()) {
|
1930
2002
|
route_config_map_.erase(route_config_name_str);
|
1931
|
-
chand_->
|
1932
|
-
|
2003
|
+
chand_->UnsubscribeLocked(XdsApi::kRdsTypeUrl, route_config_name_str,
|
2004
|
+
delay_unsubscription);
|
1933
2005
|
}
|
1934
2006
|
}
|
1935
2007
|
}
|
@@ -1951,7 +2023,7 @@ void XdsClient::WatchClusterData(
|
|
1951
2023
|
}
|
1952
2024
|
w->OnClusterChanged(cluster_state.update.value());
|
1953
2025
|
}
|
1954
|
-
chand_->
|
2026
|
+
chand_->SubscribeLocked(XdsApi::kCdsTypeUrl, cluster_name_str);
|
1955
2027
|
}
|
1956
2028
|
|
1957
2029
|
void XdsClient::CancelClusterDataWatch(absl::string_view cluster_name,
|
@@ -1966,8 +2038,8 @@ void XdsClient::CancelClusterDataWatch(absl::string_view cluster_name,
|
|
1966
2038
|
cluster_state.watchers.erase(it);
|
1967
2039
|
if (cluster_state.watchers.empty()) {
|
1968
2040
|
cluster_map_.erase(cluster_name_str);
|
1969
|
-
chand_->
|
1970
|
-
|
2041
|
+
chand_->UnsubscribeLocked(XdsApi::kCdsTypeUrl, cluster_name_str,
|
2042
|
+
delay_unsubscription);
|
1971
2043
|
}
|
1972
2044
|
}
|
1973
2045
|
}
|
@@ -1989,7 +2061,7 @@ void XdsClient::WatchEndpointData(
|
|
1989
2061
|
}
|
1990
2062
|
w->OnEndpointChanged(endpoint_state.update.value());
|
1991
2063
|
}
|
1992
|
-
chand_->
|
2064
|
+
chand_->SubscribeLocked(XdsApi::kEdsTypeUrl, eds_service_name_str);
|
1993
2065
|
}
|
1994
2066
|
|
1995
2067
|
void XdsClient::CancelEndpointDataWatch(absl::string_view eds_service_name,
|
@@ -2004,8 +2076,8 @@ void XdsClient::CancelEndpointDataWatch(absl::string_view eds_service_name,
|
|
2004
2076
|
endpoint_state.watchers.erase(it);
|
2005
2077
|
if (endpoint_state.watchers.empty()) {
|
2006
2078
|
endpoint_map_.erase(eds_service_name_str);
|
2007
|
-
chand_->
|
2008
|
-
|
2079
|
+
chand_->UnsubscribeLocked(XdsApi::kEdsTypeUrl, eds_service_name_str,
|
2080
|
+
delay_unsubscription);
|
2009
2081
|
}
|
2010
2082
|
}
|
2011
2083
|
}
|
@@ -2132,7 +2204,7 @@ void XdsClient::ResetBackoff() {
|
|
2132
2204
|
}
|
2133
2205
|
}
|
2134
2206
|
|
2135
|
-
void XdsClient::NotifyOnErrorLocked(
|
2207
|
+
void XdsClient::NotifyOnErrorLocked(grpc_error_handle error) {
|
2136
2208
|
for (const auto& p : listener_map_) {
|
2137
2209
|
const ListenerState& listener_state = p.second;
|
2138
2210
|
for (const auto& p : listener_state.watchers) {
|
@@ -2241,44 +2313,6 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2241
2313
|
return snapshot_map;
|
2242
2314
|
}
|
2243
2315
|
|
2244
|
-
void XdsClient::UpdateResourceMetadataWithFailedParseResult(
|
2245
|
-
grpc_millis update_time, const XdsApi::AdsParseResult& result) {
|
2246
|
-
// ADS update is rejected and the resource names in the failed update is
|
2247
|
-
// available.
|
2248
|
-
absl::string_view details = grpc_error_string(result.parse_error);
|
2249
|
-
for (auto& name : result.resource_names_failed) {
|
2250
|
-
XdsApi::ResourceMetadata* resource_metadata = nullptr;
|
2251
|
-
if (result.type_url == XdsApi::kLdsTypeUrl) {
|
2252
|
-
auto it = listener_map_.find(name);
|
2253
|
-
if (it != listener_map_.end()) {
|
2254
|
-
resource_metadata = &it->second.meta;
|
2255
|
-
}
|
2256
|
-
} else if (result.type_url == XdsApi::kRdsTypeUrl) {
|
2257
|
-
auto it = route_config_map_.find(name);
|
2258
|
-
if (route_config_map_.find(name) != route_config_map_.end()) {
|
2259
|
-
resource_metadata = &it->second.meta;
|
2260
|
-
}
|
2261
|
-
} else if (result.type_url == XdsApi::kCdsTypeUrl) {
|
2262
|
-
auto it = cluster_map_.find(name);
|
2263
|
-
if (cluster_map_.find(name) != cluster_map_.end()) {
|
2264
|
-
resource_metadata = &it->second.meta;
|
2265
|
-
}
|
2266
|
-
} else if (result.type_url == XdsApi::kEdsTypeUrl) {
|
2267
|
-
auto it = endpoint_map_.find(name);
|
2268
|
-
if (endpoint_map_.find(name) != endpoint_map_.end()) {
|
2269
|
-
resource_metadata = &it->second.meta;
|
2270
|
-
}
|
2271
|
-
}
|
2272
|
-
if (resource_metadata == nullptr) {
|
2273
|
-
return;
|
2274
|
-
}
|
2275
|
-
resource_metadata->client_status = XdsApi::ResourceMetadata::NACKED;
|
2276
|
-
resource_metadata->failed_version = result.version;
|
2277
|
-
resource_metadata->failed_details = std::string(details);
|
2278
|
-
resource_metadata->failed_update_time = update_time;
|
2279
|
-
}
|
2280
|
-
}
|
2281
|
-
|
2282
2316
|
std::string XdsClient::DumpClientConfigBinary() {
|
2283
2317
|
MutexLock lock(&mu_);
|
2284
2318
|
XdsApi::ResourceTypeMetadataMap resource_type_metadata_map;
|
@@ -2324,24 +2358,105 @@ void XdsClientGlobalInit() {
|
|
2324
2358
|
XdsHttpFilterRegistry::Init();
|
2325
2359
|
}
|
2326
2360
|
|
2327
|
-
|
2328
|
-
|
2329
|
-
|
2361
|
+
// TODO(roth): Find a better way to clear the fallback config that does
|
2362
|
+
// not require using ABSL_NO_THREAD_SAFETY_ANALYSIS.
|
2363
|
+
void XdsClientGlobalShutdown() ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
2330
2364
|
gpr_free(g_fallback_bootstrap_config);
|
2331
2365
|
g_fallback_bootstrap_config = nullptr;
|
2366
|
+
delete g_mu;
|
2367
|
+
g_mu = nullptr;
|
2332
2368
|
XdsHttpFilterRegistry::Shutdown();
|
2333
2369
|
}
|
2334
2370
|
|
2335
|
-
|
2371
|
+
namespace {
|
2372
|
+
|
2373
|
+
std::string GetBootstrapContents(const char* fallback_config,
|
2374
|
+
grpc_error_handle* error) {
|
2375
|
+
// First, try GRPC_XDS_BOOTSTRAP env var.
|
2376
|
+
grpc_core::UniquePtr<char> path(gpr_getenv("GRPC_XDS_BOOTSTRAP"));
|
2377
|
+
if (path != nullptr) {
|
2378
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2379
|
+
gpr_log(GPR_INFO,
|
2380
|
+
"Got bootstrap file location from GRPC_XDS_BOOTSTRAP "
|
2381
|
+
"environment variable: %s",
|
2382
|
+
path.get());
|
2383
|
+
}
|
2384
|
+
grpc_slice contents;
|
2385
|
+
*error =
|
2386
|
+
grpc_load_file(path.get(), /*add_null_terminator=*/true, &contents);
|
2387
|
+
if (*error != GRPC_ERROR_NONE) return "";
|
2388
|
+
std::string contents_str(StringViewFromSlice(contents));
|
2389
|
+
grpc_slice_unref_internal(contents);
|
2390
|
+
return contents_str;
|
2391
|
+
}
|
2392
|
+
// Next, try GRPC_XDS_BOOTSTRAP_CONFIG env var.
|
2393
|
+
grpc_core::UniquePtr<char> env_config(
|
2394
|
+
gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
|
2395
|
+
if (env_config != nullptr) {
|
2396
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2397
|
+
gpr_log(GPR_INFO,
|
2398
|
+
"Got bootstrap contents from GRPC_XDS_BOOTSTRAP_CONFIG "
|
2399
|
+
"environment variable");
|
2400
|
+
}
|
2401
|
+
return env_config.get();
|
2402
|
+
}
|
2403
|
+
// Finally, try fallback config.
|
2404
|
+
if (fallback_config != nullptr) {
|
2405
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2406
|
+
gpr_log(GPR_INFO, "Got bootstrap contents from fallback config");
|
2407
|
+
}
|
2408
|
+
return fallback_config;
|
2409
|
+
}
|
2410
|
+
// No bootstrap config found.
|
2411
|
+
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2412
|
+
"Environment variables GRPC_XDS_BOOTSTRAP or GRPC_XDS_BOOTSTRAP_CONFIG "
|
2413
|
+
"not defined");
|
2414
|
+
return "";
|
2415
|
+
}
|
2416
|
+
|
2417
|
+
} // namespace
|
2418
|
+
|
2419
|
+
RefCountedPtr<XdsClient> XdsClient::GetOrCreate(const grpc_channel_args* args,
|
2420
|
+
grpc_error_handle* error) {
|
2336
2421
|
RefCountedPtr<XdsClient> xds_client;
|
2422
|
+
// If getting bootstrap from channel args, create a local XdsClient
|
2423
|
+
// instance for the channel or server instead of using the global instance.
|
2424
|
+
const char* bootstrap_config = grpc_channel_args_find_string(
|
2425
|
+
args, GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_BOOTSTRAP_CONFIG);
|
2426
|
+
if (bootstrap_config != nullptr) {
|
2427
|
+
std::unique_ptr<XdsBootstrap> bootstrap =
|
2428
|
+
XdsBootstrap::Create(bootstrap_config, error);
|
2429
|
+
if (*error == GRPC_ERROR_NONE) {
|
2430
|
+
grpc_channel_args* xds_channel_args =
|
2431
|
+
grpc_channel_args_find_pointer<grpc_channel_args>(
|
2432
|
+
args,
|
2433
|
+
GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_CLIENT_CHANNEL_ARGS);
|
2434
|
+
return MakeRefCounted<XdsClient>(std::move(bootstrap), xds_channel_args);
|
2435
|
+
}
|
2436
|
+
return nullptr;
|
2437
|
+
}
|
2438
|
+
// Otherwise, use the global instance.
|
2337
2439
|
{
|
2338
2440
|
MutexLock lock(g_mu);
|
2339
2441
|
if (g_xds_client != nullptr) {
|
2340
2442
|
auto xds_client = g_xds_client->RefIfNonZero();
|
2341
2443
|
if (xds_client != nullptr) return xds_client;
|
2342
2444
|
}
|
2343
|
-
|
2445
|
+
// Find bootstrap contents.
|
2446
|
+
std::string bootstrap_contents =
|
2447
|
+
GetBootstrapContents(g_fallback_bootstrap_config, error);
|
2344
2448
|
if (*error != GRPC_ERROR_NONE) return nullptr;
|
2449
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2450
|
+
gpr_log(GPR_INFO, "xDS bootstrap contents: %s",
|
2451
|
+
bootstrap_contents.c_str());
|
2452
|
+
}
|
2453
|
+
// Parse bootstrap.
|
2454
|
+
std::unique_ptr<XdsBootstrap> bootstrap =
|
2455
|
+
XdsBootstrap::Create(bootstrap_contents, error);
|
2456
|
+
if (*error != GRPC_ERROR_NONE) return nullptr;
|
2457
|
+
// Instantiate XdsClient.
|
2458
|
+
xds_client =
|
2459
|
+
MakeRefCounted<XdsClient>(std::move(bootstrap), g_channel_args);
|
2345
2460
|
g_xds_client = xds_client.get();
|
2346
2461
|
}
|
2347
2462
|
return xds_client;
|
@@ -2367,14 +2482,54 @@ void SetXdsFallbackBootstrapConfig(const char* config) {
|
|
2367
2482
|
|
2368
2483
|
} // namespace internal
|
2369
2484
|
|
2485
|
+
//
|
2486
|
+
// embedding XdsClient in channel args
|
2487
|
+
//
|
2488
|
+
|
2489
|
+
#define GRPC_ARG_XDS_CLIENT "grpc.internal.xds_client"
|
2490
|
+
|
2491
|
+
namespace {
|
2492
|
+
|
2493
|
+
void* XdsClientArgCopy(void* p) {
|
2494
|
+
XdsClient* xds_client = static_cast<XdsClient*>(p);
|
2495
|
+
xds_client->Ref(DEBUG_LOCATION, "channel arg").release();
|
2496
|
+
return p;
|
2497
|
+
}
|
2498
|
+
|
2499
|
+
void XdsClientArgDestroy(void* p) {
|
2500
|
+
XdsClient* xds_client = static_cast<XdsClient*>(p);
|
2501
|
+
xds_client->Unref(DEBUG_LOCATION, "channel arg");
|
2502
|
+
}
|
2503
|
+
|
2504
|
+
int XdsClientArgCmp(void* p, void* q) { return GPR_ICMP(p, q); }
|
2505
|
+
|
2506
|
+
const grpc_arg_pointer_vtable kXdsClientArgVtable = {
|
2507
|
+
XdsClientArgCopy, XdsClientArgDestroy, XdsClientArgCmp};
|
2508
|
+
|
2509
|
+
} // namespace
|
2510
|
+
|
2511
|
+
grpc_arg XdsClient::MakeChannelArg() const {
|
2512
|
+
return grpc_channel_arg_pointer_create(const_cast<char*>(GRPC_ARG_XDS_CLIENT),
|
2513
|
+
const_cast<XdsClient*>(this),
|
2514
|
+
&kXdsClientArgVtable);
|
2515
|
+
}
|
2516
|
+
|
2517
|
+
RefCountedPtr<XdsClient> XdsClient::GetFromChannelArgs(
|
2518
|
+
const grpc_channel_args& args) {
|
2519
|
+
XdsClient* xds_client =
|
2520
|
+
grpc_channel_args_find_pointer<XdsClient>(&args, GRPC_ARG_XDS_CLIENT);
|
2521
|
+
if (xds_client == nullptr) return nullptr;
|
2522
|
+
return xds_client->Ref(DEBUG_LOCATION, "GetFromChannelArgs");
|
2523
|
+
}
|
2524
|
+
|
2370
2525
|
} // namespace grpc_core
|
2371
2526
|
|
2372
2527
|
// The returned bytes may contain NULL(0), so we can't use c-string.
|
2373
2528
|
grpc_slice grpc_dump_xds_configs() {
|
2374
2529
|
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2375
2530
|
grpc_core::ExecCtx exec_ctx;
|
2376
|
-
|
2377
|
-
auto xds_client = grpc_core::XdsClient::GetOrCreate(&error);
|
2531
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
2532
|
+
auto xds_client = grpc_core::XdsClient::GetOrCreate(nullptr, &error);
|
2378
2533
|
if (error != GRPC_ERROR_NONE) {
|
2379
2534
|
// If we isn't using xDS, just return an empty string.
|
2380
2535
|
GRPC_ERROR_UNREF(error);
|