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
@@ -279,7 +279,16 @@ void TransportFlowControl::UpdateSetting(
|
|
279
279
|
grpc_chttp2_settings_parameters[id].max_value);
|
280
280
|
if (new_desired_value != *desired_value) {
|
281
281
|
*desired_value = new_desired_value;
|
282
|
-
|
282
|
+
// Reaching zero can only happen for initial window size, and if it occurs
|
283
|
+
// we really want to wake up writes and ensure all the queued stream
|
284
|
+
// window updates are flushed, since stream flow control operates
|
285
|
+
// differently at zero window size.
|
286
|
+
FlowControlAction::Urgency urgency =
|
287
|
+
FlowControlAction::Urgency::QUEUE_UPDATE;
|
288
|
+
if (new_desired_value == 0) {
|
289
|
+
urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
|
290
|
+
}
|
291
|
+
(action->*set)(urgency, *desired_value);
|
283
292
|
}
|
284
293
|
} else {
|
285
294
|
int64_t delta = new_desired_value - *desired_value;
|
@@ -287,7 +296,8 @@ void TransportFlowControl::UpdateSetting(
|
|
287
296
|
if (delta != 0 &&
|
288
297
|
(delta <= -*desired_value / 5 || delta >= *desired_value / 5)) {
|
289
298
|
*desired_value = new_desired_value;
|
290
|
-
(action->*set)(FlowControlAction::Urgency::QUEUE_UPDATE,
|
299
|
+
(action->*set)(FlowControlAction::Urgency::QUEUE_UPDATE,
|
300
|
+
static_cast<uint32_t>(*desired_value));
|
291
301
|
}
|
292
302
|
}
|
293
303
|
}
|
@@ -362,15 +372,15 @@ FlowControlAction TransportFlowControl::PeriodicUpdate() {
|
|
362
372
|
|
363
373
|
uint32_t StreamFlowControl::MaybeSendUpdate() {
|
364
374
|
TransportFlowControl::IncomingUpdateContext tfc_upd(tfc_);
|
365
|
-
const
|
375
|
+
const int64_t announce = DesiredAnnounceSize();
|
366
376
|
pending_size_ = absl::nullopt;
|
367
377
|
tfc_upd.UpdateAnnouncedWindowDelta(&announced_window_delta_, announce);
|
368
378
|
GPR_ASSERT(DesiredAnnounceSize() == 0);
|
369
379
|
tfc_upd.MakeAction();
|
370
|
-
return announce;
|
380
|
+
return static_cast<uint32_t>(announce);
|
371
381
|
}
|
372
382
|
|
373
|
-
|
383
|
+
int64_t StreamFlowControl::DesiredAnnounceSize() const {
|
374
384
|
int64_t desired_window_delta = [this]() {
|
375
385
|
if (min_progress_size_ == 0) {
|
376
386
|
if (pending_size_.has_value() &&
|
@@ -390,13 +400,34 @@ uint32_t StreamFlowControl::DesiredAnnounceSize() const {
|
|
390
400
|
FlowControlAction StreamFlowControl::UpdateAction(FlowControlAction action) {
|
391
401
|
const int64_t desired_announce_size = DesiredAnnounceSize();
|
392
402
|
if (desired_announce_size > 0) {
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
403
|
+
FlowControlAction::Urgency urgency =
|
404
|
+
FlowControlAction::Urgency::QUEUE_UPDATE;
|
405
|
+
// Size at which we probably want to wake up and write regardless of whether
|
406
|
+
// we *have* to.
|
407
|
+
// Currently set at half the initial window size or 8kb (whichever is
|
408
|
+
// greater). 8kb means we don't send rapidly unnecessarily when the initial
|
409
|
+
// window size is small.
|
410
|
+
const int64_t hurry_up_size =
|
411
|
+
std::max(static_cast<int64_t>(tfc_->sent_init_window()) / 2,
|
412
|
+
static_cast<int64_t>(8192));
|
413
|
+
if (desired_announce_size > hurry_up_size) {
|
414
|
+
urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
|
415
|
+
}
|
416
|
+
// min_progress_size_ > 0 means we have a reader ready to read.
|
417
|
+
if (min_progress_size_ > 0) {
|
418
|
+
// If we're into initial window to receive that data we should wake up and
|
419
|
+
// send an update.
|
420
|
+
if (announced_window_delta_ < 0) {
|
421
|
+
urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
|
422
|
+
} else if (announced_window_delta_ == 0 &&
|
423
|
+
tfc_->sent_init_window() == 0) {
|
424
|
+
// Special case when initial window size is zero, meaning that
|
425
|
+
// announced_window_delta cannot become negative (it may already be so
|
426
|
+
// however).
|
427
|
+
urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
|
428
|
+
}
|
399
429
|
}
|
430
|
+
action.set_send_stream_update(urgency);
|
400
431
|
}
|
401
432
|
return action;
|
402
433
|
}
|
@@ -236,6 +236,7 @@ class TransportFlowControl final {
|
|
236
236
|
BdpEstimator* bdp_estimator() { return &bdp_estimator_; }
|
237
237
|
|
238
238
|
uint32_t acked_init_window() const { return acked_init_window_; }
|
239
|
+
uint32_t sent_init_window() const { return target_initial_window_size_; }
|
239
240
|
|
240
241
|
void SetAckedInitialWindow(uint32_t value) { acked_init_window_ = value; }
|
241
242
|
|
@@ -319,7 +320,7 @@ class StreamFlowControl final {
|
|
319
320
|
absl::Status RecvData(int64_t incoming_frame_size);
|
320
321
|
|
321
322
|
// the application is asking for a certain amount of bytes
|
322
|
-
void SetMinProgressSize(
|
323
|
+
void SetMinProgressSize(int64_t min_progress_size) {
|
323
324
|
sfc_->min_progress_size_ = min_progress_size;
|
324
325
|
}
|
325
326
|
|
@@ -356,7 +357,7 @@ class StreamFlowControl final {
|
|
356
357
|
|
357
358
|
int64_t remote_window_delta() const { return remote_window_delta_; }
|
358
359
|
int64_t announced_window_delta() const { return announced_window_delta_; }
|
359
|
-
|
360
|
+
int64_t min_progress_size() const { return min_progress_size_; }
|
360
361
|
|
361
362
|
private:
|
362
363
|
TransportFlowControl* const tfc_;
|
@@ -366,7 +367,7 @@ class StreamFlowControl final {
|
|
366
367
|
absl::optional<int64_t> pending_size_;
|
367
368
|
|
368
369
|
FlowControlAction UpdateAction(FlowControlAction action);
|
369
|
-
|
370
|
+
int64_t DesiredAnnounceSize() const;
|
370
371
|
};
|
371
372
|
|
372
373
|
class TestOnlyTransportTargetWindowEstimatesMocker {
|
@@ -29,8 +29,9 @@
|
|
29
29
|
#include <grpc/support/log.h>
|
30
30
|
|
31
31
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
32
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
33
|
+
#include "src/core/lib/slice/slice.h"
|
32
34
|
#include "src/core/lib/slice/slice_buffer.h"
|
33
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
34
35
|
#include "src/core/lib/transport/transport.h"
|
35
36
|
|
36
37
|
absl::Status grpc_chttp2_data_parser_begin_frame(uint8_t flags,
|
@@ -80,10 +81,10 @@ void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer* inbuf,
|
|
80
81
|
}
|
81
82
|
|
82
83
|
grpc_core::Poll<grpc_error_handle> grpc_deframe_unprocessed_incoming_frames(
|
83
|
-
grpc_chttp2_stream* s,
|
84
|
+
grpc_chttp2_stream* s, int64_t* min_progress_size,
|
84
85
|
grpc_core::SliceBuffer* stream_out, uint32_t* message_flags) {
|
85
86
|
grpc_slice_buffer* slices = &s->frame_storage;
|
86
|
-
grpc_error_handle error
|
87
|
+
grpc_error_handle error;
|
87
88
|
|
88
89
|
if (slices->length < 5) {
|
89
90
|
if (min_progress_size != nullptr) *min_progress_size = 5 - slices->length;
|
@@ -103,17 +104,17 @@ grpc_core::Poll<grpc_error_handle> grpc_deframe_unprocessed_incoming_frames(
|
|
103
104
|
}
|
104
105
|
break;
|
105
106
|
default:
|
106
|
-
error =
|
107
|
+
error = GRPC_ERROR_CREATE(
|
107
108
|
absl::StrFormat("Bad GRPC frame type 0x%02x", header[0]));
|
108
|
-
error = grpc_error_set_int(error,
|
109
|
+
error = grpc_error_set_int(error, grpc_core::StatusIntProperty::kStreamId,
|
109
110
|
static_cast<intptr_t>(s->id));
|
110
111
|
return error;
|
111
112
|
}
|
112
113
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
114
|
+
size_t length = (static_cast<uint32_t>(header[1]) << 24) |
|
115
|
+
(static_cast<uint32_t>(header[2]) << 16) |
|
116
|
+
(static_cast<uint32_t>(header[3]) << 8) |
|
117
|
+
static_cast<uint32_t>(header[4]);
|
117
118
|
|
118
119
|
if (slices->length < length + 5) {
|
119
120
|
if (min_progress_size != nullptr) {
|
@@ -131,7 +132,7 @@ grpc_core::Poll<grpc_error_handle> grpc_deframe_unprocessed_incoming_frames(
|
|
131
132
|
grpc_slice_buffer_move_first(slices, length, stream_out->c_slice_buffer());
|
132
133
|
}
|
133
134
|
|
134
|
-
return
|
135
|
+
return absl::OkStatus();
|
135
136
|
}
|
136
137
|
|
137
138
|
grpc_error_handle grpc_chttp2_data_parser_parse(void* /*parser*/,
|
@@ -139,17 +140,17 @@ grpc_error_handle grpc_chttp2_data_parser_parse(void* /*parser*/,
|
|
139
140
|
grpc_chttp2_stream* s,
|
140
141
|
const grpc_slice& slice,
|
141
142
|
int is_last) {
|
142
|
-
|
143
|
+
grpc_core::CSliceRef(slice);
|
143
144
|
grpc_slice_buffer_add(&s->frame_storage, slice);
|
144
145
|
grpc_chttp2_maybe_complete_recv_message(t, s);
|
145
146
|
|
146
147
|
if (is_last && s->received_last_frame) {
|
147
148
|
grpc_chttp2_mark_stream_closed(
|
148
149
|
t, s, true, false,
|
149
|
-
t->is_client
|
150
|
-
|
151
|
-
|
150
|
+
t->is_client
|
151
|
+
? GRPC_ERROR_CREATE("Data frame with END_STREAM flag received")
|
152
|
+
: absl::OkStatus());
|
152
153
|
}
|
153
154
|
|
154
|
-
return
|
155
|
+
return absl::OkStatus();
|
155
156
|
}
|
@@ -54,7 +54,7 @@ void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer* inbuf,
|
|
54
54
|
grpc_slice_buffer* outbuf);
|
55
55
|
|
56
56
|
grpc_core::Poll<grpc_error_handle> grpc_deframe_unprocessed_incoming_frames(
|
57
|
-
grpc_chttp2_stream* s,
|
57
|
+
grpc_chttp2_stream* s, int64_t* min_progress_size,
|
58
58
|
grpc_core::SliceBuffer* stream_out, uint32_t* message_flags);
|
59
59
|
|
60
60
|
#endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_DATA_H */
|
@@ -23,6 +23,7 @@
|
|
23
23
|
#include <string.h>
|
24
24
|
|
25
25
|
#include "absl/base/attributes.h"
|
26
|
+
#include "absl/status/status.h"
|
26
27
|
#include "absl/strings/str_format.h"
|
27
28
|
#include "absl/strings/string_view.h"
|
28
29
|
|
@@ -43,7 +44,7 @@ void grpc_chttp2_goaway_parser_destroy(grpc_chttp2_goaway_parser* p) {
|
|
43
44
|
grpc_error_handle grpc_chttp2_goaway_parser_begin_frame(
|
44
45
|
grpc_chttp2_goaway_parser* p, uint32_t length, uint8_t /*flags*/) {
|
45
46
|
if (length < 8) {
|
46
|
-
return
|
47
|
+
return GRPC_ERROR_CREATE(
|
47
48
|
absl::StrFormat("goaway frame too short (%d bytes)", length));
|
48
49
|
}
|
49
50
|
|
@@ -52,7 +53,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_begin_frame(
|
|
52
53
|
p->debug_data = static_cast<char*>(gpr_malloc(p->debug_length));
|
53
54
|
p->debug_pos = 0;
|
54
55
|
p->state = GRPC_CHTTP2_GOAWAY_LSI0;
|
55
|
-
return
|
56
|
+
return absl::OkStatus();
|
56
57
|
}
|
57
58
|
|
58
59
|
grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
|
@@ -70,7 +71,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
|
|
70
71
|
case GRPC_CHTTP2_GOAWAY_LSI0:
|
71
72
|
if (cur == end) {
|
72
73
|
p->state = GRPC_CHTTP2_GOAWAY_LSI0;
|
73
|
-
return
|
74
|
+
return absl::OkStatus();
|
74
75
|
}
|
75
76
|
p->last_stream_id = (static_cast<uint32_t>(*cur)) << 24;
|
76
77
|
++cur;
|
@@ -78,7 +79,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
|
|
78
79
|
case GRPC_CHTTP2_GOAWAY_LSI1:
|
79
80
|
if (cur == end) {
|
80
81
|
p->state = GRPC_CHTTP2_GOAWAY_LSI1;
|
81
|
-
return
|
82
|
+
return absl::OkStatus();
|
82
83
|
}
|
83
84
|
p->last_stream_id |= (static_cast<uint32_t>(*cur)) << 16;
|
84
85
|
++cur;
|
@@ -86,7 +87,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
|
|
86
87
|
case GRPC_CHTTP2_GOAWAY_LSI2:
|
87
88
|
if (cur == end) {
|
88
89
|
p->state = GRPC_CHTTP2_GOAWAY_LSI2;
|
89
|
-
return
|
90
|
+
return absl::OkStatus();
|
90
91
|
}
|
91
92
|
p->last_stream_id |= (static_cast<uint32_t>(*cur)) << 8;
|
92
93
|
++cur;
|
@@ -94,7 +95,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
|
|
94
95
|
case GRPC_CHTTP2_GOAWAY_LSI3:
|
95
96
|
if (cur == end) {
|
96
97
|
p->state = GRPC_CHTTP2_GOAWAY_LSI3;
|
97
|
-
return
|
98
|
+
return absl::OkStatus();
|
98
99
|
}
|
99
100
|
p->last_stream_id |= (static_cast<uint32_t>(*cur));
|
100
101
|
++cur;
|
@@ -102,7 +103,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
|
|
102
103
|
case GRPC_CHTTP2_GOAWAY_ERR0:
|
103
104
|
if (cur == end) {
|
104
105
|
p->state = GRPC_CHTTP2_GOAWAY_ERR0;
|
105
|
-
return
|
106
|
+
return absl::OkStatus();
|
106
107
|
}
|
107
108
|
p->error_code = (static_cast<uint32_t>(*cur)) << 24;
|
108
109
|
++cur;
|
@@ -110,7 +111,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
|
|
110
111
|
case GRPC_CHTTP2_GOAWAY_ERR1:
|
111
112
|
if (cur == end) {
|
112
113
|
p->state = GRPC_CHTTP2_GOAWAY_ERR1;
|
113
|
-
return
|
114
|
+
return absl::OkStatus();
|
114
115
|
}
|
115
116
|
p->error_code |= (static_cast<uint32_t>(*cur)) << 16;
|
116
117
|
++cur;
|
@@ -118,7 +119,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
|
|
118
119
|
case GRPC_CHTTP2_GOAWAY_ERR2:
|
119
120
|
if (cur == end) {
|
120
121
|
p->state = GRPC_CHTTP2_GOAWAY_ERR2;
|
121
|
-
return
|
122
|
+
return absl::OkStatus();
|
122
123
|
}
|
123
124
|
p->error_code |= (static_cast<uint32_t>(*cur)) << 8;
|
124
125
|
++cur;
|
@@ -126,7 +127,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
|
|
126
127
|
case GRPC_CHTTP2_GOAWAY_ERR3:
|
127
128
|
if (cur == end) {
|
128
129
|
p->state = GRPC_CHTTP2_GOAWAY_ERR3;
|
129
|
-
return
|
130
|
+
return absl::OkStatus();
|
130
131
|
}
|
131
132
|
p->error_code |= (static_cast<uint32_t>(*cur));
|
132
133
|
++cur;
|
@@ -146,10 +147,9 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
|
|
146
147
|
gpr_free(p->debug_data);
|
147
148
|
p->debug_data = nullptr;
|
148
149
|
}
|
149
|
-
return
|
150
|
+
return absl::OkStatus();
|
150
151
|
}
|
151
|
-
GPR_UNREACHABLE_CODE(
|
152
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Should never reach here"));
|
152
|
+
GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here"));
|
153
153
|
}
|
154
154
|
|
155
155
|
void grpc_chttp2_goaway_append(uint32_t last_stream_id, uint32_t error_code,
|
@@ -24,6 +24,7 @@
|
|
24
24
|
|
25
25
|
#include <algorithm>
|
26
26
|
|
27
|
+
#include "absl/status/status.h"
|
27
28
|
#include "absl/strings/str_format.h"
|
28
29
|
|
29
30
|
#include <grpc/support/alloc.h>
|
@@ -63,13 +64,13 @@ grpc_slice grpc_chttp2_ping_create(uint8_t ack, uint64_t opaque_8bytes) {
|
|
63
64
|
grpc_error_handle grpc_chttp2_ping_parser_begin_frame(
|
64
65
|
grpc_chttp2_ping_parser* parser, uint32_t length, uint8_t flags) {
|
65
66
|
if (flags & 0xfe || length != 8) {
|
66
|
-
return
|
67
|
+
return GRPC_ERROR_CREATE(
|
67
68
|
absl::StrFormat("invalid ping: length=%d, flags=%02x", length, flags));
|
68
69
|
}
|
69
70
|
parser->byte = 0;
|
70
71
|
parser->is_ack = flags;
|
71
72
|
parser->opaque_8bytes = 0;
|
72
|
-
return
|
73
|
+
return absl::OkStatus();
|
73
74
|
}
|
74
75
|
|
75
76
|
grpc_error_handle grpc_chttp2_ping_parser_parse(void* parser,
|
@@ -128,7 +129,7 @@ grpc_error_handle grpc_chttp2_ping_parser_parse(void* parser,
|
|
128
129
|
}
|
129
130
|
}
|
130
131
|
|
131
|
-
return
|
132
|
+
return absl::OkStatus();
|
132
133
|
}
|
133
134
|
|
134
135
|
void grpc_set_disable_ping_ack(bool disable_ping_ack) {
|
@@ -22,6 +22,7 @@
|
|
22
22
|
|
23
23
|
#include <stddef.h>
|
24
24
|
|
25
|
+
#include "absl/status/status.h"
|
25
26
|
#include "absl/strings/str_cat.h"
|
26
27
|
#include "absl/strings/str_format.h"
|
27
28
|
|
@@ -32,6 +33,7 @@
|
|
32
33
|
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
|
33
34
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
34
35
|
#include "src/core/lib/debug/trace.h"
|
36
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
35
37
|
#include "src/core/lib/transport/http2_errors.h"
|
36
38
|
#include "src/core/lib/transport/metadata_batch.h"
|
37
39
|
|
@@ -75,11 +77,11 @@ void grpc_chttp2_add_rst_stream_to_next_write(
|
|
75
77
|
grpc_error_handle grpc_chttp2_rst_stream_parser_begin_frame(
|
76
78
|
grpc_chttp2_rst_stream_parser* parser, uint32_t length, uint8_t flags) {
|
77
79
|
if (length != 4) {
|
78
|
-
return
|
80
|
+
return GRPC_ERROR_CREATE(absl::StrFormat(
|
79
81
|
"invalid rst_stream: length=%d, flags=%02x", length, flags));
|
80
82
|
}
|
81
83
|
parser->byte = 0;
|
82
|
-
return
|
84
|
+
return absl::OkStatus();
|
83
85
|
}
|
84
86
|
|
85
87
|
grpc_error_handle grpc_chttp2_rst_stream_parser_parse(void* parser,
|
@@ -111,17 +113,18 @@ grpc_error_handle grpc_chttp2_rst_stream_parser_parse(void* parser,
|
|
111
113
|
"[chttp2 transport=%p stream=%p] received RST_STREAM(reason=%d)",
|
112
114
|
t, s, reason);
|
113
115
|
}
|
114
|
-
grpc_error_handle error
|
116
|
+
grpc_error_handle error;
|
115
117
|
if (reason != GRPC_HTTP2_NO_ERROR || s->trailing_metadata_buffer.empty()) {
|
116
118
|
error = grpc_error_set_int(
|
117
119
|
grpc_error_set_str(
|
118
|
-
|
119
|
-
|
120
|
+
GRPC_ERROR_CREATE("RST_STREAM"),
|
121
|
+
grpc_core::StatusStrProperty::kGrpcMessage,
|
120
122
|
absl::StrCat("Received RST_STREAM with error code ", reason)),
|
121
|
-
|
123
|
+
grpc_core::StatusIntProperty::kHttp2Error,
|
124
|
+
static_cast<intptr_t>(reason));
|
122
125
|
}
|
123
126
|
grpc_chttp2_mark_stream_closed(t, s, true, true, error);
|
124
127
|
}
|
125
128
|
|
126
|
-
return
|
129
|
+
return absl::OkStatus();
|
127
130
|
}
|
@@ -25,6 +25,7 @@
|
|
25
25
|
#include <string>
|
26
26
|
|
27
27
|
#include "absl/base/attributes.h"
|
28
|
+
#include "absl/status/status.h"
|
28
29
|
#include "absl/strings/str_format.h"
|
29
30
|
|
30
31
|
#include <grpc/slice_buffer.h>
|
@@ -102,18 +103,15 @@ grpc_error_handle grpc_chttp2_settings_parser_begin_frame(
|
|
102
103
|
if (flags == GRPC_CHTTP2_FLAG_ACK) {
|
103
104
|
parser->is_ack = 1;
|
104
105
|
if (length != 0) {
|
105
|
-
return
|
106
|
-
"non-empty settings ack frame received");
|
106
|
+
return GRPC_ERROR_CREATE("non-empty settings ack frame received");
|
107
107
|
}
|
108
|
-
return
|
108
|
+
return absl::OkStatus();
|
109
109
|
} else if (flags != 0) {
|
110
|
-
return
|
111
|
-
"invalid flags on settings frame");
|
110
|
+
return GRPC_ERROR_CREATE("invalid flags on settings frame");
|
112
111
|
} else if (length % 6 != 0) {
|
113
|
-
return
|
114
|
-
"settings frames must be a multiple of six bytes");
|
112
|
+
return GRPC_ERROR_CREATE("settings frames must be a multiple of six bytes");
|
115
113
|
} else {
|
116
|
-
return
|
114
|
+
return absl::OkStatus();
|
117
115
|
}
|
118
116
|
}
|
119
117
|
|
@@ -129,7 +127,7 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
|
|
129
127
|
grpc_chttp2_setting_id id;
|
130
128
|
|
131
129
|
if (parser->is_ack) {
|
132
|
-
return
|
130
|
+
return absl::OkStatus();
|
133
131
|
}
|
134
132
|
|
135
133
|
for (;;) {
|
@@ -147,11 +145,11 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
|
|
147
145
|
if (t->notify_on_receive_settings != nullptr) {
|
148
146
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION,
|
149
147
|
t->notify_on_receive_settings,
|
150
|
-
|
148
|
+
absl::OkStatus());
|
151
149
|
t->notify_on_receive_settings = nullptr;
|
152
150
|
}
|
153
151
|
}
|
154
|
-
return
|
152
|
+
return absl::OkStatus();
|
155
153
|
}
|
156
154
|
parser->id = static_cast<uint16_t>((static_cast<uint16_t>(*cur)) << 8);
|
157
155
|
cur++;
|
@@ -159,7 +157,7 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
|
|
159
157
|
case GRPC_CHTTP2_SPS_ID1:
|
160
158
|
if (cur == end) {
|
161
159
|
parser->state = GRPC_CHTTP2_SPS_ID1;
|
162
|
-
return
|
160
|
+
return absl::OkStatus();
|
163
161
|
}
|
164
162
|
parser->id = static_cast<uint16_t>(parser->id | (*cur));
|
165
163
|
cur++;
|
@@ -167,7 +165,7 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
|
|
167
165
|
case GRPC_CHTTP2_SPS_VAL0:
|
168
166
|
if (cur == end) {
|
169
167
|
parser->state = GRPC_CHTTP2_SPS_VAL0;
|
170
|
-
return
|
168
|
+
return absl::OkStatus();
|
171
169
|
}
|
172
170
|
parser->value = (static_cast<uint32_t>(*cur)) << 24;
|
173
171
|
cur++;
|
@@ -175,7 +173,7 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
|
|
175
173
|
case GRPC_CHTTP2_SPS_VAL1:
|
176
174
|
if (cur == end) {
|
177
175
|
parser->state = GRPC_CHTTP2_SPS_VAL1;
|
178
|
-
return
|
176
|
+
return absl::OkStatus();
|
179
177
|
}
|
180
178
|
parser->value |= (static_cast<uint32_t>(*cur)) << 16;
|
181
179
|
cur++;
|
@@ -183,7 +181,7 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
|
|
183
181
|
case GRPC_CHTTP2_SPS_VAL2:
|
184
182
|
if (cur == end) {
|
185
183
|
parser->state = GRPC_CHTTP2_SPS_VAL2;
|
186
|
-
return
|
184
|
+
return absl::OkStatus();
|
187
185
|
}
|
188
186
|
parser->value |= (static_cast<uint32_t>(*cur)) << 8;
|
189
187
|
cur++;
|
@@ -191,7 +189,7 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
|
|
191
189
|
case GRPC_CHTTP2_SPS_VAL3:
|
192
190
|
if (cur == end) {
|
193
191
|
parser->state = GRPC_CHTTP2_SPS_VAL3;
|
194
|
-
return
|
192
|
+
return absl::OkStatus();
|
195
193
|
} else {
|
196
194
|
parser->state = GRPC_CHTTP2_SPS_ID0;
|
197
195
|
}
|
@@ -212,7 +210,7 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
|
|
212
210
|
t->last_new_stream_id, sp->error_value,
|
213
211
|
grpc_slice_from_static_string("HTTP2 settings error"),
|
214
212
|
&t->qbuf);
|
215
|
-
return
|
213
|
+
return GRPC_ERROR_CREATE(absl::StrFormat(
|
216
214
|
"invalid value %u passed for %s", parser->value, sp->name));
|
217
215
|
}
|
218
216
|
}
|
@@ -22,6 +22,7 @@
|
|
22
22
|
|
23
23
|
#include <stddef.h>
|
24
24
|
|
25
|
+
#include "absl/status/status.h"
|
25
26
|
#include "absl/strings/str_cat.h"
|
26
27
|
#include "absl/strings/str_format.h"
|
27
28
|
|
@@ -59,12 +60,12 @@ grpc_slice grpc_chttp2_window_update_create(
|
|
59
60
|
grpc_error_handle grpc_chttp2_window_update_parser_begin_frame(
|
60
61
|
grpc_chttp2_window_update_parser* parser, uint32_t length, uint8_t flags) {
|
61
62
|
if (flags || length != 4) {
|
62
|
-
return
|
63
|
+
return GRPC_ERROR_CREATE(absl::StrFormat(
|
63
64
|
"invalid window update: length=%d, flags=%02x", length, flags));
|
64
65
|
}
|
65
66
|
parser->byte = 0;
|
66
67
|
parser->amount = 0;
|
67
|
-
return
|
68
|
+
return absl::OkStatus();
|
68
69
|
}
|
69
70
|
|
70
71
|
grpc_error_handle grpc_chttp2_window_update_parser_parse(
|
@@ -90,7 +91,7 @@ grpc_error_handle grpc_chttp2_window_update_parser_parse(
|
|
90
91
|
// top bit is reserved and must be ignored.
|
91
92
|
uint32_t received_update = p->amount & 0x7fffffffu;
|
92
93
|
if (received_update == 0) {
|
93
|
-
return
|
94
|
+
return GRPC_ERROR_CREATE(
|
94
95
|
absl::StrCat("invalid window update bytes: ", p->amount));
|
95
96
|
}
|
96
97
|
GPR_ASSERT(is_last);
|
@@ -117,5 +118,5 @@ grpc_error_handle grpc_chttp2_window_update_parser_parse(
|
|
117
118
|
}
|
118
119
|
}
|
119
120
|
|
120
|
-
return
|
121
|
+
return absl::OkStatus();
|
121
122
|
}
|
@@ -22,7 +22,6 @@
|
|
22
22
|
|
23
23
|
#include <algorithm>
|
24
24
|
#include <cstdint>
|
25
|
-
#include <memory>
|
26
25
|
|
27
26
|
#include <grpc/slice.h>
|
28
27
|
#include <grpc/slice_buffer.h>
|
@@ -319,7 +318,7 @@ void HPackCompressor::SliceIndex::EmitTo(absl::string_view key,
|
|
319
318
|
auto& table = framer->compressor_->table_;
|
320
319
|
using It = std::vector<ValueIndex>::iterator;
|
321
320
|
It prev = values_.end();
|
322
|
-
|
321
|
+
size_t transport_length =
|
323
322
|
key.length() + value.length() + hpack_constants::kEntryOverhead;
|
324
323
|
if (transport_length > HPackEncoderTable::MaxEntrySize()) {
|
325
324
|
framer->EmitLitHdrWithNonBinaryStringKeyNotIdx(Slice::FromStaticString(key),
|
@@ -482,7 +481,7 @@ void HPackCompressor::Framer::Encode(HttpMethodMetadata,
|
|
482
481
|
void HPackCompressor::Framer::EncodeAlwaysIndexed(uint32_t* index,
|
483
482
|
absl::string_view key,
|
484
483
|
Slice value,
|
485
|
-
|
484
|
+
size_t transport_length) {
|
486
485
|
if (compressor_->table_.ConvertableToDynamicIndex(*index)) {
|
487
486
|
EmitIndexed(compressor_->table_.DynamicIndex(*index));
|
488
487
|
} else {
|
@@ -579,7 +578,7 @@ void HPackCompressor::Framer::Encode(GrpcStatusMetadata,
|
|
579
578
|
}
|
580
579
|
Slice key = Slice::FromStaticString(GrpcStatusMetadata::key());
|
581
580
|
Slice value = Slice::FromInt64(code);
|
582
|
-
const
|
581
|
+
const size_t transport_length =
|
583
582
|
key.length() + value.length() + hpack_constants::kEntryOverhead;
|
584
583
|
if (index != nullptr) {
|
585
584
|
*index = compressor_->table_.AllocateIndex(transport_length);
|
@@ -601,7 +600,7 @@ void HPackCompressor::Framer::Encode(GrpcEncodingMetadata,
|
|
601
600
|
}
|
602
601
|
auto key = Slice::FromStaticString(GrpcEncodingMetadata::key());
|
603
602
|
auto encoded_value = GrpcEncodingMetadata::Encode(value);
|
604
|
-
|
603
|
+
size_t transport_length =
|
605
604
|
key.length() + encoded_value.length() + hpack_constants::kEntryOverhead;
|
606
605
|
if (index != nullptr) {
|
607
606
|
*index = compressor_->table_.AllocateIndex(transport_length);
|
@@ -625,7 +624,7 @@ void HPackCompressor::Framer::Encode(GrpcAcceptEncodingMetadata,
|
|
625
624
|
}
|
626
625
|
auto key = Slice::FromStaticString(GrpcAcceptEncodingMetadata::key());
|
627
626
|
auto encoded_value = GrpcAcceptEncodingMetadata::Encode(value);
|
628
|
-
|
627
|
+
size_t transport_length =
|
629
628
|
key.length() + encoded_value.length() + hpack_constants::kEntryOverhead;
|
630
629
|
compressor_->grpc_accept_encoding_index_ =
|
631
630
|
compressor_->table_.AllocateIndex(transport_length);
|
@@ -150,7 +150,7 @@ class HPackCompressor {
|
|
150
150
|
Slice value_slice);
|
151
151
|
|
152
152
|
void EncodeAlwaysIndexed(uint32_t* index, absl::string_view key,
|
153
|
-
Slice value,
|
153
|
+
Slice value, size_t transport_length);
|
154
154
|
void EncodeIndexedKeyWithBinaryValue(uint32_t* index, absl::string_view key,
|
155
155
|
Slice value);
|
156
156
|
|
@@ -60,7 +60,8 @@ bool HPackEncoderTable::SetMaxSize(uint32_t max_table_size) {
|
|
60
60
|
hpack_constants::EntriesForBytes(max_table_size);
|
61
61
|
// TODO(ctiller): integrate with ResourceQuota to rebuild smaller when we can.
|
62
62
|
if (max_table_elems > elem_size_.size()) {
|
63
|
-
Rebuild(
|
63
|
+
Rebuild(static_cast<uint32_t>(
|
64
|
+
std::max(max_table_elems, 2 * elem_size_.size())));
|
64
65
|
}
|
65
66
|
return true;
|
66
67
|
}
|