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]