diff --git a/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java b/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java index 203a5d969df73f..d4c71e999b1f48 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java +++ b/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java @@ -58,6 +58,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -1002,8 +1003,9 @@ public void modifyBackends(ModifyBackendOp op) throws UserException { boolean shouldModify = false; Map tagMap = op.getTagMap(); if (!tagMap.isEmpty()) { + Map oldTagMap = new HashMap<>(be.getTagMap()); be.setTagMap(tagMap); - shouldModify = true; + shouldModify = !areTagEntriesEqual(oldTagMap, tagMap); } if (op.isQueryDisabled() != null) { @@ -1118,4 +1120,25 @@ public static boolean needRetryWithReplan(String errorMsg) { } return false; } + + private static boolean areTagEntriesEqual(Map oldTagMap, Map newTagMap) { + Map oldTagEntries = filterTagEntries(oldTagMap); + Map newTagEntries = filterTagEntries(newTagMap); + return oldTagEntries.equals(newTagEntries); + } + + private static Map filterTagEntries(Map map) { + Map result = new HashMap<>(); + if (map == null) { + return result; + } + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + if (key != null && key.startsWith("tag.")) { + result.put(key, entry.getValue()); + } + } + return result; + } + }