This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git

commit fa05355cf9c7a2f76543415eec94d7882201db09
Author: liubao <[email protected]>
AuthorDate: Fri Jun 17 09:31:59 2022 +0800

    [SCB-2578]instance pull should avoid too many queued events
---
 .../center/client/ServiceCenterDiscovery.java        | 20 +++++++++++++++++++-
 .../governance/handler/InstanceIsolationHandler.java |  2 +-
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git 
a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterDiscovery.java
 
b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterDiscovery.java
index f0c267330..6b5578e4e 100644
--- 
a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterDiscovery.java
+++ 
b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterDiscovery.java
@@ -45,6 +45,8 @@ public class ServiceCenterDiscovery extends AbstractTask {
 
   private static final String ALL_VERSION = "0+";
 
+  private static volatile boolean pullInstanceTaskOnceInProgress = false;
+
   public static class SubscriptionKey {
     final String appId;
 
@@ -144,7 +146,12 @@ public class ServiceCenterDiscovery extends AbstractTask {
 
   @Subscribe
   public void onPullInstanceEvent(PullInstanceEvent event) {
-    pullAllInstance();
+    // to avoid too many pulls queued.
+    if (pullInstanceTaskOnceInProgress) {
+      return;
+    }
+    pullInstanceTaskOnceInProgress = true;
+    startTask(new PullInstanceOnceTask());
   }
 
   private void pullInstance(SubscriptionKey k, SubscriptionValue v) {
@@ -205,6 +212,17 @@ public class ServiceCenterDiscovery extends AbstractTask {
     }
   }
 
+  class PullInstanceOnceTask implements Task {
+    @Override
+    public void execute() {
+      try {
+        pullAllInstance();
+      } finally {
+        pullInstanceTaskOnceInProgress = false;
+      }
+    }
+  }
+
   private synchronized void pullAllInstance() {
     instancesCache.forEach((k, v) -> {
       pullInstance(k, v);
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
index 85afecdd5..8ab3333b2 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
@@ -34,7 +34,7 @@ import 
io.github.resilience4j.micrometer.tagged.TaggedCircuitBreakerMetrics;
 import io.micrometer.core.instrument.MeterRegistry;
 
 public class InstanceIsolationHandler extends 
AbstractGovernanceHandler<CircuitBreaker, CircuitBreakerPolicy> {
-  private static final Logger LOGGER = 
LoggerFactory.getLogger(CircuitBreakerHandler.class);
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(InstanceIsolationHandler.class);
 
   private static final String DEFAULT_SERVICE_NAME = "default";
 

Reply via email to