This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 97a48ca6b722021cac14dab95393e5e0a4ec2825 Author: zhangdong <[email protected]> AuthorDate: Sun Mar 24 21:46:26 2024 +0800 [fix](mtmv)fix mysql MTMV do not automatically refresh even if the refresh method is COMPLETE (#32683) --- .../org/apache/doris/job/extensions/mtmv/MTMVTask.java | 8 ++++---- .../src/test/java/org/apache/doris/mtmv/MTMVTaskTest.java | 15 +++++++++++++++ regression-test/suites/mtmv_p0/test_mysql_mtmv.groovy | 4 ++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java b/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java index 499d1571d39..979f5535a22 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java +++ b/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java @@ -408,6 +408,10 @@ public class MTMVTask extends AbstractTask { return MTMVPartitionUtil.getPartitionsIdsByNames(mtmv, taskContext.getPartitions()); } } + // if refreshMethod is COMPLETE, we must FULL refresh, avoid external table MTMV always not refresh + if (mtmv.getRefreshInfo().getRefreshMethod() == RefreshMethod.COMPLETE) { + return mtmv.getPartitionIds(); + } // check if data is fresh // We need to use a newly generated relationship and cannot retrieve it using mtmv.getRelation() // to avoid rebuilding the baseTable and causing a change in the tableId @@ -420,10 +424,6 @@ public class MTMVTask extends AbstractTask { if (mtmv.getMvPartitionInfo().getPartitionType() == MTMVPartitionType.SELF_MANAGE) { return mtmv.getPartitionIds(); } - // if refreshMethod is COMPLETE, we only FULL refresh - if (mtmv.getRefreshInfo().getRefreshMethod() == RefreshMethod.COMPLETE) { - return mtmv.getPartitionIds(); - } // We need to use a newly generated relationship and cannot retrieve it using mtmv.getRelation() // to avoid rebuilding the baseTable and causing a change in the tableId return MTMVPartitionUtil.getMTMVNeedRefreshPartitions(mtmv, relation.getBaseTables(), partitionMappings); diff --git a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVTaskTest.java b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVTaskTest.java index 1d1c952bb3c..55ddc85768c 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVTaskTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVTaskTest.java @@ -120,12 +120,27 @@ public class MTMVTaskTest { @Test public void testCalculateNeedRefreshPartitionsSystem() throws AnalysisException { + new Expectations() { + { + mtmvRefreshInfo.getRefreshMethod(); + minTimes = 0; + result = RefreshMethod.AUTO; + } + }; MTMVTaskContext context = new MTMVTaskContext(MTMVTaskTriggerMode.SYSTEM); MTMVTask task = new MTMVTask(mtmv, relation, context); List<Long> result = task.calculateNeedRefreshPartitions(Maps.newHashMap()); Assert.assertTrue(CollectionUtils.isEmpty(result)); } + @Test + public void testCalculateNeedRefreshPartitionsSystemComplete() throws AnalysisException { + MTMVTaskContext context = new MTMVTaskContext(MTMVTaskTriggerMode.SYSTEM); + MTMVTask task = new MTMVTask(mtmv, relation, context); + List<Long> result = task.calculateNeedRefreshPartitions(Maps.newHashMap()); + Assert.assertEquals(allPartitionIds, result); + } + @Test public void testCalculateNeedRefreshPartitionsSystemNotSyncComplete() throws AnalysisException { new Expectations() { diff --git a/regression-test/suites/mtmv_p0/test_mysql_mtmv.groovy b/regression-test/suites/mtmv_p0/test_mysql_mtmv.groovy index 11d21631e78..35874beb4d3 100644 --- a/regression-test/suites/mtmv_p0/test_mysql_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_mysql_mtmv.groovy @@ -50,7 +50,7 @@ suite("test_mysql_mtmv", "p0,external,mysql,external_docker,external_docker_hive sql """ CREATE MATERIALIZED VIEW ${mvName} - BUILD DEFERRED REFRESH AUTO ON MANUAL + BUILD DEFERRED REFRESH COMPLETE ON MANUAL DISTRIBUTED BY RANDOM BUCKETS 2 PROPERTIES ('replication_num' = '1') AS @@ -58,7 +58,7 @@ suite("test_mysql_mtmv", "p0,external,mysql,external_docker,external_docker_hive """ sql """ - REFRESH MATERIALIZED VIEW ${mvName} complete + REFRESH MATERIALIZED VIEW ${mvName} AUTO """ def jobName = getJobName(dbName, mvName); waitingMTMVTaskFinished(jobName) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
