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
@@ -20,14 +20,13 @@
|
|
20
20
|
|
21
21
|
#include <stdint.h>
|
22
22
|
|
23
|
-
#include <map>
|
24
23
|
#include <string>
|
25
24
|
#include <utility>
|
26
25
|
|
27
|
-
#include "absl/status/status.h"
|
28
26
|
#include "absl/status/statusor.h"
|
29
27
|
#include "absl/strings/str_cat.h"
|
30
28
|
#include "absl/strings/string_view.h"
|
29
|
+
#include "absl/types/variant.h"
|
31
30
|
#include "envoy/extensions/filters/common/fault/v3/fault.upb.h"
|
32
31
|
#include "envoy/extensions/filters/http/fault/v3/fault.upb.h"
|
33
32
|
#include "envoy/extensions/filters/http/fault/v3/fault.upbdefs.h"
|
@@ -38,19 +37,18 @@
|
|
38
37
|
#include <grpc/status.h>
|
39
38
|
|
40
39
|
#include "src/core/ext/filters/fault_injection/fault_injection_filter.h"
|
40
|
+
#include "src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h"
|
41
41
|
#include "src/core/ext/xds/xds_common_types.h"
|
42
42
|
#include "src/core/ext/xds/xds_http_filters.h"
|
43
43
|
#include "src/core/lib/channel/channel_args.h"
|
44
44
|
#include "src/core/lib/channel/status_util.h"
|
45
45
|
#include "src/core/lib/gprpp/time.h"
|
46
|
+
#include "src/core/lib/gprpp/validation_errors.h"
|
46
47
|
#include "src/core/lib/json/json.h"
|
47
48
|
#include "src/core/lib/transport/status_conversion.h"
|
48
49
|
|
49
50
|
namespace grpc_core {
|
50
51
|
|
51
|
-
const char* kXdsHttpFaultFilterConfigName =
|
52
|
-
"envoy.extensions.filters.http.fault.v3.HTTPFault";
|
53
|
-
|
54
52
|
namespace {
|
55
53
|
|
56
54
|
uint32_t GetDenominator(const envoy_type_v3_FractionalPercent* fraction) {
|
@@ -72,13 +70,36 @@ uint32_t GetDenominator(const envoy_type_v3_FractionalPercent* fraction) {
|
|
72
70
|
return 100;
|
73
71
|
}
|
74
72
|
|
75
|
-
|
76
|
-
|
73
|
+
} // namespace
|
74
|
+
|
75
|
+
absl::string_view XdsHttpFaultFilter::ConfigProtoName() const {
|
76
|
+
return "envoy.extensions.filters.http.fault.v3.HTTPFault";
|
77
|
+
}
|
78
|
+
|
79
|
+
absl::string_view XdsHttpFaultFilter::OverrideConfigProtoName() const {
|
80
|
+
return "";
|
81
|
+
}
|
82
|
+
|
83
|
+
void XdsHttpFaultFilter::PopulateSymtab(upb_DefPool* symtab) const {
|
84
|
+
envoy_extensions_filters_http_fault_v3_HTTPFault_getmsgdef(symtab);
|
85
|
+
}
|
86
|
+
|
87
|
+
absl::optional<XdsHttpFilterImpl::FilterConfig>
|
88
|
+
XdsHttpFaultFilter::GenerateFilterConfig(XdsExtension extension,
|
89
|
+
upb_Arena* arena,
|
90
|
+
ValidationErrors* errors) const {
|
91
|
+
absl::string_view* serialized_filter_config =
|
92
|
+
absl::get_if<absl::string_view>(&extension.value);
|
93
|
+
if (serialized_filter_config == nullptr) {
|
94
|
+
errors->AddError("could not parse fault injection filter config");
|
95
|
+
return absl::nullopt;
|
96
|
+
}
|
77
97
|
auto* http_fault = envoy_extensions_filters_http_fault_v3_HTTPFault_parse(
|
78
|
-
|
98
|
+
serialized_filter_config->data(), serialized_filter_config->size(),
|
99
|
+
arena);
|
79
100
|
if (http_fault == nullptr) {
|
80
|
-
|
81
|
-
|
101
|
+
errors->AddError("could not parse fault injection filter config");
|
102
|
+
return absl::nullopt;
|
82
103
|
}
|
83
104
|
// NOTE(lidiz): Here, we are manually translating the upb messages into the
|
84
105
|
// JSON form of the filter config as part of method config, which will be
|
@@ -93,6 +114,7 @@ absl::StatusOr<Json> ParseHttpFaultIntoJson(
|
|
93
114
|
const auto* fault_abort =
|
94
115
|
envoy_extensions_filters_http_fault_v3_HTTPFault_abort(http_fault);
|
95
116
|
if (fault_abort != nullptr) {
|
117
|
+
ValidationErrors::ScopedField field(errors, ".abort");
|
96
118
|
grpc_status_code abort_grpc_status_code = GRPC_STATUS_OK;
|
97
119
|
// Try if gRPC status code is set first
|
98
120
|
int abort_grpc_status_code_raw =
|
@@ -101,8 +123,9 @@ absl::StatusOr<Json> ParseHttpFaultIntoJson(
|
|
101
123
|
if (abort_grpc_status_code_raw != 0) {
|
102
124
|
if (!grpc_status_code_from_int(abort_grpc_status_code_raw,
|
103
125
|
&abort_grpc_status_code)) {
|
104
|
-
|
105
|
-
|
126
|
+
ValidationErrors::ScopedField field(errors, ".grpc_status");
|
127
|
+
errors->AddError(absl::StrCat("invalid gRPC status code: ",
|
128
|
+
abort_grpc_status_code_raw));
|
106
129
|
}
|
107
130
|
} else {
|
108
131
|
// if gRPC status code is empty, check http status
|
@@ -129,22 +152,26 @@ absl::StatusOr<Json> ParseHttpFaultIntoJson(
|
|
129
152
|
auto* percent =
|
130
153
|
envoy_extensions_filters_http_fault_v3_FaultAbort_percentage(
|
131
154
|
fault_abort);
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
155
|
+
if (percent != nullptr) {
|
156
|
+
fault_injection_policy_json["abortPercentageNumerator"] =
|
157
|
+
envoy_type_v3_FractionalPercent_numerator(percent);
|
158
|
+
fault_injection_policy_json["abortPercentageDenominator"] =
|
159
|
+
GetDenominator(percent);
|
160
|
+
}
|
136
161
|
}
|
137
162
|
// Section 2: Parse the delay injection config
|
138
163
|
const auto* fault_delay =
|
139
164
|
envoy_extensions_filters_http_fault_v3_HTTPFault_delay(http_fault);
|
140
165
|
if (fault_delay != nullptr) {
|
166
|
+
ValidationErrors::ScopedField field(errors, ".delay");
|
141
167
|
// Parse the delay duration
|
142
168
|
const auto* delay_duration =
|
143
169
|
envoy_extensions_filters_common_fault_v3_FaultDelay_fixed_delay(
|
144
170
|
fault_delay);
|
145
171
|
if (delay_duration != nullptr) {
|
146
|
-
|
147
|
-
|
172
|
+
ValidationErrors::ScopedField field(errors, ".fixed_delay");
|
173
|
+
Duration duration = ParseDuration(delay_duration, errors);
|
174
|
+
fault_injection_policy_json["delay"] = duration.ToJsonString();
|
148
175
|
}
|
149
176
|
// Set the headers if we enabled header delay injection control
|
150
177
|
if (envoy_extensions_filters_common_fault_v3_FaultDelay_has_header_delay(
|
@@ -158,10 +185,12 @@ absl::StatusOr<Json> ParseHttpFaultIntoJson(
|
|
158
185
|
auto* percent =
|
159
186
|
envoy_extensions_filters_common_fault_v3_FaultDelay_percentage(
|
160
187
|
fault_delay);
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
188
|
+
if (percent != nullptr) {
|
189
|
+
fault_injection_policy_json["delayPercentageNumerator"] =
|
190
|
+
envoy_type_v3_FractionalPercent_numerator(percent);
|
191
|
+
fault_injection_policy_json["delayPercentageDenominator"] =
|
192
|
+
GetDenominator(percent);
|
193
|
+
}
|
165
194
|
}
|
166
195
|
// Section 3: Parse the maximum active faults
|
167
196
|
const auto* max_fault_wrapper =
|
@@ -171,32 +200,16 @@ absl::StatusOr<Json> ParseHttpFaultIntoJson(
|
|
171
200
|
fault_injection_policy_json["maxFaults"] =
|
172
201
|
google_protobuf_UInt32Value_value(max_fault_wrapper);
|
173
202
|
}
|
174
|
-
return
|
175
|
-
}
|
176
|
-
|
177
|
-
} // namespace
|
178
|
-
|
179
|
-
void XdsHttpFaultFilter::PopulateSymtab(upb_DefPool* symtab) const {
|
180
|
-
envoy_extensions_filters_http_fault_v3_HTTPFault_getmsgdef(symtab);
|
181
|
-
}
|
182
|
-
|
183
|
-
absl::StatusOr<XdsHttpFilterImpl::FilterConfig>
|
184
|
-
XdsHttpFaultFilter::GenerateFilterConfig(
|
185
|
-
upb_StringView serialized_filter_config, upb_Arena* arena) const {
|
186
|
-
absl::StatusOr<Json> parse_result =
|
187
|
-
ParseHttpFaultIntoJson(serialized_filter_config, arena);
|
188
|
-
if (!parse_result.ok()) {
|
189
|
-
return parse_result.status();
|
190
|
-
}
|
191
|
-
return FilterConfig{kXdsHttpFaultFilterConfigName, std::move(*parse_result)};
|
203
|
+
return FilterConfig{ConfigProtoName(),
|
204
|
+
std::move(fault_injection_policy_json)};
|
192
205
|
}
|
193
206
|
|
194
|
-
absl::
|
207
|
+
absl::optional<XdsHttpFilterImpl::FilterConfig>
|
195
208
|
XdsHttpFaultFilter::GenerateFilterConfigOverride(
|
196
|
-
|
209
|
+
XdsExtension extension, upb_Arena* arena, ValidationErrors* errors) const {
|
197
210
|
// HTTPFault filter has the same message type in HTTP connection manager's
|
198
211
|
// filter config and in overriding filter config field.
|
199
|
-
return GenerateFilterConfig(
|
212
|
+
return GenerateFilterConfig(std::move(extension), arena, errors);
|
200
213
|
}
|
201
214
|
|
202
215
|
const grpc_channel_filter* XdsHttpFaultFilter::channel_filter() const {
|
@@ -20,47 +20,39 @@
|
|
20
20
|
#include <grpc/support/port_platform.h>
|
21
21
|
|
22
22
|
#include "absl/status/statusor.h"
|
23
|
+
#include "absl/strings/string_view.h"
|
24
|
+
#include "absl/types/optional.h"
|
23
25
|
#include "upb/arena.h"
|
24
26
|
#include "upb/def.h"
|
25
|
-
#include "upb/upb.h"
|
26
27
|
|
28
|
+
#include "src/core/ext/xds/xds_common_types.h"
|
27
29
|
#include "src/core/ext/xds/xds_http_filters.h"
|
28
30
|
#include "src/core/lib/channel/channel_args.h"
|
29
31
|
#include "src/core/lib/channel/channel_fwd.h"
|
32
|
+
#include "src/core/lib/gprpp/validation_errors.h"
|
30
33
|
|
31
34
|
namespace grpc_core {
|
32
35
|
|
33
|
-
extern const char* kXdsHttpFaultFilterConfigName;
|
34
|
-
|
35
36
|
class XdsHttpFaultFilter : public XdsHttpFilterImpl {
|
36
37
|
public:
|
37
|
-
|
38
|
+
absl::string_view ConfigProtoName() const override;
|
39
|
+
absl::string_view OverrideConfigProtoName() const override;
|
38
40
|
void PopulateSymtab(upb_DefPool* symtab) const override;
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
absl::StatusOr<FilterConfig> GenerateFilterConfigOverride(
|
46
|
-
upb_StringView serialized_filter_config, upb_Arena* arena) const override;
|
47
|
-
|
48
|
-
// Overrides the channel_filter method
|
41
|
+
absl::optional<FilterConfig> GenerateFilterConfig(
|
42
|
+
XdsExtension extension, upb_Arena* arena,
|
43
|
+
ValidationErrors* errors) const override;
|
44
|
+
absl::optional<FilterConfig> GenerateFilterConfigOverride(
|
45
|
+
XdsExtension extension, upb_Arena* arena,
|
46
|
+
ValidationErrors* errors) const override;
|
49
47
|
const grpc_channel_filter* channel_filter() const override;
|
50
|
-
|
51
|
-
// Overrides the ModifyChannelArgs method
|
52
48
|
ChannelArgs ModifyChannelArgs(const ChannelArgs& args) const override;
|
53
|
-
|
54
|
-
// Overrides the GenerateServiceConfig method
|
55
49
|
absl::StatusOr<ServiceConfigJsonEntry> GenerateServiceConfig(
|
56
50
|
const FilterConfig& hcm_filter_config,
|
57
51
|
const FilterConfig* filter_config_override) const override;
|
58
|
-
|
59
52
|
bool IsSupportedOnClients() const override { return true; }
|
60
|
-
|
61
53
|
bool IsSupportedOnServers() const override { return false; }
|
62
54
|
};
|
63
55
|
|
64
56
|
} // namespace grpc_core
|
65
57
|
|
66
|
-
#endif
|
58
|
+
#endif // GRPC_CORE_EXT_XDS_XDS_HTTP_FAULT_FILTER_H
|
@@ -23,107 +23,94 @@
|
|
23
23
|
#include <utility>
|
24
24
|
#include <vector>
|
25
25
|
|
26
|
-
#include "absl/
|
27
|
-
#include "absl/status/status.h"
|
26
|
+
#include "absl/types/variant.h"
|
28
27
|
#include "envoy/extensions/filters/http/router/v3/router.upb.h"
|
29
28
|
#include "envoy/extensions/filters/http/router/v3/router.upbdefs.h"
|
30
29
|
|
30
|
+
#include <grpc/support/log.h>
|
31
|
+
|
31
32
|
#include "src/core/ext/xds/xds_http_fault_filter.h"
|
32
33
|
#include "src/core/ext/xds/xds_http_rbac_filter.h"
|
33
34
|
|
34
35
|
namespace grpc_core {
|
35
36
|
|
36
|
-
|
37
|
-
|
37
|
+
//
|
38
|
+
// XdsHttpRouterFilter
|
39
|
+
//
|
38
40
|
|
39
|
-
|
41
|
+
absl::string_view XdsHttpRouterFilter::ConfigProtoName() const {
|
42
|
+
return "envoy.extensions.filters.http.router.v3.Router";
|
43
|
+
}
|
40
44
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
envoy_extensions_filters_http_router_v3_Router_getmsgdef(symtab);
|
45
|
-
}
|
45
|
+
absl::string_view XdsHttpRouterFilter::OverrideConfigProtoName() const {
|
46
|
+
return "";
|
47
|
+
}
|
46
48
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
if (envoy_extensions_filters_http_router_v3_Router_parse(
|
51
|
-
serialized_filter_config.data, serialized_filter_config.size,
|
52
|
-
arena) == nullptr) {
|
53
|
-
return absl::InvalidArgumentError("could not parse router filter config");
|
54
|
-
}
|
55
|
-
return FilterConfig{kXdsHttpRouterFilterConfigName, Json()};
|
56
|
-
}
|
49
|
+
void XdsHttpRouterFilter::PopulateSymtab(upb_DefPool* symtab) const {
|
50
|
+
envoy_extensions_filters_http_router_v3_Router_getmsgdef(symtab);
|
51
|
+
}
|
57
52
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
53
|
+
absl::optional<XdsHttpFilterImpl::FilterConfig>
|
54
|
+
XdsHttpRouterFilter::GenerateFilterConfig(XdsExtension extension,
|
55
|
+
upb_Arena* arena,
|
56
|
+
ValidationErrors* errors) const {
|
57
|
+
absl::string_view* serialized_filter_config =
|
58
|
+
absl::get_if<absl::string_view>(&extension.value);
|
59
|
+
if (serialized_filter_config == nullptr) {
|
60
|
+
errors->AddError("could not parse router filter config");
|
61
|
+
return absl::nullopt;
|
63
62
|
}
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
const FilterConfig& /*hcm_filter_config*/,
|
70
|
-
const FilterConfig* /*filter_config_override*/) const override {
|
71
|
-
return absl::UnimplementedError("router filter should never be called");
|
63
|
+
if (envoy_extensions_filters_http_router_v3_Router_parse(
|
64
|
+
serialized_filter_config->data(), serialized_filter_config->size(),
|
65
|
+
arena) == nullptr) {
|
66
|
+
errors->AddError("could not parse router filter config");
|
67
|
+
return absl::nullopt;
|
72
68
|
}
|
69
|
+
return FilterConfig{ConfigProtoName(), Json()};
|
70
|
+
}
|
73
71
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
using FilterOwnerList = std::vector<std::unique_ptr<XdsHttpFilterImpl>>;
|
82
|
-
using FilterRegistryMap = std::map<absl::string_view, XdsHttpFilterImpl*>;
|
72
|
+
absl::optional<XdsHttpFilterImpl::FilterConfig>
|
73
|
+
XdsHttpRouterFilter::GenerateFilterConfigOverride(
|
74
|
+
XdsExtension /*extension*/, upb_Arena* /*arena*/,
|
75
|
+
ValidationErrors* errors) const {
|
76
|
+
errors->AddError("router filter does not support config override");
|
77
|
+
return absl::nullopt;
|
78
|
+
}
|
83
79
|
|
84
|
-
|
85
|
-
|
80
|
+
//
|
81
|
+
// XdsHttpFilterRegistry
|
82
|
+
//
|
86
83
|
|
87
|
-
|
84
|
+
XdsHttpFilterRegistry::XdsHttpFilterRegistry(bool register_builtins) {
|
85
|
+
if (register_builtins) {
|
86
|
+
RegisterFilter(std::make_unique<XdsHttpRouterFilter>());
|
87
|
+
RegisterFilter(std::make_unique<XdsHttpFaultFilter>());
|
88
|
+
RegisterFilter(std::make_unique<XdsHttpRbacFilter>());
|
89
|
+
}
|
90
|
+
}
|
88
91
|
|
89
92
|
void XdsHttpFilterRegistry::RegisterFilter(
|
90
|
-
std::unique_ptr<XdsHttpFilterImpl> filter
|
91
|
-
|
92
|
-
|
93
|
-
|
93
|
+
std::unique_ptr<XdsHttpFilterImpl> filter) {
|
94
|
+
GPR_ASSERT(
|
95
|
+
registry_map_.emplace(filter->ConfigProtoName(), filter.get()).second);
|
96
|
+
auto override_proto_name = filter->OverrideConfigProtoName();
|
97
|
+
if (!override_proto_name.empty()) {
|
98
|
+
GPR_ASSERT(registry_map_.emplace(override_proto_name, filter.get()).second);
|
94
99
|
}
|
95
|
-
|
100
|
+
owning_list_.push_back(std::move(filter));
|
96
101
|
}
|
97
102
|
|
98
103
|
const XdsHttpFilterImpl* XdsHttpFilterRegistry::GetFilterForType(
|
99
|
-
absl::string_view proto_type_name) {
|
100
|
-
auto it =
|
101
|
-
if (it ==
|
104
|
+
absl::string_view proto_type_name) const {
|
105
|
+
auto it = registry_map_.find(proto_type_name);
|
106
|
+
if (it == registry_map_.end()) return nullptr;
|
102
107
|
return it->second;
|
103
108
|
}
|
104
109
|
|
105
|
-
void XdsHttpFilterRegistry::PopulateSymtab(upb_DefPool* symtab) {
|
106
|
-
for (const auto& filter :
|
110
|
+
void XdsHttpFilterRegistry::PopulateSymtab(upb_DefPool* symtab) const {
|
111
|
+
for (const auto& filter : owning_list_) {
|
107
112
|
filter->PopulateSymtab(symtab);
|
108
113
|
}
|
109
114
|
}
|
110
115
|
|
111
|
-
void XdsHttpFilterRegistry::Init() {
|
112
|
-
g_filters = new FilterOwnerList;
|
113
|
-
g_filter_registry = new FilterRegistryMap;
|
114
|
-
RegisterFilter(absl::make_unique<XdsHttpRouterFilter>(),
|
115
|
-
{kXdsHttpRouterFilterConfigName});
|
116
|
-
RegisterFilter(absl::make_unique<XdsHttpFaultFilter>(),
|
117
|
-
{kXdsHttpFaultFilterConfigName});
|
118
|
-
RegisterFilter(absl::make_unique<XdsHttpRbacFilter>(),
|
119
|
-
{kXdsHttpRbacFilterConfigName});
|
120
|
-
RegisterFilter(absl::make_unique<XdsHttpRbacFilter>(),
|
121
|
-
{kXdsHttpRbacFilterConfigOverrideName});
|
122
|
-
}
|
123
|
-
|
124
|
-
void XdsHttpFilterRegistry::Shutdown() {
|
125
|
-
delete g_filter_registry;
|
126
|
-
delete g_filters;
|
127
|
-
}
|
128
|
-
|
129
116
|
} // namespace grpc_core
|
@@ -19,25 +19,28 @@
|
|
19
19
|
|
20
20
|
#include <grpc/support/port_platform.h>
|
21
21
|
|
22
|
+
#include <map>
|
22
23
|
#include <memory>
|
23
|
-
#include <set>
|
24
24
|
#include <string>
|
25
|
+
#include <utility>
|
26
|
+
#include <vector>
|
25
27
|
|
28
|
+
#include "absl/status/status.h"
|
26
29
|
#include "absl/status/statusor.h"
|
27
30
|
#include "absl/strings/str_cat.h"
|
28
31
|
#include "absl/strings/string_view.h"
|
32
|
+
#include "absl/types/optional.h"
|
29
33
|
#include "upb/arena.h"
|
30
34
|
#include "upb/def.h"
|
31
|
-
#include "upb/upb.h"
|
32
35
|
|
36
|
+
#include "src/core/ext/xds/xds_common_types.h"
|
33
37
|
#include "src/core/lib/channel/channel_args.h"
|
34
38
|
#include "src/core/lib/channel/channel_fwd.h"
|
39
|
+
#include "src/core/lib/gprpp/validation_errors.h"
|
35
40
|
#include "src/core/lib/json/json.h"
|
36
41
|
|
37
42
|
namespace grpc_core {
|
38
43
|
|
39
|
-
extern const char* kXdsHttpRouterFilterConfigName;
|
40
|
-
|
41
44
|
class XdsHttpFilterImpl {
|
42
45
|
public:
|
43
46
|
struct FilterConfig {
|
@@ -69,25 +72,33 @@ class XdsHttpFilterImpl {
|
|
69
72
|
|
70
73
|
virtual ~XdsHttpFilterImpl() = default;
|
71
74
|
|
75
|
+
// Returns the top-level filter config proto message name.
|
76
|
+
virtual absl::string_view ConfigProtoName() const = 0;
|
77
|
+
|
78
|
+
// Returns the override filter config proto message name.
|
79
|
+
// If empty, no override type is supported.
|
80
|
+
virtual absl::string_view OverrideConfigProtoName() const = 0;
|
81
|
+
|
72
82
|
// Loads the proto message into the upb symtab.
|
73
83
|
virtual void PopulateSymtab(upb_DefPool* symtab) const = 0;
|
74
84
|
|
75
85
|
// Generates a Config from the xDS filter config proto.
|
76
86
|
// Used for the top-level config in the HCM HTTP filter list.
|
77
|
-
virtual absl::
|
78
|
-
|
87
|
+
virtual absl::optional<FilterConfig> GenerateFilterConfig(
|
88
|
+
XdsExtension extension, upb_Arena* arena,
|
89
|
+
ValidationErrors* errors) const = 0;
|
79
90
|
|
80
91
|
// Generates a Config from the xDS filter config proto.
|
81
92
|
// Used for the typed_per_filter_config override in VirtualHost and Route.
|
82
|
-
virtual absl::
|
83
|
-
|
93
|
+
virtual absl::optional<FilterConfig> GenerateFilterConfigOverride(
|
94
|
+
XdsExtension extension, upb_Arena* arena,
|
95
|
+
ValidationErrors* errors) const = 0;
|
84
96
|
|
85
97
|
// C-core channel filter implementation.
|
86
98
|
virtual const grpc_channel_filter* channel_filter() const = 0;
|
87
99
|
|
88
100
|
// Modifies channel args that may affect service config parsing (not
|
89
101
|
// visible to the channel as a whole).
|
90
|
-
// Takes ownership of args. Caller takes ownership of return value.
|
91
102
|
virtual ChannelArgs ModifyChannelArgs(const ChannelArgs& args) const {
|
92
103
|
return args;
|
93
104
|
}
|
@@ -112,22 +123,59 @@ class XdsHttpFilterImpl {
|
|
112
123
|
virtual bool IsTerminalFilter() const { return false; }
|
113
124
|
};
|
114
125
|
|
126
|
+
class XdsHttpRouterFilter : public XdsHttpFilterImpl {
|
127
|
+
public:
|
128
|
+
absl::string_view ConfigProtoName() const override;
|
129
|
+
absl::string_view OverrideConfigProtoName() const override;
|
130
|
+
void PopulateSymtab(upb_DefPool* symtab) const override;
|
131
|
+
absl::optional<FilterConfig> GenerateFilterConfig(
|
132
|
+
XdsExtension extension, upb_Arena* arena,
|
133
|
+
ValidationErrors* errors) const override;
|
134
|
+
absl::optional<FilterConfig> GenerateFilterConfigOverride(
|
135
|
+
XdsExtension extension, upb_Arena* arena,
|
136
|
+
ValidationErrors* errors) const override;
|
137
|
+
const grpc_channel_filter* channel_filter() const override { return nullptr; }
|
138
|
+
absl::StatusOr<ServiceConfigJsonEntry> GenerateServiceConfig(
|
139
|
+
const FilterConfig& /*hcm_filter_config*/,
|
140
|
+
const FilterConfig* /*filter_config_override*/) const override {
|
141
|
+
// This will never be called, since channel_filter() returns null.
|
142
|
+
return absl::UnimplementedError("router filter should never be called");
|
143
|
+
}
|
144
|
+
bool IsSupportedOnClients() const override { return true; }
|
145
|
+
bool IsSupportedOnServers() const override { return true; }
|
146
|
+
bool IsTerminalFilter() const override { return true; }
|
147
|
+
};
|
148
|
+
|
115
149
|
class XdsHttpFilterRegistry {
|
116
150
|
public:
|
117
|
-
|
118
|
-
|
119
|
-
|
151
|
+
explicit XdsHttpFilterRegistry(bool register_builtins = true);
|
152
|
+
|
153
|
+
// Not copyable.
|
154
|
+
XdsHttpFilterRegistry(const XdsHttpFilterRegistry&) = delete;
|
155
|
+
XdsHttpFilterRegistry& operator=(const XdsHttpFilterRegistry&) = delete;
|
156
|
+
|
157
|
+
// Movable.
|
158
|
+
XdsHttpFilterRegistry(XdsHttpFilterRegistry&& other) noexcept
|
159
|
+
: owning_list_(std::move(other.owning_list_)),
|
160
|
+
registry_map_(std::move(other.registry_map_)) {}
|
161
|
+
XdsHttpFilterRegistry& operator=(XdsHttpFilterRegistry&& other) noexcept {
|
162
|
+
owning_list_ = std::move(other.owning_list_);
|
163
|
+
registry_map_ = std::move(other.registry_map_);
|
164
|
+
return *this;
|
165
|
+
}
|
166
|
+
|
167
|
+
void RegisterFilter(std::unique_ptr<XdsHttpFilterImpl> filter);
|
120
168
|
|
121
|
-
|
122
|
-
absl::string_view proto_type_name);
|
169
|
+
const XdsHttpFilterImpl* GetFilterForType(
|
170
|
+
absl::string_view proto_type_name) const;
|
123
171
|
|
124
|
-
|
172
|
+
void PopulateSymtab(upb_DefPool* symtab) const;
|
125
173
|
|
126
|
-
|
127
|
-
|
128
|
-
|
174
|
+
private:
|
175
|
+
std::vector<std::unique_ptr<XdsHttpFilterImpl>> owning_list_;
|
176
|
+
std::map<absl::string_view, XdsHttpFilterImpl*> registry_map_;
|
129
177
|
};
|
130
178
|
|
131
179
|
} // namespace grpc_core
|
132
180
|
|
133
|
-
#endif
|
181
|
+
#endif // GRPC_CORE_EXT_XDS_XDS_HTTP_FILTERS_H
|