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,301 @@
|
|
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 "src/core/lib/event_engine/posix_engine/traced_buffer_list.h"
|
18
|
+
|
19
|
+
#include <stddef.h>
|
20
|
+
#include <stdlib.h>
|
21
|
+
#include <string.h>
|
22
|
+
#include <time.h>
|
23
|
+
|
24
|
+
#include <utility>
|
25
|
+
|
26
|
+
#include "absl/functional/any_invocable.h"
|
27
|
+
|
28
|
+
#include <grpc/support/log.h>
|
29
|
+
#include <grpc/support/time.h>
|
30
|
+
|
31
|
+
#include "src/core/lib/gprpp/sync.h"
|
32
|
+
#include "src/core/lib/iomgr/port.h"
|
33
|
+
|
34
|
+
#ifdef GRPC_LINUX_ERRQUEUE
|
35
|
+
#include <linux/errqueue.h> // IWYU pragma: keep
|
36
|
+
#include <linux/netlink.h>
|
37
|
+
#include <sys/socket.h> // IWYU pragma: keep
|
38
|
+
|
39
|
+
namespace grpc_event_engine {
|
40
|
+
namespace posix_engine {
|
41
|
+
|
42
|
+
namespace {
|
43
|
+
// Fills gpr_timespec gts based on values from timespec ts.
|
44
|
+
void FillGprFromTimestamp(gpr_timespec* gts, const struct timespec* ts) {
|
45
|
+
gts->tv_sec = ts->tv_sec;
|
46
|
+
gts->tv_nsec = static_cast<int32_t>(ts->tv_nsec);
|
47
|
+
gts->clock_type = GPR_CLOCK_REALTIME;
|
48
|
+
}
|
49
|
+
|
50
|
+
void DefaultTimestampsCallback(void* /*arg*/, Timestamps* /*ts*/,
|
51
|
+
absl::Status /*shudown_err*/) {
|
52
|
+
gpr_log(GPR_DEBUG, "Timestamps callback has not been registered");
|
53
|
+
}
|
54
|
+
|
55
|
+
// The saved callback function that will be invoked when we get all the
|
56
|
+
// timestamps that we are going to get for a TracedBuffer.
|
57
|
+
absl::AnyInvocable<void(void*, Timestamps*, absl::Status)>
|
58
|
+
g_timestamps_callback =
|
59
|
+
[]() -> absl::AnyInvocable<void(void*, Timestamps*, absl::Status)> {
|
60
|
+
return DefaultTimestampsCallback;
|
61
|
+
}();
|
62
|
+
|
63
|
+
// Used to extract individual opt stats from cmsg, so as to avoid troubles with
|
64
|
+
// unaligned reads.
|
65
|
+
template <typename T>
|
66
|
+
T ReadUnaligned(const void* ptr) {
|
67
|
+
T val;
|
68
|
+
memcpy(&val, ptr, sizeof(val));
|
69
|
+
return val;
|
70
|
+
}
|
71
|
+
|
72
|
+
// Extracts opt stats from the tcp_info struct \a info to \a metrics
|
73
|
+
void ExtractOptStatsFromTcpInfo(ConnectionMetrics* metrics,
|
74
|
+
const tcp_info* info) {
|
75
|
+
if (info == nullptr) {
|
76
|
+
return;
|
77
|
+
}
|
78
|
+
if (info->length > offsetof(tcp_info, tcpi_sndbuf_limited)) {
|
79
|
+
metrics->recurring_retrans = info->tcpi_retransmits;
|
80
|
+
metrics->is_delivery_rate_app_limited =
|
81
|
+
info->tcpi_delivery_rate_app_limited;
|
82
|
+
metrics->congestion_window = info->tcpi_snd_cwnd;
|
83
|
+
metrics->reordering = info->tcpi_reordering;
|
84
|
+
metrics->packet_retx = info->tcpi_total_retrans;
|
85
|
+
metrics->pacing_rate = info->tcpi_pacing_rate;
|
86
|
+
metrics->data_notsent = info->tcpi_notsent_bytes;
|
87
|
+
if (info->tcpi_min_rtt != UINT32_MAX) {
|
88
|
+
metrics->min_rtt = info->tcpi_min_rtt;
|
89
|
+
}
|
90
|
+
metrics->packet_sent = info->tcpi_data_segs_out;
|
91
|
+
metrics->delivery_rate = info->tcpi_delivery_rate;
|
92
|
+
metrics->busy_usec = info->tcpi_busy_time;
|
93
|
+
metrics->rwnd_limited_usec = info->tcpi_rwnd_limited;
|
94
|
+
metrics->sndbuf_limited_usec = info->tcpi_sndbuf_limited;
|
95
|
+
}
|
96
|
+
if (info->length > offsetof(tcp_info, tcpi_dsack_dups)) {
|
97
|
+
metrics->data_sent = info->tcpi_bytes_sent;
|
98
|
+
metrics->data_retx = info->tcpi_bytes_retrans;
|
99
|
+
metrics->packet_spurious_retx = info->tcpi_dsack_dups;
|
100
|
+
}
|
101
|
+
}
|
102
|
+
|
103
|
+
// Extracts opt stats from the given control message \a opt_stats to the
|
104
|
+
// connection metrics \a metrics.
|
105
|
+
void ExtractOptStatsFromCmsg(ConnectionMetrics* metrics,
|
106
|
+
const cmsghdr* opt_stats) {
|
107
|
+
if (opt_stats == nullptr) {
|
108
|
+
return;
|
109
|
+
}
|
110
|
+
const auto* data = CMSG_DATA(opt_stats);
|
111
|
+
constexpr int64_t cmsg_hdr_len = CMSG_ALIGN(sizeof(struct cmsghdr));
|
112
|
+
const int64_t len = opt_stats->cmsg_len - cmsg_hdr_len;
|
113
|
+
int64_t offset = 0;
|
114
|
+
|
115
|
+
while (offset < len) {
|
116
|
+
const auto* attr = reinterpret_cast<const nlattr*>(data + offset);
|
117
|
+
const void* val = data + offset + NLA_HDRLEN;
|
118
|
+
switch (attr->nla_type) {
|
119
|
+
case TCP_NLA_BUSY: {
|
120
|
+
metrics->busy_usec = ReadUnaligned<uint64_t>(val);
|
121
|
+
break;
|
122
|
+
}
|
123
|
+
case TCP_NLA_RWND_LIMITED: {
|
124
|
+
metrics->rwnd_limited_usec = ReadUnaligned<uint64_t>(val);
|
125
|
+
break;
|
126
|
+
}
|
127
|
+
case TCP_NLA_SNDBUF_LIMITED: {
|
128
|
+
metrics->sndbuf_limited_usec = ReadUnaligned<uint64_t>(val);
|
129
|
+
break;
|
130
|
+
}
|
131
|
+
case TCP_NLA_PACING_RATE: {
|
132
|
+
metrics->pacing_rate = ReadUnaligned<uint64_t>(val);
|
133
|
+
break;
|
134
|
+
}
|
135
|
+
case TCP_NLA_DELIVERY_RATE: {
|
136
|
+
metrics->delivery_rate = ReadUnaligned<uint64_t>(val);
|
137
|
+
break;
|
138
|
+
}
|
139
|
+
case TCP_NLA_DELIVERY_RATE_APP_LMT: {
|
140
|
+
metrics->is_delivery_rate_app_limited = ReadUnaligned<uint8_t>(val);
|
141
|
+
break;
|
142
|
+
}
|
143
|
+
case TCP_NLA_SND_CWND: {
|
144
|
+
metrics->congestion_window = ReadUnaligned<uint32_t>(val);
|
145
|
+
break;
|
146
|
+
}
|
147
|
+
case TCP_NLA_MIN_RTT: {
|
148
|
+
metrics->min_rtt = ReadUnaligned<uint32_t>(val);
|
149
|
+
break;
|
150
|
+
}
|
151
|
+
case TCP_NLA_SRTT: {
|
152
|
+
metrics->srtt = ReadUnaligned<uint32_t>(val);
|
153
|
+
break;
|
154
|
+
}
|
155
|
+
case TCP_NLA_RECUR_RETRANS: {
|
156
|
+
metrics->recurring_retrans = ReadUnaligned<uint8_t>(val);
|
157
|
+
break;
|
158
|
+
}
|
159
|
+
case TCP_NLA_BYTES_SENT: {
|
160
|
+
metrics->data_sent = ReadUnaligned<uint64_t>(val);
|
161
|
+
break;
|
162
|
+
}
|
163
|
+
case TCP_NLA_DATA_SEGS_OUT: {
|
164
|
+
metrics->packet_sent = ReadUnaligned<uint64_t>(val);
|
165
|
+
break;
|
166
|
+
}
|
167
|
+
case TCP_NLA_TOTAL_RETRANS: {
|
168
|
+
metrics->packet_retx = ReadUnaligned<uint64_t>(val);
|
169
|
+
break;
|
170
|
+
}
|
171
|
+
case TCP_NLA_DELIVERED: {
|
172
|
+
metrics->packet_delivered = ReadUnaligned<uint32_t>(val);
|
173
|
+
break;
|
174
|
+
}
|
175
|
+
case TCP_NLA_DELIVERED_CE: {
|
176
|
+
metrics->packet_delivered_ce = ReadUnaligned<uint32_t>(val);
|
177
|
+
break;
|
178
|
+
}
|
179
|
+
case TCP_NLA_BYTES_RETRANS: {
|
180
|
+
metrics->data_retx = ReadUnaligned<uint64_t>(val);
|
181
|
+
break;
|
182
|
+
}
|
183
|
+
case TCP_NLA_DSACK_DUPS: {
|
184
|
+
metrics->packet_spurious_retx = ReadUnaligned<uint32_t>(val);
|
185
|
+
break;
|
186
|
+
}
|
187
|
+
case TCP_NLA_REORDERING: {
|
188
|
+
metrics->reordering = ReadUnaligned<uint32_t>(val);
|
189
|
+
break;
|
190
|
+
}
|
191
|
+
case TCP_NLA_SND_SSTHRESH: {
|
192
|
+
metrics->snd_ssthresh = ReadUnaligned<uint32_t>(val);
|
193
|
+
break;
|
194
|
+
}
|
195
|
+
}
|
196
|
+
offset += NLA_ALIGN(attr->nla_len);
|
197
|
+
}
|
198
|
+
}
|
199
|
+
} // namespace.
|
200
|
+
|
201
|
+
void TracedBufferList::AddNewEntry(int32_t seq_no, int fd, void* arg) {
|
202
|
+
TracedBuffer* new_elem = new TracedBuffer(seq_no, arg);
|
203
|
+
// Store the current time as the sendmsg time.
|
204
|
+
new_elem->ts_.sendmsg_time.time = gpr_now(GPR_CLOCK_REALTIME);
|
205
|
+
new_elem->ts_.scheduled_time.time = gpr_inf_past(GPR_CLOCK_REALTIME);
|
206
|
+
new_elem->ts_.sent_time.time = gpr_inf_past(GPR_CLOCK_REALTIME);
|
207
|
+
new_elem->ts_.acked_time.time = gpr_inf_past(GPR_CLOCK_REALTIME);
|
208
|
+
if (GetSocketTcpInfo(&(new_elem->ts_.info), fd) == 0) {
|
209
|
+
ExtractOptStatsFromTcpInfo(&(new_elem->ts_.sendmsg_time.metrics),
|
210
|
+
&(new_elem->ts_.info));
|
211
|
+
}
|
212
|
+
grpc_core::MutexLock lock(&mu_);
|
213
|
+
if (!head_) {
|
214
|
+
head_ = tail_ = new_elem;
|
215
|
+
} else {
|
216
|
+
tail_->next_ = new_elem;
|
217
|
+
tail_ = new_elem;
|
218
|
+
}
|
219
|
+
}
|
220
|
+
|
221
|
+
void TracedBufferList::ProcessTimestamp(struct sock_extended_err* serr,
|
222
|
+
struct cmsghdr* opt_stats,
|
223
|
+
struct scm_timestamping* tss) {
|
224
|
+
grpc_core::MutexLock lock(&mu_);
|
225
|
+
TracedBuffer* elem = head_;
|
226
|
+
while (elem != nullptr) {
|
227
|
+
// The byte number refers to the sequence number of the last byte which this
|
228
|
+
// timestamp relates to.
|
229
|
+
if (serr->ee_data >= elem->seq_no_) {
|
230
|
+
switch (serr->ee_info) {
|
231
|
+
case SCM_TSTAMP_SCHED:
|
232
|
+
FillGprFromTimestamp(&(elem->ts_.scheduled_time.time), &(tss->ts[0]));
|
233
|
+
ExtractOptStatsFromCmsg(&(elem->ts_.scheduled_time.metrics),
|
234
|
+
opt_stats);
|
235
|
+
elem = elem->next_;
|
236
|
+
break;
|
237
|
+
case SCM_TSTAMP_SND:
|
238
|
+
FillGprFromTimestamp(&(elem->ts_.sent_time.time), &(tss->ts[0]));
|
239
|
+
ExtractOptStatsFromCmsg(&(elem->ts_.sent_time.metrics), opt_stats);
|
240
|
+
elem = elem->next_;
|
241
|
+
break;
|
242
|
+
case SCM_TSTAMP_ACK:
|
243
|
+
FillGprFromTimestamp(&(elem->ts_.acked_time.time), &(tss->ts[0]));
|
244
|
+
ExtractOptStatsFromCmsg(&(elem->ts_.acked_time.metrics), opt_stats);
|
245
|
+
// Got all timestamps. Do the callback and free this TracedBuffer. The
|
246
|
+
// thing below can be passed by value if we don't want the restriction
|
247
|
+
// on the lifetime.
|
248
|
+
g_timestamps_callback(elem->arg_, &(elem->ts_), absl::OkStatus());
|
249
|
+
// Safe to update head_ to elem->next_ because the list is ordered by
|
250
|
+
// seq_no. Thus if elem is to be deleted, it has to be the first
|
251
|
+
// element in the list.
|
252
|
+
head_ = elem->next_;
|
253
|
+
delete elem;
|
254
|
+
elem = head_;
|
255
|
+
break;
|
256
|
+
default:
|
257
|
+
abort();
|
258
|
+
}
|
259
|
+
} else {
|
260
|
+
break;
|
261
|
+
}
|
262
|
+
}
|
263
|
+
tail_ = !head_ ? head_ : tail_;
|
264
|
+
}
|
265
|
+
|
266
|
+
void TracedBufferList::Shutdown(void* remaining, absl::Status shutdown_err) {
|
267
|
+
grpc_core::MutexLock lock(&mu_);
|
268
|
+
while (head_) {
|
269
|
+
TracedBuffer* elem = head_;
|
270
|
+
g_timestamps_callback(elem->arg_, &(elem->ts_), shutdown_err);
|
271
|
+
head_ = head_->next_;
|
272
|
+
delete elem;
|
273
|
+
}
|
274
|
+
if (remaining != nullptr) {
|
275
|
+
g_timestamps_callback(remaining, nullptr, shutdown_err);
|
276
|
+
}
|
277
|
+
tail_ = head_;
|
278
|
+
}
|
279
|
+
|
280
|
+
void TcpSetWriteTimestampsCallback(
|
281
|
+
absl::AnyInvocable<void(void*, Timestamps*, absl::Status)> fn) {
|
282
|
+
g_timestamps_callback = std::move(fn);
|
283
|
+
}
|
284
|
+
|
285
|
+
} // namespace posix_engine
|
286
|
+
} // namespace grpc_event_engine
|
287
|
+
|
288
|
+
#else /* GRPC_LINUX_ERRQUEUE */
|
289
|
+
|
290
|
+
namespace grpc_event_engine {
|
291
|
+
namespace posix_engine {
|
292
|
+
|
293
|
+
void TcpSetWriteTimestampsCallback(
|
294
|
+
absl::AnyInvocable<void(void*, Timestamps*, absl::Status)> /*fn*/) {
|
295
|
+
GPR_ASSERT(false && "Timestamps callback is not enabled for this platform");
|
296
|
+
}
|
297
|
+
|
298
|
+
} // namespace posix_engine
|
299
|
+
} // namespace grpc_event_engine
|
300
|
+
|
301
|
+
#endif /* GRPC_LINUX_ERRQUEUE */
|
@@ -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_TRACED_BUFFER_LIST_H
|
16
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TRACED_BUFFER_LIST_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include <stdint.h>
|
21
|
+
|
22
|
+
#include "absl/functional/any_invocable.h"
|
23
|
+
#include "absl/status/status.h"
|
24
|
+
#include "absl/types/optional.h"
|
25
|
+
|
26
|
+
#include <grpc/impl/codegen/gpr_types.h>
|
27
|
+
|
28
|
+
#include "src/core/lib/event_engine/posix_engine/internal_errqueue.h"
|
29
|
+
#include "src/core/lib/gprpp/sync.h"
|
30
|
+
#include "src/core/lib/iomgr/port.h"
|
31
|
+
|
32
|
+
namespace grpc_event_engine {
|
33
|
+
namespace posix_engine {
|
34
|
+
|
35
|
+
struct ConnectionMetrics { /* Delivery rate in Bytes/s. */
|
36
|
+
absl::optional<uint64_t> delivery_rate;
|
37
|
+
/* If the delivery rate is limited by the application, this is set to true. */
|
38
|
+
absl::optional<bool> is_delivery_rate_app_limited;
|
39
|
+
/* Total packets retransmitted. */
|
40
|
+
absl::optional<uint32_t> packet_retx;
|
41
|
+
/* Total packets retransmitted spuriously. This metric is smaller than or
|
42
|
+
equal to packet_retx. */
|
43
|
+
absl::optional<uint32_t> packet_spurious_retx;
|
44
|
+
/* Total packets sent. */
|
45
|
+
absl::optional<uint32_t> packet_sent;
|
46
|
+
/* Total packets delivered. */
|
47
|
+
absl::optional<uint32_t> packet_delivered;
|
48
|
+
/* Total packets delivered with ECE marked. This metric is smaller than or
|
49
|
+
equal to packet_delivered. */
|
50
|
+
absl::optional<uint32_t> packet_delivered_ce;
|
51
|
+
/* Total bytes lost so far. */
|
52
|
+
absl::optional<uint64_t> data_retx;
|
53
|
+
/* Total bytes sent so far. */
|
54
|
+
absl::optional<uint64_t> data_sent;
|
55
|
+
/* Total bytes in write queue but not sent. */
|
56
|
+
absl::optional<uint64_t> data_notsent;
|
57
|
+
/* Pacing rate of the connection in Bps */
|
58
|
+
absl::optional<uint64_t> pacing_rate;
|
59
|
+
/* Minimum RTT observed in usec. */
|
60
|
+
absl::optional<uint32_t> min_rtt;
|
61
|
+
/* Smoothed RTT in usec */
|
62
|
+
absl::optional<uint32_t> srtt;
|
63
|
+
/* Send congestion window. */
|
64
|
+
absl::optional<uint32_t> congestion_window;
|
65
|
+
/* Slow start threshold in packets. */
|
66
|
+
absl::optional<uint32_t> snd_ssthresh;
|
67
|
+
/* Maximum degree of reordering (i.e., maximum number of packets reodered)
|
68
|
+
on the connection. */
|
69
|
+
absl::optional<uint32_t> reordering;
|
70
|
+
/* Represents the number of recurring retransmissions of the first sequence
|
71
|
+
that is not acknowledged yet. */
|
72
|
+
absl::optional<uint8_t> recurring_retrans;
|
73
|
+
/* The cumulative time (in usec) that the transport protocol was busy
|
74
|
+
sending data. */
|
75
|
+
absl::optional<uint64_t> busy_usec;
|
76
|
+
/* The cumulative time (in usec) that the transport protocol was limited by
|
77
|
+
the receive window size. */
|
78
|
+
absl::optional<uint64_t> rwnd_limited_usec;
|
79
|
+
/* The cumulative time (in usec) that the transport protocol was limited by
|
80
|
+
the send buffer size. */
|
81
|
+
absl::optional<uint64_t> sndbuf_limited_usec;
|
82
|
+
};
|
83
|
+
|
84
|
+
struct BufferTimestamp {
|
85
|
+
gpr_timespec time;
|
86
|
+
ConnectionMetrics metrics; /* Metrics collected with this timestamp */
|
87
|
+
};
|
88
|
+
|
89
|
+
struct Timestamps {
|
90
|
+
BufferTimestamp sendmsg_time;
|
91
|
+
BufferTimestamp scheduled_time;
|
92
|
+
BufferTimestamp sent_time;
|
93
|
+
BufferTimestamp acked_time;
|
94
|
+
|
95
|
+
uint32_t byte_offset; /* byte offset relative to the start of the RPC */
|
96
|
+
|
97
|
+
#ifdef GRPC_LINUX_ERRQUEUE
|
98
|
+
tcp_info info; /* tcp_info collected on sendmsg */
|
99
|
+
#endif /* GRPC_LINUX_ERRQUEUE */
|
100
|
+
};
|
101
|
+
|
102
|
+
// TracedBuffer is a class to keep track of timestamps for a specific buffer in
|
103
|
+
// the TCP layer. We are only tracking timestamps for Linux kernels and hence
|
104
|
+
// this class would only be used by Linux platforms. For all other platforms,
|
105
|
+
// TracedBuffer would be an empty class.
|
106
|
+
// The timestamps collected are according to Timestamps declared above A
|
107
|
+
// TracedBuffer list is kept track of using the head element of the list. If
|
108
|
+
// *the head element of the list is nullptr, then the list is empty.
|
109
|
+
#ifdef GRPC_LINUX_ERRQUEUE
|
110
|
+
|
111
|
+
class TracedBufferList {
|
112
|
+
public:
|
113
|
+
// Add a new entry in the TracedBuffer list pointed to by head. Also saves
|
114
|
+
// sendmsg_time with the current timestamp.
|
115
|
+
void AddNewEntry(int32_t seq_no, int fd, void* arg);
|
116
|
+
// Processes a received timestamp based on sock_extended_err and
|
117
|
+
// scm_timestamping structures. It will invoke the timestamps callback if the
|
118
|
+
// timestamp type is SCM_TSTAMP_ACK.
|
119
|
+
void ProcessTimestamp(struct sock_extended_err* serr,
|
120
|
+
struct cmsghdr* opt_stats,
|
121
|
+
struct scm_timestamping* tss);
|
122
|
+
// The Size() operation is slow and is used only in tests.
|
123
|
+
int Size() {
|
124
|
+
grpc_core::MutexLock lock(&mu_);
|
125
|
+
int size = 0;
|
126
|
+
TracedBuffer* curr = head_;
|
127
|
+
while (curr) {
|
128
|
+
++size;
|
129
|
+
curr = curr->next_;
|
130
|
+
}
|
131
|
+
return size;
|
132
|
+
}
|
133
|
+
// Cleans the list by calling the callback for each traced buffer in the list
|
134
|
+
// with timestamps that it has.
|
135
|
+
void Shutdown(void* /*remaining*/, absl::Status /*shutdown_err*/);
|
136
|
+
|
137
|
+
private:
|
138
|
+
class TracedBuffer {
|
139
|
+
public:
|
140
|
+
TracedBuffer(uint32_t seq_no, void* arg) : seq_no_(seq_no), arg_(arg) {}
|
141
|
+
|
142
|
+
private:
|
143
|
+
friend class TracedBufferList;
|
144
|
+
TracedBuffer* next_ = nullptr;
|
145
|
+
uint32_t seq_no_; /* The sequence number for the last byte in the buffer */
|
146
|
+
void* arg_; /* The arg to pass to timestamps_callback */
|
147
|
+
Timestamps ts_; /* The timestamps corresponding to this buffer */
|
148
|
+
};
|
149
|
+
grpc_core::Mutex mu_;
|
150
|
+
// TracedBuffers are ordered by sequence number and would need to be processed
|
151
|
+
// in a FIFO order starting with the smallest sequence number. To enable this,
|
152
|
+
// they are stored in a singly linked with head and tail pointers which allows
|
153
|
+
// easy appends and forward iteration operations.
|
154
|
+
TracedBuffer* head_ = nullptr;
|
155
|
+
TracedBuffer* tail_ = nullptr;
|
156
|
+
};
|
157
|
+
|
158
|
+
#else /* GRPC_LINUX_ERRQUEUE */
|
159
|
+
// TracedBufferList implementation is a no-op for this platform.
|
160
|
+
class TracedBufferList {
|
161
|
+
public:
|
162
|
+
void AddNewEntry(int32_t /*seq_no*/, int /*fd*/, void* /*arg*/) {}
|
163
|
+
void ProcessTimestamp(struct sock_extended_err* /*serr*/,
|
164
|
+
struct cmsghdr* /*opt_stats*/,
|
165
|
+
struct scm_timestamping* /*tss*/) {}
|
166
|
+
int Size() { return 0; }
|
167
|
+
void Shutdown(void* /*remaining*/, absl::Status /*shutdown_err*/) {}
|
168
|
+
};
|
169
|
+
#endif /* GRPC_LINUX_ERRQUEUE */
|
170
|
+
|
171
|
+
// Sets the callback function to call when timestamps for a write are collected.
|
172
|
+
// This is expected to be called atmost once.
|
173
|
+
void TcpSetWriteTimestampsCallback(
|
174
|
+
absl::AnyInvocable<void(void*, Timestamps*, absl::Status)>);
|
175
|
+
|
176
|
+
} // namespace posix_engine
|
177
|
+
} // namespace grpc_event_engine
|
178
|
+
|
179
|
+
#endif /* GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TRACED_BUFFER_LIST_H */
|
@@ -0,0 +1,126 @@
|
|
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 <utility>
|
18
|
+
|
19
|
+
#include "absl/strings/str_cat.h"
|
20
|
+
#include "absl/strings/string_view.h"
|
21
|
+
|
22
|
+
#include <grpc/support/log.h> // IWYU pragma: keep
|
23
|
+
|
24
|
+
#include "src/core/lib/iomgr/port.h"
|
25
|
+
|
26
|
+
#ifdef GRPC_LINUX_EVENTFD
|
27
|
+
|
28
|
+
#include <errno.h>
|
29
|
+
#include <sys/eventfd.h>
|
30
|
+
#include <unistd.h>
|
31
|
+
|
32
|
+
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
|
33
|
+
#endif
|
34
|
+
|
35
|
+
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h"
|
36
|
+
#include "src/core/lib/gprpp/strerror.h"
|
37
|
+
|
38
|
+
namespace grpc_event_engine {
|
39
|
+
namespace posix_engine {
|
40
|
+
|
41
|
+
#ifdef GRPC_LINUX_EVENTFD
|
42
|
+
|
43
|
+
absl::Status EventFdWakeupFd::Init() {
|
44
|
+
int read_fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
|
45
|
+
int write_fd = -1;
|
46
|
+
if (read_fd < 0) {
|
47
|
+
return absl::Status(absl::StatusCode::kInternal,
|
48
|
+
absl::StrCat("eventfd: ", grpc_core::StrError(errno)));
|
49
|
+
}
|
50
|
+
SetWakeupFds(read_fd, write_fd);
|
51
|
+
return absl::OkStatus();
|
52
|
+
}
|
53
|
+
|
54
|
+
absl::Status EventFdWakeupFd::ConsumeWakeup() {
|
55
|
+
eventfd_t value;
|
56
|
+
int err;
|
57
|
+
do {
|
58
|
+
err = eventfd_read(ReadFd(), &value);
|
59
|
+
} while (err < 0 && errno == EINTR);
|
60
|
+
if (err < 0 && errno != EAGAIN) {
|
61
|
+
return absl::Status(
|
62
|
+
absl::StatusCode::kInternal,
|
63
|
+
absl::StrCat("eventfd_read: ", grpc_core::StrError(errno)));
|
64
|
+
}
|
65
|
+
return absl::OkStatus();
|
66
|
+
}
|
67
|
+
|
68
|
+
absl::Status EventFdWakeupFd::Wakeup() {
|
69
|
+
int err;
|
70
|
+
do {
|
71
|
+
err = eventfd_write(ReadFd(), 1);
|
72
|
+
} while (err < 0 && errno == EINTR);
|
73
|
+
if (err < 0) {
|
74
|
+
return absl::Status(
|
75
|
+
absl::StatusCode::kInternal,
|
76
|
+
absl::StrCat("eventfd_write: ", grpc_core::StrError(errno)));
|
77
|
+
}
|
78
|
+
return absl::OkStatus();
|
79
|
+
}
|
80
|
+
|
81
|
+
EventFdWakeupFd::~EventFdWakeupFd() {
|
82
|
+
if (ReadFd() != 0) {
|
83
|
+
close(ReadFd());
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
bool EventFdWakeupFd::IsSupported() {
|
88
|
+
EventFdWakeupFd event_fd_wakeup_fd;
|
89
|
+
return event_fd_wakeup_fd.Init().ok();
|
90
|
+
}
|
91
|
+
|
92
|
+
absl::StatusOr<std::unique_ptr<WakeupFd>>
|
93
|
+
EventFdWakeupFd::CreateEventFdWakeupFd() {
|
94
|
+
static bool kIsEventFdWakeupFdSupported = EventFdWakeupFd::IsSupported();
|
95
|
+
if (kIsEventFdWakeupFdSupported) {
|
96
|
+
auto event_fd_wakeup_fd = std::make_unique<EventFdWakeupFd>();
|
97
|
+
auto status = event_fd_wakeup_fd->Init();
|
98
|
+
if (status.ok()) {
|
99
|
+
return std::unique_ptr<WakeupFd>(std::move(event_fd_wakeup_fd));
|
100
|
+
}
|
101
|
+
return status;
|
102
|
+
}
|
103
|
+
return absl::NotFoundError("Eventfd wakeup fd is not supported");
|
104
|
+
}
|
105
|
+
|
106
|
+
#else // GRPC_LINUX_EVENTFD
|
107
|
+
|
108
|
+
absl::Status EventFdWakeupFd::Init() { GPR_ASSERT(false && "unimplemented"); }
|
109
|
+
|
110
|
+
absl::Status EventFdWakeupFd::ConsumeWakeup() {
|
111
|
+
GPR_ASSERT(false && "unimplemented");
|
112
|
+
}
|
113
|
+
|
114
|
+
absl::Status EventFdWakeupFd::Wakeup() { GPR_ASSERT(false && "unimplemented"); }
|
115
|
+
|
116
|
+
bool EventFdWakeupFd::IsSupported() { return false; }
|
117
|
+
|
118
|
+
absl::StatusOr<std::unique_ptr<WakeupFd>>
|
119
|
+
EventFdWakeupFd::CreateEventFdWakeupFd() {
|
120
|
+
return absl::NotFoundError("Eventfd wakeup fd is not supported");
|
121
|
+
}
|
122
|
+
|
123
|
+
#endif // GRPC_LINUX_EVENTFD
|
124
|
+
|
125
|
+
} // namespace posix_engine
|
126
|
+
} // namespace grpc_event_engine
|
@@ -0,0 +1,45 @@
|
|
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
|
+
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_EVENTFD_H
|
15
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_EVENTFD_H
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include <memory>
|
20
|
+
|
21
|
+
#include "absl/status/status.h"
|
22
|
+
#include "absl/status/statusor.h"
|
23
|
+
|
24
|
+
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
|
25
|
+
|
26
|
+
namespace grpc_event_engine {
|
27
|
+
namespace posix_engine {
|
28
|
+
|
29
|
+
class EventFdWakeupFd : public WakeupFd {
|
30
|
+
public:
|
31
|
+
EventFdWakeupFd() : WakeupFd() {}
|
32
|
+
~EventFdWakeupFd() override;
|
33
|
+
absl::Status ConsumeWakeup() override;
|
34
|
+
absl::Status Wakeup() override;
|
35
|
+
static absl::StatusOr<std::unique_ptr<WakeupFd>> CreateEventFdWakeupFd();
|
36
|
+
static bool IsSupported();
|
37
|
+
|
38
|
+
private:
|
39
|
+
absl::Status Init();
|
40
|
+
};
|
41
|
+
|
42
|
+
} // namespace posix_engine
|
43
|
+
} // namespace grpc_event_engine
|
44
|
+
|
45
|
+
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_EVENTFD_H
|