From 1cefcae2a95402055f2f392a1dd0dce580a20d90 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Thu, 24 Jul 2025 09:25:41 -0400 Subject: [PATCH] common/async: remove null_yield support for max_concurrent_for_each() max_concurrent_for_each() is a thin wrapper around spawn_throttle. remove its support for null_yield too Signed-off-by: Casey Bodley --- src/common/async/max_concurrent_for_each.h | 15 ++-- .../test_async_max_concurrent_for_each.cc | 78 ------------------- 2 files changed, 7 insertions(+), 86 deletions(-) diff --git a/src/common/async/max_concurrent_for_each.h b/src/common/async/max_concurrent_for_each.h index dd272b957eb0a..da8b5c0d9cffb 100644 --- a/src/common/async/max_concurrent_for_each.h +++ b/src/common/async/max_concurrent_for_each.h @@ -22,7 +22,6 @@ #include #include "cancel_on_error.h" #include "co_throttle.h" -#include "yield_context.h" #include "spawn_throttle.h" namespace ceph::async { @@ -37,10 +36,10 @@ namespace ceph::async { /// \code /// void child(task& t, boost::asio::yield_context yield); /// -/// void parent(std::span tasks, optional_yield y) +/// void parent(std::span tasks, boost::asio::yield_context yield) /// { /// // process all tasks, up to 10 at a time -/// max_concurrent_for_each(tasks, 10, y, child); +/// max_concurrent_for_each(tasks, 10, yield, child); /// } /// \endcode template ) auto max_concurrent_for_each(Range&& range, size_t max_concurrent, - optional_yield y, + boost::asio::yield_context yield, Func&& func, cancel_on_error on_error = cancel_on_error::none) { return max_concurrent_for_each(std::begin(range), std::end(range), - max_concurrent, y, std::forward(func), - on_error); + max_concurrent, yield, + std::forward(func), on_error); } // \overload diff --git a/src/test/common/test_async_max_concurrent_for_each.cc b/src/test/common/test_async_max_concurrent_for_each.cc index b0880dfdb8538..1656df5bcb194 100644 --- a/src/test/common/test_async_max_concurrent_for_each.cc +++ b/src/test/common/test_async_max_concurrent_for_each.cc @@ -49,84 +49,6 @@ struct null_sentinel {}; bool operator==(const char* c, null_sentinel) { return !*c; } static_assert(std::sentinel_for); -TEST(iterator_null_yield, empty) -{ - int* end = nullptr; - auto cr = [] (int, asio::yield_context) {}; - max_concurrent_for_each(end, end, 10, null_yield, cr); -} - -TEST(iterator_null_yield, over_limit) -{ - int concurrent = 0; - int max_concurrent = 0; - int completed = 0; - - auto cr = [&] (int, asio::yield_context yield) { - ++concurrent; - if (max_concurrent < concurrent) { - max_concurrent = concurrent; - } - - wait_for(1ms, yield); - - --concurrent; - ++completed; - }; - - constexpr auto arr = std::array{1,2,3,4,5,6,7,8,9,10}; - max_concurrent_for_each(begin(arr), end(arr), 2, null_yield, cr); - - EXPECT_EQ(0, concurrent); - EXPECT_EQ(2, max_concurrent); - EXPECT_EQ(10, completed); -} - -TEST(iterator_null_yield, sentinel) -{ - const char* begin = "hello"; - null_sentinel end; - - size_t completed = 0; - auto cr = [&completed] (char c, asio::yield_context) { ++completed; }; - max_concurrent_for_each(begin, end, 10, null_yield, cr); - EXPECT_EQ(completed, 5); -} - -TEST(range_null_yield, empty) -{ - constexpr std::array arr{}; - auto cr = [] (int, asio::yield_context) {}; - max_concurrent_for_each(arr, 10, null_yield, cr); -} - -TEST(range_null_yield, over_limit) -{ - int concurrent = 0; - int max_concurrent = 0; - int completed = 0; - - auto cr = [&] (int, asio::yield_context yield) { - ++concurrent; - if (max_concurrent < concurrent) { - max_concurrent = concurrent; - } - - wait_for(1ms, yield); - - --concurrent; - ++completed; - }; - - constexpr auto arr = std::array{1,2,3,4,5,6,7,8,9,10}; - max_concurrent_for_each(arr, 2, null_yield, cr); - - EXPECT_EQ(0, concurrent); - EXPECT_EQ(2, max_concurrent); - EXPECT_EQ(10, completed); -} - - TEST(iterator_yield, empty) { int* end = nullptr; -- 2.39.5