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

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


The following commit(s) were added to refs/heads/2.8.x by this push:
     new 399b94f40 [#4562] fixed dual-AZ engine disk abnormal scenario 
registration center intermittently delete instance problem (#4563)
399b94f40 is described below

commit 399b94f406207cf25c695b66e8217c1d1cebe1e8
Author: Alex <[email protected]>
AuthorDate: Sat Oct 19 19:03:30 2024 +0800

    [#4562] fixed dual-AZ engine disk abnormal scenario registration center 
intermittently delete instance problem (#4563)
---
 .../config/center/client/ConfigCenterManager.java          |  9 ++++-----
 .../apache/servicecomb/config/kie/client/KieClient.java    |  2 +-
 .../servicecomb/config/kie/client/KieConfigManager.java    | 11 +++++------
 .../http/client/common/AbstractAddressManager.java         |  4 ++--
 .../apache/servicecomb/http/client/task/AbstractTask.java  | 14 ++++++++++++++
 .../service/center/client/ServiceCenterClient.java         |  5 ++---
 .../service/center/client/ServiceCenterOperation.java      |  5 +----
 .../service/center/client/ServiceCenterRawClient.java      |  6 +++---
 .../service/center/client/ServiceCenterRegistration.java   | 11 ++++-------
 9 files changed, 36 insertions(+), 31 deletions(-)

diff --git 
a/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterManager.java
 
b/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterManager.java
index 5b8c43404..4d65465b3 100644
--- 
a/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterManager.java
+++ 
b/clients/config-center-client/src/main/java/org/apache/servicecomb/config/center/client/ConfigCenterManager.java
@@ -64,7 +64,8 @@ public class ConfigCenterManager extends AbstractTask {
 
   public void startConfigCenterManager() {
     this.startTask(new PollConfigurationTask(0));
-    this.startTask(new CheckConfigCenterAddressTask());
+    schedulerCheckAddressAvailable("cc-addr-check", new 
CheckConfigCenterAddressTask(),
+        configCenterConfiguration.getRefreshIntervalInMillis());
   }
 
   class PollConfigurationTask implements Task {
@@ -94,9 +95,9 @@ public class ConfigCenterManager extends AbstractTask {
     }
   }
 
-  class CheckConfigCenterAddressTask implements Task {
+  class CheckConfigCenterAddressTask implements Runnable {
     @Override
-    public void execute() {
+    public void run() {
       List<String> isolationAddresses = 
configCenterAddressManager.getIsolationAddresses();
       if (isolationAddresses.isEmpty()) {
         return;
@@ -104,8 +105,6 @@ public class ConfigCenterManager extends AbstractTask {
       for (String address : isolationAddresses) {
         configCenterClient.checkAddressAvailable(queryConfigurationsRequest, 
address);
       }
-      startTask(new 
BackOffSleepTask(configCenterConfiguration.getRefreshIntervalInMillis(),
-          new CheckConfigCenterAddressTask()));
     }
   }
 }
diff --git 
a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
 
b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
index e85a7c658..b44ed0b1a 100644
--- 
a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
+++ 
b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
@@ -125,7 +125,7 @@ public class KieClient implements KieConfigOperation {
         addressManager.recoverIsolatedAddress(address);
       }
     } catch (IOException e) {
-      LOGGER.error("check kie config isolation address {} available error!", 
address, e);
+      LOGGER.error("check kie config isolation address {} available error!", 
address);
     }
   }
 
diff --git 
a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieConfigManager.java
 
b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieConfigManager.java
index bd5ff875c..59274314b 100644
--- 
a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieConfigManager.java
+++ 
b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieConfigManager.java
@@ -125,7 +125,8 @@ public class KieConfigManager extends AbstractTask {
   public void startConfigKieManager() {
     this.configurationsRequests.forEach((t) ->
         this.startTask(new PollConfigurationTask(0, t)));
-    startTask(new CheckKieConfigAddressTask(configurationsRequests.get(0)));
+    schedulerCheckAddressAvailable("kie-addr-check", new 
CheckKieAddressTask(configurationsRequests.get(0)),
+        kieConfiguration.getRefreshIntervalInMillis());
   }
 
   class PollConfigurationTask implements Task {
@@ -161,15 +162,15 @@ public class KieConfigManager extends AbstractTask {
     }
   }
 
-  class CheckKieConfigAddressTask implements Task {
+  class CheckKieAddressTask implements Runnable {
     ConfigurationsRequest configurationsRequest;
 
-    public CheckKieConfigAddressTask(ConfigurationsRequest 
configurationsRequest) {
+    public CheckKieAddressTask(ConfigurationsRequest configurationsRequest) {
       this.configurationsRequest = configurationsRequest;
     }
 
     @Override
-    public void execute() {
+    public void run() {
       List<String> isolationAddresses = 
kieAddressManager.getIsolationAddresses();
       if (isolationAddresses.isEmpty()) {
         return;
@@ -177,8 +178,6 @@ public class KieConfigManager extends AbstractTask {
       for (String address : isolationAddresses) {
         configKieClient.checkAddressAvailable(this.configurationsRequest, 
address);
       }
-      startTask(new 
BackOffSleepTask(kieConfiguration.getRefreshIntervalInMillis(),
-          new CheckKieConfigAddressTask(this.configurationsRequest)));
     }
   }
 }
diff --git 
a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/AbstractAddressManager.java
 
b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/AbstractAddressManager.java
index 59cb3e5be..c5587b6ed 100644
--- 
a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/AbstractAddressManager.java
+++ 
b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/AbstractAddressManager.java
@@ -198,7 +198,7 @@ public class AbstractAddressManager {
     recordSuccessState(address);
     if (addressAutoRefreshed) {
       if (isolationZoneAddress.remove(address)) {
-        LOGGER.warn("restore default address [{}]", address);
+        LOGGER.warn("restore same region address [{}]", address);
         if (eventBus != null && availableZone.isEmpty()) {
           eventBus.post(new EngineConnectChangedEvent());
         }
@@ -212,7 +212,7 @@ public class AbstractAddressManager {
       return;
     }
     if (defaultIsolationAddress.remove(address)) {
-      LOGGER.warn("restore same region address [{}]", address);
+      LOGGER.warn("restore default address [{}]", address);
       addresses.add(address);
     }
   }
diff --git 
a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/task/AbstractTask.java
 
b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/task/AbstractTask.java
index deba2d852..a2527140b 100644
--- 
a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/task/AbstractTask.java
+++ 
b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/task/AbstractTask.java
@@ -20,6 +20,7 @@ package org.apache.servicecomb.http.client.task;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
 import org.slf4j.Logger;
@@ -63,6 +64,8 @@ public class AbstractTask {
 
   private volatile boolean running = true;
 
+  private ScheduledExecutorService addrCheckExecutor;
+
   protected AbstractTask(String taskName) {
     initTaskPool(taskName);
     Runtime.getRuntime().addShutdownHook(new Thread(AbstractTask.this::stop, 
taskName + "-shutdown-hook"));
@@ -73,6 +76,13 @@ public class AbstractTask {
         new Thread(task, taskName));
   }
 
+  protected void schedulerCheckAddressAvailable(String taskName, Runnable 
task, long delayTime) {
+    if (addrCheckExecutor == null) {
+      addrCheckExecutor = Executors.newScheduledThreadPool(1, (t) -> new 
Thread(t, taskName));
+    }
+    addrCheckExecutor.scheduleWithFixedDelay(task, delayTime, delayTime, 
TimeUnit.MILLISECONDS);
+  }
+
   protected void startTask(Task task) {
     if (!running) {
       return;
@@ -96,6 +106,10 @@ public class AbstractTask {
       running = false;
       this.taskPool.shutdown();
       this.taskPool.awaitTermination(10, TimeUnit.SECONDS);
+      if (addrCheckExecutor != null) {
+        this.addrCheckExecutor.shutdown();
+        this.addrCheckExecutor.awaitTermination(10, TimeUnit.SECONDS);
+      }
     } catch (InterruptedException e) {
       LOGGER.warn("tasks not shutdown in time {}", e.getMessage());
     }
diff --git 
a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterClient.java
 
b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterClient.java
index c99486151..45c4c27dc 100755
--- 
a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterClient.java
+++ 
b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterClient.java
@@ -555,14 +555,13 @@ public class ServiceCenterClient implements 
ServiceCenterOperation {
   }
 
   @Override
-  public void checkIsolationAddressAvailable(String serviceId, String 
instanceId) {
+  public void checkIsolationAddressAvailable() {
     List<String> isolationAddresses = addressManager.getIsolationAddresses();
     if (isolationAddresses.isEmpty()) {
       return;
     }
     for (String address : isolationAddresses) {
-      httpClient.checkServiceCenterAddressAvailable("/registry/microservices/" 
+ serviceId + "/instances/" + instanceId +
-              "/heartbeat", null, null, address);
+      httpClient.checkAddressAvailable("/registry/microservices", null, null, 
address);
     }
   }
 }
diff --git 
a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterOperation.java
 
b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterOperation.java
index cd91b240b..f296e66fa 100644
--- 
a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterOperation.java
+++ 
b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterOperation.java
@@ -196,9 +196,6 @@ public interface ServiceCenterOperation {
 
   /**
    * Check serviceCenter isolation address available
-   *
-   * @param serviceId serviceId
-   * @param instanceId instanceId
    */
-  void checkIsolationAddressAvailable(String serviceId, String instanceId);
+  void checkIsolationAddressAvailable();
 }
diff --git 
a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRawClient.java
 
b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRawClient.java
index c58e5dc8b..e95240bb3 100755
--- 
a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRawClient.java
+++ 
b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRawClient.java
@@ -93,15 +93,15 @@ public class ServiceCenterRawClient {
     }
   }
 
-  public void checkServiceCenterAddressAvailable(String url, Map<String, 
String> headers, String content,
+  public void checkAddressAvailable(String url, Map<String, String> headers, 
String content,
       String address) {
     String formatUrl = addressManager.formatUrl(url, false, address);
-    HttpRequest httpRequest = buildHttpRequest(formatUrl, headers, content, 
HttpRequest.PUT);
+    HttpRequest httpRequest = buildHttpRequest(formatUrl, headers, content, 
HttpRequest.GET);
     try {
       httpTransport.doRequest(httpRequest);
       addressManager.recoverIsolatedAddress(address);
     } catch (IOException e) {
-      LOGGER.error("check service center isolation address {} available 
error!", address, e);
+      LOGGER.error("check service center isolation address {} available 
error!", address);
     }
   }
 
diff --git 
a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRegistration.java
 
b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRegistration.java
index 2a1296d37..332171943 100644
--- 
a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRegistration.java
+++ 
b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRegistration.java
@@ -104,6 +104,7 @@ public class ServiceCenterRegistration extends AbstractTask 
{
 
   public void startRegistration() {
     startTask(new RegisterMicroserviceTask(0));
+    schedulerCheckAddressAvailable("sc-addr-check", new CheckAddressTask(), 
heartBeatInterval);
   }
 
   class RegisterMicroserviceTask implements Task {
@@ -248,7 +249,6 @@ public class ServiceCenterRegistration extends AbstractTask 
{
               microserviceInstance.getInstanceId());
           eventBus.post(new MicroserviceInstanceRegistrationEvent(true, 
microservice, microserviceInstance));
           startTask(new SendHeartBeatTask(0));
-          startTask(new CheckServiceCenterAddressTask());
         }
       } catch (Exception e) {
         LOGGER.error("register microservice instance failed, and will try 
again.", e);
@@ -294,13 +294,10 @@ public class ServiceCenterRegistration extends 
AbstractTask {
     }
   }
 
-  class CheckServiceCenterAddressTask implements Task {
+  class CheckAddressTask implements Runnable {
     @Override
-    public void execute() {
-      
serviceCenterClient.checkIsolationAddressAvailable(microservice.getServiceId(),
-          microserviceInstance.getInstanceId());
-      startTask(new BackOffSleepTask(Math.max(heartBeatInterval, 
heartBeatRequestTimeout),
-          new CheckServiceCenterAddressTask()));
+    public void run() {
+      serviceCenterClient.checkIsolationAddressAvailable();
     }
   }
 }

Reply via email to