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 f84e339a5124e9..4f30f193216e72 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 @@ -93,6 +93,7 @@ public static boolean isMTMVPartitionSync(MTMVRefreshContext refreshContext, Str Set excludedTriggerTables) throws AnalysisException { MTMV mtmv = refreshContext.getMtmv(); Map> partitionMappings = refreshContext.getByPartitionName(partitionName); + Set excludedTriggerTablesToCheck = Sets.newHashSet(excludedTriggerTables); if (mtmv.getMvPartitionInfo().getPartitionType() != MTMVPartitionType.SELF_MANAGE) { if (MapUtils.isEmpty(partitionMappings)) { LOG.warn("can not found pct partition, partitionName: {}, mtmvName: {}", @@ -103,7 +104,7 @@ public static boolean isMTMVPartitionSync(MTMVRefreshContext refreshContext, Str for (MTMVRelatedTableIf pctTable : pctTables) { Set relatedPartitionNames = partitionMappings.getOrDefault(pctTable, Sets.newHashSet()); // if follow base table, not need compare with related table, only should compare with related partition - excludedTriggerTables.add(new TableName(pctTable)); + excludedTriggerTablesToCheck.add(new TableName(pctTable)); if (!isSyncWithPartitions(refreshContext, partitionName, relatedPartitionNames, pctTable)) { return false; } @@ -111,7 +112,7 @@ public static boolean isMTMVPartitionSync(MTMVRefreshContext refreshContext, Str } return isSyncWithAllBaseTables(refreshContext, partitionName, tables, - excludedTriggerTables); + excludedTriggerTablesToCheck); } 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 17439adb289820..bceddc8e16f95b 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 @@ -28,6 +28,7 @@ import org.apache.doris.datasource.CatalogIf; import org.apache.doris.mtmv.MTMVPartitionInfo.MTMVPartitionType; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -240,6 +241,34 @@ public void testIsSyncWithPartitionNotSync() throws AnalysisException { Assert.assertFalse(isSyncWithPartition); } + @Test + public void testIsMTMVPartitionSyncWithImmutableExcludedTriggerTables() throws AnalysisException { + Map> partitionMappings = Maps.newHashMap(); + partitionMappings.put(baseOlapTable, Sets.newHashSet("name2")); + new Expectations() { + { + context.getByPartitionName("name1"); + minTimes = 0; + result = partitionMappings; + + mtmvPartitionInfo.getPartitionType(); + minTimes = 0; + result = MTMVPartitionType.FOLLOW_BASE_TABLE; + + mtmvPartitionInfo.getPctTables(); + minTimes = 0; + result = Sets.newHashSet(baseOlapTable); + } + }; + + Set excludedTriggerTables = ImmutableSet.of(); + boolean isMTMVPartitionSync = MTMVPartitionUtil.isMTMVPartitionSync(context, "name1", baseTables, + excludedTriggerTables); + + Assert.assertTrue(isMTMVPartitionSync); + Assert.assertTrue(excludedTriggerTables.isEmpty()); + } + @Test public void testGeneratePartitionName() { List> inValues = Lists.newArrayList();