From 92f2201b104856526a2265afae3a063036d0ea6e Mon Sep 17 00:00:00 2001 From: morrySnow <101034200+morrySnow@users.noreply.github.com> Date: Thu, 1 Aug 2024 20:06:18 +0800 Subject: [PATCH] [fix](Nereids) remove db readlock before get table from db (#38660) pick from master #38660 insert will hold readlock of target table before planning. if nereids need db readlock after it, will lead to dead lock. because other statement need to hold db lock before get table lock for example: insert: target table read lock -> database read lock drop table: database write lock -> target table write lock --- .../org/apache/doris/nereids/CascadesContext.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/CascadesContext.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/CascadesContext.java index 434b87b3fcb22f..23711618d6d94a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/CascadesContext.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/CascadesContext.java @@ -514,16 +514,13 @@ public TableIf getTable(String ctlName, String dbName, String tableName, Env env if (db == null) { throw new RuntimeException("Database [" + dbName + "] does not exist in catalog [" + ctlName + "]."); } - db.readLock(); - try { - TableIf table = db.getTableNullable(tableName); - if (table == null) { - throw new RuntimeException("Table [" + tableName + "] does not exist in database [" + dbName + "]."); - } - return table; - } finally { - db.readUnlock(); + + TableIf table = db.getTableNullable(tableName); + if (table == null) { + throw new RuntimeException("Table [" + tableName + "] does not exist in database [" + dbName + "]."); } + return table; + } /**