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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]