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]

Reply via email to