zanmato1984 commented on code in PR #45268:
URL: https://github.com/apache/arrow/pull/45268#discussion_r1928372488
##########
cpp/src/arrow/acero/task_util.cc:
##########
@@ -369,17 +369,25 @@ Status TaskSchedulerImpl::ScheduleMore(size_t thread_id,
int num_tasks_finished)
int group_id = tasks[i].first;
int64_t task_id = tasks[i].second;
RETURN_NOT_OK(schedule_impl_([this, group_id, task_id](size_t thread_id)
-> Status {
- RETURN_NOT_OK(ScheduleMore(thread_id, 1));
-
bool task_group_finished = false;
- RETURN_NOT_OK(ExecuteTask(thread_id, group_id, task_id,
&task_group_finished));
+ // PostExecuteTask must be called later if any error ocurres during task
execution
+ // (including ScheduleMore), so we preserve the status.
+ auto status = [&]() {
+ RETURN_NOT_OK(ScheduleMore(thread_id, 1));
+ return ExecuteTask(thread_id, group_id, task_id, &task_group_finished);
+ }();
+
+ if (!status.ok()) {
+ task_group_finished = PostExecuteTask(thread_id, group_id);
+ }
if (task_group_finished) {
bool all_task_groups_finished = false;
- return OnTaskGroupFinished(thread_id, group_id,
&all_task_groups_finished);
+ RETURN_NOT_OK(
+ OnTaskGroupFinished(thread_id, group_id,
&all_task_groups_finished));
Review Comment:
Yeah, I don't think it really matters which error to return. So I chose the
one can most simplify the code :)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]