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

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


The following commit(s) were added to refs/heads/master by this push:
     new 2b8efeb55a fix: Fix scale rule cache eviction by using rule ids(#6972) 
(#6975)
2b8efeb55a is described below

commit 2b8efeb55a8ab7875b1513000e99f5f2b93cd3b7
Author: Southern <[email protected]>
AuthorDate: Mon Sep 28 09:11:29 2026 +0800

    fix: Fix scale rule cache eviction by using rule ids(#6972) (#6975)
    
    * fix: Fix scale rule cache eviction by using rule IDs.
      - Add cache eviction by database primary key.
      - Keep metric names as cache keys.
      - Add scale rule deletion to remove entries by rule ID.
    
    * fix: Fix scale rule cache entity inconsistency.
    
      - Reuse the persisted entity after create.
      - Reuse the updated entity after update.
    
    * fix: evict scale rule cache entries by rule id
    
      - Base the change on the cache consistency fix from pr #6973
      - Remove stale cache entries by database rule id during deletion
      - Remove the old metric-name cache key when a rule is renamed
      - Keep the persisted entity id when caching newly created rules
    
    * fix: remove scale rule cache entries by ID
    
    ---------
    
    Co-authored-by: aias00 <[email protected]>
---
 .../scale/monitor/subject/cache/ScaleRuleCache.java      | 16 ++++++++++++++++
 .../shenyu/admin/service/impl/ScaleRuleServiceImpl.java  |  2 +-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/scale/monitor/subject/cache/ScaleRuleCache.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/scale/monitor/subject/cache/ScaleRuleCache.java
index f5e57865ba..d206c4d711 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/scale/monitor/subject/cache/ScaleRuleCache.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/scale/monitor/subject/cache/ScaleRuleCache.java
@@ -20,7 +20,9 @@ package org.apache.shenyu.admin.scale.monitor.subject.cache;
 import org.apache.shenyu.admin.model.entity.ScaleRuleDO;
 import org.springframework.stereotype.Component;
 
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 @Component
@@ -56,6 +58,20 @@ public class ScaleRuleCache {
         metricNames.forEach(ruleCache::remove);
     }
 
+    /**
+     * Removes rules from cache by their primary keys.
+     *
+     * @param ids rule primary keys
+     */
+    public void removeRulesByIdsFromCache(final List<String> ids) {
+        final Set<String> idSet = new HashSet<>(ids);
+        ruleCache.forEach((metricName, rule) -> {
+            if (idSet.contains(rule.getId())) {
+                ruleCache.remove(metricName, rule);
+            }
+        });
+    }
+
     /**
      * getAllRules.
      *
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ScaleRuleServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ScaleRuleServiceImpl.java
index 03655c82c1..faa97abc36 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ScaleRuleServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ScaleRuleServiceImpl.java
@@ -150,7 +150,7 @@ public class ScaleRuleServiceImpl implements 
ScaleRuleService {
     public int delete(final List<String> ids) {
         int rows = scaleRuleMapper.delete(ids);
         if (rows > 0) {
-            runAfterCommit(() -> scaleRuleCache.removeRulesFromCache(ids));
+            runAfterCommit(() -> 
scaleRuleCache.removeRulesByIdsFromCache(ids));
         }
         return rows;
     }

Reply via email to