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
@@ -18,18 +18,10 @@
|
|
18
18
|
|
19
19
|
#include "src/core/ext/filters/message_size/message_size_filter.h"
|
20
20
|
|
21
|
-
#include <algorithm>
|
22
|
-
#include <map>
|
23
21
|
#include <new>
|
24
|
-
#include <string>
|
25
|
-
#include <utility>
|
26
|
-
#include <vector>
|
27
22
|
|
28
|
-
#include "absl/memory/memory.h"
|
29
23
|
#include "absl/status/status.h"
|
30
|
-
#include "absl/strings/str_cat.h"
|
31
24
|
#include "absl/strings/str_format.h"
|
32
|
-
#include "absl/types/optional.h"
|
33
25
|
|
34
26
|
#include <grpc/impl/codegen/grpc_types.h>
|
35
27
|
#include <grpc/status.h>
|
@@ -39,8 +31,8 @@
|
|
39
31
|
#include "src/core/lib/channel/channel_stack.h"
|
40
32
|
#include "src/core/lib/channel/channel_stack_builder.h"
|
41
33
|
#include "src/core/lib/config/core_configuration.h"
|
42
|
-
#include "src/core/lib/gpr/string.h"
|
43
34
|
#include "src/core/lib/gprpp/debug_location.h"
|
35
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
44
36
|
#include "src/core/lib/iomgr/call_combiner.h"
|
45
37
|
#include "src/core/lib/iomgr/closure.h"
|
46
38
|
#include "src/core/lib/iomgr/error.h"
|
@@ -71,64 +63,59 @@ const MessageSizeParsedConfig* MessageSizeParsedConfig::GetFromCallContext(
|
|
71
63
|
svc_cfg_call_data->GetMethodParsedConfig(service_config_parser_index));
|
72
64
|
}
|
73
65
|
|
66
|
+
MessageSizeParsedConfig MessageSizeParsedConfig::GetFromChannelArgs(
|
67
|
+
const ChannelArgs& channel_args) {
|
68
|
+
MessageSizeParsedConfig limits;
|
69
|
+
limits.max_send_size_ = GetMaxSendSizeFromChannelArgs(channel_args);
|
70
|
+
limits.max_recv_size_ = GetMaxRecvSizeFromChannelArgs(channel_args);
|
71
|
+
return limits;
|
72
|
+
}
|
73
|
+
|
74
|
+
absl::optional<uint32_t> GetMaxRecvSizeFromChannelArgs(
|
75
|
+
const ChannelArgs& args) {
|
76
|
+
if (args.WantMinimalStack()) return absl::nullopt;
|
77
|
+
int size = args.GetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH)
|
78
|
+
.value_or(GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH);
|
79
|
+
if (size < 0) return absl::nullopt;
|
80
|
+
return static_cast<uint32_t>(size);
|
81
|
+
}
|
82
|
+
|
83
|
+
absl::optional<uint32_t> GetMaxSendSizeFromChannelArgs(
|
84
|
+
const ChannelArgs& args) {
|
85
|
+
if (args.WantMinimalStack()) return absl::nullopt;
|
86
|
+
int size = args.GetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH)
|
87
|
+
.value_or(GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH);
|
88
|
+
if (size < 0) return absl::nullopt;
|
89
|
+
return static_cast<uint32_t>(size);
|
90
|
+
}
|
91
|
+
|
92
|
+
const JsonLoaderInterface* MessageSizeParsedConfig::JsonLoader(
|
93
|
+
const JsonArgs&) {
|
94
|
+
static const auto* loader =
|
95
|
+
JsonObjectLoader<MessageSizeParsedConfig>()
|
96
|
+
.OptionalField("maxRequestMessageBytes",
|
97
|
+
&MessageSizeParsedConfig::max_send_size_)
|
98
|
+
.OptionalField("maxResponseMessageBytes",
|
99
|
+
&MessageSizeParsedConfig::max_recv_size_)
|
100
|
+
.Finish();
|
101
|
+
return loader;
|
102
|
+
}
|
103
|
+
|
74
104
|
//
|
75
105
|
// MessageSizeParser
|
76
106
|
//
|
77
107
|
|
78
|
-
|
108
|
+
std::unique_ptr<ServiceConfigParser::ParsedConfig>
|
79
109
|
MessageSizeParser::ParsePerMethodParams(const ChannelArgs& /*args*/,
|
80
|
-
const Json& json
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
auto it = json.object_value().find("maxRequestMessageBytes");
|
85
|
-
if (it != json.object_value().end()) {
|
86
|
-
if (it->second.type() != Json::Type::STRING &&
|
87
|
-
it->second.type() != Json::Type::NUMBER) {
|
88
|
-
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
89
|
-
"field:maxRequestMessageBytes error:should be of type number"));
|
90
|
-
} else {
|
91
|
-
max_request_message_bytes =
|
92
|
-
gpr_parse_nonnegative_int(it->second.string_value().c_str());
|
93
|
-
if (max_request_message_bytes == -1) {
|
94
|
-
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
95
|
-
"field:maxRequestMessageBytes error:should be non-negative"));
|
96
|
-
}
|
97
|
-
}
|
98
|
-
}
|
99
|
-
// Max response size.
|
100
|
-
int max_response_message_bytes = -1;
|
101
|
-
it = json.object_value().find("maxResponseMessageBytes");
|
102
|
-
if (it != json.object_value().end()) {
|
103
|
-
if (it->second.type() != Json::Type::STRING &&
|
104
|
-
it->second.type() != Json::Type::NUMBER) {
|
105
|
-
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
106
|
-
"field:maxResponseMessageBytes error:should be of type number"));
|
107
|
-
} else {
|
108
|
-
max_response_message_bytes =
|
109
|
-
gpr_parse_nonnegative_int(it->second.string_value().c_str());
|
110
|
-
if (max_response_message_bytes == -1) {
|
111
|
-
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
112
|
-
"field:maxResponseMessageBytes error:should be non-negative"));
|
113
|
-
}
|
114
|
-
}
|
115
|
-
}
|
116
|
-
if (!error_list.empty()) {
|
117
|
-
grpc_error_handle error =
|
118
|
-
GRPC_ERROR_CREATE_FROM_VECTOR("Message size parser", &error_list);
|
119
|
-
absl::Status status = absl::InvalidArgumentError(
|
120
|
-
absl::StrCat("error parsing message size method parameters: ",
|
121
|
-
grpc_error_std_string(error)));
|
122
|
-
GRPC_ERROR_UNREF(error);
|
123
|
-
return status;
|
124
|
-
}
|
125
|
-
return absl::make_unique<MessageSizeParsedConfig>(max_request_message_bytes,
|
126
|
-
max_response_message_bytes);
|
110
|
+
const Json& json,
|
111
|
+
ValidationErrors* errors) {
|
112
|
+
return LoadFromJson<std::unique_ptr<MessageSizeParsedConfig>>(
|
113
|
+
json, JsonArgs(), errors);
|
127
114
|
}
|
128
115
|
|
129
116
|
void MessageSizeParser::Register(CoreConfiguration::Builder* builder) {
|
130
117
|
builder->service_config_parser()->RegisterParser(
|
131
|
-
|
118
|
+
std::make_unique<MessageSizeParser>());
|
132
119
|
}
|
133
120
|
|
134
121
|
size_t MessageSizeParser::ParserIndex() {
|
@@ -136,23 +123,11 @@ size_t MessageSizeParser::ParserIndex() {
|
|
136
123
|
parser_name());
|
137
124
|
}
|
138
125
|
|
139
|
-
int GetMaxRecvSizeFromChannelArgs(const ChannelArgs& args) {
|
140
|
-
if (args.WantMinimalStack()) return -1;
|
141
|
-
return std::max(-1, args.GetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH)
|
142
|
-
.value_or(GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH));
|
143
|
-
}
|
144
|
-
|
145
|
-
int GetMaxSendSizeFromChannelArgs(const ChannelArgs& args) {
|
146
|
-
if (args.WantMinimalStack()) return -1;
|
147
|
-
return std::max(-1, args.GetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH)
|
148
|
-
.value_or(GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH));
|
149
|
-
}
|
150
|
-
|
151
126
|
} // namespace grpc_core
|
152
127
|
|
153
128
|
namespace {
|
154
129
|
struct channel_data {
|
155
|
-
grpc_core::MessageSizeParsedConfig
|
130
|
+
grpc_core::MessageSizeParsedConfig limits;
|
156
131
|
const size_t service_config_parser_index{
|
157
132
|
grpc_core::MessageSizeParser::ParserIndex()};
|
158
133
|
};
|
@@ -170,34 +145,37 @@ struct call_data {
|
|
170
145
|
// Note: Per-method config is only available on the client, so we
|
171
146
|
// apply the max request size to the send limit and the max response
|
172
147
|
// size to the receive limit.
|
173
|
-
const grpc_core::MessageSizeParsedConfig*
|
148
|
+
const grpc_core::MessageSizeParsedConfig* config_from_call_context =
|
174
149
|
grpc_core::MessageSizeParsedConfig::GetFromCallContext(
|
175
150
|
args.context, chand.service_config_parser_index);
|
176
|
-
if (
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
151
|
+
if (config_from_call_context != nullptr) {
|
152
|
+
absl::optional<uint32_t> max_send_size = limits.max_send_size();
|
153
|
+
absl::optional<uint32_t> max_recv_size = limits.max_recv_size();
|
154
|
+
if (config_from_call_context->max_send_size().has_value() &&
|
155
|
+
(!max_send_size.has_value() ||
|
156
|
+
*config_from_call_context->max_send_size() < *max_send_size)) {
|
157
|
+
max_send_size = *config_from_call_context->max_send_size();
|
181
158
|
}
|
182
|
-
if (
|
183
|
-
(
|
184
|
-
|
185
|
-
|
159
|
+
if (config_from_call_context->max_recv_size().has_value() &&
|
160
|
+
(!max_recv_size.has_value() ||
|
161
|
+
*config_from_call_context->max_recv_size() < *max_recv_size)) {
|
162
|
+
max_recv_size = *config_from_call_context->max_recv_size();
|
186
163
|
}
|
164
|
+
limits = grpc_core::MessageSizeParsedConfig(max_send_size, max_recv_size);
|
187
165
|
}
|
188
166
|
}
|
189
167
|
|
190
|
-
~call_data() {
|
168
|
+
~call_data() {}
|
191
169
|
|
192
170
|
grpc_core::CallCombiner* call_combiner;
|
193
|
-
grpc_core::MessageSizeParsedConfig
|
171
|
+
grpc_core::MessageSizeParsedConfig limits;
|
194
172
|
// Receive closures are chained: we inject this closure as the
|
195
173
|
// recv_message_ready up-call on transport_stream_op, and remember to
|
196
174
|
// call our next_recv_message_ready member after handling it.
|
197
175
|
grpc_closure recv_message_ready;
|
198
176
|
grpc_closure recv_trailing_metadata_ready;
|
199
|
-
// The error caused by a message that is too large, or
|
200
|
-
grpc_error_handle error
|
177
|
+
// The error caused by a message that is too large, or absl::OkStatus()
|
178
|
+
grpc_error_handle error;
|
201
179
|
// Used by recv_message_ready.
|
202
180
|
absl::optional<grpc_core::SliceBuffer>* recv_message = nullptr;
|
203
181
|
// Original recv_message_ready callback, invoked after our own.
|
@@ -215,19 +193,18 @@ struct call_data {
|
|
215
193
|
static void recv_message_ready(void* user_data, grpc_error_handle error) {
|
216
194
|
grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
|
217
195
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
218
|
-
if (calld->recv_message->has_value() &&
|
196
|
+
if (calld->recv_message->has_value() &&
|
197
|
+
calld->limits.max_recv_size().has_value() &&
|
219
198
|
(*calld->recv_message)->Length() >
|
220
|
-
static_cast<size_t>(calld->limits.max_recv_size)) {
|
199
|
+
static_cast<size_t>(*calld->limits.max_recv_size())) {
|
221
200
|
grpc_error_handle new_error = grpc_error_set_int(
|
222
|
-
|
201
|
+
GRPC_ERROR_CREATE(absl::StrFormat(
|
223
202
|
"Received message larger than max (%u vs. %d)",
|
224
|
-
(*calld->recv_message)->Length(), calld->limits.max_recv_size)),
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
calld->error =
|
229
|
-
} else {
|
230
|
-
(void)GRPC_ERROR_REF(error);
|
203
|
+
(*calld->recv_message)->Length(), *calld->limits.max_recv_size())),
|
204
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
205
|
+
GRPC_STATUS_RESOURCE_EXHAUSTED);
|
206
|
+
error = grpc_error_add_child(error, new_error);
|
207
|
+
calld->error = error;
|
231
208
|
}
|
232
209
|
// Invoke the next callback.
|
233
210
|
grpc_closure* closure = calld->next_recv_message_ready;
|
@@ -255,14 +232,13 @@ static void recv_trailing_metadata_ready(void* user_data,
|
|
255
232
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
256
233
|
if (calld->next_recv_message_ready != nullptr) {
|
257
234
|
calld->seen_recv_trailing_metadata = true;
|
258
|
-
calld->recv_trailing_metadata_error =
|
235
|
+
calld->recv_trailing_metadata_error = error;
|
259
236
|
GRPC_CALL_COMBINER_STOP(calld->call_combiner,
|
260
237
|
"deferring recv_trailing_metadata_ready until "
|
261
238
|
"after recv_message_ready");
|
262
239
|
return;
|
263
240
|
}
|
264
|
-
error =
|
265
|
-
grpc_error_add_child(GRPC_ERROR_REF(error), GRPC_ERROR_REF(calld->error));
|
241
|
+
error = grpc_error_add_child(error, calld->error);
|
266
242
|
// Invoke the next callback.
|
267
243
|
grpc_core::Closure::Run(DEBUG_LOCATION,
|
268
244
|
calld->original_recv_trailing_metadata_ready, error);
|
@@ -273,16 +249,16 @@ static void message_size_start_transport_stream_op_batch(
|
|
273
249
|
grpc_call_element* elem, grpc_transport_stream_op_batch* op) {
|
274
250
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
275
251
|
// Check max send message size.
|
276
|
-
if (op->send_message && calld->limits.max_send_size
|
252
|
+
if (op->send_message && calld->limits.max_send_size().has_value() &&
|
277
253
|
op->payload->send_message.send_message->Length() >
|
278
|
-
static_cast<size_t>(calld->limits.max_send_size)) {
|
254
|
+
static_cast<size_t>(*calld->limits.max_send_size())) {
|
279
255
|
grpc_transport_stream_op_batch_finish_with_failure(
|
280
256
|
op,
|
281
|
-
grpc_error_set_int(
|
257
|
+
grpc_error_set_int(GRPC_ERROR_CREATE(absl::StrFormat(
|
282
258
|
"Sent message larger than max (%u vs. %d)",
|
283
259
|
op->payload->send_message.send_message->Length(),
|
284
|
-
calld->limits.max_send_size)),
|
285
|
-
|
260
|
+
*calld->limits.max_send_size())),
|
261
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
286
262
|
GRPC_STATUS_RESOURCE_EXHAUSTED),
|
287
263
|
calld->call_combiner);
|
288
264
|
return;
|
@@ -310,7 +286,7 @@ static grpc_error_handle message_size_init_call_elem(
|
|
310
286
|
grpc_call_element* elem, const grpc_call_element_args* args) {
|
311
287
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
312
288
|
new (elem->call_data) call_data(elem, *chand, *args);
|
313
|
-
return
|
289
|
+
return absl::OkStatus();
|
314
290
|
}
|
315
291
|
|
316
292
|
// Destructor for call_data.
|
@@ -321,23 +297,15 @@ static void message_size_destroy_call_elem(
|
|
321
297
|
calld->~call_data();
|
322
298
|
}
|
323
299
|
|
324
|
-
grpc_core::MessageSizeParsedConfig::message_size_limits get_message_size_limits(
|
325
|
-
const grpc_core::ChannelArgs& channel_args) {
|
326
|
-
grpc_core::MessageSizeParsedConfig::message_size_limits lim;
|
327
|
-
lim.max_send_size = grpc_core::GetMaxSendSizeFromChannelArgs(channel_args);
|
328
|
-
lim.max_recv_size = grpc_core::GetMaxRecvSizeFromChannelArgs(channel_args);
|
329
|
-
return lim;
|
330
|
-
}
|
331
|
-
|
332
300
|
// Constructor for channel_data.
|
333
301
|
static grpc_error_handle message_size_init_channel_elem(
|
334
302
|
grpc_channel_element* elem, grpc_channel_element_args* args) {
|
335
303
|
GPR_ASSERT(!args->is_last);
|
336
304
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
337
305
|
new (chand) channel_data();
|
338
|
-
chand->limits =
|
306
|
+
chand->limits = grpc_core::MessageSizeParsedConfig::GetFromChannelArgs(
|
339
307
|
grpc_core::ChannelArgs::FromC(args->channel_args));
|
340
|
-
return
|
308
|
+
return absl::OkStatus();
|
341
309
|
}
|
342
310
|
|
343
311
|
// Destructor for channel_data.
|
@@ -379,10 +347,11 @@ static bool maybe_add_message_size_filter(
|
|
379
347
|
if (channel_args.WantMinimalStack()) {
|
380
348
|
return true;
|
381
349
|
}
|
382
|
-
grpc_core::MessageSizeParsedConfig
|
383
|
-
|
350
|
+
grpc_core::MessageSizeParsedConfig limits =
|
351
|
+
grpc_core::MessageSizeParsedConfig::GetFromChannelArgs(channel_args);
|
384
352
|
const bool enable =
|
385
|
-
|
353
|
+
limits.max_send_size().has_value() ||
|
354
|
+
limits.max_recv_size().has_value() ||
|
386
355
|
channel_args.GetString(GRPC_ARG_SERVICE_CONFIG).has_value();
|
387
356
|
if (enable) builder->PrependFilter(&grpc_message_size_filter);
|
388
357
|
return true;
|
@@ -20,18 +20,22 @@
|
|
20
20
|
#include <grpc/support/port_platform.h>
|
21
21
|
|
22
22
|
#include <stddef.h>
|
23
|
+
#include <stdint.h>
|
23
24
|
|
24
25
|
#include <memory>
|
25
26
|
|
26
|
-
#include "absl/status/statusor.h"
|
27
27
|
#include "absl/strings/string_view.h"
|
28
|
+
#include "absl/types/optional.h"
|
28
29
|
|
29
30
|
#include "src/core/lib/channel/channel_args.h"
|
30
31
|
#include "src/core/lib/channel/channel_fwd.h"
|
31
32
|
#include "src/core/lib/channel/channel_stack.h"
|
32
33
|
#include "src/core/lib/channel/context.h"
|
33
34
|
#include "src/core/lib/config/core_configuration.h"
|
35
|
+
#include "src/core/lib/gprpp/validation_errors.h"
|
34
36
|
#include "src/core/lib/json/json.h"
|
37
|
+
#include "src/core/lib/json/json_args.h"
|
38
|
+
#include "src/core/lib/json/json_object_loader.h"
|
35
39
|
#include "src/core/lib/service_config/service_config_parser.h"
|
36
40
|
|
37
41
|
extern const grpc_channel_filter grpc_message_size_filter;
|
@@ -40,32 +44,35 @@ namespace grpc_core {
|
|
40
44
|
|
41
45
|
class MessageSizeParsedConfig : public ServiceConfigParser::ParsedConfig {
|
42
46
|
public:
|
43
|
-
|
44
|
-
|
45
|
-
int max_recv_size;
|
46
|
-
};
|
47
|
+
absl::optional<uint32_t> max_send_size() const { return max_send_size_; }
|
48
|
+
absl::optional<uint32_t> max_recv_size() const { return max_recv_size_; }
|
47
49
|
|
48
|
-
MessageSizeParsedConfig(
|
49
|
-
limits_.max_send_size = max_send_size;
|
50
|
-
limits_.max_recv_size = max_recv_size;
|
51
|
-
}
|
50
|
+
MessageSizeParsedConfig() = default;
|
52
51
|
|
53
|
-
|
52
|
+
MessageSizeParsedConfig(absl::optional<uint32_t> max_send_size,
|
53
|
+
absl::optional<uint32_t> max_recv_size)
|
54
|
+
: max_send_size_(max_send_size), max_recv_size_(max_recv_size) {}
|
54
55
|
|
55
56
|
static const MessageSizeParsedConfig* GetFromCallContext(
|
56
57
|
const grpc_call_context_element* context,
|
57
58
|
size_t service_config_parser_index);
|
58
59
|
|
60
|
+
static MessageSizeParsedConfig GetFromChannelArgs(const ChannelArgs& args);
|
61
|
+
|
62
|
+
static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
|
63
|
+
|
59
64
|
private:
|
60
|
-
|
65
|
+
absl::optional<uint32_t> max_send_size_;
|
66
|
+
absl::optional<uint32_t> max_recv_size_;
|
61
67
|
};
|
62
68
|
|
63
69
|
class MessageSizeParser : public ServiceConfigParser::Parser {
|
64
70
|
public:
|
65
71
|
absl::string_view name() const override { return parser_name(); }
|
66
72
|
|
67
|
-
|
68
|
-
|
73
|
+
std::unique_ptr<ServiceConfigParser::ParsedConfig> ParsePerMethodParams(
|
74
|
+
const ChannelArgs& /*args*/, const Json& json,
|
75
|
+
ValidationErrors* errors) override;
|
69
76
|
|
70
77
|
static void Register(CoreConfiguration::Builder* builder);
|
71
78
|
|
@@ -75,8 +82,8 @@ class MessageSizeParser : public ServiceConfigParser::Parser {
|
|
75
82
|
static absl::string_view parser_name() { return "message_size"; }
|
76
83
|
};
|
77
84
|
|
78
|
-
|
79
|
-
|
85
|
+
absl::optional<uint32_t> GetMaxRecvSizeFromChannelArgs(const ChannelArgs& args);
|
86
|
+
absl::optional<uint32_t> GetMaxSendSizeFromChannelArgs(const ChannelArgs& args);
|
80
87
|
|
81
88
|
} // namespace grpc_core
|
82
89
|
|
@@ -21,6 +21,8 @@
|
|
21
21
|
#include <new>
|
22
22
|
#include <utility>
|
23
23
|
|
24
|
+
#include "absl/status/status.h"
|
25
|
+
|
24
26
|
#include <grpc/status.h>
|
25
27
|
#include <grpc/support/log.h>
|
26
28
|
|
@@ -28,6 +30,7 @@
|
|
28
30
|
#include "src/core/lib/channel/channel_args.h"
|
29
31
|
#include "src/core/lib/config/core_configuration.h"
|
30
32
|
#include "src/core/lib/gprpp/debug_location.h"
|
33
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
31
34
|
#include "src/core/lib/security/authorization/authorization_engine.h"
|
32
35
|
#include "src/core/lib/security/authorization/grpc_authorization_engine.h"
|
33
36
|
#include "src/core/lib/security/context/security_context.h"
|
@@ -45,7 +48,7 @@ namespace grpc_core {
|
|
45
48
|
grpc_error_handle RbacFilter::CallData::Init(
|
46
49
|
grpc_call_element* elem, const grpc_call_element_args* args) {
|
47
50
|
new (elem->call_data) CallData(elem, *args);
|
48
|
-
return
|
51
|
+
return absl::OkStatus();
|
49
52
|
}
|
50
53
|
|
51
54
|
void RbacFilter::CallData::Destroy(grpc_call_element* elem,
|
@@ -82,7 +85,7 @@ void RbacFilter::CallData::RecvInitialMetadataReady(void* user_data,
|
|
82
85
|
grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
|
83
86
|
CallData* calld = static_cast<CallData*>(elem->call_data);
|
84
87
|
RbacFilter* filter = static_cast<RbacFilter*>(elem->channel_data);
|
85
|
-
if (
|
88
|
+
if (error.ok()) {
|
86
89
|
// Fetch and apply the rbac policy from the service config.
|
87
90
|
auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
|
88
91
|
calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
@@ -90,7 +93,7 @@ void RbacFilter::CallData::RecvInitialMetadataReady(void* user_data,
|
|
90
93
|
service_config_call_data->GetMethodParsedConfig(
|
91
94
|
filter->service_config_parser_index_));
|
92
95
|
if (method_params == nullptr) {
|
93
|
-
error =
|
96
|
+
error = GRPC_ERROR_CREATE("No RBAC policy found.");
|
94
97
|
} else {
|
95
98
|
RbacFilter* chand = static_cast<RbacFilter*>(elem->channel_data);
|
96
99
|
auto* authorization_engine =
|
@@ -99,16 +102,13 @@ void RbacFilter::CallData::RecvInitialMetadataReady(void* user_data,
|
|
99
102
|
->Evaluate(EvaluateArgs(calld->recv_initial_metadata_,
|
100
103
|
&chand->per_channel_evaluate_args_))
|
101
104
|
.type == AuthorizationEngine::Decision::Type::kDeny) {
|
102
|
-
error =
|
103
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unauthorized RPC rejected");
|
105
|
+
error = GRPC_ERROR_CREATE("Unauthorized RPC rejected");
|
104
106
|
}
|
105
107
|
}
|
106
|
-
if (!
|
107
|
-
error = grpc_error_set_int(error,
|
108
|
+
if (!error.ok()) {
|
109
|
+
error = grpc_error_set_int(error, StatusIntProperty::kRpcStatus,
|
108
110
|
GRPC_STATUS_PERMISSION_DENIED);
|
109
111
|
}
|
110
|
-
} else {
|
111
|
-
(void)GRPC_ERROR_REF(error);
|
112
112
|
}
|
113
113
|
grpc_closure* closure = calld->original_recv_initial_metadata_ready_;
|
114
114
|
calld->original_recv_initial_metadata_ready_ = nullptr;
|
@@ -146,20 +146,20 @@ grpc_error_handle RbacFilter::Init(grpc_channel_element* elem,
|
|
146
146
|
GPR_ASSERT(elem->filter == &kFilterVtable);
|
147
147
|
auto* auth_context = grpc_find_auth_context_in_args(args->channel_args);
|
148
148
|
if (auth_context == nullptr) {
|
149
|
-
return
|
149
|
+
return GRPC_ERROR_CREATE("No auth context found");
|
150
150
|
}
|
151
151
|
auto* transport = grpc_channel_args_find_pointer<grpc_transport>(
|
152
152
|
args->channel_args, GRPC_ARG_TRANSPORT);
|
153
153
|
if (transport == nullptr) {
|
154
154
|
// This should never happen since the transport is always set on the server
|
155
155
|
// side.
|
156
|
-
return
|
156
|
+
return GRPC_ERROR_CREATE("No transport configured");
|
157
157
|
}
|
158
158
|
new (elem->channel_data) RbacFilter(
|
159
159
|
grpc_channel_stack_filter_instance_number(args->channel_stack, elem),
|
160
160
|
EvaluateArgs::PerChannelArgs(auth_context,
|
161
161
|
grpc_transport_get_endpoint(transport)));
|
162
|
-
return
|
162
|
+
return absl::OkStatus();
|
163
163
|
}
|
164
164
|
|
165
165
|
void RbacFilter::Destroy(grpc_channel_element* elem) {
|