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
@@ -22,6 +22,7 @@
|
|
22
22
|
|
23
23
|
#include <grpc/support/log.h>
|
24
24
|
|
25
|
+
#include "src/core/lib/gprpp/sync.h"
|
25
26
|
#include "src/core/lib/iomgr/port.h"
|
26
27
|
|
27
28
|
#ifdef GRPC_LINUX_ERRQUEUE
|
@@ -29,72 +30,70 @@
|
|
29
30
|
#include <string.h>
|
30
31
|
#include <time.h>
|
31
32
|
|
32
|
-
#include "src/core/lib/gprpp/memory.h"
|
33
|
-
|
34
33
|
namespace grpc_core {
|
35
34
|
namespace {
|
36
|
-
|
37
|
-
void
|
35
|
+
// Fills gpr_timespec gts based on values from timespec ts.
|
36
|
+
void FillGprFromTimestamp(gpr_timespec* gts, const struct timespec* ts) {
|
38
37
|
gts->tv_sec = ts->tv_sec;
|
39
38
|
gts->tv_nsec = static_cast<int32_t>(ts->tv_nsec);
|
40
39
|
gts->clock_type = GPR_CLOCK_REALTIME;
|
41
40
|
}
|
42
41
|
|
43
|
-
void
|
44
|
-
|
42
|
+
void DefaultTimestampsCallback(void* /*arg*/, Timestamps* /*ts*/,
|
43
|
+
absl::Status /*shudown_err*/) {
|
45
44
|
gpr_log(GPR_DEBUG, "Timestamps callback has not been registered");
|
46
45
|
}
|
47
46
|
|
48
|
-
|
49
|
-
|
50
|
-
void (*
|
51
|
-
|
52
|
-
|
47
|
+
// The saved callback function that will be invoked when we get all the
|
48
|
+
// timestamps that we are going to get for a TracedBuffer.
|
49
|
+
void (*g_timestamps_callback)(void*, Timestamps*,
|
50
|
+
grpc_error_handle shutdown_err) =
|
51
|
+
DefaultTimestampsCallback;
|
53
52
|
|
54
|
-
|
55
|
-
|
53
|
+
// Used to extract individual opt stats from cmsg, so as to avoid troubles with
|
54
|
+
// unaligned reads.
|
56
55
|
template <typename T>
|
57
|
-
T
|
56
|
+
T ReadUnaligned(const void* ptr) {
|
58
57
|
T val;
|
59
58
|
memcpy(&val, ptr, sizeof(val));
|
60
59
|
return val;
|
61
60
|
}
|
62
61
|
|
63
|
-
|
64
|
-
void
|
65
|
-
|
62
|
+
// Extracts opt stats from the tcp_info struct \a info to \a metrics
|
63
|
+
void ExtractOptStatsFromTcpInfo(ConnectionMetrics* metrics,
|
64
|
+
const tcp_info* info) {
|
66
65
|
if (info == nullptr) {
|
67
66
|
return;
|
68
67
|
}
|
69
68
|
if (info->length > offsetof(tcp_info, tcpi_sndbuf_limited)) {
|
70
|
-
metrics->recurring_retrans
|
71
|
-
metrics->is_delivery_rate_app_limited
|
72
|
-
info->tcpi_delivery_rate_app_limited
|
73
|
-
metrics->congestion_window
|
74
|
-
metrics->reordering
|
75
|
-
metrics->packet_retx
|
76
|
-
metrics->pacing_rate
|
77
|
-
metrics->data_notsent
|
69
|
+
metrics->recurring_retrans = info->tcpi_retransmits;
|
70
|
+
metrics->is_delivery_rate_app_limited =
|
71
|
+
info->tcpi_delivery_rate_app_limited;
|
72
|
+
metrics->congestion_window = info->tcpi_snd_cwnd;
|
73
|
+
metrics->reordering = info->tcpi_reordering;
|
74
|
+
metrics->packet_retx = info->tcpi_total_retrans;
|
75
|
+
metrics->pacing_rate = info->tcpi_pacing_rate;
|
76
|
+
metrics->data_notsent = info->tcpi_notsent_bytes;
|
78
77
|
if (info->tcpi_min_rtt != UINT32_MAX) {
|
79
|
-
metrics->min_rtt
|
78
|
+
metrics->min_rtt = info->tcpi_min_rtt;
|
80
79
|
}
|
81
|
-
metrics->packet_sent
|
82
|
-
metrics->delivery_rate
|
83
|
-
metrics->busy_usec
|
84
|
-
metrics->rwnd_limited_usec
|
85
|
-
metrics->sndbuf_limited_usec
|
80
|
+
metrics->packet_sent = info->tcpi_data_segs_out;
|
81
|
+
metrics->delivery_rate = info->tcpi_delivery_rate;
|
82
|
+
metrics->busy_usec = info->tcpi_busy_time;
|
83
|
+
metrics->rwnd_limited_usec = info->tcpi_rwnd_limited;
|
84
|
+
metrics->sndbuf_limited_usec = info->tcpi_sndbuf_limited;
|
86
85
|
}
|
87
86
|
if (info->length > offsetof(tcp_info, tcpi_dsack_dups)) {
|
88
|
-
metrics->data_sent
|
89
|
-
metrics->data_retx
|
90
|
-
metrics->packet_spurious_retx
|
87
|
+
metrics->data_sent = info->tcpi_bytes_sent;
|
88
|
+
metrics->data_retx = info->tcpi_bytes_retrans;
|
89
|
+
metrics->packet_spurious_retx = info->tcpi_dsack_dups;
|
91
90
|
}
|
92
91
|
}
|
93
92
|
|
94
|
-
|
95
|
-
|
96
|
-
void
|
97
|
-
|
93
|
+
// Extracts opt stats from the given control message \a opt_stats to the
|
94
|
+
// connection metrics \a metrics.
|
95
|
+
void ExtractOptStatsFromCmsg(ConnectionMetrics* metrics,
|
96
|
+
const cmsghdr* opt_stats) {
|
98
97
|
if (opt_stats == nullptr) {
|
99
98
|
return;
|
100
99
|
}
|
@@ -108,80 +107,79 @@ void extract_opt_stats_from_cmsg(ConnectionMetrics* metrics,
|
|
108
107
|
const void* val = data + offset + NLA_HDRLEN;
|
109
108
|
switch (attr->nla_type) {
|
110
109
|
case TCP_NLA_BUSY: {
|
111
|
-
metrics->busy_usec
|
110
|
+
metrics->busy_usec = ReadUnaligned<uint64_t>(val);
|
112
111
|
break;
|
113
112
|
}
|
114
113
|
case TCP_NLA_RWND_LIMITED: {
|
115
|
-
metrics->rwnd_limited_usec
|
114
|
+
metrics->rwnd_limited_usec = ReadUnaligned<uint64_t>(val);
|
116
115
|
break;
|
117
116
|
}
|
118
117
|
case TCP_NLA_SNDBUF_LIMITED: {
|
119
|
-
metrics->sndbuf_limited_usec
|
118
|
+
metrics->sndbuf_limited_usec = ReadUnaligned<uint64_t>(val);
|
120
119
|
break;
|
121
120
|
}
|
122
121
|
case TCP_NLA_PACING_RATE: {
|
123
|
-
metrics->pacing_rate
|
122
|
+
metrics->pacing_rate = ReadUnaligned<uint64_t>(val);
|
124
123
|
break;
|
125
124
|
}
|
126
125
|
case TCP_NLA_DELIVERY_RATE: {
|
127
|
-
metrics->delivery_rate
|
126
|
+
metrics->delivery_rate = ReadUnaligned<uint64_t>(val);
|
128
127
|
break;
|
129
128
|
}
|
130
129
|
case TCP_NLA_DELIVERY_RATE_APP_LMT: {
|
131
|
-
metrics->is_delivery_rate_app_limited
|
132
|
-
read_unaligned<uint8_t>(val));
|
130
|
+
metrics->is_delivery_rate_app_limited = ReadUnaligned<uint8_t>(val);
|
133
131
|
break;
|
134
132
|
}
|
135
133
|
case TCP_NLA_SND_CWND: {
|
136
|
-
metrics->congestion_window
|
134
|
+
metrics->congestion_window = ReadUnaligned<uint32_t>(val);
|
137
135
|
break;
|
138
136
|
}
|
139
137
|
case TCP_NLA_MIN_RTT: {
|
140
|
-
metrics->min_rtt
|
138
|
+
metrics->min_rtt = ReadUnaligned<uint32_t>(val);
|
141
139
|
break;
|
142
140
|
}
|
143
141
|
case TCP_NLA_SRTT: {
|
144
|
-
metrics->srtt
|
142
|
+
metrics->srtt = ReadUnaligned<uint32_t>(val);
|
145
143
|
break;
|
146
144
|
}
|
147
145
|
case TCP_NLA_RECUR_RETRANS: {
|
148
|
-
metrics->recurring_retrans
|
146
|
+
metrics->recurring_retrans = ReadUnaligned<uint8_t>(val);
|
149
147
|
break;
|
150
148
|
}
|
151
149
|
case TCP_NLA_BYTES_SENT: {
|
152
|
-
metrics->data_sent
|
150
|
+
metrics->data_sent = ReadUnaligned<uint64_t>(val);
|
153
151
|
break;
|
154
152
|
}
|
155
153
|
case TCP_NLA_DATA_SEGS_OUT: {
|
156
|
-
metrics->packet_sent
|
154
|
+
metrics->packet_sent = ReadUnaligned<uint64_t>(val);
|
157
155
|
break;
|
158
156
|
}
|
159
157
|
case TCP_NLA_TOTAL_RETRANS: {
|
160
|
-
metrics->packet_retx
|
158
|
+
metrics->packet_retx = ReadUnaligned<uint64_t>(val);
|
161
159
|
break;
|
162
160
|
}
|
163
161
|
case TCP_NLA_DELIVERED: {
|
164
|
-
metrics->packet_delivered
|
162
|
+
metrics->packet_delivered = ReadUnaligned<uint32_t>(val);
|
165
163
|
break;
|
166
164
|
}
|
167
165
|
case TCP_NLA_DELIVERED_CE: {
|
168
|
-
metrics->packet_delivered_ce
|
166
|
+
metrics->packet_delivered_ce = ReadUnaligned<uint32_t>(val);
|
169
167
|
break;
|
170
168
|
}
|
171
169
|
case TCP_NLA_BYTES_RETRANS: {
|
172
|
-
metrics->data_retx
|
170
|
+
metrics->data_retx = ReadUnaligned<uint64_t>(val);
|
173
171
|
break;
|
174
172
|
}
|
175
173
|
case TCP_NLA_DSACK_DUPS: {
|
176
|
-
metrics->packet_spurious_retx
|
174
|
+
metrics->packet_spurious_retx = ReadUnaligned<uint32_t>(val);
|
177
175
|
break;
|
178
176
|
}
|
179
177
|
case TCP_NLA_REORDERING: {
|
180
|
-
metrics->reordering
|
178
|
+
metrics->reordering = ReadUnaligned<uint32_t>(val);
|
181
179
|
break;
|
182
180
|
}
|
183
181
|
case TCP_NLA_SND_SSTHRESH: {
|
184
|
-
metrics->snd_ssthresh
|
182
|
+
metrics->snd_ssthresh = ReadUnaligned<uint32_t>(val);
|
185
183
|
break;
|
186
184
|
}
|
187
185
|
}
|
@@ -189,75 +187,68 @@ void extract_opt_stats_from_cmsg(ConnectionMetrics* metrics,
|
|
189
187
|
}
|
190
188
|
}
|
191
189
|
|
192
|
-
int
|
190
|
+
int GetSocketTcpInfo(struct tcp_info* info, int fd) {
|
193
191
|
memset(info, 0, sizeof(*info));
|
194
192
|
info->length = offsetof(tcp_info, length);
|
195
193
|
return getsockopt(fd, IPPROTO_TCP, TCP_INFO, info, &(info->length));
|
196
194
|
}
|
197
|
-
} /* namespace */
|
198
195
|
|
199
|
-
|
200
|
-
|
201
|
-
|
196
|
+
} // namespace.
|
197
|
+
|
198
|
+
void TracedBufferList::AddNewEntry(int32_t seq_no, int fd, void* arg) {
|
202
199
|
TracedBuffer* new_elem = new TracedBuffer(seq_no, arg);
|
203
|
-
|
200
|
+
// Store the current time as the sendmsg time.
|
204
201
|
new_elem->ts_.sendmsg_time.time = gpr_now(GPR_CLOCK_REALTIME);
|
205
202
|
new_elem->ts_.scheduled_time.time = gpr_inf_past(GPR_CLOCK_REALTIME);
|
206
203
|
new_elem->ts_.sent_time.time = gpr_inf_past(GPR_CLOCK_REALTIME);
|
207
204
|
new_elem->ts_.acked_time.time = gpr_inf_past(GPR_CLOCK_REALTIME);
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
&new_elem->ts_.info);
|
205
|
+
if (GetSocketTcpInfo(&(new_elem->ts_.info), fd) == 0) {
|
206
|
+
ExtractOptStatsFromTcpInfo(&(new_elem->ts_.sendmsg_time.metrics),
|
207
|
+
&(new_elem->ts_.info));
|
212
208
|
}
|
213
|
-
|
214
|
-
|
215
|
-
|
209
|
+
MutexLock lock(&mu_);
|
210
|
+
if (!head_) {
|
211
|
+
head_ = tail_ = new_elem;
|
212
|
+
} else {
|
213
|
+
tail_->next_ = new_elem;
|
214
|
+
tail_ = new_elem;
|
216
215
|
}
|
217
|
-
/* Append at the end. */
|
218
|
-
TracedBuffer* ptr = *head;
|
219
|
-
while (ptr->next_ != nullptr) {
|
220
|
-
ptr = ptr->next_;
|
221
|
-
}
|
222
|
-
ptr->next_ = new_elem;
|
223
216
|
}
|
224
217
|
|
225
|
-
void
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
TracedBuffer* elem = *head;
|
231
|
-
TracedBuffer* next = nullptr;
|
218
|
+
void TracedBufferList::ProcessTimestamp(struct sock_extended_err* serr,
|
219
|
+
struct cmsghdr* opt_stats,
|
220
|
+
struct scm_timestamping* tss) {
|
221
|
+
MutexLock lock(&mu_);
|
222
|
+
TracedBuffer* elem = head_;
|
232
223
|
while (elem != nullptr) {
|
233
|
-
|
234
|
-
|
224
|
+
// The byte number refers to the sequence number of the last byte which this
|
225
|
+
// timestamp relates to.
|
235
226
|
if (serr->ee_data >= elem->seq_no_) {
|
236
227
|
switch (serr->ee_info) {
|
237
228
|
case SCM_TSTAMP_SCHED:
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
opt_stats);
|
229
|
+
FillGprFromTimestamp(&(elem->ts_.scheduled_time.time), &(tss->ts[0]));
|
230
|
+
ExtractOptStatsFromCmsg(&(elem->ts_.scheduled_time.metrics),
|
231
|
+
opt_stats);
|
242
232
|
elem = elem->next_;
|
243
233
|
break;
|
244
234
|
case SCM_TSTAMP_SND:
|
245
|
-
|
246
|
-
|
247
|
-
opt_stats);
|
235
|
+
FillGprFromTimestamp(&(elem->ts_.sent_time.time), &(tss->ts[0]));
|
236
|
+
ExtractOptStatsFromCmsg(&(elem->ts_.sent_time.metrics), opt_stats);
|
248
237
|
elem = elem->next_;
|
249
238
|
break;
|
250
239
|
case SCM_TSTAMP_ACK:
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
240
|
+
FillGprFromTimestamp(&(elem->ts_.acked_time.time), &(tss->ts[0]));
|
241
|
+
ExtractOptStatsFromCmsg(&(elem->ts_.acked_time.metrics), opt_stats);
|
242
|
+
// Got all timestamps. Do the callback and free this TracedBuffer. The
|
243
|
+
// thing below can be passed by value if we don't want the restriction
|
244
|
+
// on the lifetime.
|
245
|
+
g_timestamps_callback(elem->arg_, &(elem->ts_), absl::OkStatus());
|
246
|
+
// Safe to update head_ to elem->next_ because the list is ordered by
|
247
|
+
// seq_no. Thus if elem is to be deleted, it has to be the first
|
248
|
+
// element in the list.
|
249
|
+
head_ = elem->next_;
|
250
|
+
delete elem;
|
251
|
+
elem = head_;
|
261
252
|
break;
|
262
253
|
default:
|
263
254
|
abort();
|
@@ -266,28 +257,26 @@ void TracedBuffer::ProcessTimestamp(TracedBuffer** head,
|
|
266
257
|
break;
|
267
258
|
}
|
268
259
|
}
|
260
|
+
tail_ = !head_ ? head_ : tail_;
|
269
261
|
}
|
270
262
|
|
271
|
-
void
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
auto* next = elem->next_;
|
263
|
+
void TracedBufferList::Shutdown(void* remaining, absl::Status shutdown_err) {
|
264
|
+
MutexLock lock(&mu_);
|
265
|
+
while (head_) {
|
266
|
+
TracedBuffer* elem = head_;
|
267
|
+
g_timestamps_callback(elem->arg_, &(elem->ts_), shutdown_err);
|
268
|
+
head_ = head_->next_;
|
278
269
|
delete elem;
|
279
|
-
elem = next;
|
280
270
|
}
|
281
|
-
*head = nullptr;
|
282
271
|
if (remaining != nullptr) {
|
283
|
-
|
272
|
+
g_timestamps_callback(remaining, nullptr, shutdown_err);
|
284
273
|
}
|
285
|
-
|
274
|
+
tail_ = head_;
|
286
275
|
}
|
287
276
|
|
288
277
|
void grpc_tcp_set_write_timestamps_callback(
|
289
278
|
void (*fn)(void*, Timestamps*, grpc_error_handle error)) {
|
290
|
-
|
279
|
+
g_timestamps_callback = fn;
|
291
280
|
}
|
292
281
|
} /* namespace grpc_core */
|
293
282
|
|
@@ -302,6 +291,6 @@ void grpc_tcp_set_write_timestamps_callback(
|
|
302
291
|
(void)fn;
|
303
292
|
gpr_log(GPR_DEBUG, "Timestamps callback is not enabled for this platform");
|
304
293
|
}
|
305
|
-
}
|
294
|
+
} // namespace grpc_core
|
306
295
|
|
307
296
|
#endif /* GRPC_LINUX_ERRQUEUE */
|
@@ -25,7 +25,7 @@
|
|
25
25
|
|
26
26
|
#include <grpc/support/time.h>
|
27
27
|
|
28
|
-
#include "src/core/lib/gprpp/
|
28
|
+
#include "src/core/lib/gprpp/sync.h"
|
29
29
|
#include "src/core/lib/iomgr/error.h"
|
30
30
|
#include "src/core/lib/iomgr/internal_errqueue.h"
|
31
31
|
#include "src/core/lib/iomgr/port.h"
|
@@ -100,56 +100,72 @@ struct Timestamps {
|
|
100
100
|
#endif /* GRPC_LINUX_ERRQUEUE */
|
101
101
|
};
|
102
102
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
*
|
110
|
-
*
|
111
|
-
* A TracedBuffer list is kept track of using the head element of the list. If
|
112
|
-
* the head element of the list is nullptr, then the list is empty.
|
113
|
-
*/
|
103
|
+
// TracedBuffer is a class to keep track of timestamps for a specific buffer in
|
104
|
+
// the TCP layer. We are only tracking timestamps for Linux kernels and hence
|
105
|
+
// this class would only be used by Linux platforms. For all other platforms,
|
106
|
+
// TracedBuffer would be an empty class.
|
107
|
+
// The timestamps collected are according to Timestamps declared above A
|
108
|
+
// TracedBuffer list is kept track of using the head element of the list. If
|
109
|
+
// *the head element of the list is nullptr, then the list is empty.
|
114
110
|
#ifdef GRPC_LINUX_ERRQUEUE
|
115
|
-
|
111
|
+
|
112
|
+
class TracedBufferList {
|
116
113
|
public:
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
114
|
+
// Add a new entry in the TracedBuffer list pointed to by head. Also saves
|
115
|
+
// sendmsg_time with the current timestamp.
|
116
|
+
void AddNewEntry(int32_t seq_no, int fd, void* arg);
|
117
|
+
// Processes a received timestamp based on sock_extended_err and
|
118
|
+
// scm_timestamping structures. It will invoke the timestamps callback if the
|
119
|
+
// timestamp type is SCM_TSTAMP_ACK.
|
120
|
+
void ProcessTimestamp(struct sock_extended_err* serr,
|
121
|
+
struct cmsghdr* opt_stats,
|
122
|
+
struct scm_timestamping* tss);
|
123
|
+
// The Size() operation is slow and is used only in tests.
|
124
|
+
int Size() {
|
125
|
+
MutexLock lock(&mu_);
|
126
|
+
int size = 0;
|
127
|
+
TracedBuffer* curr = head_;
|
128
|
+
while (curr) {
|
129
|
+
++size;
|
130
|
+
curr = curr->next_;
|
131
|
+
}
|
132
|
+
return size;
|
133
|
+
}
|
134
|
+
// Cleans the list by calling the callback for each traced buffer in the list
|
135
|
+
// with timestamps that it has.
|
136
|
+
void Shutdown(void* /*remaining*/, absl::Status /*shutdown_err*/);
|
138
137
|
|
139
138
|
private:
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
139
|
+
class TracedBuffer {
|
140
|
+
public:
|
141
|
+
TracedBuffer(uint32_t seq_no, void* arg) : seq_no_(seq_no), arg_(arg) {}
|
142
|
+
|
143
|
+
private:
|
144
|
+
friend class TracedBufferList;
|
145
|
+
TracedBuffer* next_ = nullptr;
|
146
|
+
uint32_t seq_no_; /* The sequence number for the last byte in the buffer */
|
147
|
+
void* arg_; /* The arg to pass to timestamps_callback */
|
148
|
+
Timestamps ts_; /* The timestamps corresponding to this buffer */
|
149
|
+
};
|
150
|
+
Mutex mu_;
|
151
|
+
// TracedBuffers are ordered by sequence number and would need to be processed
|
152
|
+
// in a FIFO order starting with the smallest sequence number. To enable this,
|
153
|
+
// they are stored in a singly linked with head and tail pointers which allows
|
154
|
+
// easy appends and forward iteration operations.
|
155
|
+
TracedBuffer* head_ = nullptr;
|
156
|
+
TracedBuffer* tail_ = nullptr;
|
144
157
|
};
|
158
|
+
|
145
159
|
#else /* GRPC_LINUX_ERRQUEUE */
|
146
|
-
|
160
|
+
// TracedBufferList implementation is a no-op for this platform.
|
161
|
+
class TracedBufferList {
|
147
162
|
public:
|
148
|
-
/*
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
}
|
163
|
+
void AddNewEntry(int32_t /*seq_no*/, int /*fd*/, void* /*arg*/) {}
|
164
|
+
void ProcessTimestamp(struct sock_extended_err* /*serr*/,
|
165
|
+
struct cmsghdr* /*opt_stats*/,
|
166
|
+
struct scm_timestamping* /*tss*/) {}
|
167
|
+
int Size() { return 0; }
|
168
|
+
void Shutdown(void* /*remaining*/, absl::Status /*shutdown_err*/) {}
|
153
169
|
};
|
154
170
|
#endif /* GRPC_LINUX_ERRQUEUE */
|
155
171
|
|
@@ -25,6 +25,7 @@
|
|
25
25
|
#include <grpc/support/log.h>
|
26
26
|
|
27
27
|
#include "src/core/lib/debug/stats.h"
|
28
|
+
#include "src/core/lib/debug/stats_data.h"
|
28
29
|
|
29
30
|
namespace grpc_core {
|
30
31
|
|
@@ -39,7 +40,7 @@ grpc_error_handle DecodeCancelStateError(gpr_atm cancel_state) {
|
|
39
40
|
if (cancel_state & kErrorBit) {
|
40
41
|
return internal::StatusGetFromHeapPtr(cancel_state & ~kErrorBit);
|
41
42
|
}
|
42
|
-
return
|
43
|
+
return absl::OkStatus();
|
43
44
|
}
|
44
45
|
|
45
46
|
} // namespace
|
@@ -81,7 +82,7 @@ void CallCombiner::TsanClosure(void* arg, grpc_error_handle error) {
|
|
81
82
|
} else {
|
82
83
|
lock.reset();
|
83
84
|
}
|
84
|
-
Closure::Run(DEBUG_LOCATION, self->original_closure_,
|
85
|
+
Closure::Run(DEBUG_LOCATION, self->original_closure_, error);
|
85
86
|
if (lock != nullptr) {
|
86
87
|
TSAN_ANNOTATE_RWLOCK_RELEASED(&lock->taken, true);
|
87
88
|
bool prev = true;
|
@@ -117,7 +118,7 @@ void CallCombiner::Start(grpc_closure* closure, grpc_error_handle error,
|
|
117
118
|
"==> CallCombiner::Start() [%p] closure=%p [" DEBUG_FMT_STR
|
118
119
|
"%s] error=%s",
|
119
120
|
this, closure DEBUG_FMT_ARGS, reason,
|
120
|
-
|
121
|
+
StatusToString(error).c_str());
|
121
122
|
}
|
122
123
|
size_t prev_size =
|
123
124
|
static_cast<size_t>(gpr_atm_full_fetch_add(&size_, (gpr_atm)1));
|
@@ -175,7 +176,7 @@ void CallCombiner::Stop(DEBUG_ARGS const char* reason) {
|
|
175
176
|
closure->error_data.error = 0;
|
176
177
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_call_combiner_trace)) {
|
177
178
|
gpr_log(GPR_INFO, " EXECUTING FROM QUEUE: closure=%p error=%s",
|
178
|
-
closure,
|
179
|
+
closure, StatusToString(error).c_str());
|
179
180
|
}
|
180
181
|
ScheduleClosure(closure, error);
|
181
182
|
break;
|
@@ -192,14 +193,14 @@ void CallCombiner::SetNotifyOnCancel(grpc_closure* closure) {
|
|
192
193
|
grpc_error_handle original_error = DecodeCancelStateError(original_state);
|
193
194
|
// If error is set, invoke the cancellation closure immediately.
|
194
195
|
// Otherwise, store the new closure.
|
195
|
-
if (!
|
196
|
+
if (!original_error.ok()) {
|
196
197
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_call_combiner_trace)) {
|
197
198
|
gpr_log(GPR_INFO,
|
198
199
|
"call_combiner=%p: scheduling notify_on_cancel callback=%p "
|
199
200
|
"for pre-existing cancellation",
|
200
201
|
this, closure);
|
201
202
|
}
|
202
|
-
ExecCtx::Run(DEBUG_LOCATION, closure,
|
203
|
+
ExecCtx::Run(DEBUG_LOCATION, closure, original_error);
|
203
204
|
break;
|
204
205
|
} else {
|
205
206
|
if (gpr_atm_full_cas(&cancel_state_, original_state,
|
@@ -209,7 +210,7 @@ void CallCombiner::SetNotifyOnCancel(grpc_closure* closure) {
|
|
209
210
|
this, closure);
|
210
211
|
}
|
211
212
|
// If we replaced an earlier closure, invoke the original
|
212
|
-
// closure with
|
213
|
+
// closure with absl::OkStatus(). This allows callers to clean
|
213
214
|
// up any resources they may be holding for the callback.
|
214
215
|
if (original_state != 0) {
|
215
216
|
closure = reinterpret_cast<grpc_closure*>(original_state);
|
@@ -218,7 +219,7 @@ void CallCombiner::SetNotifyOnCancel(grpc_closure* closure) {
|
|
218
219
|
"call_combiner=%p: scheduling old cancel callback=%p", this,
|
219
220
|
closure);
|
220
221
|
}
|
221
|
-
ExecCtx::Run(DEBUG_LOCATION, closure,
|
222
|
+
ExecCtx::Run(DEBUG_LOCATION, closure, absl::OkStatus());
|
222
223
|
}
|
223
224
|
break;
|
224
225
|
}
|
@@ -233,7 +234,7 @@ void CallCombiner::Cancel(grpc_error_handle error) {
|
|
233
234
|
while (true) {
|
234
235
|
gpr_atm original_state = gpr_atm_acq_load(&cancel_state_);
|
235
236
|
grpc_error_handle original_error = DecodeCancelStateError(original_state);
|
236
|
-
if (!
|
237
|
+
if (!original_error.ok()) {
|
237
238
|
internal::StatusFreeHeapPtr(status_ptr);
|
238
239
|
break;
|
239
240
|
}
|
@@ -246,7 +247,7 @@ void CallCombiner::Cancel(grpc_error_handle error) {
|
|
246
247
|
"call_combiner=%p: scheduling notify_on_cancel callback=%p",
|
247
248
|
this, notify_on_cancel);
|
248
249
|
}
|
249
|
-
ExecCtx::Run(DEBUG_LOCATION, notify_on_cancel,
|
250
|
+
ExecCtx::Run(DEBUG_LOCATION, notify_on_cancel, error);
|
250
251
|
}
|
251
252
|
break;
|
252
253
|
}
|
@@ -80,7 +80,7 @@ class CallCombiner {
|
|
80
80
|
/// once; this allows the closure to hold references that will be freed
|
81
81
|
/// regardless of whether or not the call was cancelled. If a cancellation
|
82
82
|
/// does occur, the closure will be scheduled with the cancellation error;
|
83
|
-
/// otherwise, it will be scheduled with
|
83
|
+
/// otherwise, it will be scheduled with absl::OkStatus().
|
84
84
|
///
|
85
85
|
/// The closure will be scheduled in the following cases:
|
86
86
|
/// - If Cancel() was called prior to registering the closure, it will be
|
@@ -89,7 +89,7 @@ class CallCombiner {
|
|
89
89
|
/// be scheduled with the cancellation error.
|
90
90
|
/// - If SetNotifyOnCancel() is called again to register a new cancellation
|
91
91
|
/// closure, the previous cancellation closure will be scheduled with
|
92
|
-
///
|
92
|
+
/// absl::OkStatus().
|
93
93
|
///
|
94
94
|
/// If \a closure is NULL, then no closure will be invoked on
|
95
95
|
/// cancellation; this effectively unregisters the previously set closure.
|
@@ -173,8 +173,7 @@ class CallCombinerClosureList {
|
|
173
173
|
"CallCombinerClosureList executing closure while already "
|
174
174
|
"holding call_combiner %p: closure=%p error=%s reason=%s",
|
175
175
|
call_combiner, closures_[0].closure,
|
176
|
-
|
177
|
-
closures_[0].reason);
|
176
|
+
StatusToString(closures_[0].error).c_str(), closures_[0].reason);
|
178
177
|
}
|
179
178
|
// This will release the call combiner.
|
180
179
|
ExecCtx::Run(DEBUG_LOCATION, closures_[0].closure, closures_[0].error);
|