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