grpc 1.50.0.pre1 → 1.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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/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 +57 -20
- 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
@@ -19,13 +19,11 @@
|
|
19
19
|
#include <string.h>
|
20
20
|
|
21
21
|
#include <cstdint>
|
22
|
-
#include <map>
|
23
22
|
#include <memory>
|
24
23
|
#include <random>
|
25
24
|
#include <string>
|
26
25
|
#include <utility>
|
27
26
|
|
28
|
-
#include "absl/memory/memory.h"
|
29
27
|
#include "absl/status/status.h"
|
30
28
|
#include "absl/status/statusor.h"
|
31
29
|
#include "absl/strings/str_cat.h"
|
@@ -39,6 +37,7 @@
|
|
39
37
|
#include <grpc/impl/codegen/grpc_types.h>
|
40
38
|
#include <grpc/support/log.h>
|
41
39
|
|
40
|
+
#include "src/core/ext/xds/xds_bootstrap.h"
|
42
41
|
#include "src/core/ext/xds/xds_client_grpc.h"
|
43
42
|
#include "src/core/lib/channel/channel_args.h"
|
44
43
|
#include "src/core/lib/config/core_configuration.h"
|
@@ -46,6 +45,7 @@
|
|
46
45
|
#include "src/core/lib/gprpp/env.h"
|
47
46
|
#include "src/core/lib/gprpp/orphanable.h"
|
48
47
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
48
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
49
49
|
#include "src/core/lib/gprpp/time.h"
|
50
50
|
#include "src/core/lib/gprpp/work_serializer.h"
|
51
51
|
#include "src/core/lib/http/httpcli.h"
|
@@ -66,6 +66,8 @@ namespace grpc_core {
|
|
66
66
|
|
67
67
|
namespace {
|
68
68
|
|
69
|
+
const char* kC2PAuthority = "traffic-director-c2p.xds.googleapis.com";
|
70
|
+
|
69
71
|
class GoogleCloud2ProdResolver : public Resolver {
|
70
72
|
public:
|
71
73
|
explicit GoogleCloud2ProdResolver(ResolverArgs args);
|
@@ -88,7 +90,7 @@ class GoogleCloud2ProdResolver : public Resolver {
|
|
88
90
|
private:
|
89
91
|
static void OnHttpRequestDone(void* arg, grpc_error_handle error);
|
90
92
|
|
91
|
-
// If error is not
|
93
|
+
// If error is not absl::OkStatus(), then it's not safe to look at response.
|
92
94
|
virtual void OnDone(GoogleCloud2ProdResolver* resolver,
|
93
95
|
const grpc_http_response* response,
|
94
96
|
grpc_error_handle error) = 0;
|
@@ -189,7 +191,6 @@ void GoogleCloud2ProdResolver::MetadataQuery::OnHttpRequestDone(
|
|
189
191
|
auto* self = static_cast<MetadataQuery*>(arg);
|
190
192
|
// Hop back into WorkSerializer to call OnDone().
|
191
193
|
// Note: We implicitly pass our ref to the callback here.
|
192
|
-
(void)GRPC_ERROR_REF(error);
|
193
194
|
self->resolver_->work_serializer_->Run(
|
194
195
|
[self, error]() {
|
195
196
|
self->OnDone(self->resolver_.get(), &self->response_, error);
|
@@ -212,10 +213,9 @@ void GoogleCloud2ProdResolver::ZoneQuery::OnDone(
|
|
212
213
|
GoogleCloud2ProdResolver* resolver, const grpc_http_response* response,
|
213
214
|
grpc_error_handle error) {
|
214
215
|
absl::StatusOr<std::string> zone;
|
215
|
-
if (!
|
216
|
-
zone = absl::UnknownError(
|
217
|
-
|
218
|
-
grpc_error_std_string(error)));
|
216
|
+
if (!error.ok()) {
|
217
|
+
zone = absl::UnknownError(absl::StrCat(
|
218
|
+
"error fetching zone from metadata server: ", StatusToString(error)));
|
219
219
|
} else if (response->status != 200) {
|
220
220
|
zone = absl::UnknownError(absl::StrFormat(
|
221
221
|
"zone query received non-200 status: %d", response->status));
|
@@ -236,7 +236,6 @@ void GoogleCloud2ProdResolver::ZoneQuery::OnDone(
|
|
236
236
|
} else {
|
237
237
|
resolver->ZoneQueryDone(std::move(*zone));
|
238
238
|
}
|
239
|
-
GRPC_ERROR_UNREF(error);
|
240
239
|
}
|
241
240
|
|
242
241
|
//
|
@@ -253,18 +252,22 @@ GoogleCloud2ProdResolver::IPv6Query::IPv6Query(
|
|
253
252
|
void GoogleCloud2ProdResolver::IPv6Query::OnDone(
|
254
253
|
GoogleCloud2ProdResolver* resolver, const grpc_http_response* response,
|
255
254
|
grpc_error_handle error) {
|
256
|
-
if (!
|
255
|
+
if (!error.ok()) {
|
257
256
|
gpr_log(GPR_ERROR, "error fetching IPv6 address from metadata server: %s",
|
258
|
-
|
257
|
+
StatusToString(error).c_str());
|
259
258
|
}
|
260
|
-
resolver->IPv6QueryDone(
|
261
|
-
GRPC_ERROR_UNREF(error);
|
259
|
+
resolver->IPv6QueryDone(error.ok() && response->status == 200);
|
262
260
|
}
|
263
261
|
|
264
262
|
//
|
265
263
|
// GoogleCloud2ProdResolver
|
266
264
|
//
|
267
265
|
|
266
|
+
bool XdsBootstrapConfigured() {
|
267
|
+
return GetEnv("GRPC_XDS_BOOTSTRAP").has_value() ||
|
268
|
+
GetEnv("GRPC_XDS_BOOTSTRAP_CONFIG").has_value();
|
269
|
+
}
|
270
|
+
|
268
271
|
GoogleCloud2ProdResolver::GoogleCloud2ProdResolver(ResolverArgs args)
|
269
272
|
: resource_quota_(args.args.GetObjectRef<ResourceQuota>()),
|
270
273
|
work_serializer_(std::move(args.work_serializer)),
|
@@ -278,18 +281,19 @@ GoogleCloud2ProdResolver::GoogleCloud2ProdResolver(ResolverArgs args)
|
|
278
281
|
.value_or(false);
|
279
282
|
const bool running_on_gcp =
|
280
283
|
test_only_pretend_running_on_gcp || grpc_alts_is_running_on_gcp();
|
284
|
+
const bool federation_enabled = XdsFederationEnabled();
|
281
285
|
if (!running_on_gcp ||
|
282
|
-
// If the client is already using xDS
|
283
|
-
// they may be talking to a completely
|
284
|
-
// want to.
|
285
|
-
// TODO(roth): When we
|
286
|
-
|
287
|
-
|
286
|
+
// If the client is already using xDS and federation is not enabled,
|
287
|
+
// we can't use it here, because they may be talking to a completely
|
288
|
+
// different xDS server than we want to.
|
289
|
+
// TODO(roth): When we remove xDS federation env var protection,
|
290
|
+
// remove this constraint.
|
291
|
+
(!federation_enabled && XdsBootstrapConfigured())) {
|
288
292
|
using_dns_ = true;
|
289
293
|
child_resolver_ =
|
290
294
|
CoreConfiguration::Get().resolver_registry().CreateResolver(
|
291
|
-
absl::StrCat("dns:", name_to_resolve)
|
292
|
-
|
295
|
+
absl::StrCat("dns:", name_to_resolve), args.args, args.pollset_set,
|
296
|
+
work_serializer_, std::move(args.result_handler));
|
293
297
|
GPR_ASSERT(child_resolver_ != nullptr);
|
294
298
|
return;
|
295
299
|
}
|
@@ -302,9 +306,13 @@ GoogleCloud2ProdResolver::GoogleCloud2ProdResolver(ResolverArgs args)
|
|
302
306
|
metadata_server_name_ = std::move(*test_only_metadata_server_override);
|
303
307
|
}
|
304
308
|
// Create xds resolver.
|
309
|
+
std::string xds_uri =
|
310
|
+
federation_enabled
|
311
|
+
? absl::StrCat("xds://", kC2PAuthority, "/", name_to_resolve)
|
312
|
+
: absl::StrCat("xds:", name_to_resolve);
|
305
313
|
child_resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
|
306
|
-
|
307
|
-
|
314
|
+
xds_uri, args.args, args.pollset_set, work_serializer_,
|
315
|
+
std::move(args.result_handler));
|
308
316
|
GPR_ASSERT(child_resolver_ != nullptr);
|
309
317
|
}
|
310
318
|
|
@@ -393,7 +401,7 @@ void GoogleCloud2ProdResolver::StartXdsResolver() {
|
|
393
401
|
{"xds_servers", xds_server},
|
394
402
|
{"authorities",
|
395
403
|
Json::Object{
|
396
|
-
{
|
404
|
+
{kC2PAuthority,
|
397
405
|
Json::Object{
|
398
406
|
{"xds_servers", std::move(xds_server)},
|
399
407
|
}},
|
@@ -456,9 +464,9 @@ class ExperimentalGoogleCloud2ProdResolverFactory : public ResolverFactory {
|
|
456
464
|
|
457
465
|
void RegisterCloud2ProdResolver(CoreConfiguration::Builder* builder) {
|
458
466
|
builder->resolver_registry()->RegisterResolverFactory(
|
459
|
-
|
467
|
+
std::make_unique<GoogleCloud2ProdResolverFactory>());
|
460
468
|
builder->resolver_registry()->RegisterResolverFactory(
|
461
|
-
|
469
|
+
std::make_unique<ExperimentalGoogleCloud2ProdResolverFactory>());
|
462
470
|
}
|
463
471
|
|
464
472
|
} // namespace grpc_core
|
@@ -36,6 +36,7 @@
|
|
36
36
|
#include "src/core/lib/channel/channel_args.h"
|
37
37
|
#include "src/core/lib/gprpp/debug_location.h"
|
38
38
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
39
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
39
40
|
#include "src/core/lib/gprpp/work_serializer.h"
|
40
41
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
41
42
|
#include "src/core/lib/iomgr/timer.h"
|
@@ -106,7 +107,6 @@ void PollingResolver::ShutdownLocked() {
|
|
106
107
|
|
107
108
|
void PollingResolver::OnNextResolution(void* arg, grpc_error_handle error) {
|
108
109
|
auto* self = static_cast<PollingResolver*>(arg);
|
109
|
-
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
110
110
|
self->work_serializer_->Run(
|
111
111
|
[self, error]() { self->OnNextResolutionLocked(error); }, DEBUG_LOCATION);
|
112
112
|
}
|
@@ -116,14 +116,13 @@ void PollingResolver::OnNextResolutionLocked(grpc_error_handle error) {
|
|
116
116
|
gpr_log(GPR_INFO,
|
117
117
|
"[polling resolver %p] re-resolution timer fired: error=\"%s\", "
|
118
118
|
"shutdown_=%d",
|
119
|
-
this,
|
119
|
+
this, StatusToString(error).c_str(), shutdown_);
|
120
120
|
}
|
121
121
|
have_next_resolution_timer_ = false;
|
122
|
-
if (
|
122
|
+
if (error.ok() && !shutdown_) {
|
123
123
|
StartResolvingLocked();
|
124
124
|
}
|
125
125
|
Unref(DEBUG_LOCATION, "retry-timer");
|
126
|
-
GRPC_ERROR_UNREF(error);
|
127
126
|
}
|
128
127
|
|
129
128
|
void PollingResolver::OnRequestComplete(Result result) {
|
@@ -20,9 +20,7 @@
|
|
20
20
|
#include <memory>
|
21
21
|
#include <string>
|
22
22
|
#include <utility>
|
23
|
-
#include <vector>
|
24
23
|
|
25
|
-
#include "absl/memory/memory.h"
|
26
24
|
#include "absl/status/statusor.h"
|
27
25
|
#include "absl/strings/str_split.h"
|
28
26
|
#include "absl/strings/string_view.h"
|
@@ -37,7 +35,6 @@
|
|
37
35
|
#include "src/core/lib/iomgr/resolved_address.h"
|
38
36
|
#include "src/core/lib/resolver/resolver.h"
|
39
37
|
#include "src/core/lib/resolver/resolver_factory.h"
|
40
|
-
#include "src/core/lib/resolver/resolver_registry.h"
|
41
38
|
#include "src/core/lib/resolver/server_address.h"
|
42
39
|
#include "src/core/lib/uri/uri_parser.h"
|
43
40
|
|
@@ -179,14 +176,14 @@ class UnixAbstractResolverFactory : public ResolverFactory {
|
|
179
176
|
|
180
177
|
void RegisterSockaddrResolver(CoreConfiguration::Builder* builder) {
|
181
178
|
builder->resolver_registry()->RegisterResolverFactory(
|
182
|
-
|
179
|
+
std::make_unique<IPv4ResolverFactory>());
|
183
180
|
builder->resolver_registry()->RegisterResolverFactory(
|
184
|
-
|
181
|
+
std::make_unique<IPv6ResolverFactory>());
|
185
182
|
#ifdef GRPC_HAVE_UNIX_SOCKET
|
186
183
|
builder->resolver_registry()->RegisterResolverFactory(
|
187
|
-
|
184
|
+
std::make_unique<UnixResolverFactory>());
|
188
185
|
builder->resolver_registry()->RegisterResolverFactory(
|
189
|
-
|
186
|
+
std::make_unique<UnixAbstractResolverFactory>());
|
190
187
|
#endif
|
191
188
|
}
|
192
189
|
|
@@ -27,7 +27,6 @@
|
|
27
27
|
#include <utility>
|
28
28
|
#include <vector>
|
29
29
|
|
30
|
-
#include "absl/memory/memory.h"
|
31
30
|
#include "absl/meta/type_traits.h"
|
32
31
|
#include "absl/random/random.h"
|
33
32
|
#include "absl/status/status.h"
|
@@ -57,11 +56,9 @@
|
|
57
56
|
#include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
|
58
57
|
#include "src/core/ext/xds/xds_bootstrap.h"
|
59
58
|
#include "src/core/ext/xds/xds_bootstrap_grpc.h"
|
60
|
-
#include "src/core/ext/xds/xds_client.h"
|
61
59
|
#include "src/core/ext/xds/xds_client_grpc.h"
|
62
60
|
#include "src/core/ext/xds/xds_http_filters.h"
|
63
61
|
#include "src/core/ext/xds/xds_listener.h"
|
64
|
-
#include "src/core/ext/xds/xds_resource_type_impl.h"
|
65
62
|
#include "src/core/ext/xds/xds_route_config.h"
|
66
63
|
#include "src/core/ext/xds/xds_routing.h"
|
67
64
|
#include "src/core/lib/channel/channel_args.h"
|
@@ -81,11 +78,9 @@
|
|
81
78
|
#include "src/core/lib/iomgr/pollset_set.h"
|
82
79
|
#include "src/core/lib/resolver/resolver.h"
|
83
80
|
#include "src/core/lib/resolver/resolver_factory.h"
|
84
|
-
#include "src/core/lib/resolver/resolver_registry.h"
|
85
81
|
#include "src/core/lib/resolver/server_address.h"
|
86
82
|
#include "src/core/lib/resource_quota/arena.h"
|
87
83
|
#include "src/core/lib/service_config/service_config.h"
|
88
|
-
#include "src/core/lib/service_config/service_config_call_data.h"
|
89
84
|
#include "src/core/lib/service_config/service_config_impl.h"
|
90
85
|
#include "src/core/lib/slice/slice_internal.h"
|
91
86
|
#include "src/core/lib/transport/metadata_batch.h"
|
@@ -378,7 +373,7 @@ class XdsResolver : public Resolver {
|
|
378
373
|
// This will not contain the RouteConfiguration, even if it comes with the
|
379
374
|
// LDS response; instead, the relevant VirtualHost from the
|
380
375
|
// RouteConfiguration will be saved in current_virtual_host_.
|
381
|
-
XdsListenerResource current_listener_;
|
376
|
+
XdsListenerResource::HttpConnectionManager current_listener_;
|
382
377
|
|
383
378
|
std::string route_config_name_;
|
384
379
|
RouteConfigWatcher* route_config_watcher_ = nullptr;
|
@@ -469,8 +464,7 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
469
464
|
// one.
|
470
465
|
if (!route_action->max_stream_duration.has_value()) {
|
471
466
|
route_action->max_stream_duration =
|
472
|
-
resolver_->current_listener_.
|
473
|
-
.http_max_stream_duration;
|
467
|
+
resolver_->current_listener_.http_max_stream_duration;
|
474
468
|
}
|
475
469
|
Match(
|
476
470
|
route_action->action,
|
@@ -525,12 +519,14 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
525
519
|
}
|
526
520
|
}
|
527
521
|
// Populate filter list.
|
528
|
-
|
529
|
-
|
522
|
+
const auto& http_filter_registry =
|
523
|
+
static_cast<const GrpcXdsBootstrap&>(resolver_->xds_client_->bootstrap())
|
524
|
+
.http_filter_registry();
|
525
|
+
for (const auto& http_filter : resolver_->current_listener_.http_filters) {
|
530
526
|
// Find filter. This is guaranteed to succeed, because it's checked
|
531
527
|
// at config validation time in the XdsApi code.
|
532
528
|
const XdsHttpFilterImpl* filter_impl =
|
533
|
-
|
529
|
+
http_filter_registry.GetFilterForType(
|
534
530
|
http_filter.config.config_proto_type_name);
|
535
531
|
GPR_ASSERT(filter_impl != nullptr);
|
536
532
|
// Add C-core filter to list.
|
@@ -603,7 +599,9 @@ XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
|
603
599
|
}
|
604
600
|
// Handle xDS HTTP filters.
|
605
601
|
auto result = XdsRouting::GeneratePerHTTPFilterConfigs(
|
606
|
-
resolver_->
|
602
|
+
static_cast<const GrpcXdsBootstrap&>(resolver_->xds_client_->bootstrap())
|
603
|
+
.http_filter_registry(),
|
604
|
+
resolver_->current_listener_.http_filters,
|
607
605
|
resolver_->current_virtual_host_, route, cluster_weight,
|
608
606
|
resolver_->args_);
|
609
607
|
if (!result.ok()) return result.status();
|
@@ -793,7 +791,7 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
793
791
|
//
|
794
792
|
|
795
793
|
void XdsResolver::StartLocked() {
|
796
|
-
grpc_error_handle error
|
794
|
+
grpc_error_handle error;
|
797
795
|
auto xds_client = GrpcXdsClient::GetOrCreate(args_, "xds resolver");
|
798
796
|
if (!xds_client.ok()) {
|
799
797
|
gpr_log(GPR_ERROR,
|
@@ -890,39 +888,58 @@ void XdsResolver::OnListenerUpdate(XdsListenerResource listener) {
|
|
890
888
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
891
889
|
gpr_log(GPR_INFO, "[xds_resolver %p] received updated listener data", this);
|
892
890
|
}
|
893
|
-
if (xds_client_ == nullptr)
|
894
|
-
|
895
|
-
|
896
|
-
if (
|
897
|
-
|
898
|
-
|
899
|
-
XdsRouteConfigResourceType::CancelWatch(
|
900
|
-
xds_client_.get(), route_config_name_, route_config_watcher_,
|
901
|
-
/*delay_unsubscription=*/
|
902
|
-
!listener.http_connection_manager.route_config_name.empty());
|
903
|
-
route_config_watcher_ = nullptr;
|
904
|
-
}
|
905
|
-
route_config_name_ =
|
906
|
-
std::move(listener.http_connection_manager.route_config_name);
|
907
|
-
if (!route_config_name_.empty()) {
|
908
|
-
current_virtual_host_.routes.clear();
|
909
|
-
auto watcher = MakeRefCounted<RouteConfigWatcher>(Ref());
|
910
|
-
route_config_watcher_ = watcher.get();
|
911
|
-
XdsRouteConfigResourceType::StartWatch(
|
912
|
-
xds_client_.get(), route_config_name_, std::move(watcher));
|
913
|
-
}
|
914
|
-
}
|
915
|
-
current_listener_ = std::move(listener);
|
916
|
-
if (route_config_name_.empty()) {
|
917
|
-
GPR_ASSERT(
|
918
|
-
current_listener_.http_connection_manager.rds_update.has_value());
|
919
|
-
OnRouteConfigUpdate(
|
920
|
-
std::move(*current_listener_.http_connection_manager.rds_update));
|
921
|
-
} else {
|
922
|
-
// HCM may contain newer filter config. We need to propagate the update as
|
923
|
-
// config selector to the channel
|
924
|
-
GenerateResult();
|
891
|
+
if (xds_client_ == nullptr) return;
|
892
|
+
auto* hcm = absl::get_if<XdsListenerResource::HttpConnectionManager>(
|
893
|
+
&listener.listener);
|
894
|
+
if (hcm == nullptr) {
|
895
|
+
return OnError(lds_resource_name_,
|
896
|
+
absl::UnavailableError("not an API listener"));
|
925
897
|
}
|
898
|
+
current_listener_ = std::move(*hcm);
|
899
|
+
MatchMutable(
|
900
|
+
¤t_listener_.route_config,
|
901
|
+
// RDS resource name
|
902
|
+
[&](std::string* rds_name) {
|
903
|
+
// If the RDS name changed, update the RDS watcher.
|
904
|
+
// Note that this will be true on the initial update, because
|
905
|
+
// route_config_name_ will be empty.
|
906
|
+
if (route_config_name_ != *rds_name) {
|
907
|
+
// If we already had a watch (i.e., if the previous config had
|
908
|
+
// a different RDS name), stop the previous watch.
|
909
|
+
// There will be no previous watch if either (a) this is the
|
910
|
+
// initial resource update or (b) the previous Listener had an
|
911
|
+
// inlined RouteConfig.
|
912
|
+
if (route_config_watcher_ != nullptr) {
|
913
|
+
XdsRouteConfigResourceType::CancelWatch(
|
914
|
+
xds_client_.get(), route_config_name_, route_config_watcher_,
|
915
|
+
/*delay_unsubscription=*/true);
|
916
|
+
route_config_watcher_ = nullptr;
|
917
|
+
}
|
918
|
+
// Start watch for the new RDS resource name.
|
919
|
+
route_config_name_ = std::move(*rds_name);
|
920
|
+
auto watcher = MakeRefCounted<RouteConfigWatcher>(Ref());
|
921
|
+
route_config_watcher_ = watcher.get();
|
922
|
+
XdsRouteConfigResourceType::StartWatch(
|
923
|
+
xds_client_.get(), route_config_name_, std::move(watcher));
|
924
|
+
} else {
|
925
|
+
// RDS resource name has not changed, so no watch needs to be
|
926
|
+
// updated, but we still need to propagate any changes in the
|
927
|
+
// HCM config (e.g., the list of HTTP filters).
|
928
|
+
GenerateResult();
|
929
|
+
}
|
930
|
+
},
|
931
|
+
// inlined RouteConfig
|
932
|
+
[&](XdsRouteConfigResource* route_config) {
|
933
|
+
// If the previous update specified an RDS resource instead of
|
934
|
+
// having an inlined RouteConfig, we need to cancel the RDS watch.
|
935
|
+
if (route_config_watcher_ != nullptr) {
|
936
|
+
XdsRouteConfigResourceType::CancelWatch(
|
937
|
+
xds_client_.get(), route_config_name_, route_config_watcher_);
|
938
|
+
route_config_watcher_ = nullptr;
|
939
|
+
route_config_name_.clear();
|
940
|
+
}
|
941
|
+
OnRouteConfigUpdate(std::move(*route_config));
|
942
|
+
});
|
926
943
|
}
|
927
944
|
|
928
945
|
namespace {
|
@@ -1124,7 +1141,7 @@ class XdsResolverFactory : public ResolverFactory {
|
|
1124
1141
|
|
1125
1142
|
void RegisterXdsResolver(CoreConfiguration::Builder* builder) {
|
1126
1143
|
builder->resolver_registry()->RegisterResolverFactory(
|
1127
|
-
|
1144
|
+
std::make_unique<XdsResolverFactory>());
|
1128
1145
|
}
|
1129
1146
|
|
1130
1147
|
} // namespace grpc_core
|