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 3b1b7eae8a fix(register): report the bootstrap instance type from the
independent heartbeat (#7696) (#7722)
3b1b7eae8a is described below
commit 3b1b7eae8a3a8d374f7bf8b1ce11cf0af520fe93
Author: konlue <[email protected]>
AuthorDate: Mon Oct 19 15:33:49 2026 +0800
fix(register): report the bootstrap instance type from the independent
heartbeat (#7696) (#7722)
---
.../register/client/beat/HeartbeatListener.java | 2 +-
.../register/client/beat/HeartbeatListenerTest.java | 20 ++++++++++++++++++++
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git
a/shenyu-register-center/shenyu-register-client-beat/src/main/java/org/apache/shenyu/register/client/beat/HeartbeatListener.java
b/shenyu-register-center/shenyu-register-client-beat/src/main/java/org/apache/shenyu/register/client/beat/HeartbeatListener.java
index e27a183020..c393cda0b0 100644
---
a/shenyu-register-center/shenyu-register-client-beat/src/main/java/org/apache/shenyu/register/client/beat/HeartbeatListener.java
+++
b/shenyu-register-center/shenyu-register-client-beat/src/main/java/org/apache/shenyu/register/client/beat/HeartbeatListener.java
@@ -105,7 +105,7 @@ public class HeartbeatListener {
instanceBeatInfoDTO.setInstanceIp(IpUtils.getHost());
instanceBeatInfoDTO.setNamespaceId(shenyuConfig.getNamespace());
instanceBeatInfoDTO.setInstanceInfo(SystemInfoUtils.getSystemInfo());
-
instanceBeatInfoDTO.setInstanceType(InstanceTypeConstants.BOOTSTRAP_INSTANCE_INFO);
+
instanceBeatInfoDTO.setInstanceType(InstanceTypeConstants.BOOTSTRAP_INSTANCE_TYPE);
sendHeartbeat(instanceBeatInfoDTO);
}, INITIAL_DELAY, CHECK_PERIOD, TimeUnit.SECONDS
);
diff --git
a/shenyu-register-center/shenyu-register-client-beat/src/test/java/org/apache/shenyu/register/client/beat/HeartbeatListenerTest.java
b/shenyu-register-center/shenyu-register-client-beat/src/test/java/org/apache/shenyu/register/client/beat/HeartbeatListenerTest.java
index 0bb502f731..311127594f 100644
---
a/shenyu-register-center/shenyu-register-client-beat/src/test/java/org/apache/shenyu/register/client/beat/HeartbeatListenerTest.java
+++
b/shenyu-register-center/shenyu-register-client-beat/src/test/java/org/apache/shenyu/register/client/beat/HeartbeatListenerTest.java
@@ -19,7 +19,10 @@ package org.apache.shenyu.register.client.beat;
import org.apache.shenyu.common.config.ShenyuConfig;
import org.apache.shenyu.common.constant.Constants;
+import org.apache.shenyu.common.constant.InstanceTypeConstants;
+import org.apache.shenyu.common.utils.GsonUtils;
import org.apache.shenyu.common.utils.SystemInfoUtils;
+import org.apache.shenyu.register.common.dto.InstanceBeatInfoDTO;
import org.apache.shenyu.register.common.utils.RegisterUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -111,6 +114,23 @@ class HeartbeatListenerTest {
}
}
+ @Test
+ void testPeriodicHeartbeatReportsBootstrapInstanceType() {
+ try (MockedConstruction<ScheduledThreadPoolExecutor> executors =
Mockito.mockConstruction(ScheduledThreadPoolExecutor.class);
+ MockedStatic<SystemInfoUtils> ignored =
Mockito.mockStatic(SystemInfoUtils.class);
+ MockedStatic<RegisterUtils> register =
Mockito.mockStatic(RegisterUtils.class)) {
+ register.when(() -> RegisterUtils.doLogin(anyString(),
anyString(), anyString())).thenReturn(Optional.of("mock-token"));
+ heartbeatListener = new HeartbeatListener(config, shenyuConfig,
serverProperties);
+ ArgumentCaptor<Runnable> periodic =
ArgumentCaptor.forClass(Runnable.class);
+
Mockito.verify(executors.constructed().get(0)).scheduleAtFixedRate(periodic.capture(),
Mockito.eq(0L), Mockito.eq(5L), Mockito.eq(TimeUnit.SECONDS));
+ periodic.getValue().run();
+ ArgumentCaptor<String> payload =
ArgumentCaptor.forClass(String.class);
+ register.verify(() -> RegisterUtils.doHeartBeat(payload.capture(),
anyString(), anyString(), anyString()), Mockito.atLeastOnce());
+ InstanceBeatInfoDTO reported =
GsonUtils.getInstance().fromJson(payload.getAllValues().get(0),
InstanceBeatInfoDTO.class);
+ assertEquals(InstanceTypeConstants.BOOTSTRAP_INSTANCE_TYPE,
reported.getInstanceType());
+ }
+ }
+
@Test
void testHeartbeatListenerCreation() {