This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.1 by this push:
new a8ca832eebd branch-4.1: [enhancement](limitreach) FE receives many
limit reach error messages and make very confused #62842 (#65128)
a8ca832eebd is described below
commit a8ca832eebd1d8c17052620def84ed5f88860c9a
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Jul 2 14:58:47 2026 +0800
branch-4.1: [enhancement](limitreach) FE receives many limit reach error
messages and make very confused #62842 (#65128)
Cherry-picked from #62842
Co-authored-by: yiguolei <[email protected]>
---
be/src/exec/pipeline/pipeline_fragment_context.cpp | 30 +++++++---------------
be/src/exec/pipeline/pipeline_fragment_context.h | 7 +++--
2 files changed, 12 insertions(+), 25 deletions(-)
diff --git a/be/src/exec/pipeline/pipeline_fragment_context.cpp
b/be/src/exec/pipeline/pipeline_fragment_context.cpp
index c8f83ad0781..ef58e664462 100644
--- a/be/src/exec/pipeline/pipeline_fragment_context.cpp
+++ b/be/src/exec/pipeline/pipeline_fragment_context.cpp
@@ -146,7 +146,6 @@ PipelineFragmentContext::PipelineFragmentContext(
_exec_env(exec_env),
_query_ctx(std::move(query_ctx)),
_call_back(call_back),
- _is_report_on_cancel(true),
_params(request),
_parallel_instances(_params.__isset.parallel_instances ?
_params.parallel_instances : 0),
_need_notify_close(request.__isset.need_notify_close ?
request.need_notify_close
@@ -241,9 +240,7 @@ void PipelineFragmentContext::cancel(const Status reason) {
}
_query_ctx->cancel(reason, _fragment_id);
- if (reason.is<ErrorCode::LIMIT_REACH>()) {
- _is_report_on_cancel = false;
- } else {
+ if (!reason.is<ErrorCode::LIMIT_REACH>() &&
!reason.is<ErrorCode::FINISHED>()) {
for (auto& id : _fragment_instance_ids) {
LOG(WARNING) << "PipelineFragmentContext cancel instance: " <<
print_id(id);
}
@@ -2228,26 +2225,17 @@ void
PipelineFragmentContext::_coordinator_callback(const ReportStatusRequest& r
Status PipelineFragmentContext::send_report(bool done) {
Status exec_status = _query_ctx->exec_status();
- // If plan is done successfully, but _is_report_success is false,
- // no need to send report.
- // Load will set _is_report_success to true because load wants to know
- // the process.
- if (!_is_report_success && done && exec_status.ok()) {
- return Status::OK();
- }
- // If both _is_report_success and _is_report_on_cancel are false,
- // which means no matter query is success or failed, no report is needed.
- // This may happen when the query limit reached and
- // a internal cancellation being processed
- // When limit is reached the fragment is also cancelled, but
_is_report_on_cancel will
- // be set to false, to avoid sending fault report to FE.
- if (!_is_report_success && !_is_report_on_cancel) {
- if (done) {
- // if done is true, which means the query is finished
successfully, we can safely close the fragment instance without sending report
to FE, and just return OK status here.
+ if (!_is_report_success) {
+ // _is_report_success means this is not a load job, do not need to
report to fe periodically.
+ if (exec_status.is<ErrorCode::LIMIT_REACH>() ||
exec_status.is<ErrorCode::FINISHED>() ||
+ exec_status.ok()) {
return Status::OK();
+ } else {
+ // else it means there is some error in processing the query, and
we need to send report to FE to let FE know the error.
}
- return Status::NeedSendAgain("");
+ } else {
+ // This is a load job, need report the process status to FE periodly,
so that FE can know the process of the load job.
}
std::vector<RuntimeState*> runtime_states;
diff --git a/be/src/exec/pipeline/pipeline_fragment_context.h
b/be/src/exec/pipeline/pipeline_fragment_context.h
index c220ea386f6..f8a1bfea229 100644
--- a/be/src/exec/pipeline/pipeline_fragment_context.h
+++ b/be/src/exec/pipeline/pipeline_fragment_context.h
@@ -227,6 +227,9 @@ private:
std::atomic<int> _total_tasks = 0;
std::unique_ptr<RuntimeProfile> _fragment_level_profile;
+ // This is used by loading process to report Fragment exec status to FE,
FE need fragment status to
+ // check if the loading process is finished. And during the report, BE
will send the loading message to FE,
+ // for example the loading error, commit rows num etc.
bool _is_report_success = false;
std::unique_ptr<RuntimeState> _runtime_state;
@@ -244,10 +247,6 @@ private:
std::function<void(RuntimeState*, Status*)> _call_back;
std::atomic_bool _is_fragment_instance_closed = false;
- // If this is set to false, and '_is_report_success' is false as well,
- // This executor will not report status to FE on being cancelled.
- bool _is_report_on_cancel;
-
// 0 indicates reporting is in progress or not required
std::atomic_bool _disable_period_report = true;
std::atomic_uint64_t _previous_report_time = 0;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]