From 2ca7bae4c288e007d6e49728b5189adc1f5a46bf Mon Sep 17 00:00:00 2001 From: xufei Date: Wed, 8 Jul 2026 17:15:27 +0800 Subject: [PATCH 1/2] fix report status error Signed-off-by: xufei --- dbms/src/Flash/Mpp/MPPTaskStatistics.cpp | 9 +++- dbms/src/Flash/Mpp/MPPTaskStatistics.h | 2 + .../ExecutorStatisticsCollector.cpp | 9 +++- .../Flash/tests/gtest_execution_summary.cpp | 42 +++++++++++++++++++ 4 files changed, 60 insertions(+), 2 deletions(-) diff --git a/dbms/src/Flash/Mpp/MPPTaskStatistics.cpp b/dbms/src/Flash/Mpp/MPPTaskStatistics.cpp index c22eaf429c5..0e61ccf8203 100644 --- a/dbms/src/Flash/Mpp/MPPTaskStatistics.cpp +++ b/dbms/src/Flash/Mpp/MPPTaskStatistics.cpp @@ -99,11 +99,13 @@ void MPPTaskStatistics::collectRuntimeStatistics() tipb::SelectResponse MPPTaskStatistics::genExecutionSummaryResponse() { + syncRUInfoToExecutorStatisticsCollector(); return executor_statistics_collector.genExecutionSummaryResponse(); } tipb::TiFlashExecutionInfo MPPTaskStatistics::genTiFlashExecutionInfo() { + syncRUInfoToExecutorStatisticsCollector(); return executor_statistics_collector.genTiFlashExecutionInfo(); } @@ -153,10 +155,15 @@ void MPPTaskStatistics::setMemoryPeak(Int64 memory_peak_) memory_peak = memory_peak_; } +void MPPTaskStatistics::syncRUInfoToExecutorStatisticsCollector() +{ + executor_statistics_collector.setLocalRUConsumption(ru_info); +} + void MPPTaskStatistics::setRUInfo(const RUConsumption & ru_info_) { ru_info = ru_info_; - executor_statistics_collector.setLocalRUConsumption(ru_info_); + syncRUInfoToExecutorStatisticsCollector(); } void MPPTaskStatistics::setCompileTimestamp(const Timestamp & start_timestamp, const Timestamp & end_timestamp) diff --git a/dbms/src/Flash/Mpp/MPPTaskStatistics.h b/dbms/src/Flash/Mpp/MPPTaskStatistics.h index de4edb846cf..00ffebff47a 100644 --- a/dbms/src/Flash/Mpp/MPPTaskStatistics.h +++ b/dbms/src/Flash/Mpp/MPPTaskStatistics.h @@ -61,6 +61,8 @@ class MPPTaskStatistics tipb::TiFlashExecutionInfo genTiFlashExecutionInfo(); private: + void syncRUInfoToExecutorStatisticsCollector(); + void recordInputBytes(DAGContext & dag_context); const LoggerPtr log; diff --git a/dbms/src/Flash/Statistics/ExecutorStatisticsCollector.cpp b/dbms/src/Flash/Statistics/ExecutorStatisticsCollector.cpp index 3b4799e147d..a6aed782ee3 100644 --- a/dbms/src/Flash/Statistics/ExecutorStatisticsCollector.cpp +++ b/dbms/src/Flash/Statistics/ExecutorStatisticsCollector.cpp @@ -156,7 +156,14 @@ tipb::TiFlashExecutionInfo ExecutorStatisticsCollector::genTiFlashExecutionInfo( void ExecutorStatisticsCollector::setLocalRUConsumption(const RUConsumption & ru_info) { - local_ru = std::make_optional(); + if (!local_ru) + { + local_ru.emplace(); + } + else + { + local_ru->Clear(); + } local_ru->set_r_r_u(ru_info.cpu_ru + ru_info.read_ru); local_ru->set_total_cpu_time_ms(toCPUTimeMillisecond(ru_info.cpu_time_ns)); local_ru->set_read_bytes(ru_info.read_bytes); diff --git a/dbms/src/Flash/tests/gtest_execution_summary.cpp b/dbms/src/Flash/tests/gtest_execution_summary.cpp index e5738f393d0..b369973c37a 100644 --- a/dbms/src/Flash/tests/gtest_execution_summary.cpp +++ b/dbms/src/Flash/tests/gtest_execution_summary.cpp @@ -12,9 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include #include #include #include +#include namespace DB { @@ -150,6 +152,46 @@ try } CATCH +TEST_F(ExecutionSummaryTestRunner, genMPPTaskExecutionInfoWithoutSetRUInfo) +try +{ + auto request = context.scan("test_db", "test_table").limit(1).exchangeSender(tipb::PassThrough).build(context); + request->set_collect_execution_summaries(true); + + mpp::TaskMeta meta; + meta.set_gather_id(1); + meta.set_task_id(1); + meta.set_query_ts(1); + meta.set_local_query_id(1); + meta.set_server_id(1); + meta.set_start_ts(1); + + DAGContext dag_context(*request, meta, false); + MPPTaskStatistics task_statistics(MPPTaskId(meta), "test-host"); + task_statistics.initializeExecutorDAG(&dag_context); + + auto execution_info = task_statistics.genTiFlashExecutionInfo(); + const auto root_executor_id = dag_context.dag_request.rootExecutorID(); + const tipb::ExecutorExecutionSummary * root_summary = nullptr; + for (const auto & summary : execution_info.execution_summaries()) + { + if (summary.executor_id() == root_executor_id) + { + root_summary = &summary; + break; + } + } + + ASSERT_NE(root_summary, nullptr); + ASSERT_TRUE(root_summary->has_ru_consumption()); + resource_manager::Consumption ru_consumption; + ASSERT_TRUE(ru_consumption.ParseFromString(root_summary->ru_consumption())); + ASSERT_DOUBLE_EQ(0.0, ru_consumption.r_r_u()); + ASSERT_DOUBLE_EQ(0.0, ru_consumption.read_bytes()); + ASSERT_DOUBLE_EQ(0.0, ru_consumption.total_cpu_time_ms()); +} +CATCH + TEST_F(ExecutionSummaryTestRunner, treeBased) try { From e1d20b8e6c09bf9abc1e204013d6c5112ea19b97 Mon Sep 17 00:00:00 2001 From: xufei Date: Wed, 8 Jul 2026 22:26:35 +0800 Subject: [PATCH 2/2] fix ut Signed-off-by: xufei --- dbms/src/Flash/tests/gtest_execution_summary.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dbms/src/Flash/tests/gtest_execution_summary.cpp b/dbms/src/Flash/tests/gtest_execution_summary.cpp index b369973c37a..3b4bfb74148 100644 --- a/dbms/src/Flash/tests/gtest_execution_summary.cpp +++ b/dbms/src/Flash/tests/gtest_execution_summary.cpp @@ -13,6 +13,7 @@ // limitations under the License. #include +#include #include #include #include @@ -167,6 +168,8 @@ try meta.set_start_ts(1); DAGContext dag_context(*request, meta, false); + // ExchangeSenderStatistics reads tunnel_set while initializing the mock MPP DAG. + dag_context.tunnel_set = std::make_shared("test-host"); MPPTaskStatistics task_statistics(MPPTaskId(meta), "test-host"); task_statistics.initializeExecutorDAG(&dag_context);