From 8f0552ee61313915cda5157b0d6c5c457e5e31ab 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) 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 34d6d7860e6f1a..306da4d0c50235 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 @@ -553,16 +553,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; + } /**