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;
}