grpc 1.50.0.pre1 → 1.51.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +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
@@ -21,7 +21,6 @@
|
|
21
21
|
#include <string.h>
|
22
22
|
|
23
23
|
#include <algorithm>
|
24
|
-
#include <array>
|
25
24
|
#include <map>
|
26
25
|
#include <memory>
|
27
26
|
#include <set>
|
@@ -58,7 +57,6 @@
|
|
58
57
|
#include "src/core/ext/xds/xds_common_types.h"
|
59
58
|
#include "src/core/ext/xds/xds_http_filters.h"
|
60
59
|
#include "src/core/ext/xds/xds_listener.h"
|
61
|
-
#include "src/core/ext/xds/xds_resource_type_impl.h"
|
62
60
|
#include "src/core/ext/xds/xds_route_config.h"
|
63
61
|
#include "src/core/ext/xds/xds_routing.h"
|
64
62
|
#include "src/core/lib/address_utils/parse_address.h"
|
@@ -70,7 +68,9 @@
|
|
70
68
|
#include "src/core/lib/debug/trace.h"
|
71
69
|
#include "src/core/lib/gprpp/debug_location.h"
|
72
70
|
#include "src/core/lib/gprpp/host_port.h"
|
71
|
+
#include "src/core/lib/gprpp/match.h"
|
73
72
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
73
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
74
74
|
#include "src/core/lib/gprpp/sync.h"
|
75
75
|
#include "src/core/lib/gprpp/unique_type_name.h"
|
76
76
|
#include "src/core/lib/iomgr/endpoint.h"
|
@@ -313,6 +313,7 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
313
313
|
XdsServerConfigSelector : public ServerConfigSelector {
|
314
314
|
public:
|
315
315
|
static absl::StatusOr<RefCountedPtr<XdsServerConfigSelector>> Create(
|
316
|
+
const XdsHttpFilterRegistry& http_filter_registry,
|
316
317
|
XdsRouteConfigResource rds_update,
|
317
318
|
const std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>&
|
318
319
|
http_filters);
|
@@ -376,12 +377,18 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
376
377
|
: public ServerConfigSelectorProvider {
|
377
378
|
public:
|
378
379
|
StaticXdsServerConfigSelectorProvider(
|
380
|
+
RefCountedPtr<GrpcXdsClient> xds_client,
|
379
381
|
absl::StatusOr<XdsRouteConfigResource> static_resource,
|
380
382
|
std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>
|
381
383
|
http_filters)
|
382
|
-
:
|
384
|
+
: xds_client_(std::move(xds_client)),
|
385
|
+
static_resource_(std::move(static_resource)),
|
383
386
|
http_filters_(std::move(http_filters)) {}
|
384
387
|
|
388
|
+
~StaticXdsServerConfigSelectorProvider() override {
|
389
|
+
xds_client_.reset(DEBUG_LOCATION, "StaticXdsServerConfigSelectorProvider");
|
390
|
+
}
|
391
|
+
|
385
392
|
absl::StatusOr<RefCountedPtr<ServerConfigSelector>> Watch(
|
386
393
|
std::unique_ptr<ServerConfigSelectorProvider::ServerConfigSelectorWatcher>
|
387
394
|
watcher) override {
|
@@ -390,8 +397,10 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
390
397
|
if (!static_resource_.ok()) {
|
391
398
|
return static_resource_.status();
|
392
399
|
}
|
393
|
-
return XdsServerConfigSelector::Create(
|
394
|
-
|
400
|
+
return XdsServerConfigSelector::Create(
|
401
|
+
static_cast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
|
402
|
+
.http_filter_registry(),
|
403
|
+
static_resource_.value(), http_filters_);
|
395
404
|
}
|
396
405
|
|
397
406
|
void Orphan() override {}
|
@@ -399,6 +408,7 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
399
408
|
void CancelWatch() override { watcher_.reset(); }
|
400
409
|
|
401
410
|
private:
|
411
|
+
RefCountedPtr<GrpcXdsClient> xds_client_;
|
402
412
|
absl::StatusOr<XdsRouteConfigResource> static_resource_;
|
403
413
|
std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>
|
404
414
|
http_filters_;
|
@@ -549,7 +559,15 @@ void XdsServerConfigFetcher::ListenerWatcher::OnResourceChanged(
|
|
549
559
|
"[ListenerWatcher %p] Received LDS update from xds client %p: %s",
|
550
560
|
this, xds_client_.get(), listener.ToString().c_str());
|
551
561
|
}
|
552
|
-
|
562
|
+
auto* tcp_listener =
|
563
|
+
absl::get_if<XdsListenerResource::TcpListener>(&listener.listener);
|
564
|
+
if (tcp_listener == nullptr) {
|
565
|
+
MutexLock lock(&mu_);
|
566
|
+
OnFatalError(
|
567
|
+
absl::FailedPreconditionError("LDS resource is not a TCP listener"));
|
568
|
+
return;
|
569
|
+
}
|
570
|
+
if (tcp_listener->address != listening_address_) {
|
553
571
|
MutexLock lock(&mu_);
|
554
572
|
OnFatalError(absl::FailedPreconditionError(
|
555
573
|
"Address in LDS update does not match listening address"));
|
@@ -557,8 +575,8 @@ void XdsServerConfigFetcher::ListenerWatcher::OnResourceChanged(
|
|
557
575
|
}
|
558
576
|
auto new_filter_chain_match_manager = MakeRefCounted<FilterChainMatchManager>(
|
559
577
|
xds_client_->Ref(DEBUG_LOCATION, "FilterChainMatchManager"),
|
560
|
-
std::move(
|
561
|
-
std::move(
|
578
|
+
std::move(tcp_listener->filter_chain_map),
|
579
|
+
std::move(tcp_listener->default_filter_chain));
|
562
580
|
MutexLock lock(&mu_);
|
563
581
|
if (filter_chain_match_manager_ == nullptr ||
|
564
582
|
!(new_filter_chain_match_manager->filter_chain_map() ==
|
@@ -567,12 +585,7 @@ void XdsServerConfigFetcher::ListenerWatcher::OnResourceChanged(
|
|
567
585
|
filter_chain_match_manager_->default_filter_chain())) {
|
568
586
|
pending_filter_chain_match_manager_ =
|
569
587
|
std::move(new_filter_chain_match_manager);
|
570
|
-
|
571
|
-
pending_filter_chain_match_manager_->StartRdsWatch(Ref());
|
572
|
-
} else {
|
573
|
-
PendingFilterChainMatchManagerReadyLocked(
|
574
|
-
pending_filter_chain_match_manager_.get());
|
575
|
-
}
|
588
|
+
pending_filter_chain_match_manager_->StartRdsWatch(Ref());
|
576
589
|
}
|
577
590
|
}
|
578
591
|
|
@@ -679,32 +692,25 @@ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
679
692
|
for (const auto& source_type : destination_ip.source_types_array) {
|
680
693
|
for (const auto& source_ip : source_type) {
|
681
694
|
for (const auto& source_port_pair : source_ip.ports_map) {
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
}
|
688
|
-
filter_chain_data_set.insert(source_port_pair.second.data.get());
|
695
|
+
auto* filter_chain_data = source_port_pair.second.data.get();
|
696
|
+
const auto* rds_name = absl::get_if<std::string>(
|
697
|
+
&filter_chain_data->http_connection_manager.route_config);
|
698
|
+
if (rds_name != nullptr) resource_names.insert(*rds_name);
|
699
|
+
filter_chain_data_set.insert(filter_chain_data);
|
689
700
|
}
|
690
701
|
}
|
691
702
|
}
|
692
703
|
}
|
693
704
|
if (default_filter_chain_.has_value()) {
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
}
|
699
|
-
std::reverse(
|
700
|
-
default_filter_chain_->http_connection_manager.http_filters.begin(),
|
701
|
-
default_filter_chain_->http_connection_manager.http_filters.end());
|
705
|
+
auto& hcm = default_filter_chain_->http_connection_manager;
|
706
|
+
const auto* rds_name = absl::get_if<std::string>(&hcm.route_config);
|
707
|
+
if (rds_name != nullptr) resource_names.insert(*rds_name);
|
708
|
+
std::reverse(hcm.http_filters.begin(), hcm.http_filters.end());
|
702
709
|
}
|
703
710
|
// Reverse the lists of HTTP filters in all the filter chains
|
704
711
|
for (auto* filter_chain_data : filter_chain_data_set) {
|
705
|
-
|
706
|
-
|
707
|
-
filter_chain_data->http_connection_manager.http_filters.end());
|
712
|
+
auto& hcm = filter_chain_data->http_connection_manager;
|
713
|
+
std::reverse(hcm.http_filters.begin(), hcm.http_filters.end());
|
708
714
|
}
|
709
715
|
// Start watching on referenced RDS resources
|
710
716
|
struct WatcherToStart {
|
@@ -1059,52 +1065,57 @@ absl::StatusOr<ChannelArgs> XdsServerConfigFetcher::ListenerWatcher::
|
|
1059
1065
|
RefCountedPtr<ServerConfigSelectorProvider> server_config_selector_provider;
|
1060
1066
|
RefCountedPtr<XdsChannelStackModifier> channel_stack_modifier;
|
1061
1067
|
RefCountedPtr<XdsCertificateProvider> xds_certificate_provider;
|
1062
|
-
//
|
1063
|
-
|
1064
|
-
|
1065
|
-
|
1066
|
-
|
1067
|
-
|
1068
|
-
|
1069
|
-
|
1070
|
-
|
1071
|
-
|
1072
|
-
|
1073
|
-
|
1074
|
-
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
1078
|
-
|
1079
|
-
|
1068
|
+
// Iterate the list of HTTP filters in reverse since in Core, received data
|
1069
|
+
// flows *up* the stack.
|
1070
|
+
std::vector<const grpc_channel_filter*> filters;
|
1071
|
+
const auto& http_filter_registry =
|
1072
|
+
static_cast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
|
1073
|
+
.http_filter_registry();
|
1074
|
+
for (const auto& http_filter :
|
1075
|
+
filter_chain->http_connection_manager.http_filters) {
|
1076
|
+
// Find filter. This is guaranteed to succeed, because it's checked
|
1077
|
+
// at config validation time in the XdsApi code.
|
1078
|
+
const XdsHttpFilterImpl* filter_impl =
|
1079
|
+
http_filter_registry.GetFilterForType(
|
1080
|
+
http_filter.config.config_proto_type_name);
|
1081
|
+
GPR_ASSERT(filter_impl != nullptr);
|
1082
|
+
// Some filters like the router filter are no-op filters and do not have
|
1083
|
+
// an implementation.
|
1084
|
+
if (filter_impl->channel_filter() != nullptr) {
|
1085
|
+
filters.push_back(filter_impl->channel_filter());
|
1080
1086
|
}
|
1081
|
-
filters.push_back(&kServerConfigSelectorFilter);
|
1082
|
-
channel_stack_modifier =
|
1083
|
-
MakeRefCounted<XdsChannelStackModifier>(std::move(filters));
|
1084
|
-
if (filter_chain->http_connection_manager.rds_update.has_value()) {
|
1085
|
-
server_config_selector_provider =
|
1086
|
-
MakeRefCounted<StaticXdsServerConfigSelectorProvider>(
|
1087
|
-
filter_chain->http_connection_manager.rds_update.value(),
|
1088
|
-
filter_chain->http_connection_manager.http_filters);
|
1089
|
-
} else {
|
1090
|
-
absl::StatusOr<XdsRouteConfigResource> initial_resource;
|
1091
|
-
{
|
1092
|
-
MutexLock lock(&mu_);
|
1093
|
-
initial_resource =
|
1094
|
-
rds_map_[filter_chain->http_connection_manager.route_config_name]
|
1095
|
-
.rds_update.value();
|
1096
|
-
}
|
1097
|
-
server_config_selector_provider =
|
1098
|
-
MakeRefCounted<DynamicXdsServerConfigSelectorProvider>(
|
1099
|
-
xds_client_->Ref(DEBUG_LOCATION,
|
1100
|
-
"DynamicXdsServerConfigSelectorProvider"),
|
1101
|
-
filter_chain->http_connection_manager.route_config_name,
|
1102
|
-
std::move(initial_resource),
|
1103
|
-
filter_chain->http_connection_manager.http_filters);
|
1104
|
-
}
|
1105
|
-
args = args.SetObject(server_config_selector_provider)
|
1106
|
-
.SetObject(channel_stack_modifier);
|
1107
1087
|
}
|
1088
|
+
// Add config selector filter.
|
1089
|
+
filters.push_back(&kServerConfigSelectorFilter);
|
1090
|
+
channel_stack_modifier =
|
1091
|
+
MakeRefCounted<XdsChannelStackModifier>(std::move(filters));
|
1092
|
+
Match(
|
1093
|
+
filter_chain->http_connection_manager.route_config,
|
1094
|
+
// RDS resource name
|
1095
|
+
[&](const std::string& rds_name) {
|
1096
|
+
absl::StatusOr<XdsRouteConfigResource> initial_resource;
|
1097
|
+
{
|
1098
|
+
MutexLock lock(&mu_);
|
1099
|
+
initial_resource = rds_map_[rds_name].rds_update.value();
|
1100
|
+
}
|
1101
|
+
server_config_selector_provider =
|
1102
|
+
MakeRefCounted<DynamicXdsServerConfigSelectorProvider>(
|
1103
|
+
xds_client_->Ref(DEBUG_LOCATION,
|
1104
|
+
"DynamicXdsServerConfigSelectorProvider"),
|
1105
|
+
rds_name, std::move(initial_resource),
|
1106
|
+
filter_chain->http_connection_manager.http_filters);
|
1107
|
+
},
|
1108
|
+
// inline RouteConfig
|
1109
|
+
[&](const XdsRouteConfigResource& route_config) {
|
1110
|
+
server_config_selector_provider =
|
1111
|
+
MakeRefCounted<StaticXdsServerConfigSelectorProvider>(
|
1112
|
+
xds_client_->Ref(DEBUG_LOCATION,
|
1113
|
+
"StaticXdsServerConfigSelectorProvider"),
|
1114
|
+
route_config,
|
1115
|
+
filter_chain->http_connection_manager.http_filters);
|
1116
|
+
});
|
1117
|
+
args = args.SetObject(server_config_selector_provider)
|
1118
|
+
.SetObject(channel_stack_modifier);
|
1108
1119
|
// Add XdsCertificateProvider if credentials are xDS.
|
1109
1120
|
auto* server_creds = args.GetObject<grpc_server_credentials>();
|
1110
1121
|
if (server_creds != nullptr &&
|
@@ -1130,6 +1141,7 @@ absl::StatusOr<
|
|
1130
1141
|
FilterChainMatchManager::XdsServerConfigSelector>>
|
1131
1142
|
XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
1132
1143
|
XdsServerConfigSelector::Create(
|
1144
|
+
const XdsHttpFilterRegistry& http_filter_registry,
|
1133
1145
|
XdsRouteConfigResource rds_update,
|
1134
1146
|
const std::vector<
|
1135
1147
|
XdsListenerResource::HttpConnectionManager::HttpFilter>&
|
@@ -1147,7 +1159,8 @@ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
1147
1159
|
absl::get_if<XdsRouteConfigResource::Route::NonForwardingAction>(
|
1148
1160
|
&route.action) == nullptr;
|
1149
1161
|
auto result = XdsRouting::GeneratePerHTTPFilterConfigs(
|
1150
|
-
http_filters, vhost, route, nullptr,
|
1162
|
+
http_filter_registry, http_filters, vhost, route, nullptr,
|
1163
|
+
ChannelArgs());
|
1151
1164
|
if (!result.ok()) return result.status();
|
1152
1165
|
std::vector<std::string> fields;
|
1153
1166
|
fields.reserve(result->per_filter_configs.size());
|
@@ -1180,14 +1193,13 @@ ServerConfigSelector::CallConfig XdsServerConfigFetcher::ListenerWatcher::
|
|
1180
1193
|
grpc_metadata_batch* metadata) {
|
1181
1194
|
CallConfig call_config;
|
1182
1195
|
if (metadata->get_pointer(HttpPathMetadata()) == nullptr) {
|
1183
|
-
call_config.error =
|
1196
|
+
call_config.error = GRPC_ERROR_CREATE("No path found");
|
1184
1197
|
return call_config;
|
1185
1198
|
}
|
1186
1199
|
absl::string_view path =
|
1187
1200
|
metadata->get_pointer(HttpPathMetadata())->as_string_view();
|
1188
1201
|
if (metadata->get_pointer(HttpAuthorityMetadata()) == nullptr) {
|
1189
|
-
call_config.error =
|
1190
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("No authority found");
|
1202
|
+
call_config.error = GRPC_ERROR_CREATE("No authority found");
|
1191
1203
|
return call_config;
|
1192
1204
|
}
|
1193
1205
|
absl::string_view authority =
|
@@ -1195,11 +1207,10 @@ ServerConfigSelector::CallConfig XdsServerConfigFetcher::ListenerWatcher::
|
|
1195
1207
|
auto vhost_index = XdsRouting::FindVirtualHostForDomain(
|
1196
1208
|
VirtualHostListIterator(&virtual_hosts_), authority);
|
1197
1209
|
if (!vhost_index.has_value()) {
|
1198
|
-
call_config.error =
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1202
|
-
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
1210
|
+
call_config.error = grpc_error_set_int(
|
1211
|
+
GRPC_ERROR_CREATE(absl::StrCat("could not find VirtualHost for ",
|
1212
|
+
authority, " in RouteConfiguration")),
|
1213
|
+
StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE);
|
1203
1214
|
return call_config;
|
1204
1215
|
}
|
1205
1216
|
auto& virtual_host = virtual_hosts_[vhost_index.value()];
|
@@ -1210,9 +1221,8 @@ ServerConfigSelector::CallConfig XdsServerConfigFetcher::ListenerWatcher::
|
|
1210
1221
|
// Found the matching route
|
1211
1222
|
if (route.unsupported_action) {
|
1212
1223
|
call_config.error = grpc_error_set_int(
|
1213
|
-
|
1214
|
-
|
1215
|
-
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
1224
|
+
GRPC_ERROR_CREATE("Matching route has unsupported action"),
|
1225
|
+
StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE);
|
1216
1226
|
return call_config;
|
1217
1227
|
}
|
1218
1228
|
if (route.method_config != nullptr) {
|
@@ -1222,9 +1232,9 @@ ServerConfigSelector::CallConfig XdsServerConfigFetcher::ListenerWatcher::
|
|
1222
1232
|
}
|
1223
1233
|
return call_config;
|
1224
1234
|
}
|
1225
|
-
call_config.error = grpc_error_set_int(
|
1226
|
-
|
1227
|
-
|
1235
|
+
call_config.error = grpc_error_set_int(GRPC_ERROR_CREATE("No route matched"),
|
1236
|
+
StatusIntProperty::kRpcStatus,
|
1237
|
+
GRPC_STATUS_UNAVAILABLE);
|
1228
1238
|
return call_config;
|
1229
1239
|
}
|
1230
1240
|
|
@@ -1276,7 +1286,10 @@ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
1276
1286
|
if (!resource.ok()) {
|
1277
1287
|
return resource.status();
|
1278
1288
|
}
|
1279
|
-
return XdsServerConfigSelector::Create(
|
1289
|
+
return XdsServerConfigSelector::Create(
|
1290
|
+
static_cast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
|
1291
|
+
.http_filter_registry(),
|
1292
|
+
resource.value(), http_filters_);
|
1280
1293
|
}
|
1281
1294
|
|
1282
1295
|
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
@@ -1297,8 +1310,10 @@ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
1297
1310
|
// DynamicXdsServerConfigSelectorProvider while holding a lock, but if that
|
1298
1311
|
// ever changes, we would want to invoke the update outside the critical
|
1299
1312
|
// region with the use of a WorkSerializer.
|
1300
|
-
watcher_->OnServerConfigSelectorUpdate(
|
1301
|
-
|
1313
|
+
watcher_->OnServerConfigSelectorUpdate(XdsServerConfigSelector::Create(
|
1314
|
+
static_cast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
|
1315
|
+
.http_filter_registry(),
|
1316
|
+
*resource_, http_filters_));
|
1302
1317
|
}
|
1303
1318
|
|
1304
1319
|
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
@@ -51,7 +51,6 @@
|
|
51
51
|
#include "src/core/lib/security/credentials/credentials.h"
|
52
52
|
#include "src/core/lib/slice/slice.h"
|
53
53
|
#include "src/core/lib/slice/slice_internal.h"
|
54
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
55
54
|
#include "src/core/lib/surface/call.h"
|
56
55
|
#include "src/core/lib/surface/channel.h"
|
57
56
|
#include "src/core/lib/surface/init_internally.h"
|
@@ -138,7 +137,7 @@ GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
|
|
138
137
|
grpc_metadata_array_destroy(&trailing_metadata_recv_);
|
139
138
|
grpc_byte_buffer_destroy(send_message_payload_);
|
140
139
|
grpc_byte_buffer_destroy(recv_message_payload_);
|
141
|
-
|
140
|
+
CSliceUnref(status_details_);
|
142
141
|
GPR_ASSERT(call_ != nullptr);
|
143
142
|
grpc_call_unref(call_);
|
144
143
|
}
|
@@ -159,7 +158,7 @@ void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::SendMessage(
|
|
159
158
|
// Create payload.
|
160
159
|
grpc_slice slice = grpc_slice_from_cpp_string(std::move(payload));
|
161
160
|
send_message_payload_ = grpc_raw_byte_buffer_create(&slice, 1);
|
162
|
-
|
161
|
+
CSliceUnref(slice);
|
163
162
|
// Send the message.
|
164
163
|
grpc_op op;
|
165
164
|
memset(&op, 0, sizeof(op));
|
@@ -178,7 +177,7 @@ void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
|
|
178
177
|
grpc_byte_buffer_destroy(self->send_message_payload_);
|
179
178
|
self->send_message_payload_ = nullptr;
|
180
179
|
// Invoke request handler.
|
181
|
-
self->event_handler_->OnRequestSent(
|
180
|
+
self->event_handler_->OnRequestSent(error.ok());
|
182
181
|
// Drop the ref.
|
183
182
|
self->Unref(DEBUG_LOCATION, "OnRequestSent");
|
184
183
|
}
|
@@ -200,7 +199,7 @@ void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
|
|
200
199
|
grpc_byte_buffer_destroy(self->recv_message_payload_);
|
201
200
|
self->recv_message_payload_ = nullptr;
|
202
201
|
self->event_handler_->OnRecvMessage(StringViewFromSlice(response_slice));
|
203
|
-
|
202
|
+
CSliceUnref(response_slice);
|
204
203
|
// Keep reading.
|
205
204
|
grpc_op op;
|
206
205
|
memset(&op, 0, sizeof(op));
|
@@ -36,11 +36,14 @@
|
|
36
36
|
|
37
37
|
#include "src/core/lib/gpr/string.h"
|
38
38
|
#include "src/core/lib/gprpp/host_port.h"
|
39
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
39
40
|
#include "src/core/lib/iomgr/grpc_if_nametoindex.h"
|
40
41
|
#include "src/core/lib/iomgr/port.h"
|
41
42
|
#include "src/core/lib/iomgr/sockaddr.h"
|
42
43
|
#include "src/core/lib/iomgr/socket_utils.h"
|
43
44
|
|
45
|
+
// IWYU pragma: no_include <arpa/inet.h>
|
46
|
+
|
44
47
|
#ifdef GRPC_HAVE_UNIX_SOCKET
|
45
48
|
|
46
49
|
bool grpc_parse_unix(const grpc_core::URI& uri,
|
@@ -52,9 +55,8 @@ bool grpc_parse_unix(const grpc_core::URI& uri,
|
|
52
55
|
}
|
53
56
|
grpc_error_handle error =
|
54
57
|
grpc_core::UnixSockaddrPopulate(uri.path(), resolved_addr);
|
55
|
-
if (!
|
56
|
-
gpr_log(GPR_ERROR, "%s",
|
57
|
-
GRPC_ERROR_UNREF(error);
|
58
|
+
if (!error.ok()) {
|
59
|
+
gpr_log(GPR_ERROR, "%s", grpc_core::StatusToString(error).c_str());
|
58
60
|
return false;
|
59
61
|
}
|
60
62
|
return true;
|
@@ -69,9 +71,8 @@ bool grpc_parse_unix_abstract(const grpc_core::URI& uri,
|
|
69
71
|
}
|
70
72
|
grpc_error_handle error =
|
71
73
|
grpc_core::UnixAbstractSockaddrPopulate(uri.path(), resolved_addr);
|
72
|
-
if (!
|
73
|
-
gpr_log(GPR_ERROR, "%s",
|
74
|
-
GRPC_ERROR_UNREF(error);
|
74
|
+
if (!error.ok()) {
|
75
|
+
gpr_log(GPR_ERROR, "%s", grpc_core::StatusToString(error).c_str());
|
75
76
|
return false;
|
76
77
|
}
|
77
78
|
return true;
|
@@ -86,14 +87,14 @@ grpc_error_handle UnixSockaddrPopulate(absl::string_view path,
|
|
86
87
|
reinterpret_cast<struct sockaddr_un*>(resolved_addr->addr);
|
87
88
|
const size_t maxlen = sizeof(un->sun_path) - 1;
|
88
89
|
if (path.size() > maxlen) {
|
89
|
-
return
|
90
|
+
return GRPC_ERROR_CREATE(absl::StrCat(
|
90
91
|
"Path name should not have more than ", maxlen, " characters"));
|
91
92
|
}
|
92
93
|
un->sun_family = AF_UNIX;
|
93
94
|
path.copy(un->sun_path, path.size());
|
94
95
|
un->sun_path[path.size()] = '\0';
|
95
96
|
resolved_addr->len = static_cast<socklen_t>(sizeof(*un));
|
96
|
-
return
|
97
|
+
return absl::OkStatus();
|
97
98
|
}
|
98
99
|
|
99
100
|
grpc_error_handle UnixAbstractSockaddrPopulate(
|
@@ -103,7 +104,7 @@ grpc_error_handle UnixAbstractSockaddrPopulate(
|
|
103
104
|
reinterpret_cast<struct sockaddr_un*>(resolved_addr->addr);
|
104
105
|
const size_t maxlen = sizeof(un->sun_path) - 1;
|
105
106
|
if (path.size() > maxlen) {
|
106
|
-
return
|
107
|
+
return GRPC_ERROR_CREATE(absl::StrCat(
|
107
108
|
"Path name should not have more than ", maxlen, " characters"));
|
108
109
|
}
|
109
110
|
un->sun_family = AF_UNIX;
|
@@ -111,7 +112,7 @@ grpc_error_handle UnixAbstractSockaddrPopulate(
|
|
111
112
|
path.copy(un->sun_path + 1, path.size());
|
112
113
|
resolved_addr->len =
|
113
114
|
static_cast<socklen_t>(sizeof(un->sun_family) + path.size() + 1);
|
114
|
-
return
|
115
|
+
return absl::OkStatus();
|
115
116
|
}
|
116
117
|
|
117
118
|
} // namespace grpc_core
|
@@ -34,6 +34,7 @@
|
|
34
34
|
#include "absl/types/optional.h"
|
35
35
|
#include "absl/types/variant.h"
|
36
36
|
|
37
|
+
#include <grpc/event_engine/event_engine.h>
|
37
38
|
#include <grpc/impl/codegen/grpc_types.h>
|
38
39
|
|
39
40
|
#include "src/core/lib/avl/avl.h"
|
@@ -45,6 +46,11 @@
|
|
45
46
|
#include "src/core/lib/gprpp/time.h"
|
46
47
|
#include "src/core/lib/surface/channel_stack_type.h"
|
47
48
|
|
49
|
+
// TODO(hork): When we're ready to allow setting via a channel arg from the
|
50
|
+
// application, replace this with a macro in
|
51
|
+
// include/grpc/impl/codegen/grpc_types.h.
|
52
|
+
#define GRPC_INTERNAL_ARG_EVENT_ENGINE "grpc.internal.event_engine"
|
53
|
+
|
48
54
|
// Channel args are intentionally immutable, to avoid the need for locking.
|
49
55
|
|
50
56
|
namespace grpc_core {
|
@@ -170,6 +176,9 @@ template <typename T>
|
|
170
176
|
struct WrapInSharedPtr
|
171
177
|
: std::integral_constant<
|
172
178
|
bool, std::is_base_of<std::enable_shared_from_this<T>, T>::value> {};
|
179
|
+
template <>
|
180
|
+
struct WrapInSharedPtr<grpc_event_engine::experimental::EventEngine>
|
181
|
+
: std::true_type {};
|
173
182
|
template <typename T, typename Ignored = void /* for SFINAE */>
|
174
183
|
struct GetObjectImpl;
|
175
184
|
// std::shared_ptr implementation
|
@@ -213,7 +222,13 @@ template <typename T>
|
|
213
222
|
struct ChannelArgNameTraits<std::shared_ptr<T>> {
|
214
223
|
static absl::string_view ChannelArgName() { return T::ChannelArgName(); }
|
215
224
|
};
|
216
|
-
|
225
|
+
// Specialization for the EventEngine
|
226
|
+
template <>
|
227
|
+
struct ChannelArgNameTraits<grpc_event_engine::experimental::EventEngine> {
|
228
|
+
static absl::string_view ChannelArgName() {
|
229
|
+
return GRPC_INTERNAL_ARG_EVENT_ENGINE;
|
230
|
+
}
|
231
|
+
};
|
217
232
|
class ChannelArgs {
|
218
233
|
public:
|
219
234
|
class Pointer {
|
@@ -22,12 +22,16 @@
|
|
22
22
|
|
23
23
|
#include <stdint.h>
|
24
24
|
|
25
|
+
#include <memory>
|
25
26
|
#include <utility>
|
26
27
|
|
27
28
|
#include <grpc/support/log.h>
|
28
29
|
|
30
|
+
#include "src/core/lib/channel/channel_args.h"
|
29
31
|
#include "src/core/lib/gpr/alloc.h"
|
30
32
|
|
33
|
+
using grpc_event_engine::experimental::EventEngine;
|
34
|
+
|
31
35
|
grpc_core::TraceFlag grpc_trace_channel(false, "channel");
|
32
36
|
grpc_core::TraceFlag grpc_trace_channel_stack(false, "channel_stack");
|
33
37
|
|
@@ -104,7 +108,7 @@ grpc_call_element* grpc_call_stack_element(grpc_call_stack* call_stack,
|
|
104
108
|
grpc_error_handle grpc_channel_stack_init(
|
105
109
|
int initial_refs, grpc_iomgr_cb_func destroy, void* destroy_arg,
|
106
110
|
const grpc_channel_filter** filters, size_t filter_count,
|
107
|
-
const
|
111
|
+
const grpc_core::ChannelArgs& channel_args, const char* name,
|
108
112
|
grpc_channel_stack* stack) {
|
109
113
|
if (grpc_trace_channel_stack.enabled()) {
|
110
114
|
gpr_log(GPR_INFO, "CHANNEL_STACK: init %s", name);
|
@@ -114,6 +118,7 @@ grpc_error_handle grpc_channel_stack_init(
|
|
114
118
|
}
|
115
119
|
|
116
120
|
stack->on_destroy.Init([]() {});
|
121
|
+
stack->event_engine.Init(channel_args.GetObjectRef<EventEngine>());
|
117
122
|
|
118
123
|
size_t call_size =
|
119
124
|
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(grpc_call_stack)) +
|
@@ -132,21 +137,20 @@ grpc_error_handle grpc_channel_stack_init(
|
|
132
137
|
sizeof(grpc_channel_element));
|
133
138
|
|
134
139
|
/* init per-filter data */
|
135
|
-
grpc_error_handle first_error
|
140
|
+
grpc_error_handle first_error;
|
141
|
+
auto c_channel_args = channel_args.ToC();
|
136
142
|
for (i = 0; i < filter_count; i++) {
|
137
143
|
args.channel_stack = stack;
|
138
|
-
args.channel_args =
|
144
|
+
args.channel_args = c_channel_args.get();
|
139
145
|
args.is_first = i == 0;
|
140
146
|
args.is_last = i == (filter_count - 1);
|
141
147
|
elems[i].filter = filters[i];
|
142
148
|
elems[i].channel_data = user_data;
|
143
149
|
grpc_error_handle error =
|
144
150
|
elems[i].filter->init_channel_elem(&elems[i], &args);
|
145
|
-
if (!
|
146
|
-
if (
|
151
|
+
if (!error.ok()) {
|
152
|
+
if (first_error.ok()) {
|
147
153
|
first_error = error;
|
148
|
-
} else {
|
149
|
-
GRPC_ERROR_UNREF(error);
|
150
154
|
}
|
151
155
|
}
|
152
156
|
user_data +=
|
@@ -174,6 +178,7 @@ void grpc_channel_stack_destroy(grpc_channel_stack* stack) {
|
|
174
178
|
|
175
179
|
(*stack->on_destroy)();
|
176
180
|
stack->on_destroy.Destroy();
|
181
|
+
stack->event_engine.Destroy();
|
177
182
|
}
|
178
183
|
|
179
184
|
grpc_error_handle grpc_call_stack_init(
|
@@ -193,7 +198,7 @@ grpc_error_handle grpc_call_stack_init(
|
|
193
198
|
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(count * sizeof(grpc_call_element));
|
194
199
|
|
195
200
|
/* init per-filter data */
|
196
|
-
grpc_error_handle first_error
|
201
|
+
grpc_error_handle first_error;
|
197
202
|
for (size_t i = 0; i < count; i++) {
|
198
203
|
call_elems[i].filter = channel_elems[i].filter;
|
199
204
|
call_elems[i].channel_data = channel_elems[i].channel_data;
|
@@ -204,11 +209,9 @@ grpc_error_handle grpc_call_stack_init(
|
|
204
209
|
for (size_t i = 0; i < count; i++) {
|
205
210
|
grpc_error_handle error =
|
206
211
|
call_elems[i].filter->init_call_elem(&call_elems[i], elem_args);
|
207
|
-
if (!
|
208
|
-
if (
|
212
|
+
if (!error.ok()) {
|
213
|
+
if (first_error.ok()) {
|
209
214
|
first_error = error;
|
210
|
-
} else {
|
211
|
-
GRPC_ERROR_UNREF(error);
|
212
215
|
}
|
213
216
|
}
|
214
217
|
}
|
@@ -300,12 +303,12 @@ grpc_core::NextPromiseFactory ServerNext(grpc_channel_element* elem) {
|
|
300
303
|
} // namespace
|
301
304
|
|
302
305
|
grpc_core::ArenaPromise<grpc_core::ServerMetadataHandle>
|
303
|
-
grpc_channel_stack::
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
306
|
+
grpc_channel_stack::MakeClientCallPromise(grpc_core::CallArgs call_args) {
|
307
|
+
return ClientNext(grpc_channel_stack_element(this, 0))(std::move(call_args));
|
308
|
+
}
|
309
|
+
|
310
|
+
grpc_core::ArenaPromise<grpc_core::ServerMetadataHandle>
|
311
|
+
grpc_channel_stack::MakeServerCallPromise(grpc_core::CallArgs call_args) {
|
312
|
+
return ServerNext(grpc_channel_stack_element(this, this->count - 1))(
|
313
|
+
std::move(call_args));
|
311
314
|
}
|