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