From 444242013ad74e09785fba98e9c758014e679a9a Mon Sep 17 00:00:00 2001 From: Yulei-Yang Date: Mon, 15 Jul 2024 17:34:05 +0800 Subject: [PATCH] [fix](multicatalog) make lastdbofcatalog a session variable --- .../java/org/apache/doris/catalog/Env.java | 4 ++-- .../apache/doris/datasource/CatalogMgr.java | 21 ++++++------------- .../org/apache/doris/qe/ConnectContext.java | 15 +++++++++++++ 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java index f01d8e79af2c43..120d8e25460266 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java @@ -5381,11 +5381,11 @@ public void changeCatalog(ConnectContext ctx, String catalogName) throws DdlExce if (StringUtils.isNotEmpty(currentDB)) { // When dropped the current catalog in current context, the current catalog will be null. if (ctx.getCurrentCatalog() != null) { - catalogMgr.addLastDBOfCatalog(ctx.getCurrentCatalog().getName(), currentDB); + ConnectContext.get().addLastDBOfCatalog(ctx.getCurrentCatalog().getName(), currentDB); } } ctx.changeDefaultCatalog(catalogName); - String lastDb = catalogMgr.getLastDB(catalogName); + String lastDb = ConnectContext.get().getLastDBOfCatalog(catalogName); if (StringUtils.isNotEmpty(lastDb)) { ctx.setDatabase(lastDb); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogMgr.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogMgr.java index 153b7460755760..0c5a3be3e326be 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogMgr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogMgr.java @@ -96,8 +96,6 @@ public class CatalogMgr implements Writable, GsonPostProcessable { private final Map>> idToCatalog = Maps.newConcurrentMap(); // this map will be regenerated from idToCatalog, so not need to persist. private final Map nameToCatalog = Maps.newConcurrentMap(); - // record last used database of every catalog - private final Map lastDBOfCatalog = Maps.newConcurrentMap(); // Use a separate instance to facilitate access. // internalDataSource still exists in idToCatalog and nameToCatalog @@ -140,7 +138,7 @@ private CatalogIf removeCatalog(long catalogId) { if (catalog != null) { catalog.onClose(); nameToCatalog.remove(catalog.getName()); - lastDBOfCatalog.remove(catalog.getName()); + ConnectContext.get().removeLastDBOfCatalog(catalog.getName()); Env.getCurrentEnv().getExtMetaCacheMgr().removeCache(catalog.getId()); if (!Strings.isNullOrEmpty(catalog.getResource())) { Resource catalogResource = Env.getCurrentEnv().getResourceMgr().getResource(catalog.getResource()); @@ -194,14 +192,6 @@ public CatalogIf getCatalogOrAnalysisException(String name) throws AnalysisExcep ErrorCode.ERR_UNKNOWN_CATALOG)); } - public void addLastDBOfCatalog(String catalog, String db) { - lastDBOfCatalog.put(catalog, db); - } - - public String getLastDB(String catalog) { - return lastDBOfCatalog.get(catalog); - } - public List getCatalogIds() { return Lists.newArrayList(idToCatalog.keySet()); } @@ -282,7 +272,7 @@ public void dropCatalog(DropCatalogStmt stmt) throws UserException { replayDropCatalog(log); Env.getCurrentEnv().getEditLog().logCatalogLog(OperationType.OP_DROP_CATALOG, log); - lastDBOfCatalog.remove(stmt.getCatalogName()); + ConnectContext.get().removeLastDBOfCatalog(stmt.getCatalogName()); Env.getCurrentEnv().getQueryStats().clear(catalog.getId()); } finally { writeUnlock(); @@ -306,10 +296,11 @@ public void alterCatalogName(AlterCatalogNameStmt stmt) throws UserException { replayAlterCatalogName(log); Env.getCurrentEnv().getEditLog().logCatalogLog(OperationType.OP_ALTER_CATALOG_NAME, log); - String db = lastDBOfCatalog.get(stmt.getCatalogName()); + ConnectContext ctx = ConnectContext.get(); + String db = ctx.getLastDBOfCatalog(stmt.getCatalogName()); if (db != null) { - lastDBOfCatalog.remove(stmt.getCatalogName()); - lastDBOfCatalog.put(log.getNewCatalogName(), db); + ctx.removeLastDBOfCatalog(stmt.getCatalogName()); + ctx.addLastDBOfCatalog(log.getNewCatalogName(), db); } } finally { writeUnlock(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java index 71a10d2117165d..e6d90fdd66d082 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java @@ -183,6 +183,9 @@ public enum ConnectType { protected String defaultCatalog = InternalCatalog.INTERNAL_CATALOG_NAME; protected boolean isSend; + // record last used database of every catalog + private final Map lastDBOfCatalog = Maps.newConcurrentMap(); + protected AuditEventBuilder auditEventBuilder = new AuditEventBuilder(); protected String remoteIP; @@ -328,6 +331,18 @@ public boolean isSend() { return this.isSend; } + public void addLastDBOfCatalog(String catalog, String db) { + lastDBOfCatalog.put(catalog, db); + } + + public String getLastDBOfCatalog(String catalog) { + return lastDBOfCatalog.get(catalog); + } + + public String removeLastDBOfCatalog(String catalog) { + return lastDBOfCatalog.get(catalog); + } + public void setNotEvalNondeterministicFunction(boolean notEvalNondeterministicFunction) { this.notEvalNondeterministicFunction = notEvalNondeterministicFunction; }