grpc 1.50.0-x86_64-linux → 1.51.0-x86_64-linux
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 +131 -42
- data/include/grpc/event_engine/event_engine.h +10 -3
- data/include/grpc/event_engine/slice_buffer.h +17 -0
- data/include/grpc/grpc.h +0 -10
- data/include/grpc/impl/codegen/grpc_types.h +1 -5
- data/include/grpc/impl/codegen/port_platform.h +0 -3
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
- data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
- data/src/core/ext/filters/client_channel/client_channel.h +3 -4
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
- data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
- data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
- 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/native/dns_resolver.cc +2 -4
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
- data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
- data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
- data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
- data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
- data/src/core/ext/filters/client_channel/subchannel.h +2 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
- data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
- data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
- data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
- data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
- data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
- data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
- data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
- data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
- data/src/core/ext/xds/certificate_provider_store.cc +4 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
- data/src/core/ext/xds/xds_api.cc +15 -68
- data/src/core/ext/xds/xds_api.h +3 -7
- data/src/core/ext/xds/xds_bootstrap.h +0 -1
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
- data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
- data/src/core/ext/xds/xds_client.cc +122 -90
- data/src/core/ext/xds/xds_client.h +7 -2
- data/src/core/ext/xds/xds_client_grpc.cc +5 -24
- data/src/core/ext/xds/xds_cluster.cc +291 -183
- data/src/core/ext/xds/xds_cluster.h +11 -15
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
- data/src/core/ext/xds/xds_common_types.cc +208 -141
- data/src/core/ext/xds/xds_common_types.h +19 -13
- data/src/core/ext/xds/xds_endpoint.cc +214 -129
- data/src/core/ext/xds/xds_endpoint.h +4 -7
- data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
- data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
- data/src/core/ext/xds/xds_http_filters.cc +60 -73
- data/src/core/ext/xds/xds_http_filters.h +67 -19
- data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
- data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
- data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
- data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
- data/src/core/ext/xds/xds_listener.cc +459 -417
- data/src/core/ext/xds/xds_listener.h +43 -47
- data/src/core/ext/xds/xds_resource_type.h +3 -11
- data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
- data/src/core/ext/xds/xds_route_config.cc +94 -80
- data/src/core/ext/xds/xds_route_config.h +10 -10
- data/src/core/ext/xds/xds_routing.cc +2 -1
- data/src/core/ext/xds/xds_routing.h +2 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
- data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
- data/src/core/lib/address_utils/parse_address.cc +11 -10
- data/src/core/lib/channel/channel_args.h +16 -1
- data/src/core/lib/channel/channel_stack.cc +23 -20
- data/src/core/lib/channel/channel_stack.h +17 -4
- data/src/core/lib/channel/channel_stack_builder.cc +4 -7
- data/src/core/lib/channel/channel_stack_builder.h +14 -6
- data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
- data/src/core/lib/channel/channel_trace.cc +4 -5
- data/src/core/lib/channel/channelz.cc +1 -1
- data/src/core/lib/channel/connected_channel.cc +695 -35
- data/src/core/lib/channel/connected_channel.h +0 -4
- data/src/core/lib/channel/promise_based_filter.cc +1004 -140
- data/src/core/lib/channel/promise_based_filter.h +364 -87
- data/src/core/lib/compression/message_compress.cc +5 -5
- data/src/core/lib/debug/event_log.cc +88 -0
- data/src/core/lib/debug/event_log.h +81 -0
- data/src/core/lib/debug/histogram_view.cc +69 -0
- data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
- data/src/core/lib/debug/stats.cc +22 -119
- data/src/core/lib/debug/stats.h +29 -35
- data/src/core/lib/debug/stats_data.cc +224 -73
- data/src/core/lib/debug/stats_data.h +263 -122
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +38 -15
- data/src/core/lib/event_engine/default_event_engine.h +15 -3
- data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
- data/src/core/lib/event_engine/memory_allocator.cc +1 -1
- data/src/core/lib/event_engine/poller.h +10 -4
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
- data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
- data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
- data/src/core/lib/event_engine/slice.cc +7 -6
- data/src/core/lib/event_engine/slice_buffer.cc +2 -2
- data/src/core/lib/event_engine/thread_pool.cc +106 -25
- data/src/core/lib/event_engine/thread_pool.h +32 -9
- data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
- data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
- data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
- data/src/core/lib/experiments/config.cc +1 -1
- data/src/core/lib/experiments/experiments.cc +13 -2
- data/src/core/lib/experiments/experiments.h +8 -1
- data/src/core/lib/gpr/cpu_linux.cc +6 -2
- data/src/core/lib/gpr/log_linux.cc +3 -4
- data/src/core/lib/gpr/string.h +1 -1
- data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
- data/src/core/lib/gprpp/load_file.cc +75 -0
- data/src/core/lib/gprpp/load_file.h +33 -0
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/stat_posix.cc +5 -4
- data/src/core/lib/gprpp/stat_windows.cc +3 -2
- data/src/core/lib/gprpp/status_helper.h +1 -3
- data/src/core/lib/gprpp/strerror.cc +41 -0
- data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
- data/src/core/lib/gprpp/thd_windows.cc +1 -2
- data/src/core/lib/gprpp/time.cc +3 -4
- data/src/core/lib/gprpp/time.h +13 -2
- data/src/core/lib/gprpp/validation_errors.h +18 -1
- data/src/core/lib/http/httpcli.cc +40 -44
- data/src/core/lib/http/httpcli.h +6 -5
- data/src/core/lib/http/httpcli_security_connector.cc +4 -6
- data/src/core/lib/http/parser.cc +54 -65
- data/src/core/lib/iomgr/buffer_list.cc +105 -116
- data/src/core/lib/iomgr/buffer_list.h +60 -44
- data/src/core/lib/iomgr/call_combiner.cc +11 -10
- data/src/core/lib/iomgr/call_combiner.h +3 -4
- data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
- data/src/core/lib/iomgr/closure.h +49 -5
- data/src/core/lib/iomgr/combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
- data/src/core/lib/iomgr/error.cc +27 -42
- data/src/core/lib/iomgr/error.h +22 -152
- data/src/core/lib/iomgr/ev_apple.cc +4 -4
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
- data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
- data/src/core/lib/iomgr/exec_ctx.cc +3 -4
- data/src/core/lib/iomgr/exec_ctx.h +2 -3
- data/src/core/lib/iomgr/executor.cc +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
- data/src/core/lib/iomgr/iocp_windows.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
- data/src/core/lib/iomgr/load_file.cc +5 -9
- data/src/core/lib/iomgr/lockfree_event.cc +10 -10
- data/src/core/lib/iomgr/pollset_windows.cc +4 -4
- data/src/core/lib/iomgr/python_util.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +8 -3
- data/src/core/lib/iomgr/resolve_address.h +3 -4
- data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
- data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
- data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
- data/src/core/lib/iomgr/socket_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
- data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
- data/src/core/lib/iomgr/tcp_posix.cc +92 -108
- data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
- data/src/core/lib/iomgr/tcp_windows.cc +27 -34
- data/src/core/lib/iomgr/timer.h +8 -8
- data/src/core/lib/iomgr/timer_generic.cc +9 -15
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +7 -2
- data/src/core/lib/json/json_object_loader.h +22 -0
- data/src/core/lib/json/json_util.cc +5 -5
- data/src/core/lib/json/json_util.h +4 -4
- data/src/core/lib/load_balancing/lb_policy.cc +1 -1
- data/src/core/lib/load_balancing/lb_policy.h +4 -0
- data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
- data/src/core/lib/matchers/matchers.cc +3 -4
- data/src/core/lib/promise/activity.cc +16 -2
- data/src/core/lib/promise/activity.h +38 -15
- data/src/core/lib/promise/arena_promise.h +80 -51
- data/src/core/lib/promise/context.h +13 -6
- data/src/core/lib/promise/detail/basic_seq.h +9 -28
- data/src/core/lib/promise/detail/promise_factory.h +58 -10
- data/src/core/lib/promise/detail/status.h +28 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
- data/src/core/lib/promise/for_each.h +129 -0
- data/src/core/lib/promise/loop.h +7 -5
- data/src/core/lib/promise/map_pipe.h +87 -0
- data/src/core/lib/promise/pipe.cc +19 -0
- data/src/core/lib/promise/pipe.h +505 -0
- data/src/core/lib/promise/poll.h +13 -0
- data/src/core/lib/promise/seq.h +3 -5
- data/src/core/lib/promise/sleep.cc +5 -4
- data/src/core/lib/promise/sleep.h +1 -2
- data/src/core/lib/promise/try_concurrently.h +341 -0
- data/src/core/lib/promise/try_seq.h +10 -13
- data/src/core/lib/resolver/server_address.cc +1 -0
- data/src/core/lib/resolver/server_address.h +1 -3
- data/src/core/lib/resource_quota/api.cc +0 -1
- data/src/core/lib/resource_quota/arena.cc +19 -0
- data/src/core/lib/resource_quota/arena.h +89 -0
- data/src/core/lib/resource_quota/memory_quota.cc +1 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
- data/src/core/lib/security/authorization/matchers.cc +25 -22
- data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
- data/src/core/lib/security/context/security_context.h +10 -0
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
- 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 +2 -6
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
- data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
- data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
- data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
- data/src/core/lib/security/transport/security_handshaker.cc +53 -53
- data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
- data/src/core/lib/security/transport/tsi_error.cc +6 -3
- data/src/core/lib/security/util/json_util.cc +4 -5
- data/src/core/lib/service_config/service_config.h +1 -1
- data/src/core/lib/service_config/service_config_impl.cc +111 -158
- data/src/core/lib/service_config/service_config_impl.h +14 -17
- data/src/core/lib/service_config/service_config_parser.cc +14 -31
- data/src/core/lib/service_config/service_config_parser.h +14 -10
- data/src/core/lib/slice/b64.cc +2 -2
- data/src/core/lib/slice/slice.cc +7 -1
- data/src/core/lib/slice/slice.h +19 -6
- data/src/core/lib/slice/slice_buffer.cc +13 -14
- data/src/core/lib/slice/slice_internal.h +13 -21
- data/src/core/lib/slice/slice_refcount.h +34 -19
- data/src/core/lib/surface/byte_buffer.cc +3 -4
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +1366 -239
- data/src/core/lib/surface/call.h +44 -0
- data/src/core/lib/surface/call_details.cc +3 -3
- data/src/core/lib/surface/call_trace.cc +113 -0
- data/src/core/lib/surface/call_trace.h +30 -0
- data/src/core/lib/surface/channel.cc +44 -49
- data/src/core/lib/surface/channel.h +9 -1
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/channel_stack_type.cc +4 -0
- data/src/core/lib/surface/channel_stack_type.h +2 -0
- data/src/core/lib/surface/completion_queue.cc +38 -52
- data/src/core/lib/surface/init.cc +8 -39
- data/src/core/lib/surface/init_internally.h +8 -0
- data/src/core/lib/surface/lame_client.cc +10 -8
- data/src/core/lib/surface/server.cc +48 -70
- data/src/core/lib/surface/server.h +3 -4
- data/src/core/lib/surface/validate_metadata.cc +11 -12
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/connectivity_state.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +34 -28
- data/src/core/lib/transport/error_utils.h +3 -3
- data/src/core/lib/transport/handshaker.cc +14 -14
- data/src/core/lib/transport/handshaker.h +1 -1
- data/src/core/lib/transport/handshaker_factory.h +26 -0
- data/src/core/lib/transport/handshaker_registry.cc +8 -2
- data/src/core/lib/transport/handshaker_registry.h +3 -4
- data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
- data/src/core/lib/transport/metadata_batch.h +17 -1
- data/src/core/lib/transport/parsed_metadata.cc +2 -6
- data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
- data/src/core/lib/transport/transport.cc +63 -17
- data/src/core/lib/transport/transport.h +64 -68
- data/src/core/lib/transport/transport_impl.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +7 -6
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
- data/src/core/tsi/fake_transport_security.cc +3 -3
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
- data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_spec.rb +0 -43
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +21 -12
- data/third_party/zlib/deflate.c +112 -106
- data/third_party/zlib/deflate.h +2 -2
- data/third_party/zlib/gzlib.c +1 -1
- data/third_party/zlib/gzread.c +3 -5
- data/third_party/zlib/gzwrite.c +1 -1
- data/third_party/zlib/infback.c +10 -7
- data/third_party/zlib/inflate.c +5 -2
- data/third_party/zlib/inftrees.c +2 -2
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +61 -62
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +10 -10
- data/third_party/zlib/zutil.c +9 -7
- data/third_party/zlib/zutil.h +1 -0
- metadata +55 -18
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
- data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/tls.h +0 -156
- data/src/core/lib/promise/call_push_pull.h +0 -148
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_buffer_api.cc +0 -35
- data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -23,10 +23,8 @@
|
|
23
23
|
|
24
24
|
#include <algorithm>
|
25
25
|
|
26
|
-
#include "absl/memory/memory.h"
|
27
26
|
#include "absl/strings/match.h"
|
28
27
|
#include "absl/strings/str_cat.h"
|
29
|
-
#include "absl/strings/str_format.h"
|
30
28
|
#include "absl/strings/str_join.h"
|
31
29
|
#include "absl/strings/str_split.h"
|
32
30
|
#include "absl/strings/string_view.h"
|
@@ -58,7 +56,6 @@
|
|
58
56
|
namespace grpc_core {
|
59
57
|
|
60
58
|
using ::grpc_event_engine::experimental::EventEngine;
|
61
|
-
using ::grpc_event_engine::experimental::GetDefaultEventEngine;
|
62
59
|
|
63
60
|
TraceFlag grpc_xds_client_trace(false, "xds_client");
|
64
61
|
TraceFlag grpc_xds_client_refcount_trace(false, "xds_client_refcount");
|
@@ -180,10 +177,45 @@ class XdsClient::ChannelState::AdsCallState
|
|
180
177
|
Unref(DEBUG_LOCATION, "Orphan");
|
181
178
|
}
|
182
179
|
|
180
|
+
void MarkSubscriptionSendStarted()
|
181
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
182
|
+
subscription_sent_ = true;
|
183
|
+
}
|
184
|
+
|
185
|
+
void MaybeMarkSubscriptionSendComplete(
|
186
|
+
RefCountedPtr<AdsCallState> ads_calld)
|
187
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
188
|
+
if (subscription_sent_) MaybeStartTimer(std::move(ads_calld));
|
189
|
+
}
|
190
|
+
|
191
|
+
void MarkSeen() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
192
|
+
resource_seen_ = true;
|
193
|
+
MaybeCancelTimer();
|
194
|
+
}
|
195
|
+
|
196
|
+
void MaybeCancelTimer() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
197
|
+
if (timer_handle_.has_value() &&
|
198
|
+
ads_calld_->xds_client()->engine()->Cancel(*timer_handle_)) {
|
199
|
+
timer_handle_.reset();
|
200
|
+
}
|
201
|
+
}
|
202
|
+
|
203
|
+
private:
|
183
204
|
void MaybeStartTimer(RefCountedPtr<AdsCallState> ads_calld)
|
184
205
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
185
|
-
if
|
186
|
-
|
206
|
+
// Don't start timer if we've already either seen the resource or
|
207
|
+
// marked it as non-existing.
|
208
|
+
// Note: There are edge cases where we can have seen the resource
|
209
|
+
// before we have sent the initial subscription request, such as
|
210
|
+
// when we unsubscribe and then resubscribe to a given resource
|
211
|
+
// and then get a response containing that resource, all while a
|
212
|
+
// send_message op is in flight.
|
213
|
+
if (resource_seen_) return;
|
214
|
+
// Don't start timer if we haven't yet sent the initial subscription
|
215
|
+
// request for the resource.
|
216
|
+
if (!subscription_sent_) return;
|
217
|
+
// Don't start timer if it's already running.
|
218
|
+
if (timer_handle_.has_value()) return;
|
187
219
|
// Check if we already have a cached version of this resource
|
188
220
|
// (i.e., if this is the initial request for the resource after an
|
189
221
|
// ADS stream restart). If so, we don't start the timer, because
|
@@ -195,7 +227,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
195
227
|
if (state.resource != nullptr) return;
|
196
228
|
// Start timer.
|
197
229
|
ads_calld_ = std::move(ads_calld);
|
198
|
-
timer_handle_ =
|
230
|
+
timer_handle_ = ads_calld_->xds_client()->engine()->RunAfter(
|
199
231
|
ads_calld_->xds_client()->request_timeout_,
|
200
232
|
[self = Ref(DEBUG_LOCATION, "timer")]() {
|
201
233
|
ApplicationCallbackExecCtx callback_exec_ctx;
|
@@ -204,49 +236,28 @@ class XdsClient::ChannelState::AdsCallState
|
|
204
236
|
});
|
205
237
|
}
|
206
238
|
|
207
|
-
void MaybeCancelTimer() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
208
|
-
// If the timer hasn't been started yet, make sure we don't start
|
209
|
-
// it later. This can happen if the last watch for an LDS or CDS
|
210
|
-
// resource is cancelled and then restarted, both while an ADS
|
211
|
-
// request for a different resource type is being sent (causing
|
212
|
-
// the unsubscription and then resubscription requests to be
|
213
|
-
// queued), and then we get a response for the LDS or CDS resource.
|
214
|
-
// In that case, we would call MaybeCancelTimer() when we receive the
|
215
|
-
// response and then MaybeStartTimer() when we finally send the new
|
216
|
-
// LDS or CDS request, thus causing the timer to fire when it shouldn't.
|
217
|
-
// For details, see https://github.com/grpc/grpc/issues/29583.
|
218
|
-
// TODO(roth): Find a way to write a test for this case.
|
219
|
-
timer_start_needed_ = false;
|
220
|
-
if (timer_handle_.has_value()) {
|
221
|
-
GetDefaultEventEngine()->Cancel(*timer_handle_);
|
222
|
-
timer_handle_.reset();
|
223
|
-
}
|
224
|
-
}
|
225
|
-
|
226
|
-
private:
|
227
239
|
void OnTimer() {
|
240
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
241
|
+
gpr_log(GPR_INFO,
|
242
|
+
"[xds_client %p] xds server %s: timeout obtaining resource "
|
243
|
+
"{type=%s name=%s} from xds server",
|
244
|
+
ads_calld_->xds_client(),
|
245
|
+
ads_calld_->chand()->server_.server_uri().c_str(),
|
246
|
+
std::string(type_->type_url()).c_str(),
|
247
|
+
XdsClient::ConstructFullXdsResourceName(
|
248
|
+
name_.authority, type_->type_url(), name_.key)
|
249
|
+
.c_str());
|
250
|
+
}
|
228
251
|
{
|
229
252
|
MutexLock lock(&ads_calld_->xds_client()->mu_);
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
std::string(type_->type_url()).c_str(),
|
239
|
-
XdsClient::ConstructFullXdsResourceName(
|
240
|
-
name_.authority, type_->type_url(), name_.key)
|
241
|
-
.c_str());
|
242
|
-
}
|
243
|
-
auto& authority_state =
|
244
|
-
ads_calld_->xds_client()->authority_state_map_[name_.authority];
|
245
|
-
ResourceState& state = authority_state.resource_map[type_][name_.key];
|
246
|
-
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
247
|
-
ads_calld_->xds_client()->NotifyWatchersOnResourceDoesNotExist(
|
248
|
-
state.watchers);
|
249
|
-
}
|
253
|
+
timer_handle_.reset();
|
254
|
+
resource_seen_ = true;
|
255
|
+
auto& authority_state =
|
256
|
+
ads_calld_->xds_client()->authority_state_map_[name_.authority];
|
257
|
+
ResourceState& state = authority_state.resource_map[type_][name_.key];
|
258
|
+
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
259
|
+
ads_calld_->xds_client()->NotifyWatchersOnResourceDoesNotExist(
|
260
|
+
state.watchers);
|
250
261
|
}
|
251
262
|
ads_calld_->xds_client()->work_serializer_.DrainQueue();
|
252
263
|
ads_calld_.reset();
|
@@ -256,7 +267,13 @@ class XdsClient::ChannelState::AdsCallState
|
|
256
267
|
const XdsResourceName name_;
|
257
268
|
|
258
269
|
RefCountedPtr<AdsCallState> ads_calld_;
|
259
|
-
|
270
|
+
// True if we have sent the initial subscription request for this
|
271
|
+
// resource on this ADS stream.
|
272
|
+
bool subscription_sent_ ABSL_GUARDED_BY(&XdsClient::mu_) = false;
|
273
|
+
// True if we have either (a) seen the resource in a response on this
|
274
|
+
// stream or (b) declared the resource to not exist due to the timer
|
275
|
+
// firing.
|
276
|
+
bool resource_seen_ ABSL_GUARDED_BY(&XdsClient::mu_) = false;
|
260
277
|
absl::optional<EventEngine::TaskHandle> timer_handle_
|
261
278
|
ABSL_GUARDED_BY(&XdsClient::mu_);
|
262
279
|
};
|
@@ -311,7 +328,9 @@ class XdsClient::ChannelState::AdsCallState
|
|
311
328
|
|
312
329
|
bool sent_initial_message_ = false;
|
313
330
|
bool seen_response_ = false;
|
314
|
-
|
331
|
+
|
332
|
+
const XdsResourceType* send_message_pending_
|
333
|
+
ABSL_GUARDED_BY(&XdsClient::mu_) = nullptr;
|
315
334
|
|
316
335
|
// Resource types for which requests need to be sent.
|
317
336
|
std::set<const XdsResourceType*> buffered_requests_;
|
@@ -592,7 +611,7 @@ void XdsClient::ChannelState::RetryableCall<T>::Orphan() {
|
|
592
611
|
shutting_down_ = true;
|
593
612
|
calld_.reset();
|
594
613
|
if (timer_handle_.has_value()) {
|
595
|
-
|
614
|
+
chand()->xds_client()->engine()->Cancel(*timer_handle_);
|
596
615
|
timer_handle_.reset();
|
597
616
|
}
|
598
617
|
this->Unref(DEBUG_LOCATION, "RetryableCall+orphaned");
|
@@ -635,7 +654,7 @@ void XdsClient::ChannelState::RetryableCall<T>::StartRetryTimerLocked() {
|
|
635
654
|
chand()->xds_client(), chand()->server_.server_uri().c_str(),
|
636
655
|
timeout.millis());
|
637
656
|
}
|
638
|
-
timer_handle_ =
|
657
|
+
timer_handle_ = chand()->xds_client()->engine()->RunAfter(
|
639
658
|
timeout,
|
640
659
|
[self = this->Ref(DEBUG_LOCATION, "RetryableCall+retry_timer_start")]() {
|
641
660
|
ApplicationCallbackExecCtx callback_exec_ctx;
|
@@ -722,8 +741,7 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
|
|
722
741
|
"resource index ", idx, ": ",
|
723
742
|
resource_name.empty() ? "" : absl::StrCat(resource_name, ": "));
|
724
743
|
// Check the type_url of the resource.
|
725
|
-
|
726
|
-
if (!result_.type->IsType(type_url, &is_v2)) {
|
744
|
+
if (result_.type_url != type_url) {
|
727
745
|
result_.errors.emplace_back(
|
728
746
|
absl::StrCat(error_prefix, "incorrect resource type ", type_url,
|
729
747
|
" (should be ", result_.type_url, ")"));
|
@@ -734,7 +752,7 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
|
|
734
752
|
xds_client(), ads_call_state_->chand()->server_, &grpc_xds_client_trace,
|
735
753
|
xds_client()->symtab_.ptr(), arena};
|
736
754
|
XdsResourceType::DecodeResult decode_result =
|
737
|
-
result_.type->Decode(context, serialized_resource
|
755
|
+
result_.type->Decode(context, serialized_resource);
|
738
756
|
// If we didn't already have the resource name from the Resource
|
739
757
|
// wrapper, try to get it from the decoding result.
|
740
758
|
if (resource_name.empty()) {
|
@@ -772,7 +790,7 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
|
|
772
790
|
if (it != timer_it->second.subscribed_resources.end()) {
|
773
791
|
auto res_it = it->second.find(parsed_resource_name->key);
|
774
792
|
if (res_it != it->second.end()) {
|
775
|
-
res_it->second->
|
793
|
+
res_it->second->MarkSeen();
|
776
794
|
}
|
777
795
|
}
|
778
796
|
}
|
@@ -875,13 +893,10 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
875
893
|
GPR_ASSERT(xds_client() != nullptr);
|
876
894
|
// Init the ADS call.
|
877
895
|
const char* method =
|
878
|
-
|
879
|
-
|
880
|
-
"StreamAggregatedResources"
|
881
|
-
: "/envoy.service.discovery.v2.AggregatedDiscoveryService/"
|
882
|
-
"StreamAggregatedResources";
|
896
|
+
"/envoy.service.discovery.v3.AggregatedDiscoveryService/"
|
897
|
+
"StreamAggregatedResources";
|
883
898
|
call_ = chand()->transport_->CreateStreamingCall(
|
884
|
-
method,
|
899
|
+
method, std::make_unique<StreamEventHandler>(
|
885
900
|
// Passing the initial ref here. This ref will go away when
|
886
901
|
// the StreamEventHandler is destroyed.
|
887
902
|
RefCountedPtr<AdsCallState>(this)));
|
@@ -926,15 +941,13 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
926
941
|
const XdsResourceType* type)
|
927
942
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
928
943
|
// Buffer message sending if an existing message is in flight.
|
929
|
-
if (send_message_pending_) {
|
944
|
+
if (send_message_pending_ != nullptr) {
|
930
945
|
buffered_requests_.insert(type);
|
931
946
|
return;
|
932
947
|
}
|
933
948
|
auto& state = state_map_[type];
|
934
949
|
std::string serialized_message = xds_client()->api_.CreateAdsRequest(
|
935
|
-
chand()->
|
936
|
-
chand()->server_.ShouldUseV3() ? type->type_url() : type->v2_type_url(),
|
937
|
-
chand()->resource_type_version_map_[type], state.nonce,
|
950
|
+
type->type_url(), chand()->resource_type_version_map_[type], state.nonce,
|
938
951
|
ResourceNamesForRequest(type), state.status, !sent_initial_message_);
|
939
952
|
sent_initial_message_ = true;
|
940
953
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -948,7 +961,7 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
948
961
|
}
|
949
962
|
state.status = absl::OkStatus();
|
950
963
|
call_->SendMessage(std::move(serialized_message));
|
951
|
-
send_message_pending_ =
|
964
|
+
send_message_pending_ = type;
|
952
965
|
}
|
953
966
|
|
954
967
|
void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
|
@@ -981,7 +994,18 @@ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
|
981
994
|
|
982
995
|
void XdsClient::ChannelState::AdsCallState::OnRequestSent(bool ok) {
|
983
996
|
MutexLock lock(&xds_client()->mu_);
|
984
|
-
|
997
|
+
// For each resource that was in the message we just sent, start the
|
998
|
+
// resource timer if needed.
|
999
|
+
if (ok) {
|
1000
|
+
auto& resource_type_state = state_map_[send_message_pending_];
|
1001
|
+
for (const auto& p : resource_type_state.subscribed_resources) {
|
1002
|
+
for (auto& q : p.second) {
|
1003
|
+
q.second->MaybeMarkSubscriptionSendComplete(
|
1004
|
+
Ref(DEBUG_LOCATION, "ResourceTimer"));
|
1005
|
+
}
|
1006
|
+
}
|
1007
|
+
}
|
1008
|
+
send_message_pending_ = nullptr;
|
985
1009
|
if (ok && IsCurrentCallOnChannel()) {
|
986
1010
|
// Continue to send another pending message if any.
|
987
1011
|
// TODO(roth): The current code to handle buffered messages has the
|
@@ -1007,8 +1031,7 @@ void XdsClient::ChannelState::AdsCallState::OnRecvMessage(
|
|
1007
1031
|
if (!IsCurrentCallOnChannel()) return;
|
1008
1032
|
// Parse and validate the response.
|
1009
1033
|
AdsResponseParser parser(this);
|
1010
|
-
absl::Status status =
|
1011
|
-
xds_client()->api_.ParseAdsResponse(chand()->server_, payload, &parser);
|
1034
|
+
absl::Status status = xds_client()->api_.ParseAdsResponse(payload, &parser);
|
1012
1035
|
if (!status.ok()) {
|
1013
1036
|
// Ignore unparsable response.
|
1014
1037
|
gpr_log(GPR_ERROR,
|
@@ -1076,6 +1099,8 @@ void XdsClient::ChannelState::AdsCallState::OnRecvMessage(
|
|
1076
1099
|
}
|
1077
1100
|
} else {
|
1078
1101
|
resource_state.resource.reset();
|
1102
|
+
resource_state.meta.client_status =
|
1103
|
+
XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
1079
1104
|
xds_client()->NotifyWatchersOnResourceDoesNotExist(
|
1080
1105
|
resource_state.watchers);
|
1081
1106
|
}
|
@@ -1083,8 +1108,8 @@ void XdsClient::ChannelState::AdsCallState::OnRecvMessage(
|
|
1083
1108
|
}
|
1084
1109
|
}
|
1085
1110
|
}
|
1086
|
-
// If we had valid resources, update the version.
|
1087
|
-
if (result.have_valid_resources) {
|
1111
|
+
// If we had valid resources or the update was empty, update the version.
|
1112
|
+
if (result.have_valid_resources || result.errors.empty()) {
|
1088
1113
|
chand()->resource_type_version_map_[result.type] =
|
1089
1114
|
std::move(result.version);
|
1090
1115
|
// Start load reporting if needed.
|
@@ -1112,13 +1137,26 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
|
|
1112
1137
|
xds_client(), chand()->server_.server_uri().c_str(), chand(),
|
1113
1138
|
this, call_.get(), status.ToString().c_str());
|
1114
1139
|
}
|
1140
|
+
// Cancel any does-not-exist timers that may be pending.
|
1141
|
+
for (const auto& p : state_map_) {
|
1142
|
+
for (const auto& q : p.second.subscribed_resources) {
|
1143
|
+
for (auto& r : q.second) {
|
1144
|
+
r.second->MaybeCancelTimer();
|
1145
|
+
}
|
1146
|
+
}
|
1147
|
+
}
|
1115
1148
|
// Ignore status from a stale call.
|
1116
1149
|
if (IsCurrentCallOnChannel()) {
|
1117
1150
|
// Try to restart the call.
|
1118
1151
|
parent_->OnCallFinishedLocked();
|
1119
|
-
//
|
1120
|
-
|
1121
|
-
|
1152
|
+
// If we didn't receive a response on the stream, report the
|
1153
|
+
// stream failure as a connectivity failure, which will report the
|
1154
|
+
// error to all watchers of resources on this channel.
|
1155
|
+
if (!seen_response_) {
|
1156
|
+
chand()->SetChannelStatusLocked(absl::UnavailableError(
|
1157
|
+
absl::StrCat("xDS call failed with no responses received; status: ",
|
1158
|
+
status.ToString())));
|
1159
|
+
}
|
1122
1160
|
}
|
1123
1161
|
}
|
1124
1162
|
xds_client()->work_serializer_.DrainQueue();
|
@@ -1144,7 +1182,7 @@ XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
|
|
1144
1182
|
resource_names.emplace_back(XdsClient::ConstructFullXdsResourceName(
|
1145
1183
|
authority, type->type_url(), resource_key));
|
1146
1184
|
OrphanablePtr<ResourceTimer>& resource_timer = p.second;
|
1147
|
-
resource_timer->
|
1185
|
+
resource_timer->MarkSubscriptionSendStarted();
|
1148
1186
|
}
|
1149
1187
|
}
|
1150
1188
|
}
|
@@ -1157,7 +1195,7 @@ XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
|
|
1157
1195
|
|
1158
1196
|
void XdsClient::ChannelState::LrsCallState::Reporter::Orphan() {
|
1159
1197
|
if (timer_handle_.has_value() &&
|
1160
|
-
|
1198
|
+
xds_client()->engine()->Cancel(*timer_handle_)) {
|
1161
1199
|
timer_handle_.reset();
|
1162
1200
|
Unref(DEBUG_LOCATION, "Orphan");
|
1163
1201
|
}
|
@@ -1165,7 +1203,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::Orphan() {
|
|
1165
1203
|
|
1166
1204
|
void XdsClient::ChannelState::LrsCallState::Reporter::
|
1167
1205
|
ScheduleNextReportLocked() {
|
1168
|
-
timer_handle_ =
|
1206
|
+
timer_handle_ = xds_client()->engine()->RunAfter(report_interval_, [this]() {
|
1169
1207
|
ApplicationCallbackExecCtx callback_exec_ctx;
|
1170
1208
|
ExecCtx exec_ctx;
|
1171
1209
|
if (OnNextReportTimer()) {
|
@@ -1264,13 +1302,10 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1264
1302
|
// activity in xds_client()->interested_parties_, which is comprised of
|
1265
1303
|
// the polling entities from client_channel.
|
1266
1304
|
GPR_ASSERT(xds_client() != nullptr);
|
1267
|
-
const char* method =
|
1268
|
-
|
1269
|
-
"LoadReportingService/StreamLoadStats"
|
1270
|
-
: "/envoy.service.load_stats.v2."
|
1271
|
-
"LoadReportingService/StreamLoadStats";
|
1305
|
+
const char* method =
|
1306
|
+
"/envoy.service.load_stats.v3.LoadReportingService/StreamLoadStats";
|
1272
1307
|
call_ = chand()->transport_->CreateStreamingCall(
|
1273
|
-
method,
|
1308
|
+
method, std::make_unique<StreamEventHandler>(
|
1274
1309
|
// Passing the initial ref here. This ref will go away when
|
1275
1310
|
// the StreamEventHandler is destroyed.
|
1276
1311
|
RefCountedPtr<LrsCallState>(this)));
|
@@ -1284,8 +1319,7 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1284
1319
|
call_.get());
|
1285
1320
|
}
|
1286
1321
|
// Send the initial request.
|
1287
|
-
std::string serialized_payload =
|
1288
|
-
xds_client()->api_.CreateLrsInitialRequest(chand()->server_);
|
1322
|
+
std::string serialized_payload = xds_client()->api_.CreateLrsInitialRequest();
|
1289
1323
|
call_->SendMessage(std::move(serialized_payload));
|
1290
1324
|
send_message_pending_ = true;
|
1291
1325
|
}
|
@@ -1436,7 +1470,8 @@ XdsClient::XdsClient(std::unique_ptr<XdsBootstrap> bootstrap,
|
|
1436
1470
|
transport_factory_(std::move(transport_factory)),
|
1437
1471
|
request_timeout_(resource_request_timeout),
|
1438
1472
|
xds_federation_enabled_(XdsFederationEnabled()),
|
1439
|
-
api_(this, &grpc_xds_client_trace, bootstrap_->node(), &symtab_)
|
1473
|
+
api_(this, &grpc_xds_client_trace, bootstrap_->node(), &symtab_),
|
1474
|
+
engine_(grpc_event_engine::experimental::GetDefaultEventEngine()) {
|
1440
1475
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1441
1476
|
gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
|
1442
1477
|
}
|
@@ -1654,16 +1689,13 @@ void XdsClient::MaybeRegisterResourceTypeLocked(
|
|
1654
1689
|
return;
|
1655
1690
|
}
|
1656
1691
|
resource_types_.emplace(resource_type->type_url(), resource_type);
|
1657
|
-
|
1658
|
-
resource_type->InitUpbSymtab(symtab_.ptr());
|
1692
|
+
resource_type->InitUpbSymtab(this, symtab_.ptr());
|
1659
1693
|
}
|
1660
1694
|
|
1661
1695
|
const XdsResourceType* XdsClient::GetResourceTypeLocked(
|
1662
1696
|
absl::string_view resource_type) {
|
1663
1697
|
auto it = resource_types_.find(resource_type);
|
1664
1698
|
if (it != resource_types_.end()) return it->second;
|
1665
|
-
auto it2 = v2_resource_types_.find(resource_type);
|
1666
|
-
if (it2 != v2_resource_types_.end()) return it2->second;
|
1667
1699
|
return nullptr;
|
1668
1700
|
}
|
1669
1701
|
|
@@ -1681,7 +1713,7 @@ absl::StatusOr<XdsClient::XdsResourceName> XdsClient::ParseXdsResourceName(
|
|
1681
1713
|
// Split the resource type off of the path to get the id.
|
1682
1714
|
std::pair<absl::string_view, absl::string_view> path_parts = absl::StrSplit(
|
1683
1715
|
absl::StripPrefix(uri->path(), "/"), absl::MaxSplits('/', 1));
|
1684
|
-
if (
|
1716
|
+
if (type->type_url() != path_parts.first) {
|
1685
1717
|
return absl::InvalidArgumentError(
|
1686
1718
|
"xdstp URI path must indicate valid xDS resource type");
|
1687
1719
|
}
|
@@ -32,6 +32,8 @@
|
|
32
32
|
#include "absl/strings/string_view.h"
|
33
33
|
#include "upb/def.hpp"
|
34
34
|
|
35
|
+
#include <grpc/event_engine/event_engine.h>
|
36
|
+
|
35
37
|
#include "src/core/ext/xds/xds_api.h"
|
36
38
|
#include "src/core/ext/xds/xds_bootstrap.h"
|
37
39
|
#include "src/core/ext/xds/xds_client_stats.h"
|
@@ -143,6 +145,10 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
143
145
|
// implementation.
|
144
146
|
std::string DumpClientConfigBinary();
|
145
147
|
|
148
|
+
grpc_event_engine::experimental::EventEngine* engine() {
|
149
|
+
return engine_.get();
|
150
|
+
}
|
151
|
+
|
146
152
|
private:
|
147
153
|
struct XdsResourceKey {
|
148
154
|
std::string id;
|
@@ -301,14 +307,13 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
301
307
|
const bool xds_federation_enabled_;
|
302
308
|
XdsApi api_;
|
303
309
|
WorkSerializer work_serializer_;
|
310
|
+
std::shared_ptr<grpc_event_engine::experimental::EventEngine> engine_;
|
304
311
|
|
305
312
|
Mutex mu_;
|
306
313
|
|
307
314
|
// Stores resource type objects seen by type URL.
|
308
315
|
std::map<absl::string_view /*resource_type*/, const XdsResourceType*>
|
309
316
|
resource_types_ ABSL_GUARDED_BY(mu_);
|
310
|
-
std::map<absl::string_view /*v2_resource_type*/, const XdsResourceType*>
|
311
|
-
v2_resource_types_ ABSL_GUARDED_BY(mu_);
|
312
317
|
upb::SymbolTable symtab_ ABSL_GUARDED_BY(mu_);
|
313
318
|
|
314
319
|
// Map of existing xDS server channels.
|
@@ -37,8 +37,6 @@
|
|
37
37
|
#include "src/core/ext/xds/xds_bootstrap.h"
|
38
38
|
#include "src/core/ext/xds/xds_bootstrap_grpc.h"
|
39
39
|
#include "src/core/ext/xds/xds_channel_args.h"
|
40
|
-
#include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
|
41
|
-
#include "src/core/ext/xds/xds_http_filters.h"
|
42
40
|
#include "src/core/ext/xds/xds_transport.h"
|
43
41
|
#include "src/core/ext/xds/xds_transport_grpc.h"
|
44
42
|
#include "src/core/lib/channel/channel_args.h"
|
@@ -52,8 +50,8 @@
|
|
52
50
|
#include "src/core/lib/iomgr/error.h"
|
53
51
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
54
52
|
#include "src/core/lib/iomgr/load_file.h"
|
53
|
+
#include "src/core/lib/slice/slice.h"
|
55
54
|
#include "src/core/lib/slice/slice_internal.h"
|
56
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
57
55
|
#include "src/core/lib/transport/error_utils.h"
|
58
56
|
|
59
57
|
namespace grpc_core {
|
@@ -64,30 +62,13 @@ namespace grpc_core {
|
|
64
62
|
|
65
63
|
namespace {
|
66
64
|
|
67
|
-
Mutex* g_mu =
|
65
|
+
Mutex* g_mu = new Mutex;
|
68
66
|
const grpc_channel_args* g_channel_args ABSL_GUARDED_BY(*g_mu) = nullptr;
|
69
67
|
GrpcXdsClient* g_xds_client ABSL_GUARDED_BY(*g_mu) = nullptr;
|
70
68
|
char* g_fallback_bootstrap_config ABSL_GUARDED_BY(*g_mu) = nullptr;
|
71
69
|
|
72
70
|
} // namespace
|
73
71
|
|
74
|
-
void XdsClientGlobalInit() {
|
75
|
-
g_mu = new Mutex;
|
76
|
-
XdsHttpFilterRegistry::Init();
|
77
|
-
XdsClusterSpecifierPluginRegistry::Init();
|
78
|
-
}
|
79
|
-
|
80
|
-
// TODO(roth): Find a better way to clear the fallback config that does
|
81
|
-
// not require using ABSL_NO_THREAD_SAFETY_ANALYSIS.
|
82
|
-
void XdsClientGlobalShutdown() ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
83
|
-
gpr_free(g_fallback_bootstrap_config);
|
84
|
-
g_fallback_bootstrap_config = nullptr;
|
85
|
-
delete g_mu;
|
86
|
-
g_mu = nullptr;
|
87
|
-
XdsHttpFilterRegistry::Shutdown();
|
88
|
-
XdsClusterSpecifierPluginRegistry::Shutdown();
|
89
|
-
}
|
90
|
-
|
91
72
|
namespace {
|
92
73
|
|
93
74
|
absl::StatusOr<std::string> GetBootstrapContents(const char* fallback_config) {
|
@@ -103,9 +84,9 @@ absl::StatusOr<std::string> GetBootstrapContents(const char* fallback_config) {
|
|
103
84
|
grpc_slice contents;
|
104
85
|
grpc_error_handle error =
|
105
86
|
grpc_load_file(path->c_str(), /*add_null_terminator=*/true, &contents);
|
106
|
-
if (!
|
87
|
+
if (!error.ok()) return grpc_error_to_absl_status(error);
|
107
88
|
std::string contents_str(StringViewFromSlice(contents));
|
108
|
-
|
89
|
+
CSliceUnref(contents);
|
109
90
|
return contents_str;
|
110
91
|
}
|
111
92
|
// Next, try GRPC_XDS_BOOTSTRAP_CONFIG env var.
|
@@ -218,7 +199,7 @@ void SetXdsFallbackBootstrapConfig(const char* config) {
|
|
218
199
|
grpc_slice grpc_dump_xds_configs(void) {
|
219
200
|
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
220
201
|
grpc_core::ExecCtx exec_ctx;
|
221
|
-
grpc_error_handle error
|
202
|
+
grpc_error_handle error;
|
222
203
|
auto xds_client = grpc_core::GrpcXdsClient::GetOrCreate(
|
223
204
|
grpc_core::ChannelArgs(), "grpc_dump_xds_configs()");
|
224
205
|
if (!xds_client.ok()) {
|