This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.1 by this push:
new ce06dcc43fa branch-4.1: [opt](load) disable
enable_strict_consistency_dml by default in cloud mode (#61892)
ce06dcc43fa is described below
commit ce06dcc43fa17264d0bfd2e0bf79981af1ed4749
Author: hui lai <[email protected]>
AuthorDate: Tue Mar 31 11:59:05 2026 +0800
branch-4.1: [opt](load) disable enable_strict_consistency_dml by default in
cloud mode (#61892)
pick https://github.com/apache/doris/pull/61814
---------
Co-authored-by: Claude Sonnet 4.6 <[email protected]>
---
.../nereids/properties/RequestPropertyDeriver.java | 8 ++---
.../java/org/apache/doris/qe/SessionVariable.java | 5 +++
.../org/apache/doris/qe/SessionVariablesTest.java | 36 ++++++++++++++++++++++
.../insert_p0/test_insert_tablet_sink.groovy | 10 ++++--
4 files changed, 52 insertions(+), 7 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/RequestPropertyDeriver.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/RequestPropertyDeriver.java
index 7610d75a22d..1b3c07a9c2b 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/RequestPropertyDeriver.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/RequestPropertyDeriver.java
@@ -144,7 +144,7 @@ public class RequestPropertyDeriver extends
PlanVisitor<Void, PlanContext> {
@Override
public Void visitPhysicalOlapTableSink(PhysicalOlapTableSink<? extends
Plan> olapTableSink, PlanContext context) {
- if (connectContext != null &&
!connectContext.getSessionVariable().enableStrictConsistencyDml) {
+ if (connectContext != null &&
!connectContext.getSessionVariable().isEnableStrictConsistencyDml()) {
addRequestPropertyToChildren(PhysicalProperties.ANY);
} else {
addRequestPropertyToChildren(olapTableSink.getRequirePhysicalProperties());
@@ -154,7 +154,7 @@ public class RequestPropertyDeriver extends
PlanVisitor<Void, PlanContext> {
@Override
public Void visitPhysicalHiveTableSink(PhysicalHiveTableSink<? extends
Plan> hiveTableSink, PlanContext context) {
- if (connectContext != null &&
!connectContext.getSessionVariable().enableStrictConsistencyDml) {
+ if (connectContext != null &&
!connectContext.getSessionVariable().isEnableStrictConsistencyDml()) {
addRequestPropertyToChildren(PhysicalProperties.ANY);
} else {
addRequestPropertyToChildren(hiveTableSink.getRequirePhysicalProperties());
@@ -165,7 +165,7 @@ public class RequestPropertyDeriver extends
PlanVisitor<Void, PlanContext> {
@Override
public Void visitPhysicalIcebergTableSink(
PhysicalIcebergTableSink<? extends Plan> icebergTableSink,
PlanContext context) {
- if (connectContext != null &&
!connectContext.getSessionVariable().enableStrictConsistencyDml) {
+ if (connectContext != null &&
!connectContext.getSessionVariable().isEnableStrictConsistencyDml()) {
addRequestPropertyToChildren(PhysicalProperties.ANY);
} else {
addRequestPropertyToChildren(icebergTableSink.getRequirePhysicalProperties());
@@ -176,7 +176,7 @@ public class RequestPropertyDeriver extends
PlanVisitor<Void, PlanContext> {
@Override
public Void visitPhysicalMaxComputeTableSink(
PhysicalMaxComputeTableSink<? extends Plan> mcTableSink,
PlanContext context) {
- if (connectContext != null &&
!connectContext.getSessionVariable().enableStrictConsistencyDml) {
+ if (connectContext != null &&
!connectContext.getSessionVariable().isEnableStrictConsistencyDml()) {
addRequestPropertyToChildren(PhysicalProperties.ANY);
} else {
addRequestPropertyToChildren(mcTableSink.getRequirePhysicalProperties());
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index 0a6f09978dc..e1114a3f8f4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -5624,6 +5624,11 @@ public class SessionVariable implements Serializable,
Writable {
}
public boolean isEnableStrictConsistencyDml() {
+ // In cloud mode (store-compute separation), there is only a single
copy of data,
+ // so multi-replica consistency is not a concern. Default to false.
+ if (Config.isCloudMode()) {
+ return false;
+ }
return this.enableStrictConsistencyDml;
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/qe/SessionVariablesTest.java
b/fe/fe-core/src/test/java/org/apache/doris/qe/SessionVariablesTest.java
index 8721879f5af..b646bc1a4b6 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/qe/SessionVariablesTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/qe/SessionVariablesTest.java
@@ -17,10 +17,13 @@
package org.apache.doris.qe;
+import org.apache.doris.common.Config;
import org.apache.doris.common.FeConstants;
import org.apache.doris.nereids.parser.NereidsParser;
import org.apache.doris.utframe.TestWithFeService;
+import mockit.Mock;
+import mockit.MockUp;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -81,4 +84,37 @@ public class SessionVariablesTest extends TestWithFeService {
new NereidsParser().parseSQL(sql);
Assertions.assertEquals(false,
connectContext.getSessionVariable().enableNereidsDmlWithPipeline);
}
+
+ @Test
+ public void testEnableStrictConsistencyDmlDefaultsToFalseInCloudMode() {
+ new MockUp<Config>() {
+ @Mock
+ public boolean isCloudMode() {
+ return true;
+ }
+ };
+ SessionVariable sv = new SessionVariable();
+ // In cloud mode, enable_strict_consistency_dml should always return
false
+ // because store-compute separation has no multi-replica consistency
concern.
+ Assertions.assertFalse(sv.isEnableStrictConsistencyDml());
+ // Even if the field is set to true, cloud mode overrides it.
+ sv.enableStrictConsistencyDml = true;
+ Assertions.assertFalse(sv.isEnableStrictConsistencyDml());
+ }
+
+ @Test
+ public void testEnableStrictConsistencyDmlDefaultsTrueInNonCloudMode() {
+ new MockUp<Config>() {
+ @Mock
+ public boolean isCloudMode() {
+ return false;
+ }
+ };
+ SessionVariable sv = new SessionVariable();
+ // In non-cloud mode, default is true (multi-replica consistency is
needed).
+ Assertions.assertTrue(sv.isEnableStrictConsistencyDml());
+ // Users can disable it.
+ sv.enableStrictConsistencyDml = false;
+ Assertions.assertFalse(sv.isEnableStrictConsistencyDml());
+ }
}
diff --git a/regression-test/suites/insert_p0/test_insert_tablet_sink.groovy
b/regression-test/suites/insert_p0/test_insert_tablet_sink.groovy
index 009175ae805..7bf79f3a7a5 100644
--- a/regression-test/suites/insert_p0/test_insert_tablet_sink.groovy
+++ b/regression-test/suites/insert_p0/test_insert_tablet_sink.groovy
@@ -60,9 +60,13 @@ suite("test_insert_tablet_sink") {
sql """ insert into table_largeint select k1,c_varchar,cast(rand() *
50000000 as bigint) from tmp_varchar where k1>=3; """
- explain {
- sql "insert into table_largeint select k1,c_varchar,cast(rand() *
50000000 as bigint) from tmp_varchar;"
- contains "OLAP_TABLE_SINK_HASH_PARTITIONED"
+ // In cloud mode (store-compute separation), enable_strict_consistency_dml
defaults to false,
+ // so no hash-partitioned sink is required for multi-replica consistency.
+ if (!isCloudMode()) {
+ explain {
+ sql "insert into table_largeint select k1,c_varchar,cast(rand() *
50000000 as bigint) from tmp_varchar;"
+ contains "OLAP_TABLE_SINK_HASH_PARTITIONED"
+ }
}
sql """ insert into table_largeint select k1,c_varchar,cast(rand() *
50000000 as bigint) from tmp_varchar; """
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]