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
@@ -21,6 +21,8 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
+
#include <stdint.h>
|
25
|
+
|
24
26
|
#include <atomic>
|
25
27
|
#include <memory>
|
26
28
|
#include <queue>
|
@@ -28,19 +30,28 @@
|
|
28
30
|
#include "absl/base/thread_annotations.h"
|
29
31
|
#include "absl/functional/any_invocable.h"
|
30
32
|
|
33
|
+
#include <grpc/event_engine/event_engine.h>
|
34
|
+
#include <grpc/support/cpu.h>
|
35
|
+
|
36
|
+
#include "src/core/lib/event_engine/executor/executor.h"
|
31
37
|
#include "src/core/lib/event_engine/forkable.h"
|
38
|
+
#include "src/core/lib/gpr/useful.h"
|
32
39
|
#include "src/core/lib/gprpp/sync.h"
|
33
40
|
|
34
41
|
namespace grpc_event_engine {
|
35
42
|
namespace experimental {
|
36
43
|
|
37
|
-
class ThreadPool final : public
|
44
|
+
class ThreadPool final : public Forkable, public Executor {
|
38
45
|
public:
|
39
|
-
|
40
|
-
//
|
46
|
+
ThreadPool();
|
47
|
+
// Asserts Quiesce was called.
|
41
48
|
~ThreadPool() override;
|
42
49
|
|
43
|
-
void
|
50
|
+
void Quiesce();
|
51
|
+
|
52
|
+
// Run must not be called after Quiesce completes
|
53
|
+
void Run(absl::AnyInvocable<void()> callback) override;
|
54
|
+
void Run(EventEngine::Closure* closure) override;
|
44
55
|
|
45
56
|
// Forkable
|
46
57
|
// Ensures that the thread pool is empty before forking.
|
@@ -51,7 +62,8 @@ class ThreadPool final : public grpc_event_engine::experimental::Forkable {
|
|
51
62
|
private:
|
52
63
|
class Queue {
|
53
64
|
public:
|
54
|
-
explicit Queue(
|
65
|
+
explicit Queue(unsigned reserve_threads)
|
66
|
+
: reserve_threads_(reserve_threads) {}
|
55
67
|
bool Step();
|
56
68
|
void SetShutdown() { SetState(State::kShutdown); }
|
57
69
|
void SetForking() { SetState(State::kForking); }
|
@@ -59,6 +71,8 @@ class ThreadPool final : public grpc_event_engine::experimental::Forkable {
|
|
59
71
|
// Return true if we should also spin up a new thread.
|
60
72
|
bool Add(absl::AnyInvocable<void()> callback);
|
61
73
|
void Reset() { SetState(State::kRunning); }
|
74
|
+
bool IsBacklogged();
|
75
|
+
void SleepIfRunning();
|
62
76
|
|
63
77
|
private:
|
64
78
|
enum class State { kRunning, kShutdown, kForking };
|
@@ -68,8 +82,8 @@ class ThreadPool final : public grpc_event_engine::experimental::Forkable {
|
|
68
82
|
grpc_core::Mutex mu_;
|
69
83
|
grpc_core::CondVar cv_;
|
70
84
|
std::queue<absl::AnyInvocable<void()>> callbacks_ ABSL_GUARDED_BY(mu_);
|
71
|
-
|
72
|
-
const
|
85
|
+
unsigned threads_waiting_ ABSL_GUARDED_BY(mu_) = 0;
|
86
|
+
const unsigned reserve_threads_;
|
73
87
|
State state_ ABSL_GUARDED_BY(mu_) = State::kRunning;
|
74
88
|
};
|
75
89
|
|
@@ -92,20 +106,29 @@ class ThreadPool final : public grpc_event_engine::experimental::Forkable {
|
|
92
106
|
// After pool creation we use this to rate limit creation of threads to one
|
93
107
|
// at a time.
|
94
108
|
std::atomic<bool> currently_starting_one_thread{false};
|
109
|
+
std::atomic<uint64_t> last_started_thread{0};
|
95
110
|
};
|
96
111
|
|
97
112
|
using StatePtr = std::shared_ptr<State>;
|
98
113
|
|
114
|
+
enum class StartThreadReason {
|
115
|
+
kInitialPool,
|
116
|
+
kNoWaitersWhenScheduling,
|
117
|
+
kNoWaitersWhenFinishedStarting,
|
118
|
+
};
|
119
|
+
|
99
120
|
static void ThreadFunc(StatePtr state);
|
100
121
|
// Start a new thread; throttled indicates whether the State::starting_thread
|
101
122
|
// variable is being used to throttle this threads creation against others or
|
102
123
|
// not: at thread pool startup we start several threads concurrently, but
|
103
124
|
// after that we only start one at a time.
|
104
|
-
static void StartThread(StatePtr state,
|
125
|
+
static void StartThread(StatePtr state, StartThreadReason reason);
|
105
126
|
void Postfork();
|
106
127
|
|
107
|
-
const
|
128
|
+
const unsigned reserve_threads_ =
|
129
|
+
grpc_core::Clamp(gpr_cpu_num_cores(), 2u, 32u);
|
108
130
|
const StatePtr state_ = std::make_shared<State>(reserve_threads_);
|
131
|
+
std::atomic<bool> quiesced_{false};
|
109
132
|
};
|
110
133
|
|
111
134
|
} // namespace experimental
|
@@ -151,7 +151,7 @@ grpc_error_handle grpc_tcp_set_non_block(SOCKET sock) {
|
|
151
151
|
status = WSAIoctl(sock, GRPC_FIONBIO, ¶m, sizeof(param), NULL, 0, &ret,
|
152
152
|
NULL, NULL);
|
153
153
|
return status == 0
|
154
|
-
?
|
154
|
+
? absl::OkStatus()
|
155
155
|
: GRPC_WSA_ERROR(WSAGetLastError(), "WSAIoctl(GRPC_FIONBIO)");
|
156
156
|
}
|
157
157
|
|
@@ -161,7 +161,7 @@ static grpc_error_handle set_dualstack(SOCKET sock) {
|
|
161
161
|
status = setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)¶m,
|
162
162
|
sizeof(param));
|
163
163
|
return status == 0
|
164
|
-
?
|
164
|
+
? absl::OkStatus()
|
165
165
|
: GRPC_WSA_ERROR(WSAGetLastError(), "setsockopt(IPV6_V6ONLY)");
|
166
166
|
}
|
167
167
|
|
@@ -173,7 +173,7 @@ static grpc_error_handle enable_socket_low_latency(SOCKET sock) {
|
|
173
173
|
if (status == SOCKET_ERROR) {
|
174
174
|
status = WSAGetLastError();
|
175
175
|
}
|
176
|
-
return status == 0 ?
|
176
|
+
return status == 0 ? absl::OkStatus()
|
177
177
|
: GRPC_WSA_ERROR(status, "setsockopt(TCP_NODELAY)");
|
178
178
|
}
|
179
179
|
|
@@ -182,12 +182,12 @@ static grpc_error_handle enable_socket_low_latency(SOCKET sock) {
|
|
182
182
|
absl::Status PrepareSocket(SOCKET sock) {
|
183
183
|
absl::Status err;
|
184
184
|
err = grpc_tcp_set_non_block(sock);
|
185
|
-
if (!
|
185
|
+
if (!err.ok()) return err;
|
186
186
|
err = enable_socket_low_latency(sock);
|
187
|
-
if (!
|
187
|
+
if (!err.ok()) return err;
|
188
188
|
err = set_dualstack(sock);
|
189
|
-
if (!
|
190
|
-
return
|
189
|
+
if (!err.ok()) return err;
|
190
|
+
return absl::OkStatus();
|
191
191
|
}
|
192
192
|
|
193
193
|
} // namespace experimental
|
@@ -26,7 +26,6 @@
|
|
26
26
|
#include <grpc/event_engine/memory_allocator.h>
|
27
27
|
#include <grpc/event_engine/slice_buffer.h>
|
28
28
|
|
29
|
-
#include "src/core/lib/event_engine/executor/threaded_executor.h"
|
30
29
|
#include "src/core/lib/event_engine/handle_containers.h"
|
31
30
|
#include "src/core/lib/event_engine/posix_engine/timer_manager.h"
|
32
31
|
#include "src/core/lib/event_engine/trace.h"
|
@@ -61,23 +60,30 @@ struct WindowsEventEngine::Closure final : public EventEngine::Closure {
|
|
61
60
|
}
|
62
61
|
};
|
63
62
|
|
64
|
-
WindowsEventEngine::WindowsEventEngine()
|
63
|
+
WindowsEventEngine::WindowsEventEngine()
|
64
|
+
: executor_(std::make_shared<ThreadPool>()),
|
65
|
+
iocp_(executor_.get()),
|
66
|
+
timer_manager_(executor_) {
|
65
67
|
WSADATA wsaData;
|
66
68
|
int status = WSAStartup(MAKEWORD(2, 0), &wsaData);
|
67
69
|
GPR_ASSERT(status == 0);
|
68
70
|
}
|
69
71
|
|
70
72
|
WindowsEventEngine::~WindowsEventEngine() {
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
73
|
+
{
|
74
|
+
grpc_core::MutexLock lock(&mu_);
|
75
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
|
76
|
+
for (auto handle : known_handles_) {
|
77
|
+
gpr_log(GPR_ERROR,
|
78
|
+
"WindowsEventEngine:%p uncleared TaskHandle at shutdown:%s",
|
79
|
+
this, HandleToString(handle).c_str());
|
80
|
+
}
|
77
81
|
}
|
82
|
+
GPR_ASSERT(GPR_LIKELY(known_handles_.empty()));
|
83
|
+
GPR_ASSERT(WSACleanup() == 0);
|
84
|
+
timer_manager_.Shutdown();
|
78
85
|
}
|
79
|
-
|
80
|
-
GPR_ASSERT(WSACleanup() == 0);
|
86
|
+
executor_->Quiesce();
|
81
87
|
}
|
82
88
|
|
83
89
|
bool WindowsEventEngine::Cancel(EventEngine::TaskHandle handle) {
|
@@ -101,11 +107,11 @@ EventEngine::TaskHandle WindowsEventEngine::RunAfter(
|
|
101
107
|
}
|
102
108
|
|
103
109
|
void WindowsEventEngine::Run(absl::AnyInvocable<void()> closure) {
|
104
|
-
executor_
|
110
|
+
executor_->Run(std::move(closure));
|
105
111
|
}
|
106
112
|
|
107
113
|
void WindowsEventEngine::Run(EventEngine::Closure* closure) {
|
108
|
-
executor_
|
114
|
+
executor_->Run(closure);
|
109
115
|
}
|
110
116
|
|
111
117
|
EventEngine::TaskHandle WindowsEventEngine::RunAfterInternal(
|
@@ -28,17 +28,21 @@
|
|
28
28
|
#include <grpc/event_engine/memory_allocator.h>
|
29
29
|
#include <grpc/event_engine/slice_buffer.h>
|
30
30
|
|
31
|
-
#include "src/core/lib/event_engine/executor/threaded_executor.h"
|
32
31
|
#include "src/core/lib/event_engine/handle_containers.h"
|
33
32
|
#include "src/core/lib/event_engine/posix_engine/timer_manager.h"
|
33
|
+
#include "src/core/lib/event_engine/thread_pool.h"
|
34
34
|
#include "src/core/lib/event_engine/windows/iocp.h"
|
35
35
|
#include "src/core/lib/gprpp/sync.h"
|
36
36
|
#include "src/core/lib/gprpp/time.h"
|
37
|
+
#include "src/core/lib/surface/init_internally.h"
|
37
38
|
|
38
39
|
namespace grpc_event_engine {
|
39
40
|
namespace experimental {
|
40
41
|
|
41
|
-
|
42
|
+
// TODO(ctiller): KeepsGrpcInitialized is an interim measure to ensure that
|
43
|
+
// event engine is shut down before we shut down iomgr.
|
44
|
+
class WindowsEventEngine : public EventEngine,
|
45
|
+
public grpc_core::KeepsGrpcInitialized {
|
42
46
|
public:
|
43
47
|
class WindowsEndpoint : public EventEngine::Endpoint {
|
44
48
|
public:
|
@@ -107,9 +111,9 @@ class WindowsEventEngine : public EventEngine {
|
|
107
111
|
TaskHandleSet known_handles_ ABSL_GUARDED_BY(mu_);
|
108
112
|
std::atomic<intptr_t> aba_token_{0};
|
109
113
|
|
110
|
-
|
111
|
-
ThreadedExecutor executor_{2};
|
114
|
+
std::shared_ptr<ThreadPool> executor_;
|
112
115
|
IOCP iocp_;
|
116
|
+
posix_engine::TimerManager timer_manager_;
|
113
117
|
};
|
114
118
|
|
115
119
|
} // namespace experimental
|
@@ -20,7 +20,6 @@
|
|
20
20
|
|
21
21
|
#include <algorithm>
|
22
22
|
#include <atomic>
|
23
|
-
#include <memory>
|
24
23
|
#include <string>
|
25
24
|
|
26
25
|
#include "absl/strings/ascii.h"
|
@@ -32,6 +31,7 @@
|
|
32
31
|
|
33
32
|
#include "src/core/lib/experiments/experiments.h"
|
34
33
|
#include "src/core/lib/gprpp/global_config.h"
|
34
|
+
#include "src/core/lib/gprpp/memory.h"
|
35
35
|
#include "src/core/lib/gprpp/no_destruct.h"
|
36
36
|
|
37
37
|
GPR_GLOBAL_CONFIG_DEFINE_STRING(
|
@@ -46,6 +46,13 @@ const char* const description_new_hpack_huffman_decoder =
|
|
46
46
|
"implementation.";
|
47
47
|
const char* const description_event_engine_client =
|
48
48
|
"Use EventEngine clients instead of iomgr's grpc_tcp_client";
|
49
|
+
const char* const description_monitoring_experiment =
|
50
|
+
"Placeholder experiment to prove/disprove our monitoring is working";
|
51
|
+
const char* const description_promise_based_client_call =
|
52
|
+
"If set, use the new gRPC promise based call code when it's appropriate "
|
53
|
+
"(ie when all filters in a stack are promise based)";
|
54
|
+
const char* const description_posix_event_engine_enable_polling =
|
55
|
+
"If set, enables polling on the default posix event engine.";
|
49
56
|
#ifdef NDEBUG
|
50
57
|
const bool kDefaultForDebugOnly = false;
|
51
58
|
#else
|
@@ -57,19 +64,23 @@ namespace grpc_core {
|
|
57
64
|
|
58
65
|
const ExperimentMetadata g_experiment_metadata[] = {
|
59
66
|
{"tcp_frame_size_tuning", description_tcp_frame_size_tuning, false},
|
60
|
-
{"tcp_read_chunks", description_tcp_read_chunks,
|
67
|
+
{"tcp_read_chunks", description_tcp_read_chunks, true},
|
61
68
|
{"tcp_rcv_lowat", description_tcp_rcv_lowat, false},
|
62
69
|
{"peer_state_based_framing", description_peer_state_based_framing, false},
|
63
70
|
{"flow_control_fixes", description_flow_control_fixes, false},
|
64
71
|
{"memory_pressure_controller", description_memory_pressure_controller,
|
65
72
|
false},
|
66
73
|
{"periodic_resource_quota_reclamation",
|
67
|
-
description_periodic_resource_quota_reclamation,
|
74
|
+
description_periodic_resource_quota_reclamation, true},
|
68
75
|
{"unconstrained_max_quota_buffer_size",
|
69
76
|
description_unconstrained_max_quota_buffer_size, false},
|
70
77
|
{"new_hpack_huffman_decoder", description_new_hpack_huffman_decoder,
|
71
78
|
kDefaultForDebugOnly},
|
72
79
|
{"event_engine_client", description_event_engine_client, false},
|
80
|
+
{"monitoring_experiment", description_monitoring_experiment, true},
|
81
|
+
{"promise_based_client_call", description_promise_based_client_call, false},
|
82
|
+
{"posix_event_engine_enable_polling",
|
83
|
+
description_posix_event_engine_enable_polling, kDefaultForDebugOnly},
|
73
84
|
};
|
74
85
|
|
75
86
|
} // namespace grpc_core
|
@@ -41,6 +41,13 @@ inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() {
|
|
41
41
|
}
|
42
42
|
inline bool IsNewHpackHuffmanDecoderEnabled() { return IsExperimentEnabled(8); }
|
43
43
|
inline bool IsEventEngineClientEnabled() { return IsExperimentEnabled(9); }
|
44
|
+
inline bool IsMonitoringExperimentEnabled() { return IsExperimentEnabled(10); }
|
45
|
+
inline bool IsPromiseBasedClientCallEnabled() {
|
46
|
+
return IsExperimentEnabled(11);
|
47
|
+
}
|
48
|
+
inline bool IsPosixEventEngineEnablePollingEnabled() {
|
49
|
+
return IsExperimentEnabled(12);
|
50
|
+
}
|
44
51
|
|
45
52
|
struct ExperimentMetadata {
|
46
53
|
const char* name;
|
@@ -48,7 +55,7 @@ struct ExperimentMetadata {
|
|
48
55
|
bool default_value;
|
49
56
|
};
|
50
57
|
|
51
|
-
constexpr const size_t kNumExperiments =
|
58
|
+
constexpr const size_t kNumExperiments = 13;
|
52
59
|
extern const ExperimentMetadata g_experiment_metadata[kNumExperiments];
|
53
60
|
|
54
61
|
} // namespace grpc_core
|
@@ -33,12 +33,15 @@
|
|
33
33
|
#include <grpc/support/log.h>
|
34
34
|
#include <grpc/support/sync.h>
|
35
35
|
|
36
|
+
#include "src/core/lib/gprpp/strerror.h"
|
37
|
+
|
36
38
|
static int ncpus = 0;
|
37
39
|
|
38
40
|
static void init_num_cpus() {
|
39
41
|
#ifndef GPR_MUSL_LIBC_COMPAT
|
40
42
|
if (sched_getcpu() < 0) {
|
41
|
-
gpr_log(GPR_ERROR, "Error determining current CPU: %s\n",
|
43
|
+
gpr_log(GPR_ERROR, "Error determining current CPU: %s\n",
|
44
|
+
grpc_core::StrError(errno).c_str());
|
42
45
|
ncpus = 1;
|
43
46
|
return;
|
44
47
|
}
|
@@ -68,7 +71,8 @@ unsigned gpr_cpu_current_cpu(void) {
|
|
68
71
|
}
|
69
72
|
int cpu = sched_getcpu();
|
70
73
|
if (cpu < 0) {
|
71
|
-
gpr_log(GPR_ERROR, "Error determining current CPU: %s\n",
|
74
|
+
gpr_log(GPR_ERROR, "Error determining current CPU: %s\n",
|
75
|
+
grpc_core::StrError(errno).c_str());
|
72
76
|
return 0;
|
73
77
|
}
|
74
78
|
if (static_cast<unsigned>(cpu) >= gpr_cpu_num_cores()) {
|
@@ -44,7 +44,6 @@
|
|
44
44
|
#include <grpc/support/log.h>
|
45
45
|
#include <grpc/support/time.h>
|
46
46
|
|
47
|
-
#include "src/core/lib/gpr/tls.h"
|
48
47
|
#include "src/core/lib/gprpp/examine_stack.h"
|
49
48
|
|
50
49
|
int gpr_should_log_stacktrace(gpr_log_severity severity);
|
@@ -77,7 +76,7 @@ void gpr_default_log(gpr_log_func_args* args) {
|
|
77
76
|
time_t timer;
|
78
77
|
gpr_timespec now = gpr_now(GPR_CLOCK_REALTIME);
|
79
78
|
struct tm tm;
|
80
|
-
static
|
79
|
+
static thread_local long tid(0);
|
81
80
|
if (tid == 0) tid = sys_gettid();
|
82
81
|
|
83
82
|
timer = static_cast<time_t>(now.tv_sec);
|
@@ -104,10 +103,10 @@ void gpr_default_log(gpr_log_func_args* args) {
|
|
104
103
|
? grpc_core::GetCurrentStackTrace()
|
105
104
|
: absl::nullopt;
|
106
105
|
if (stack_trace) {
|
107
|
-
fprintf(stderr, "%-
|
106
|
+
fprintf(stderr, "%-70s %s\n%s\n", prefix.c_str(), args->message,
|
108
107
|
stack_trace->c_str());
|
109
108
|
} else {
|
110
|
-
fprintf(stderr, "%-
|
109
|
+
fprintf(stderr, "%-70s %s\n", prefix.c_str(), args->message);
|
111
110
|
}
|
112
111
|
}
|
113
112
|
|
data/src/core/lib/gpr/string.h
CHANGED
@@ -31,6 +31,7 @@
|
|
31
31
|
|
32
32
|
#include "src/core/lib/gpr/string.h"
|
33
33
|
#include "src/core/lib/gpr/tmpfile.h"
|
34
|
+
#include "src/core/lib/gprpp/strerror.h"
|
34
35
|
|
35
36
|
FILE* gpr_tmpfile(const char* prefix, char** tmp_filename) {
|
36
37
|
FILE* result = nullptr;
|
@@ -45,13 +46,13 @@ FILE* gpr_tmpfile(const char* prefix, char** tmp_filename) {
|
|
45
46
|
fd = mkstemp(filename_template);
|
46
47
|
if (fd == -1) {
|
47
48
|
gpr_log(GPR_ERROR, "mkstemp failed for filename_template %s with error %s.",
|
48
|
-
filename_template,
|
49
|
+
filename_template, grpc_core::StrError(errno).c_str());
|
49
50
|
goto end;
|
50
51
|
}
|
51
52
|
result = fdopen(fd, "w+");
|
52
53
|
if (result == nullptr) {
|
53
54
|
gpr_log(GPR_ERROR, "Could not open file %s from fd %d (error = %s).",
|
54
|
-
filename_template, fd,
|
55
|
+
filename_template, fd, grpc_core::StrError(errno).c_str());
|
55
56
|
unlink(filename_template);
|
56
57
|
close(fd);
|
57
58
|
goto end;
|
@@ -0,0 +1,75 @@
|
|
1
|
+
// Copyright 2022 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include <grpc/support/port_platform.h>
|
16
|
+
|
17
|
+
#include "src/core/lib/gprpp/load_file.h"
|
18
|
+
|
19
|
+
#include <errno.h>
|
20
|
+
#include <stdio.h>
|
21
|
+
#include <string.h>
|
22
|
+
|
23
|
+
#include "absl/cleanup/cleanup.h"
|
24
|
+
#include "absl/status/status.h"
|
25
|
+
#include "absl/strings/str_cat.h"
|
26
|
+
|
27
|
+
#include <grpc/slice.h>
|
28
|
+
#include <grpc/support/alloc.h>
|
29
|
+
#include <grpc/support/log.h>
|
30
|
+
|
31
|
+
namespace grpc_core {
|
32
|
+
|
33
|
+
// Loads the content of a file into a slice. add_null_terminator will add a NULL
|
34
|
+
// terminator if true.
|
35
|
+
absl::StatusOr<Slice> LoadFile(std::string filename, bool add_null_terminator) {
|
36
|
+
unsigned char* contents = nullptr;
|
37
|
+
size_t contents_size = 0;
|
38
|
+
FILE* file;
|
39
|
+
size_t bytes_read = 0;
|
40
|
+
absl::Status error = absl::OkStatus();
|
41
|
+
auto sock_cleanup = absl::MakeCleanup([&file]() -> void {
|
42
|
+
if (file != nullptr) {
|
43
|
+
fclose(file);
|
44
|
+
}
|
45
|
+
});
|
46
|
+
|
47
|
+
file = fopen(filename.c_str(), "rb");
|
48
|
+
if (file == nullptr) {
|
49
|
+
error = absl::InternalError(
|
50
|
+
absl::StrCat("Failed to load file: ", filename,
|
51
|
+
" due to error(fdopen): ", strerror(errno)));
|
52
|
+
return error;
|
53
|
+
}
|
54
|
+
fseek(file, 0, SEEK_END);
|
55
|
+
// Converting to size_t on the assumption that it will not fail.
|
56
|
+
contents_size = static_cast<size_t>(ftell(file));
|
57
|
+
fseek(file, 0, SEEK_SET);
|
58
|
+
contents = static_cast<unsigned char*>(
|
59
|
+
gpr_malloc(contents_size + (add_null_terminator ? 1 : 0)));
|
60
|
+
bytes_read = fread(contents, 1, contents_size, file);
|
61
|
+
if (bytes_read < contents_size) {
|
62
|
+
gpr_free(contents);
|
63
|
+
GPR_ASSERT(ferror(file));
|
64
|
+
error = absl::InternalError(
|
65
|
+
absl::StrCat("Failed to load file: ", filename,
|
66
|
+
" due to error(fread): ", strerror(errno)));
|
67
|
+
return error;
|
68
|
+
}
|
69
|
+
if (add_null_terminator) {
|
70
|
+
contents[contents_size++] = 0;
|
71
|
+
}
|
72
|
+
return Slice(grpc_slice_new(contents, contents_size, gpr_free));
|
73
|
+
}
|
74
|
+
|
75
|
+
} // namespace grpc_core
|
@@ -0,0 +1,33 @@
|
|
1
|
+
// Copyright 2022 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_CORE_LIB_GPRPP_LOAD_FILE_H
|
16
|
+
#define GRPC_CORE_LIB_GPRPP_LOAD_FILE_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include <string>
|
21
|
+
|
22
|
+
#include "absl/status/statusor.h"
|
23
|
+
|
24
|
+
#include "src/core/lib/slice/slice.h"
|
25
|
+
|
26
|
+
namespace grpc_core {
|
27
|
+
|
28
|
+
// Loads the content of a file into a slice. add_null_terminator will add a NULL
|
29
|
+
// terminator if true.
|
30
|
+
absl::StatusOr<Slice> LoadFile(std::string filename, bool add_null_terminator);
|
31
|
+
} // namespace grpc_core
|
32
|
+
|
33
|
+
#endif // GRPC_CORE_LIB_GPRPP_LOAD_FILE_H
|
@@ -0,0 +1,46 @@
|
|
1
|
+
// Copyright 2022 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_CORE_LIB_GPRPP_PER_CPU_H
|
16
|
+
#define GRPC_CORE_LIB_GPRPP_PER_CPU_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include <cstddef>
|
21
|
+
#include <memory>
|
22
|
+
|
23
|
+
#include <grpc/support/cpu.h>
|
24
|
+
|
25
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
26
|
+
|
27
|
+
namespace grpc_core {
|
28
|
+
|
29
|
+
template <typename T>
|
30
|
+
class PerCpu {
|
31
|
+
public:
|
32
|
+
T& this_cpu() { return data_[ExecCtx::Get()->starting_cpu()]; }
|
33
|
+
|
34
|
+
T* begin() { return data_.get(); }
|
35
|
+
T* end() { return data_.get() + cpus_; }
|
36
|
+
const T* begin() const { return data_.get(); }
|
37
|
+
const T* end() const { return data_.get() + cpus_; }
|
38
|
+
|
39
|
+
private:
|
40
|
+
const size_t cpus_ = gpr_cpu_num_cores();
|
41
|
+
std::unique_ptr<T[]> data_{new T[cpus_]};
|
42
|
+
};
|
43
|
+
|
44
|
+
} // namespace grpc_core
|
45
|
+
|
46
|
+
#endif // GRPC_CORE_LIB_GPRPP_PER_CPU_H
|
@@ -16,9 +16,9 @@
|
|
16
16
|
|
17
17
|
#include <grpc/support/port_platform.h>
|
18
18
|
|
19
|
-
|
19
|
+
#include <string>
|
20
20
|
|
21
|
-
|
21
|
+
// IWYU pragma: no_include <bits/struct_stat.h>
|
22
22
|
|
23
23
|
#include "absl/status/status.h"
|
24
24
|
#include "absl/strings/string_view.h"
|
@@ -31,6 +31,7 @@
|
|
31
31
|
#include <grpc/support/log.h>
|
32
32
|
|
33
33
|
#include "src/core/lib/gprpp/stat.h"
|
34
|
+
#include "src/core/lib/gprpp/strerror.h"
|
34
35
|
|
35
36
|
namespace grpc_core {
|
36
37
|
|
@@ -39,9 +40,9 @@ absl::Status GetFileModificationTime(const char* filename, time_t* timestamp) {
|
|
39
40
|
GPR_ASSERT(timestamp != nullptr);
|
40
41
|
struct stat buf;
|
41
42
|
if (stat(filename, &buf) != 0) {
|
42
|
-
|
43
|
+
std::string error_msg = StrError(errno);
|
43
44
|
gpr_log(GPR_ERROR, "stat failed for filename %s with error %s.", filename,
|
44
|
-
error_msg);
|
45
|
+
error_msg.c_str());
|
45
46
|
return absl::Status(absl::StatusCode::kInternal, error_msg);
|
46
47
|
}
|
47
48
|
// Last file/directory modification time.
|
@@ -25,6 +25,7 @@
|
|
25
25
|
#include <grpc/support/log.h>
|
26
26
|
|
27
27
|
#include "src/core/lib/gprpp/stat.h"
|
28
|
+
#include "src/core/lib/gprpp/strerror.h"
|
28
29
|
|
29
30
|
namespace grpc_core {
|
30
31
|
|
@@ -33,9 +34,9 @@ absl::Status GetFileModificationTime(const char* filename, time_t* timestamp) {
|
|
33
34
|
GPR_ASSERT(timestamp != nullptr);
|
34
35
|
struct _stat buf;
|
35
36
|
if (_stat(filename, &buf) != 0) {
|
36
|
-
|
37
|
+
std::string error_msg = StrError(errno);
|
37
38
|
gpr_log(GPR_ERROR, "_stat failed for filename %s with error %s.", filename,
|
38
|
-
error_msg);
|
39
|
+
error_msg.c_str());
|
39
40
|
return absl::Status(absl::StatusCode::kInternal, error_msg);
|
40
41
|
}
|
41
42
|
// Last file/directory modification time.
|
@@ -38,7 +38,7 @@ struct google_rpc_Status;
|
|
38
38
|
struct upb_Arena;
|
39
39
|
}
|
40
40
|
|
41
|
-
#define
|
41
|
+
#define GRPC_RETURN_IF_ERROR(expr) \
|
42
42
|
do { \
|
43
43
|
const absl::Status status = (expr); \
|
44
44
|
if (!status.ok()) return status; \
|
@@ -47,7 +47,6 @@ struct upb_Arena;
|
|
47
47
|
namespace grpc_core {
|
48
48
|
|
49
49
|
/// This enum should have the same value of grpc_error_ints
|
50
|
-
// TODO(veblush): Use camel-case names once migration to absl::Status is done.
|
51
50
|
enum class StatusIntProperty {
|
52
51
|
/// 'errno' from the operating system
|
53
52
|
kErrorNo,
|
@@ -85,7 +84,6 @@ enum class StatusIntProperty {
|
|
85
84
|
};
|
86
85
|
|
87
86
|
/// This enum should have the same value of grpc_error_strs
|
88
|
-
// TODO(veblush): Use camel-case names once migration to absl::Status is done.
|
89
87
|
enum class StatusStrProperty {
|
90
88
|
/// top-level textual description of this error
|
91
89
|
kDescription,
|