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

Reply via email to