From 3bd1f47ec102d573408e1130bdb2884fd1a0ccbb Mon Sep 17 00:00:00 2001 From: juicew <491852417@qq.com> Date: Sun, 23 Aug 2026 17:28:32 +0800 Subject: [PATCH 1/2] fix: Fix scale rule cache entity inconsistency. - Reuse the persisted entity after create. - Reuse the updated entity after update. --- .../shenyu/admin/service/impl/ScaleRuleServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 57a66e5928a6..ce35b5f92a1c 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 @@ -109,7 +109,7 @@ public int create(final ScaleRuleDTO scaleRuleDTO) { final ScaleRuleDO scaleRuleDO = ScaleRuleDO.buildScaleRuleDO(scaleRuleDTO); int rows = scaleRuleMapper.insertSelective(scaleRuleDO); if (rows > 0) { - scaleRuleCache.addOrUpdateRuleToCache(ScaleRuleDO.buildScaleRuleDO(scaleRuleDTO)); + scaleRuleCache.addOrUpdateRuleToCache(scaleRuleDO); } return rows; } @@ -125,7 +125,7 @@ public int update(final ScaleRuleDTO scaleRuleDTO) { final ScaleRuleDO after = ScaleRuleDO.buildScaleRuleDO(scaleRuleDTO); int rows = scaleRuleMapper.updateByPrimaryKey(after); if (rows > 0) { - scaleRuleCache.addOrUpdateRuleToCache(ScaleRuleDO.buildScaleRuleDO(scaleRuleDTO)); + scaleRuleCache.addOrUpdateRuleToCache(after); } return rows; } From 995d908a3fe10c94c84e683246a3ac02f8dfb923 Mon Sep 17 00:00:00 2001 From: juicew <491852417@qq.com> Date: Thu, 3 Sep 2026 23:19:32 +0800 Subject: [PATCH 2/2] fix: remove stale scale rule cache key on update --- .../shenyu/admin/service/impl/ScaleRuleServiceImpl.java | 5 +++++ 1 file changed, 5 insertions(+) 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 ce35b5f92a1c..4aa14645c6d7 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 @@ -32,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -122,9 +123,13 @@ public int create(final ScaleRuleDTO scaleRuleDTO) { */ @Override public int update(final ScaleRuleDTO scaleRuleDTO) { + final ScaleRuleDO before = scaleRuleMapper.selectByPrimaryKey(scaleRuleDTO.getId()); final ScaleRuleDO after = ScaleRuleDO.buildScaleRuleDO(scaleRuleDTO); int rows = scaleRuleMapper.updateByPrimaryKey(after); if (rows > 0) { + if (Objects.nonNull(before) && !Objects.equals(before.getMetricName(), after.getMetricName())) { + scaleRuleCache.removeRulesFromCache(List.of(before.getMetricName())); + } scaleRuleCache.addOrUpdateRuleToCache(after); } return rows;