-
Notifications
You must be signed in to change notification settings - Fork 411
Closed
Labels
component/computecomponent/coprocessorseverity/moderatetype/bugThe issue is confirmed as a bug.The issue is confirmed as a bug.
Description
Bug Report
In #3937, The type of profile_streams_map is changed from std::map<String, ProfileStreamsInfo> to std::unordered_map<String, BlockInputStreams>. https://github.com/pingcap/tiflash/pull/3937/files#diff-6bc200816961f4a8ad0c24cfaf2d0975ad614e78d153fda6566c44c931908646R263
For executor list, executor_id is in the form of ${i}_${type}, so the order of map<executor_id, profile_stream> is the same as the order of executor list. And the executor summary depends on the order of the executor list.
tiflash/dbms/src/Flash/Coprocessor/DAGQueryBlock.cpp
Lines 172 to 232 in f84d7e3
| DAGQueryBlock::DAGQueryBlock(UInt32 id_, const ::google::protobuf::RepeatedPtrField<tipb::Executor> & executors) | |
| : id(id_) | |
| , root(nullptr) | |
| , qb_column_prefix("__QB_" + std::to_string(id_) + "_") | |
| { | |
| for (int i = executors.size() - 1; i >= 0; i--) | |
| { | |
| switch (executors[i].tp()) | |
| { | |
| case tipb::ExecType::TypeTableScan: | |
| GET_METRIC(tiflash_coprocessor_executor_count, type_ts).Increment(); | |
| assignOrThrowException(&source, &executors[i], SOURCE_NAME); | |
| /// use index as the prefix for executor name so when we sort by | |
| /// the executor name, it will result in the same order as it is | |
| /// in the dag_request, this is needed when filling execution_summary | |
| /// in DAGDriver | |
| if (executors[i].has_executor_id()) | |
| source_name = executors[i].executor_id(); | |
| else | |
| source_name = std::to_string(i) + "_tablescan"; | |
| break; | |
| case tipb::ExecType::TypeSelection: | |
| GET_METRIC(tiflash_coprocessor_executor_count, type_sel).Increment(); | |
| assignOrThrowException(&selection, &executors[i], SEL_NAME); | |
| if (executors[i].has_executor_id()) | |
| selection_name = executors[i].executor_id(); | |
| else | |
| selection_name = std::to_string(i) + "_selection"; | |
| break; | |
| case tipb::ExecType::TypeStreamAgg: | |
| case tipb::ExecType::TypeAggregation: | |
| GET_METRIC(tiflash_coprocessor_executor_count, type_agg).Increment(); | |
| assignOrThrowException(&aggregation, &executors[i], AGG_NAME); | |
| if (executors[i].has_executor_id()) | |
| aggregation_name = executors[i].executor_id(); | |
| else | |
| aggregation_name = std::to_string(i) + "_aggregation"; | |
| break; | |
| case tipb::ExecType::TypeTopN: | |
| GET_METRIC(tiflash_coprocessor_executor_count, type_topn).Increment(); | |
| assignOrThrowException(&limit_or_topn, &executors[i], TOPN_NAME); | |
| if (executors[i].has_executor_id()) | |
| limit_or_topn_name = executors[i].executor_id(); | |
| else | |
| limit_or_topn_name = std::to_string(i) + "_limitOrTopN"; | |
| break; | |
| case tipb::ExecType::TypeLimit: | |
| GET_METRIC(tiflash_coprocessor_executor_count, type_limit).Increment(); | |
| assignOrThrowException(&limit_or_topn, &executors[i], LIMIT_NAME); | |
| if (executors[i].has_executor_id()) | |
| limit_or_topn_name = executors[i].executor_id(); | |
| else | |
| limit_or_topn_name = std::to_string(i) + "_limitOrTopN"; | |
| break; | |
| default: | |
| throw TiFlashException( | |
| "Unsupported executor in DAG request: " + executors[i].DebugString(), | |
| Errors::Coprocessor::Unimplemented); | |
| } | |
| } | |
| } |
| void DAGResponseWriter::fillTiExecutionSummary( |
Fortunately, executor list is currently only used in TiSpark :)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
component/computecomponent/coprocessorseverity/moderatetype/bugThe issue is confirmed as a bug.The issue is confirmed as a bug.