Skip to content

Commit 83a4939

Browse files
authored
fix mock LAC unit test data race (#10185)
close #10139 Signed-off-by: guo-shaoge <[email protected]>
1 parent 36e38e3 commit 83a4939

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

dbms/src/Flash/Pipeline/Schedule/TaskQueues/tests/gtest_resource_control_queue.cpp

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -109,27 +109,34 @@ void setupNopLAC()
109109
{
110110
LocalAdmissionController::global_instance.reset();
111111
LocalAdmissionController::global_instance = std::make_unique<MockLocalAdmissionController>();
112-
LocalAdmissionController::global_instance->consume_resource_func = nopConsumeResource;
113-
LocalAdmissionController::global_instance->get_priority_func = nopGetPriority;
112+
{
113+
std::lock_guard lock(LocalAdmissionController::global_instance->mu);
114+
LocalAdmissionController::global_instance->consume_resource_func = nopConsumeResource;
115+
LocalAdmissionController::global_instance->get_priority_func = nopGetPriority;
116+
}
114117
}
115118

116119
void setupMockLAC(const std::vector<ResourceGroupPtr> & resource_groups)
117120
{
118121
LocalAdmissionController::global_instance.reset();
119122
LocalAdmissionController::global_instance = std::make_unique<MockLocalAdmissionController>();
120-
LocalAdmissionController::global_instance->consume_resource_func = dynamicConsumeResource;
121-
LocalAdmissionController::global_instance->get_priority_func = dynamicGetPriority;
122123

123124
uint64_t max_ru_per_sec = 0;
124-
for (const auto & resource_group : resource_groups)
125125
{
126-
auto cur_ru_per_sec = resource_group->user_ru_per_sec;
127-
if (max_ru_per_sec < cur_ru_per_sec)
128-
max_ru_per_sec = cur_ru_per_sec;
126+
std::lock_guard lock(LocalAdmissionController::global_instance->mu);
127+
LocalAdmissionController::global_instance->consume_resource_func = dynamicConsumeResource;
128+
LocalAdmissionController::global_instance->get_priority_func = dynamicGetPriority;
129129

130-
LocalAdmissionController::global_instance->resource_groups.insert({resource_group->name, resource_group});
130+
for (const auto & resource_group : resource_groups)
131+
{
132+
auto cur_ru_per_sec = resource_group->user_ru_per_sec;
133+
if (max_ru_per_sec < cur_ru_per_sec)
134+
max_ru_per_sec = cur_ru_per_sec;
135+
136+
LocalAdmissionController::global_instance->resource_groups.insert({resource_group->name, resource_group});
137+
}
138+
LocalAdmissionController::global_instance->max_ru_per_sec = max_ru_per_sec;
131139
}
132-
LocalAdmissionController::global_instance->max_ru_per_sec = max_ru_per_sec;
133140
}
134141

135142
std::vector<TaskPtr> setupTasks(
@@ -469,7 +476,10 @@ TEST_F(TestResourceControlQueue, RunOutOfRU)
469476
LocalAdmissionController::global_instance->resource_groups.insert({rg_name, resource_group});
470477
LocalAdmissionController::global_instance->max_ru_per_sec = new_ru_per_sec;
471478
}
472-
LocalAdmissionController::global_instance->refill_token_callback();
479+
{
480+
std::lock_guard lock(LocalAdmissionController::global_instance->call_back_mutex);
481+
LocalAdmissionController::global_instance->refill_token_callback();
482+
}
473483
ASSERT_NO_THROW(exec_context.waitFor(std::chrono::seconds(10)));
474484
}
475485

0 commit comments

Comments
 (0)