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

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new ff22059d5db [cherry-pick](branch-2.1)[fix](sys_table) fix potential 
NPE when query table_properties and partitions sys table (#41081)
ff22059d5db is described below

commit ff22059d5dbb1147dec9b5b75ea7b388198bbf74
Author: Vallish Pai <[email protected]>
AuthorDate: Fri Sep 20 21:13:33 2024 +0530

    [cherry-pick](branch-2.1)[fix](sys_table) fix potential NPE when query 
table_properties and partitions sys table (#41081)
    
    ## Proposed changes
    
    Issue Number: close #xxx
    
    bp #40972
---
 .../doris/tablefunction/MetadataGenerator.java     | 134 +++++++++++----------
 1 file changed, 73 insertions(+), 61 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java
 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java
index 89afa498d1b..746519082ae 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java
@@ -1212,29 +1212,34 @@ public class MetadataGenerator {
                 continue;
             }
             OlapTable olapTable = (OlapTable) table;
-            TableProperty property = olapTable.getTableProperty();
-            if (property == null) {
-                // if there is no properties, then write empty properties and 
check next table.
-                TRow trow = new TRow();
-                trow.addToColumnValue(new 
TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
-                trow.addToColumnValue(new 
TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
-                trow.addToColumnValue(new 
TCell().setStringVal(table.getName())); // TABLE_NAME
-                trow.addToColumnValue(new TCell().setStringVal("")); // 
PROPERTIES_NAME
-                trow.addToColumnValue(new TCell().setStringVal("")); // 
PROPERTIES_VALUE
-                dataBatch.add(trow);
-                continue;
-            }
+            olapTable.readLock();
+            try {
+                TableProperty property = olapTable.getTableProperty();
+                if (property == null) {
+                    // if there is no properties, then write empty properties 
and check next table.
+                    TRow trow = new TRow();
+                    trow.addToColumnValue(new 
TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
+                    trow.addToColumnValue(new 
TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
+                    trow.addToColumnValue(new 
TCell().setStringVal(table.getName())); // TABLE_NAME
+                    trow.addToColumnValue(new TCell().setStringVal("")); // 
PROPERTIES_NAME
+                    trow.addToColumnValue(new TCell().setStringVal("")); // 
PROPERTIES_VALUE
+                    dataBatch.add(trow);
+                    continue;
+                }
 
-            Map<String, String>  propertiesMap = property.getProperties();
-            propertiesMap.forEach((key, value) -> {
-                TRow trow = new TRow();
-                trow.addToColumnValue(new 
TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
-                trow.addToColumnValue(new 
TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
-                trow.addToColumnValue(new 
TCell().setStringVal(table.getName())); // TABLE_NAME
-                trow.addToColumnValue(new TCell().setStringVal(key)); // 
PROPERTIES_NAME
-                trow.addToColumnValue(new TCell().setStringVal(value)); // 
PROPERTIES_VALUE
-                dataBatch.add(trow);
-            });
+                Map<String, String>  propertiesMap = property.getProperties();
+                propertiesMap.forEach((key, value) -> {
+                    TRow trow = new TRow();
+                    trow.addToColumnValue(new 
TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
+                    trow.addToColumnValue(new 
TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
+                    trow.addToColumnValue(new 
TCell().setStringVal(table.getName())); // TABLE_NAME
+                    trow.addToColumnValue(new TCell().setStringVal(key)); // 
PROPERTIES_NAME
+                    trow.addToColumnValue(new TCell().setStringVal(value)); // 
PROPERTIES_VALUE
+                    dataBatch.add(trow);
+                });
+            } finally {
+                olapTable.readUnlock();
+            }
         } // for table
     }
 
@@ -1342,49 +1347,56 @@ public class MetadataGenerator {
             }
 
             OlapTable olapTable = (OlapTable) table;
-            Collection<Partition> allPartitions = olapTable.getAllPartitions();
+            olapTable.readLock();
+            try {
+                Collection<Partition> allPartitions = 
olapTable.getAllPartitions();
 
-            for (Partition partition : allPartitions) {
-                TRow trow = new TRow();
-                trow.addToColumnValue(new 
TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
-                trow.addToColumnValue(new 
TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
-                trow.addToColumnValue(new 
TCell().setStringVal(table.getName())); // TABLE_NAME
-                trow.addToColumnValue(new 
TCell().setStringVal(partition.getName())); // PARTITION_NAME
-                trow.addToColumnValue(new TCell().setStringVal("NULL")); // 
SUBPARTITION_NAME (always null)
-
-                trow.addToColumnValue(new TCell().setIntVal(0)); 
//PARTITION_ORDINAL_POSITION (not available)
-                trow.addToColumnValue(new TCell().setIntVal(0)); 
//SUBPARTITION_ORDINAL_POSITION (not available)
-                trow.addToColumnValue(new TCell().setStringVal(
-                        olapTable.getPartitionInfo().getType().toString())); 
// PARTITION_METHOD
-                trow.addToColumnValue(new TCell().setStringVal("NULL")); // 
SUBPARTITION_METHOD(always null)
-                PartitionItem item = 
olapTable.getPartitionInfo().getItem(partition.getId());
-                if ((olapTable.getPartitionInfo().getType() == 
PartitionType.UNPARTITIONED) || (item == null)) {
-                    trow.addToColumnValue(new TCell().setStringVal("NULL")); 
// if unpartitioned, its null
-                    trow.addToColumnValue(new TCell().setStringVal("NULL")); 
// SUBPARTITION_EXPRESSION (always null)
-                    trow.addToColumnValue(new TCell().setStringVal("NULL")); 
// PARITION DESC, its null
-                } else {
+                for (Partition partition : allPartitions) {
+                    TRow trow = new TRow();
+                    trow.addToColumnValue(new 
TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
+                    trow.addToColumnValue(new 
TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
+                    trow.addToColumnValue(new 
TCell().setStringVal(table.getName())); // TABLE_NAME
+                    trow.addToColumnValue(new 
TCell().setStringVal(partition.getName())); // PARTITION_NAME
+                    trow.addToColumnValue(new TCell().setStringVal("NULL")); 
// SUBPARTITION_NAME (always null)
+
+                    trow.addToColumnValue(new TCell().setIntVal(0)); 
//PARTITION_ORDINAL_POSITION (not available)
+                    trow.addToColumnValue(new TCell().setIntVal(0)); 
//SUBPARTITION_ORDINAL_POSITION (not available)
                     trow.addToColumnValue(new TCell().setStringVal(
-                            olapTable.getPartitionInfo()
-                                .getDisplayPartitionColumns().toString())); // 
PARTITION_EXPRESSION
-                    trow.addToColumnValue(new TCell().setStringVal("NULL")); 
// SUBPARTITION_EXPRESSION (always null)
+                            
olapTable.getPartitionInfo().getType().toString())); // PARTITION_METHOD
+                    trow.addToColumnValue(new TCell().setStringVal("NULL")); 
// SUBPARTITION_METHOD(always null)
+                    PartitionItem item = 
olapTable.getPartitionInfo().getItem(partition.getId());
+                    if ((olapTable.getPartitionInfo().getType() == 
PartitionType.UNPARTITIONED) || (item == null)) {
+                        trow.addToColumnValue(new 
TCell().setStringVal("NULL")); // if unpartitioned, its null
+                        trow.addToColumnValue(
+                                new TCell().setStringVal("NULL")); // 
SUBPARTITION_EXPRESSION (always null)
+                        trow.addToColumnValue(new 
TCell().setStringVal("NULL")); // PARITION DESC, its null
+                    } else {
+                        trow.addToColumnValue(new TCell().setStringVal(
+                                olapTable.getPartitionInfo()
+                                    
.getDisplayPartitionColumns().toString())); // PARTITION_EXPRESSION
+                        trow.addToColumnValue(
+                                new TCell().setStringVal("NULL")); // 
SUBPARTITION_EXPRESSION (always null)
+                        trow.addToColumnValue(new TCell().setStringVal(
+                                item.getItemsSql())); // PARITION DESC
+                    }
+                    trow.addToColumnValue(new 
TCell().setLongVal(partition.getRowCount())); //TABLE_ROWS (PARTITION row)
+                    trow.addToColumnValue(new 
TCell().setLongVal(partition.getAvgRowLength())); //AVG_ROW_LENGTH
+                    trow.addToColumnValue(new 
TCell().setLongVal(partition.getDataLength())); //DATA_LENGTH
+                    trow.addToColumnValue(new TCell().setIntVal(0)); 
//MAX_DATA_LENGTH (not available)
+                    trow.addToColumnValue(new TCell().setIntVal(0)); 
//INDEX_LENGTH (not available)
+                    trow.addToColumnValue(new TCell().setIntVal(0)); 
//DATA_FREE (not available)
+                    trow.addToColumnValue(new TCell().setStringVal("NULL")); 
//CREATE_TIME (not available)
                     trow.addToColumnValue(new TCell().setStringVal(
-                            item.getItemsSql())); // PARITION DESC
+                            
TimeUtils.longToTimeString(partition.getVisibleVersionTime()))); //UPDATE_TIME
+                    trow.addToColumnValue(new TCell().setStringVal("NULL")); 
// CHECK_TIME (not available)
+                    trow.addToColumnValue(new TCell().setIntVal(0)); 
//CHECKSUM (not available)
+                    trow.addToColumnValue(new TCell().setStringVal("")); // 
PARTITION_COMMENT (not available)
+                    trow.addToColumnValue(new TCell().setStringVal("")); // 
NODEGROUP (not available)
+                    trow.addToColumnValue(new TCell().setStringVal("")); // 
TABLESPACE_NAME (not available)
+                    dataBatch.add(trow);
                 }
-                trow.addToColumnValue(new 
TCell().setLongVal(partition.getRowCount())); //TABLE_ROWS (PARTITION row)
-                trow.addToColumnValue(new 
TCell().setLongVal(partition.getAvgRowLength())); //AVG_ROW_LENGTH
-                trow.addToColumnValue(new 
TCell().setLongVal(partition.getDataLength())); //DATA_LENGTH
-                trow.addToColumnValue(new TCell().setIntVal(0)); 
//MAX_DATA_LENGTH (not available)
-                trow.addToColumnValue(new TCell().setIntVal(0)); 
//INDEX_LENGTH (not available)
-                trow.addToColumnValue(new TCell().setIntVal(0)); //DATA_FREE 
(not available)
-                trow.addToColumnValue(new TCell().setStringVal("NULL")); 
//CREATE_TIME (not available)
-                trow.addToColumnValue(new TCell().setStringVal(
-                        
TimeUtils.longToTimeString(partition.getVisibleVersionTime()))); //UPDATE_TIME
-                trow.addToColumnValue(new TCell().setStringVal("NULL")); // 
CHECK_TIME (not available)
-                trow.addToColumnValue(new TCell().setIntVal(0)); //CHECKSUM 
(not available)
-                trow.addToColumnValue(new TCell().setStringVal("")); // 
PARTITION_COMMENT (not available)
-                trow.addToColumnValue(new TCell().setStringVal("")); // 
NODEGROUP (not available)
-                trow.addToColumnValue(new TCell().setStringVal("")); // 
TABLESPACE_NAME (not available)
-                dataBatch.add(trow);
+            } finally {
+                olapTable.readUnlock();
             }
         } // for table
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to