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 2020/07/21 05:57:22 UTC
[dubbo] 01/04: metadata report status
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit 838dfd6eda89e15887244f8ac69ffe6fb6123170
Author: ken.lj <ke...@gmail.com>
AuthorDate: Tue Jul 7 11:43:17 2020 +0800
metadata report status
---
.../org/apache/dubbo/metadata/MetadataInfo.java | 35 ++++++++++++++++------
.../metadata/store/RemoteMetadataServiceImpl.java | 16 +++++-----
2 files changed, 35 insertions(+), 16 deletions(-)
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java
index 932517d..73e736f 100644
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java
+++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java
@@ -30,6 +30,7 @@ import java.util.List;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
+import java.util.concurrent.atomic.AtomicBoolean;
import static org.apache.dubbo.common.constants.CommonConstants.DOT_SEPARATOR;
import static org.apache.dubbo.common.constants.CommonConstants.GROUP_CHAR_SEPERATOR;
@@ -43,6 +44,7 @@ public class MetadataInfo implements Serializable {
private Map<String, ServiceInfo> services;
private transient Map<String, String> extendParams;
+ private transient AtomicBoolean reported = new AtomicBoolean(false);
public MetadataInfo(String app) {
this(app, null, null);
@@ -60,6 +62,7 @@ public class MetadataInfo implements Serializable {
return;
}
this.services.put(serviceInfo.getMatchKey(), serviceInfo);
+ markChanged();
}
public void removeService(ServiceInfo serviceInfo) {
@@ -67,6 +70,7 @@ public class MetadataInfo implements Serializable {
return;
}
this.services.remove(serviceInfo.getMatchKey());
+ markChanged();
}
public void removeService(String key) {
@@ -74,18 +78,11 @@ public class MetadataInfo implements Serializable {
return;
}
this.services.remove(key);
- }
-
- public String getApp() {
- return app;
- }
-
- public void setApp(String app) {
- this.app = app;
+ markChanged();
}
public String getRevision() {
- if (revision != null) {
+ if (revision != null && hasReported()) {
return revision;
}
StringBuilder sb = new StringBuilder();
@@ -101,6 +98,26 @@ public class MetadataInfo implements Serializable {
this.revision = revision;
}
+ public boolean hasReported() {
+ return reported.get();
+ }
+
+ public void markReported() {
+ reported.compareAndSet(false, true);
+ }
+
+ public void markChanged() {
+ reported.compareAndSet(true, false);
+ }
+
+ public String getApp() {
+ return app;
+ }
+
+ public void setApp(String app) {
+ this.app = app;
+ }
+
public Map<String, ServiceInfo> getServices() {
return services;
}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java
index 85d6855..ee41050 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java
@@ -62,14 +62,16 @@ public class RemoteMetadataServiceImpl {
public void publishMetadata(ServiceInstance instance) {
Map<String, MetadataInfo> metadataInfos = localMetadataService.getMetadataInfos();
metadataInfos.forEach((registryKey, metadataInfo) -> {
- SubscriberMetadataIdentifier identifier = new SubscriberMetadataIdentifier(instance.getServiceName(), metadataInfo.getRevision());
- metadataInfo.getRevision();
- metadataInfo.getExtendParams().put(REGISTRY_KEY, registryKey);
- MetadataReport metadataReport = getMetadataReports().get(registryKey);
- if (metadataReport == null) {
- metadataReport = getMetadataReports().entrySet().iterator().next().getValue();
+ if (!metadataInfo.hasReported()) {
+ SubscriberMetadataIdentifier identifier = new SubscriberMetadataIdentifier(instance.getServiceName(), metadataInfo.getRevision());
+ metadataInfo.getRevision();
+ metadataInfo.getExtendParams().put(REGISTRY_KEY, registryKey);
+ MetadataReport metadataReport = getMetadataReports().get(registryKey);
+ if (metadataReport == null) {
+ metadataReport = getMetadataReports().entrySet().iterator().next().getValue();
+ }
+ metadataReport.publishAppMetadata(identifier, metadataInfo);
}
- metadataReport.publishAppMetadata(identifier, metadataInfo);
});
}