This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push: new 43de9402b4d [opt](plan) only lock olap table when query plan #27639 (#27656) 43de9402b4d is described below commit 43de9402b4d80b23d3dc9bdb1f64848e405e5937 Author: Mingyu Chen <morning...@163.com> AuthorDate: Tue Nov 28 10:36:22 2023 +0800 [opt](plan) only lock olap table when query plan #27639 (#27656) bp #27639 --- .../src/main/java/org/apache/doris/catalog/OlapTable.java | 13 ++++++++++++- .../src/main/java/org/apache/doris/catalog/TableIf.java | 9 +++++++++ .../main/java/org/apache/doris/nereids/CascadesContext.java | 3 +++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java index a49ec0db0b3..185117e7687 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java @@ -2335,6 +2335,17 @@ public class OlapTable extends Table { @Override public boolean isPartitionColumn(String columnName) { return getPartitionInfo().getPartitionColumns().stream() - .anyMatch(c -> c.getName().equalsIgnoreCase(columnName)); + .anyMatch(c -> c.getName().equalsIgnoreCase(columnName)); + } + + /** + * For olap table, we need to acquire read lock when plan. + * Because we need to make sure the partition's version remain unchanged when plan. + * + * @return + */ + @Override + public boolean needReadLockWhenPlan() { + return true; } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java index 3539d17e269..3f53fa1bfae 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java @@ -149,6 +149,15 @@ public interface TableIf { void write(DataOutput out) throws IOException; + /** + * return true if this kind of table need read lock when doing query plan. + * + * @return + */ + default boolean needReadLockWhenPlan() { + return false; + } + /** * Doris table type. */ 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 a81e9f008fa..39edea95d20 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 @@ -521,6 +521,9 @@ public class CascadesContext implements ScheduleContext { cascadesContext.extractTables(plan); } for (TableIf table : cascadesContext.tables.values()) { + if (!table.needReadLockWhenPlan()) { + continue; + } if (!table.tryReadLock(1, TimeUnit.MINUTES)) { close(); throw new RuntimeException(String.format("Failed to get read lock on table: %s", table.getName())); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org