Skip to content

Commit

Permalink
[fix](multicatalog) make lastdbofcatalog a session variable (#37826)
Browse files Browse the repository at this point in the history
  • Loading branch information
Yulei-Yang authored Jul 23, 2024
1 parent a595705 commit 17d01bb
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 21 deletions.
6 changes: 3 additions & 3 deletions fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
Original file line number Diff line number Diff line change
Expand Up @@ -4833,7 +4833,7 @@ public void cancelAlterCluster(CancelAlterSystemStmt stmt) throws DdlException {
this.alter.getClusterHandler().cancel(stmt);
}

// Switch catalog of this sesseion.
// Switch catalog of this session.
public void changeCatalog(ConnectContext ctx, String catalogName) throws DdlException {
CatalogIf catalogIf = catalogMgr.getCatalogNullable(catalogName);
if (catalogIf == null) {
Expand All @@ -4845,11 +4845,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);
ctx.addLastDBOfCatalog(ctx.getCurrentCatalog().getName(), currentDB);
}
}
ctx.changeDefaultCatalog(catalogName);
String lastDb = catalogMgr.getLastDB(catalogName);
String lastDb = ctx.getLastDBOfCatalog(catalogName);
if (StringUtils.isNotEmpty(lastDb)) {
ctx.setDatabase(lastDb);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,6 @@ public class CatalogMgr implements Writable, GsonPostProcessable {
private final Map<Long, CatalogIf<? extends DatabaseIf<? extends TableIf>>> idToCatalog = Maps.newConcurrentMap();
// this map will be regenerated from idToCatalog, so not need to persist.
private final Map<String, CatalogIf> nameToCatalog = Maps.newConcurrentMap();
// record last used database of every catalog
private final Map<String, String> lastDBOfCatalog = Maps.newConcurrentMap();

// Use a separate instance to facilitate access.
// internalDataSource still exists in idToCatalog and nameToCatalog
Expand Down Expand Up @@ -136,7 +134,9 @@ private CatalogIf removeCatalog(long catalogId) {
if (catalog != null) {
catalog.onClose();
nameToCatalog.remove(catalog.getName());
lastDBOfCatalog.remove(catalog.getName());
if (ConnectContext.get() != null) {
ConnectContext.get().removeLastDBOfCatalog(catalog.getName());
}
Env.getCurrentEnv().getExtMetaCacheMgr().removeCache(catalog.getId());
if (!Strings.isNullOrEmpty(catalog.getResource())) {
Resource catalogResource = Env.getCurrentEnv().getResourceMgr().getResource(catalog.getResource());
Expand Down Expand Up @@ -200,14 +200,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<Long> getCatalogIds() {
return Lists.newArrayList(idToCatalog.keySet());
}
Expand Down Expand Up @@ -288,7 +280,9 @@ public void dropCatalog(DropCatalogStmt stmt) throws UserException {
replayDropCatalog(log);
Env.getCurrentEnv().getEditLog().logCatalogLog(OperationType.OP_DROP_CATALOG, log);

lastDBOfCatalog.remove(stmt.getCatalogName());
if (ConnectContext.get() != null) {
ConnectContext.get().removeLastDBOfCatalog(stmt.getCatalogName());
}
Env.getCurrentEnv().getQueryStats().clear(catalog.getId());

} finally {
Expand All @@ -313,10 +307,13 @@ 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());
if (db != null) {
lastDBOfCatalog.remove(stmt.getCatalogName());
lastDBOfCatalog.put(log.getNewCatalogName(), db);
ConnectContext ctx = ConnectContext.get();
if (ctx != null) {
String db = ctx.getLastDBOfCatalog(stmt.getCatalogName());
if (db != null) {
ctx.removeLastDBOfCatalog(stmt.getCatalogName());
ctx.addLastDBOfCatalog(log.getNewCatalogName(), db);
}
}
} finally {
writeUnlock();
Expand Down
15 changes: 15 additions & 0 deletions fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,9 @@ public class ConnectContext {
protected String defaultCatalog = InternalCatalog.INTERNAL_CATALOG_NAME;
protected boolean isSend;

// record last used database of every catalog
private final Map<String, String> lastDBOfCatalog = Maps.newConcurrentMap();

protected AuditEventBuilder auditEventBuilder = new AuditEventBuilder();

protected String remoteIP;
Expand Down Expand Up @@ -265,6 +268,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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,10 +132,23 @@ suite("test_external_catalog_hive", "p2") {
sql """alter catalog ${catalog_name} rename hms;"""

sql """switch hms;"""

def res3 = sql """select count(*) from test.hive_test limit 10;"""
sql """use test;"""
def res3 = sql """select count(*) from hive_test limit 10;"""
logger.info("recoding select: " + res3.toString())

def user = 'account_user_test'
def pwd = 'C123_567p'
try_sql("DROP USER ${user}")
sql """CREATE USER '${user}' IDENTIFIED BY '${pwd}'"""
sql """GRANT SELECT_PRIV on *.*.* to '${user}'"""
connect(user=user, password="${pwd}", url=context.config.jdbcUrl) {
sql """switch hms;"""
test {
sql "show tables"
exception "errCode = 2, detailMessage = No database selected"
}
}

sql """alter catalog hms rename ${catalog_name};"""

// test wrong access controller
Expand Down

0 comments on commit 17d01bb

Please sign in to comment.