This is an automated email from the ASF dual-hosted git repository.

morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 2d6852bb2cf [fix](mtmv)fix when related table drop partition,mv 
partition is sync (#36547)
2d6852bb2cf is described below

commit 2d6852bb2cf73eca01adcfa9028765b6ca402939
Author: zhangdong <493738...@qq.com>
AuthorDate: Thu Jun 20 14:51:06 2024 +0800

    [fix](mtmv)fix when related table drop partition,mv partition is sync 
(#36547)
    
    for example:
    if mv's partition [mv_p1] is related with t1's partition [p1,p2]
    
    when p2 dropped,
    mv_p1'isSync should be false
---
 .../java/org/apache/doris/mtmv/MTMVPartitionUtil.java  |  5 +++++
 .../org/apache/doris/mtmv/MTMVRefreshSnapshot.java     |  9 +++++++++
 .../org/apache/doris/mtmv/MTMVPartitionUtilTest.java   | 18 ++++++++++++++++++
 3 files changed, 32 insertions(+)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java
index 82a649be37c..6595afb70f7 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java
@@ -325,6 +325,11 @@ public class MTMVPartitionUtil {
         if (!relatedTable.needAutoRefresh()) {
             return true;
         }
+        // check if partitions of related table if changed
+        Set<String> snapshotPartitions = 
mtmv.getRefreshSnapshot().getSnapshotPartitions(mtmvPartitionName);
+        if (!Objects.equals(relatedPartitionNames, snapshotPartitions)) {
+            return false;
+        }
         for (String relatedPartitionName : relatedPartitionNames) {
             MTMVSnapshotIf relatedPartitionCurrentSnapshot = relatedTable
                     .getPartitionSnapshot(relatedPartitionName);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRefreshSnapshot.java 
b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRefreshSnapshot.java
index c1d07b27049..d48911275e8 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRefreshSnapshot.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRefreshSnapshot.java
@@ -18,6 +18,7 @@
 package org.apache.doris.mtmv;
 
 import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import com.google.gson.annotations.SerializedName;
 import org.apache.commons.collections.MapUtils;
 
@@ -46,6 +47,14 @@ public class MTMVRefreshSnapshot {
         return 
relatedPartitionSnapshot.equals(relatedPartitionCurrentSnapshot);
     }
 
+    public Set<String> getSnapshotPartitions(String mtmvPartitionName) {
+        MTMVRefreshPartitionSnapshot partitionSnapshot = 
partitionSnapshots.get(mtmvPartitionName);
+        if (partitionSnapshot == null) {
+            return Sets.newHashSet();
+        }
+        return partitionSnapshot.getPartitions().keySet();
+    }
+
     public boolean equalsWithBaseTable(String mtmvPartitionName, long 
baseTableId,
             MTMVSnapshotIf baseTableCurrentSnapshot) {
         MTMVRefreshPartitionSnapshot partitionSnapshot = 
partitionSnapshots.get(mtmvPartitionName);
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java
index 261b750c796..c125e548d06 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java
@@ -130,6 +130,10 @@ public class MTMVPartitionUtilTest {
                 refreshSnapshot.equalsWithRelatedPartition(anyString, 
anyString, (MTMVSnapshotIf) any);
                 minTimes = 0;
                 result = true;
+
+                refreshSnapshot.getSnapshotPartitions(anyString);
+                minTimes = 0;
+                result = Sets.newHashSet("name2");
             }
         };
     }
@@ -160,6 +164,20 @@ public class MTMVPartitionUtilTest {
         Assert.assertTrue(isSyncWithPartition);
     }
 
+    @Test
+    public void testIsSyncWithPartitionNotEqual() throws AnalysisException {
+        new Expectations() {
+            {
+                refreshSnapshot.getSnapshotPartitions(anyString);
+                minTimes = 0;
+                result = Sets.newHashSet("name2", "name3");
+            }
+        };
+        boolean isSyncWithPartition = MTMVPartitionUtil
+                .isSyncWithPartitions(mtmv, "name1", baseOlapTable, 
Sets.newHashSet("name2"));
+        Assert.assertFalse(isSyncWithPartition);
+    }
+
     @Test
     public void testIsSyncWithPartitionNotSync() throws AnalysisException {
         new Expectations() {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to