Skip to content

Commit 158f0b2

Browse files
authored
[fix](table_options) fix potential NPE when quering table_options sys table (apache#40944)
Fix unstable issue like: ``` 2024-09-17 12:41:04,755 WARN (thrift-server-pool-4|384) [FrontendServiceImpl.fetchSchemaTableData():2292] Failed to fetchSchemaTableData java.lang.NullPointerException: Cannot invoke "org.apache.doris.catalog.MaterializedIndexMeta.getSchema()" because the return value of "java.util.Map.get(Object)" is null at org.apache.doris.catalog.OlapTable.getSchemaByIndexId(OlapTable.java:954) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.catalog.OlapTable.getSchemaByIndexId(OlapTable.java:947) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.catalog.OlapTable.getBaseSchema(OlapTable.java:2097) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.catalog.OlapTable.getKeyColAsString(OlapTable.java:2167) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.tablefunction.MetadataGenerator.tableOptionsForInternalCatalog(MetadataGenerator.java:1099) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.tablefunction.MetadataGenerator.tableOptionsMetadataResult(MetadataGenerator.java:1189) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.tablefunction.MetadataGenerator.getSchemaTableData(MetadataGenerator.java:273) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.service.FrontendServiceImpl.fetchSchemaTableData(FrontendServiceImpl.java:2289) ~[doris-fe.jar:1.2-SNAPSHOT] at jdk.internal.reflect.GeneratedMethodAccessor50.invoke(Unknown Source) ~[?:?] at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] at java.lang.reflect.Method.invoke(Method.java:569) ~[?:?] at org.apache.doris.service.FeServer.lambda$start$0(FeServer.java:60) ~[doris-fe.jar:1.2-SNAPSHOT] at jdk.proxy2.$Proxy44.fetchSchemaTableData(Unknown Source) ~[?:?] at org.apache.doris.thrift.FrontendService$Processor$fetchSchemaTableData.getResult(FrontendService.java:4572) ~[fe-common-1.2-SNAPSHOT.jar:1.2-SNAPSHOT] at org.apache.doris.thrift.FrontendService$Processor$fetchSchemaTableData.getResult(FrontendService.java:4552) ~[fe-common-1.2-SNAPSHOT.jar:1.2-SNAPSHOT] at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:38) ~[libthrift-0.16.0.jar:0.16.0] at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:38) ~[libthrift-0.16.0.jar:0.16.0] at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:250) ~[libthrift-0.16.0.jar:0.16.0] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?] at java.lang.Thread.run(Thread.java:840) ~[?:?] ```
1 parent 7caa3b9 commit 158f0b2

File tree

1 file changed

+35
-30
lines changed

1 file changed

+35
-30
lines changed

fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java

+35-30
Original file line numberDiff line numberDiff line change
@@ -1089,40 +1089,45 @@ private static void tableOptionsForInternalCatalog(UserIdentity currentUserIdent
10891089
continue;
10901090
}
10911091
OlapTable olapTable = (OlapTable) table;
1092-
TRow trow = new TRow();
1093-
trow.addToColumnValue(new TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
1094-
trow.addToColumnValue(new TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
1095-
trow.addToColumnValue(new TCell().setStringVal(table.getName())); // TABLE_NAME
1096-
trow.addToColumnValue(
1097-
new TCell().setStringVal(olapTable.getKeysType().toMetadata())); // TABLE_MODEL
1098-
trow.addToColumnValue(
1099-
new TCell().setStringVal(olapTable.getKeyColAsString())); // key columTypes
1100-
1101-
DistributionInfo distributionInfo = olapTable.getDefaultDistributionInfo();
1102-
if (distributionInfo.getType() == DistributionInfoType.HASH) {
1103-
HashDistributionInfo hashDistributionInfo = (HashDistributionInfo) distributionInfo;
1104-
List<Column> distributionColumns = hashDistributionInfo.getDistributionColumns();
1105-
StringBuilder distributeKey = new StringBuilder();
1106-
for (Column c : distributionColumns) {
1107-
if (distributeKey.length() != 0) {
1108-
distributeKey.append(",");
1092+
olapTable.readLock();
1093+
try {
1094+
TRow trow = new TRow();
1095+
trow.addToColumnValue(new TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
1096+
trow.addToColumnValue(new TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
1097+
trow.addToColumnValue(new TCell().setStringVal(table.getName())); // TABLE_NAME
1098+
trow.addToColumnValue(
1099+
new TCell().setStringVal(olapTable.getKeysType().toMetadata())); // TABLE_MODEL
1100+
trow.addToColumnValue(
1101+
new TCell().setStringVal(olapTable.getKeyColAsString())); // key columTypes
1102+
1103+
DistributionInfo distributionInfo = olapTable.getDefaultDistributionInfo();
1104+
if (distributionInfo.getType() == DistributionInfoType.HASH) {
1105+
HashDistributionInfo hashDistributionInfo = (HashDistributionInfo) distributionInfo;
1106+
List<Column> distributionColumns = hashDistributionInfo.getDistributionColumns();
1107+
StringBuilder distributeKey = new StringBuilder();
1108+
for (Column c : distributionColumns) {
1109+
if (distributeKey.length() != 0) {
1110+
distributeKey.append(",");
1111+
}
1112+
distributeKey.append(c.getName());
11091113
}
1110-
distributeKey.append(c.getName());
1111-
}
1112-
if (distributeKey.length() == 0) {
1113-
trow.addToColumnValue(new TCell().setStringVal(""));
1114+
if (distributeKey.length() == 0) {
1115+
trow.addToColumnValue(new TCell().setStringVal(""));
1116+
} else {
1117+
trow.addToColumnValue(
1118+
new TCell().setStringVal(distributeKey.toString()));
1119+
}
1120+
trow.addToColumnValue(new TCell().setStringVal("HASH")); // DISTRIBUTE_TYPE
11141121
} else {
1115-
trow.addToColumnValue(
1116-
new TCell().setStringVal(distributeKey.toString()));
1122+
trow.addToColumnValue(new TCell().setStringVal("RANDOM")); // DISTRIBUTE_KEY
1123+
trow.addToColumnValue(new TCell().setStringVal("RANDOM")); // DISTRIBUTE_TYPE
11171124
}
1118-
trow.addToColumnValue(new TCell().setStringVal("HASH")); // DISTRIBUTE_TYPE
1119-
} else {
1120-
trow.addToColumnValue(new TCell().setStringVal("RANDOM")); // DISTRIBUTE_KEY
1121-
trow.addToColumnValue(new TCell().setStringVal("RANDOM")); // DISTRIBUTE_TYPE
1125+
trow.addToColumnValue(new TCell().setIntVal(distributionInfo.getBucketNum())); // BUCKETS_NUM
1126+
trow.addToColumnValue(new TCell().setIntVal(olapTable.getPartitionNum())); // PARTITION_NUM
1127+
dataBatch.add(trow);
1128+
} finally {
1129+
olapTable.readUnlock();
11221130
}
1123-
trow.addToColumnValue(new TCell().setIntVal(distributionInfo.getBucketNum())); // BUCKETS_NUM
1124-
trow.addToColumnValue(new TCell().setIntVal(olapTable.getPartitionNum())); // PARTITION_NUM
1125-
dataBatch.add(trow);
11261131
}
11271132
}
11281133

0 commit comments

Comments
 (0)