From ca55c3b914925959e8a3a4f85054e0ef0793f078 Mon Sep 17 00:00:00 2001 From: morningman Date: Wed, 18 Sep 2024 22:14:44 +0800 Subject: [PATCH] [fix](table_options) fix potential NPE when quering table_options sys table --- .../tablefunction/MetadataGenerator.java | 65 ++++++++++--------- 1 file changed, 35 insertions(+), 30 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 4d07d219dc4882..04cd25642a4d54 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 @@ -1089,40 +1089,45 @@ private static void tableOptionsForInternalCatalog(UserIdentity currentUserIdent continue; } OlapTable olapTable = (OlapTable) 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(olapTable.getKeysType().toMetadata())); // TABLE_MODEL - trow.addToColumnValue( - new TCell().setStringVal(olapTable.getKeyColAsString())); // key columTypes - - DistributionInfo distributionInfo = olapTable.getDefaultDistributionInfo(); - if (distributionInfo.getType() == DistributionInfoType.HASH) { - HashDistributionInfo hashDistributionInfo = (HashDistributionInfo) distributionInfo; - List distributionColumns = hashDistributionInfo.getDistributionColumns(); - StringBuilder distributeKey = new StringBuilder(); - for (Column c : distributionColumns) { - if (distributeKey.length() != 0) { - distributeKey.append(","); + olapTable.readLock(); + try { + 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(olapTable.getKeysType().toMetadata())); // TABLE_MODEL + trow.addToColumnValue( + new TCell().setStringVal(olapTable.getKeyColAsString())); // key columTypes + + DistributionInfo distributionInfo = olapTable.getDefaultDistributionInfo(); + if (distributionInfo.getType() == DistributionInfoType.HASH) { + HashDistributionInfo hashDistributionInfo = (HashDistributionInfo) distributionInfo; + List distributionColumns = hashDistributionInfo.getDistributionColumns(); + StringBuilder distributeKey = new StringBuilder(); + for (Column c : distributionColumns) { + if (distributeKey.length() != 0) { + distributeKey.append(","); + } + distributeKey.append(c.getName()); } - distributeKey.append(c.getName()); - } - if (distributeKey.length() == 0) { - trow.addToColumnValue(new TCell().setStringVal("")); + if (distributeKey.length() == 0) { + trow.addToColumnValue(new TCell().setStringVal("")); + } else { + trow.addToColumnValue( + new TCell().setStringVal(distributeKey.toString())); + } + trow.addToColumnValue(new TCell().setStringVal("HASH")); // DISTRIBUTE_TYPE } else { - trow.addToColumnValue( - new TCell().setStringVal(distributeKey.toString())); + trow.addToColumnValue(new TCell().setStringVal("RANDOM")); // DISTRIBUTE_KEY + trow.addToColumnValue(new TCell().setStringVal("RANDOM")); // DISTRIBUTE_TYPE } - trow.addToColumnValue(new TCell().setStringVal("HASH")); // DISTRIBUTE_TYPE - } else { - trow.addToColumnValue(new TCell().setStringVal("RANDOM")); // DISTRIBUTE_KEY - trow.addToColumnValue(new TCell().setStringVal("RANDOM")); // DISTRIBUTE_TYPE + trow.addToColumnValue(new TCell().setIntVal(distributionInfo.getBucketNum())); // BUCKETS_NUM + trow.addToColumnValue(new TCell().setIntVal(olapTable.getPartitionNum())); // PARTITION_NUM + dataBatch.add(trow); + } finally { + olapTable.readUnlock(); } - trow.addToColumnValue(new TCell().setIntVal(distributionInfo.getBucketNum())); // BUCKETS_NUM - trow.addToColumnValue(new TCell().setIntVal(olapTable.getPartitionNum())); // PARTITION_NUM - dataBatch.add(trow); } }