This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch branch-1.2-lts
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-1.2-lts by this push:
     new 666d3f5b06 [fix](catalog) wrong required slot info causing BE crash. 
(#21702)
666d3f5b06 is described below

commit 666d3f5b06751bc3cd811f82dc4246acf7833fcb
Author: Qi Chen <kaka11.c...@gmail.com>
AuthorDate: Wed Jul 12 09:33:17 2023 +0800

    [fix](catalog) wrong required slot info causing BE crash. (#21702)
    
    Merge #21598 to branch-1.2-lts.
    Co-Authored-By: morningman morning...@163.com
---
 .../apache/doris/datasource/hive/HiveMetaStoreCache.java  |  2 +-
 .../doris/planner/external/ExternalFileScanNode.java      |  1 +
 .../apache/doris/planner/external/HiveScanProvider.java   | 15 ++++++++++++++-
 .../hive/test_external_catalog_hive.out                   |  3 +++
 .../hive/test_external_catalog_hive.groovy                |  2 ++
 5 files changed, 21 insertions(+), 2 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
index 778fb10262..169ed3727b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
@@ -701,7 +701,7 @@ public class HiveMetaStoreCache {
                 return dummyKey.equals(((FileCacheKey) obj).dummyKey);
             }
             return location.equals(((FileCacheKey) obj).location)
-                && partitionValues.equals(((FileCacheKey) 
obj).partitionValues);
+                && Objects.equals(partitionValues, ((FileCacheKey) 
obj).partitionValues);
         }
 
         @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/external/ExternalFileScanNode.java
 
b/fe/fe-core/src/main/java/org/apache/doris/planner/external/ExternalFileScanNode.java
index 1aadb1e5c6..c94305233f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/planner/external/ExternalFileScanNode.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/planner/external/ExternalFileScanNode.java
@@ -353,6 +353,7 @@ public class ExternalFileScanNode extends ExternalScanNode {
             if (scanProvider instanceof HiveScanProvider) {
                 this.totalPartitionNum = ((HiveScanProvider) 
scanProvider).getTotalPartitionNum();
                 this.readPartitionNum = ((HiveScanProvider) 
scanProvider).getReadPartitionNum();
+                ((HiveScanProvider) scanProvider).updateRequiredSlots(context);
             }
         }
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/external/HiveScanProvider.java
 
b/fe/fe-core/src/main/java/org/apache/doris/planner/external/HiveScanProvider.java
index 845d62f92c..94d50ebd45 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/planner/external/HiveScanProvider.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/planner/external/HiveScanProvider.java
@@ -258,6 +258,19 @@ public class HiveScanProvider extends HMSTableScanProvider 
{
         List<String> partitionKeys = getPathPartitionKeys();
         List<Column> columns = hmsTable.getBaseSchema(false);
         context.params.setNumOfColumnsFromFile(columns.size() - 
partitionKeys.size());
+        updateRequiredSlots(context);
+        return context;
+    }
+
+    public void updateRequiredSlots(ParamCreateContext context) throws 
UserException {
+        updateRequiredSlots(context, null);
+    }
+
+    public void updateRequiredSlots(ParamCreateContext context, List<String> 
partitionKeys) throws UserException {
+        context.params.unsetRequiredSlots();
+        if (partitionKeys == null) {
+            partitionKeys = getPathPartitionKeys();
+        }
         for (SlotDescriptor slot : desc.getSlots()) {
             if (!slot.isMaterialized()) {
                 continue;
@@ -268,9 +281,9 @@ public class HiveScanProvider extends HMSTableScanProvider {
             
slotInfo.setIsFileSlot(!partitionKeys.contains(slot.getColumn().getName()));
             context.params.addToRequiredSlots(slotInfo);
         }
-        return context;
     }
 
+
     @Override
     public TFileAttributes getFileAttributes() throws UserException {
         TFileTextScanRangeParams textParams = new TFileTextScanRangeParams();
diff --git 
a/regression-test/data/external_table_emr_p2/hive/test_external_catalog_hive.out
 
b/regression-test/data/external_table_emr_p2/hive/test_external_catalog_hive.out
index b7a66d44d4..54dc2d9a40 100644
--- 
a/regression-test/data/external_table_emr_p2/hive/test_external_catalog_hive.out
+++ 
b/regression-test/data/external_table_emr_p2/hive/test_external_catalog_hive.out
@@ -93,3 +93,6 @@ moccasin steel bisque cornsilk lace
 -- !q25 --
 Z6n2t4XA2n7CXTECJ,PE,iBbsCh0RE1Dd2A,z48
 
+-- !pr21598 --
+5
+
diff --git 
a/regression-test/suites/external_table_emr_p2/hive/test_external_catalog_hive.groovy
 
b/regression-test/suites/external_table_emr_p2/hive/test_external_catalog_hive.groovy
index 10bcea354e..ca445dbcda 100644
--- 
a/regression-test/suites/external_table_emr_p2/hive/test_external_catalog_hive.groovy
+++ 
b/regression-test/suites/external_table_emr_p2/hive/test_external_catalog_hive.groovy
@@ -87,6 +87,8 @@ suite("test_external_catalog_hive", "p2") {
         sql """ use tpch_1000_orc; """
         q03()
 
+        // test #21598
+        qt_pr21598 """select count(*) from( (SELECT r_regionkey AS key1, 
r_name AS name, pday AS pday FROM (SELECT r_regionkey, r_name, 
replace(r_comment, ' ', 'aaaa') AS pday FROM 
${catalog_name}.tpch_1000_parquet.region) t2))x;"""
 
         // test remember last used database after switch / rename catalog
         sql """switch ${catalog_name};"""


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to