From 08c11bedf8d01911ddbf329039c5b79c743a6c13 Mon Sep 17 00:00:00 2001 From: liutang123 Date: Tue, 17 Dec 2024 15:36:45 +0800 Subject: [PATCH 1/2] fix table not found error If we set lower_case_table_names to 2, and then create a catalog with meta cache. The `lowerCaseToTableName` in `ExternalDatabse` will be empty because `listTableNames` method is invoked in meta cache. Now, if we directly execute `getTableNullable`, we will get null. --- .../java/org/apache/doris/datasource/ExternalDatabase.java | 1 + .../lowercase/ExternalTableNameComparedLowercaseTest.java | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalDatabase.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalDatabase.java index eda98efb9b6a03..cb44c11944cd51 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalDatabase.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalDatabase.java @@ -154,6 +154,7 @@ public final synchronized void makeSureInitialized() { buildTableForInit(tableName, Util.genIdByName(extCatalog.getName(), name, tableName), extCatalog)), (key, value, cause) -> value.ifPresent(ExternalTable::unsetObjectCreated)); + listTableNames(); // init lowerCaseToTableName } setLastUpdateTime(System.currentTimeMillis()); } else { diff --git a/fe/fe-core/src/test/java/org/apache/doris/datasource/lowercase/ExternalTableNameComparedLowercaseTest.java b/fe/fe-core/src/test/java/org/apache/doris/datasource/lowercase/ExternalTableNameComparedLowercaseTest.java index c48e18cb2711df..1d06967f89923b 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/datasource/lowercase/ExternalTableNameComparedLowercaseTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/datasource/lowercase/ExternalTableNameComparedLowercaseTest.java @@ -85,6 +85,13 @@ public void testTableNameLowerCase() { Assertions.assertTrue(tableNames.contains("TABLE2")); } + @Test + public void testGetTableAfterCreateCatalog() { + Object table = env.getCatalogMgr().getCatalog("test1").getDbNullable("db1") + .getTableNullable("Table1"); + Assertions.assertNotNull(table); + } + private void switchTest() throws Exception { SwitchStmt switchTest = (SwitchStmt) parseAndAnalyzeStmt("switch test1;"); Env.getCurrentEnv().changeCatalog(connectContext, switchTest.getCatalogName()); From 143d7bb62112ddb8b608f77f2b6cf8d73cb2441e Mon Sep 17 00:00:00 2001 From: liutang123 Date: Wed, 18 Dec 2024 15:20:16 +0800 Subject: [PATCH 2/2] fix ut --- .../apache/doris/datasource/hive/HMSExternalCatalog.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalCatalog.java index 85b999f1111047..0db66fc8d57eff 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalCatalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalCatalog.java @@ -23,6 +23,7 @@ import org.apache.doris.cluster.ClusterNamespace; import org.apache.doris.common.Config; import org.apache.doris.common.DdlException; +import org.apache.doris.common.FeConstants; import org.apache.doris.common.Pair; import org.apache.doris.common.ThreadPoolManager; import org.apache.doris.common.security.authentication.AuthenticationConfig; @@ -60,6 +61,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; @@ -215,7 +217,11 @@ public void onRefresh(boolean invalidCache) { @Override public List listTableNames(SessionContext ctx, String dbName) { makeSureInitialized(); - return metadataOps.listTableNames(ClusterNamespace.getNameFromFullName(dbName)); + if (!FeConstants.runningUnitTest) { + return metadataOps.listTableNames(ClusterNamespace.getNameFromFullName(dbName)); + } else { + return new ArrayList<>(); + } } @Override