grpc 1.35.0 → 1.38.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +168 -131
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/channel_args.h +28 -0
- data/include/grpc/event_engine/event_engine.h +336 -0
- data/include/grpc/event_engine/port.h +39 -0
- data/include/grpc/event_engine/slice_allocator.h +81 -0
- data/include/grpc/grpc.h +15 -1
- data/include/grpc/grpc_security.h +16 -11
- data/include/grpc/grpc_security_constants.h +14 -0
- data/include/grpc/impl/codegen/grpc_types.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +7 -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 +740 -3185
- data/src/core/ext/filters/client_channel/client_channel.h +488 -56
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
- data/src/core/ext/filters/client_channel/config_selector.h +10 -2
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +18 -14
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
- data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +26 -23
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
- 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 +49 -48
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -3
- 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 +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +22 -18
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
- 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 +15 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +318 -193
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +32 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +316 -171
- 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/local_subchannel_pool.cc +27 -67
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
- data/src/core/ext/filters/client_channel/resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver.h +3 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +59 -60
- 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_libuv.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +17 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +67 -74
- 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_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 +33 -23
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +38 -43
- 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 +379 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +346 -178
- 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 +2188 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
- data/src/core/ext/filters/client_channel/server_address.cc +10 -1
- data/src/core/ext/filters/client_channel/server_address.h +31 -0
- 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_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 +86 -162
- data/src/core/ext/filters/client_channel/subchannel.h +68 -99
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
- 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 +501 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
- data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
- 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 +47 -42
- 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 +5 -4
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -8
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +5 -4
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +2 -2
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +6 -5
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +507 -196
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +13 -4
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -3
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +64 -21
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +167 -122
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
- 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 +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +13 -9
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
- 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 +6 -5
- 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_encoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
- 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 +32 -27
- data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
- data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +11 -16
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +42 -59
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +75 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +9 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +28 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +6 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +41 -7
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -21
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +13 -9
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +37 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +11 -9
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +44 -27
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +57 -16
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +150 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +19 -21
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +64 -51
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +16 -13
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +50 -18
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +4 -7
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +0 -17
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +30 -23
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +85 -73
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -3
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -3
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -2
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +21 -4
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +29 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
- data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/authority.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
- data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/resource.upb.c +9 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -171
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +405 -420
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +2 -2
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +177 -171
- 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 +88 -88
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +153 -153
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +10 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +33 -20
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +56 -59
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +116 -111
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +129 -121
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +21 -24
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +17 -13
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +753 -724
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +371 -377
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +112 -108
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +177 -180
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
- 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 +2179 -688
- data/src/core/ext/xds/xds_api.h +326 -124
- data/src/core/ext/xds/xds_bootstrap.cc +115 -142
- data/src/core/ext/xds/xds_bootstrap.h +24 -17
- data/src/core/ext/xds/xds_certificate_provider.cc +184 -78
- data/src/core/ext/xds/xds_certificate_provider.h +84 -45
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_client.cc +462 -183
- data/src/core/ext/xds/xds_client.h +65 -22
- data/src/core/ext/xds/xds_client_stats.cc +2 -1
- data/src/core/ext/xds/xds_client_stats.h +5 -4
- data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
- data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
- data/src/core/ext/xds/xds_http_filters.cc +114 -0
- data/src/core/ext/xds/xds_http_filters.h +130 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +444 -29
- 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 +108 -5
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +26 -6
- data/src/core/lib/channel/channel_stack.cc +22 -9
- data/src/core/lib/channel/channel_stack.h +17 -9
- 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 +108 -12
- data/src/core/lib/channel/channelz.h +30 -1
- data/src/core/lib/channel/channelz_registry.cc +14 -0
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/handshaker.cc +9 -50
- data/src/core/lib/channel/handshaker.h +6 -23
- data/src/core/lib/channel/status_util.cc +12 -2
- data/src/core/lib/channel/status_util.h +5 -0
- data/src/core/lib/event_engine/slice_allocator.cc +59 -0
- data/src/core/lib/event_engine/sockaddr.cc +38 -0
- data/src/core/lib/gpr/log.cc +6 -1
- data/src/core/lib/gpr/sync_abseil.cc +3 -6
- data/src/core/lib/gpr/sync_windows.cc +2 -2
- data/src/core/lib/gprpp/atomic.h +3 -3
- data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
- data/src/core/lib/gprpp/mpscq.cc +2 -2
- data/src/core/lib/gprpp/ref_counted.h +29 -15
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -0
- data/src/core/lib/gprpp/status_helper.cc +407 -0
- data/src/core/lib/gprpp/status_helper.h +180 -0
- data/src/core/lib/gprpp/sync.h +129 -40
- data/src/core/lib/gprpp/thd.h +1 -1
- data/src/core/lib/gprpp/time_util.cc +77 -0
- data/src/core/lib/gprpp/time_util.h +42 -0
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli_security_connector.cc +13 -9
- 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 +7 -9
- data/src/core/lib/iomgr/buffer_list.h +5 -6
- 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 +5 -5
- 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_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +167 -61
- data/src/core/lib/iomgr/error.h +218 -107
- 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 +16 -13
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +22 -22
- data/src/core/lib/iomgr/ev_epollex_linux.cc +52 -49
- data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
- data/src/core/lib/iomgr/ev_posix.cc +12 -11
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/exec_ctx.cc +10 -6
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- 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 +1 -1
- 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 +1 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -3
- 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 +5 -5
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +1 -1
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +3 -3
- data/src/core/lib/iomgr/resolve_address.h +6 -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 +12 -11
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +23 -20
- 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 +16 -18
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +5 -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 +41 -42
- 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 +23 -21
- data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
- 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 +27 -25
- 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_custom.cc +2 -1
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +8 -8
- 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_nospecial.cc +1 -1
- 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 +4 -4
- data/src/core/lib/matchers/matchers.cc +339 -0
- data/src/core/lib/matchers/matchers.h +160 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
- data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
- 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 +4 -3
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +18 -14
- 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 +17 -14
- 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 +6 -5
- 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 +9 -9
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +16 -15
- 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/insecure/insecure_credentials.cc +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +2 -5
- 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 -8
- data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
- data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
- 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/ssl/ssl_credentials.cc +2 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
- 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 +19 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +2 -1
- data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +130 -61
- data/src/core/lib/security/credentials/xds/xds_credentials.h +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 +5 -5
- 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 +14 -4
- 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 +31 -8
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +88 -74
- 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 +66 -37
- data/src/core/lib/security/transport/server_auth_filter.cc +24 -11
- 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_intern.cc +5 -6
- data/src/core/lib/surface/call.cc +46 -45
- data/src/core/lib/surface/call.h +2 -2
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +6 -5
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +46 -47
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +13 -15
- data/src/core/lib/surface/lame_client.cc +43 -24
- data/src/core/lib/surface/lame_client.h +4 -3
- data/src/core/lib/surface/server.cc +71 -58
- data/src/core/lib/surface/server.h +91 -28
- 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 +4 -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 +19 -8
- data/src/core/lib/transport/error_utils.h +11 -5
- data/src/core/lib/transport/metadata.cc +6 -2
- data/src/core/lib/transport/metadata_batch.cc +64 -37
- data/src/core/lib/transport/metadata_batch.h +33 -18
- data/src/core/lib/transport/transport.cc +4 -3
- data/src/core/lib/transport/transport.h +4 -4
- data/src/core/lib/transport/transport_op_string.cc +5 -5
- data/src/core/plugin_registry/grpc_plugin_registry.cc +12 -0
- data/src/core/tsi/alts/crypt/gsec.h +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -28
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +23 -27
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
- data/src/core/tsi/fake_transport_security.cc +11 -2
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +2 -4
- data/src/core/tsi/ssl_transport_security.cc +32 -17
- data/src/core/tsi/ssl_transport_security.h +3 -7
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/extconf.rb +9 -1
- data/src/ruby/ext/grpc/rb_channel.c +10 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
- data/src/ruby/ext/grpc/rb_server.c +13 -1
- data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
- data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -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/messages_pb.rb +7 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/src/ruby/spec/call_spec.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +32 -0
- data/src/ruby/spec/channel_spec.rb +17 -6
- data/src/ruby/spec/client_auth_spec.rb +27 -1
- data/src/ruby/spec/errors_spec.rb +1 -1
- data/src/ruby/spec/generic/active_call_spec.rb +2 -2
- data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
- data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
- data/src/ruby/spec/server_credentials_spec.rb +25 -0
- data/src/ruby/spec/server_spec.rb +22 -0
- 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/graphcycles.cc +1 -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 +742 -724
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +4 -11
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +22 -10
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +16 -16
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +35 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +40 -86
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +6 -17
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
- data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
- 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 +101 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +4 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +10 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +32 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
- data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
- 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 +4 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -2
- 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 +43 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
- 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 +28 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +135 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +51 -32
- 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 +161 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +121 -71
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +71 -41
- 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 +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/is_fips.c → rand_extra/passive.c} +16 -11
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -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 +4 -31
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +17 -24
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +29 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +6 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +39 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +11 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +25 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
- 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 +7 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +737 -551
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +19 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +15 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -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 +13 -40
- 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/obj.h +24 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +239 -37
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +28 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +702 -219
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +141 -36
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +47 -15
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +11 -20
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +159 -13
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +253 -58
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
- 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 +90 -25
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +7 -8
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +450 -104
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +232 -85
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- data/third_party/xxhash/xxhash.h +5443 -0
- metadata +174 -95
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -60
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -143
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -84
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -94
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -173
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -92
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
- data/src/core/lib/iomgr/iomgr_posix.h +0 -26
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
- data/src/core/lib/security/authorization/authorization_engine.h +0 -84
- data/src/core/lib/security/authorization/evaluate_args.cc +0 -148
- data/src/core/lib/security/authorization/evaluate_args.h +0 -59
- data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/upb/upb/json_decode.c +0 -1443
- data/third_party/upb/upb/json_decode.h +0 -23
- data/third_party/upb/upb/json_encode.c +0 -713
- data/third_party/upb/upb/json_encode.h +0 -36
@@ -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
|
|
@@ -35,19 +33,22 @@
|
|
35
33
|
#include "src/core/ext/filters/client_channel/client_channel.h"
|
36
34
|
#include "src/core/ext/filters/client_channel/service_config.h"
|
37
35
|
#include "src/core/ext/xds/xds_api.h"
|
36
|
+
#include "src/core/ext/xds/xds_bootstrap.h"
|
38
37
|
#include "src/core/ext/xds/xds_channel_args.h"
|
39
38
|
#include "src/core/ext/xds/xds_client.h"
|
40
39
|
#include "src/core/ext/xds/xds_client_stats.h"
|
40
|
+
#include "src/core/ext/xds/xds_http_filters.h"
|
41
|
+
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
41
42
|
#include "src/core/lib/backoff/backoff.h"
|
42
43
|
#include "src/core/lib/channel/channel_args.h"
|
43
44
|
#include "src/core/lib/channel/channel_stack.h"
|
45
|
+
#include "src/core/lib/gpr/env.h"
|
44
46
|
#include "src/core/lib/gpr/string.h"
|
45
47
|
#include "src/core/lib/gprpp/memory.h"
|
46
48
|
#include "src/core/lib/gprpp/orphanable.h"
|
47
49
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
48
50
|
#include "src/core/lib/gprpp/sync.h"
|
49
51
|
#include "src/core/lib/iomgr/sockaddr.h"
|
50
|
-
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
51
52
|
#include "src/core/lib/iomgr/timer.h"
|
52
53
|
#include "src/core/lib/slice/slice_internal.h"
|
53
54
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
@@ -70,8 +71,9 @@ TraceFlag grpc_xds_client_refcount_trace(false, "xds_client_refcount");
|
|
70
71
|
namespace {
|
71
72
|
|
72
73
|
Mutex* g_mu = nullptr;
|
73
|
-
const grpc_channel_args* g_channel_args = nullptr;
|
74
|
-
XdsClient* g_xds_client = 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;
|
75
77
|
|
76
78
|
} // namespace
|
77
79
|
|
@@ -99,8 +101,8 @@ class XdsClient::ChannelState::RetryableCall
|
|
99
101
|
private:
|
100
102
|
void StartNewCallLocked();
|
101
103
|
void StartRetryTimerLocked();
|
102
|
-
static void OnRetryTimer(void* arg,
|
103
|
-
void OnRetryTimerLocked(
|
104
|
+
static void OnRetryTimer(void* arg, grpc_error_handle error);
|
105
|
+
void OnRetryTimerLocked(grpc_error_handle error);
|
104
106
|
|
105
107
|
// The wrapped xds call that talks to the xds server. It's instantiated
|
106
108
|
// every time we start a new call. It's null during call retry backoff.
|
@@ -132,9 +134,11 @@ class XdsClient::ChannelState::AdsCallState
|
|
132
134
|
XdsClient* xds_client() const { return chand()->xds_client(); }
|
133
135
|
bool seen_response() const { return seen_response_; }
|
134
136
|
|
135
|
-
void
|
136
|
-
|
137
|
-
|
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_);
|
138
142
|
|
139
143
|
bool HasSubscribedResources() const;
|
140
144
|
|
@@ -175,7 +179,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
175
179
|
}
|
176
180
|
|
177
181
|
private:
|
178
|
-
static void OnTimer(void* arg,
|
182
|
+
static void OnTimer(void* arg, grpc_error_handle error) {
|
179
183
|
ResourceState* self = static_cast<ResourceState*>(arg);
|
180
184
|
{
|
181
185
|
MutexLock lock(&self->ads_calld_->xds_client()->mu_);
|
@@ -185,36 +189,43 @@ class XdsClient::ChannelState::AdsCallState
|
|
185
189
|
self->Unref(DEBUG_LOCATION, "timer");
|
186
190
|
}
|
187
191
|
|
188
|
-
void OnTimerLocked(
|
192
|
+
void OnTimerLocked(grpc_error_handle error)
|
193
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
189
194
|
if (error == GRPC_ERROR_NONE && timer_pending_) {
|
190
195
|
timer_pending_ = false;
|
191
|
-
|
196
|
+
grpc_error_handle watcher_error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
192
197
|
absl::StrFormat(
|
193
198
|
"timeout obtaining resource {type=%s name=%s} from xds server",
|
194
199
|
type_url_, name_)
|
195
200
|
.c_str());
|
201
|
+
watcher_error = grpc_error_set_int(
|
202
|
+
watcher_error, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
196
203
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
197
204
|
gpr_log(GPR_INFO, "[xds_client %p] %s", ads_calld_->xds_client(),
|
198
|
-
|
205
|
+
grpc_error_std_string(watcher_error).c_str());
|
199
206
|
}
|
200
207
|
if (type_url_ == XdsApi::kLdsTypeUrl) {
|
201
208
|
ListenerState& state = ads_calld_->xds_client()->listener_map_[name_];
|
209
|
+
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
202
210
|
for (const auto& p : state.watchers) {
|
203
211
|
p.first->OnError(GRPC_ERROR_REF(watcher_error));
|
204
212
|
}
|
205
213
|
} else if (type_url_ == XdsApi::kRdsTypeUrl) {
|
206
214
|
RouteConfigState& state =
|
207
215
|
ads_calld_->xds_client()->route_config_map_[name_];
|
216
|
+
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
208
217
|
for (const auto& p : state.watchers) {
|
209
218
|
p.first->OnError(GRPC_ERROR_REF(watcher_error));
|
210
219
|
}
|
211
220
|
} else if (type_url_ == XdsApi::kCdsTypeUrl) {
|
212
221
|
ClusterState& state = ads_calld_->xds_client()->cluster_map_[name_];
|
222
|
+
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
213
223
|
for (const auto& p : state.watchers) {
|
214
224
|
p.first->OnError(GRPC_ERROR_REF(watcher_error));
|
215
225
|
}
|
216
226
|
} else if (type_url_ == XdsApi::kEdsTypeUrl) {
|
217
227
|
EndpointState& state = ads_calld_->xds_client()->endpoint_map_[name_];
|
228
|
+
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
218
229
|
for (const auto& p : state.watchers) {
|
219
230
|
p.first->OnError(GRPC_ERROR_REF(watcher_error));
|
220
231
|
}
|
@@ -241,26 +252,38 @@ class XdsClient::ChannelState::AdsCallState
|
|
241
252
|
|
242
253
|
// Nonce and error for this resource type.
|
243
254
|
std::string nonce;
|
244
|
-
|
255
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
245
256
|
|
246
257
|
// Subscribed resources of this type.
|
247
258
|
std::map<std::string /* name */, OrphanablePtr<ResourceState>>
|
248
259
|
subscribed_resources;
|
249
260
|
};
|
250
261
|
|
251
|
-
void SendMessageLocked(const std::string& type_url)
|
252
|
-
|
253
|
-
|
254
|
-
void
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
void
|
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
|
+
static void OnRequestSent(void* arg, grpc_error_handle error);
|
279
|
+
void OnRequestSentLocked(grpc_error_handle error)
|
280
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
281
|
+
static void OnResponseReceived(void* arg, grpc_error_handle error);
|
282
|
+
bool OnResponseReceivedLocked()
|
283
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
284
|
+
static void OnStatusReceived(void* arg, grpc_error_handle error);
|
285
|
+
void OnStatusReceivedLocked(grpc_error_handle error)
|
286
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
264
287
|
|
265
288
|
bool IsCurrentCallOnChannel() const;
|
266
289
|
|
@@ -333,12 +356,15 @@ class XdsClient::ChannelState::LrsCallState
|
|
333
356
|
void Orphan() override;
|
334
357
|
|
335
358
|
private:
|
336
|
-
void ScheduleNextReportLocked()
|
337
|
-
|
338
|
-
|
339
|
-
bool
|
340
|
-
|
341
|
-
bool
|
359
|
+
void ScheduleNextReportLocked()
|
360
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
361
|
+
static void OnNextReportTimer(void* arg, grpc_error_handle error);
|
362
|
+
bool OnNextReportTimerLocked(grpc_error_handle error)
|
363
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
364
|
+
bool SendReportLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
365
|
+
static void OnReportDone(void* arg, grpc_error_handle error);
|
366
|
+
bool OnReportDoneLocked(grpc_error_handle error)
|
367
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
342
368
|
|
343
369
|
bool IsCurrentReporterOnCall() const {
|
344
370
|
return this == parent_->reporter_.get();
|
@@ -357,12 +383,15 @@ class XdsClient::ChannelState::LrsCallState
|
|
357
383
|
grpc_closure on_report_done_;
|
358
384
|
};
|
359
385
|
|
360
|
-
static void OnInitialRequestSent(void* arg,
|
361
|
-
void OnInitialRequestSentLocked()
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
386
|
+
static void OnInitialRequestSent(void* arg, grpc_error_handle error);
|
387
|
+
void OnInitialRequestSentLocked()
|
388
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
389
|
+
static void OnResponseReceived(void* arg, grpc_error_handle error);
|
390
|
+
bool OnResponseReceivedLocked()
|
391
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
392
|
+
static void OnStatusReceived(void* arg, grpc_error_handle error);
|
393
|
+
void OnStatusReceivedLocked(grpc_error_handle error)
|
394
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
366
395
|
|
367
396
|
bool IsCurrentCallOnChannel() const;
|
368
397
|
|
@@ -418,7 +447,7 @@ class XdsClient::ChannelState::StateWatcher
|
|
418
447
|
"[xds_client %p] xds channel in state:TRANSIENT_FAILURE "
|
419
448
|
"status_message:(%s)",
|
420
449
|
parent_->xds_client(), status.ToString().c_str());
|
421
|
-
parent_->
|
450
|
+
parent_->xds_client_->NotifyOnErrorLocked(
|
422
451
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
423
452
|
"xds channel in TRANSIENT_FAILURE"));
|
424
453
|
}
|
@@ -433,26 +462,13 @@ class XdsClient::ChannelState::StateWatcher
|
|
433
462
|
|
434
463
|
namespace {
|
435
464
|
|
436
|
-
grpc_channel* CreateXdsChannel(
|
437
|
-
|
438
|
-
absl::InlinedVector<grpc_arg, 2> args_to_add = {
|
439
|
-
grpc_channel_arg_integer_create(
|
440
|
-
const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
|
441
|
-
5 * 60 * GPR_MS_PER_SEC),
|
442
|
-
grpc_channel_arg_integer_create(
|
443
|
-
const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
|
444
|
-
};
|
445
|
-
grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
|
446
|
-
g_channel_args, args_to_add.data(), args_to_add.size());
|
447
|
-
// Create channel creds.
|
465
|
+
grpc_channel* CreateXdsChannel(grpc_channel_args* args,
|
466
|
+
const XdsBootstrap::XdsServer& server) {
|
448
467
|
RefCountedPtr<grpc_channel_credentials> channel_creds =
|
449
468
|
XdsChannelCredsRegistry::MakeChannelCreds(server.channel_creds_type,
|
450
469
|
server.channel_creds_config);
|
451
|
-
|
452
|
-
|
453
|
-
channel_creds.get(), server.server_uri.c_str(), new_args, nullptr);
|
454
|
-
grpc_channel_args_destroy(new_args);
|
455
|
-
return channel;
|
470
|
+
return grpc_secure_channel_create(channel_creds.get(),
|
471
|
+
server.server_uri.c_str(), args, nullptr);
|
456
472
|
}
|
457
473
|
|
458
474
|
} // namespace
|
@@ -469,7 +485,7 @@ XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
|
|
469
485
|
gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s",
|
470
486
|
xds_client_.get(), server.server_uri.c_str());
|
471
487
|
}
|
472
|
-
channel_ = CreateXdsChannel(server);
|
488
|
+
channel_ = CreateXdsChannel(xds_client_->args_, server);
|
473
489
|
GPR_ASSERT(channel_ != nullptr);
|
474
490
|
StartConnectivityWatchLocked();
|
475
491
|
}
|
@@ -502,7 +518,7 @@ XdsClient::ChannelState::LrsCallState* XdsClient::ChannelState::lrs_calld()
|
|
502
518
|
}
|
503
519
|
|
504
520
|
bool XdsClient::ChannelState::HasActiveAdsCall() const {
|
505
|
-
return ads_calld_->calld() != nullptr;
|
521
|
+
return ads_calld_ != nullptr && ads_calld_->calld() != nullptr;
|
506
522
|
}
|
507
523
|
|
508
524
|
void XdsClient::ChannelState::MaybeStartLrsCall() {
|
@@ -514,24 +530,22 @@ void XdsClient::ChannelState::MaybeStartLrsCall() {
|
|
514
530
|
void XdsClient::ChannelState::StopLrsCall() { lrs_calld_.reset(); }
|
515
531
|
|
516
532
|
void XdsClient::ChannelState::StartConnectivityWatchLocked() {
|
517
|
-
|
518
|
-
|
519
|
-
GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
|
533
|
+
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
534
|
+
GPR_ASSERT(client_channel != nullptr);
|
520
535
|
watcher_ = new StateWatcher(Ref(DEBUG_LOCATION, "ChannelState+watch"));
|
521
|
-
|
522
|
-
|
536
|
+
client_channel->AddConnectivityWatcher(
|
537
|
+
GRPC_CHANNEL_IDLE,
|
523
538
|
OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
|
524
539
|
}
|
525
540
|
|
526
541
|
void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
grpc_client_channel_stop_connectivity_watch(client_channel_elem, watcher_);
|
542
|
+
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
543
|
+
GPR_ASSERT(client_channel != nullptr);
|
544
|
+
client_channel->RemoveConnectivityWatcher(watcher_);
|
531
545
|
}
|
532
546
|
|
533
|
-
void XdsClient::ChannelState::
|
534
|
-
|
547
|
+
void XdsClient::ChannelState::SubscribeLocked(const std::string& type_url,
|
548
|
+
const std::string& name) {
|
535
549
|
if (ads_calld_ == nullptr) {
|
536
550
|
// Start the ADS call if this is the first request.
|
537
551
|
ads_calld_.reset(new RetryableCall<AdsCallState>(
|
@@ -545,16 +559,16 @@ void XdsClient::ChannelState::Subscribe(const std::string& type_url,
|
|
545
559
|
// because when the call is restarted it will resend all necessary requests.
|
546
560
|
if (ads_calld() == nullptr) return;
|
547
561
|
// Subscribe to this resource if the ADS call is active.
|
548
|
-
ads_calld()->
|
562
|
+
ads_calld()->SubscribeLocked(type_url, name);
|
549
563
|
}
|
550
564
|
|
551
|
-
void XdsClient::ChannelState::
|
552
|
-
|
553
|
-
|
565
|
+
void XdsClient::ChannelState::UnsubscribeLocked(const std::string& type_url,
|
566
|
+
const std::string& name,
|
567
|
+
bool delay_unsubscription) {
|
554
568
|
if (ads_calld_ != nullptr) {
|
555
569
|
auto* calld = ads_calld_->calld();
|
556
570
|
if (calld != nullptr) {
|
557
|
-
calld->
|
571
|
+
calld->UnsubscribeLocked(type_url, name, delay_unsubscription);
|
558
572
|
if (!calld->HasSubscribedResources()) ads_calld_.reset();
|
559
573
|
}
|
560
574
|
}
|
@@ -637,7 +651,7 @@ void XdsClient::ChannelState::RetryableCall<T>::StartRetryTimerLocked() {
|
|
637
651
|
|
638
652
|
template <typename T>
|
639
653
|
void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer(
|
640
|
-
void* arg,
|
654
|
+
void* arg, grpc_error_handle error) {
|
641
655
|
RetryableCall* calld = static_cast<RetryableCall*>(arg);
|
642
656
|
{
|
643
657
|
MutexLock lock(&calld->chand_->xds_client()->mu_);
|
@@ -648,7 +662,7 @@ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer(
|
|
648
662
|
|
649
663
|
template <typename T>
|
650
664
|
void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
|
651
|
-
|
665
|
+
grpc_error_handle error) {
|
652
666
|
retry_timer_callback_pending_ = false;
|
653
667
|
if (!shutting_down_ && error == GRPC_ERROR_NONE) {
|
654
668
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -716,16 +730,16 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
716
730
|
GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
|
717
731
|
grpc_schedule_on_exec_ctx);
|
718
732
|
for (const auto& p : xds_client()->listener_map_) {
|
719
|
-
|
733
|
+
SubscribeLocked(XdsApi::kLdsTypeUrl, std::string(p.first));
|
720
734
|
}
|
721
735
|
for (const auto& p : xds_client()->route_config_map_) {
|
722
|
-
|
736
|
+
SubscribeLocked(XdsApi::kRdsTypeUrl, std::string(p.first));
|
723
737
|
}
|
724
738
|
for (const auto& p : xds_client()->cluster_map_) {
|
725
|
-
|
739
|
+
SubscribeLocked(XdsApi::kCdsTypeUrl, std::string(p.first));
|
726
740
|
}
|
727
741
|
for (const auto& p : xds_client()->endpoint_map_) {
|
728
|
-
|
742
|
+
SubscribeLocked(XdsApi::kEdsTypeUrl, std::string(p.first));
|
729
743
|
}
|
730
744
|
// Op: recv initial metadata.
|
731
745
|
op = ops;
|
@@ -789,7 +803,8 @@ void XdsClient::ChannelState::AdsCallState::Orphan() {
|
|
789
803
|
}
|
790
804
|
|
791
805
|
void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
792
|
-
const std::string& type_url)
|
806
|
+
const std::string& type_url)
|
807
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
793
808
|
// Buffer message sending if an existing message is in flight.
|
794
809
|
if (send_message_payload_ != nullptr) {
|
795
810
|
buffered_requests_.insert(type_url);
|
@@ -814,7 +829,7 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
814
829
|
"error=%s resources=%s",
|
815
830
|
xds_client(), type_url.c_str(),
|
816
831
|
xds_client()->resource_version_map_[type_url].c_str(),
|
817
|
-
state.nonce.c_str(),
|
832
|
+
state.nonce.c_str(), grpc_error_std_string(state.error).c_str(),
|
818
833
|
absl::StrJoin(resource_names, " ").c_str());
|
819
834
|
}
|
820
835
|
GRPC_ERROR_UNREF(state.error);
|
@@ -841,7 +856,7 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
841
856
|
}
|
842
857
|
}
|
843
858
|
|
844
|
-
void XdsClient::ChannelState::AdsCallState::
|
859
|
+
void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
|
845
860
|
const std::string& type_url, const std::string& name) {
|
846
861
|
auto& state = state_map_[type_url].subscribed_resources[name];
|
847
862
|
if (state == nullptr) {
|
@@ -851,7 +866,7 @@ void XdsClient::ChannelState::AdsCallState::Subscribe(
|
|
851
866
|
}
|
852
867
|
}
|
853
868
|
|
854
|
-
void XdsClient::ChannelState::AdsCallState::
|
869
|
+
void XdsClient::ChannelState::AdsCallState::UnsubscribeLocked(
|
855
870
|
const std::string& type_url, const std::string& name,
|
856
871
|
bool delay_unsubscription) {
|
857
872
|
state_map_[type_url].subscribed_resources.erase(name);
|
@@ -865,7 +880,24 @@ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
|
865
880
|
return false;
|
866
881
|
}
|
867
882
|
|
868
|
-
|
883
|
+
namespace {
|
884
|
+
|
885
|
+
// Build a resource metadata struct for ADS result accepting methods and CSDS.
|
886
|
+
XdsApi::ResourceMetadata CreateResourceMetadataAcked(
|
887
|
+
std::string serialized_proto, std::string version,
|
888
|
+
grpc_millis update_time) {
|
889
|
+
XdsApi::ResourceMetadata resource_metadata;
|
890
|
+
resource_metadata.serialized_proto = std::move(serialized_proto);
|
891
|
+
resource_metadata.update_time = update_time;
|
892
|
+
resource_metadata.version = std::move(version);
|
893
|
+
resource_metadata.client_status = XdsApi::ResourceMetadata::ACKED;
|
894
|
+
return resource_metadata;
|
895
|
+
}
|
896
|
+
|
897
|
+
} // namespace
|
898
|
+
|
899
|
+
void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdateLocked(
|
900
|
+
std::string version, grpc_millis update_time,
|
869
901
|
XdsApi::LdsUpdateMap lds_update_map) {
|
870
902
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
871
903
|
gpr_log(GPR_INFO,
|
@@ -877,23 +909,17 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
|
|
877
909
|
std::set<std::string> rds_resource_names_seen;
|
878
910
|
for (auto& p : lds_update_map) {
|
879
911
|
const std::string& listener_name = p.first;
|
880
|
-
XdsApi::LdsUpdate& lds_update = p.second;
|
912
|
+
XdsApi::LdsUpdate& lds_update = p.second.resource;
|
881
913
|
auto& state = lds_state.subscribed_resources[listener_name];
|
882
914
|
if (state != nullptr) state->Finish();
|
883
915
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
884
|
-
gpr_log(GPR_INFO, "[xds_client %p] LDS resource %s:
|
885
|
-
|
886
|
-
(!lds_update.route_config_name.empty()
|
887
|
-
? lds_update.route_config_name.c_str()
|
888
|
-
: "<inlined>"));
|
889
|
-
if (lds_update.rds_update.has_value()) {
|
890
|
-
gpr_log(GPR_INFO, "RouteConfiguration: %s",
|
891
|
-
lds_update.rds_update->ToString().c_str());
|
892
|
-
}
|
916
|
+
gpr_log(GPR_INFO, "[xds_client %p] LDS resource %s: %s", xds_client(),
|
917
|
+
listener_name.c_str(), lds_update.ToString().c_str());
|
893
918
|
}
|
894
919
|
// Record the RDS resource names seen.
|
895
|
-
if (!lds_update.route_config_name.empty()) {
|
896
|
-
rds_resource_names_seen.insert(
|
920
|
+
if (!lds_update.http_connection_manager.route_config_name.empty()) {
|
921
|
+
rds_resource_names_seen.insert(
|
922
|
+
lds_update.http_connection_manager.route_config_name);
|
897
923
|
}
|
898
924
|
// Ignore identical update.
|
899
925
|
ListenerState& listener_state = xds_client()->listener_map_[listener_name];
|
@@ -909,6 +935,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
|
|
909
935
|
}
|
910
936
|
// Update the listener state.
|
911
937
|
listener_state.update = std::move(lds_update);
|
938
|
+
listener_state.meta = CreateResourceMetadataAcked(
|
939
|
+
std::move(p.second.serialized_proto), version, update_time);
|
912
940
|
// Notify watchers.
|
913
941
|
for (const auto& p : listener_state.watchers) {
|
914
942
|
p.first->OnListenerChanged(*listener_state.update);
|
@@ -952,7 +980,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
|
|
952
980
|
}
|
953
981
|
}
|
954
982
|
|
955
|
-
void XdsClient::ChannelState::AdsCallState::
|
983
|
+
void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdateLocked(
|
984
|
+
std::string version, grpc_millis update_time,
|
956
985
|
XdsApi::RdsUpdateMap rds_update_map) {
|
957
986
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
958
987
|
gpr_log(GPR_INFO,
|
@@ -963,7 +992,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
|
|
963
992
|
auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
|
964
993
|
for (auto& p : rds_update_map) {
|
965
994
|
const std::string& route_config_name = p.first;
|
966
|
-
XdsApi::RdsUpdate& rds_update = p.second;
|
995
|
+
XdsApi::RdsUpdate& rds_update = p.second.resource;
|
967
996
|
auto& state = rds_state.subscribed_resources[route_config_name];
|
968
997
|
if (state != nullptr) state->Finish();
|
969
998
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -984,6 +1013,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
|
|
984
1013
|
}
|
985
1014
|
// Update the cache.
|
986
1015
|
route_config_state.update = std::move(rds_update);
|
1016
|
+
route_config_state.meta = CreateResourceMetadataAcked(
|
1017
|
+
std::move(p.second.serialized_proto), version, update_time);
|
987
1018
|
// Notify all watchers.
|
988
1019
|
for (const auto& p : route_config_state.watchers) {
|
989
1020
|
p.first->OnRouteConfigChanged(*route_config_state.update);
|
@@ -991,7 +1022,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
|
|
991
1022
|
}
|
992
1023
|
}
|
993
1024
|
|
994
|
-
void XdsClient::ChannelState::AdsCallState::
|
1025
|
+
void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdateLocked(
|
1026
|
+
std::string version, grpc_millis update_time,
|
995
1027
|
XdsApi::CdsUpdateMap cds_update_map) {
|
996
1028
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
997
1029
|
gpr_log(GPR_INFO,
|
@@ -1003,7 +1035,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
|
|
1003
1035
|
std::set<std::string> eds_resource_names_seen;
|
1004
1036
|
for (auto& p : cds_update_map) {
|
1005
1037
|
const char* cluster_name = p.first.c_str();
|
1006
|
-
XdsApi::CdsUpdate& cds_update = p.second;
|
1038
|
+
XdsApi::CdsUpdate& cds_update = p.second.resource;
|
1007
1039
|
auto& state = cds_state.subscribed_resources[cluster_name];
|
1008
1040
|
if (state != nullptr) state->Finish();
|
1009
1041
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -1027,6 +1059,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
|
|
1027
1059
|
}
|
1028
1060
|
// Update the cluster state.
|
1029
1061
|
cluster_state.update = std::move(cds_update);
|
1062
|
+
cluster_state.meta = CreateResourceMetadataAcked(
|
1063
|
+
std::move(p.second.serialized_proto), version, update_time);
|
1030
1064
|
// Notify all watchers.
|
1031
1065
|
for (const auto& p : cluster_state.watchers) {
|
1032
1066
|
p.first->OnClusterChanged(cluster_state.update.value());
|
@@ -1069,7 +1103,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
|
|
1069
1103
|
}
|
1070
1104
|
}
|
1071
1105
|
|
1072
|
-
void XdsClient::ChannelState::AdsCallState::
|
1106
|
+
void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdateLocked(
|
1107
|
+
std::string version, grpc_millis update_time,
|
1073
1108
|
XdsApi::EdsUpdateMap eds_update_map) {
|
1074
1109
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1075
1110
|
gpr_log(GPR_INFO,
|
@@ -1080,7 +1115,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
|
|
1080
1115
|
auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
|
1081
1116
|
for (auto& p : eds_update_map) {
|
1082
1117
|
const char* eds_service_name = p.first.c_str();
|
1083
|
-
XdsApi::EdsUpdate& eds_update = p.second;
|
1118
|
+
XdsApi::EdsUpdate& eds_update = p.second.resource;
|
1084
1119
|
auto& state = eds_state.subscribed_resources[eds_service_name];
|
1085
1120
|
if (state != nullptr) state->Finish();
|
1086
1121
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -1101,6 +1136,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
|
|
1101
1136
|
}
|
1102
1137
|
// Update the cluster state.
|
1103
1138
|
endpoint_state.update = std::move(eds_update);
|
1139
|
+
endpoint_state.meta = CreateResourceMetadataAcked(
|
1140
|
+
std::move(p.second.serialized_proto), version, update_time);
|
1104
1141
|
// Notify all watchers.
|
1105
1142
|
for (const auto& p : endpoint_state.watchers) {
|
1106
1143
|
p.first->OnEndpointChanged(endpoint_state.update.value());
|
@@ -1108,8 +1145,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
|
|
1108
1145
|
}
|
1109
1146
|
}
|
1110
1147
|
|
1111
|
-
void XdsClient::ChannelState::AdsCallState::OnRequestSent(
|
1112
|
-
|
1148
|
+
void XdsClient::ChannelState::AdsCallState::OnRequestSent(
|
1149
|
+
void* arg, grpc_error_handle error) {
|
1113
1150
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1114
1151
|
{
|
1115
1152
|
MutexLock lock(&ads_calld->xds_client()->mu_);
|
@@ -1119,7 +1156,7 @@ void XdsClient::ChannelState::AdsCallState::OnRequestSent(void* arg,
|
|
1119
1156
|
}
|
1120
1157
|
|
1121
1158
|
void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
|
1122
|
-
|
1159
|
+
grpc_error_handle error) {
|
1123
1160
|
if (IsCurrentCallOnChannel() && error == GRPC_ERROR_NONE) {
|
1124
1161
|
// Clean up the sent message.
|
1125
1162
|
grpc_byte_buffer_destroy(send_message_payload_);
|
@@ -1143,7 +1180,7 @@ void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
|
|
1143
1180
|
}
|
1144
1181
|
|
1145
1182
|
void XdsClient::ChannelState::AdsCallState::OnResponseReceived(
|
1146
|
-
void* arg,
|
1183
|
+
void* arg, grpc_error_handle /* error */) {
|
1147
1184
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1148
1185
|
bool done;
|
1149
1186
|
{
|
@@ -1167,7 +1204,8 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1167
1204
|
recv_message_payload_ = nullptr;
|
1168
1205
|
// Parse and validate the response.
|
1169
1206
|
XdsApi::AdsParseResult result = xds_client()->api_.ParseAdsResponse(
|
1170
|
-
|
1207
|
+
chand()->server_, response_slice,
|
1208
|
+
ResourceNamesForRequest(XdsApi::kLdsTypeUrl),
|
1171
1209
|
ResourceNamesForRequest(XdsApi::kRdsTypeUrl),
|
1172
1210
|
ResourceNamesForRequest(XdsApi::kCdsTypeUrl),
|
1173
1211
|
ResourceNamesForRequest(XdsApi::kEdsTypeUrl));
|
@@ -1176,14 +1214,17 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1176
1214
|
// Ignore unparsable response.
|
1177
1215
|
gpr_log(GPR_ERROR,
|
1178
1216
|
"[xds_client %p] Error parsing ADS response (%s) -- ignoring",
|
1179
|
-
xds_client(),
|
1217
|
+
xds_client(), grpc_error_std_string(result.parse_error).c_str());
|
1180
1218
|
GRPC_ERROR_UNREF(result.parse_error);
|
1181
1219
|
} else {
|
1220
|
+
grpc_millis update_time = grpc_core::ExecCtx::Get()->Now();
|
1182
1221
|
// Update nonce.
|
1183
1222
|
auto& state = state_map_[result.type_url];
|
1184
1223
|
state.nonce = std::move(result.nonce);
|
1185
1224
|
// NACK or ACK the response.
|
1186
1225
|
if (result.parse_error != GRPC_ERROR_NONE) {
|
1226
|
+
xds_client()->UpdateResourceMetadataWithFailedParseResultLocked(
|
1227
|
+
update_time, result);
|
1187
1228
|
GRPC_ERROR_UNREF(state.error);
|
1188
1229
|
state.error = result.parse_error;
|
1189
1230
|
// NACK unacceptable update.
|
@@ -1191,19 +1232,24 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1191
1232
|
"[xds_client %p] ADS response invalid for resource type %s "
|
1192
1233
|
"version %s, will NACK: nonce=%s error=%s",
|
1193
1234
|
xds_client(), result.type_url.c_str(), result.version.c_str(),
|
1194
|
-
state.nonce.c_str(),
|
1235
|
+
state.nonce.c_str(),
|
1236
|
+
grpc_error_std_string(result.parse_error).c_str());
|
1195
1237
|
SendMessageLocked(result.type_url);
|
1196
1238
|
} else {
|
1197
1239
|
seen_response_ = true;
|
1198
1240
|
// Accept the ADS response according to the type_url.
|
1199
1241
|
if (result.type_url == XdsApi::kLdsTypeUrl) {
|
1200
|
-
|
1242
|
+
AcceptLdsUpdateLocked(result.version, update_time,
|
1243
|
+
std::move(result.lds_update_map));
|
1201
1244
|
} else if (result.type_url == XdsApi::kRdsTypeUrl) {
|
1202
|
-
|
1245
|
+
AcceptRdsUpdateLocked(result.version, update_time,
|
1246
|
+
std::move(result.rds_update_map));
|
1203
1247
|
} else if (result.type_url == XdsApi::kCdsTypeUrl) {
|
1204
|
-
|
1248
|
+
AcceptCdsUpdateLocked(result.version, update_time,
|
1249
|
+
std::move(result.cds_update_map));
|
1205
1250
|
} else if (result.type_url == XdsApi::kEdsTypeUrl) {
|
1206
|
-
|
1251
|
+
AcceptEdsUpdateLocked(result.version, update_time,
|
1252
|
+
std::move(result.eds_update_map));
|
1207
1253
|
}
|
1208
1254
|
xds_client()->resource_version_map_[result.type_url] =
|
1209
1255
|
std::move(result.version);
|
@@ -1234,7 +1280,7 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1234
1280
|
}
|
1235
1281
|
|
1236
1282
|
void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
|
1237
|
-
void* arg,
|
1283
|
+
void* arg, grpc_error_handle error) {
|
1238
1284
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1239
1285
|
{
|
1240
1286
|
MutexLock lock(&ads_calld->xds_client()->mu_);
|
@@ -1244,14 +1290,14 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
|
|
1244
1290
|
}
|
1245
1291
|
|
1246
1292
|
void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
1247
|
-
|
1293
|
+
grpc_error_handle error) {
|
1248
1294
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1249
1295
|
char* status_details = grpc_slice_to_c_string(status_details_);
|
1250
1296
|
gpr_log(GPR_INFO,
|
1251
1297
|
"[xds_client %p] ADS call status received. Status = %d, details "
|
1252
1298
|
"= '%s', (chand: %p, ads_calld: %p, call: %p), error '%s'",
|
1253
1299
|
xds_client(), status_code_, status_details, chand(), this, call_,
|
1254
|
-
|
1300
|
+
grpc_error_std_string(error).c_str());
|
1255
1301
|
gpr_free(status_details);
|
1256
1302
|
}
|
1257
1303
|
// Ignore status from a stale call.
|
@@ -1306,7 +1352,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::
|
|
1306
1352
|
}
|
1307
1353
|
|
1308
1354
|
void XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimer(
|
1309
|
-
void* arg,
|
1355
|
+
void* arg, grpc_error_handle error) {
|
1310
1356
|
Reporter* self = static_cast<Reporter*>(arg);
|
1311
1357
|
bool done;
|
1312
1358
|
{
|
@@ -1317,7 +1363,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimer(
|
|
1317
1363
|
}
|
1318
1364
|
|
1319
1365
|
bool XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimerLocked(
|
1320
|
-
|
1366
|
+
grpc_error_handle error) {
|
1321
1367
|
next_report_timer_callback_pending_ = false;
|
1322
1368
|
if (error != GRPC_ERROR_NONE || !IsCurrentReporterOnCall()) {
|
1323
1369
|
GRPC_ERROR_UNREF(error);
|
@@ -1382,7 +1428,7 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
|
1382
1428
|
}
|
1383
1429
|
|
1384
1430
|
void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDone(
|
1385
|
-
void* arg,
|
1431
|
+
void* arg, grpc_error_handle error) {
|
1386
1432
|
Reporter* self = static_cast<Reporter*>(arg);
|
1387
1433
|
bool done;
|
1388
1434
|
{
|
@@ -1393,7 +1439,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDone(
|
|
1393
1439
|
}
|
1394
1440
|
|
1395
1441
|
bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
|
1396
|
-
|
1442
|
+
grpc_error_handle error) {
|
1397
1443
|
grpc_byte_buffer_destroy(parent_->send_message_payload_);
|
1398
1444
|
parent_->send_message_payload_ = nullptr;
|
1399
1445
|
// If there are no more registered stats to report, cancel the call.
|
@@ -1563,7 +1609,7 @@ void XdsClient::ChannelState::LrsCallState::MaybeStartReportingLocked() {
|
|
1563
1609
|
}
|
1564
1610
|
|
1565
1611
|
void XdsClient::ChannelState::LrsCallState::OnInitialRequestSent(
|
1566
|
-
void* arg,
|
1612
|
+
void* arg, grpc_error_handle /*error*/) {
|
1567
1613
|
LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
|
1568
1614
|
{
|
1569
1615
|
MutexLock lock(&lrs_calld->xds_client()->mu_);
|
@@ -1580,7 +1626,7 @@ void XdsClient::ChannelState::LrsCallState::OnInitialRequestSentLocked() {
|
|
1580
1626
|
}
|
1581
1627
|
|
1582
1628
|
void XdsClient::ChannelState::LrsCallState::OnResponseReceived(
|
1583
|
-
void* arg,
|
1629
|
+
void* arg, grpc_error_handle /*error*/) {
|
1584
1630
|
LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
|
1585
1631
|
bool done;
|
1586
1632
|
{
|
@@ -1608,13 +1654,13 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1608
1654
|
bool send_all_clusters = false;
|
1609
1655
|
std::set<std::string> new_cluster_names;
|
1610
1656
|
grpc_millis new_load_reporting_interval;
|
1611
|
-
|
1657
|
+
grpc_error_handle parse_error = xds_client()->api_.ParseLrsResponse(
|
1612
1658
|
response_slice, &send_all_clusters, &new_cluster_names,
|
1613
1659
|
&new_load_reporting_interval);
|
1614
1660
|
if (parse_error != GRPC_ERROR_NONE) {
|
1615
1661
|
gpr_log(GPR_ERROR,
|
1616
1662
|
"[xds_client %p] LRS response parsing failed. error=%s",
|
1617
|
-
xds_client(),
|
1663
|
+
xds_client(), grpc_error_std_string(parse_error).c_str());
|
1618
1664
|
GRPC_ERROR_UNREF(parse_error);
|
1619
1665
|
return;
|
1620
1666
|
}
|
@@ -1683,7 +1729,7 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1683
1729
|
}
|
1684
1730
|
|
1685
1731
|
void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
|
1686
|
-
void* arg,
|
1732
|
+
void* arg, grpc_error_handle error) {
|
1687
1733
|
LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
|
1688
1734
|
{
|
1689
1735
|
MutexLock lock(&lrs_calld->xds_client()->mu_);
|
@@ -1693,7 +1739,7 @@ void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
|
|
1693
1739
|
}
|
1694
1740
|
|
1695
1741
|
void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
|
1696
|
-
|
1742
|
+
grpc_error_handle error) {
|
1697
1743
|
GPR_ASSERT(call_ != nullptr);
|
1698
1744
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1699
1745
|
char* status_details = grpc_slice_to_c_string(status_details_);
|
@@ -1701,7 +1747,7 @@ void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
|
|
1701
1747
|
"[xds_client %p] LRS call status received. Status = %d, details "
|
1702
1748
|
"= '%s', (chand: %p, calld: %p, call: %p), error '%s'",
|
1703
1749
|
xds_client(), status_code_, status_details, chand(), this, call_,
|
1704
|
-
|
1750
|
+
grpc_error_std_string(error).c_str());
|
1705
1751
|
gpr_free(status_details);
|
1706
1752
|
}
|
1707
1753
|
// Ignore status from a stale call.
|
@@ -1726,36 +1772,41 @@ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
|
|
1726
1772
|
|
1727
1773
|
namespace {
|
1728
1774
|
|
1729
|
-
grpc_millis GetRequestTimeout() {
|
1775
|
+
grpc_millis GetRequestTimeout(const grpc_channel_args* args) {
|
1730
1776
|
return grpc_channel_args_find_integer(
|
1731
|
-
|
1777
|
+
args, GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
|
1732
1778
|
{15000, 0, INT_MAX});
|
1733
1779
|
}
|
1734
1780
|
|
1781
|
+
grpc_channel_args* ModifyChannelArgs(const grpc_channel_args* args) {
|
1782
|
+
absl::InlinedVector<grpc_arg, 2> args_to_add = {
|
1783
|
+
grpc_channel_arg_integer_create(
|
1784
|
+
const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
|
1785
|
+
5 * 60 * GPR_MS_PER_SEC),
|
1786
|
+
grpc_channel_arg_integer_create(
|
1787
|
+
const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
|
1788
|
+
};
|
1789
|
+
return grpc_channel_args_copy_and_add(args, args_to_add.data(),
|
1790
|
+
args_to_add.size());
|
1791
|
+
}
|
1792
|
+
|
1735
1793
|
} // namespace
|
1736
1794
|
|
1737
|
-
XdsClient::XdsClient(
|
1795
|
+
XdsClient::XdsClient(std::unique_ptr<XdsBootstrap> bootstrap,
|
1796
|
+
const grpc_channel_args* args)
|
1738
1797
|
: DualRefCounted<XdsClient>(
|
1739
1798
|
GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace) ? "XdsClient"
|
1740
1799
|
: nullptr),
|
1741
|
-
|
1800
|
+
bootstrap_(std::move(bootstrap)),
|
1801
|
+
args_(ModifyChannelArgs(args)),
|
1802
|
+
request_timeout_(GetRequestTimeout(args)),
|
1742
1803
|
interested_parties_(grpc_pollset_set_create()),
|
1743
|
-
bootstrap_(
|
1744
|
-
XdsBootstrap::ReadFromFile(this, &grpc_xds_client_trace, error)),
|
1745
1804
|
certificate_provider_store_(MakeOrphanable<CertificateProviderStore>(
|
1746
|
-
bootstrap_
|
1747
|
-
|
1748
|
-
: bootstrap_->certificate_providers())),
|
1749
|
-
api_(this, &grpc_xds_client_trace,
|
1750
|
-
bootstrap_ == nullptr ? nullptr : bootstrap_->node()) {
|
1805
|
+
bootstrap_->certificate_providers())),
|
1806
|
+
api_(this, &grpc_xds_client_trace, bootstrap_->node()) {
|
1751
1807
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1752
1808
|
gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
|
1753
1809
|
}
|
1754
|
-
if (*error != GRPC_ERROR_NONE) {
|
1755
|
-
gpr_log(GPR_ERROR, "[xds_client %p] failed to read bootstrap file: %s",
|
1756
|
-
this, grpc_error_string(*error));
|
1757
|
-
return;
|
1758
|
-
}
|
1759
1810
|
// Create ChannelState object.
|
1760
1811
|
chand_ = MakeOrphanable<ChannelState>(
|
1761
1812
|
WeakRef(DEBUG_LOCATION, "XdsClient+ChannelState"), bootstrap_->server());
|
@@ -1765,11 +1816,13 @@ XdsClient::~XdsClient() {
|
|
1765
1816
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1766
1817
|
gpr_log(GPR_INFO, "[xds_client %p] destroying xds client", this);
|
1767
1818
|
}
|
1819
|
+
grpc_channel_args_destroy(args_);
|
1768
1820
|
grpc_pollset_set_destroy(interested_parties_);
|
1769
1821
|
}
|
1770
1822
|
|
1771
1823
|
void XdsClient::AddChannelzLinkage(
|
1772
1824
|
channelz::ChannelNode* parent_channelz_node) {
|
1825
|
+
MutexLock lock(&mu_);
|
1773
1826
|
channelz::ChannelNode* xds_channelz_node =
|
1774
1827
|
grpc_channel_get_channelz_node(chand_->channel());
|
1775
1828
|
if (xds_channelz_node != nullptr) {
|
@@ -1779,6 +1832,7 @@ void XdsClient::AddChannelzLinkage(
|
|
1779
1832
|
|
1780
1833
|
void XdsClient::RemoveChannelzLinkage(
|
1781
1834
|
channelz::ChannelNode* parent_channelz_node) {
|
1835
|
+
MutexLock lock(&mu_);
|
1782
1836
|
channelz::ChannelNode* xds_channelz_node =
|
1783
1837
|
grpc_channel_get_channelz_node(chand_->channel());
|
1784
1838
|
if (xds_channelz_node != nullptr) {
|
@@ -1829,7 +1883,7 @@ void XdsClient::WatchListenerData(
|
|
1829
1883
|
}
|
1830
1884
|
w->OnListenerChanged(*listener_state.update);
|
1831
1885
|
}
|
1832
|
-
chand_->
|
1886
|
+
chand_->SubscribeLocked(XdsApi::kLdsTypeUrl, listener_name_str);
|
1833
1887
|
}
|
1834
1888
|
|
1835
1889
|
void XdsClient::CancelListenerDataWatch(absl::string_view listener_name,
|
@@ -1844,8 +1898,8 @@ void XdsClient::CancelListenerDataWatch(absl::string_view listener_name,
|
|
1844
1898
|
listener_state.watchers.erase(it);
|
1845
1899
|
if (listener_state.watchers.empty()) {
|
1846
1900
|
listener_map_.erase(listener_name_str);
|
1847
|
-
chand_->
|
1848
|
-
|
1901
|
+
chand_->UnsubscribeLocked(XdsApi::kLdsTypeUrl, listener_name_str,
|
1902
|
+
delay_unsubscription);
|
1849
1903
|
}
|
1850
1904
|
}
|
1851
1905
|
}
|
@@ -1869,7 +1923,7 @@ void XdsClient::WatchRouteConfigData(
|
|
1869
1923
|
}
|
1870
1924
|
w->OnRouteConfigChanged(*route_config_state.update);
|
1871
1925
|
}
|
1872
|
-
chand_->
|
1926
|
+
chand_->SubscribeLocked(XdsApi::kRdsTypeUrl, route_config_name_str);
|
1873
1927
|
}
|
1874
1928
|
|
1875
1929
|
void XdsClient::CancelRouteConfigDataWatch(absl::string_view route_config_name,
|
@@ -1885,8 +1939,8 @@ void XdsClient::CancelRouteConfigDataWatch(absl::string_view route_config_name,
|
|
1885
1939
|
route_config_state.watchers.erase(it);
|
1886
1940
|
if (route_config_state.watchers.empty()) {
|
1887
1941
|
route_config_map_.erase(route_config_name_str);
|
1888
|
-
chand_->
|
1889
|
-
|
1942
|
+
chand_->UnsubscribeLocked(XdsApi::kRdsTypeUrl, route_config_name_str,
|
1943
|
+
delay_unsubscription);
|
1890
1944
|
}
|
1891
1945
|
}
|
1892
1946
|
}
|
@@ -1908,7 +1962,7 @@ void XdsClient::WatchClusterData(
|
|
1908
1962
|
}
|
1909
1963
|
w->OnClusterChanged(cluster_state.update.value());
|
1910
1964
|
}
|
1911
|
-
chand_->
|
1965
|
+
chand_->SubscribeLocked(XdsApi::kCdsTypeUrl, cluster_name_str);
|
1912
1966
|
}
|
1913
1967
|
|
1914
1968
|
void XdsClient::CancelClusterDataWatch(absl::string_view cluster_name,
|
@@ -1923,8 +1977,8 @@ void XdsClient::CancelClusterDataWatch(absl::string_view cluster_name,
|
|
1923
1977
|
cluster_state.watchers.erase(it);
|
1924
1978
|
if (cluster_state.watchers.empty()) {
|
1925
1979
|
cluster_map_.erase(cluster_name_str);
|
1926
|
-
chand_->
|
1927
|
-
|
1980
|
+
chand_->UnsubscribeLocked(XdsApi::kCdsTypeUrl, cluster_name_str,
|
1981
|
+
delay_unsubscription);
|
1928
1982
|
}
|
1929
1983
|
}
|
1930
1984
|
}
|
@@ -1946,7 +2000,7 @@ void XdsClient::WatchEndpointData(
|
|
1946
2000
|
}
|
1947
2001
|
w->OnEndpointChanged(endpoint_state.update.value());
|
1948
2002
|
}
|
1949
|
-
chand_->
|
2003
|
+
chand_->SubscribeLocked(XdsApi::kEdsTypeUrl, eds_service_name_str);
|
1950
2004
|
}
|
1951
2005
|
|
1952
2006
|
void XdsClient::CancelEndpointDataWatch(absl::string_view eds_service_name,
|
@@ -1961,8 +2015,8 @@ void XdsClient::CancelEndpointDataWatch(absl::string_view eds_service_name,
|
|
1961
2015
|
endpoint_state.watchers.erase(it);
|
1962
2016
|
if (endpoint_state.watchers.empty()) {
|
1963
2017
|
endpoint_map_.erase(eds_service_name_str);
|
1964
|
-
chand_->
|
1965
|
-
|
2018
|
+
chand_->UnsubscribeLocked(XdsApi::kEdsTypeUrl, eds_service_name_str,
|
2019
|
+
delay_unsubscription);
|
1966
2020
|
}
|
1967
2021
|
}
|
1968
2022
|
}
|
@@ -2089,7 +2143,7 @@ void XdsClient::ResetBackoff() {
|
|
2089
2143
|
}
|
2090
2144
|
}
|
2091
2145
|
|
2092
|
-
void XdsClient::NotifyOnErrorLocked(
|
2146
|
+
void XdsClient::NotifyOnErrorLocked(grpc_error_handle error) {
|
2093
2147
|
for (const auto& p : listener_map_) {
|
2094
2148
|
const ListenerState& listener_state = p.second;
|
2095
2149
|
for (const auto& p : listener_state.watchers) {
|
@@ -2198,25 +2252,190 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2198
2252
|
return snapshot_map;
|
2199
2253
|
}
|
2200
2254
|
|
2255
|
+
void XdsClient::UpdateResourceMetadataWithFailedParseResultLocked(
|
2256
|
+
grpc_millis update_time, const XdsApi::AdsParseResult& result) {
|
2257
|
+
// ADS update is rejected and the resource names in the failed update is
|
2258
|
+
// available.
|
2259
|
+
std::string details = grpc_error_std_string(result.parse_error);
|
2260
|
+
for (auto& name : result.resource_names_failed) {
|
2261
|
+
XdsApi::ResourceMetadata* resource_metadata = nullptr;
|
2262
|
+
if (result.type_url == XdsApi::kLdsTypeUrl) {
|
2263
|
+
auto it = listener_map_.find(name);
|
2264
|
+
if (it != listener_map_.end()) {
|
2265
|
+
resource_metadata = &it->second.meta;
|
2266
|
+
}
|
2267
|
+
} else if (result.type_url == XdsApi::kRdsTypeUrl) {
|
2268
|
+
auto it = route_config_map_.find(name);
|
2269
|
+
if (route_config_map_.find(name) != route_config_map_.end()) {
|
2270
|
+
resource_metadata = &it->second.meta;
|
2271
|
+
}
|
2272
|
+
} else if (result.type_url == XdsApi::kCdsTypeUrl) {
|
2273
|
+
auto it = cluster_map_.find(name);
|
2274
|
+
if (cluster_map_.find(name) != cluster_map_.end()) {
|
2275
|
+
resource_metadata = &it->second.meta;
|
2276
|
+
}
|
2277
|
+
} else if (result.type_url == XdsApi::kEdsTypeUrl) {
|
2278
|
+
auto it = endpoint_map_.find(name);
|
2279
|
+
if (endpoint_map_.find(name) != endpoint_map_.end()) {
|
2280
|
+
resource_metadata = &it->second.meta;
|
2281
|
+
}
|
2282
|
+
}
|
2283
|
+
if (resource_metadata == nullptr) {
|
2284
|
+
return;
|
2285
|
+
}
|
2286
|
+
resource_metadata->client_status = XdsApi::ResourceMetadata::NACKED;
|
2287
|
+
resource_metadata->failed_version = result.version;
|
2288
|
+
resource_metadata->failed_details = details;
|
2289
|
+
resource_metadata->failed_update_time = update_time;
|
2290
|
+
}
|
2291
|
+
}
|
2292
|
+
|
2293
|
+
std::string XdsClient::DumpClientConfigBinary() {
|
2294
|
+
MutexLock lock(&mu_);
|
2295
|
+
XdsApi::ResourceTypeMetadataMap resource_type_metadata_map;
|
2296
|
+
// Update per-xds-type version if available, this version corresponding to the
|
2297
|
+
// last successful ADS update version.
|
2298
|
+
for (auto& p : resource_version_map_) {
|
2299
|
+
resource_type_metadata_map[p.first].version = p.second;
|
2300
|
+
}
|
2301
|
+
// Collect resource metadata from listeners
|
2302
|
+
auto& lds_map =
|
2303
|
+
resource_type_metadata_map[XdsApi::kLdsTypeUrl].resource_metadata_map;
|
2304
|
+
for (auto& p : listener_map_) {
|
2305
|
+
lds_map[p.first] = &p.second.meta;
|
2306
|
+
}
|
2307
|
+
// Collect resource metadata from route configs
|
2308
|
+
auto& rds_map =
|
2309
|
+
resource_type_metadata_map[XdsApi::kRdsTypeUrl].resource_metadata_map;
|
2310
|
+
for (auto& p : route_config_map_) {
|
2311
|
+
rds_map[p.first] = &p.second.meta;
|
2312
|
+
}
|
2313
|
+
// Collect resource metadata from clusters
|
2314
|
+
auto& cds_map =
|
2315
|
+
resource_type_metadata_map[XdsApi::kCdsTypeUrl].resource_metadata_map;
|
2316
|
+
for (auto& p : cluster_map_) {
|
2317
|
+
cds_map[p.first] = &p.second.meta;
|
2318
|
+
}
|
2319
|
+
// Collect resource metadata from endpoints
|
2320
|
+
auto& eds_map =
|
2321
|
+
resource_type_metadata_map[XdsApi::kEdsTypeUrl].resource_metadata_map;
|
2322
|
+
for (auto& p : endpoint_map_) {
|
2323
|
+
eds_map[p.first] = &p.second.meta;
|
2324
|
+
}
|
2325
|
+
// Assemble config dump messages
|
2326
|
+
return api_.AssembleClientConfig(resource_type_metadata_map);
|
2327
|
+
}
|
2328
|
+
|
2201
2329
|
//
|
2202
2330
|
// accessors for global state
|
2203
2331
|
//
|
2204
2332
|
|
2205
|
-
void XdsClientGlobalInit() {
|
2333
|
+
void XdsClientGlobalInit() {
|
2334
|
+
g_mu = new Mutex;
|
2335
|
+
XdsHttpFilterRegistry::Init();
|
2336
|
+
}
|
2206
2337
|
|
2207
|
-
|
2338
|
+
// TODO(roth): Find a better way to clear the fallback config that does
|
2339
|
+
// not require using ABSL_NO_THREAD_SAFETY_ANALYSIS.
|
2340
|
+
void XdsClientGlobalShutdown() ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
2341
|
+
gpr_free(g_fallback_bootstrap_config);
|
2342
|
+
g_fallback_bootstrap_config = nullptr;
|
2208
2343
|
delete g_mu;
|
2209
2344
|
g_mu = nullptr;
|
2345
|
+
XdsHttpFilterRegistry::Shutdown();
|
2210
2346
|
}
|
2211
2347
|
|
2212
|
-
|
2213
|
-
|
2214
|
-
|
2215
|
-
|
2216
|
-
|
2348
|
+
namespace {
|
2349
|
+
|
2350
|
+
std::string GetBootstrapContents(const char* fallback_config,
|
2351
|
+
grpc_error_handle* error) {
|
2352
|
+
// First, try GRPC_XDS_BOOTSTRAP env var.
|
2353
|
+
grpc_core::UniquePtr<char> path(gpr_getenv("GRPC_XDS_BOOTSTRAP"));
|
2354
|
+
if (path != nullptr) {
|
2355
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2356
|
+
gpr_log(GPR_INFO,
|
2357
|
+
"Got bootstrap file location from GRPC_XDS_BOOTSTRAP "
|
2358
|
+
"environment variable: %s",
|
2359
|
+
path.get());
|
2360
|
+
}
|
2361
|
+
grpc_slice contents;
|
2362
|
+
*error =
|
2363
|
+
grpc_load_file(path.get(), /*add_null_terminator=*/true, &contents);
|
2364
|
+
if (*error != GRPC_ERROR_NONE) return "";
|
2365
|
+
std::string contents_str(StringViewFromSlice(contents));
|
2366
|
+
grpc_slice_unref_internal(contents);
|
2367
|
+
return contents_str;
|
2368
|
+
}
|
2369
|
+
// Next, try GRPC_XDS_BOOTSTRAP_CONFIG env var.
|
2370
|
+
grpc_core::UniquePtr<char> env_config(
|
2371
|
+
gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
|
2372
|
+
if (env_config != nullptr) {
|
2373
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2374
|
+
gpr_log(GPR_INFO,
|
2375
|
+
"Got bootstrap contents from GRPC_XDS_BOOTSTRAP_CONFIG "
|
2376
|
+
"environment variable");
|
2377
|
+
}
|
2378
|
+
return env_config.get();
|
2379
|
+
}
|
2380
|
+
// Finally, try fallback config.
|
2381
|
+
if (fallback_config != nullptr) {
|
2382
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2383
|
+
gpr_log(GPR_INFO, "Got bootstrap contents from fallback config");
|
2384
|
+
}
|
2385
|
+
return fallback_config;
|
2386
|
+
}
|
2387
|
+
// No bootstrap config found.
|
2388
|
+
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2389
|
+
"Environment variables GRPC_XDS_BOOTSTRAP or GRPC_XDS_BOOTSTRAP_CONFIG "
|
2390
|
+
"not defined");
|
2391
|
+
return "";
|
2392
|
+
}
|
2393
|
+
|
2394
|
+
} // namespace
|
2395
|
+
|
2396
|
+
RefCountedPtr<XdsClient> XdsClient::GetOrCreate(const grpc_channel_args* args,
|
2397
|
+
grpc_error_handle* error) {
|
2398
|
+
RefCountedPtr<XdsClient> xds_client;
|
2399
|
+
// If getting bootstrap from channel args, create a local XdsClient
|
2400
|
+
// instance for the channel or server instead of using the global instance.
|
2401
|
+
const char* bootstrap_config = grpc_channel_args_find_string(
|
2402
|
+
args, GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_BOOTSTRAP_CONFIG);
|
2403
|
+
if (bootstrap_config != nullptr) {
|
2404
|
+
std::unique_ptr<XdsBootstrap> bootstrap =
|
2405
|
+
XdsBootstrap::Create(bootstrap_config, error);
|
2406
|
+
if (*error == GRPC_ERROR_NONE) {
|
2407
|
+
grpc_channel_args* xds_channel_args =
|
2408
|
+
grpc_channel_args_find_pointer<grpc_channel_args>(
|
2409
|
+
args,
|
2410
|
+
GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_CLIENT_CHANNEL_ARGS);
|
2411
|
+
return MakeRefCounted<XdsClient>(std::move(bootstrap), xds_channel_args);
|
2412
|
+
}
|
2413
|
+
return nullptr;
|
2414
|
+
}
|
2415
|
+
// Otherwise, use the global instance.
|
2416
|
+
{
|
2417
|
+
MutexLock lock(g_mu);
|
2418
|
+
if (g_xds_client != nullptr) {
|
2419
|
+
auto xds_client = g_xds_client->RefIfNonZero();
|
2420
|
+
if (xds_client != nullptr) return xds_client;
|
2421
|
+
}
|
2422
|
+
// Find bootstrap contents.
|
2423
|
+
std::string bootstrap_contents =
|
2424
|
+
GetBootstrapContents(g_fallback_bootstrap_config, error);
|
2425
|
+
if (*error != GRPC_ERROR_NONE) return nullptr;
|
2426
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2427
|
+
gpr_log(GPR_INFO, "xDS bootstrap contents: %s",
|
2428
|
+
bootstrap_contents.c_str());
|
2429
|
+
}
|
2430
|
+
// Parse bootstrap.
|
2431
|
+
std::unique_ptr<XdsBootstrap> bootstrap =
|
2432
|
+
XdsBootstrap::Create(bootstrap_contents, error);
|
2433
|
+
if (*error != GRPC_ERROR_NONE) return nullptr;
|
2434
|
+
// Instantiate XdsClient.
|
2435
|
+
xds_client =
|
2436
|
+
MakeRefCounted<XdsClient>(std::move(bootstrap), g_channel_args);
|
2437
|
+
g_xds_client = xds_client.get();
|
2217
2438
|
}
|
2218
|
-
auto xds_client = MakeRefCounted<XdsClient>(error);
|
2219
|
-
g_xds_client = xds_client.get();
|
2220
2439
|
return xds_client;
|
2221
2440
|
}
|
2222
2441
|
|
@@ -2232,6 +2451,66 @@ void UnsetGlobalXdsClientForTest() {
|
|
2232
2451
|
g_xds_client = nullptr;
|
2233
2452
|
}
|
2234
2453
|
|
2454
|
+
void SetXdsFallbackBootstrapConfig(const char* config) {
|
2455
|
+
MutexLock lock(g_mu);
|
2456
|
+
gpr_free(g_fallback_bootstrap_config);
|
2457
|
+
g_fallback_bootstrap_config = gpr_strdup(config);
|
2458
|
+
}
|
2459
|
+
|
2235
2460
|
} // namespace internal
|
2236
2461
|
|
2462
|
+
//
|
2463
|
+
// embedding XdsClient in channel args
|
2464
|
+
//
|
2465
|
+
|
2466
|
+
#define GRPC_ARG_XDS_CLIENT "grpc.internal.xds_client"
|
2467
|
+
|
2468
|
+
namespace {
|
2469
|
+
|
2470
|
+
void* XdsClientArgCopy(void* p) {
|
2471
|
+
XdsClient* xds_client = static_cast<XdsClient*>(p);
|
2472
|
+
xds_client->Ref(DEBUG_LOCATION, "channel arg").release();
|
2473
|
+
return p;
|
2474
|
+
}
|
2475
|
+
|
2476
|
+
void XdsClientArgDestroy(void* p) {
|
2477
|
+
XdsClient* xds_client = static_cast<XdsClient*>(p);
|
2478
|
+
xds_client->Unref(DEBUG_LOCATION, "channel arg");
|
2479
|
+
}
|
2480
|
+
|
2481
|
+
int XdsClientArgCmp(void* p, void* q) { return GPR_ICMP(p, q); }
|
2482
|
+
|
2483
|
+
const grpc_arg_pointer_vtable kXdsClientArgVtable = {
|
2484
|
+
XdsClientArgCopy, XdsClientArgDestroy, XdsClientArgCmp};
|
2485
|
+
|
2486
|
+
} // namespace
|
2487
|
+
|
2488
|
+
grpc_arg XdsClient::MakeChannelArg() const {
|
2489
|
+
return grpc_channel_arg_pointer_create(const_cast<char*>(GRPC_ARG_XDS_CLIENT),
|
2490
|
+
const_cast<XdsClient*>(this),
|
2491
|
+
&kXdsClientArgVtable);
|
2492
|
+
}
|
2493
|
+
|
2494
|
+
RefCountedPtr<XdsClient> XdsClient::GetFromChannelArgs(
|
2495
|
+
const grpc_channel_args& args) {
|
2496
|
+
XdsClient* xds_client =
|
2497
|
+
grpc_channel_args_find_pointer<XdsClient>(&args, GRPC_ARG_XDS_CLIENT);
|
2498
|
+
if (xds_client == nullptr) return nullptr;
|
2499
|
+
return xds_client->Ref(DEBUG_LOCATION, "GetFromChannelArgs");
|
2500
|
+
}
|
2501
|
+
|
2237
2502
|
} // namespace grpc_core
|
2503
|
+
|
2504
|
+
// The returned bytes may contain NULL(0), so we can't use c-string.
|
2505
|
+
grpc_slice grpc_dump_xds_configs() {
|
2506
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2507
|
+
grpc_core::ExecCtx exec_ctx;
|
2508
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
2509
|
+
auto xds_client = grpc_core::XdsClient::GetOrCreate(nullptr, &error);
|
2510
|
+
if (error != GRPC_ERROR_NONE) {
|
2511
|
+
// If we isn't using xDS, just return an empty string.
|
2512
|
+
GRPC_ERROR_UNREF(error);
|
2513
|
+
return grpc_empty_slice();
|
2514
|
+
}
|
2515
|
+
return grpc_slice_from_cpp_string(xds_client->DumpClientConfigBinary());
|
2516
|
+
}
|