This is an automated email from the ASF dual-hosted git repository.
youling1128 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 f06e82591 [#4902] not deleted cache to ensure that instances are
available after the microservice and engine are recovered from exceptions
(#5092)
f06e82591 is described below
commit f06e825917c8b5bf823bf5b477524efb72a1be64
Author: Alex <[email protected]>
AuthorDate: Fri Mar 6 15:13:00 2026 +0800
[#4902] not deleted cache to ensure that instances are available after the
microservice and engine are recovered from exceptions (#5092)
---
.../center/client/ServiceCenterDiscovery.java | 31 +++++++---------------
1 file changed, 9 insertions(+), 22 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 a0a933184..0056ed7a8 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
@@ -17,8 +17,6 @@
package org.apache.servicecomb.service.center.client;
-import java.io.IOException;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -156,13 +154,12 @@ public class ServiceCenterDiscovery extends AbstractTask {
startTask(new PullInstanceOnceTask());
}
- private List<SubscriptionKey> pullInstance(SubscriptionKey k,
SubscriptionValue v, boolean sendChangedEvent) {
+ private void pullInstance(SubscriptionKey k, SubscriptionValue v, boolean
sendChangedEvent) {
if (myselfServiceId == null) {
// registration not ready
- return Collections.emptyList();
+ return;
}
- List<SubscriptionKey> failedKeys = new ArrayList<>();
try {
FindMicroserviceInstancesResponse instancesResponse = serviceCenterClient
.findMicroserviceInstance(myselfServiceId, k.appId, k.serviceName,
ALL_VERSION, v.revision);
@@ -189,17 +186,9 @@ public class ServiceCenterDiscovery extends AbstractTask {
}
}
} catch (Exception e) {
- if (!(e.getCause() instanceof IOException)) {
- // for IOException, do not remove cache, or when service center
- // not available, invocation between microservices will fail.
- failedKeys.add(k);
- LOGGER.error("find service {}#{} instance failed and remove local
cache.", k.appId, k.serviceName, e);
- } else {
- LOGGER.warn("find service {}#{} instance failed, remaining local
instances cache, cause message: {}",
- k.appId, k.serviceName, e.getMessage());
- }
+ LOGGER.warn("find service {}#{} instance failed, remaining local
instances cache [{}], cause message: {}",
+ k.appId, k.serviceName, instanceToString(v.instancesCache),
e.getMessage());
}
- return failedKeys;
}
private void setMicroserviceInfo(List<MicroserviceInstance> instances) {
@@ -245,13 +234,9 @@ public class ServiceCenterDiscovery extends AbstractTask {
}
private synchronized void pullAllInstance() {
- List<SubscriptionKey> failedInstances = new ArrayList<>();
- instancesCache.forEach((k, v) -> failedInstances.addAll(pullInstance(k, v,
true)));
- if (failedInstances.isEmpty()) {
- return;
- }
- failedInstances.forEach(instancesCache::remove);
- failedInstances.clear();
+ instancesCache.forEach((k, v) -> {
+ pullInstance(k, v, true);
+ });
}
private static String instanceToString(List<MicroserviceInstance> instances)
{
@@ -265,6 +250,8 @@ public class ServiceCenterDiscovery extends AbstractTask {
sb.append(endpoint.length() > 64 ? endpoint.substring(0, 64) :
endpoint);
sb.append("|");
}
+ sb.append(instance.getStatus());
+ sb.append("|");
}
return sb.toString();
}