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
@@ -0,0 +1,361 @@
|
|
1
|
+
// Copyright 2022 The gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TCP_SOCKET_UTILS_H
|
16
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TCP_SOCKET_UTILS_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include <functional>
|
21
|
+
#include <string>
|
22
|
+
#include <utility>
|
23
|
+
|
24
|
+
#include "absl/status/status.h"
|
25
|
+
#include "absl/status/statusor.h"
|
26
|
+
#include "absl/types/optional.h"
|
27
|
+
|
28
|
+
#include <grpc/event_engine/endpoint_config.h>
|
29
|
+
#include <grpc/event_engine/event_engine.h>
|
30
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
31
|
+
#include <grpc/support/log.h>
|
32
|
+
|
33
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
34
|
+
#include "src/core/lib/iomgr/port.h"
|
35
|
+
#include "src/core/lib/iomgr/socket_mutator.h"
|
36
|
+
#include "src/core/lib/resource_quota/resource_quota.h"
|
37
|
+
|
38
|
+
#ifdef GRPC_POSIX_SOCKET_UTILS_COMMON
|
39
|
+
#include <sys/socket.h>
|
40
|
+
#endif
|
41
|
+
|
42
|
+
#ifdef GRPC_LINUX_ERRQUEUE
|
43
|
+
#ifndef SO_ZEROCOPY
|
44
|
+
#define SO_ZEROCOPY 60
|
45
|
+
#endif
|
46
|
+
#ifndef SO_EE_ORIGIN_ZEROCOPY
|
47
|
+
#define SO_EE_ORIGIN_ZEROCOPY 5
|
48
|
+
#endif
|
49
|
+
#endif /* ifdef GRPC_LINUX_ERRQUEUE */
|
50
|
+
|
51
|
+
namespace grpc_event_engine {
|
52
|
+
namespace posix_engine {
|
53
|
+
|
54
|
+
using ::grpc_event_engine::experimental::EventEngine;
|
55
|
+
|
56
|
+
struct PosixTcpOptions {
|
57
|
+
static constexpr int kDefaultReadChunkSize = 8192;
|
58
|
+
static constexpr int kDefaultMinReadChunksize = 256;
|
59
|
+
static constexpr int kDefaultMaxReadChunksize = 4 * 1024 * 1024;
|
60
|
+
static constexpr int kZerocpTxEnabledDefault = 0;
|
61
|
+
static constexpr int kMaxChunkSize = 32 * 1024 * 1024;
|
62
|
+
static constexpr int kDefaultMaxSends = 4;
|
63
|
+
static constexpr size_t kDefaultSendBytesThreshold = 16 * 1024;
|
64
|
+
int tcp_read_chunk_size = kDefaultReadChunkSize;
|
65
|
+
int tcp_min_read_chunk_size = kDefaultMinReadChunksize;
|
66
|
+
int tcp_max_read_chunk_size = kDefaultMaxReadChunksize;
|
67
|
+
int tcp_tx_zerocopy_send_bytes_threshold = kDefaultSendBytesThreshold;
|
68
|
+
int tcp_tx_zerocopy_max_simultaneous_sends = kDefaultMaxSends;
|
69
|
+
bool tcp_tx_zero_copy_enabled = kZerocpTxEnabledDefault;
|
70
|
+
int keep_alive_time_ms = 0;
|
71
|
+
int keep_alive_timeout_ms = 0;
|
72
|
+
bool expand_wildcard_addrs = false;
|
73
|
+
bool allow_reuse_port = false;
|
74
|
+
grpc_core::RefCountedPtr<grpc_core::ResourceQuota> resource_quota;
|
75
|
+
struct grpc_socket_mutator* socket_mutator = nullptr;
|
76
|
+
PosixTcpOptions() = default;
|
77
|
+
// Move ctor
|
78
|
+
PosixTcpOptions(PosixTcpOptions&& other) noexcept {
|
79
|
+
socket_mutator = std::exchange(other.socket_mutator, nullptr);
|
80
|
+
resource_quota = std::move(other.resource_quota);
|
81
|
+
CopyIntegerOptions(other);
|
82
|
+
}
|
83
|
+
// Move assignment
|
84
|
+
PosixTcpOptions& operator=(PosixTcpOptions&& other) noexcept {
|
85
|
+
if (socket_mutator != nullptr) {
|
86
|
+
grpc_socket_mutator_unref(socket_mutator);
|
87
|
+
}
|
88
|
+
socket_mutator = std::exchange(other.socket_mutator, nullptr);
|
89
|
+
resource_quota = std::move(other.resource_quota);
|
90
|
+
CopyIntegerOptions(other);
|
91
|
+
return *this;
|
92
|
+
}
|
93
|
+
// Copy ctor
|
94
|
+
PosixTcpOptions(const PosixTcpOptions& other) {
|
95
|
+
if (other.socket_mutator != nullptr) {
|
96
|
+
socket_mutator = grpc_socket_mutator_ref(other.socket_mutator);
|
97
|
+
}
|
98
|
+
resource_quota = other.resource_quota;
|
99
|
+
CopyIntegerOptions(other);
|
100
|
+
}
|
101
|
+
// Copy assignment
|
102
|
+
PosixTcpOptions& operator=(const PosixTcpOptions& other) {
|
103
|
+
if (&other == this) {
|
104
|
+
return *this;
|
105
|
+
}
|
106
|
+
if (socket_mutator != nullptr) {
|
107
|
+
grpc_socket_mutator_unref(socket_mutator);
|
108
|
+
socket_mutator = nullptr;
|
109
|
+
}
|
110
|
+
if (other.socket_mutator != nullptr) {
|
111
|
+
socket_mutator = grpc_socket_mutator_ref(other.socket_mutator);
|
112
|
+
}
|
113
|
+
resource_quota = other.resource_quota;
|
114
|
+
CopyIntegerOptions(other);
|
115
|
+
return *this;
|
116
|
+
}
|
117
|
+
// Destructor.
|
118
|
+
~PosixTcpOptions() {
|
119
|
+
if (socket_mutator != nullptr) {
|
120
|
+
grpc_socket_mutator_unref(socket_mutator);
|
121
|
+
}
|
122
|
+
}
|
123
|
+
|
124
|
+
private:
|
125
|
+
void CopyIntegerOptions(const PosixTcpOptions& other) {
|
126
|
+
tcp_read_chunk_size = other.tcp_read_chunk_size;
|
127
|
+
tcp_min_read_chunk_size = other.tcp_min_read_chunk_size;
|
128
|
+
tcp_max_read_chunk_size = other.tcp_max_read_chunk_size;
|
129
|
+
tcp_tx_zerocopy_send_bytes_threshold =
|
130
|
+
other.tcp_tx_zerocopy_send_bytes_threshold;
|
131
|
+
tcp_tx_zerocopy_max_simultaneous_sends =
|
132
|
+
other.tcp_tx_zerocopy_max_simultaneous_sends;
|
133
|
+
tcp_tx_zero_copy_enabled = other.tcp_tx_zero_copy_enabled;
|
134
|
+
keep_alive_time_ms = other.keep_alive_time_ms;
|
135
|
+
keep_alive_timeout_ms = other.keep_alive_timeout_ms;
|
136
|
+
expand_wildcard_addrs = other.expand_wildcard_addrs;
|
137
|
+
allow_reuse_port = other.allow_reuse_port;
|
138
|
+
}
|
139
|
+
};
|
140
|
+
|
141
|
+
PosixTcpOptions TcpOptionsFromEndpointConfig(
|
142
|
+
const grpc_event_engine::experimental::EndpointConfig& config);
|
143
|
+
|
144
|
+
// a wrapper for accept or accept4
|
145
|
+
int Accept4(int sockfd,
|
146
|
+
grpc_event_engine::experimental::EventEngine::ResolvedAddress& addr,
|
147
|
+
int nonblock, int cloexec);
|
148
|
+
|
149
|
+
// Returns true if resolved_addr is an IPv4-mapped IPv6 address within the
|
150
|
+
// ::ffff:0.0.0.0/96 range, or false otherwise.
|
151
|
+
|
152
|
+
// If resolved_addr4_out is non-NULL, the inner IPv4 address will be copied
|
153
|
+
// here when returning true.
|
154
|
+
bool SockaddrIsV4Mapped(const EventEngine::ResolvedAddress* resolved_addr,
|
155
|
+
EventEngine::ResolvedAddress* resolved_addr4_out);
|
156
|
+
|
157
|
+
// If resolved_addr is an AF_INET address, writes the corresponding
|
158
|
+
// ::ffff:0.0.0.0/96 address to resolved_addr6_out and returns true. Otherwise
|
159
|
+
// returns false.
|
160
|
+
bool SockaddrToV4Mapped(const EventEngine::ResolvedAddress* resolved_addr,
|
161
|
+
EventEngine::ResolvedAddress* resolved_addr6_out);
|
162
|
+
|
163
|
+
// Make wild card IPv6 address with specified port.
|
164
|
+
EventEngine::ResolvedAddress SockaddrMakeWild6(int port);
|
165
|
+
|
166
|
+
// Make wild card IPv4 address with specified port.
|
167
|
+
EventEngine::ResolvedAddress SockaddrMakeWild4(int port);
|
168
|
+
|
169
|
+
// Given a resolved address, return the port number in the address.
|
170
|
+
int SockaddrGetPort(const EventEngine::ResolvedAddress& resolved_addr);
|
171
|
+
|
172
|
+
// Modifes the passed address to use the specified port number. The
|
173
|
+
// operation would only succeed if the passed address is an IPv4 or Ipv6
|
174
|
+
// address. Otherwise the function call would abort fail.
|
175
|
+
void SockaddrSetPort(EventEngine::ResolvedAddress& resolved_addr, int port);
|
176
|
+
|
177
|
+
// Unlink the path pointed to by the given address if it refers to UDS path.
|
178
|
+
void UnlinkIfUnixDomainSocket(
|
179
|
+
const EventEngine::ResolvedAddress& resolved_addr);
|
180
|
+
|
181
|
+
// Returns the port number associated with the address if the given address is
|
182
|
+
// not a wildcard ipv6 or ipv6 address. Otherwise returns absl::nullopt
|
183
|
+
absl::optional<int> SockaddrIsWildcard(
|
184
|
+
const EventEngine::ResolvedAddress& addr);
|
185
|
+
|
186
|
+
// Converts a EventEngine::ResolvedAddress into a newly-allocated
|
187
|
+
// human-readable string.
|
188
|
+
//
|
189
|
+
// Currently, only the AF_INET, AF_INET6, and AF_UNIX families are
|
190
|
+
// recognized. If the normalize flag is enabled, ::ffff:0.0.0.0/96 IPv6
|
191
|
+
// addresses are displayed as plain IPv4.
|
192
|
+
absl::StatusOr<std::string> SockaddrToString(
|
193
|
+
const EventEngine::ResolvedAddress* resolved_addr, bool normalize);
|
194
|
+
|
195
|
+
class PosixSocketWrapper {
|
196
|
+
public:
|
197
|
+
explicit PosixSocketWrapper(int fd) : fd_(fd) { GPR_ASSERT(fd_ > 0); }
|
198
|
+
|
199
|
+
PosixSocketWrapper() : fd_(-1){};
|
200
|
+
|
201
|
+
~PosixSocketWrapper() = default;
|
202
|
+
|
203
|
+
// Instruct the kernel to wait for specified number of bytes to be received on
|
204
|
+
// the socket before generating an interrupt for packet receive. If the call
|
205
|
+
// succeeds, it returns the number of bytes (wait threshold) that was actually
|
206
|
+
// set.
|
207
|
+
absl::StatusOr<int> SetSocketRcvLowat(int bytes);
|
208
|
+
|
209
|
+
// Set socket to use zerocopy
|
210
|
+
absl::Status SetSocketZeroCopy();
|
211
|
+
|
212
|
+
// Set socket to non blocking mode
|
213
|
+
absl::Status SetSocketNonBlocking(int non_blocking);
|
214
|
+
|
215
|
+
// Set socket to close on exec
|
216
|
+
absl::Status SetSocketCloexec(int close_on_exec);
|
217
|
+
|
218
|
+
// Set socket to reuse old addresses
|
219
|
+
absl::Status SetSocketReuseAddr(int reuse);
|
220
|
+
|
221
|
+
// Disable nagle algorithm
|
222
|
+
absl::Status SetSocketLowLatency(int low_latency);
|
223
|
+
|
224
|
+
// Set SO_REUSEPORT
|
225
|
+
absl::Status SetSocketReusePort(int reuse);
|
226
|
+
|
227
|
+
// Override default Tcp user timeout values if necessary.
|
228
|
+
void TrySetSocketTcpUserTimeout(const PosixTcpOptions& options,
|
229
|
+
bool is_client);
|
230
|
+
|
231
|
+
// Tries to set SO_NOSIGPIPE if available on this platform.
|
232
|
+
// If SO_NO_SIGPIPE is not available, returns not OK status.
|
233
|
+
absl::Status SetSocketNoSigpipeIfPossible();
|
234
|
+
|
235
|
+
// Tries to set IP_PKTINFO if available on this platform. If IP_PKTINFO is not
|
236
|
+
// available, returns not OK status.
|
237
|
+
absl::Status SetSocketIpPktInfoIfPossible();
|
238
|
+
|
239
|
+
// Tries to set IPV6_RECVPKTINFO if available on this platform. If
|
240
|
+
// IPV6_RECVPKTINFO is not available, returns not OK status.
|
241
|
+
absl::Status SetSocketIpv6RecvPktInfoIfPossible();
|
242
|
+
|
243
|
+
// Tries to set the socket's send buffer to given size.
|
244
|
+
absl::Status SetSocketSndBuf(int buffer_size_bytes);
|
245
|
+
|
246
|
+
// Tries to set the socket's receive buffer to given size.
|
247
|
+
absl::Status SetSocketRcvBuf(int buffer_size_bytes);
|
248
|
+
|
249
|
+
// Tries to set the socket using a grpc_socket_mutator
|
250
|
+
absl::Status SetSocketMutator(grpc_fd_usage usage,
|
251
|
+
grpc_socket_mutator* mutator);
|
252
|
+
|
253
|
+
// Extracts the first socket mutator from config if any and applies on the fd.
|
254
|
+
absl::Status ApplySocketMutatorInOptions(grpc_fd_usage usage,
|
255
|
+
const PosixTcpOptions& options);
|
256
|
+
|
257
|
+
// Return LocalAddress as EventEngine::ResolvedAddress
|
258
|
+
absl::StatusOr<EventEngine::ResolvedAddress> LocalAddress();
|
259
|
+
|
260
|
+
// Return PeerAddress as EventEngine::ResolvedAddress
|
261
|
+
absl::StatusOr<EventEngine::ResolvedAddress> PeerAddress();
|
262
|
+
|
263
|
+
// Return LocalAddress as string
|
264
|
+
absl::StatusOr<std::string> LocalAddressString();
|
265
|
+
|
266
|
+
// Return PeerAddress as string
|
267
|
+
absl::StatusOr<std::string> PeerAddressString();
|
268
|
+
|
269
|
+
// An enum to keep track of IPv4/IPv6 socket modes.
|
270
|
+
|
271
|
+
// Currently, this information is only used when a socket is first created,
|
272
|
+
// but in the future we may wish to store it alongside the fd. This would let
|
273
|
+
// calls like sendto() know which family to use without asking the kernel
|
274
|
+
// first.
|
275
|
+
enum DSMode {
|
276
|
+
// Uninitialized, or a non-IP socket.
|
277
|
+
DSMODE_NONE,
|
278
|
+
// AF_INET only.
|
279
|
+
DSMODE_IPV4,
|
280
|
+
// AF_INET6 only, because IPV6_V6ONLY could not be cleared.
|
281
|
+
DSMODE_IPV6,
|
282
|
+
// AF_INET6, which also supports ::ffff-mapped IPv4 addresses.
|
283
|
+
DSMODE_DUALSTACK
|
284
|
+
};
|
285
|
+
|
286
|
+
// Tries to set the socket to dualstack. Returns true on success.
|
287
|
+
bool SetSocketDualStack();
|
288
|
+
|
289
|
+
// Returns the underlying file-descriptor.
|
290
|
+
int Fd() const { return fd_; }
|
291
|
+
|
292
|
+
// Static methods
|
293
|
+
|
294
|
+
// Configure default values for tcp user timeout to be used by client
|
295
|
+
// and server side sockets.
|
296
|
+
static void ConfigureDefaultTcpUserTimeout(bool enable, int timeout,
|
297
|
+
bool is_client);
|
298
|
+
|
299
|
+
// Return true if SO_REUSEPORT is supported
|
300
|
+
static bool IsSocketReusePortSupported();
|
301
|
+
|
302
|
+
// Returns true if this system can create AF_INET6 sockets bound to ::1.
|
303
|
+
// The value is probed once, and cached for the life of the process.
|
304
|
+
|
305
|
+
// This is more restrictive than checking for socket(AF_INET6) to succeed,
|
306
|
+
// because Linux with "net.ipv6.conf.all.disable_ipv6 = 1" is able to create
|
307
|
+
// and bind IPv6 sockets, but cannot connect to a getsockname() of [::]:port
|
308
|
+
// without a valid loopback interface. Rather than expose this half-broken
|
309
|
+
// state to library users, we turn off IPv6 sockets.
|
310
|
+
static bool IsIpv6LoopbackAvailable();
|
311
|
+
|
312
|
+
// Creates a new socket for connecting to (or listening on) an address.
|
313
|
+
|
314
|
+
// If addr is AF_INET6, this creates an IPv6 socket first. If that fails,
|
315
|
+
// and addr is within ::ffff:0.0.0.0/96, then it automatically falls back to
|
316
|
+
// an IPv4 socket.
|
317
|
+
|
318
|
+
// If addr is AF_INET, AF_UNIX, or anything else, then this is similar to
|
319
|
+
// calling socket() directly.
|
320
|
+
|
321
|
+
// Returns an PosixSocketWrapper on success, otherwise returns a not-OK
|
322
|
+
// absl::Status
|
323
|
+
|
324
|
+
// The dsmode output indicates which address family was actually created.
|
325
|
+
static absl::StatusOr<PosixSocketWrapper> CreateDualStackSocket(
|
326
|
+
std::function<int(int /*domain*/, int /*type*/, int /*protocol*/)>
|
327
|
+
socket_factory,
|
328
|
+
const experimental::EventEngine::ResolvedAddress& addr, int type,
|
329
|
+
int protocol, DSMode& dsmode);
|
330
|
+
|
331
|
+
struct PosixSocketCreateResult;
|
332
|
+
// Return a PosixSocketCreateResult which manages a configured, unbound,
|
333
|
+
// unconnected TCP client fd.
|
334
|
+
// options: may contain custom tcp settings for the fd.
|
335
|
+
// target_addr: the destination address.
|
336
|
+
//
|
337
|
+
// Returns: Not-OK status on error. Otherwise it returns a
|
338
|
+
// PosixSocketWrapper::PosixSocketCreateResult type which includes a sock
|
339
|
+
// of type PosixSocketWrapper and a mapped_target_addr which is
|
340
|
+
// target_addr mapped to an address appropriate to the type of socket FD
|
341
|
+
// created. For example, if target_addr is IPv4 and dual stack sockets are
|
342
|
+
// available, mapped_target_addr will be an IPv4-mapped IPv6 address.
|
343
|
+
//
|
344
|
+
static absl::StatusOr<PosixSocketCreateResult>
|
345
|
+
CreateAndPrepareTcpClientSocket(
|
346
|
+
const PosixTcpOptions& options,
|
347
|
+
const EventEngine::ResolvedAddress& target_addr);
|
348
|
+
|
349
|
+
private:
|
350
|
+
int fd_;
|
351
|
+
};
|
352
|
+
|
353
|
+
struct PosixSocketWrapper::PosixSocketCreateResult {
|
354
|
+
PosixSocketWrapper sock;
|
355
|
+
EventEngine::ResolvedAddress mapped_target_addr;
|
356
|
+
};
|
357
|
+
|
358
|
+
} // namespace posix_engine
|
359
|
+
} // namespace grpc_event_engine
|
360
|
+
|
361
|
+
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TCP_SOCKET_UTILS_H
|
@@ -78,12 +78,12 @@ class TimerList {
|
|
78
78
|
TimerList& operator=(const TimerList&) = delete;
|
79
79
|
|
80
80
|
/* Initialize *timer. When expired or canceled, closure will be called with
|
81
|
-
error set to indicate if it expired (
|
82
|
-
(
|
83
|
-
application code should check the error to determine how it was invoked.
|
84
|
-
application callback is also responsible for maintaining information
|
85
|
-
when to free up any user-level state. Behavior is undefined for a
|
86
|
-
grpc_core::Timestamp::InfFuture(). */
|
81
|
+
error set to indicate if it expired (absl::OkStatus()) or was canceled
|
82
|
+
(absl::CancelledError()). *closure is guaranteed to be called exactly once,
|
83
|
+
and application code should check the error to determine how it was invoked.
|
84
|
+
The application callback is also responsible for maintaining information
|
85
|
+
about when to free up any user-level state. Behavior is undefined for a
|
86
|
+
deadline of grpc_core::Timestamp::InfFuture(). */
|
87
87
|
void TimerInit(Timer* timer, grpc_core::Timestamp deadline,
|
88
88
|
experimental::EventEngine::Closure* closure);
|
89
89
|
|
@@ -103,8 +103,9 @@ class TimerList {
|
|
103
103
|
|
104
104
|
In all of these cases, the cancellation is still considered successful.
|
105
105
|
They are essentially distinguished in that the timer_cb will be run
|
106
|
-
exactly once from either the cancellation (with error
|
107
|
-
or from the activation (with error
|
106
|
+
exactly once from either the cancellation (with error
|
107
|
+
absl::CancelledError()) or from the activation (with error
|
108
|
+
absl::OkStatus()).
|
108
109
|
|
109
110
|
Note carefully that the callback function MAY occur in the same callstack
|
110
111
|
as grpc_timer_cancel. It's expected that most timers will be cancelled
|