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 158f0b22356 [fix](table_options) fix potential NPE when quering
table_options sys table (#40944)
158f0b22356 is described below
commit 158f0b223560caf687402eb12dd80681bd2d2f42
Author: Mingyu Chen <[email protected]>
AuthorDate: Thu Sep 19 11:38:19 2024 +0800
[fix](table_options) fix potential NPE when quering table_options sys table
(#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) ~[?:?]
```
---
.../doris/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 4d07d219dc4..04cd25642a4 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 @@ public class MetadataGenerator {
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<Column> 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<Column> 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);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]