You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2024/09/20 12:27:30 UTC
(doris) branch master updated: [fix](sys_table) fix potential NPE when query table_properties and partitions sys table (#40972)
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 922bee25534 [fix](sys_table) fix potential NPE when query table_properties and partitions sys table (#40972)
922bee25534 is described below
commit 922bee255348617553fc1db2df131ae70e152fba
Author: Vallish Pai <va...@gmail.com>
AuthorDate: Fri Sep 20 17:57:23 2024 +0530
[fix](sys_table) fix potential NPE when query table_properties and partitions sys table (#40972)
## Proposed changes
Issue Number: close #xxx
fix potential NPE when query table_properties and partitions sys table
follow up for #40944
---
.../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 04cd25642a4..103c659a990 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
@@ -1211,29 +1211,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
}
@@ -1341,49 +1346,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: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org