grpc 1.37.1 → 1.38.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +64 -58
- 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 +2 -2
- 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 +5 -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 +628 -3101
- data/src/core/ext/filters/client_channel/client_channel.h +489 -55
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +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 +24 -21
- data/src/core/ext/filters/client_channel/lb_policy.cc +1 -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 +46 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
- 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 +36 -30
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
- 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 +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_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 +17 -9
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
- 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 +1 -1
- data/src/core/ext/filters/client_channel/service_config.cc +15 -14
- data/src/core/ext/filters/client_channel/service_config.h +7 -6
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
- data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
- data/src/core/ext/filters/client_channel/subchannel.h +7 -6
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
- data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +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 +12 -10
- data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
- 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 +8 -8
- 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_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 +31 -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/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 +101 -93
- data/src/core/ext/xds/xds_api.h +6 -6
- data/src/core/ext/xds/xds_bootstrap.cc +97 -159
- data/src/core/ext/xds/xds_bootstrap.h +19 -24
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
- data/src/core/ext/xds/xds_certificate_provider.h +4 -4
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_client.cc +310 -178
- data/src/core/ext/xds/xds_client.h +41 -27
- data/src/core/ext/xds/xds_client_stats.h +3 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
- data/src/core/lib/channel/channel_stack.cc +10 -9
- data/src/core/lib/channel/channel_stack.h +10 -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 +21 -13
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/handshaker.cc +7 -6
- data/src/core/lib/channel/handshaker.h +5 -5
- 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/gprpp/ref_counted.h +28 -14
- data/src/core/lib/gprpp/status_helper.cc +407 -0
- data/src/core/lib/gprpp/status_helper.h +180 -0
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli_security_connector.cc +11 -7
- data/src/core/lib/http/parser.cc +16 -16
- data/src/core/lib/http/parser.h +4 -4
- data/src/core/lib/iomgr/buffer_list.cc +7 -9
- data/src/core/lib/iomgr/buffer_list.h +4 -5
- data/src/core/lib/iomgr/call_combiner.cc +15 -12
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
- data/src/core/lib/iomgr/cfstream_handle.h +1 -1
- data/src/core/lib/iomgr/closure.h +7 -6
- data/src/core/lib/iomgr/combiner.cc +14 -12
- data/src/core/lib/iomgr/combiner.h +2 -2
- data/src/core/lib/iomgr/endpoint.cc +1 -1
- data/src/core/lib/iomgr/endpoint.h +2 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +167 -61
- data/src/core/lib/iomgr/error.h +217 -106
- data/src/core/lib/iomgr/error_cfstream.cc +3 -2
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +5 -1
- data/src/core/lib/iomgr/ev_apple.cc +5 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
- data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
- data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
- data/src/core/lib/iomgr/ev_posix.cc +9 -8
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/exec_ctx.cc +4 -4
- 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 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- 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 +11 -10
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -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 +15 -17
- 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 +36 -34
- 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 +25 -23
- data/src/core/lib/iomgr/tcp_windows.cc +13 -13
- data/src/core/lib/iomgr/tcp_windows.h +2 -2
- data/src/core/lib/iomgr/timer_custom.cc +2 -1
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +6 -6
- data/src/core/lib/iomgr/udp_server.cc +21 -20
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
- data/src/core/lib/iomgr/work_serializer.h +17 -1
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_reader.cc +4 -4
- data/src/core/lib/matchers/matchers.cc +39 -39
- data/src/core/lib/matchers/matchers.h +28 -28
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.h +2 -2
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +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 +22 -4
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
- 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 +33 -32
- data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
- 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/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 +3 -2
- 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/lame_client.cc +11 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +28 -22
- data/src/core/lib/surface/server.h +16 -15
- 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_batch.cc +37 -37
- data/src/core/lib/transport/metadata_batch.h +19 -18
- data/src/core/lib/transport/transport.cc +4 -3
- data/src/core/lib/transport/transport.h +4 -4
- data/src/core/lib/transport/transport_op_string.cc +5 -5
- data/src/core/tsi/alts/crypt/gsec.h +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/ssl_transport_security.cc +32 -14
- data/src/core/tsi/ssl_transport_security.h +3 -4
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
- data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +37 -9
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
- data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
- data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
- data/third_party/abseil-cpp/absl/base/macros.h +11 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/port.h +0 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
- data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
- data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
- data/third_party/abseil-cpp/absl/status/status.cc +29 -22
- data/third_party/abseil-cpp/absl/status/status.h +81 -20
- data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
- data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
- data/third_party/abseil-cpp/absl/strings/match.h +16 -6
- data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
- data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
- data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
- data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
- data/third_party/abseil-cpp/absl/time/clock.h +2 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +26 -24
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- data/third_party/abseil-cpp/absl/types/variant.h +9 -4
- data/third_party/boringssl-with-bazel/err_data.c +477 -461
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/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 +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +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/urandom.c +26 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +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 +103 -42
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
- 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/rand_extra/rand_extra.c +1 -1
- 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/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 +3 -2
- 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 +9 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
- 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 +7 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -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 +1 -38
- 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 +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
- 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 +43 -12
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
- 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 +74 -15
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- metadata +68 -45
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -67,22 +67,16 @@ class XdsBootstrap {
|
|
67
67
|
bool ShouldUseV3() const;
|
68
68
|
};
|
69
69
|
|
70
|
-
// Creates bootstrap object
|
71
|
-
// for the environment:
|
72
|
-
// - If the GRPC_XDS_BOOTSTRAP env var is set, reads the file it specifies
|
73
|
-
// to obtain the bootstrap JSON.
|
74
|
-
// - Otherwise, if the GRPC_XDS_BOOTSTRAP_CONFIG env var is set, reads the
|
75
|
-
// content of that env var to obtain the bootstrap JSON.
|
76
|
-
// - Otherwise, the JSON will be read from fallback_config (if non-null).
|
70
|
+
// Creates bootstrap object from json_string.
|
77
71
|
// If *error is not GRPC_ERROR_NONE after returning, then there was an
|
78
|
-
// error
|
79
|
-
static std::unique_ptr<XdsBootstrap> Create(
|
80
|
-
|
81
|
-
const char* fallback_config,
|
82
|
-
grpc_error** error);
|
72
|
+
// error parsing the contents.
|
73
|
+
static std::unique_ptr<XdsBootstrap> Create(absl::string_view json_string,
|
74
|
+
grpc_error_handle* error);
|
83
75
|
|
84
|
-
// Do not instantiate directly -- use
|
85
|
-
XdsBootstrap(Json json,
|
76
|
+
// Do not instantiate directly -- use Create() above instead.
|
77
|
+
XdsBootstrap(Json json, grpc_error_handle* error);
|
78
|
+
|
79
|
+
std::string ToString() const;
|
86
80
|
|
87
81
|
// TODO(roth): We currently support only one server. Fix this when we
|
88
82
|
// add support for fallback for the xds channel.
|
@@ -98,16 +92,17 @@ class XdsBootstrap {
|
|
98
92
|
}
|
99
93
|
|
100
94
|
private:
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
95
|
+
grpc_error_handle ParseXdsServerList(Json* json);
|
96
|
+
grpc_error_handle ParseXdsServer(Json* json, size_t idx);
|
97
|
+
grpc_error_handle ParseChannelCredsArray(Json* json, XdsServer* server);
|
98
|
+
grpc_error_handle ParseChannelCreds(Json* json, size_t idx,
|
99
|
+
XdsServer* server);
|
100
|
+
grpc_error_handle ParseServerFeaturesArray(Json* json, XdsServer* server);
|
101
|
+
grpc_error_handle ParseNode(Json* json);
|
102
|
+
grpc_error_handle ParseLocality(Json* json);
|
103
|
+
grpc_error_handle ParseCertificateProviders(Json* json);
|
104
|
+
grpc_error_handle ParseCertificateProvider(const std::string& instance_name,
|
105
|
+
Json* certificate_provider_json);
|
111
106
|
|
112
107
|
absl::InlinedVector<XdsServer, 1> servers_;
|
113
108
|
std::unique_ptr<Node> node_;
|
@@ -51,8 +51,8 @@ class RootCertificatesWatcher
|
|
51
51
|
}
|
52
52
|
}
|
53
53
|
|
54
|
-
void OnError(
|
55
|
-
|
54
|
+
void OnError(grpc_error_handle root_cert_error,
|
55
|
+
grpc_error_handle identity_cert_error) override {
|
56
56
|
if (root_cert_error != GRPC_ERROR_NONE) {
|
57
57
|
parent_->SetErrorForCert(cert_name_, root_cert_error /* pass the ref */,
|
58
58
|
absl::nullopt);
|
@@ -86,8 +86,8 @@ class IdentityCertificatesWatcher
|
|
86
86
|
}
|
87
87
|
}
|
88
88
|
|
89
|
-
void OnError(
|
90
|
-
|
89
|
+
void OnError(grpc_error_handle root_cert_error,
|
90
|
+
grpc_error_handle identity_cert_error) override {
|
91
91
|
if (identity_cert_error != GRPC_ERROR_NONE) {
|
92
92
|
parent_->SetErrorForCert(cert_name_, absl::nullopt,
|
93
93
|
identity_cert_error /* pass the ref */);
|
@@ -127,9 +127,11 @@ class XdsCertificateProvider : public grpc_tls_certificate_provider {
|
|
127
127
|
void WatchStatusCallback(std::string cert_name, bool root_being_watched,
|
128
128
|
bool identity_being_watched);
|
129
129
|
|
130
|
+
RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
|
131
|
+
|
130
132
|
Mutex mu_;
|
131
133
|
std::map<std::string /*cert_name*/, std::unique_ptr<ClusterCertificateState>>
|
132
|
-
certificate_state_map_;
|
134
|
+
certificate_state_map_ ABSL_GUARDED_BY(mu_);
|
133
135
|
|
134
136
|
// Use a separate mutex for san_matchers_ to avoid deadlocks since
|
135
137
|
// san_matchers_ needs to be accessed when a handshake is being done and we
|
@@ -141,9 +143,7 @@ class XdsCertificateProvider : public grpc_tls_certificate_provider {
|
|
141
143
|
// subject_alternative_names_matchers()
|
142
144
|
Mutex san_matchers_mu_;
|
143
145
|
std::map<std::string /*cluster_name*/, std::vector<StringMatcher>>
|
144
|
-
san_matcher_map_;
|
145
|
-
|
146
|
-
RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
|
146
|
+
san_matcher_map_ ABSL_GUARDED_BY(san_matchers_mu_);
|
147
147
|
};
|
148
148
|
|
149
149
|
} // namespace grpc_core
|
@@ -17,8 +17,11 @@
|
|
17
17
|
#ifndef GRPC_CORE_EXT_XDS_XDS_CHANNEL_ARGS_H
|
18
18
|
#define GRPC_CORE_EXT_XDS_XDS_CHANNEL_ARGS_H
|
19
19
|
|
20
|
-
//
|
21
|
-
|
20
|
+
// Specifies channel args for the xDS client.
|
21
|
+
// Used only when GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_BOOTSTRAP_CONFIG
|
22
|
+
// is set.
|
23
|
+
#define GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_CLIENT_CHANNEL_ARGS \
|
24
|
+
"grpc.xds_client_channel_args"
|
22
25
|
|
23
26
|
// Timeout in milliseconds to wait for a resource to be returned from
|
24
27
|
// the xds server before assuming that it does not exist.
|
@@ -1,20 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
*
|
17
|
-
*/
|
1
|
+
//
|
2
|
+
// Copyright 2018 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
18
16
|
|
19
17
|
#include <grpc/support/port_platform.h>
|
20
18
|
|
@@ -40,16 +38,17 @@
|
|
40
38
|
#include "src/core/ext/xds/xds_client.h"
|
41
39
|
#include "src/core/ext/xds/xds_client_stats.h"
|
42
40
|
#include "src/core/ext/xds/xds_http_filters.h"
|
41
|
+
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
43
42
|
#include "src/core/lib/backoff/backoff.h"
|
44
43
|
#include "src/core/lib/channel/channel_args.h"
|
45
44
|
#include "src/core/lib/channel/channel_stack.h"
|
45
|
+
#include "src/core/lib/gpr/env.h"
|
46
46
|
#include "src/core/lib/gpr/string.h"
|
47
47
|
#include "src/core/lib/gprpp/memory.h"
|
48
48
|
#include "src/core/lib/gprpp/orphanable.h"
|
49
49
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
50
50
|
#include "src/core/lib/gprpp/sync.h"
|
51
51
|
#include "src/core/lib/iomgr/sockaddr.h"
|
52
|
-
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
53
52
|
#include "src/core/lib/iomgr/timer.h"
|
54
53
|
#include "src/core/lib/slice/slice_internal.h"
|
55
54
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
@@ -72,9 +71,9 @@ TraceFlag grpc_xds_client_refcount_trace(false, "xds_client_refcount");
|
|
72
71
|
namespace {
|
73
72
|
|
74
73
|
Mutex* g_mu = nullptr;
|
75
|
-
const grpc_channel_args* g_channel_args = nullptr;
|
76
|
-
XdsClient* g_xds_client = nullptr;
|
77
|
-
char* g_fallback_bootstrap_config = nullptr;
|
74
|
+
const grpc_channel_args* g_channel_args ABSL_GUARDED_BY(*g_mu) = nullptr;
|
75
|
+
XdsClient* g_xds_client ABSL_GUARDED_BY(*g_mu) = nullptr;
|
76
|
+
char* g_fallback_bootstrap_config ABSL_GUARDED_BY(*g_mu) = nullptr;
|
78
77
|
|
79
78
|
} // namespace
|
80
79
|
|
@@ -102,8 +101,8 @@ class XdsClient::ChannelState::RetryableCall
|
|
102
101
|
private:
|
103
102
|
void StartNewCallLocked();
|
104
103
|
void StartRetryTimerLocked();
|
105
|
-
static void OnRetryTimer(void* arg,
|
106
|
-
void OnRetryTimerLocked(
|
104
|
+
static void OnRetryTimer(void* arg, grpc_error_handle error);
|
105
|
+
void OnRetryTimerLocked(grpc_error_handle error);
|
107
106
|
|
108
107
|
// The wrapped xds call that talks to the xds server. It's instantiated
|
109
108
|
// every time we start a new call. It's null during call retry backoff.
|
@@ -135,9 +134,11 @@ class XdsClient::ChannelState::AdsCallState
|
|
135
134
|
XdsClient* xds_client() const { return chand()->xds_client(); }
|
136
135
|
bool seen_response() const { return seen_response_; }
|
137
136
|
|
138
|
-
void
|
139
|
-
|
140
|
-
|
137
|
+
void SubscribeLocked(const std::string& type_url, const std::string& name)
|
138
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
139
|
+
void UnsubscribeLocked(const std::string& type_url, const std::string& name,
|
140
|
+
bool delay_unsubscription)
|
141
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
141
142
|
|
142
143
|
bool HasSubscribedResources() const;
|
143
144
|
|
@@ -178,7 +179,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
178
179
|
}
|
179
180
|
|
180
181
|
private:
|
181
|
-
static void OnTimer(void* arg,
|
182
|
+
static void OnTimer(void* arg, grpc_error_handle error) {
|
182
183
|
ResourceState* self = static_cast<ResourceState*>(arg);
|
183
184
|
{
|
184
185
|
MutexLock lock(&self->ads_calld_->xds_client()->mu_);
|
@@ -188,10 +189,11 @@ class XdsClient::ChannelState::AdsCallState
|
|
188
189
|
self->Unref(DEBUG_LOCATION, "timer");
|
189
190
|
}
|
190
191
|
|
191
|
-
void OnTimerLocked(
|
192
|
+
void OnTimerLocked(grpc_error_handle error)
|
193
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
192
194
|
if (error == GRPC_ERROR_NONE && timer_pending_) {
|
193
195
|
timer_pending_ = false;
|
194
|
-
|
196
|
+
grpc_error_handle watcher_error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
195
197
|
absl::StrFormat(
|
196
198
|
"timeout obtaining resource {type=%s name=%s} from xds server",
|
197
199
|
type_url_, name_)
|
@@ -200,7 +202,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
200
202
|
watcher_error, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
201
203
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
202
204
|
gpr_log(GPR_INFO, "[xds_client %p] %s", ads_calld_->xds_client(),
|
203
|
-
|
205
|
+
grpc_error_std_string(watcher_error).c_str());
|
204
206
|
}
|
205
207
|
if (type_url_ == XdsApi::kLdsTypeUrl) {
|
206
208
|
ListenerState& state = ads_calld_->xds_client()->listener_map_[name_];
|
@@ -250,30 +252,38 @@ class XdsClient::ChannelState::AdsCallState
|
|
250
252
|
|
251
253
|
// Nonce and error for this resource type.
|
252
254
|
std::string nonce;
|
253
|
-
|
255
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
254
256
|
|
255
257
|
// Subscribed resources of this type.
|
256
258
|
std::map<std::string /* name */, OrphanablePtr<ResourceState>>
|
257
259
|
subscribed_resources;
|
258
260
|
};
|
259
261
|
|
260
|
-
void SendMessageLocked(const std::string& type_url)
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
void
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
void
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
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_);
|
277
287
|
|
278
288
|
bool IsCurrentCallOnChannel() const;
|
279
289
|
|
@@ -346,12 +356,15 @@ class XdsClient::ChannelState::LrsCallState
|
|
346
356
|
void Orphan() override;
|
347
357
|
|
348
358
|
private:
|
349
|
-
void ScheduleNextReportLocked()
|
350
|
-
|
351
|
-
|
352
|
-
bool
|
353
|
-
|
354
|
-
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_);
|
355
368
|
|
356
369
|
bool IsCurrentReporterOnCall() const {
|
357
370
|
return this == parent_->reporter_.get();
|
@@ -370,12 +383,15 @@ class XdsClient::ChannelState::LrsCallState
|
|
370
383
|
grpc_closure on_report_done_;
|
371
384
|
};
|
372
385
|
|
373
|
-
static void OnInitialRequestSent(void* arg,
|
374
|
-
void OnInitialRequestSentLocked()
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
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_);
|
379
395
|
|
380
396
|
bool IsCurrentCallOnChannel() const;
|
381
397
|
|
@@ -431,7 +447,7 @@ class XdsClient::ChannelState::StateWatcher
|
|
431
447
|
"[xds_client %p] xds channel in state:TRANSIENT_FAILURE "
|
432
448
|
"status_message:(%s)",
|
433
449
|
parent_->xds_client(), status.ToString().c_str());
|
434
|
-
parent_->
|
450
|
+
parent_->xds_client_->NotifyOnErrorLocked(
|
435
451
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
436
452
|
"xds channel in TRANSIENT_FAILURE"));
|
437
453
|
}
|
@@ -446,26 +462,13 @@ class XdsClient::ChannelState::StateWatcher
|
|
446
462
|
|
447
463
|
namespace {
|
448
464
|
|
449
|
-
grpc_channel* CreateXdsChannel(
|
450
|
-
|
451
|
-
absl::InlinedVector<grpc_arg, 2> args_to_add = {
|
452
|
-
grpc_channel_arg_integer_create(
|
453
|
-
const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
|
454
|
-
5 * 60 * GPR_MS_PER_SEC),
|
455
|
-
grpc_channel_arg_integer_create(
|
456
|
-
const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
|
457
|
-
};
|
458
|
-
grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
|
459
|
-
g_channel_args, args_to_add.data(), args_to_add.size());
|
460
|
-
// Create channel creds.
|
465
|
+
grpc_channel* CreateXdsChannel(grpc_channel_args* args,
|
466
|
+
const XdsBootstrap::XdsServer& server) {
|
461
467
|
RefCountedPtr<grpc_channel_credentials> channel_creds =
|
462
468
|
XdsChannelCredsRegistry::MakeChannelCreds(server.channel_creds_type,
|
463
469
|
server.channel_creds_config);
|
464
|
-
|
465
|
-
|
466
|
-
channel_creds.get(), server.server_uri.c_str(), new_args, nullptr);
|
467
|
-
grpc_channel_args_destroy(new_args);
|
468
|
-
return channel;
|
470
|
+
return grpc_secure_channel_create(channel_creds.get(),
|
471
|
+
server.server_uri.c_str(), args, nullptr);
|
469
472
|
}
|
470
473
|
|
471
474
|
} // namespace
|
@@ -482,7 +485,7 @@ XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
|
|
482
485
|
gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s",
|
483
486
|
xds_client_.get(), server.server_uri.c_str());
|
484
487
|
}
|
485
|
-
channel_ = CreateXdsChannel(server);
|
488
|
+
channel_ = CreateXdsChannel(xds_client_->args_, server);
|
486
489
|
GPR_ASSERT(channel_ != nullptr);
|
487
490
|
StartConnectivityWatchLocked();
|
488
491
|
}
|
@@ -527,24 +530,22 @@ void XdsClient::ChannelState::MaybeStartLrsCall() {
|
|
527
530
|
void XdsClient::ChannelState::StopLrsCall() { lrs_calld_.reset(); }
|
528
531
|
|
529
532
|
void XdsClient::ChannelState::StartConnectivityWatchLocked() {
|
530
|
-
|
531
|
-
|
532
|
-
GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
|
533
|
+
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
534
|
+
GPR_ASSERT(client_channel != nullptr);
|
533
535
|
watcher_ = new StateWatcher(Ref(DEBUG_LOCATION, "ChannelState+watch"));
|
534
|
-
|
535
|
-
|
536
|
+
client_channel->AddConnectivityWatcher(
|
537
|
+
GRPC_CHANNEL_IDLE,
|
536
538
|
OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
|
537
539
|
}
|
538
540
|
|
539
541
|
void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
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_);
|
544
545
|
}
|
545
546
|
|
546
|
-
void XdsClient::ChannelState::
|
547
|
-
|
547
|
+
void XdsClient::ChannelState::SubscribeLocked(const std::string& type_url,
|
548
|
+
const std::string& name) {
|
548
549
|
if (ads_calld_ == nullptr) {
|
549
550
|
// Start the ADS call if this is the first request.
|
550
551
|
ads_calld_.reset(new RetryableCall<AdsCallState>(
|
@@ -558,16 +559,16 @@ void XdsClient::ChannelState::Subscribe(const std::string& type_url,
|
|
558
559
|
// because when the call is restarted it will resend all necessary requests.
|
559
560
|
if (ads_calld() == nullptr) return;
|
560
561
|
// Subscribe to this resource if the ADS call is active.
|
561
|
-
ads_calld()->
|
562
|
+
ads_calld()->SubscribeLocked(type_url, name);
|
562
563
|
}
|
563
564
|
|
564
|
-
void XdsClient::ChannelState::
|
565
|
-
|
566
|
-
|
565
|
+
void XdsClient::ChannelState::UnsubscribeLocked(const std::string& type_url,
|
566
|
+
const std::string& name,
|
567
|
+
bool delay_unsubscription) {
|
567
568
|
if (ads_calld_ != nullptr) {
|
568
569
|
auto* calld = ads_calld_->calld();
|
569
570
|
if (calld != nullptr) {
|
570
|
-
calld->
|
571
|
+
calld->UnsubscribeLocked(type_url, name, delay_unsubscription);
|
571
572
|
if (!calld->HasSubscribedResources()) ads_calld_.reset();
|
572
573
|
}
|
573
574
|
}
|
@@ -650,7 +651,7 @@ void XdsClient::ChannelState::RetryableCall<T>::StartRetryTimerLocked() {
|
|
650
651
|
|
651
652
|
template <typename T>
|
652
653
|
void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer(
|
653
|
-
void* arg,
|
654
|
+
void* arg, grpc_error_handle error) {
|
654
655
|
RetryableCall* calld = static_cast<RetryableCall*>(arg);
|
655
656
|
{
|
656
657
|
MutexLock lock(&calld->chand_->xds_client()->mu_);
|
@@ -661,7 +662,7 @@ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer(
|
|
661
662
|
|
662
663
|
template <typename T>
|
663
664
|
void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
|
664
|
-
|
665
|
+
grpc_error_handle error) {
|
665
666
|
retry_timer_callback_pending_ = false;
|
666
667
|
if (!shutting_down_ && error == GRPC_ERROR_NONE) {
|
667
668
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -729,16 +730,16 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
729
730
|
GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
|
730
731
|
grpc_schedule_on_exec_ctx);
|
731
732
|
for (const auto& p : xds_client()->listener_map_) {
|
732
|
-
|
733
|
+
SubscribeLocked(XdsApi::kLdsTypeUrl, std::string(p.first));
|
733
734
|
}
|
734
735
|
for (const auto& p : xds_client()->route_config_map_) {
|
735
|
-
|
736
|
+
SubscribeLocked(XdsApi::kRdsTypeUrl, std::string(p.first));
|
736
737
|
}
|
737
738
|
for (const auto& p : xds_client()->cluster_map_) {
|
738
|
-
|
739
|
+
SubscribeLocked(XdsApi::kCdsTypeUrl, std::string(p.first));
|
739
740
|
}
|
740
741
|
for (const auto& p : xds_client()->endpoint_map_) {
|
741
|
-
|
742
|
+
SubscribeLocked(XdsApi::kEdsTypeUrl, std::string(p.first));
|
742
743
|
}
|
743
744
|
// Op: recv initial metadata.
|
744
745
|
op = ops;
|
@@ -802,7 +803,8 @@ void XdsClient::ChannelState::AdsCallState::Orphan() {
|
|
802
803
|
}
|
803
804
|
|
804
805
|
void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
805
|
-
const std::string& type_url)
|
806
|
+
const std::string& type_url)
|
807
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
806
808
|
// Buffer message sending if an existing message is in flight.
|
807
809
|
if (send_message_payload_ != nullptr) {
|
808
810
|
buffered_requests_.insert(type_url);
|
@@ -827,7 +829,7 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
827
829
|
"error=%s resources=%s",
|
828
830
|
xds_client(), type_url.c_str(),
|
829
831
|
xds_client()->resource_version_map_[type_url].c_str(),
|
830
|
-
state.nonce.c_str(),
|
832
|
+
state.nonce.c_str(), grpc_error_std_string(state.error).c_str(),
|
831
833
|
absl::StrJoin(resource_names, " ").c_str());
|
832
834
|
}
|
833
835
|
GRPC_ERROR_UNREF(state.error);
|
@@ -854,7 +856,7 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
854
856
|
}
|
855
857
|
}
|
856
858
|
|
857
|
-
void XdsClient::ChannelState::AdsCallState::
|
859
|
+
void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
|
858
860
|
const std::string& type_url, const std::string& name) {
|
859
861
|
auto& state = state_map_[type_url].subscribed_resources[name];
|
860
862
|
if (state == nullptr) {
|
@@ -864,7 +866,7 @@ void XdsClient::ChannelState::AdsCallState::Subscribe(
|
|
864
866
|
}
|
865
867
|
}
|
866
868
|
|
867
|
-
void XdsClient::ChannelState::AdsCallState::
|
869
|
+
void XdsClient::ChannelState::AdsCallState::UnsubscribeLocked(
|
868
870
|
const std::string& type_url, const std::string& name,
|
869
871
|
bool delay_unsubscription) {
|
870
872
|
state_map_[type_url].subscribed_resources.erase(name);
|
@@ -894,7 +896,7 @@ XdsApi::ResourceMetadata CreateResourceMetadataAcked(
|
|
894
896
|
|
895
897
|
} // namespace
|
896
898
|
|
897
|
-
void XdsClient::ChannelState::AdsCallState::
|
899
|
+
void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdateLocked(
|
898
900
|
std::string version, grpc_millis update_time,
|
899
901
|
XdsApi::LdsUpdateMap lds_update_map) {
|
900
902
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -978,7 +980,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
|
|
978
980
|
}
|
979
981
|
}
|
980
982
|
|
981
|
-
void XdsClient::ChannelState::AdsCallState::
|
983
|
+
void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdateLocked(
|
982
984
|
std::string version, grpc_millis update_time,
|
983
985
|
XdsApi::RdsUpdateMap rds_update_map) {
|
984
986
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -1020,7 +1022,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
|
|
1020
1022
|
}
|
1021
1023
|
}
|
1022
1024
|
|
1023
|
-
void XdsClient::ChannelState::AdsCallState::
|
1025
|
+
void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdateLocked(
|
1024
1026
|
std::string version, grpc_millis update_time,
|
1025
1027
|
XdsApi::CdsUpdateMap cds_update_map) {
|
1026
1028
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -1101,7 +1103,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
|
|
1101
1103
|
}
|
1102
1104
|
}
|
1103
1105
|
|
1104
|
-
void XdsClient::ChannelState::AdsCallState::
|
1106
|
+
void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdateLocked(
|
1105
1107
|
std::string version, grpc_millis update_time,
|
1106
1108
|
XdsApi::EdsUpdateMap eds_update_map) {
|
1107
1109
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -1143,8 +1145,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
|
|
1143
1145
|
}
|
1144
1146
|
}
|
1145
1147
|
|
1146
|
-
void XdsClient::ChannelState::AdsCallState::OnRequestSent(
|
1147
|
-
|
1148
|
+
void XdsClient::ChannelState::AdsCallState::OnRequestSent(
|
1149
|
+
void* arg, grpc_error_handle error) {
|
1148
1150
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1149
1151
|
{
|
1150
1152
|
MutexLock lock(&ads_calld->xds_client()->mu_);
|
@@ -1154,7 +1156,7 @@ void XdsClient::ChannelState::AdsCallState::OnRequestSent(void* arg,
|
|
1154
1156
|
}
|
1155
1157
|
|
1156
1158
|
void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
|
1157
|
-
|
1159
|
+
grpc_error_handle error) {
|
1158
1160
|
if (IsCurrentCallOnChannel() && error == GRPC_ERROR_NONE) {
|
1159
1161
|
// Clean up the sent message.
|
1160
1162
|
grpc_byte_buffer_destroy(send_message_payload_);
|
@@ -1178,7 +1180,7 @@ void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
|
|
1178
1180
|
}
|
1179
1181
|
|
1180
1182
|
void XdsClient::ChannelState::AdsCallState::OnResponseReceived(
|
1181
|
-
void* arg,
|
1183
|
+
void* arg, grpc_error_handle /* error */) {
|
1182
1184
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1183
1185
|
bool done;
|
1184
1186
|
{
|
@@ -1212,7 +1214,7 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1212
1214
|
// Ignore unparsable response.
|
1213
1215
|
gpr_log(GPR_ERROR,
|
1214
1216
|
"[xds_client %p] Error parsing ADS response (%s) -- ignoring",
|
1215
|
-
xds_client(),
|
1217
|
+
xds_client(), grpc_error_std_string(result.parse_error).c_str());
|
1216
1218
|
GRPC_ERROR_UNREF(result.parse_error);
|
1217
1219
|
} else {
|
1218
1220
|
grpc_millis update_time = grpc_core::ExecCtx::Get()->Now();
|
@@ -1221,8 +1223,8 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1221
1223
|
state.nonce = std::move(result.nonce);
|
1222
1224
|
// NACK or ACK the response.
|
1223
1225
|
if (result.parse_error != GRPC_ERROR_NONE) {
|
1224
|
-
xds_client()->
|
1225
|
-
|
1226
|
+
xds_client()->UpdateResourceMetadataWithFailedParseResultLocked(
|
1227
|
+
update_time, result);
|
1226
1228
|
GRPC_ERROR_UNREF(state.error);
|
1227
1229
|
state.error = result.parse_error;
|
1228
1230
|
// NACK unacceptable update.
|
@@ -1230,23 +1232,24 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1230
1232
|
"[xds_client %p] ADS response invalid for resource type %s "
|
1231
1233
|
"version %s, will NACK: nonce=%s error=%s",
|
1232
1234
|
xds_client(), result.type_url.c_str(), result.version.c_str(),
|
1233
|
-
state.nonce.c_str(),
|
1235
|
+
state.nonce.c_str(),
|
1236
|
+
grpc_error_std_string(result.parse_error).c_str());
|
1234
1237
|
SendMessageLocked(result.type_url);
|
1235
1238
|
} else {
|
1236
1239
|
seen_response_ = true;
|
1237
1240
|
// Accept the ADS response according to the type_url.
|
1238
1241
|
if (result.type_url == XdsApi::kLdsTypeUrl) {
|
1239
|
-
|
1240
|
-
|
1242
|
+
AcceptLdsUpdateLocked(result.version, update_time,
|
1243
|
+
std::move(result.lds_update_map));
|
1241
1244
|
} else if (result.type_url == XdsApi::kRdsTypeUrl) {
|
1242
|
-
|
1243
|
-
|
1245
|
+
AcceptRdsUpdateLocked(result.version, update_time,
|
1246
|
+
std::move(result.rds_update_map));
|
1244
1247
|
} else if (result.type_url == XdsApi::kCdsTypeUrl) {
|
1245
|
-
|
1246
|
-
|
1248
|
+
AcceptCdsUpdateLocked(result.version, update_time,
|
1249
|
+
std::move(result.cds_update_map));
|
1247
1250
|
} else if (result.type_url == XdsApi::kEdsTypeUrl) {
|
1248
|
-
|
1249
|
-
|
1251
|
+
AcceptEdsUpdateLocked(result.version, update_time,
|
1252
|
+
std::move(result.eds_update_map));
|
1250
1253
|
}
|
1251
1254
|
xds_client()->resource_version_map_[result.type_url] =
|
1252
1255
|
std::move(result.version);
|
@@ -1277,7 +1280,7 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1277
1280
|
}
|
1278
1281
|
|
1279
1282
|
void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
|
1280
|
-
void* arg,
|
1283
|
+
void* arg, grpc_error_handle error) {
|
1281
1284
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1282
1285
|
{
|
1283
1286
|
MutexLock lock(&ads_calld->xds_client()->mu_);
|
@@ -1287,14 +1290,14 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
|
|
1287
1290
|
}
|
1288
1291
|
|
1289
1292
|
void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
1290
|
-
|
1293
|
+
grpc_error_handle error) {
|
1291
1294
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1292
1295
|
char* status_details = grpc_slice_to_c_string(status_details_);
|
1293
1296
|
gpr_log(GPR_INFO,
|
1294
1297
|
"[xds_client %p] ADS call status received. Status = %d, details "
|
1295
1298
|
"= '%s', (chand: %p, ads_calld: %p, call: %p), error '%s'",
|
1296
1299
|
xds_client(), status_code_, status_details, chand(), this, call_,
|
1297
|
-
|
1300
|
+
grpc_error_std_string(error).c_str());
|
1298
1301
|
gpr_free(status_details);
|
1299
1302
|
}
|
1300
1303
|
// Ignore status from a stale call.
|
@@ -1349,7 +1352,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::
|
|
1349
1352
|
}
|
1350
1353
|
|
1351
1354
|
void XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimer(
|
1352
|
-
void* arg,
|
1355
|
+
void* arg, grpc_error_handle error) {
|
1353
1356
|
Reporter* self = static_cast<Reporter*>(arg);
|
1354
1357
|
bool done;
|
1355
1358
|
{
|
@@ -1360,7 +1363,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimer(
|
|
1360
1363
|
}
|
1361
1364
|
|
1362
1365
|
bool XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimerLocked(
|
1363
|
-
|
1366
|
+
grpc_error_handle error) {
|
1364
1367
|
next_report_timer_callback_pending_ = false;
|
1365
1368
|
if (error != GRPC_ERROR_NONE || !IsCurrentReporterOnCall()) {
|
1366
1369
|
GRPC_ERROR_UNREF(error);
|
@@ -1425,7 +1428,7 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
|
1425
1428
|
}
|
1426
1429
|
|
1427
1430
|
void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDone(
|
1428
|
-
void* arg,
|
1431
|
+
void* arg, grpc_error_handle error) {
|
1429
1432
|
Reporter* self = static_cast<Reporter*>(arg);
|
1430
1433
|
bool done;
|
1431
1434
|
{
|
@@ -1436,7 +1439,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDone(
|
|
1436
1439
|
}
|
1437
1440
|
|
1438
1441
|
bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
|
1439
|
-
|
1442
|
+
grpc_error_handle error) {
|
1440
1443
|
grpc_byte_buffer_destroy(parent_->send_message_payload_);
|
1441
1444
|
parent_->send_message_payload_ = nullptr;
|
1442
1445
|
// If there are no more registered stats to report, cancel the call.
|
@@ -1606,7 +1609,7 @@ void XdsClient::ChannelState::LrsCallState::MaybeStartReportingLocked() {
|
|
1606
1609
|
}
|
1607
1610
|
|
1608
1611
|
void XdsClient::ChannelState::LrsCallState::OnInitialRequestSent(
|
1609
|
-
void* arg,
|
1612
|
+
void* arg, grpc_error_handle /*error*/) {
|
1610
1613
|
LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
|
1611
1614
|
{
|
1612
1615
|
MutexLock lock(&lrs_calld->xds_client()->mu_);
|
@@ -1623,7 +1626,7 @@ void XdsClient::ChannelState::LrsCallState::OnInitialRequestSentLocked() {
|
|
1623
1626
|
}
|
1624
1627
|
|
1625
1628
|
void XdsClient::ChannelState::LrsCallState::OnResponseReceived(
|
1626
|
-
void* arg,
|
1629
|
+
void* arg, grpc_error_handle /*error*/) {
|
1627
1630
|
LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
|
1628
1631
|
bool done;
|
1629
1632
|
{
|
@@ -1651,13 +1654,13 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1651
1654
|
bool send_all_clusters = false;
|
1652
1655
|
std::set<std::string> new_cluster_names;
|
1653
1656
|
grpc_millis new_load_reporting_interval;
|
1654
|
-
|
1657
|
+
grpc_error_handle parse_error = xds_client()->api_.ParseLrsResponse(
|
1655
1658
|
response_slice, &send_all_clusters, &new_cluster_names,
|
1656
1659
|
&new_load_reporting_interval);
|
1657
1660
|
if (parse_error != GRPC_ERROR_NONE) {
|
1658
1661
|
gpr_log(GPR_ERROR,
|
1659
1662
|
"[xds_client %p] LRS response parsing failed. error=%s",
|
1660
|
-
xds_client(),
|
1663
|
+
xds_client(), grpc_error_std_string(parse_error).c_str());
|
1661
1664
|
GRPC_ERROR_UNREF(parse_error);
|
1662
1665
|
return;
|
1663
1666
|
}
|
@@ -1726,7 +1729,7 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1726
1729
|
}
|
1727
1730
|
|
1728
1731
|
void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
|
1729
|
-
void* arg,
|
1732
|
+
void* arg, grpc_error_handle error) {
|
1730
1733
|
LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
|
1731
1734
|
{
|
1732
1735
|
MutexLock lock(&lrs_calld->xds_client()->mu_);
|
@@ -1736,7 +1739,7 @@ void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
|
|
1736
1739
|
}
|
1737
1740
|
|
1738
1741
|
void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
|
1739
|
-
|
1742
|
+
grpc_error_handle error) {
|
1740
1743
|
GPR_ASSERT(call_ != nullptr);
|
1741
1744
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1742
1745
|
char* status_details = grpc_slice_to_c_string(status_details_);
|
@@ -1744,7 +1747,7 @@ void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
|
|
1744
1747
|
"[xds_client %p] LRS call status received. Status = %d, details "
|
1745
1748
|
"= '%s', (chand: %p, calld: %p, call: %p), error '%s'",
|
1746
1749
|
xds_client(), status_code_, status_details, chand(), this, call_,
|
1747
|
-
|
1750
|
+
grpc_error_std_string(error).c_str());
|
1748
1751
|
gpr_free(status_details);
|
1749
1752
|
}
|
1750
1753
|
// Ignore status from a stale call.
|
@@ -1769,36 +1772,41 @@ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
|
|
1769
1772
|
|
1770
1773
|
namespace {
|
1771
1774
|
|
1772
|
-
grpc_millis GetRequestTimeout() {
|
1775
|
+
grpc_millis GetRequestTimeout(const grpc_channel_args* args) {
|
1773
1776
|
return grpc_channel_args_find_integer(
|
1774
|
-
|
1777
|
+
args, GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
|
1775
1778
|
{15000, 0, INT_MAX});
|
1776
1779
|
}
|
1777
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
|
+
|
1778
1793
|
} // namespace
|
1779
1794
|
|
1780
|
-
XdsClient::XdsClient(
|
1795
|
+
XdsClient::XdsClient(std::unique_ptr<XdsBootstrap> bootstrap,
|
1796
|
+
const grpc_channel_args* args)
|
1781
1797
|
: DualRefCounted<XdsClient>(
|
1782
1798
|
GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace) ? "XdsClient"
|
1783
1799
|
: nullptr),
|
1784
|
-
|
1800
|
+
bootstrap_(std::move(bootstrap)),
|
1801
|
+
args_(ModifyChannelArgs(args)),
|
1802
|
+
request_timeout_(GetRequestTimeout(args)),
|
1785
1803
|
interested_parties_(grpc_pollset_set_create()),
|
1786
|
-
bootstrap_(XdsBootstrap::Create(this, &grpc_xds_client_trace,
|
1787
|
-
g_fallback_bootstrap_config, error)),
|
1788
1804
|
certificate_provider_store_(MakeOrphanable<CertificateProviderStore>(
|
1789
|
-
bootstrap_
|
1790
|
-
|
1791
|
-
: bootstrap_->certificate_providers())),
|
1792
|
-
api_(this, &grpc_xds_client_trace,
|
1793
|
-
bootstrap_ == nullptr ? nullptr : bootstrap_->node()) {
|
1805
|
+
bootstrap_->certificate_providers())),
|
1806
|
+
api_(this, &grpc_xds_client_trace, bootstrap_->node()) {
|
1794
1807
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1795
1808
|
gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
|
1796
1809
|
}
|
1797
|
-
if (*error != GRPC_ERROR_NONE) {
|
1798
|
-
gpr_log(GPR_ERROR, "[xds_client %p] failed to read bootstrap file: %s",
|
1799
|
-
this, grpc_error_string(*error));
|
1800
|
-
return;
|
1801
|
-
}
|
1802
1810
|
// Create ChannelState object.
|
1803
1811
|
chand_ = MakeOrphanable<ChannelState>(
|
1804
1812
|
WeakRef(DEBUG_LOCATION, "XdsClient+ChannelState"), bootstrap_->server());
|
@@ -1808,11 +1816,13 @@ XdsClient::~XdsClient() {
|
|
1808
1816
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1809
1817
|
gpr_log(GPR_INFO, "[xds_client %p] destroying xds client", this);
|
1810
1818
|
}
|
1819
|
+
grpc_channel_args_destroy(args_);
|
1811
1820
|
grpc_pollset_set_destroy(interested_parties_);
|
1812
1821
|
}
|
1813
1822
|
|
1814
1823
|
void XdsClient::AddChannelzLinkage(
|
1815
1824
|
channelz::ChannelNode* parent_channelz_node) {
|
1825
|
+
MutexLock lock(&mu_);
|
1816
1826
|
channelz::ChannelNode* xds_channelz_node =
|
1817
1827
|
grpc_channel_get_channelz_node(chand_->channel());
|
1818
1828
|
if (xds_channelz_node != nullptr) {
|
@@ -1822,6 +1832,7 @@ void XdsClient::AddChannelzLinkage(
|
|
1822
1832
|
|
1823
1833
|
void XdsClient::RemoveChannelzLinkage(
|
1824
1834
|
channelz::ChannelNode* parent_channelz_node) {
|
1835
|
+
MutexLock lock(&mu_);
|
1825
1836
|
channelz::ChannelNode* xds_channelz_node =
|
1826
1837
|
grpc_channel_get_channelz_node(chand_->channel());
|
1827
1838
|
if (xds_channelz_node != nullptr) {
|
@@ -1872,7 +1883,7 @@ void XdsClient::WatchListenerData(
|
|
1872
1883
|
}
|
1873
1884
|
w->OnListenerChanged(*listener_state.update);
|
1874
1885
|
}
|
1875
|
-
chand_->
|
1886
|
+
chand_->SubscribeLocked(XdsApi::kLdsTypeUrl, listener_name_str);
|
1876
1887
|
}
|
1877
1888
|
|
1878
1889
|
void XdsClient::CancelListenerDataWatch(absl::string_view listener_name,
|
@@ -1887,8 +1898,8 @@ void XdsClient::CancelListenerDataWatch(absl::string_view listener_name,
|
|
1887
1898
|
listener_state.watchers.erase(it);
|
1888
1899
|
if (listener_state.watchers.empty()) {
|
1889
1900
|
listener_map_.erase(listener_name_str);
|
1890
|
-
chand_->
|
1891
|
-
|
1901
|
+
chand_->UnsubscribeLocked(XdsApi::kLdsTypeUrl, listener_name_str,
|
1902
|
+
delay_unsubscription);
|
1892
1903
|
}
|
1893
1904
|
}
|
1894
1905
|
}
|
@@ -1912,7 +1923,7 @@ void XdsClient::WatchRouteConfigData(
|
|
1912
1923
|
}
|
1913
1924
|
w->OnRouteConfigChanged(*route_config_state.update);
|
1914
1925
|
}
|
1915
|
-
chand_->
|
1926
|
+
chand_->SubscribeLocked(XdsApi::kRdsTypeUrl, route_config_name_str);
|
1916
1927
|
}
|
1917
1928
|
|
1918
1929
|
void XdsClient::CancelRouteConfigDataWatch(absl::string_view route_config_name,
|
@@ -1928,8 +1939,8 @@ void XdsClient::CancelRouteConfigDataWatch(absl::string_view route_config_name,
|
|
1928
1939
|
route_config_state.watchers.erase(it);
|
1929
1940
|
if (route_config_state.watchers.empty()) {
|
1930
1941
|
route_config_map_.erase(route_config_name_str);
|
1931
|
-
chand_->
|
1932
|
-
|
1942
|
+
chand_->UnsubscribeLocked(XdsApi::kRdsTypeUrl, route_config_name_str,
|
1943
|
+
delay_unsubscription);
|
1933
1944
|
}
|
1934
1945
|
}
|
1935
1946
|
}
|
@@ -1951,7 +1962,7 @@ void XdsClient::WatchClusterData(
|
|
1951
1962
|
}
|
1952
1963
|
w->OnClusterChanged(cluster_state.update.value());
|
1953
1964
|
}
|
1954
|
-
chand_->
|
1965
|
+
chand_->SubscribeLocked(XdsApi::kCdsTypeUrl, cluster_name_str);
|
1955
1966
|
}
|
1956
1967
|
|
1957
1968
|
void XdsClient::CancelClusterDataWatch(absl::string_view cluster_name,
|
@@ -1966,8 +1977,8 @@ void XdsClient::CancelClusterDataWatch(absl::string_view cluster_name,
|
|
1966
1977
|
cluster_state.watchers.erase(it);
|
1967
1978
|
if (cluster_state.watchers.empty()) {
|
1968
1979
|
cluster_map_.erase(cluster_name_str);
|
1969
|
-
chand_->
|
1970
|
-
|
1980
|
+
chand_->UnsubscribeLocked(XdsApi::kCdsTypeUrl, cluster_name_str,
|
1981
|
+
delay_unsubscription);
|
1971
1982
|
}
|
1972
1983
|
}
|
1973
1984
|
}
|
@@ -1989,7 +2000,7 @@ void XdsClient::WatchEndpointData(
|
|
1989
2000
|
}
|
1990
2001
|
w->OnEndpointChanged(endpoint_state.update.value());
|
1991
2002
|
}
|
1992
|
-
chand_->
|
2003
|
+
chand_->SubscribeLocked(XdsApi::kEdsTypeUrl, eds_service_name_str);
|
1993
2004
|
}
|
1994
2005
|
|
1995
2006
|
void XdsClient::CancelEndpointDataWatch(absl::string_view eds_service_name,
|
@@ -2004,8 +2015,8 @@ void XdsClient::CancelEndpointDataWatch(absl::string_view eds_service_name,
|
|
2004
2015
|
endpoint_state.watchers.erase(it);
|
2005
2016
|
if (endpoint_state.watchers.empty()) {
|
2006
2017
|
endpoint_map_.erase(eds_service_name_str);
|
2007
|
-
chand_->
|
2008
|
-
|
2018
|
+
chand_->UnsubscribeLocked(XdsApi::kEdsTypeUrl, eds_service_name_str,
|
2019
|
+
delay_unsubscription);
|
2009
2020
|
}
|
2010
2021
|
}
|
2011
2022
|
}
|
@@ -2132,7 +2143,7 @@ void XdsClient::ResetBackoff() {
|
|
2132
2143
|
}
|
2133
2144
|
}
|
2134
2145
|
|
2135
|
-
void XdsClient::NotifyOnErrorLocked(
|
2146
|
+
void XdsClient::NotifyOnErrorLocked(grpc_error_handle error) {
|
2136
2147
|
for (const auto& p : listener_map_) {
|
2137
2148
|
const ListenerState& listener_state = p.second;
|
2138
2149
|
for (const auto& p : listener_state.watchers) {
|
@@ -2241,11 +2252,11 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2241
2252
|
return snapshot_map;
|
2242
2253
|
}
|
2243
2254
|
|
2244
|
-
void XdsClient::
|
2255
|
+
void XdsClient::UpdateResourceMetadataWithFailedParseResultLocked(
|
2245
2256
|
grpc_millis update_time, const XdsApi::AdsParseResult& result) {
|
2246
2257
|
// ADS update is rejected and the resource names in the failed update is
|
2247
2258
|
// available.
|
2248
|
-
|
2259
|
+
std::string details = grpc_error_std_string(result.parse_error);
|
2249
2260
|
for (auto& name : result.resource_names_failed) {
|
2250
2261
|
XdsApi::ResourceMetadata* resource_metadata = nullptr;
|
2251
2262
|
if (result.type_url == XdsApi::kLdsTypeUrl) {
|
@@ -2274,7 +2285,7 @@ void XdsClient::UpdateResourceMetadataWithFailedParseResult(
|
|
2274
2285
|
}
|
2275
2286
|
resource_metadata->client_status = XdsApi::ResourceMetadata::NACKED;
|
2276
2287
|
resource_metadata->failed_version = result.version;
|
2277
|
-
resource_metadata->failed_details =
|
2288
|
+
resource_metadata->failed_details = details;
|
2278
2289
|
resource_metadata->failed_update_time = update_time;
|
2279
2290
|
}
|
2280
2291
|
}
|
@@ -2324,24 +2335,105 @@ void XdsClientGlobalInit() {
|
|
2324
2335
|
XdsHttpFilterRegistry::Init();
|
2325
2336
|
}
|
2326
2337
|
|
2327
|
-
|
2328
|
-
|
2329
|
-
|
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 {
|
2330
2341
|
gpr_free(g_fallback_bootstrap_config);
|
2331
2342
|
g_fallback_bootstrap_config = nullptr;
|
2343
|
+
delete g_mu;
|
2344
|
+
g_mu = nullptr;
|
2332
2345
|
XdsHttpFilterRegistry::Shutdown();
|
2333
2346
|
}
|
2334
2347
|
|
2335
|
-
|
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) {
|
2336
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.
|
2337
2416
|
{
|
2338
2417
|
MutexLock lock(g_mu);
|
2339
2418
|
if (g_xds_client != nullptr) {
|
2340
2419
|
auto xds_client = g_xds_client->RefIfNonZero();
|
2341
2420
|
if (xds_client != nullptr) return xds_client;
|
2342
2421
|
}
|
2343
|
-
|
2422
|
+
// Find bootstrap contents.
|
2423
|
+
std::string bootstrap_contents =
|
2424
|
+
GetBootstrapContents(g_fallback_bootstrap_config, error);
|
2344
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);
|
2345
2437
|
g_xds_client = xds_client.get();
|
2346
2438
|
}
|
2347
2439
|
return xds_client;
|
@@ -2367,14 +2459,54 @@ void SetXdsFallbackBootstrapConfig(const char* config) {
|
|
2367
2459
|
|
2368
2460
|
} // namespace internal
|
2369
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
|
+
|
2370
2502
|
} // namespace grpc_core
|
2371
2503
|
|
2372
2504
|
// The returned bytes may contain NULL(0), so we can't use c-string.
|
2373
2505
|
grpc_slice grpc_dump_xds_configs() {
|
2374
2506
|
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2375
2507
|
grpc_core::ExecCtx exec_ctx;
|
2376
|
-
|
2377
|
-
auto xds_client = grpc_core::XdsClient::GetOrCreate(&error);
|
2508
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
2509
|
+
auto xds_client = grpc_core::XdsClient::GetOrCreate(nullptr, &error);
|
2378
2510
|
if (error != GRPC_ERROR_NONE) {
|
2379
2511
|
// If we isn't using xDS, just return an empty string.
|
2380
2512
|
GRPC_ERROR_UNREF(error);
|