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 5fb9af48b89a9a..ebb04072b5e01d 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 @@ -425,7 +425,7 @@ public Pair createTableWithoutLock( registerTable(table); if (!isReplay) { // Write edit log - CreateTableInfo info = new CreateTableInfo(fullQualifiedName, table); + CreateTableInfo info = new CreateTableInfo(fullQualifiedName, id, table); Env.getCurrentEnv().getEditLog().logCreateTable(info); } } finally { 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 4f2ef46d49fff1..f0f385fc0e911a 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 @@ -4165,8 +4165,8 @@ public static void getDdlStmt(DdlStmt ddlStmt, String dbName, TableIf table, Lis } } - public void replayCreateTable(String dbName, Table table) throws MetaNotFoundException { - getInternalCatalog().replayCreateTable(dbName, table); + public void replayCreateTable(String dbName, long dbId, Table table) throws MetaNotFoundException { + getInternalCatalog().replayCreateTable(dbName, dbId, table); } public void replayAlterExternalTableSchema(String dbName, String tableName, List newSchema) 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 e1eacd558078c4..388729d57ffa74 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 @@ -1475,8 +1475,18 @@ public void createTableAsSelect(CreateTableAsSelectStmt stmt) throws DdlExceptio } } - 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) { 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 1f2bcc15eb4252..f5797d2a8509ef 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 @@ -38,6 +38,8 @@ public class CreateTableInfo implements Writable, GsonPostProcessable { public static final Logger LOG = LoggerFactory.getLogger(CreateTableInfo.class); + @SerializedName(value = "dbId") + private long dbId = -1L; @SerializedName(value = "dbName") private String dbName; @SerializedName(value = "table") @@ -47,7 +49,9 @@ public CreateTableInfo() { // for persist } - public CreateTableInfo(String dbName, Table table) { + // for internal table + public CreateTableInfo(String dbName, long dbId, Table table) { + this.dbId = dbId; this.dbName = dbName; this.table = table; } @@ -56,6 +60,10 @@ public String getDbName() { return dbName; } + public long getDbId() { + return dbId; + } + public Table getTable() { return table; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java b/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java index 81280575248cc1..8138e765eff032 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java @@ -228,7 +228,7 @@ public static void loadJournal(Env env, Long logId, JournalEntity journal) { LOG.info("Begin to unprotect create table. db = " + info.getDbName() + " table = " + info.getTable() .getId()); CreateTableRecord record = new CreateTableRecord(logId, info); - env.replayCreateTable(info.getDbName(), info.getTable()); + env.replayCreateTable(info.getDbName(), info.getDbId(), info.getTable()); env.getBinlogManager().addCreateTableRecord(record); break; } 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();