grpc 1.47.0 → 1.48.0.pre1
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 +105 -47
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +20 -11
- data/include/grpc/event_engine/slice_buffer.h +8 -2
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +6 -3
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
- data/src/core/ext/filters/client_channel/client_channel.h +19 -4
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
- data/src/core/ext/filters/client_channel/subchannel.h +6 -22
- data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
- data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
- data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +2 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +37 -24
- data/src/core/ext/xds/xds_bootstrap.h +9 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
- data/src/core/ext/xds/xds_certificate_provider.h +16 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +71 -22
- data/src/core/ext/xds/xds_client.h +17 -3
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +21 -10
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +51 -33
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_tracer.h +3 -3
- data/src/core/lib/channel/channel_args.h +1 -0
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +4 -4
- data/src/core/lib/channel/channel_stack.h +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +2 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/channelz.h +2 -3
- data/src/core/lib/channel/channelz_registry.cc +4 -5
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +11 -5
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +3 -6
- data/src/core/lib/compression/compression_internal.h +3 -2
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/debug/stats.cc +9 -9
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +24 -19
- data/src/core/lib/event_engine/event_engine_factory.h +2 -2
- data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
- data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/promise.h +69 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -67
- data/src/core/lib/gprpp/status_helper.cc +44 -30
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +4 -0
- data/src/core/lib/http/format_request.cc +5 -4
- data/src/core/lib/http/format_request.h +1 -1
- data/src/core/lib/http/httpcli.cc +18 -12
- data/src/core/lib/http/httpcli.h +19 -3
- data/src/core/lib/http/httpcli_security_connector.cc +16 -4
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +54 -92
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +7 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
- data/src/core/lib/iomgr/tcp_posix.cc +91 -29
- data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
- data/src/core/lib/iomgr/tcp_windows.cc +5 -5
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +0 -1
- data/src/core/lib/promise/activity.h +7 -13
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/sleep.cc +36 -31
- data/src/core/lib/promise/sleep.h +25 -25
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +5 -2
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +8 -0
- data/src/core/lib/resolver/server_address.h +9 -2
- data/src/core/lib/resource_quota/memory_quota.cc +18 -60
- data/src/core/lib/resource_quota/memory_quota.h +11 -25
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +10 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
- data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +44 -11
- data/src/core/lib/security/transport/security_handshaker.h +4 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config_call_data.h +2 -1
- data/src/core/lib/service_config/service_config_impl.cc +6 -6
- data/src/core/lib/service_config/service_config_impl.h +1 -3
- data/src/core/lib/service_config/service_config_parser.cc +2 -4
- data/src/core/lib/slice/slice_buffer.cc +30 -1
- data/src/core/lib/slice/slice_buffer.h +37 -6
- data/src/core/lib/slice/slice_string_helpers.cc +0 -20
- data/src/core/lib/slice/slice_string_helpers.h +0 -4
- data/src/core/lib/surface/call.cc +53 -115
- data/src/core/lib/surface/call.h +5 -1
- data/src/core/lib/surface/channel.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +15 -14
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +14 -8
- data/src/core/lib/surface/server.h +4 -1
- data/src/core/lib/surface/validate_metadata.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +13 -7
- data/src/core/lib/transport/handshaker.cc +3 -3
- data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
- data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/transport/transport.cc +0 -3
- data/src/core/lib/transport/transport.h +20 -14
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +1 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -9
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +49 -18
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +39 -15
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -97,6 +97,8 @@ typedef size_t msg_iovlen_type;
|
|
97
97
|
|
98
98
|
extern grpc_core::TraceFlag grpc_tcp_trace;
|
99
99
|
|
100
|
+
GPR_GLOBAL_CONFIG_DECLARE_BOOL(grpc_experimental_enable_tcp_frame_size_tuning);
|
101
|
+
|
100
102
|
namespace grpc_core {
|
101
103
|
|
102
104
|
class TcpZerocopySendRecord {
|
@@ -357,6 +359,13 @@ using grpc_core::TcpZerocopySendCtx;
|
|
357
359
|
using grpc_core::TcpZerocopySendRecord;
|
358
360
|
|
359
361
|
namespace {
|
362
|
+
|
363
|
+
bool ExperimentalTcpFrameSizeTuningEnabled() {
|
364
|
+
static const bool kEnableTcpFrameSizeTuning =
|
365
|
+
GPR_GLOBAL_CONFIG_GET(grpc_experimental_enable_tcp_frame_size_tuning);
|
366
|
+
return kEnableTcpFrameSizeTuning;
|
367
|
+
}
|
368
|
+
|
360
369
|
struct grpc_tcp {
|
361
370
|
grpc_tcp(int max_sends, size_t send_bytes_threshold)
|
362
371
|
: tcp_zerocopy_send_ctx(max_sends, send_bytes_threshold) {}
|
@@ -426,6 +435,11 @@ struct grpc_tcp {
|
|
426
435
|
on errors anymore */
|
427
436
|
TcpZerocopySendCtx tcp_zerocopy_send_ctx;
|
428
437
|
TcpZerocopySendRecord* current_zerocopy_send = nullptr;
|
438
|
+
|
439
|
+
bool frame_size_tuning_enabled;
|
440
|
+
int min_progress_size; /* A hint from upper layers specifying the minimum
|
441
|
+
number of bytes that need to be read to make
|
442
|
+
meaningful progress */
|
429
443
|
};
|
430
444
|
|
431
445
|
struct backup_poller {
|
@@ -736,6 +750,7 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
736
750
|
}
|
737
751
|
|
738
752
|
GPR_ASSERT(tcp->incoming_buffer->length != 0);
|
753
|
+
GPR_DEBUG_ASSERT(tcp->min_progress_size > 0);
|
739
754
|
|
740
755
|
do {
|
741
756
|
/* Assume there is something on the queue. If we receive TCP_INQ from
|
@@ -767,7 +782,8 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
767
782
|
|
768
783
|
/* We have read something in previous reads. We need to deliver those
|
769
784
|
* bytes to the upper layer. */
|
770
|
-
if (read_bytes <= 0 &&
|
785
|
+
if (read_bytes <= 0 &&
|
786
|
+
total_read_bytes >= static_cast<size_t>(tcp->min_progress_size)) {
|
771
787
|
tcp->inq = 1;
|
772
788
|
break;
|
773
789
|
}
|
@@ -776,6 +792,9 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
776
792
|
/* NB: After calling call_read_cb a parallel call of the read handler may
|
777
793
|
* be running. */
|
778
794
|
if (errno == EAGAIN) {
|
795
|
+
if (total_read_bytes > 0) {
|
796
|
+
break;
|
797
|
+
}
|
779
798
|
finish_estimate(tcp);
|
780
799
|
tcp->inq = 0;
|
781
800
|
return false;
|
@@ -848,18 +867,45 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
848
867
|
}
|
849
868
|
|
850
869
|
GPR_DEBUG_ASSERT(total_read_bytes > 0);
|
870
|
+
*error = GRPC_ERROR_NONE;
|
871
|
+
if (tcp->frame_size_tuning_enabled) {
|
872
|
+
// Update min progress size based on the total number of bytes read in
|
873
|
+
// this round.
|
874
|
+
tcp->min_progress_size -= total_read_bytes;
|
875
|
+
if (tcp->min_progress_size > 0) {
|
876
|
+
// There is still some bytes left to be read before we can signal
|
877
|
+
// the read as complete. Append the bytes read so far into
|
878
|
+
// last_read_buffer which serves as a staging buffer. Return false
|
879
|
+
// to indicate tcp_handle_read needs to be scheduled again.
|
880
|
+
grpc_slice_buffer_move_first(tcp->incoming_buffer, total_read_bytes,
|
881
|
+
&tcp->last_read_buffer);
|
882
|
+
return false;
|
883
|
+
} else {
|
884
|
+
// The required number of bytes have been read. Append the bytes
|
885
|
+
// read in this round into last_read_buffer. Then swap last_read_buffer
|
886
|
+
// and incoming_buffer. Now incoming buffer contains all the bytes
|
887
|
+
// read since the start of the last tcp_read operation. last_read_buffer
|
888
|
+
// would contain any spare space left in the incoming buffer. This
|
889
|
+
// space will be used in the next tcp_read operation.
|
890
|
+
tcp->min_progress_size = 1;
|
891
|
+
grpc_slice_buffer_move_first(tcp->incoming_buffer, total_read_bytes,
|
892
|
+
&tcp->last_read_buffer);
|
893
|
+
grpc_slice_buffer_swap(&tcp->last_read_buffer, tcp->incoming_buffer);
|
894
|
+
return true;
|
895
|
+
}
|
896
|
+
}
|
851
897
|
if (total_read_bytes < tcp->incoming_buffer->length) {
|
852
898
|
grpc_slice_buffer_trim_end(tcp->incoming_buffer,
|
853
899
|
tcp->incoming_buffer->length - total_read_bytes,
|
854
900
|
&tcp->last_read_buffer);
|
855
901
|
}
|
856
|
-
*error = GRPC_ERROR_NONE;
|
857
902
|
return true;
|
858
903
|
}
|
859
904
|
|
860
905
|
static void maybe_make_read_slices(grpc_tcp* tcp)
|
861
906
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(tcp->read_mu) {
|
862
|
-
if (tcp->incoming_buffer->length
|
907
|
+
if (tcp->incoming_buffer->length <
|
908
|
+
static_cast<size_t>(tcp->min_progress_size) &&
|
863
909
|
tcp->incoming_buffer->count < MAX_READ_IOVEC) {
|
864
910
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
865
911
|
gpr_log(GPR_INFO,
|
@@ -868,15 +914,20 @@ static void maybe_make_read_slices(grpc_tcp* tcp)
|
|
868
914
|
tcp, tcp->min_read_chunk_size, tcp->max_read_chunk_size,
|
869
915
|
tcp->target_length, tcp->incoming_buffer->length);
|
870
916
|
}
|
871
|
-
int target_length =
|
917
|
+
int target_length =
|
918
|
+
std::max(static_cast<int>(tcp->target_length), tcp->min_progress_size);
|
872
919
|
int extra_wanted =
|
873
920
|
target_length - static_cast<int>(tcp->incoming_buffer->length);
|
921
|
+
int min_read_chunk_size =
|
922
|
+
std::max(tcp->min_read_chunk_size, tcp->min_progress_size);
|
923
|
+
int max_read_chunk_size =
|
924
|
+
std::max(tcp->max_read_chunk_size, tcp->min_progress_size);
|
874
925
|
grpc_slice_buffer_add_indexed(
|
875
926
|
tcp->incoming_buffer,
|
876
927
|
tcp->memory_owner.MakeSlice(grpc_core::MemoryRequest(
|
877
|
-
|
878
|
-
grpc_core::Clamp(extra_wanted,
|
879
|
-
|
928
|
+
min_read_chunk_size,
|
929
|
+
grpc_core::Clamp(extra_wanted, min_read_chunk_size,
|
930
|
+
max_read_chunk_size))));
|
880
931
|
maybe_post_reclaimer(tcp);
|
881
932
|
}
|
882
933
|
}
|
@@ -889,7 +940,7 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
|
|
889
940
|
}
|
890
941
|
tcp->read_mu.Lock();
|
891
942
|
grpc_error_handle tcp_read_error;
|
892
|
-
if (GPR_LIKELY(error
|
943
|
+
if (GPR_LIKELY(GRPC_ERROR_IS_NONE(error))) {
|
893
944
|
maybe_make_read_slices(tcp);
|
894
945
|
if (!tcp_do_read(tcp, &tcp_read_error)) {
|
895
946
|
/* We've consumed the edge, request a new one */
|
@@ -912,12 +963,14 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
|
|
912
963
|
}
|
913
964
|
|
914
965
|
static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
|
915
|
-
grpc_closure* cb, bool urgent, int
|
966
|
+
grpc_closure* cb, bool urgent, int min_progress_size) {
|
916
967
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
917
968
|
GPR_ASSERT(tcp->read_cb == nullptr);
|
918
969
|
tcp->read_cb = cb;
|
919
970
|
tcp->read_mu.Lock();
|
920
971
|
tcp->incoming_buffer = incoming_buffer;
|
972
|
+
tcp->min_progress_size =
|
973
|
+
tcp->frame_size_tuning_enabled ? min_progress_size : 1;
|
921
974
|
grpc_slice_buffer_reset_and_unref_internal(incoming_buffer);
|
922
975
|
grpc_slice_buffer_swap(incoming_buffer, &tcp->last_read_buffer);
|
923
976
|
tcp->read_mu.Unlock();
|
@@ -945,14 +998,15 @@ static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
|
|
945
998
|
|
946
999
|
/* A wrapper around sendmsg. It sends \a msg over \a fd and returns the number
|
947
1000
|
* of bytes sent. */
|
948
|
-
ssize_t tcp_send(int fd, const struct msghdr* msg, int
|
1001
|
+
ssize_t tcp_send(int fd, const struct msghdr* msg, int* saved_errno,
|
1002
|
+
int additional_flags = 0) {
|
949
1003
|
GPR_TIMER_SCOPE("sendmsg", 1);
|
950
1004
|
ssize_t sent_length;
|
951
1005
|
do {
|
952
1006
|
/* TODO(klempner): Cork if this is a partial write */
|
953
1007
|
GRPC_STATS_INC_SYSCALL_WRITE();
|
954
1008
|
sent_length = sendmsg(fd, msg, SENDMSG_FLAGS | additional_flags);
|
955
|
-
} while (sent_length < 0 && errno == EINTR);
|
1009
|
+
} while (sent_length < 0 && (*saved_errno = errno) == EINTR);
|
956
1010
|
return sent_length;
|
957
1011
|
}
|
958
1012
|
|
@@ -964,7 +1018,7 @@ ssize_t tcp_send(int fd, const struct msghdr* msg, int additional_flags = 0) {
|
|
964
1018
|
*/
|
965
1019
|
static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
966
1020
|
size_t sending_length,
|
967
|
-
ssize_t* sent_length,
|
1021
|
+
ssize_t* sent_length, int* saved_errno,
|
968
1022
|
int additional_flags = 0);
|
969
1023
|
|
970
1024
|
/** The callback function to be invoked when we get an error on the socket. */
|
@@ -1008,7 +1062,7 @@ static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* tcp) {
|
|
1008
1062
|
|
1009
1063
|
static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
1010
1064
|
size_t sending_length,
|
1011
|
-
ssize_t* sent_length,
|
1065
|
+
ssize_t* sent_length, int* saved_errno,
|
1012
1066
|
int additional_flags) {
|
1013
1067
|
if (!tcp->socket_ts_enabled) {
|
1014
1068
|
uint32_t opt = grpc_core::kTimestampingSocketOptions;
|
@@ -1037,7 +1091,7 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
|
1037
1091
|
msg->msg_controllen = CMSG_SPACE(sizeof(uint32_t));
|
1038
1092
|
|
1039
1093
|
/* If there was an error on sendmsg the logic in tcp_flush will handle it. */
|
1040
|
-
ssize_t length = tcp_send(tcp->fd, msg, additional_flags);
|
1094
|
+
ssize_t length = tcp_send(tcp->fd, msg, saved_errno, additional_flags);
|
1041
1095
|
*sent_length = length;
|
1042
1096
|
/* Only save timestamps if all the bytes were taken by sendmsg. */
|
1043
1097
|
if (sending_length == static_cast<size_t>(length)) {
|
@@ -1231,7 +1285,7 @@ static void tcp_handle_error(void* arg /* grpc_tcp */,
|
|
1231
1285
|
grpc_error_std_string(error).c_str());
|
1232
1286
|
}
|
1233
1287
|
|
1234
|
-
if (error
|
1288
|
+
if (!GRPC_ERROR_IS_NONE(error) ||
|
1235
1289
|
static_cast<bool>(gpr_atm_acq_load(&tcp->stop_error_notification))) {
|
1236
1290
|
/* We aren't going to register to hear on error anymore, so it is safe to
|
1237
1291
|
* unref. */
|
@@ -1262,6 +1316,7 @@ static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* /*tcp*/) {}
|
|
1262
1316
|
static bool tcp_write_with_timestamps(grpc_tcp* /*tcp*/, struct msghdr* /*msg*/,
|
1263
1317
|
size_t /*sending_length*/,
|
1264
1318
|
ssize_t* /*sent_length*/,
|
1319
|
+
int* /* saved_errno */,
|
1265
1320
|
int /*additional_flags*/) {
|
1266
1321
|
gpr_log(GPR_ERROR, "Write with timestamps not supported for this platform");
|
1267
1322
|
GPR_ASSERT(0);
|
@@ -1342,6 +1397,7 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
|
|
1342
1397
|
size_t unwind_slice_idx;
|
1343
1398
|
size_t unwind_byte_idx;
|
1344
1399
|
bool tried_sending_message;
|
1400
|
+
int saved_errno;
|
1345
1401
|
msghdr msg;
|
1346
1402
|
// iov consumes a large space. Keep it as the last item on the stack to
|
1347
1403
|
// improve locality. After all, we expect only the first elements of it being
|
@@ -1360,10 +1416,11 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
|
|
1360
1416
|
// Before calling sendmsg (with or without timestamps): we
|
1361
1417
|
// take a single ref on the zerocopy send record.
|
1362
1418
|
tcp->tcp_zerocopy_send_ctx.NoteSend(record);
|
1419
|
+
saved_errno = 0;
|
1363
1420
|
if (tcp->outgoing_buffer_arg != nullptr) {
|
1364
1421
|
if (!tcp->ts_capable ||
|
1365
1422
|
!tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length,
|
1366
|
-
MSG_ZEROCOPY)) {
|
1423
|
+
&saved_errno, MSG_ZEROCOPY)) {
|
1367
1424
|
/* We could not set socket options to collect Fathom timestamps.
|
1368
1425
|
* Fallback on writing without timestamps. */
|
1369
1426
|
tcp->ts_capable = false;
|
@@ -1377,20 +1434,20 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
|
|
1377
1434
|
msg.msg_controllen = 0;
|
1378
1435
|
GRPC_STATS_INC_TCP_WRITE_SIZE(sending_length);
|
1379
1436
|
GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
|
1380
|
-
sent_length = tcp_send(tcp->fd, &msg, MSG_ZEROCOPY);
|
1437
|
+
sent_length = tcp_send(tcp->fd, &msg, &saved_errno, MSG_ZEROCOPY);
|
1381
1438
|
}
|
1382
1439
|
if (sent_length < 0) {
|
1383
1440
|
// If this particular send failed, drop ref taken earlier in this method.
|
1384
1441
|
tcp->tcp_zerocopy_send_ctx.UndoSend();
|
1385
|
-
if (
|
1442
|
+
if (saved_errno == EAGAIN) {
|
1386
1443
|
record->UnwindIfThrottled(unwind_slice_idx, unwind_byte_idx);
|
1387
1444
|
return false;
|
1388
|
-
} else if (
|
1389
|
-
*error = tcp_annotate_error(GRPC_OS_ERROR(
|
1445
|
+
} else if (saved_errno == EPIPE) {
|
1446
|
+
*error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
|
1390
1447
|
tcp_shutdown_buffer_list(tcp);
|
1391
1448
|
return true;
|
1392
1449
|
} else {
|
1393
|
-
*error = tcp_annotate_error(GRPC_OS_ERROR(
|
1450
|
+
*error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
|
1394
1451
|
tcp_shutdown_buffer_list(tcp);
|
1395
1452
|
return true;
|
1396
1453
|
}
|
@@ -1434,6 +1491,7 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1434
1491
|
size_t trailing;
|
1435
1492
|
size_t unwind_slice_idx;
|
1436
1493
|
size_t unwind_byte_idx;
|
1494
|
+
int saved_errno;
|
1437
1495
|
|
1438
1496
|
// We always start at zero, because we eagerly unref and trim the slice
|
1439
1497
|
// buffer as we write
|
@@ -1465,9 +1523,11 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1465
1523
|
msg.msg_iovlen = iov_size;
|
1466
1524
|
msg.msg_flags = 0;
|
1467
1525
|
bool tried_sending_message = false;
|
1526
|
+
saved_errno = 0;
|
1468
1527
|
if (tcp->outgoing_buffer_arg != nullptr) {
|
1469
1528
|
if (!tcp->ts_capable ||
|
1470
|
-
!tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length
|
1529
|
+
!tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length,
|
1530
|
+
&saved_errno)) {
|
1471
1531
|
/* We could not set socket options to collect Fathom timestamps.
|
1472
1532
|
* Fallback on writing without timestamps. */
|
1473
1533
|
tcp->ts_capable = false;
|
@@ -1483,11 +1543,11 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1483
1543
|
GRPC_STATS_INC_TCP_WRITE_SIZE(sending_length);
|
1484
1544
|
GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
|
1485
1545
|
|
1486
|
-
sent_length = tcp_send(tcp->fd, &msg);
|
1546
|
+
sent_length = tcp_send(tcp->fd, &msg, &saved_errno);
|
1487
1547
|
}
|
1488
1548
|
|
1489
1549
|
if (sent_length < 0) {
|
1490
|
-
if (
|
1550
|
+
if (saved_errno == EAGAIN) {
|
1491
1551
|
tcp->outgoing_byte_idx = unwind_byte_idx;
|
1492
1552
|
// unref all and forget about all slices that have been written to this
|
1493
1553
|
// point
|
@@ -1495,13 +1555,13 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1495
1555
|
grpc_slice_buffer_remove_first(tcp->outgoing_buffer);
|
1496
1556
|
}
|
1497
1557
|
return false;
|
1498
|
-
} else if (
|
1499
|
-
*error = tcp_annotate_error(GRPC_OS_ERROR(
|
1558
|
+
} else if (saved_errno == EPIPE) {
|
1559
|
+
*error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
|
1500
1560
|
grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
|
1501
1561
|
tcp_shutdown_buffer_list(tcp);
|
1502
1562
|
return true;
|
1503
1563
|
} else {
|
1504
|
-
*error = tcp_annotate_error(GRPC_OS_ERROR(
|
1564
|
+
*error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
|
1505
1565
|
grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
|
1506
1566
|
tcp_shutdown_buffer_list(tcp);
|
1507
1567
|
return true;
|
@@ -1537,7 +1597,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1537
1597
|
grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
|
1538
1598
|
grpc_closure* cb;
|
1539
1599
|
|
1540
|
-
if (error
|
1600
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
1541
1601
|
cb = tcp->write_cb;
|
1542
1602
|
tcp->write_cb = nullptr;
|
1543
1603
|
if (tcp->current_zerocopy_send != nullptr) {
|
@@ -1560,7 +1620,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1560
1620
|
}
|
1561
1621
|
notify_on_write(tcp);
|
1562
1622
|
// tcp_flush does not populate error if it has returned false.
|
1563
|
-
GPR_DEBUG_ASSERT(error
|
1623
|
+
GPR_DEBUG_ASSERT(GRPC_ERROR_IS_NONE(error));
|
1564
1624
|
} else {
|
1565
1625
|
cb = tcp->write_cb;
|
1566
1626
|
tcp->write_cb = nullptr;
|
@@ -1792,6 +1852,8 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
1792
1852
|
tcp->socket_ts_enabled = false;
|
1793
1853
|
tcp->ts_capable = true;
|
1794
1854
|
tcp->outgoing_buffer_arg = nullptr;
|
1855
|
+
tcp->frame_size_tuning_enabled = ExperimentalTcpFrameSizeTuningEnabled();
|
1856
|
+
tcp->min_progress_size = 1;
|
1795
1857
|
if (tcp_tx_zerocopy_enabled && !tcp->tcp_zerocopy_send_ctx.memory_limited()) {
|
1796
1858
|
#ifdef GRPC_LINUX_ERRQUEUE
|
1797
1859
|
const int enable = 1;
|
@@ -191,7 +191,7 @@ static void tcp_server_destroy(grpc_tcp_server* s) {
|
|
191
191
|
static void on_read(void* arg, grpc_error_handle err) {
|
192
192
|
grpc_tcp_listener* sp = static_cast<grpc_tcp_listener*>(arg);
|
193
193
|
grpc_pollset* read_notifier_pollset;
|
194
|
-
if (err
|
194
|
+
if (!GRPC_ERROR_IS_NONE(err)) {
|
195
195
|
goto error;
|
196
196
|
}
|
197
197
|
|
@@ -253,7 +253,7 @@ static void on_read(void* arg, grpc_error_handle err) {
|
|
253
253
|
|
254
254
|
err = grpc_apply_socket_mutator_in_args(fd, GRPC_FD_SERVER_CONNECTION_USAGE,
|
255
255
|
sp->server->channel_args);
|
256
|
-
if (err
|
256
|
+
if (!GRPC_ERROR_IS_NONE(err)) {
|
257
257
|
goto error;
|
258
258
|
}
|
259
259
|
|
@@ -344,14 +344,14 @@ static grpc_error_handle add_wildcard_addrs_to_server(grpc_tcp_server* s,
|
|
344
344
|
}
|
345
345
|
}
|
346
346
|
if (*out_port > 0) {
|
347
|
-
if (v6_err
|
347
|
+
if (!GRPC_ERROR_IS_NONE(v6_err)) {
|
348
348
|
gpr_log(GPR_INFO,
|
349
349
|
"Failed to add :: listener, "
|
350
350
|
"the environment may not support IPv6: %s",
|
351
351
|
grpc_error_std_string(v6_err).c_str());
|
352
352
|
GRPC_ERROR_UNREF(v6_err);
|
353
353
|
}
|
354
|
-
if (v4_err
|
354
|
+
if (!GRPC_ERROR_IS_NONE(v4_err)) {
|
355
355
|
gpr_log(GPR_INFO,
|
356
356
|
"Failed to add 0.0.0.0 listener, "
|
357
357
|
"the environment may not support IPv4: %s",
|
@@ -362,7 +362,7 @@ static grpc_error_handle add_wildcard_addrs_to_server(grpc_tcp_server* s,
|
|
362
362
|
} else {
|
363
363
|
grpc_error_handle root_err = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
364
364
|
"Failed to add any wildcard listeners");
|
365
|
-
GPR_ASSERT(v6_err
|
365
|
+
GPR_ASSERT(!GRPC_ERROR_IS_NONE(v6_err) && !GRPC_ERROR_IS_NONE(v4_err));
|
366
366
|
root_err = grpc_error_add_child(root_err, v6_err);
|
367
367
|
root_err = grpc_error_add_child(root_err, v4_err);
|
368
368
|
return root_err;
|
@@ -385,10 +385,10 @@ static grpc_error_handle clone_port(grpc_tcp_listener* listener,
|
|
385
385
|
grpc_dualstack_mode dsmode;
|
386
386
|
err = grpc_create_dualstack_socket(&listener->addr, SOCK_STREAM, 0, &dsmode,
|
387
387
|
&fd);
|
388
|
-
if (err
|
388
|
+
if (!GRPC_ERROR_IS_NONE(err)) return err;
|
389
389
|
err = grpc_tcp_server_prepare_socket(listener->server, fd, &listener->addr,
|
390
390
|
true, &port);
|
391
|
-
if (err
|
391
|
+
if (!GRPC_ERROR_IS_NONE(err)) return err;
|
392
392
|
listener->server->nports++;
|
393
393
|
addr_str = grpc_sockaddr_to_string(&listener->addr, true);
|
394
394
|
if (!addr_str.ok()) {
|
@@ -90,7 +90,7 @@ static grpc_error_handle add_socket_to_server(grpc_tcp_server* s, int fd,
|
|
90
90
|
|
91
91
|
grpc_error_handle err =
|
92
92
|
grpc_tcp_server_prepare_socket(s, fd, addr, s->so_reuseport, &port);
|
93
|
-
if (err
|
93
|
+
if (!GRPC_ERROR_IS_NONE(err)) return err;
|
94
94
|
GPR_ASSERT(port > 0);
|
95
95
|
absl::StatusOr<std::string> addr_str = grpc_sockaddr_to_string(addr, true);
|
96
96
|
if (!addr_str.ok()) {
|
@@ -137,7 +137,7 @@ grpc_error_handle grpc_tcp_server_add_addr(grpc_tcp_server* s,
|
|
137
137
|
int fd;
|
138
138
|
grpc_error_handle err =
|
139
139
|
grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, dsmode, &fd);
|
140
|
-
if (err
|
140
|
+
if (!GRPC_ERROR_IS_NONE(err)) {
|
141
141
|
return err;
|
142
142
|
}
|
143
143
|
if (*dsmode == GRPC_DSMODE_IPV4 &&
|
@@ -158,36 +158,36 @@ grpc_error_handle grpc_tcp_server_prepare_socket(
|
|
158
158
|
|
159
159
|
if (so_reuseport && !grpc_is_unix_socket(addr)) {
|
160
160
|
err = grpc_set_socket_reuse_port(fd, 1);
|
161
|
-
if (err
|
161
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
162
162
|
}
|
163
163
|
|
164
164
|
#ifdef GRPC_LINUX_ERRQUEUE
|
165
165
|
err = grpc_set_socket_zerocopy(fd);
|
166
|
-
if (err
|
166
|
+
if (!GRPC_ERROR_IS_NONE(err)) {
|
167
167
|
/* it's not fatal, so just log it. */
|
168
168
|
gpr_log(GPR_DEBUG, "Node does not support SO_ZEROCOPY, continuing.");
|
169
169
|
GRPC_ERROR_UNREF(err);
|
170
170
|
}
|
171
171
|
#endif
|
172
172
|
err = grpc_set_socket_nonblocking(fd, 1);
|
173
|
-
if (err
|
173
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
174
174
|
err = grpc_set_socket_cloexec(fd, 1);
|
175
|
-
if (err
|
175
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
176
176
|
if (!grpc_is_unix_socket(addr)) {
|
177
177
|
err = grpc_set_socket_low_latency(fd, 1);
|
178
|
-
if (err
|
178
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
179
179
|
err = grpc_set_socket_reuse_addr(fd, 1);
|
180
|
-
if (err
|
180
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
181
181
|
err = grpc_set_socket_tcp_user_timeout(fd, s->channel_args,
|
182
182
|
false /* is_client */);
|
183
|
-
if (err
|
183
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
184
184
|
}
|
185
185
|
err = grpc_set_socket_no_sigpipe_if_possible(fd);
|
186
|
-
if (err
|
186
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
187
187
|
|
188
188
|
err = grpc_apply_socket_mutator_in_args(fd, GRPC_FD_SERVER_LISTENER_USAGE,
|
189
189
|
s->channel_args);
|
190
|
-
if (err
|
190
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
191
191
|
|
192
192
|
if (bind(fd, reinterpret_cast<grpc_sockaddr*>(const_cast<char*>(addr->addr)),
|
193
193
|
addr->len) < 0) {
|
@@ -212,7 +212,7 @@ grpc_error_handle grpc_tcp_server_prepare_socket(
|
|
212
212
|
return GRPC_ERROR_NONE;
|
213
213
|
|
214
214
|
error:
|
215
|
-
GPR_ASSERT(err
|
215
|
+
GPR_ASSERT(!GRPC_ERROR_IS_NONE(err));
|
216
216
|
if (fd >= 0) {
|
217
217
|
close(fd);
|
218
218
|
}
|
@@ -65,7 +65,7 @@ static grpc_error_handle get_unused_port(int* port) {
|
|
65
65
|
int fd;
|
66
66
|
grpc_error_handle err =
|
67
67
|
grpc_create_dualstack_socket(&wild, SOCK_STREAM, 0, &dsmode, &fd);
|
68
|
-
if (err
|
68
|
+
if (!GRPC_ERROR_IS_NONE(err)) {
|
69
69
|
return err;
|
70
70
|
}
|
71
71
|
if (dsmode == GRPC_DSMODE_IPV4) {
|
@@ -164,7 +164,7 @@ grpc_error_handle grpc_tcp_server_add_all_local_addrs(grpc_tcp_server* s,
|
|
164
164
|
}
|
165
165
|
}
|
166
166
|
freeifaddrs(ifa);
|
167
|
-
if (err
|
167
|
+
if (!GRPC_ERROR_IS_NONE(err)) {
|
168
168
|
return err;
|
169
169
|
} else if (sp == nullptr) {
|
170
170
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No local addresses");
|
@@ -197,7 +197,7 @@ static grpc_error_handle prepare_socket(SOCKET sock,
|
|
197
197
|
int sockname_temp_len;
|
198
198
|
|
199
199
|
error = grpc_tcp_prepare_socket(sock);
|
200
|
-
if (error
|
200
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
201
201
|
goto failure;
|
202
202
|
}
|
203
203
|
|
@@ -224,7 +224,7 @@ static grpc_error_handle prepare_socket(SOCKET sock,
|
|
224
224
|
return GRPC_ERROR_NONE;
|
225
225
|
|
226
226
|
failure:
|
227
|
-
GPR_ASSERT(error
|
227
|
+
GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
|
228
228
|
auto addr_uri = grpc_sockaddr_to_uri(addr);
|
229
229
|
grpc_error_set_int(
|
230
230
|
grpc_error_set_str(
|
@@ -267,7 +267,7 @@ static grpc_error_handle start_accept_locked(grpc_tcp_listener* port) {
|
|
267
267
|
}
|
268
268
|
|
269
269
|
error = grpc_tcp_prepare_socket(sock);
|
270
|
-
if (error
|
270
|
+
if (!GRPC_ERROR_IS_NONE(error)) goto failure;
|
271
271
|
|
272
272
|
/* Start the "accept" asynchronously. */
|
273
273
|
success = port->AcceptEx(port->socket->socket, sock, port->addresses, 0,
|
@@ -292,7 +292,7 @@ static grpc_error_handle start_accept_locked(grpc_tcp_listener* port) {
|
|
292
292
|
return error;
|
293
293
|
|
294
294
|
failure:
|
295
|
-
GPR_ASSERT(error
|
295
|
+
GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
|
296
296
|
if (sock != INVALID_SOCKET) closesocket(sock);
|
297
297
|
return error;
|
298
298
|
}
|
@@ -316,7 +316,7 @@ static void on_accept(void* arg, grpc_error_handle error) {
|
|
316
316
|
/* The general mechanism for shutting down is to queue abortion calls. While
|
317
317
|
this is necessary in the read/write case, it's useless for the accept
|
318
318
|
case. We only need to adjust the pending callback count */
|
319
|
-
if (error
|
319
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
320
320
|
gpr_log(GPR_INFO, "Skipping on_accept due to error: %s",
|
321
321
|
grpc_error_std_string(error).c_str());
|
322
322
|
|
@@ -419,7 +419,7 @@ static grpc_error_handle add_socket_to_server(grpc_tcp_server* s, SOCKET sock,
|
|
419
419
|
}
|
420
420
|
|
421
421
|
error = prepare_socket(sock, addr, &port);
|
422
|
-
if (error
|
422
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
423
423
|
return error;
|
424
424
|
}
|
425
425
|
|
@@ -511,7 +511,7 @@ static grpc_error_handle tcp_server_add_port(grpc_tcp_server* s,
|
|
511
511
|
done:
|
512
512
|
gpr_free(allocated_addr);
|
513
513
|
|
514
|
-
if (error
|
514
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
515
515
|
grpc_error_handle error_out =
|
516
516
|
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
517
517
|
"Failed to add port to server", &error, 1);
|
@@ -89,11 +89,11 @@ static grpc_error_handle enable_socket_low_latency(SOCKET sock) {
|
|
89
89
|
grpc_error_handle grpc_tcp_prepare_socket(SOCKET sock) {
|
90
90
|
grpc_error_handle err;
|
91
91
|
err = grpc_tcp_set_non_block(sock);
|
92
|
-
if (err
|
92
|
+
if (!GRPC_ERROR_IS_NONE(err)) return err;
|
93
93
|
err = set_dualstack(sock);
|
94
|
-
if (err
|
94
|
+
if (!GRPC_ERROR_IS_NONE(err)) return err;
|
95
95
|
err = enable_socket_low_latency(sock);
|
96
|
-
if (err
|
96
|
+
if (!GRPC_ERROR_IS_NONE(err)) return err;
|
97
97
|
return GRPC_ERROR_NONE;
|
98
98
|
}
|
99
99
|
|
@@ -186,7 +186,7 @@ static void on_read(void* tcpp, grpc_error_handle error) {
|
|
186
186
|
|
187
187
|
(void)GRPC_ERROR_REF(error);
|
188
188
|
|
189
|
-
if (error
|
189
|
+
if (GRPC_ERROR_IS_NONE(error)) {
|
190
190
|
if (info->wsa_error != 0 && !tcp->shutting_down) {
|
191
191
|
char* utf8_message = gpr_format_message(info->wsa_error);
|
192
192
|
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(utf8_message);
|
@@ -331,7 +331,7 @@ static void on_write(void* tcpp, grpc_error_handle error) {
|
|
331
331
|
tcp->write_cb = NULL;
|
332
332
|
gpr_mu_unlock(&tcp->mu);
|
333
333
|
|
334
|
-
if (error
|
334
|
+
if (GRPC_ERROR_IS_NONE(error)) {
|
335
335
|
if (info->wsa_error != 0) {
|
336
336
|
error = GRPC_WSA_ERROR(info->wsa_error, "WSASend");
|
337
337
|
} else {
|
@@ -45,7 +45,7 @@ absl::StatusOr<std::vector<grpc_resolved_address>>
|
|
45
45
|
grpc_resolve_unix_domain_address(absl::string_view name) {
|
46
46
|
grpc_resolved_address addr;
|
47
47
|
grpc_error_handle error = grpc_core::UnixSockaddrPopulate(name, &addr);
|
48
|
-
if (error
|
48
|
+
if (GRPC_ERROR_IS_NONE(error)) {
|
49
49
|
return std::vector<grpc_resolved_address>({addr});
|
50
50
|
}
|
51
51
|
auto result = grpc_error_to_absl_status(error);
|
@@ -58,7 +58,7 @@ grpc_resolve_unix_abstract_domain_address(const absl::string_view name) {
|
|
58
58
|
grpc_resolved_address addr;
|
59
59
|
grpc_error_handle error =
|
60
60
|
grpc_core::UnixAbstractSockaddrPopulate(name, &addr);
|
61
|
-
if (error
|
61
|
+
if (GRPC_ERROR_IS_NONE(error)) {
|
62
62
|
return std::vector<grpc_resolved_address>({addr});
|
63
63
|
}
|
64
64
|
auto result = grpc_error_to_absl_status(error);
|
@@ -41,9 +41,9 @@ static grpc_error_handle pipe_init(grpc_wakeup_fd* fd_info) {
|
|
41
41
|
}
|
42
42
|
grpc_error_handle err;
|
43
43
|
err = grpc_set_socket_nonblocking(pipefd[0], 1);
|
44
|
-
if (err
|
44
|
+
if (!GRPC_ERROR_IS_NONE(err)) return err;
|
45
45
|
err = grpc_set_socket_nonblocking(pipefd[1], 1);
|
46
|
-
if (err
|
46
|
+
if (!GRPC_ERROR_IS_NONE(err)) return err;
|
47
47
|
fd_info->read_fd = pipefd[0];
|
48
48
|
fd_info->write_fd = pipefd[1];
|
49
49
|
return GRPC_ERROR_NONE;
|
@@ -32,22 +32,25 @@ static const grpc_wakeup_fd_vtable* wakeup_fd_vtable = nullptr;
|
|
32
32
|
int grpc_allow_specialized_wakeup_fd = 1;
|
33
33
|
int grpc_allow_pipe_wakeup_fd = 1;
|
34
34
|
|
35
|
-
int has_real_wakeup_fd = 1;
|
36
|
-
|
35
|
+
static int has_real_wakeup_fd = 1;
|
36
|
+
|
37
|
+
static gpr_once once_init_wakeup_fd = GPR_ONCE_INIT;
|
37
38
|
|
38
39
|
void grpc_wakeup_fd_global_init(void) {
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
40
|
+
gpr_once_init(&once_init_wakeup_fd, []() {
|
41
|
+
if (grpc_allow_specialized_wakeup_fd &&
|
42
|
+
grpc_specialized_wakeup_fd_vtable.check_availability()) {
|
43
|
+
wakeup_fd_vtable = &grpc_specialized_wakeup_fd_vtable;
|
44
|
+
} else if (grpc_allow_pipe_wakeup_fd &&
|
45
|
+
grpc_pipe_wakeup_fd_vtable.check_availability()) {
|
46
|
+
wakeup_fd_vtable = &grpc_pipe_wakeup_fd_vtable;
|
47
|
+
} else {
|
48
|
+
has_real_wakeup_fd = 0;
|
49
|
+
}
|
50
|
+
});
|
48
51
|
}
|
49
52
|
|
50
|
-
void grpc_wakeup_fd_global_destroy(void) {
|
53
|
+
void grpc_wakeup_fd_global_destroy(void) {}
|
51
54
|
|
52
55
|
int grpc_has_wakeup_fd(void) { return has_real_wakeup_fd; }
|
53
56
|
|
@@ -59,8 +59,6 @@ void grpc_wakeup_fd_global_destroy(void);
|
|
59
59
|
void grpc_wakeup_fd_global_init_force_fallback(void);
|
60
60
|
|
61
61
|
int grpc_has_wakeup_fd(void);
|
62
|
-
int grpc_cv_wakeup_fds_enabled(void);
|
63
|
-
void grpc_enable_cv_wakeup_fds(int enable);
|
64
62
|
|
65
63
|
typedef struct grpc_wakeup_fd grpc_wakeup_fd;
|
66
64
|
|