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


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

commit f1d74e6ac290bbf737661b6eff37af7a9d07b0c2
Author: Alex <[email protected]>
AuthorDate: Wed Oct 23 09:11:06 2024 +0800

    [#4562] fixed dual-AZ engine disk abnormal scenario registration center 
intermittently delete instance problem (#4563) (#4566)
---
 .../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 45e2e608c..66ee21621 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
@@ -63,7 +63,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 {
@@ -96,9 +97,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;
@@ -106,8 +107,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 edd345f80..d6ed9ca0e 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
@@ -124,7 +124,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 {
@@ -162,15 +163,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;
@@ -178,8 +179,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 99eae8427..5c4bc71dc 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 3199eea08..d25dee151 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 java.util.concurrent.atomic.AtomicInteger;
 
@@ -66,6 +67,8 @@ public class AbstractTask {
 
   public static AtomicInteger taskCounter = new AtomicInteger(0);
 
+  private ScheduledExecutorService addrCheckExecutor;
+
   protected AbstractTask(String taskName) {
     initTaskPool(taskName);
     Runtime.getRuntime().addShutdownHook(new Thread(AbstractTask.this::stop, 
taskName + "-shutdown-hook"));
@@ -76,6 +79,13 @@ public class AbstractTask {
         new Thread(task, taskName + "-" + taskCounter.getAndIncrement()));
   }
 
+  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;
@@ -99,6 +109,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 f8ccd218f..3f4552502 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
@@ -114,6 +114,7 @@ public class ServiceCenterRegistration extends AbstractTask 
{
 
   public void startRegistration() {
     startTask(new RegisterMicroserviceTask(0));
+    schedulerCheckAddressAvailable("sc-addr-check", new CheckAddressTask(), 
heartBeatInterval);
   }
 
   class RegisterMicroserviceTask implements Task {
@@ -258,7 +259,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);
@@ -304,13 +304,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