grpc 1.50.0-x86_64-linux → 1.51.0-x86_64-linux
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/2.6/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/grpc_c.so +0 -0
- 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 +55 -18
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
- data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/tls.h +0 -156
- data/src/core/lib/promise/call_push_pull.h +0 -148
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_buffer_api.cc +0 -35
- data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -21,6 +21,7 @@
|
|
21
21
|
#include <grpc/impl/codegen/grpc_types.h>
|
22
22
|
|
23
23
|
#include "src/core/lib/gprpp/global_config_generic.h"
|
24
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
24
25
|
#include "src/core/lib/iomgr/port.h"
|
25
26
|
|
26
27
|
#ifdef GRPC_POSIX_SOCKET_TCP
|
@@ -48,11 +49,14 @@
|
|
48
49
|
#include <grpc/support/time.h>
|
49
50
|
|
50
51
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
52
|
+
#include "src/core/lib/debug/event_log.h"
|
51
53
|
#include "src/core/lib/debug/stats.h"
|
54
|
+
#include "src/core/lib/debug/stats_data.h"
|
52
55
|
#include "src/core/lib/debug/trace.h"
|
53
56
|
#include "src/core/lib/experiments/experiments.h"
|
54
57
|
#include "src/core/lib/gpr/string.h"
|
55
58
|
#include "src/core/lib/gpr/useful.h"
|
59
|
+
#include "src/core/lib/gprpp/strerror.h"
|
56
60
|
#include "src/core/lib/gprpp/sync.h"
|
57
61
|
#include "src/core/lib/iomgr/buffer_list.h"
|
58
62
|
#include "src/core/lib/iomgr/ev_posix.h"
|
@@ -105,7 +109,7 @@ class TcpZerocopySendRecord {
|
|
105
109
|
|
106
110
|
~TcpZerocopySendRecord() {
|
107
111
|
AssertEmpty();
|
108
|
-
|
112
|
+
grpc_slice_buffer_destroy(&buf_);
|
109
113
|
}
|
110
114
|
|
111
115
|
// Given the slices that we wish to send, and the current offset into the
|
@@ -173,7 +177,7 @@ class TcpZerocopySendRecord {
|
|
173
177
|
// reference to the underlying data since we no longer need it.
|
174
178
|
void AllSendsComplete() {
|
175
179
|
GPR_DEBUG_ASSERT(ref_.load(std::memory_order_relaxed) == 0);
|
176
|
-
|
180
|
+
grpc_slice_buffer_reset_and_unref(&buf_);
|
177
181
|
}
|
178
182
|
|
179
183
|
grpc_slice_buffer buf_;
|
@@ -514,8 +518,7 @@ struct grpc_tcp {
|
|
514
518
|
grpc_core::MemoryOwner memory_owner;
|
515
519
|
grpc_core::MemoryAllocator::Reservation self_reservation;
|
516
520
|
|
517
|
-
grpc_core::
|
518
|
-
gpr_mu tb_mu; /* Lock for access to list of traced buffers */
|
521
|
+
grpc_core::TracedBufferList tb_list; /* List of traced buffers */
|
519
522
|
|
520
523
|
/* grpc_endpoint_write takes an argument which if non-null means that the
|
521
524
|
* transport layer wants the TCP layer to collect timestamps for this write.
|
@@ -539,7 +542,6 @@ struct grpc_tcp {
|
|
539
542
|
TcpZerocopySendCtx tcp_zerocopy_send_ctx;
|
540
543
|
TcpZerocopySendRecord* current_zerocopy_send = nullptr;
|
541
544
|
|
542
|
-
bool frame_size_tuning_enabled;
|
543
545
|
int min_progress_size; /* A hint from upper layers specifying the minimum
|
544
546
|
number of bytes that need to be read to make
|
545
547
|
meaningful progress */
|
@@ -605,7 +607,7 @@ static void run_poller(void* bp, grpc_error_handle /*error_ignored*/) {
|
|
605
607
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
606
608
|
gpr_log(GPR_INFO, "BACKUP_POLLER:%p reschedule", p);
|
607
609
|
}
|
608
|
-
grpc_core::Executor::Run(&p->run_poller,
|
610
|
+
grpc_core::Executor::Run(&p->run_poller, absl::OkStatus(),
|
609
611
|
grpc_core::ExecutorType::DEFAULT,
|
610
612
|
grpc_core::ExecutorJobType::LONG);
|
611
613
|
}
|
@@ -648,7 +650,7 @@ static void cover_self(grpc_tcp* tcp) {
|
|
648
650
|
}
|
649
651
|
grpc_core::Executor::Run(
|
650
652
|
GRPC_CLOSURE_INIT(&p->run_poller, run_poller, p, nullptr),
|
651
|
-
|
653
|
+
absl::OkStatus(), grpc_core::ExecutorType::DEFAULT,
|
652
654
|
grpc_core::ExecutorJobType::LONG);
|
653
655
|
} else {
|
654
656
|
old_count = g_uncovered_notifications_pending++;
|
@@ -683,7 +685,7 @@ static void tcp_drop_uncovered_then_handle_write(void* arg,
|
|
683
685
|
grpc_error_handle error) {
|
684
686
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
685
687
|
gpr_log(GPR_INFO, "TCP:%p got_write: %s", arg,
|
686
|
-
|
688
|
+
grpc_core::StatusToString(error).c_str());
|
687
689
|
}
|
688
690
|
drop_uncovered(static_cast<grpc_tcp*>(arg));
|
689
691
|
tcp_handle_write(arg, error);
|
@@ -711,11 +713,12 @@ static grpc_error_handle tcp_annotate_error(grpc_error_handle src_error,
|
|
711
713
|
grpc_tcp* tcp) {
|
712
714
|
return grpc_error_set_str(
|
713
715
|
grpc_error_set_int(
|
714
|
-
grpc_error_set_int(src_error,
|
716
|
+
grpc_error_set_int(src_error, grpc_core::StatusIntProperty::kFd,
|
717
|
+
tcp->fd),
|
715
718
|
/* All tcp errors are marked with UNAVAILABLE so that application may
|
716
719
|
* choose to retry. */
|
717
|
-
|
718
|
-
|
720
|
+
grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE),
|
721
|
+
grpc_core::StatusStrProperty::kTargetAddress, tcp->peer_string);
|
719
722
|
}
|
720
723
|
|
721
724
|
static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error);
|
@@ -730,15 +733,10 @@ static void tcp_shutdown(grpc_endpoint* ep, grpc_error_handle why) {
|
|
730
733
|
static void tcp_free(grpc_tcp* tcp) {
|
731
734
|
grpc_fd_orphan(tcp->em_fd, tcp->release_fd_cb, tcp->release_fd,
|
732
735
|
"tcp_unref_orphan");
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
grpc_core::TracedBuffer::Shutdown(
|
737
|
-
&tcp->tb_head, tcp->outgoing_buffer_arg,
|
738
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("endpoint destroyed"));
|
739
|
-
gpr_mu_unlock(&tcp->tb_mu);
|
736
|
+
grpc_slice_buffer_destroy(&tcp->last_read_buffer);
|
737
|
+
tcp->tb_list.Shutdown(tcp->outgoing_buffer_arg,
|
738
|
+
GRPC_ERROR_CREATE("endpoint destroyed"));
|
740
739
|
tcp->outgoing_buffer_arg = nullptr;
|
741
|
-
gpr_mu_destroy(&tcp->tb_mu);
|
742
740
|
delete tcp;
|
743
741
|
}
|
744
742
|
|
@@ -770,7 +768,7 @@ static void tcp_ref(grpc_tcp* tcp) { tcp->refcount.Ref(); }
|
|
770
768
|
|
771
769
|
static void tcp_destroy(grpc_endpoint* ep) {
|
772
770
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
773
|
-
|
771
|
+
grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
|
774
772
|
if (grpc_event_engine_can_track_errors()) {
|
775
773
|
ZerocopyDisableAndWaitForRemaining(tcp);
|
776
774
|
gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
|
@@ -786,7 +784,7 @@ static void perform_reclamation(grpc_tcp* tcp)
|
|
786
784
|
}
|
787
785
|
tcp->read_mu.Lock();
|
788
786
|
if (tcp->incoming_buffer != nullptr) {
|
789
|
-
|
787
|
+
grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
|
790
788
|
}
|
791
789
|
tcp->has_posted_reclaimer = false;
|
792
790
|
tcp->read_mu.Unlock();
|
@@ -812,12 +810,12 @@ static void tcp_trace_read(grpc_tcp* tcp, grpc_error_handle error)
|
|
812
810
|
gpr_log(GPR_INFO, "TCP:%p call_cb %p %p:%p", tcp, cb, cb->cb, cb->cb_arg);
|
813
811
|
size_t i;
|
814
812
|
gpr_log(GPR_INFO, "READ %p (peer=%s) error=%s", tcp,
|
815
|
-
tcp->peer_string.c_str(),
|
813
|
+
tcp->peer_string.c_str(), grpc_core::StatusToString(error).c_str());
|
816
814
|
if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
817
815
|
for (i = 0; i < tcp->incoming_buffer->count; i++) {
|
818
816
|
char* dump = grpc_dump_slice(tcp->incoming_buffer->slices[i],
|
819
817
|
GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
820
|
-
gpr_log(GPR_DEBUG, "DATA: %s", dump);
|
818
|
+
gpr_log(GPR_DEBUG, "READ DATA: %s", dump);
|
821
819
|
gpr_free(dump);
|
822
820
|
}
|
823
821
|
}
|
@@ -861,7 +859,7 @@ static void update_rcvlowat(grpc_tcp* tcp)
|
|
861
859
|
sizeof(remaining)) != 0) {
|
862
860
|
gpr_log(GPR_ERROR, "%s",
|
863
861
|
absl::StrCat("Cannot set SO_RCVLOWAT on fd=", tcp->fd,
|
864
|
-
" err=",
|
862
|
+
" err=", grpc_core::StrError(errno).c_str())
|
865
863
|
.c_str());
|
866
864
|
return;
|
867
865
|
}
|
@@ -915,51 +913,49 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
915
913
|
}
|
916
914
|
msg.msg_flags = 0;
|
917
915
|
|
918
|
-
|
919
|
-
|
916
|
+
grpc_core::global_stats().IncrementTcpReadOffer(
|
917
|
+
tcp->incoming_buffer->length);
|
918
|
+
grpc_core::global_stats().IncrementTcpReadOfferIovSize(
|
919
|
+
tcp->incoming_buffer->count);
|
920
920
|
|
921
921
|
do {
|
922
|
-
|
922
|
+
grpc_core::global_stats().IncrementSyscallRead();
|
923
923
|
read_bytes = recvmsg(tcp->fd, &msg, 0);
|
924
924
|
} while (read_bytes < 0 && errno == EINTR);
|
925
925
|
|
926
|
+
if (read_bytes < 0 && errno == EAGAIN) {
|
927
|
+
/* NB: After calling call_read_cb a parallel call of the read handler may
|
928
|
+
* be running. */
|
929
|
+
if (total_read_bytes > 0) {
|
930
|
+
break;
|
931
|
+
}
|
932
|
+
finish_estimate(tcp);
|
933
|
+
tcp->inq = 0;
|
934
|
+
return false;
|
935
|
+
}
|
936
|
+
|
926
937
|
/* We have read something in previous reads. We need to deliver those
|
927
938
|
* bytes to the upper layer. */
|
928
|
-
if (read_bytes <= 0 &&
|
929
|
-
total_read_bytes >= static_cast<size_t>(tcp->min_progress_size)) {
|
939
|
+
if (read_bytes <= 0 && total_read_bytes >= 1) {
|
930
940
|
tcp->inq = 1;
|
931
941
|
break;
|
932
942
|
}
|
933
943
|
|
934
|
-
if (read_bytes
|
935
|
-
/*
|
936
|
-
|
937
|
-
if (
|
938
|
-
|
939
|
-
break;
|
940
|
-
}
|
941
|
-
finish_estimate(tcp);
|
942
|
-
tcp->inq = 0;
|
943
|
-
return false;
|
944
|
+
if (read_bytes <= 0) {
|
945
|
+
/* 0 read size ==> end of stream */
|
946
|
+
grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
|
947
|
+
if (read_bytes == 0) {
|
948
|
+
*error = tcp_annotate_error(absl::InternalError("Socket closed"), tcp);
|
944
949
|
} else {
|
945
|
-
|
946
|
-
|
947
|
-
|
950
|
+
*error =
|
951
|
+
tcp_annotate_error(absl::InternalError(absl::StrCat(
|
952
|
+
"recvmsg:", grpc_core::StrError(errno))),
|
953
|
+
tcp);
|
948
954
|
}
|
949
|
-
}
|
950
|
-
if (read_bytes == 0) {
|
951
|
-
/* 0 read size ==> end of stream
|
952
|
-
*
|
953
|
-
* We may have read something, i.e., total_read_bytes > 0, but
|
954
|
-
* since the connection is closed we will drop the data here, because we
|
955
|
-
* can't call the callback multiple times. */
|
956
|
-
grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
|
957
|
-
*error = tcp_annotate_error(
|
958
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Socket closed"), tcp);
|
959
955
|
return true;
|
960
956
|
}
|
961
957
|
|
962
|
-
|
958
|
+
grpc_core::global_stats().IncrementTcpReadSize(read_bytes);
|
963
959
|
add_to_estimate(tcp, static_cast<size_t>(read_bytes));
|
964
960
|
GPR_DEBUG_ASSERT((size_t)read_bytes <=
|
965
961
|
tcp->incoming_buffer->length - total_read_bytes);
|
@@ -1010,8 +1006,8 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
1010
1006
|
}
|
1011
1007
|
|
1012
1008
|
GPR_DEBUG_ASSERT(total_read_bytes > 0);
|
1013
|
-
*error =
|
1014
|
-
if (
|
1009
|
+
*error = absl::OkStatus();
|
1010
|
+
if (grpc_core::IsTcpFrameSizeTuningEnabled()) {
|
1015
1011
|
// Update min progress size based on the total number of bytes read in
|
1016
1012
|
// this round.
|
1017
1013
|
tcp->min_progress_size -= total_read_bytes;
|
@@ -1069,14 +1065,14 @@ static void maybe_make_read_slices(grpc_tcp* tcp)
|
|
1069
1065
|
extra_wanted -= kBigAlloc;
|
1070
1066
|
grpc_slice_buffer_add_indexed(tcp->incoming_buffer,
|
1071
1067
|
tcp->memory_owner.MakeSlice(kBigAlloc));
|
1072
|
-
|
1068
|
+
grpc_core::global_stats().IncrementTcpReadAlloc64k();
|
1073
1069
|
}
|
1074
1070
|
} else {
|
1075
1071
|
while (extra_wanted > 0) {
|
1076
1072
|
extra_wanted -= kSmallAlloc;
|
1077
1073
|
grpc_slice_buffer_add_indexed(
|
1078
1074
|
tcp->incoming_buffer, tcp->memory_owner.MakeSlice(kSmallAlloc));
|
1079
|
-
|
1075
|
+
grpc_core::global_stats().IncrementTcpReadAlloc8k();
|
1080
1076
|
}
|
1081
1077
|
}
|
1082
1078
|
maybe_post_reclaimer(tcp);
|
@@ -1114,11 +1110,11 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
|
|
1114
1110
|
grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
|
1115
1111
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1116
1112
|
gpr_log(GPR_INFO, "TCP:%p got_read: %s", tcp,
|
1117
|
-
|
1113
|
+
grpc_core::StatusToString(error).c_str());
|
1118
1114
|
}
|
1119
1115
|
tcp->read_mu.Lock();
|
1120
1116
|
grpc_error_handle tcp_read_error;
|
1121
|
-
if (GPR_LIKELY(
|
1117
|
+
if (GPR_LIKELY(error.ok())) {
|
1122
1118
|
maybe_make_read_slices(tcp);
|
1123
1119
|
if (!tcp_do_read(tcp, &tcp_read_error)) {
|
1124
1120
|
/* We've consumed the edge, request a new one */
|
@@ -1129,9 +1125,9 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
|
|
1129
1125
|
}
|
1130
1126
|
tcp_trace_read(tcp, tcp_read_error);
|
1131
1127
|
} else {
|
1132
|
-
tcp_read_error =
|
1133
|
-
|
1134
|
-
|
1128
|
+
tcp_read_error = error;
|
1129
|
+
grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
|
1130
|
+
grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
|
1135
1131
|
}
|
1136
1132
|
grpc_closure* cb = tcp->read_cb;
|
1137
1133
|
tcp->read_cb = nullptr;
|
@@ -1149,8 +1145,8 @@ static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
|
|
1149
1145
|
tcp->read_mu.Lock();
|
1150
1146
|
tcp->incoming_buffer = incoming_buffer;
|
1151
1147
|
tcp->min_progress_size =
|
1152
|
-
|
1153
|
-
|
1148
|
+
grpc_core::IsTcpFrameSizeTuningEnabled() ? min_progress_size : 1;
|
1149
|
+
grpc_slice_buffer_reset_and_unref(incoming_buffer);
|
1154
1150
|
grpc_slice_buffer_swap(incoming_buffer, &tcp->last_read_buffer);
|
1155
1151
|
TCP_REF(tcp, "read");
|
1156
1152
|
if (tcp->is_first_read) {
|
@@ -1175,7 +1171,7 @@ static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
|
|
1175
1171
|
* bytes or calls notify_on_read() to be notified when new bytes become
|
1176
1172
|
* available */
|
1177
1173
|
grpc_core::Closure::Run(DEBUG_LOCATION, &tcp->read_done_closure,
|
1178
|
-
|
1174
|
+
absl::OkStatus());
|
1179
1175
|
}
|
1180
1176
|
}
|
1181
1177
|
|
@@ -1186,7 +1182,7 @@ ssize_t tcp_send(int fd, const struct msghdr* msg, int* saved_errno,
|
|
1186
1182
|
ssize_t sent_length;
|
1187
1183
|
do {
|
1188
1184
|
/* TODO(klempner): Cork if this is a partial write */
|
1189
|
-
|
1185
|
+
grpc_core::global_stats().IncrementSyscallWrite();
|
1190
1186
|
sent_length = sendmsg(fd, msg, SENDMSG_FLAGS | additional_flags);
|
1191
1187
|
} while (sent_length < 0 && (*saved_errno = errno) == EINTR);
|
1192
1188
|
return sent_length;
|
@@ -1277,11 +1273,8 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
|
1277
1273
|
*sent_length = length;
|
1278
1274
|
/* Only save timestamps if all the bytes were taken by sendmsg. */
|
1279
1275
|
if (sending_length == static_cast<size_t>(length)) {
|
1280
|
-
|
1281
|
-
|
1282
|
-
&tcp->tb_head, static_cast<uint32_t>(tcp->bytes_counter + length),
|
1283
|
-
tcp->fd, tcp->outgoing_buffer_arg);
|
1284
|
-
gpr_mu_unlock(&tcp->tb_mu);
|
1276
|
+
tcp->tb_list.AddNewEntry(static_cast<uint32_t>(tcp->bytes_counter + length),
|
1277
|
+
tcp->fd, tcp->outgoing_buffer_arg);
|
1285
1278
|
tcp->outgoing_buffer_arg = nullptr;
|
1286
1279
|
}
|
1287
1280
|
return true;
|
@@ -1375,13 +1368,7 @@ struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
|
|
1375
1368
|
gpr_log(GPR_ERROR, "Unexpected control message");
|
1376
1369
|
return cmsg;
|
1377
1370
|
}
|
1378
|
-
|
1379
|
-
* to protect the traced buffer list. A lock free list might be better. Using
|
1380
|
-
* a simple mutex for now. */
|
1381
|
-
gpr_mu_lock(&tcp->tb_mu);
|
1382
|
-
grpc_core::TracedBuffer::ProcessTimestamp(&tcp->tb_head, serr, opt_stats,
|
1383
|
-
tss);
|
1384
|
-
gpr_mu_unlock(&tcp->tb_mu);
|
1371
|
+
tcp->tb_list.ProcessTimestamp(serr, opt_stats, tss);
|
1385
1372
|
return next_cmsg;
|
1386
1373
|
}
|
1387
1374
|
|
@@ -1467,10 +1454,10 @@ static void tcp_handle_error(void* arg /* grpc_tcp */,
|
|
1467
1454
|
grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
|
1468
1455
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1469
1456
|
gpr_log(GPR_INFO, "TCP:%p got_error: %s", tcp,
|
1470
|
-
|
1457
|
+
grpc_core::StatusToString(error).c_str());
|
1471
1458
|
}
|
1472
1459
|
|
1473
|
-
if (!
|
1460
|
+
if (!error.ok() ||
|
1474
1461
|
static_cast<bool>(gpr_atm_acq_load(&tcp->stop_error_notification))) {
|
1475
1462
|
/* We aren't going to register to hear on error anymore, so it is safe to
|
1476
1463
|
* unref. */
|
@@ -1519,11 +1506,8 @@ static void tcp_handle_error(void* /*arg*/ /* grpc_tcp */,
|
|
1519
1506
|
* release operations needed can be performed on the arg */
|
1520
1507
|
void tcp_shutdown_buffer_list(grpc_tcp* tcp) {
|
1521
1508
|
if (tcp->outgoing_buffer_arg) {
|
1522
|
-
|
1523
|
-
|
1524
|
-
&tcp->tb_head, tcp->outgoing_buffer_arg,
|
1525
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("TracedBuffer list shutdown"));
|
1526
|
-
gpr_mu_unlock(&tcp->tb_mu);
|
1509
|
+
tcp->tb_list.Shutdown(tcp->outgoing_buffer_arg,
|
1510
|
+
GRPC_ERROR_CREATE("TracedBuffer list shutdown"));
|
1527
1511
|
tcp->outgoing_buffer_arg = nullptr;
|
1528
1512
|
}
|
1529
1513
|
}
|
@@ -1617,8 +1601,8 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
|
|
1617
1601
|
if (!tried_sending_message) {
|
1618
1602
|
msg.msg_control = nullptr;
|
1619
1603
|
msg.msg_controllen = 0;
|
1620
|
-
|
1621
|
-
|
1604
|
+
grpc_core::global_stats().IncrementTcpWriteSize(sending_length);
|
1605
|
+
grpc_core::global_stats().IncrementTcpWriteIovSize(iov_size);
|
1622
1606
|
sent_length = tcp_send(tcp->fd, &msg, &saved_errno, MSG_ZEROCOPY);
|
1623
1607
|
}
|
1624
1608
|
if (tcp->tcp_zerocopy_send_ctx.UpdateZeroCopyOMemStateAfterSend(
|
@@ -1641,11 +1625,12 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
|
|
1641
1625
|
return true;
|
1642
1626
|
}
|
1643
1627
|
}
|
1628
|
+
grpc_core::EventLog::Append("tcp-write-outstanding", -sent_length);
|
1644
1629
|
tcp->bytes_counter += sent_length;
|
1645
1630
|
record->UpdateOffsetForBytesSent(sending_length,
|
1646
1631
|
static_cast<size_t>(sent_length));
|
1647
1632
|
if (record->AllSlicesSent()) {
|
1648
|
-
*error =
|
1633
|
+
*error = absl::OkStatus();
|
1649
1634
|
return true;
|
1650
1635
|
}
|
1651
1636
|
}
|
@@ -1729,8 +1714,8 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1729
1714
|
msg.msg_control = nullptr;
|
1730
1715
|
msg.msg_controllen = 0;
|
1731
1716
|
|
1732
|
-
|
1733
|
-
|
1717
|
+
grpc_core::global_stats().IncrementTcpWriteSize(sending_length);
|
1718
|
+
grpc_core::global_stats().IncrementTcpWriteIovSize(iov_size);
|
1734
1719
|
|
1735
1720
|
sent_length = tcp_send(tcp->fd, &msg, &saved_errno);
|
1736
1721
|
}
|
@@ -1746,18 +1731,19 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1746
1731
|
return false;
|
1747
1732
|
} else if (saved_errno == EPIPE) {
|
1748
1733
|
*error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
|
1749
|
-
|
1734
|
+
grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
|
1750
1735
|
tcp_shutdown_buffer_list(tcp);
|
1751
1736
|
return true;
|
1752
1737
|
} else {
|
1753
1738
|
*error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
|
1754
|
-
|
1739
|
+
grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
|
1755
1740
|
tcp_shutdown_buffer_list(tcp);
|
1756
1741
|
return true;
|
1757
1742
|
}
|
1758
1743
|
}
|
1759
1744
|
|
1760
1745
|
GPR_ASSERT(tcp->outgoing_byte_idx == 0);
|
1746
|
+
grpc_core::EventLog::Append("tcp-write-outstanding", -sent_length);
|
1761
1747
|
tcp->bytes_counter += sent_length;
|
1762
1748
|
trailing = sending_length - static_cast<size_t>(sent_length);
|
1763
1749
|
while (trailing > 0) {
|
@@ -1774,8 +1760,8 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1774
1760
|
}
|
1775
1761
|
}
|
1776
1762
|
if (outgoing_slice_idx == tcp->outgoing_buffer->count) {
|
1777
|
-
*error =
|
1778
|
-
|
1763
|
+
*error = absl::OkStatus();
|
1764
|
+
grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
|
1779
1765
|
return true;
|
1780
1766
|
}
|
1781
1767
|
}
|
@@ -1786,7 +1772,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1786
1772
|
grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
|
1787
1773
|
grpc_closure* cb;
|
1788
1774
|
|
1789
|
-
if (!
|
1775
|
+
if (!error.ok()) {
|
1790
1776
|
cb = tcp->write_cb;
|
1791
1777
|
tcp->write_cb = nullptr;
|
1792
1778
|
if (tcp->current_zerocopy_send != nullptr) {
|
@@ -1794,7 +1780,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1794
1780
|
"handle_write_err");
|
1795
1781
|
tcp->current_zerocopy_send = nullptr;
|
1796
1782
|
}
|
1797
|
-
grpc_core::Closure::Run(DEBUG_LOCATION, cb,
|
1783
|
+
grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
|
1798
1784
|
TCP_UNREF(tcp, "write");
|
1799
1785
|
return;
|
1800
1786
|
}
|
@@ -1808,13 +1794,13 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1808
1794
|
}
|
1809
1795
|
notify_on_write(tcp);
|
1810
1796
|
// tcp_flush does not populate error if it has returned false.
|
1811
|
-
GPR_DEBUG_ASSERT(
|
1797
|
+
GPR_DEBUG_ASSERT(error.ok());
|
1812
1798
|
} else {
|
1813
1799
|
cb = tcp->write_cb;
|
1814
1800
|
tcp->write_cb = nullptr;
|
1815
1801
|
tcp->current_zerocopy_send = nullptr;
|
1816
1802
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1817
|
-
gpr_log(GPR_INFO, "write: %s",
|
1803
|
+
gpr_log(GPR_INFO, "write: %s", grpc_core::StatusToString(error).c_str());
|
1818
1804
|
}
|
1819
1805
|
// No need to take a ref on error since tcp_flush provides a ref.
|
1820
1806
|
grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
|
@@ -1825,9 +1811,11 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1825
1811
|
static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
1826
1812
|
grpc_closure* cb, void* arg, int /*max_frame_size*/) {
|
1827
1813
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
1828
|
-
grpc_error_handle error
|
1814
|
+
grpc_error_handle error;
|
1829
1815
|
TcpZerocopySendRecord* zerocopy_send_record = nullptr;
|
1830
1816
|
|
1817
|
+
grpc_core::EventLog::Append("tcp-write-outstanding", buf->length);
|
1818
|
+
|
1831
1819
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1832
1820
|
size_t i;
|
1833
1821
|
|
@@ -1836,7 +1824,7 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
|
1836
1824
|
if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1837
1825
|
char* data =
|
1838
1826
|
grpc_dump_slice(buf->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
1839
|
-
gpr_log(GPR_DEBUG, "DATA: %s", data);
|
1827
|
+
gpr_log(GPR_DEBUG, "WRITE DATA: %s", data);
|
1840
1828
|
gpr_free(data);
|
1841
1829
|
}
|
1842
1830
|
}
|
@@ -1849,9 +1837,8 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
|
1849
1837
|
grpc_core::Closure::Run(
|
1850
1838
|
DEBUG_LOCATION, cb,
|
1851
1839
|
grpc_fd_is_shutdown(tcp->em_fd)
|
1852
|
-
? tcp_annotate_error(
|
1853
|
-
|
1854
|
-
: GRPC_ERROR_NONE);
|
1840
|
+
? tcp_annotate_error(GRPC_ERROR_CREATE("EOF"), tcp)
|
1841
|
+
: absl::OkStatus());
|
1855
1842
|
tcp_shutdown_buffer_list(tcp);
|
1856
1843
|
return;
|
1857
1844
|
}
|
@@ -1881,7 +1868,7 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
|
1881
1868
|
notify_on_write(tcp);
|
1882
1869
|
} else {
|
1883
1870
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1884
|
-
gpr_log(GPR_INFO, "write: %s",
|
1871
|
+
gpr_log(GPR_INFO, "write: %s", grpc_core::StatusToString(error).c_str());
|
1885
1872
|
}
|
1886
1873
|
grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
|
1887
1874
|
}
|
@@ -1980,7 +1967,6 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
1980
1967
|
tcp->socket_ts_enabled = false;
|
1981
1968
|
tcp->ts_capable = true;
|
1982
1969
|
tcp->outgoing_buffer_arg = nullptr;
|
1983
|
-
tcp->frame_size_tuning_enabled = grpc_core::IsTcpFrameSizeTuningEnabled();
|
1984
1970
|
tcp->min_progress_size = 1;
|
1985
1971
|
if (options.tcp_tx_zero_copy_enabled &&
|
1986
1972
|
!tcp->tcp_zerocopy_send_ctx.memory_limited()) {
|
@@ -2001,8 +1987,6 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
2001
1987
|
gpr_atm_no_barrier_store(&tcp->shutdown_count, 0);
|
2002
1988
|
tcp->em_fd = em_fd;
|
2003
1989
|
grpc_slice_buffer_init(&tcp->last_read_buffer);
|
2004
|
-
gpr_mu_init(&tcp->tb_mu);
|
2005
|
-
tcp->tb_head = nullptr;
|
2006
1990
|
GRPC_CLOSURE_INIT(&tcp->read_done_closure, tcp_handle_read, tcp,
|
2007
1991
|
grpc_schedule_on_exec_ctx);
|
2008
1992
|
if (grpc_event_engine_run_in_background()) {
|
@@ -2055,7 +2039,7 @@ void grpc_tcp_destroy_and_release_fd(grpc_endpoint* ep, int* fd,
|
|
2055
2039
|
GPR_ASSERT(ep->vtable == &vtable);
|
2056
2040
|
tcp->release_fd = fd;
|
2057
2041
|
tcp->release_fd_cb = done;
|
2058
|
-
|
2042
|
+
grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
|
2059
2043
|
if (grpc_event_engine_can_track_errors()) {
|
2060
2044
|
/* Stop errors notification. */
|
2061
2045
|
ZerocopyDisableAndWaitForRemaining(tcp);
|