[SCB-2773]Change mutil dicovery registry instance merge policy (#3650)
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
index 1afc569..df8713c 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
@@ -73,9 +73,10 @@
// default values not suitable for aggregate, reset.
result.setNeedRefresh(false);
result.setMicroserviceNotExist(true);
+ result.setRevision(revision);
discoveryList
.forEach(discovery -> {
- MicroserviceInstances instances = discovery.findServiceInstances(appId, serviceName, versionRule, revision);
+ MicroserviceInstances instances = discovery.findServiceInstances(appId, serviceName, versionRule);
result.mergeMicroserviceInstances(instances);
});
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Discovery.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Discovery.java
index 593fa43..cf7029e 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Discovery.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Discovery.java
@@ -70,11 +70,6 @@
* @return all instances match the criteria.
*/
default MicroserviceInstances findServiceInstances(String appId, String serviceName, String versionRule) {
- return findServiceInstances(appId, serviceName, versionRule, null);
- }
-
- default MicroserviceInstances findServiceInstances(String appId, String serviceName, String versionRule,
- String revision) {
return null;
}
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstances.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstances.java
index 1a9e0fd..3298262 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstances.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstances.java
@@ -65,16 +65,13 @@
public void mergeMicroserviceInstances(MicroserviceInstances other) {
mergeNeedRefresh(other.needRefresh);
mergeMicroserviceNotExist(other.microserviceNotExist);
- mergeRevision(other.revision);
+ mergeRevision(other);
mergeInstanceResponse(other.getInstancesResponse());
}
- private void mergeRevision(String revision) {
- if (revision == null) {
- return;
- }
- if (this.revision == null || this.revision.compareTo(revision) < 0) {
- this.revision = revision;
+ private void mergeRevision(MicroserviceInstances other) {
+ if (!other.isMicroserviceNotExist() && other.needRefresh) {
+ this.revision = other.getRevision();
}
}
diff --git a/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightweightDiscovery.java b/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightweightDiscovery.java
index 11cf2c8..6ba3b15 100644
--- a/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightweightDiscovery.java
+++ b/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightweightDiscovery.java
@@ -45,6 +45,8 @@
protected AppManager appManager;
+ protected String revision;
+
@Autowired
public AbstractLightweightDiscovery setEventBus(EventBus eventBus) {
this.eventBus = eventBus;
@@ -120,8 +122,11 @@
// ignore versionRule, instances only filter by consumer logic
@Override
- public MicroserviceInstances findServiceInstances(String appId, String serviceName, String uselessVersionRule,
- String revision) {
- return store.findServiceInstances(appId, serviceName, revision);
+ public MicroserviceInstances findServiceInstances(String appId, String serviceName, String uselessVersionRule) {
+ MicroserviceInstances microserviceInstances = store.findServiceInstances(appId, serviceName, this.revision);
+ if (!microserviceInstances.isMicroserviceNotExist() && microserviceInstances.isNeedRefresh()) {
+ this.revision = microserviceInstances.getRevision();
+ }
+ return microserviceInstances;
}
}
diff --git a/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalDiscovery.java b/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalDiscovery.java
index 56c4393..9c6aafa 100644
--- a/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalDiscovery.java
+++ b/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalDiscovery.java
@@ -73,9 +73,8 @@
}
@Override
- public MicroserviceInstances findServiceInstances(String appId, String serviceName, String versionRule,
- String revision) {
- return localDiscoveryStore.findServiceInstances(appId, serviceName, versionRule, revision);
+ public MicroserviceInstances findServiceInstances(String appId, String serviceName, String versionRule) {
+ return localDiscoveryStore.findServiceInstances(appId, serviceName, versionRule);
}
@Override
diff --git a/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalRegistryStore.java b/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalRegistryStore.java
index db5ce5d..3526cd0 100644
--- a/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalRegistryStore.java
+++ b/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalRegistryStore.java
@@ -208,8 +208,7 @@
}
// local registry do not care about version and revision
- public MicroserviceInstances findServiceInstances(String appId, String serviceName, String versionRule,
- String revision) {
+ public MicroserviceInstances findServiceInstances(String appId, String serviceName, String versionRule) {
MicroserviceInstances microserviceInstances = new MicroserviceInstances();
FindInstancesResponse findInstancesResponse = new FindInstancesResponse();
List<MicroserviceInstance> instances = new ArrayList<>();
diff --git a/service-registry/registry-schema-discovery/src/main/java/org/apache/servicecomb/schemadiscovery/SchemaDiscovery.java b/service-registry/registry-schema-discovery/src/main/java/org/apache/servicecomb/schemadiscovery/SchemaDiscovery.java
index 283bc60..0fddfb4 100644
--- a/service-registry/registry-schema-discovery/src/main/java/org/apache/servicecomb/schemadiscovery/SchemaDiscovery.java
+++ b/service-registry/registry-schema-discovery/src/main/java/org/apache/servicecomb/schemadiscovery/SchemaDiscovery.java
@@ -103,8 +103,7 @@
}
@Override
- public MicroserviceInstances findServiceInstances(String appId, String serviceName, String versionRule,
- String revision) {
+ public MicroserviceInstances findServiceInstances(String appId, String serviceName, String versionRule) {
MicroserviceInstances microserviceInstances = new MicroserviceInstances();
microserviceInstances.setMicroserviceNotExist(true);
return microserviceInstances;
diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceCenterDiscovery.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceCenterDiscovery.java
index af6caac..a24fe14 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceCenterDiscovery.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceCenterDiscovery.java
@@ -74,8 +74,7 @@
}
@Override
- public MicroserviceInstances findServiceInstances(String appId, String serviceName, String versionRule,
- String revision) {
+ public MicroserviceInstances findServiceInstances(String appId, String serviceName, String versionRule) {
return RegistryUtils.findServiceInstances(appId,
serviceName,
versionRule);