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 df92e2aa95 [type: bug] Fix REFRESH clearing only first plugin's parent 
path in AbstractPathDataChangedListener (#6832) (#6998)
df92e2aa95 is described below

commit df92e2aa954fa52567ea35bc57385e3bfb54ad1c
Author: Arvin <[email protected]>
AuthorDate: Fri Sep 4 16:12:37 2026 +0800

    [type: bug] Fix REFRESH clearing only first plugin's parent path in 
AbstractPathDataChangedListener (#6832) (#6998)
    
    Signed-off-by: zhang-arvin <[email protected]>
    Co-authored-by: aias00 <[email protected]>
---
 .../listener/AbstractPathDataChangedListener.java  | 29 ++++++++++++----------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git 
a/shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/listener/AbstractPathDataChangedListener.java
 
b/shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/listener/AbstractPathDataChangedListener.java
index 7c4811c17f..587d277fcb 100644
--- 
a/shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/listener/AbstractPathDataChangedListener.java
+++ 
b/shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/listener/AbstractPathDataChangedListener.java
@@ -31,8 +31,9 @@ import org.apache.shenyu.common.utils.GsonUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * AbstractPathDataChangedListener.
@@ -112,12 +113,13 @@ public abstract class AbstractPathDataChangedListener 
implements DataChangedList
     @Override
     public void onSelectorChanged(final List<SelectorData> changed, final 
DataEventTypeEnum eventType) {
         if (eventType == DataEventTypeEnum.REFRESH && 
CollectionUtils.isNotEmpty(changed)) {
-            Optional<SelectorData> selectorDataOptional = 
changed.stream().findFirst();
-            if (selectorDataOptional.isPresent()) {
-                SelectorData firstData = selectorDataOptional.get();
-                String selectorParentPath = 
DefaultPathConstants.buildSelectorParentPath(firstData.getNamespaceId(), 
firstData.getPluginName());
-                deletePathRecursive(selectorParentPath);
-            }
+            changed.stream()
+                    .collect(Collectors.groupingBy(
+                            data -> 
DefaultPathConstants.buildSelectorParentPath(data.getNamespaceId(), 
data.getPluginName()),
+                            LinkedHashMap::new,
+                            Collectors.toList()))
+                    .keySet()
+                    .forEach(this::deletePathRecursive);
         }
         for (SelectorData data : changed) {
             String selectorRealPath = 
DefaultPathConstants.buildSelectorRealPath(data.getNamespaceId(), 
data.getPluginName(), data.getId());
@@ -157,12 +159,13 @@ public abstract class AbstractPathDataChangedListener 
implements DataChangedList
     @Override
     public void onRuleChanged(final List<RuleData> changed, final 
DataEventTypeEnum eventType) {
         if (eventType == DataEventTypeEnum.REFRESH && 
CollectionUtils.isNotEmpty(changed)) {
-            Optional<RuleData> ruleDataOptional = changed.stream().findFirst();
-            if (ruleDataOptional.isPresent()) {
-                RuleData firstData = ruleDataOptional.get();
-                String selectorParentPath = 
DefaultPathConstants.buildRuleParentPath(firstData.getNamespaceId(), 
firstData.getPluginName());
-                deletePathRecursive(selectorParentPath);
-            }
+            changed.stream()
+                    .collect(Collectors.groupingBy(
+                            data -> 
DefaultPathConstants.buildRuleParentPath(data.getNamespaceId(), 
data.getPluginName()),
+                            LinkedHashMap::new,
+                            Collectors.toList()))
+                    .keySet()
+                    .forEach(this::deletePathRecursive);
         }
         for (RuleData data : changed) {
             String ruleRealPath = 
DefaultPathConstants.buildRulePath(data.getNamespaceId(), data.getPluginName(), 
data.getSelectorId(), data.getId());

Reply via email to