grpc 1.50.0.pre1 → 1.51.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +131 -42
- data/include/grpc/event_engine/event_engine.h +10 -3
- data/include/grpc/event_engine/slice_buffer.h +17 -0
- data/include/grpc/grpc.h +0 -10
- data/include/grpc/impl/codegen/grpc_types.h +1 -5
- data/include/grpc/impl/codegen/port_platform.h +0 -3
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
- data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
- data/src/core/ext/filters/client_channel/client_channel.h +3 -4
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
- data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
- data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
- data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
- data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
- data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
- data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
- data/src/core/ext/filters/client_channel/subchannel.h +2 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
- data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
- data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
- data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
- data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
- data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
- data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
- data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
- data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
- data/src/core/ext/xds/certificate_provider_store.cc +4 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
- data/src/core/ext/xds/xds_api.cc +15 -68
- data/src/core/ext/xds/xds_api.h +3 -7
- data/src/core/ext/xds/xds_bootstrap.h +0 -1
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
- data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
- data/src/core/ext/xds/xds_client.cc +122 -90
- data/src/core/ext/xds/xds_client.h +7 -2
- data/src/core/ext/xds/xds_client_grpc.cc +5 -24
- data/src/core/ext/xds/xds_cluster.cc +291 -183
- data/src/core/ext/xds/xds_cluster.h +11 -15
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
- data/src/core/ext/xds/xds_common_types.cc +208 -141
- data/src/core/ext/xds/xds_common_types.h +19 -13
- data/src/core/ext/xds/xds_endpoint.cc +214 -129
- data/src/core/ext/xds/xds_endpoint.h +4 -7
- data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
- data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
- data/src/core/ext/xds/xds_http_filters.cc +60 -73
- data/src/core/ext/xds/xds_http_filters.h +67 -19
- data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
- data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
- data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
- data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
- data/src/core/ext/xds/xds_listener.cc +459 -417
- data/src/core/ext/xds/xds_listener.h +43 -47
- data/src/core/ext/xds/xds_resource_type.h +3 -11
- data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
- data/src/core/ext/xds/xds_route_config.cc +94 -80
- data/src/core/ext/xds/xds_route_config.h +10 -10
- data/src/core/ext/xds/xds_routing.cc +2 -1
- data/src/core/ext/xds/xds_routing.h +2 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
- data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
- data/src/core/lib/address_utils/parse_address.cc +11 -10
- data/src/core/lib/channel/channel_args.h +16 -1
- data/src/core/lib/channel/channel_stack.cc +23 -20
- data/src/core/lib/channel/channel_stack.h +17 -4
- data/src/core/lib/channel/channel_stack_builder.cc +4 -7
- data/src/core/lib/channel/channel_stack_builder.h +14 -6
- data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
- data/src/core/lib/channel/channel_trace.cc +4 -5
- data/src/core/lib/channel/channelz.cc +1 -1
- data/src/core/lib/channel/connected_channel.cc +695 -35
- data/src/core/lib/channel/connected_channel.h +0 -4
- data/src/core/lib/channel/promise_based_filter.cc +1004 -140
- data/src/core/lib/channel/promise_based_filter.h +364 -87
- data/src/core/lib/compression/message_compress.cc +5 -5
- data/src/core/lib/debug/event_log.cc +88 -0
- data/src/core/lib/debug/event_log.h +81 -0
- data/src/core/lib/debug/histogram_view.cc +69 -0
- data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
- data/src/core/lib/debug/stats.cc +22 -119
- data/src/core/lib/debug/stats.h +29 -35
- data/src/core/lib/debug/stats_data.cc +224 -73
- data/src/core/lib/debug/stats_data.h +263 -122
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +38 -15
- data/src/core/lib/event_engine/default_event_engine.h +15 -3
- data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
- data/src/core/lib/event_engine/memory_allocator.cc +1 -1
- data/src/core/lib/event_engine/poller.h +10 -4
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
- data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
- data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
- data/src/core/lib/event_engine/slice.cc +7 -6
- data/src/core/lib/event_engine/slice_buffer.cc +2 -2
- data/src/core/lib/event_engine/thread_pool.cc +106 -25
- data/src/core/lib/event_engine/thread_pool.h +32 -9
- data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
- data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
- data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
- data/src/core/lib/experiments/config.cc +1 -1
- data/src/core/lib/experiments/experiments.cc +13 -2
- data/src/core/lib/experiments/experiments.h +8 -1
- data/src/core/lib/gpr/cpu_linux.cc +6 -2
- data/src/core/lib/gpr/log_linux.cc +3 -4
- data/src/core/lib/gpr/string.h +1 -1
- data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
- data/src/core/lib/gprpp/load_file.cc +75 -0
- data/src/core/lib/gprpp/load_file.h +33 -0
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/stat_posix.cc +5 -4
- data/src/core/lib/gprpp/stat_windows.cc +3 -2
- data/src/core/lib/gprpp/status_helper.h +1 -3
- data/src/core/lib/gprpp/strerror.cc +41 -0
- data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
- data/src/core/lib/gprpp/thd_windows.cc +1 -2
- data/src/core/lib/gprpp/time.cc +3 -4
- data/src/core/lib/gprpp/time.h +13 -2
- data/src/core/lib/gprpp/validation_errors.h +18 -1
- data/src/core/lib/http/httpcli.cc +40 -44
- data/src/core/lib/http/httpcli.h +6 -5
- data/src/core/lib/http/httpcli_security_connector.cc +4 -6
- data/src/core/lib/http/parser.cc +54 -65
- data/src/core/lib/iomgr/buffer_list.cc +105 -116
- data/src/core/lib/iomgr/buffer_list.h +60 -44
- data/src/core/lib/iomgr/call_combiner.cc +11 -10
- data/src/core/lib/iomgr/call_combiner.h +3 -4
- data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
- data/src/core/lib/iomgr/closure.h +49 -5
- data/src/core/lib/iomgr/combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
- data/src/core/lib/iomgr/error.cc +27 -42
- data/src/core/lib/iomgr/error.h +22 -152
- data/src/core/lib/iomgr/ev_apple.cc +4 -4
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
- data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
- data/src/core/lib/iomgr/exec_ctx.cc +3 -4
- data/src/core/lib/iomgr/exec_ctx.h +2 -3
- data/src/core/lib/iomgr/executor.cc +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
- data/src/core/lib/iomgr/iocp_windows.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
- data/src/core/lib/iomgr/load_file.cc +5 -9
- data/src/core/lib/iomgr/lockfree_event.cc +10 -10
- data/src/core/lib/iomgr/pollset_windows.cc +4 -4
- data/src/core/lib/iomgr/python_util.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +8 -3
- data/src/core/lib/iomgr/resolve_address.h +3 -4
- data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
- data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
- data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
- data/src/core/lib/iomgr/socket_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
- data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
- data/src/core/lib/iomgr/tcp_posix.cc +92 -108
- data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
- data/src/core/lib/iomgr/tcp_windows.cc +27 -34
- data/src/core/lib/iomgr/timer.h +8 -8
- data/src/core/lib/iomgr/timer_generic.cc +9 -15
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +7 -2
- data/src/core/lib/json/json_object_loader.h +22 -0
- data/src/core/lib/json/json_util.cc +5 -5
- data/src/core/lib/json/json_util.h +4 -4
- data/src/core/lib/load_balancing/lb_policy.cc +1 -1
- data/src/core/lib/load_balancing/lb_policy.h +4 -0
- data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
- data/src/core/lib/matchers/matchers.cc +3 -4
- data/src/core/lib/promise/activity.cc +16 -2
- data/src/core/lib/promise/activity.h +38 -15
- data/src/core/lib/promise/arena_promise.h +80 -51
- data/src/core/lib/promise/context.h +13 -6
- data/src/core/lib/promise/detail/basic_seq.h +9 -28
- data/src/core/lib/promise/detail/promise_factory.h +58 -10
- data/src/core/lib/promise/detail/status.h +28 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
- data/src/core/lib/promise/for_each.h +129 -0
- data/src/core/lib/promise/loop.h +7 -5
- data/src/core/lib/promise/map_pipe.h +87 -0
- data/src/core/lib/promise/pipe.cc +19 -0
- data/src/core/lib/promise/pipe.h +505 -0
- data/src/core/lib/promise/poll.h +13 -0
- data/src/core/lib/promise/seq.h +3 -5
- data/src/core/lib/promise/sleep.cc +5 -4
- data/src/core/lib/promise/sleep.h +1 -2
- data/src/core/lib/promise/try_concurrently.h +341 -0
- data/src/core/lib/promise/try_seq.h +10 -13
- data/src/core/lib/resolver/server_address.cc +1 -0
- data/src/core/lib/resolver/server_address.h +1 -3
- data/src/core/lib/resource_quota/api.cc +0 -1
- data/src/core/lib/resource_quota/arena.cc +19 -0
- data/src/core/lib/resource_quota/arena.h +89 -0
- data/src/core/lib/resource_quota/memory_quota.cc +1 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
- data/src/core/lib/security/authorization/matchers.cc +25 -22
- data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
- data/src/core/lib/security/context/security_context.h +10 -0
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
- data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
- data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
- data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
- data/src/core/lib/security/transport/security_handshaker.cc +53 -53
- data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
- data/src/core/lib/security/transport/tsi_error.cc +6 -3
- data/src/core/lib/security/util/json_util.cc +4 -5
- data/src/core/lib/service_config/service_config.h +1 -1
- data/src/core/lib/service_config/service_config_impl.cc +111 -158
- data/src/core/lib/service_config/service_config_impl.h +14 -17
- data/src/core/lib/service_config/service_config_parser.cc +14 -31
- data/src/core/lib/service_config/service_config_parser.h +14 -10
- data/src/core/lib/slice/b64.cc +2 -2
- data/src/core/lib/slice/slice.cc +7 -1
- data/src/core/lib/slice/slice.h +19 -6
- data/src/core/lib/slice/slice_buffer.cc +13 -14
- data/src/core/lib/slice/slice_internal.h +13 -21
- data/src/core/lib/slice/slice_refcount.h +34 -19
- data/src/core/lib/surface/byte_buffer.cc +3 -4
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +1366 -239
- data/src/core/lib/surface/call.h +44 -0
- data/src/core/lib/surface/call_details.cc +3 -3
- data/src/core/lib/surface/call_trace.cc +113 -0
- data/src/core/lib/surface/call_trace.h +30 -0
- data/src/core/lib/surface/channel.cc +44 -49
- data/src/core/lib/surface/channel.h +9 -1
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/channel_stack_type.cc +4 -0
- data/src/core/lib/surface/channel_stack_type.h +2 -0
- data/src/core/lib/surface/completion_queue.cc +38 -52
- data/src/core/lib/surface/init.cc +8 -39
- data/src/core/lib/surface/init_internally.h +8 -0
- data/src/core/lib/surface/lame_client.cc +10 -8
- data/src/core/lib/surface/server.cc +48 -70
- data/src/core/lib/surface/server.h +3 -4
- data/src/core/lib/surface/validate_metadata.cc +11 -12
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/connectivity_state.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +34 -28
- data/src/core/lib/transport/error_utils.h +3 -3
- data/src/core/lib/transport/handshaker.cc +14 -14
- data/src/core/lib/transport/handshaker.h +1 -1
- data/src/core/lib/transport/handshaker_factory.h +26 -0
- data/src/core/lib/transport/handshaker_registry.cc +8 -2
- data/src/core/lib/transport/handshaker_registry.h +3 -4
- data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
- data/src/core/lib/transport/metadata_batch.h +17 -1
- data/src/core/lib/transport/parsed_metadata.cc +2 -6
- data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
- data/src/core/lib/transport/transport.cc +63 -17
- data/src/core/lib/transport/transport.h +64 -68
- data/src/core/lib/transport/transport_impl.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +7 -6
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
- data/src/core/tsi/fake_transport_security.cc +3 -3
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_spec.rb +0 -43
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +21 -12
- data/third_party/zlib/deflate.c +112 -106
- data/third_party/zlib/deflate.h +2 -2
- data/third_party/zlib/gzlib.c +1 -1
- data/third_party/zlib/gzread.c +3 -5
- data/third_party/zlib/gzwrite.c +1 -1
- data/third_party/zlib/infback.c +10 -7
- data/third_party/zlib/inflate.c +5 -2
- data/third_party/zlib/inftrees.c +2 -2
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +61 -62
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +10 -10
- data/third_party/zlib/zutil.c +9 -7
- data/third_party/zlib/zutil.h +1 -0
- metadata +57 -20
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
- data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/tls.h +0 -156
- data/src/core/lib/promise/call_push_pull.h +0 -148
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_buffer_api.cc +0 -35
- data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -0,0 +1,97 @@
|
|
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_EV_POLL_POSIX_H
|
16
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EV_POLL_POSIX_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include <atomic>
|
21
|
+
#include <memory>
|
22
|
+
#include <string>
|
23
|
+
|
24
|
+
#include "absl/base/thread_annotations.h"
|
25
|
+
#include "absl/functional/function_ref.h"
|
26
|
+
#include "absl/strings/string_view.h"
|
27
|
+
|
28
|
+
#include <grpc/event_engine/event_engine.h>
|
29
|
+
|
30
|
+
#include "src/core/lib/event_engine/poller.h"
|
31
|
+
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
|
32
|
+
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
|
33
|
+
#include "src/core/lib/gprpp/sync.h"
|
34
|
+
|
35
|
+
namespace grpc_event_engine {
|
36
|
+
namespace posix_engine {
|
37
|
+
|
38
|
+
class PollEventHandle;
|
39
|
+
|
40
|
+
// Definition of poll based poller.
|
41
|
+
class PollPoller : public PosixEventPoller {
|
42
|
+
public:
|
43
|
+
explicit PollPoller(Scheduler* scheduler);
|
44
|
+
PollPoller(Scheduler* scheduler, bool use_phony_poll);
|
45
|
+
EventHandle* CreateHandle(int fd, absl::string_view name,
|
46
|
+
bool track_err) override;
|
47
|
+
Poller::WorkResult Work(
|
48
|
+
grpc_event_engine::experimental::EventEngine::Duration timeout,
|
49
|
+
absl::FunctionRef<void()> schedule_poll_again) override;
|
50
|
+
std::string Name() override { return "poll"; }
|
51
|
+
void Kick() override;
|
52
|
+
Scheduler* GetScheduler() { return scheduler_; }
|
53
|
+
void Shutdown() override;
|
54
|
+
bool CanTrackErrors() const override { return false; }
|
55
|
+
~PollPoller() override;
|
56
|
+
|
57
|
+
private:
|
58
|
+
void Ref() { ref_count_.fetch_add(1, std::memory_order_relaxed); }
|
59
|
+
void Unref() {
|
60
|
+
if (ref_count_.fetch_sub(1, std::memory_order_acq_rel) == 1) {
|
61
|
+
delete this;
|
62
|
+
}
|
63
|
+
}
|
64
|
+
void KickExternal(bool ext);
|
65
|
+
void PollerHandlesListAddHandle(PollEventHandle* handle)
|
66
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
67
|
+
void PollerHandlesListRemoveHandle(PollEventHandle* handle)
|
68
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
69
|
+
friend class PollEventHandle;
|
70
|
+
class HandlesList {
|
71
|
+
public:
|
72
|
+
explicit HandlesList(PollEventHandle* handle) : handle(handle) {}
|
73
|
+
PollEventHandle* handle;
|
74
|
+
PollEventHandle* next = nullptr;
|
75
|
+
PollEventHandle* prev = nullptr;
|
76
|
+
};
|
77
|
+
grpc_core::Mutex mu_;
|
78
|
+
Scheduler* scheduler_;
|
79
|
+
std::atomic<int> ref_count_{1};
|
80
|
+
bool use_phony_poll_;
|
81
|
+
bool was_kicked_ ABSL_GUARDED_BY(mu_);
|
82
|
+
bool was_kicked_ext_ ABSL_GUARDED_BY(mu_);
|
83
|
+
int num_poll_handles_ ABSL_GUARDED_BY(mu_);
|
84
|
+
PollEventHandle* poll_handles_list_head_ ABSL_GUARDED_BY(mu_) = nullptr;
|
85
|
+
std::unique_ptr<WakeupFd> wakeup_fd_;
|
86
|
+
};
|
87
|
+
|
88
|
+
// Return an instance of a poll based poller tied to the specified scheduler.
|
89
|
+
// It use_phony_poll is true, it implies that the poller is declared
|
90
|
+
// non-polling and any attempt to schedule a blocking poll will result in a
|
91
|
+
// crash failure.
|
92
|
+
PollPoller* MakePollPoller(Scheduler* scheduler, bool use_phony_poll);
|
93
|
+
|
94
|
+
} // namespace posix_engine
|
95
|
+
} // namespace grpc_event_engine
|
96
|
+
|
97
|
+
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EV_POLL_POSIX_H
|
@@ -0,0 +1,111 @@
|
|
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_EVENT_POLLER_H
|
16
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EVENT_POLLER_H
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include <string>
|
20
|
+
|
21
|
+
#include "absl/functional/any_invocable.h"
|
22
|
+
#include "absl/status/status.h"
|
23
|
+
#include "absl/strings/string_view.h"
|
24
|
+
|
25
|
+
#include <grpc/event_engine/event_engine.h>
|
26
|
+
|
27
|
+
#include "src/core/lib/event_engine/poller.h"
|
28
|
+
#include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
|
29
|
+
|
30
|
+
namespace grpc_event_engine {
|
31
|
+
namespace posix_engine {
|
32
|
+
|
33
|
+
class Scheduler {
|
34
|
+
public:
|
35
|
+
virtual void Run(experimental::EventEngine::Closure* closure) = 0;
|
36
|
+
virtual void Run(absl::AnyInvocable<void()>) = 0;
|
37
|
+
virtual ~Scheduler() = default;
|
38
|
+
};
|
39
|
+
|
40
|
+
class PosixEventPoller;
|
41
|
+
|
42
|
+
class EventHandle {
|
43
|
+
public:
|
44
|
+
virtual int WrappedFd() = 0;
|
45
|
+
// Delete the handle and optionally close the underlying file descriptor if
|
46
|
+
// release_fd != nullptr. The on_done closure is scheduled to be invoked
|
47
|
+
// after the operation is complete. After this operation, NotifyXXX and SetXXX
|
48
|
+
// operations cannot be performed on the handle. In general, this method
|
49
|
+
// should only be called after ShutdownHandle and after all existing NotifyXXX
|
50
|
+
// closures have run and there is no waiting NotifyXXX closure.
|
51
|
+
virtual void OrphanHandle(PosixEngineClosure* on_done, int* release_fd,
|
52
|
+
absl::string_view reason) = 0;
|
53
|
+
// Shutdown a handle. If there is an attempt to call NotifyXXX operations
|
54
|
+
// after Shutdown handle, those closures will be run immediately with the
|
55
|
+
// absl::Status provided here being passed to the callbacks enclosed within
|
56
|
+
// the PosixEngineClosure object.
|
57
|
+
virtual void ShutdownHandle(absl::Status why) = 0;
|
58
|
+
// Schedule on_read to be invoked when the underlying file descriptor
|
59
|
+
// becomes readable. When the on_read closure is run, it may check
|
60
|
+
// if the handle is shutdown using the IsHandleShutdown method and take
|
61
|
+
// appropriate actions (for instance it should not try to invoke another
|
62
|
+
// recursive NotifyOnRead if the handle is shutdown).
|
63
|
+
virtual void NotifyOnRead(PosixEngineClosure* on_read) = 0;
|
64
|
+
// Schedule on_write to be invoked when the underlying file descriptor
|
65
|
+
// becomes writable. When the on_write closure is run, it may check
|
66
|
+
// if the handle is shutdown using the IsHandleShutdown method and take
|
67
|
+
// appropriate actions (for instance it should not try to invoke another
|
68
|
+
// recursive NotifyOnWrite if the handle is shutdown).
|
69
|
+
virtual void NotifyOnWrite(PosixEngineClosure* on_write) = 0;
|
70
|
+
// Schedule on_error to be invoked when the underlying file descriptor
|
71
|
+
// encounters errors. When the on_error closure is run, it may check
|
72
|
+
// if the handle is shutdown using the IsHandleShutdown method and take
|
73
|
+
// appropriate actions (for instance it should not try to invoke another
|
74
|
+
// recursive NotifyOnError if the handle is shutdown).
|
75
|
+
virtual void NotifyOnError(PosixEngineClosure* on_error) = 0;
|
76
|
+
// Force set a readable event on the underlying file descriptor.
|
77
|
+
virtual void SetReadable() = 0;
|
78
|
+
// Force set a writable event on the underlying file descriptor.
|
79
|
+
virtual void SetWritable() = 0;
|
80
|
+
// Force set a error event on the underlying file descriptor.
|
81
|
+
virtual void SetHasError() = 0;
|
82
|
+
// Returns true if the handle has been shutdown.
|
83
|
+
virtual bool IsHandleShutdown() = 0;
|
84
|
+
// Returns the poller which was used to create this handle.
|
85
|
+
virtual PosixEventPoller* Poller() = 0;
|
86
|
+
virtual ~EventHandle() = default;
|
87
|
+
};
|
88
|
+
|
89
|
+
class PosixEventPoller : public grpc_event_engine::experimental::Poller {
|
90
|
+
public:
|
91
|
+
// Return an opaque handle to perform actions on the provided file descriptor.
|
92
|
+
virtual EventHandle* CreateHandle(int fd, absl::string_view name,
|
93
|
+
bool track_err) = 0;
|
94
|
+
virtual bool CanTrackErrors() const = 0;
|
95
|
+
virtual std::string Name() = 0;
|
96
|
+
// Shuts down and deletes the poller. It is legal to call this function
|
97
|
+
// only when no other poller method is in progress. For instance, it is
|
98
|
+
// not safe to call this method, while a thread is blocked on Work(...).
|
99
|
+
// A graceful way to terminate the poller could be to:
|
100
|
+
// 1. First orphan all created handles.
|
101
|
+
// 2. Send a Kick() to the thread executing Work(...) and wait for the
|
102
|
+
// thread to return.
|
103
|
+
// 3. Call Shutdown() on the poller.
|
104
|
+
virtual void Shutdown() = 0;
|
105
|
+
~PosixEventPoller() override = default;
|
106
|
+
};
|
107
|
+
|
108
|
+
} // namespace posix_engine
|
109
|
+
} // namespace grpc_event_engine
|
110
|
+
|
111
|
+
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EVENT_POLLER_H
|
@@ -0,0 +1,74 @@
|
|
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
|
+
#include <grpc/support/port_platform.h>
|
16
|
+
|
17
|
+
#include "absl/strings/str_split.h"
|
18
|
+
#include "absl/strings/string_view.h"
|
19
|
+
|
20
|
+
#include "src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h"
|
21
|
+
#include "src/core/lib/event_engine/posix_engine/ev_poll_posix.h"
|
22
|
+
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
|
23
|
+
#include "src/core/lib/gprpp/global_config.h"
|
24
|
+
#include "src/core/lib/gprpp/memory.h"
|
25
|
+
#include "src/core/lib/iomgr/port.h"
|
26
|
+
|
27
|
+
#ifdef GRPC_POSIX_SOCKET_TCP
|
28
|
+
GPR_GLOBAL_CONFIG_DECLARE_STRING(grpc_poll_strategy);
|
29
|
+
#endif
|
30
|
+
|
31
|
+
namespace grpc_event_engine {
|
32
|
+
namespace posix_engine {
|
33
|
+
|
34
|
+
#ifdef GRPC_POSIX_SOCKET_TCP
|
35
|
+
namespace {
|
36
|
+
|
37
|
+
bool PollStrategyMatches(absl::string_view strategy, absl::string_view want) {
|
38
|
+
return strategy == "all" || strategy == want;
|
39
|
+
}
|
40
|
+
|
41
|
+
} // namespace
|
42
|
+
|
43
|
+
PosixEventPoller* MakeDefaultPoller(Scheduler* scheduler) {
|
44
|
+
static const char* poll_strategy =
|
45
|
+
GPR_GLOBAL_CONFIG_GET(grpc_poll_strategy).release();
|
46
|
+
PosixEventPoller* poller = nullptr;
|
47
|
+
auto strings = absl::StrSplit(poll_strategy, ',');
|
48
|
+
for (auto it = strings.begin(); it != strings.end() && poller == nullptr;
|
49
|
+
it++) {
|
50
|
+
if (PollStrategyMatches(*it, "epoll1")) {
|
51
|
+
poller = MakeEpoll1Poller(scheduler);
|
52
|
+
}
|
53
|
+
if (poller == nullptr && PollStrategyMatches(*it, "poll")) {
|
54
|
+
// If epoll1 fails and if poll strategy matches "poll", use Poll poller
|
55
|
+
poller = MakePollPoller(scheduler, /*use_phony_poll=*/false);
|
56
|
+
} else if (poller == nullptr && PollStrategyMatches(*it, "none")) {
|
57
|
+
// If epoll1 fails and if poll strategy matches "none", use phony poll
|
58
|
+
// poller.
|
59
|
+
poller = MakePollPoller(scheduler, /*use_phony_poll=*/true);
|
60
|
+
}
|
61
|
+
}
|
62
|
+
return poller;
|
63
|
+
}
|
64
|
+
|
65
|
+
#else // GRPC_POSIX_SOCKET_TCP
|
66
|
+
|
67
|
+
PosixEventPoller* MakeDefaultPoller(Scheduler* /*scheduler*/) {
|
68
|
+
return nullptr;
|
69
|
+
}
|
70
|
+
|
71
|
+
#endif // GRPC_POSIX_SOCKET_TCP
|
72
|
+
|
73
|
+
} // namespace posix_engine
|
74
|
+
} // namespace grpc_event_engine
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright 2022 gRPC
|
1
|
+
// Copyright 2022 The gRPC Authors
|
2
2
|
//
|
3
3
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
// you may not use this file except in compliance with the License.
|
@@ -12,25 +12,22 @@
|
|
12
12
|
// See the License for the specific language governing permissions and
|
13
13
|
// limitations under the License.
|
14
14
|
|
15
|
-
#
|
16
|
-
|
17
|
-
#include "src/core/lib/event_engine/executor/threaded_executor.h"
|
15
|
+
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EVENT_POLLER_POSIX_DEFAULT_H
|
16
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EVENT_POLLER_POSIX_DEFAULT_H
|
18
17
|
|
19
|
-
#include <
|
18
|
+
#include <grpc/support/port_platform.h>
|
20
19
|
|
21
20
|
namespace grpc_event_engine {
|
22
|
-
namespace
|
21
|
+
namespace posix_engine {
|
23
22
|
|
24
|
-
|
25
|
-
|
23
|
+
class PosixEventPoller;
|
24
|
+
class Scheduler;
|
26
25
|
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
// Return an instance of an event poller which is tied to the specified
|
27
|
+
// scheduler.
|
28
|
+
PosixEventPoller* MakeDefaultPoller(Scheduler* scheduler);
|
30
29
|
|
31
|
-
|
32
|
-
thread_pool_.Add(std::move(closure));
|
33
|
-
}
|
34
|
-
|
35
|
-
} // namespace experimental
|
30
|
+
} // namespace posix_engine
|
36
31
|
} // namespace grpc_event_engine
|
32
|
+
|
33
|
+
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EVENT_POLLER_POSIX_DEFAULT_H
|
@@ -0,0 +1,77 @@
|
|
1
|
+
// Copyright 2022 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
|
+
#include <grpc/support/port_platform.h>
|
16
|
+
|
17
|
+
#include "src/core/lib/event_engine/posix_engine/internal_errqueue.h"
|
18
|
+
|
19
|
+
#include <string>
|
20
|
+
|
21
|
+
#include <grpc/support/log.h>
|
22
|
+
|
23
|
+
#include "src/core/lib/iomgr/port.h"
|
24
|
+
|
25
|
+
#ifdef GRPC_POSIX_SOCKET_TCP
|
26
|
+
|
27
|
+
#include <errno.h>
|
28
|
+
#include <netinet/in.h>
|
29
|
+
#include <stdlib.h>
|
30
|
+
#include <string.h>
|
31
|
+
#include <sys/utsname.h>
|
32
|
+
|
33
|
+
#include <cstddef>
|
34
|
+
|
35
|
+
#include "src/core/lib/gprpp/strerror.h"
|
36
|
+
|
37
|
+
namespace grpc_event_engine {
|
38
|
+
namespace posix_engine {
|
39
|
+
|
40
|
+
#ifdef GRPC_LINUX_ERRQUEUE
|
41
|
+
int GetSocketTcpInfo(struct tcp_info* info, int fd) {
|
42
|
+
memset(info, 0, sizeof(*info));
|
43
|
+
info->length = offsetof(tcp_info, length);
|
44
|
+
return getsockopt(fd, IPPROTO_TCP, TCP_INFO, info, &(info->length));
|
45
|
+
}
|
46
|
+
#endif
|
47
|
+
|
48
|
+
bool KernelSupportsErrqueue() {
|
49
|
+
static const bool errqueue_supported = []() {
|
50
|
+
#ifdef GRPC_LINUX_ERRQUEUE
|
51
|
+
// Both-compile time and run-time linux kernel versions should be at
|
52
|
+
// least 4.0.0
|
53
|
+
struct utsname buffer;
|
54
|
+
if (uname(&buffer) != 0) {
|
55
|
+
gpr_log(GPR_ERROR, "uname: %s", grpc_core::StrError(errno).c_str());
|
56
|
+
return false;
|
57
|
+
}
|
58
|
+
char* release = buffer.release;
|
59
|
+
if (release == nullptr) {
|
60
|
+
return false;
|
61
|
+
}
|
62
|
+
|
63
|
+
if (strtol(release, nullptr, 10) >= 4) {
|
64
|
+
return true;
|
65
|
+
} else {
|
66
|
+
gpr_log(GPR_DEBUG, "ERRQUEUE support not enabled");
|
67
|
+
}
|
68
|
+
#endif // GRPC_LINUX_ERRQUEUE
|
69
|
+
return false;
|
70
|
+
}();
|
71
|
+
return errqueue_supported;
|
72
|
+
}
|
73
|
+
|
74
|
+
} // namespace posix_engine
|
75
|
+
} // namespace grpc_event_engine
|
76
|
+
|
77
|
+
#endif // GRPC_POSIX_SOCKET_TCP
|
@@ -0,0 +1,179 @@
|
|
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_INTERNAL_ERRQUEUE_H
|
16
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_INTERNAL_ERRQUEUE_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include <stdint.h>
|
21
|
+
|
22
|
+
#include "src/core/lib/iomgr/port.h"
|
23
|
+
|
24
|
+
#ifdef GRPC_POSIX_SOCKET_TCP
|
25
|
+
|
26
|
+
#include <time.h>
|
27
|
+
|
28
|
+
#ifdef GRPC_LINUX_ERRQUEUE
|
29
|
+
#include <linux/errqueue.h> // IWYU pragma: keep
|
30
|
+
#include <sys/socket.h>
|
31
|
+
#endif /* GRPC_LINUX_ERRQUEUE */
|
32
|
+
|
33
|
+
namespace grpc_event_engine {
|
34
|
+
namespace posix_engine {
|
35
|
+
|
36
|
+
#ifdef GRPC_LINUX_ERRQUEUE
|
37
|
+
|
38
|
+
// Redefining scm_timestamping in the same way that <linux/errqueue.h> defines
|
39
|
+
// it, so that code compiles on systems that don't have it.
|
40
|
+
struct scm_timestamping {
|
41
|
+
struct timespec ts[3];
|
42
|
+
};
|
43
|
+
// Also redefine timestamp types
|
44
|
+
// The timestamp type for when the driver passed skb to NIC, or HW.
|
45
|
+
constexpr int SCM_TSTAMP_SND = 0;
|
46
|
+
// The timestamp type for when data entered the packet scheduler.
|
47
|
+
constexpr int SCM_TSTAMP_SCHED = 1;
|
48
|
+
// The timestamp type for when data acknowledged by peer.
|
49
|
+
constexpr int SCM_TSTAMP_ACK = 2;
|
50
|
+
|
51
|
+
// Control message type containing OPT_STATS
|
52
|
+
#ifndef SCM_TIMESTAMPING_OPT_STATS
|
53
|
+
#define SCM_TIMESTAMPING_OPT_STATS 54
|
54
|
+
#endif
|
55
|
+
|
56
|
+
// Redefine required constants from <linux/net_tstamp.h>
|
57
|
+
constexpr uint32_t SOF_TIMESTAMPING_TX_SOFTWARE = 1u << 1;
|
58
|
+
constexpr uint32_t SOF_TIMESTAMPING_SOFTWARE = 1u << 4;
|
59
|
+
constexpr uint32_t SOF_TIMESTAMPING_OPT_ID = 1u << 7;
|
60
|
+
constexpr uint32_t SOF_TIMESTAMPING_TX_SCHED = 1u << 8;
|
61
|
+
constexpr uint32_t SOF_TIMESTAMPING_TX_ACK = 1u << 9;
|
62
|
+
constexpr uint32_t SOF_TIMESTAMPING_OPT_TSONLY = 1u << 11;
|
63
|
+
constexpr uint32_t SOF_TIMESTAMPING_OPT_STATS = 1u << 12;
|
64
|
+
|
65
|
+
constexpr uint32_t kTimestampingSocketOptions =
|
66
|
+
SOF_TIMESTAMPING_SOFTWARE | SOF_TIMESTAMPING_OPT_ID |
|
67
|
+
SOF_TIMESTAMPING_OPT_TSONLY | SOF_TIMESTAMPING_OPT_STATS;
|
68
|
+
constexpr uint32_t kTimestampingRecordingOptions =
|
69
|
+
SOF_TIMESTAMPING_TX_SCHED | SOF_TIMESTAMPING_TX_SOFTWARE |
|
70
|
+
SOF_TIMESTAMPING_TX_ACK;
|
71
|
+
|
72
|
+
// Netlink attribute types used for TCP opt stats.
|
73
|
+
enum TCPOptStats {
|
74
|
+
TCP_NLA_PAD,
|
75
|
+
TCP_NLA_BUSY, /* Time (usec) busy sending data. */
|
76
|
+
TCP_NLA_RWND_LIMITED, /* Time (usec) limited by receive window. */
|
77
|
+
TCP_NLA_SNDBUF_LIMITED, /* Time (usec) limited by send buffer. */
|
78
|
+
TCP_NLA_DATA_SEGS_OUT, /* Data pkts sent including retransmission. */
|
79
|
+
TCP_NLA_TOTAL_RETRANS, /* Data pkts retransmitted. */
|
80
|
+
TCP_NLA_PACING_RATE, /* Pacing rate in Bps. */
|
81
|
+
TCP_NLA_DELIVERY_RATE, /* Delivery rate in Bps. */
|
82
|
+
TCP_NLA_SND_CWND, /* Sending congestion window. */
|
83
|
+
TCP_NLA_REORDERING, /* Reordering metric. */
|
84
|
+
TCP_NLA_MIN_RTT, /* minimum RTT. */
|
85
|
+
TCP_NLA_RECUR_RETRANS, /* Recurring retransmits for the current pkt. */
|
86
|
+
TCP_NLA_DELIVERY_RATE_APP_LMT, /* Delivery rate application limited? */
|
87
|
+
TCP_NLA_SNDQ_SIZE, /* Data (bytes) pending in send queue */
|
88
|
+
TCP_NLA_CA_STATE, /* ca_state of socket */
|
89
|
+
TCP_NLA_SND_SSTHRESH, /* Slow start size threshold */
|
90
|
+
TCP_NLA_DELIVERED, /* Data pkts delivered incl. out-of-order */
|
91
|
+
TCP_NLA_DELIVERED_CE, /* Like above but only ones w/ CE marks */
|
92
|
+
TCP_NLA_BYTES_SENT, /* Data bytes sent including retransmission */
|
93
|
+
TCP_NLA_BYTES_RETRANS, /* Data bytes retransmitted */
|
94
|
+
TCP_NLA_DSACK_DUPS, /* DSACK blocks received */
|
95
|
+
TCP_NLA_REORD_SEEN, /* reordering events seen */
|
96
|
+
TCP_NLA_SRTT, /* smoothed RTT in usecs */
|
97
|
+
};
|
98
|
+
|
99
|
+
/* tcp_info from from linux/tcp.h */
|
100
|
+
struct tcp_info {
|
101
|
+
uint8_t tcpi_state;
|
102
|
+
uint8_t tcpi_ca_state;
|
103
|
+
uint8_t tcpi_retransmits;
|
104
|
+
uint8_t tcpi_probes;
|
105
|
+
uint8_t tcpi_backoff;
|
106
|
+
uint8_t tcpi_options;
|
107
|
+
uint8_t tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
|
108
|
+
uint8_t tcpi_delivery_rate_app_limited : 1;
|
109
|
+
uint32_t tcpi_rto;
|
110
|
+
uint32_t tcpi_ato;
|
111
|
+
uint32_t tcpi_snd_mss;
|
112
|
+
uint32_t tcpi_rcv_mss;
|
113
|
+
uint32_t tcpi_unacked;
|
114
|
+
uint32_t tcpi_sacked;
|
115
|
+
uint32_t tcpi_lost;
|
116
|
+
uint32_t tcpi_retrans;
|
117
|
+
uint32_t tcpi_fackets;
|
118
|
+
/* Times. */
|
119
|
+
uint32_t tcpi_last_data_sent;
|
120
|
+
uint32_t tcpi_last_ack_sent; /* Not remembered, sorry. */
|
121
|
+
uint32_t tcpi_last_data_recv;
|
122
|
+
uint32_t tcpi_last_ack_recv;
|
123
|
+
/* Metrics. */
|
124
|
+
uint32_t tcpi_pmtu;
|
125
|
+
uint32_t tcpi_rcv_ssthresh;
|
126
|
+
uint32_t tcpi_rtt;
|
127
|
+
uint32_t tcpi_rttvar;
|
128
|
+
uint32_t tcpi_snd_ssthresh;
|
129
|
+
uint32_t tcpi_snd_cwnd;
|
130
|
+
uint32_t tcpi_advmss;
|
131
|
+
uint32_t tcpi_reordering;
|
132
|
+
uint32_t tcpi_rcv_rtt;
|
133
|
+
uint32_t tcpi_rcv_space;
|
134
|
+
uint32_t tcpi_total_retrans;
|
135
|
+
uint64_t tcpi_pacing_rate;
|
136
|
+
uint64_t tcpi_max_pacing_rate;
|
137
|
+
uint64_t tcpi_bytes_acked; /* RFC4898 tcpEStatsAppHCThruOctetsAcked */
|
138
|
+
uint64_t tcpi_bytes_received; /* RFC4898 tcpEStatsAppHCThruOctetsReceived */
|
139
|
+
|
140
|
+
uint32_t tcpi_segs_out; /* RFC4898 tcpEStatsPerfSegsOut */
|
141
|
+
uint32_t tcpi_segs_in; /* RFC4898 tcpEStatsPerfSegsIn */
|
142
|
+
uint32_t tcpi_notsent_bytes;
|
143
|
+
uint32_t tcpi_min_rtt;
|
144
|
+
|
145
|
+
uint32_t tcpi_data_segs_in; /* RFC4898 tcpEStatsDataSegsIn */
|
146
|
+
uint32_t tcpi_data_segs_out; /* RFC4898 tcpEStatsDataSegsOut */
|
147
|
+
|
148
|
+
uint64_t tcpi_delivery_rate;
|
149
|
+
uint64_t tcpi_busy_time; /* Time (usec) busy sending data */
|
150
|
+
uint64_t tcpi_rwnd_limited; /* Time (usec) limited by receive window */
|
151
|
+
uint64_t tcpi_sndbuf_limited; /* Time (usec) limited by send buffer */
|
152
|
+
|
153
|
+
uint32_t tcpi_delivered;
|
154
|
+
uint32_t tcpi_delivered_ce;
|
155
|
+
uint64_t tcpi_bytes_sent; /* RFC4898 tcpEStatsPerfHCDataOctetsOut */
|
156
|
+
uint64_t tcpi_bytes_retrans; /* RFC4898 tcpEStatsPerfOctetsRetrans */
|
157
|
+
uint32_t tcpi_dsack_dups; /* RFC4898 tcpEStatsStackDSACKDups */
|
158
|
+
uint32_t tcpi_reord_seen; /* reordering events seen */
|
159
|
+
socklen_t length; /* Length of struct returned by kernel */
|
160
|
+
};
|
161
|
+
|
162
|
+
#ifndef TCP_INFO
|
163
|
+
#define TCP_INFO 11
|
164
|
+
#endif
|
165
|
+
|
166
|
+
int GetSocketTcpInfo(tcp_info* info, int fd);
|
167
|
+
|
168
|
+
#endif /* GRPC_LINUX_ERRQUEUE */
|
169
|
+
|
170
|
+
// Returns true if kernel is capable of supporting errqueue and timestamping.
|
171
|
+
// Currently allowing only linux kernels above 4.0.0
|
172
|
+
bool KernelSupportsErrqueue();
|
173
|
+
|
174
|
+
} // namespace posix_engine
|
175
|
+
} // namespace grpc_event_engine
|
176
|
+
|
177
|
+
#endif /* GRPC_POSIX_SOCKET_TCP */
|
178
|
+
|
179
|
+
#endif /* GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_INTERNAL_ERRQUEUE_H */
|