diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java index 02a08d3d085b86..052019a3a59c87 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java @@ -420,7 +420,7 @@ public Pair createTableWithLock( } if (!isReplay) { // Write edit log - CreateTableInfo info = new CreateTableInfo(fullQualifiedName, table); + CreateTableInfo info = new CreateTableInfo(fullQualifiedName, id, table); Env.getCurrentEnv().getEditLog().logCreateTable(info); } if (table.getType() == TableType.ELASTICSEARCH) { 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 6cfb4aad2b0534..5d7af1c6ed1cdd 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 @@ -4776,7 +4776,8 @@ public void replayCreateTable(CreateTableInfo info) throws MetaNotFoundException if (Strings.isNullOrEmpty(info.getCtlName()) || info.getCtlName() .equals(InternalCatalog.INTERNAL_CATALOG_NAME)) { Table table = info.getTable(); - getInternalCatalog().replayCreateTable(info.getDbName(), table); + long dbId = info.getDbId(); + getInternalCatalog().replayCreateTable(info.getDbName(), dbId, table); if (table instanceof MTMV) { ((MTMV) table).compatible(Env.getCurrentEnv().getCatalogMgr()); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java index 82a1ca0c101bbb..caac16ba875f27 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java @@ -1353,8 +1353,18 @@ public boolean createTable(CreateTableStmt stmt) throws UserException { return false; } - public void replayCreateTable(String dbName, Table table) throws MetaNotFoundException { - Database db = this.fullNameToDb.get(dbName); + public void replayCreateTable(String dbName, long dbId, Table table) throws MetaNotFoundException { + if (dbId != -1L) { + Database db = getDbOrMetaException(dbId); + replayCreateTableInternal(db, table); + } else { + // Compatible with old logic + Database db = getDbOrMetaException(dbName); + replayCreateTableInternal(db, table); + } + } + + private void replayCreateTableInternal(Database db, Table table) throws MetaNotFoundException { try { db.createTableWithLock(table, true, false); } catch (DdlException e) { @@ -3181,7 +3191,8 @@ private boolean createOlapTable(Database db, CreateTableInfo createTableInfo) th for (Long tabletId : tabletIdSet) { Env.getCurrentInvertedIndex().deleteTablet(tabletId); } - LOG.info("duplicate create table[{};{}], skip next steps", tableName, tableId); + LOG.info("duplicate create table[{};{}] in db[{};{}], skip next steps", + tableName, tableId, db.getName(), db.getId()); } else { // if table not exists, then db.createTableWithLock will write an editlog. hadLogEditCreateTable = true; @@ -3195,7 +3206,8 @@ private boolean createOlapTable(Database db, CreateTableInfo createTableInfo) th backendsPerBucketSeq); Env.getCurrentEnv().getEditLog().logColocateAddTable(info); } - LOG.info("successfully create table[{};{}]", tableName, tableId); + LOG.info("successfully create table[{};{}] in db[{};{}]", + tableName, tableId, db.getName(), db.getId()); Env.getCurrentEnv().getDynamicPartitionScheduler() .executeDynamicPartitionFirstTime(db.getId(), olapTable.getId()); // register or remove table from DynamicPartition after table created diff --git a/fe/fe-core/src/main/java/org/apache/doris/persist/CreateTableInfo.java b/fe/fe-core/src/main/java/org/apache/doris/persist/CreateTableInfo.java index 879c15ea7685d3..13d25e22cdc9ca 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/persist/CreateTableInfo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/persist/CreateTableInfo.java @@ -40,6 +40,8 @@ public class CreateTableInfo implements Writable, GsonPostProcessable { @SerializedName(value = "ctl") private String ctlName; + @SerializedName(value = "dbId") + private long dbId = -1L; @SerializedName(value = "dbName") private String dbName; @SerializedName(value = "tbl") @@ -52,8 +54,9 @@ public CreateTableInfo() { } // for internal table - public CreateTableInfo(String dbName, Table table) { + public CreateTableInfo(String dbName, long dbId, Table table) { this.ctlName = InternalCatalog.INTERNAL_CATALOG_NAME; + this.dbId = dbId; this.dbName = dbName; this.tblName = table.getName(); this.table = table; @@ -74,6 +77,10 @@ public String getDbName() { return dbName; } + public long getDbId() { + return dbId; + } + public String getTblName() { return tblName; } diff --git a/fe/fe-core/src/test/java/org/apache/doris/persist/CreateTableInfoTest.java b/fe/fe-core/src/test/java/org/apache/doris/persist/CreateTableInfoTest.java index 810e84592d9eb1..d2cb6ad60fe798 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/persist/CreateTableInfoTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/persist/CreateTableInfoTest.java @@ -95,7 +95,7 @@ public void testSerialization() throws Exception { TStorageType.COLUMN, KeysType.AGG_KEYS); Deencapsulation.setField(table, "baseIndexId", 1000); table.addPartition(partition); - CreateTableInfo info = new CreateTableInfo("db1", table); + CreateTableInfo info = new CreateTableInfo("db1", -1L, table); info.write(dos); dos.flush();