You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2023/02/21 07:22:56 UTC

[servicecomb-java-chassis] branch 2.8.x updated: [SCB-2773]Change mutil dicovery registry instance merge policy (#3650)

This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch 2.8.x
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/2.8.x by this push:
     new 5fc05610e [SCB-2773]Change mutil dicovery registry instance merge policy (#3650)
5fc05610e is described below

commit 5fc05610ebdb3ce7f2eabefe6b08044fc8c3bcac
Author: liubao68 <bi...@qq.com>
AuthorDate: Tue Feb 21 14:46:45 2023 +0800

    [SCB-2773]Change mutil dicovery registry instance merge policy (#3650)
---
 .../org/apache/servicecomb/registry/DiscoveryManager.java     |  3 ++-
 .../java/org/apache/servicecomb/registry/api/Discovery.java   |  5 -----
 .../registry/api/registry/MicroserviceInstances.java          | 11 ++++-------
 .../registry/lightweight/AbstractLightweightDiscovery.java    | 11 ++++++++---
 .../org/apache/servicecomb/localregistry/LocalDiscovery.java  |  5 ++---
 .../apache/servicecomb/localregistry/LocalRegistryStore.java  |  3 +--
 .../apache/servicecomb/schemadiscovery/SchemaDiscovery.java   |  3 +--
 .../servicecomb/serviceregistry/ServiceCenterDiscovery.java   |  3 +--
 8 files changed, 19 insertions(+), 25 deletions(-)

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 1afc569df..df8713c74 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 @@ public class DiscoveryManager {
     // 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 593fa4396..cf7029eeb 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 @@ public interface Discovery extends SPIEnabled, SPIOrder, LifeCycle {
    * @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 1a9e0fdff..329826289 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 class MicroserviceInstances {
   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 11cf2c8da..6ba3b15f8 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 @@ public abstract class AbstractLightweightDiscovery implements Discovery, Initial
 
   protected AppManager appManager;
 
+  protected String revision;
+
   @Autowired
   public AbstractLightweightDiscovery setEventBus(EventBus eventBus) {
     this.eventBus = eventBus;
@@ -120,8 +122,11 @@ public abstract class AbstractLightweightDiscovery implements Discovery, Initial
 
   // 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 56c439320..9c6aafac0 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 @@ public class LocalDiscovery implements Discovery {
   }
 
   @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 db5ce5d23..3526cd0fe 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 @@ public class LocalRegistryStore {
   }
 
   // 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 283bc6050..0fddfb4a4 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 @@ public class SchemaDiscovery implements Discovery {
   }
 
   @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 af6caacee..a24fe14e4 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 @@ public class ServiceCenterDiscovery implements Discovery {
   }
 
   @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);