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