You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2021/12/27 08:51:40 UTC
[dubbo] branch 3.0-metadata-refactor updated: check empty metdata info num
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 3.0-metadata-refactor
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0-metadata-refactor by this push:
new 64d935d check empty metdata info num
64d935d is described below
commit 64d935d064dd0a7a22b1e0cfbdce6e1ad5233d51
Author: ken.lj <ke...@gmail.com>
AuthorDate: Mon Dec 27 16:50:34 2021 +0800
check empty metdata info num
---
.../registry/client/AbstractServiceDiscovery.java | 2 +-
.../listener/ServiceInstancesChangedListener.java | 21 ++++++++++++---------
2 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
index 517ebaf..2afed98 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
@@ -44,7 +44,7 @@ import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataU
* Each service discovery is bond to one application.
*/
public abstract class AbstractServiceDiscovery implements ServiceDiscovery {
- private Logger logger = LoggerFactory.getLogger(AbstractServiceDiscovery.class);
+ private final Logger logger = LoggerFactory.getLogger(AbstractServiceDiscovery.class);
private volatile boolean isDestroy;
protected final String serviceName;
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
index 848ea92..13ecc9b 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
@@ -52,7 +52,6 @@ import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
-import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
import static org.apache.dubbo.common.constants.RegistryConstants.EMPTY_PROTOCOL;
import static org.apache.dubbo.common.constants.RegistryConstants.ENABLE_EMPTY_PROTECTION_KEY;
import static org.apache.dubbo.metadata.RevisionResolver.EMPTY_REVISION;
@@ -138,14 +137,15 @@ public class ServiceInstancesChangedListener {
parseMetadata(revision, metadata, localServiceToRevisions);
// update metadata into each instance, in case new instance created.
for (ServiceInstance tmpInstance : subInstances) {
- MetadataInfo originMetadata = ((DefaultServiceInstance) tmpInstance).getServiceMetadata();
+ MetadataInfo originMetadata = tmpInstance.getServiceMetadata();
if (originMetadata == null || !Objects.equals(originMetadata.getRevision(), metadata.getRevision())) {
- ((DefaultServiceInstance) tmpInstance).setServiceMetadata(metadata);
+ tmpInstance.setServiceMetadata(metadata);
}
}
}
- if (hasEmptyMetadata(revisionToInstances)) {// retry every 10 seconds
+ int emptyNum = hasEmptyMetadata(revisionToInstances);
+ if (emptyNum != 0) {// retry every 10 seconds
hasEmptyMetadata = true;
if (retryPermission.tryAcquire()) {
if (retryFuture != null && !retryFuture.isDone()) {
@@ -156,7 +156,9 @@ public class ServiceInstancesChangedListener {
logger.warn("Address refresh try task submitted.");
}
logger.error("Address refresh failed because of Metadata Server failure, wait for retry or new address refresh event.");
- return;
+ if (emptyNum == revisionToInstances.size()) {// return if all metadata is empty
+ return;
+ }
}
hasEmptyMetadata = false;
@@ -283,17 +285,18 @@ public class ServiceInstancesChangedListener {
lastRefreshTime = System.currentTimeMillis();
}
- protected boolean hasEmptyMetadata(Map<String, List<ServiceInstance>> revisionToInstances) {
+ protected int hasEmptyMetadata(Map<String, List<ServiceInstance>> revisionToInstances) {
if (revisionToInstances == null) {
- return false;
+ return 0;
}
+ int emptyMetadataNum = 0;
for (Map.Entry<String, List<ServiceInstance>> entry : revisionToInstances.entrySet()) {
DefaultServiceInstance serviceInstance = (DefaultServiceInstance) entry.getValue().get(0);
if (serviceInstance == null || serviceInstance.getServiceMetadata() == MetadataInfo.EMPTY) {
- return true;
+ emptyMetadataNum++;
}
}
- return false;
+ return emptyMetadataNum;
}
protected Map<String, Map<String, Set<String>>> parseMetadata(String revision, MetadataInfo metadata, Map<String, Map<String, Set<String>>> localServiceToRevisions) {