[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);