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 7610d75a22d5fa..1b3c07a9c2ba38 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 Void visitPhysicalBlackholeSink(PhysicalBlackholeSink sin @Override public Void visitPhysicalOlapTableSink(PhysicalOlapTableSink 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 Void visitPhysicalOlapTableSink(PhysicalOlapTableSink ola @Override public Void visitPhysicalHiveTableSink(PhysicalHiveTableSink 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 Void visitPhysicalHiveTableSink(PhysicalHiveTableSink hiv @Override public Void visitPhysicalIcebergTableSink( PhysicalIcebergTableSink 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 Void visitPhysicalIcebergTableSink( @Override public Void visitPhysicalMaxComputeTableSink( PhysicalMaxComputeTableSink 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 cf6e8b443567b8..cff2331196e931 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 @@ -5621,6 +5621,11 @@ public void setDumpNereidsMemo(boolean dumpNereidsMemo) { } 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 8721879f5afcc3..b646bc1a4b65d1 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 void testSetVarInHint() { new NereidsParser().parseSQL(sql); Assertions.assertEquals(false, connectContext.getSessionVariable().enableNereidsDmlWithPipeline); } + + @Test + public void testEnableStrictConsistencyDmlDefaultsToFalseInCloudMode() { + new MockUp() { + @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() { + @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 009175ae80526b..7bf79f3a7a55cd 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; """