This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new fb40871b070 [fix](explain) fix NPE when explain verbose with partition batch mode (#40969) fb40871b070 is described below commit fb40871b0705ad7b792ac493b6ba2d336e6efe61 Author: Mingyu Chen <morning...@163.com> AuthorDate: Tue Sep 24 13:55:05 2024 +0800 [fix](explain) fix NPE when explain verbose with partition batch mode (#40969) If trigger "fetching partition in batch mode" feature, the `explain verbose` for external table may cause NPE. Because in batch mode, the scan range is not initialized in plan phase. ``` org.apache.doris.common.NereidsException: errCode = 2, detailMessage = java.lang.NullPointerException at org.apache.doris.qe.StmtExecutor.executeByNereids(StmtExecutor.java:767) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:591) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.queryRetry(StmtExecutor.java:554) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:544) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.ConnectProcessor.executeQuery(ConnectProcessor.java:323) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:234) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.MysqlConnectProcessor.handleQuery(MysqlConnectProcessor.java:194) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.MysqlConnectProcessor.dispatch(MysqlConnectProcessor.java:222) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.MysqlConnectProcessor.processOnce(MysqlConnectProcessor.java:281) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.mysql.ReadListener.lambda$handleEvent$0(ReadListener.java:52) ~[doris-fe.jar:1.2-SNAPSHOT] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?] at java.lang.Thread.run(Thread.java:833) ~[?:?] Caused by: org.apache.doris.common.AnalysisException: errCode = 2, detailMessage = java.lang.NullPointerException ... 13 more Caused by: java.lang.NullPointerException at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:903) ~[guava-32.1.2-jre.jar:?] at com.google.common.collect.AbstractMultimap.putAll(AbstractMultimap.java:83) ~[guava-32.1.2-jre.jar:?] at com.google.common.collect.ArrayListMultimap.putAll(ArrayListMultimap.java:62) ~[guava-32.1.2-jre.jar:?] at org.apache.doris.datasource.FileScanNode.getNodeExplainString(FileScanNode.java:141) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.planner.PlanNode.getExplainString(PlanNode.java:548) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.planner.PlanFragment.getExplainString(PlanFragment.java:369) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.planner.Planner.getExplainString(Planner.java:93) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.nereids.NereidsPlanner.getExplainString(NereidsPlanner.java:627) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.nereids.trees.plans.commands.ExplainCommand.run(ExplainCommand.java:96) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.executeByNereids(StmtExecutor.java:736) ~[doris-fe.jar:1.2-SNAPSHOT] ... 12 more ``` --- .../main/java/org/apache/doris/datasource/FileScanNode.java | 2 +- .../suites/external_table_p0/hive/test_hive_partitions.groovy | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java index 5d47f3eac73..9845c0070fc 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java @@ -133,7 +133,7 @@ public abstract class FileScanNode extends ExternalScanNode { output.append(prefix).append("partition=").append(selectedPartitionNum).append("/").append(totalPartitionNum) .append("\n"); - if (detailLevel == TExplainLevel.VERBOSE) { + if (detailLevel == TExplainLevel.VERBOSE && !isBatchMode()) { output.append(prefix).append("backends:").append("\n"); Multimap<Long, TFileRangeDesc> scanRangeLocationsMap = ArrayListMultimap.create(); // 1. group by backend id diff --git a/regression-test/suites/external_table_p0/hive/test_hive_partitions.groovy b/regression-test/suites/external_table_p0/hive/test_hive_partitions.groovy index 67d565fc2c1..0e41adc3127 100644 --- a/regression-test/suites/external_table_p0/hive/test_hive_partitions.groovy +++ b/regression-test/suites/external_table_p0/hive/test_hive_partitions.groovy @@ -91,7 +91,16 @@ suite("test_hive_partitions", "p0,external,hive,external_docker,external_docker_ q01() - sql """drop catalog if exists ${catalog_name}""" + sql """set num_partitions_in_batch_mode=1""" + explain { + sql ("select * from partition_table") + verbose (true) + + contains "(approximate)inputSplitNum=60" + } + sql """unset variable num_partitions_in_batch_mode""" + + // sql """drop catalog if exists ${catalog_name}""" } finally { } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org