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

Reply via email to