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 315bcbc3d1 fix(admin): refresh instance metadata on repeated
heartbeats (#7692) (#7721)
315bcbc3d1 is described below
commit 315bcbc3d1b5fcac0909f641682be579f51a8d96
Author: konlue <[email protected]>
AuthorDate: Mon Oct 19 09:34:07 2026 +0800
fix(admin): refresh instance metadata on repeated heartbeats (#7692) (#7721)
---
.../admin/service/impl/InstanceCheckService.java | 4 ++-
.../service/impl/InstanceCheckServiceTest.java | 30 ++++++++++++++++++++++
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/InstanceCheckService.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/InstanceCheckService.java
index cbcf4d520c..fbb31e4817 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/InstanceCheckService.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/InstanceCheckService.java
@@ -125,6 +125,9 @@ public class InstanceCheckService {
if (instanceHealthBeatInfo.containsKey(instanceKey)) {
InstanceInfoVO instanceInfoVO =
instanceHealthBeatInfo.get(instanceKey);
instanceInfoVO.setLastHeartBeatTime(System.currentTimeMillis());
+ if (StringUtils.isNotBlank(instanceBeatInfoDTO.getInstanceInfo()))
{
+
instanceInfoVO.setInstanceInfo(instanceBeatInfoDTO.getInstanceInfo());
+ }
} else {
InstanceInfoVO instanceInfoVO = new InstanceInfoVO();
instanceInfoVO.setInstanceIp(instanceBeatInfoDTO.getInstanceIp());
@@ -134,7 +137,6 @@ public class InstanceCheckService {
instanceInfoVO.setLastHeartBeatTime(System.currentTimeMillis());
instanceInfoVO.setInstancePort(instanceBeatInfoDTO.getInstancePort());
instanceInfoVO.setNamespaceId(instanceBeatInfoDTO.getNamespaceId());
- instanceInfoVO.setLastHeartBeatTime(System.currentTimeMillis());
instanceHealthBeatInfo.put(instanceKey, instanceInfoVO);
}
}
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/impl/InstanceCheckServiceTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/impl/InstanceCheckServiceTest.java
index 64fd81fac2..4e9f98fc15 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/impl/InstanceCheckServiceTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/impl/InstanceCheckServiceTest.java
@@ -168,6 +168,36 @@ public final class InstanceCheckServiceTest {
assertThat(second.getLastHeartBeatTime(), greaterThan(firstBeat));
}
+ @Test
+ void testHandleBeatInfoRefreshesInstanceInfoOnExistingIdentity() {
+ InstanceBeatInfoDTO first = buildDTO("127.0.0.1", "8080", "grpc",
"ns");
+ first.setInstanceInfo("version=1.0");
+ instanceCheckService.handleBeatInfo(first);
+ InstanceInfoVO cached =
instanceCheckService.getInstanceHealthBeatInfo(first);
+ assertNotNull(cached);
+ assertEquals("version=1.0", cached.getInstanceInfo());
+
+ // same identity reports again with changed metadata
+ InstanceBeatInfoDTO second = buildDTO("127.0.0.1", "8080", "grpc",
"ns");
+ second.setInstanceInfo("version=2.0");
+ instanceCheckService.handleBeatInfo(second);
+ assertEquals("version=2.0", cached.getInstanceInfo());
+ }
+
+ @Test
+ void testHandleBeatInfoKeepsInstanceInfoWhenBeatCarriesBlank() {
+ InstanceBeatInfoDTO first = buildDTO("127.0.0.1", "8080", "grpc",
"ns");
+ first.setInstanceInfo("version=1.0");
+ instanceCheckService.handleBeatInfo(first);
+ InstanceInfoVO cached =
instanceCheckService.getInstanceHealthBeatInfo(first);
+ assertNotNull(cached);
+
+ InstanceBeatInfoDTO blank = buildDTO("127.0.0.1", "8080", "grpc",
"ns");
+ blank.setInstanceInfo("");
+ instanceCheckService.handleBeatInfo(blank);
+ assertEquals("version=1.0", cached.getInstanceInfo());
+ }
+
@Test
void testSyncDB() {
InstanceBeatInfoDTO dto = buildDTO("127.0.0.1", "8080", "grpc", "ns");