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 5d8c1bf15f fix: fix polaris listener cache removal (#6986)
5d8c1bf15f is described below

commit 5d8c1bf15f34ee68e7592b46fed79f692b2badfa
Author: hengyuss <[email protected]>
AuthorDate: Wed Aug 26 14:55:13 2026 +0800

    fix: fix polaris listener cache removal (#6986)
    
    Co-authored-by: aias00 <[email protected]>
---
 .../sync/data/polaris/PolarisSyncDataService.java  |  2 +-
 .../data/polaris/PolarisSyncDataServiceTest.java   | 26 ++++++++++++++++++++++
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git 
a/shenyu-sync-data-center/shenyu-sync-data-polaris/src/main/java/org/apache/shenyu/sync/data/polaris/PolarisSyncDataService.java
 
b/shenyu-sync-data-center/shenyu-sync-data-polaris/src/main/java/org/apache/shenyu/sync/data/polaris/PolarisSyncDataService.java
index c054a25ad0..51c2fc0b72 100644
--- 
a/shenyu-sync-data-center/shenyu-sync-data-polaris/src/main/java/org/apache/shenyu/sync/data/polaris/PolarisSyncDataService.java
+++ 
b/shenyu-sync-data-center/shenyu-sync-data-polaris/src/main/java/org/apache/shenyu/sync/data/polaris/PolarisSyncDataService.java
@@ -103,7 +103,7 @@ public class PolarisSyncDataService extends 
AbstractNodeDataSyncService implemen
 
     @Override
     protected void doRemoveListener(final String removeKey) {
-        final ConfigFileChangeListener configFileChangeListener = 
watchCache.get(removeKey);
+        final ConfigFileChangeListener configFileChangeListener = 
watchCache.remove(removeKey);
         if (Objects.nonNull(configFileChangeListener)) {
             final ConfigFile configFile = 
configFileService.getConfigFile(polarisConfig.getNamespace(), 
polarisConfig.getFileGroup(), removeKey);
             configFile.removeChangeListener(configFileChangeListener);
diff --git 
a/shenyu-sync-data-center/shenyu-sync-data-polaris/src/test/java/org/apache/shenyu/sync/data/polaris/PolarisSyncDataServiceTest.java
 
b/shenyu-sync-data-center/shenyu-sync-data-polaris/src/test/java/org/apache/shenyu/sync/data/polaris/PolarisSyncDataServiceTest.java
index 12160beb01..4f0193cc1b 100644
--- 
a/shenyu-sync-data-center/shenyu-sync-data-polaris/src/test/java/org/apache/shenyu/sync/data/polaris/PolarisSyncDataServiceTest.java
+++ 
b/shenyu-sync-data-center/shenyu-sync-data-polaris/src/test/java/org/apache/shenyu/sync/data/polaris/PolarisSyncDataServiceTest.java
@@ -44,8 +44,10 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.lenient;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -276,6 +278,30 @@ class PolarisSyncDataServiceTest {
         verify(configFile, 
atLeastOnce()).removeChangeListener(any(ConfigFileChangeListener.class));
     }
 
+    @Test
+    void testRemoveListenerAllowsListenerToBeAddedAgain() {
+        PolarisSyncDataService service = new PolarisSyncDataService(
+                polarisConfig,
+                configFileService,
+                pluginDataSubscriber,
+                Collections.singletonList(metaDataSubscriber),
+                Collections.singletonList(authDataSubscriber),
+                Collections.singletonList(proxySelectorDataSubscriber),
+                Collections.singletonList(discoveryUpstreamDataSubscriber),
+                shenyuConfig
+        );
+        ArgumentCaptor<String> keyCaptor = 
ArgumentCaptor.forClass(String.class);
+        verify(configFileService, atLeastOnce()).getConfigFile(anyString(), 
anyString(), keyCaptor.capture());
+        String watchedKey = keyCaptor.getAllValues().get(0);
+        clearInvocations(configFile);
+
+        service.doRemoveListener(watchedKey);
+        service.getServiceConfig(watchedKey, content -> { }, deletedKey -> { 
});
+
+        
verify(configFile).removeChangeListener(any(ConfigFileChangeListener.class));
+        verify(configFile, 
times(1)).addChangeListener(any(ConfigFileChangeListener.class));
+    }
+
     @Test
     void testCloseWithNullListener() {
         when(configFile.hasContent()).thenReturn(false);

Reply via email to