Skip to content

Commit 032038d

Browse files
committed
refactor utest: rm GetThreadCount
* Removed "magical" `GetThreadCount()` API in @ref UTEST macro and friends. Use @ref engine::GetWorkerCount + @ref engine::current_task::GetTaskProcessor instead. commit_hash:29bf0432022f4cec7e3d0c71c807cddd761869ba
1 parent b7725a2 commit 032038d

24 files changed

Lines changed: 134 additions & 123 deletions

core/include/userver/engine/task/current_task.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ bool IsTaskProcessorThread() noexcept;
2828
/// Returns reference to the task processor executing the caller
2929
TaskProcessor& GetTaskProcessor();
3030

31+
/// @brief Get the number of worker threads in the current task processor.
32+
///
33+
/// The value is configured with the `task_processors.*NAME*.worker_threads`
34+
/// static option of @ref components::ManagerControllerComponent.
35+
///
36+
/// @see @ref engine::GetWorkerCount
37+
std::size_t GetWorkerCount();
38+
3139
/// Returns reference to the blocking task processor
3240
TaskProcessor& GetBlockingTaskProcessor();
3341

core/include/userver/engine/task/task_processor_fwd.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ class TaskProcessor;
2121
std::size_t GetQueueSize(const TaskProcessor& task_processor) noexcept;
2222

2323
/// @brief Get the number of worker threads in `task_processor`.
24+
///
25+
/// The value is configured with the `task_processors.*NAME*.worker_threads`
26+
/// static option of @ref components::ManagerControllerComponent.
27+
///
28+
/// @see @ref engine::current_task::GetWorkerCount
2429
std::size_t GetWorkerCount(const TaskProcessor& task_processor) noexcept;
2530

2631
/// @brief Register a function that runs on all threads on task processor

core/src/concurrent/impl/intrusive_stack_test.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#include <userver/engine/async.hpp>
1010
#include <userver/engine/sleep.hpp>
11+
#include <userver/engine/task/current_task.hpp>
1112
#include <userver/engine/task/task_with_result.hpp>
1213
#include <userver/utest/utest.hpp>
1314
#include <userver/utils/assert.hpp>
@@ -61,7 +62,7 @@ TEST(IntrusiveStack, CanHoldSingle) {
6162

6263
UTEST_MT(IntrusiveStack, TortureTest, 12) {
6364
// 'nodes' must outlive 'stack'
64-
utils::FixedArray<CheckedInt> nodes(GetThreadCount() * 2);
65+
utils::FixedArray<CheckedInt> nodes(engine::current_task::GetWorkerCount() * 2);
6566

6667
CheckedIntStack stack;
6768
for (auto& node : nodes) {
@@ -70,9 +71,9 @@ UTEST_MT(IntrusiveStack, TortureTest, 12) {
7071

7172
std::atomic<bool> keep_running{true};
7273
std::vector<engine::TaskWithResult<void>> tasks;
73-
tasks.reserve(GetThreadCount() - 1);
74+
tasks.reserve(engine::current_task::GetWorkerCount() - 1);
7475

75-
for (std::size_t i = 0; i < GetThreadCount() - 1; ++i) {
76+
for (std::size_t i = 0; i < engine::current_task::GetWorkerCount() - 1; ++i) {
7677
tasks.push_back(engine::AsyncNoTracing([&] {
7778
std::vector<CheckedInt*> our_nodes;
7879
our_nodes.reserve(nodes.size());

core/src/concurrent/impl/striped_intrusive_pool_test.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#include <userver/engine/async.hpp>
1313
#include <userver/engine/sleep.hpp>
14+
#include <userver/engine/task/current_task.hpp>
1415
#include <userver/engine/task/task_with_result.hpp>
1516
#include <userver/utest/utest.hpp>
1617
#include <userver/utils/algo.hpp>
@@ -96,16 +97,16 @@ TEST(StripedIntrusivePool, WalkUnsafe) {
9697

9798
UTEST_MT(StripedIntrusivePool, TortureTest, 12) {
9899
// 'nodes' must outlive 'stack'
99-
utils::FixedArray<CheckedInt> nodes(GetThreadCount() * 2);
100+
utils::FixedArray<CheckedInt> nodes(engine::current_task::GetWorkerCount() * 2);
100101

101102
constexpr std::size_t kMinNodesPerTask = 2;
102103
CheckedIntPool pool;
103104

104105
std::atomic<bool> keep_running{true};
105106
std::vector<engine::TaskWithResult<std::size_t>> tasks;
106-
tasks.reserve(GetThreadCount() - 1);
107+
tasks.reserve(engine::current_task::GetWorkerCount() - 1);
107108

108-
for (std::size_t i = 0; i < GetThreadCount() - 1; ++i) {
109+
for (std::size_t i = 0; i < engine::current_task::GetWorkerCount() - 1; ++i) {
109110
tasks.push_back(engine::AsyncNoTracing([&] {
110111
std::size_t nodes_created = 0;
111112
std::vector<std::unique_ptr<CheckedInt>> nodes_we_could_pop;

core/src/concurrent/intrusive_walkable_pool_test.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <vector>
77

88
#include <userver/engine/async.hpp>
9+
#include <userver/engine/task/current_task.hpp>
910
#include <userver/engine/task/task_with_result.hpp>
1011
#include <userver/utest/utest.hpp>
1112
#include <userver/utils/assert.hpp>
@@ -81,9 +82,9 @@ UTEST_MT(IntrusiveWalkablePool, TortureTest, 4) {
8182
// main test task may not resume promptly enough to flip a shared stop flag.
8283
const auto test_deadline = engine::Deadline::FromDuration(50ms);
8384
std::vector<engine::TaskWithResult<void>> tasks;
84-
tasks.reserve(GetThreadCount() - 1);
85+
tasks.reserve(engine::current_task::GetWorkerCount() - 1);
8586

86-
for (std::size_t i = 0; i < GetThreadCount() - 2; ++i) {
87+
for (std::size_t i = 0; i < engine::current_task::GetWorkerCount() - 2; ++i) {
8788
tasks.push_back(engine::AsyncNoTracing([&] {
8889
CheckedInt* nodes[kNodesPerTask]{};
8990

core/src/concurrent/mpsc_queue_test.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <userver/engine/async.hpp>
66
#include <userver/engine/exception.hpp>
77
#include <userver/engine/task/cancel.hpp>
8+
#include <userver/engine/task/current_task.hpp>
89
#include <userver/logging/log.hpp>
910
#include <userver/tracing/span.hpp>
1011
#include <userver/utest/utest.hpp>
@@ -176,7 +177,7 @@ void FooProcessor::DoProcess(const FooItem& item) { foo_items.push_back(item); }
176177
} // namespace
177178

178179
UTEST(MpscQueue, ProcessingRemainingItemsSample) {
179-
ASSERT_EQ(GetThreadCount(), 1)
180+
ASSERT_EQ(engine::current_task::GetWorkerCount(), 1)
180181
<< "In this test we can observe the exact moments of task switching, because there "
181182
"is a single TaskProcessor thread. We also don't need protecting 'foo_items'";
182183
foo_items.clear();
@@ -208,7 +209,7 @@ UTEST(MpscQueue, ProcessingRemainingItemsSample) {
208209
}
209210

210211
UTEST(MpscQueue, ProcessingRemainingItemsCancelled) {
211-
ASSERT_EQ(GetThreadCount(), 1)
212+
ASSERT_EQ(engine::current_task::GetWorkerCount(), 1)
212213
<< "In this test we can observe the exact moments of task switching, because there "
213214
"is a single TaskProcessor thread. We also don't need protecting 'foo_items'";
214215
foo_items.clear();

core/src/concurrent/mutex_set_test.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <userver/concurrent/mutex_set.hpp>
44
#include <userver/engine/async.hpp>
55
#include <userver/engine/sleep.hpp>
6+
#include <userver/engine/task/current_task.hpp>
67

78
USERVER_NAMESPACE_BEGIN
89

@@ -118,7 +119,7 @@ UTEST(MutexSet, Sample) {
118119
}
119120

120121
UTEST_MT(MutexSet, HighContention, 4) {
121-
const auto concurrent_jobs = GetThreadCount();
122+
const auto concurrent_jobs = engine::current_task::GetWorkerCount();
122123
concurrent::MutexSet<int> ms;
123124

124125
std::vector<engine::Task> tasks;

core/src/engine/impl/async_flat_combining_queue_test.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <userver/engine/async.hpp>
99
#include <userver/engine/sleep.hpp>
1010
#include <userver/engine/task/cancel.hpp>
11+
#include <userver/engine/task/current_task.hpp>
1112
#include <userver/utest/utest.hpp>
1213
#include <userver/utils/fixed_array.hpp>
1314

@@ -150,7 +151,7 @@ TEST(AsyncFlatCombiningQueueNoCoro, StressSync) {
150151
}
151152

152153
UTEST_MT(AsyncFlatCombiningQueue, StressAsync, 3) {
153-
const auto producers_count = GetThreadCount() - 1;
154+
const auto producers_count = engine::current_task::GetWorkerCount() - 1;
154155
const auto test_deadline = engine::Deadline::FromDuration(100ms);
155156
constexpr auto kTimeForModeChange = 1ms;
156157

core/src/engine/semaphore_test.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <userver/engine/deadline.hpp>
55
#include <userver/engine/single_consumer_event.hpp>
66
#include <userver/engine/sleep.hpp>
7+
#include <userver/engine/task/current_task.hpp>
78
#include <userver/utest/utest.hpp>
89
#include <userver/utils/async.hpp>
910
#include <userver/utils/fast_scope_guard.hpp>
@@ -207,8 +208,8 @@ UTEST_MT(Semaphore, LockPassing, 4) {
207208

208209
while (!test_deadline.IsReached()) {
209210
std::vector<engine::TaskWithResult<void>> tasks;
210-
tasks.reserve(GetThreadCount());
211-
for (size_t i = 0; i < GetThreadCount(); ++i) {
211+
tasks.reserve(engine::current_task::GetWorkerCount());
212+
for (size_t i = 0; i < engine::current_task::GetWorkerCount(); ++i) {
212213
tasks.push_back(engine::AsyncNoTracing(work));
213214
}
214215

@@ -222,9 +223,9 @@ UTEST_MT(Semaphore, LockFastPathRace, 5) {
222223
const auto test_deadline = engine::Deadline::FromDuration(100ms);
223224
engine::Semaphore sem{-1UL};
224225
std::vector<engine::TaskWithResult<void>> tasks;
225-
tasks.reserve(GetThreadCount());
226+
tasks.reserve(engine::current_task::GetWorkerCount());
226227

227-
for (std::size_t i = 0; i < GetThreadCount(); ++i) {
228+
for (std::size_t i = 0; i < engine::current_task::GetWorkerCount(); ++i) {
228229
tasks.push_back(engine::AsyncNoTracing([&] {
229230
std::size_t locks_taken = 0;
230231
const utils::FastScopeGuard unlock([&]() noexcept { sem.unlock_shared_count(locks_taken); });

core/src/engine/single_consumer_event_test.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <userver/engine/async.hpp>
77
#include <userver/engine/sleep.hpp>
88
#include <userver/engine/task/cancel.hpp>
9+
#include <userver/engine/task/current_task.hpp>
910
#include <userver/engine/wait_any.hpp>
1011
#include <userver/logging/log.hpp>
1112
#include <userver/utest/utest.hpp>
@@ -214,7 +215,10 @@ UTEST(SingleConsumerEvent, AwaitableTokenHasSpuriousWakeups) {
214215
// In this example, we actually want to wait on the predicate `count >= 3`, using SCE like a condition variable.
215216
// This test shows how it can be done without race conditions.
216217

217-
ASSERT_EQ(GetThreadCount(), 1) << "This test relies on Yield passing execution to the other task";
218+
ASSERT_EQ(engine::current_task::GetWorkerCount(), 1)
219+
<< "This test relies on Yield "
220+
"passing execution to the other "
221+
"task";
218222

219223
std::atomic<int> count{0};
220224
int wait_iterations{0};
@@ -296,7 +300,7 @@ UTEST_MT(SingleConsumerEvent, AsConditionVariable, 4) {
296300
engine::SingleConsumerEvent event;
297301
/// [CV init]
298302

299-
auto incrementors = utils::GenerateFixedArray(GetThreadCount() - 1, [&](std::size_t) {
303+
auto incrementors = utils::GenerateFixedArray(engine::current_task::GetWorkerCount() - 1, [&](std::size_t) {
300304
return engine::CriticalAsyncNoTracing([&count, &event] {
301305
while (!engine::current_task::ShouldCancel()) {
302306
/// [CV notifier]

0 commit comments

Comments
 (0)