This is an automated email from the ASF dual-hosted git repository.
youling1128 pushed a commit to branch 2.9.x
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/2.9.x by this push:
new ed855b8c0 [#4936] isolation event add instance total and isolation num
(#4937)
ed855b8c0 is described below
commit ed855b8c0fb8bfc82f8483c5177585a2fb2c817c
Author: Alex <[email protected]>
AuthorDate: Sat Oct 11 09:07:38 2025 +0800
[#4936] isolation event add instance total and isolation num (#4937)
---
.../loadbalance/event/IsolationServerEvent.java | 20 ++++++++++++++++
.../filterext/IsolationServerListFilterExt.java | 28 +++++++++++++---------
.../loadbalance/TestLoadBalanceHandler2.java | 3 +++
3 files changed, 40 insertions(+), 11 deletions(-)
diff --git
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/event/IsolationServerEvent.java
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/event/IsolationServerEvent.java
index fa027e10f..e9559de0e 100644
---
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/event/IsolationServerEvent.java
+++
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/event/IsolationServerEvent.java
@@ -50,6 +50,10 @@ public class IsolationServerEvent extends AlarmEvent {
private final long singleTestTime;
+ private int instancesTotalNum;
+
+ private int isolationInstancesNum;
+
public IsolationServerEvent(Invocation invocation, MicroserviceInstance
instance,
ServiceCombServerStats serverStats,
IsolationServerListFilterExt.Settings settings, Type type, Endpoint
endpoint) {
@@ -110,4 +114,20 @@ public class IsolationServerEvent extends AlarmEvent {
public Endpoint getEndpoint() {
return endpoint;
}
+
+ public int getInstancesTotalNum() {
+ return instancesTotalNum;
+ }
+
+ public void setInstancesTotalNum(int instancesTotalNum) {
+ this.instancesTotalNum = instancesTotalNum;
+ }
+
+ public int getIsolationInstancesNum() {
+ return isolationInstancesNum;
+ }
+
+ public void setIsolationInstancesNum(int isolationInstancesNum) {
+ this.isolationInstancesNum = isolationInstancesNum;
+ }
}
diff --git
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filterext/IsolationServerListFilterExt.java
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filterext/IsolationServerListFilterExt.java
index 78985aa2e..dab5e0b54 100644
---
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filterext/IsolationServerListFilterExt.java
+++
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filterext/IsolationServerListFilterExt.java
@@ -88,11 +88,19 @@ public class IsolationServerListFilterExt implements
ServerListFilterExt {
List<ServiceCombServer> filteredServers = new ArrayList<>();
Settings settings = createSettings(invocation);
+
+ // record instance isolation event
+ List<IsolationServerEvent> isolationEvents = new ArrayList<>();
servers.forEach((server) -> {
- if (allowVisit(invocation, server, settings)) {
+ if (allowVisit(invocation, server, settings, isolationEvents)) {
filteredServers.add(server);
}
});
+ isolationEvents.forEach((event) -> {
+ event.setInstancesTotalNum(servers.size());
+ event.setIsolationInstancesNum(servers.size() - filteredServers.size());
+ eventBus.post(event);
+ });
if (filteredServers.isEmpty() && emptyProtection.get()) {
LOGGER.warn("All servers have been isolated, allow one of them based on
load balance rule.");
return servers;
@@ -114,7 +122,8 @@ public class IsolationServerListFilterExt implements
ServerListFilterExt {
return settings;
}
- private boolean allowVisit(Invocation invocation, ServiceCombServer server,
Settings settings) {
+ private boolean allowVisit(Invocation invocation, ServiceCombServer server,
Settings settings,
+ List<IsolationServerEvent> isolationEvents) {
ServiceCombServerStats serverStats =
ServiceCombLoadBalancerStats.INSTANCE.getServiceCombServerStats(server);
if (!checkThresholdAllowed(settings, serverStats)) {
if (serverStats.isIsolated()
@@ -124,11 +133,9 @@ public class IsolationServerListFilterExt implements
ServerListFilterExt {
if (!serverStats.isIsolated()) {
// checkThresholdAllowed is not concurrent control, may print several
logs/events in current access.
serverStats.markIsolated(true);
- eventBus.post(
- new IsolationServerEvent(invocation, server.getInstance(),
serverStats,
- settings, Type.OPEN, server.getEndpoint()));
- LOGGER.warn("Isolate service {}'s instance {}.",
- invocation.getMicroserviceName(),
+ isolationEvents.add(new IsolationServerEvent(invocation,
server.getInstance(), serverStats, settings,
+ Type.OPEN, server.getEndpoint()));
+ LOGGER.warn("Isolate service {}'s instance {}.",
invocation.getMicroserviceName(),
server.getInstance().getInstanceId());
}
return false;
@@ -140,10 +147,9 @@ public class IsolationServerListFilterExt implements
ServerListFilterExt {
return false;
}
serverStats.markIsolated(false);
- eventBus.post(new IsolationServerEvent(invocation, server.getInstance(),
serverStats,
- settings, Type.CLOSE, server.getEndpoint()));
- LOGGER.warn("Recover service {}'s instance {} from isolation.",
- invocation.getMicroserviceName(),
+ isolationEvents.add(new IsolationServerEvent(invocation,
server.getInstance(), serverStats, settings,
+ Type.CLOSE, server.getEndpoint()));
+ LOGGER.warn("Recover service {}'s instance {} from isolation.",
invocation.getMicroserviceName(),
server.getInstance().getInstanceId());
}
return true;
diff --git
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java
index f83d0b86b..a422efe12 100644
---
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java
+++
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java
@@ -474,6 +474,9 @@ public class TestLoadBalanceHandler2 {
Assertions.assertEquals("rest://localhost:9090",
server.getEndpoint().getEndpoint());
ServiceCombLoadBalancerStats.INSTANCE.markFailure(server2);
ServiceCombLoadBalancerStats.INSTANCE.markFailure(server2);
+ ServiceCombLoadBalancerStats.INSTANCE.markFailure(server2);
+ ServiceCombLoadBalancerStats.INSTANCE.markFailure(server2);
+ ServiceCombLoadBalancerStats.INSTANCE.markFailure(server2);
loadBalancer = handler.getOrCreateLoadBalancer(invocation);
server = loadBalancer.chooseServer(invocation);
Assertions.assertEquals("rest://localhost:9091",
server.getEndpoint().getEndpoint());