xy720 commented on code in PR #68038:
URL: https://github.com/apache/doris/pull/68038#discussion_r4033249773


##########
fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRelationManager.java:
##########
@@ -258,29 +271,48 @@ private void 
addMTMVTablesOneLevelAndFromView(Set<BaseTableInfo> baseTables, Bas
         if (CollectionUtils.isEmpty(baseTables)) {
             return;
         }
-        for (BaseTableInfo baseTableInfo : baseTables) {
+        Set<BaseTableInfo> snapshot = ImmutableSet.copyOf(baseTables);
+        mtmvToBaseTablesOneLevelAndFromView.put(mtmvInfo, snapshot);
+        for (BaseTableInfo baseTableInfo : snapshot) {
             getOrCreateMTMVsOneLevelAndFromView(baseTableInfo).add(mtmvInfo);
         }
     }
 
     private void removeMTMV(BaseTableInfo mtmvInfo) {
-        for (Set<BaseTableInfo> sets : tableMTMVs.values()) {
-            sets.remove(mtmvInfo);
-        }
-        for (Set<BaseTableInfo> sets : viewMTMVs.values()) {
-            sets.remove(mtmvInfo);
+        removeFromForwardMap(tableMTMVs, mtmvToBaseTables, mtmvInfo);
+        removeFromForwardMap(viewMTMVs, mtmvToBaseViews, mtmvInfo);
+        removeFromForwardMap(tableMTMVsOneLevelAndFromView, 
mtmvToBaseTablesOneLevelAndFromView, mtmvInfo);
+    }
+
+    private void removeFromForwardMap(Map<BaseTableInfo, Set<BaseTableInfo>> 
forwardMap,
+            Map<BaseTableInfo, Set<BaseTableInfo>> reverseIndex, BaseTableInfo 
mtmvInfo) {
+        Set<BaseTableInfo> bases = reverseIndex.remove(mtmvInfo);
+        if (bases == null) {
+            return;
         }
-        for (Set<BaseTableInfo> sets : tableMTMVsOneLevelAndFromView.values()) 
{
-            sets.remove(mtmvInfo);
+        for (BaseTableInfo base : bases) {
+            Set<BaseTableInfo> mtmvs = forwardMap.get(base);

Review Comment:
   反向索引的 key 是 new BaseTableInfo(mtmv, dbId),构造时 ctlName 就是 
INTERNAL_CATALOG_NAME,不参与 compatible 迁移,hash key 稳定;value 里的 base 对象与 forward 
map key 是同一物理对象,mutation 双方同步,查询一致。hashCode/equals 契约违约是历史遗留问题,建议另开 PR 修复。



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to