From f1c6366c1b6f035c6cb04ec8f2368d08972c2674 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 a0d748c08c72d0..a206209508bb1f 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 @@ -552,16 +552,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; + } /**