public boolean syncServiceContext()

in naming/src/main/java/com/alibaba/nacos/naming/core/v2/index/NamingFuzzyWatchContextService.java [156:203]


    public boolean syncServiceContext(Service changedService, String changedType) {
        
        boolean needNotify = false;
        if (!changedType.equals(ADD_SERVICE) && !changedType.equals(DELETE_SERVICE)) {
            return false;
        }
        
        String serviceKey = NamingUtils.getServiceKey(changedService.getNamespace(), changedService.getGroup(),
                changedService.getName());
        Loggers.SRV_LOG.warn("[fuzzy-watch] service change matched,service key {},changed type {} ", serviceKey,
                changedType);
        
        Iterator<Map.Entry<String, Set<String>>> iterator = matchedServiceKeysMap.entrySet().iterator();
        boolean tryAdd = changedType.equals(ADD_SERVICE);
        boolean tryRemove = changedType.equals(DELETE_SERVICE);
        while (iterator.hasNext()) {
            Map.Entry<String, Set<String>> next = iterator.next();
            if (FuzzyGroupKeyPattern.matchPattern(next.getKey(), changedService.getName(), changedService.getGroup(),
                    changedService.getNamespace())) {
                Set<String> matchedServiceKeys = next.getValue();
                boolean reachToUpLimit = reachToUpLimit(matchedServiceKeys.size());
                boolean containsAlready = matchedServiceKeys.contains(serviceKey);
                
                if (tryAdd && !containsAlready && reachToUpLimit) {
                    Loggers.SRV_LOG.warn("[fuzzy-watch] pattern matched service count is over limit , "
                                    + "current service will be ignore for pattern {} ,current count is {}", next.getKey(),
                            matchedServiceKeys.size());
                    continue;
                }
                
                if (tryAdd && !containsAlready && matchedServiceKeys.add(serviceKey)) {
                    Loggers.SRV_LOG.info("[fuzzy-watch] pattern {} matched service keys count changed to {}",
                            next.getKey(), matchedServiceKeys.size());
                    needNotify = true;
                    
                }
                if (tryRemove && containsAlready && matchedServiceKeys.remove(serviceKey)) {
                    Loggers.SRV_LOG.info("[fuzzy-watch]  pattern {} matched service keys count changed to {}",
                            next.getKey(), matchedServiceKeys.size());
                    needNotify = true;
                    if (reachToUpLimit) {
                        makeupMatchedGroupKeys(next.getKey());
                    }
                }
            }
        }
        return needNotify;
    }