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 2020/05/28 11:42:36 UTC

[servicecomb-java-chassis] 01/03: [SCB-1942]change Discovery getSchema with instances param

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

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

commit 6f24ec91154fb0c53ffed1ff4f82e11027b4cd2c
Author: liubao <bi...@qq.com>
AuthorDate: Wed May 27 15:37:30 2020 +0800

    [SCB-1942]change Discovery getSchema with instances param
---
 .../core/definition/ServiceRegistryListener.java      |  9 +++++----
 .../apache/servicecomb/registry/DiscoveryManager.java |  7 ++++---
 .../apache/servicecomb/registry/api/Discovery.java    |  4 +++-
 .../apache/servicecomb/registry/api/Registration.java |  5 +++++
 .../registry/cache/MicroserviceInstanceCache.java     |  2 +-
 .../servicecomb/registry/swagger/SwaggerLoader.java   | 12 ++++++++----
 .../servicecomb/localregistry/LocalDiscovery.java     |  4 +++-
 .../serviceregistry/ServiceCenterDiscovery.java       |  4 +++-
 .../serviceregistry/swagger/TestSwaggerLoader.java    | 19 ++++++++++++-------
 9 files changed, 44 insertions(+), 22 deletions(-)

diff --git a/core/src/main/java/org/apache/servicecomb/core/definition/ServiceRegistryListener.java b/core/src/main/java/org/apache/servicecomb/core/definition/ServiceRegistryListener.java
index 24ac745..c10f0a5 100644
--- a/core/src/main/java/org/apache/servicecomb/core/definition/ServiceRegistryListener.java
+++ b/core/src/main/java/org/apache/servicecomb/core/definition/ServiceRegistryListener.java
@@ -24,13 +24,13 @@ import static org.apache.servicecomb.core.definition.CoreMetaUtils.getMicroservi
 import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.foundation.common.event.EnableExceptionPropagation;
 import org.apache.servicecomb.foundation.common.event.SubscriberOrder;
+import org.apache.servicecomb.registry.api.event.CreateMicroserviceEvent;
+import org.apache.servicecomb.registry.api.event.CreateMicroserviceVersionEvent;
+import org.apache.servicecomb.registry.api.event.DestroyMicroserviceEvent;
 import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.consumer.MicroserviceVersion;
 import org.apache.servicecomb.registry.consumer.MicroserviceVersions;
 import org.apache.servicecomb.registry.definition.DefinitionConst;
-import org.apache.servicecomb.registry.api.event.CreateMicroserviceEvent;
-import org.apache.servicecomb.registry.api.event.CreateMicroserviceVersionEvent;
-import org.apache.servicecomb.registry.api.event.DestroyMicroserviceEvent;
 
 import com.google.common.eventbus.Subscribe;
 
@@ -87,7 +87,8 @@ public class ServiceRegistryListener {
     if (!isServiceCenter) {
       // TODO: get schemas from instance
       for (String schemaId : microservice.getSchemas()) {
-        Swagger swagger = scbEngine.getSwaggerLoader().loadSwagger(microservice, schemaId);
+        Swagger swagger = scbEngine.getSwaggerLoader().loadSwagger(microservice, microserviceVersion.getInstances(),
+            schemaId);
         microserviceMeta.registerSchemaMeta(schemaId, swagger);
       }
     }
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 23f98df..959e7e3 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
@@ -17,6 +17,7 @@
 
 package org.apache.servicecomb.registry;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -87,7 +88,7 @@ public class DiscoveryManager {
     return this.appManager;
   }
 
-  public MicroserviceInstance findMicroserviceInstance(String serviceId, String instanceId) {
+  public MicroserviceInstance getMicroserviceInstance(String serviceId, String instanceId) {
     for (Discovery discovery : discoveryList) {
       MicroserviceInstance microserviceInstance = discovery.getMicroserviceInstance(serviceId, instanceId);
       if (microserviceInstance != null) {
@@ -97,9 +98,9 @@ public class DiscoveryManager {
     return null;
   }
 
-  public String getSchema(String microserviceId, String schemaId) {
+  public String getSchema(String microserviceId, Collection<MicroserviceInstance> instances, String schemaId) {
     for (Discovery discovery : discoveryList) {
-      String schema = discovery.getSchema(microserviceId, schemaId);
+      String schema = discovery.getSchema(microserviceId, instances, schemaId);
       if (schema != null) {
         return schema;
       }
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 a81416c..52c68a4 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
@@ -17,6 +17,8 @@
 
 package org.apache.servicecomb.registry.api;
 
+import java.util.Collection;
+
 import org.apache.servicecomb.foundation.common.utils.SPIEnabled;
 import org.apache.servicecomb.foundation.common.utils.SPIOrder;
 import org.apache.servicecomb.registry.api.registry.Microservice;
@@ -39,7 +41,7 @@ public interface Discovery extends SPIEnabled, SPIOrder, LifeCycle {
    *
    * Life Cycle:This method is called anytime after <code>run</code>.
    */
-  String getSchema(String microserviceId, String schemaId);
+  String getSchema(String microserviceId, Collection<MicroserviceInstance> instances, String schemaId);
 
   /**
    * get MicroserviceInstance </br>
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Registration.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Registration.java
index c1155f6..5f72f0e 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Registration.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Registration.java
@@ -53,6 +53,11 @@ public interface Registration extends SPIEnabled, SPIOrder, LifeCycle {
    */
   String getAppId();
 
+  /**
+   * update MicroserviceInstance status </br>
+   *
+   * Life Cycle:This method is called anytime after <code>run</code>.
+   */
   boolean updateMicroserviceInstanceStatus(MicroserviceInstanceStatus status);
 
   /**
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/cache/MicroserviceInstanceCache.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/cache/MicroserviceInstanceCache.java
index 1de5c37..09e7702 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/cache/MicroserviceInstanceCache.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/cache/MicroserviceInstanceCache.java
@@ -71,7 +71,7 @@ public class MicroserviceInstanceCache {
 
         @Override
         public MicroserviceInstance call() {
-          MicroserviceInstance instance = DiscoveryManager.INSTANCE.findMicroserviceInstance(serviceId, instanceId);
+          MicroserviceInstance instance = DiscoveryManager.INSTANCE.getMicroserviceInstance(serviceId, instanceId);
           if (instance == null) {
             throw new IllegalArgumentException("instance id not exists.");
           }
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/swagger/SwaggerLoader.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/swagger/SwaggerLoader.java
index e57c30f..f0f757d 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/swagger/SwaggerLoader.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/swagger/SwaggerLoader.java
@@ -18,6 +18,7 @@ package org.apache.servicecomb.registry.swagger;
 
 import java.net.URI;
 import java.net.URL;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -30,6 +31,7 @@ import org.apache.servicecomb.foundation.common.utils.ResourceUtil;
 import org.apache.servicecomb.registry.DiscoveryManager;
 import org.apache.servicecomb.registry.RegistrationManager;
 import org.apache.servicecomb.registry.api.registry.Microservice;
+import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.registry.definition.MicroserviceNameParser;
 import org.apache.servicecomb.swagger.SwaggerUtils;
 import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
@@ -132,13 +134,14 @@ public class SwaggerLoader {
         .remove(schemaId);
   }
 
-  public Swagger loadSwagger(Microservice microservice, String schemaId) {
+  public Swagger loadSwagger(Microservice microservice,
+      Collection<MicroserviceInstance> instances, String schemaId) {
     Swagger swagger = loadLocalSwagger(microservice.getAppId(), microservice.getServiceName(), schemaId);
     if (swagger != null) {
       return swagger;
     }
 
-    return loadFromRemote(microservice, schemaId);
+    return loadFromRemote(microservice, instances, schemaId);
   }
 
   public Swagger loadLocalSwagger(String appId, String shortName, String schemaId) {
@@ -182,8 +185,9 @@ public class SwaggerLoader {
     return SwaggerUtils.parseAndValidateSwagger(url);
   }
 
-  private Swagger loadFromRemote(Microservice microservice, String schemaId) {
-    String schemaContent = DiscoveryManager.INSTANCE.getSchema(microservice.getServiceId(), schemaId);
+  private Swagger loadFromRemote(Microservice microservice, Collection<MicroserviceInstance> instances,
+      String schemaId) {
+    String schemaContent = DiscoveryManager.INSTANCE.getSchema(microservice.getServiceId(), instances, schemaId);
     if (schemaContent != null) {
       LOGGER.info(
           "load schema from service center, appId={}, microserviceName={}, version={}, serviceId={}, schemaId={}.",
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 51f3c99..61e8e02 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
@@ -17,6 +17,8 @@
 
 package org.apache.servicecomb.localregistry;
 
+import java.util.Collection;
+
 import org.apache.servicecomb.registry.api.Discovery;
 import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
@@ -59,7 +61,7 @@ public class LocalDiscovery implements Discovery {
   }
 
   @Override
-  public String getSchema(String microserviceId, String schemaId) {
+  public String getSchema(String microserviceId, Collection<MicroserviceInstance> instances, String schemaId) {
     return localDiscoveryStore.getSchema(microserviceId, schemaId);
   }
 
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 a17e537..818e559 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
@@ -17,6 +17,8 @@
 
 package org.apache.servicecomb.serviceregistry;
 
+import java.util.Collection;
+
 import org.apache.servicecomb.registry.api.Discovery;
 import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
@@ -57,7 +59,7 @@ public class ServiceCenterDiscovery implements Discovery {
   }
 
   @Override
-  public String getSchema(String microserviceId, String schemaId) {
+  public String getSchema(String microserviceId, Collection<MicroserviceInstance> instances, String schemaId) {
     return RegistryUtils
         .getAggregatedSchema(microserviceId, schemaId);
   }
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/swagger/TestSwaggerLoader.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/swagger/TestSwaggerLoader.java
index 9138db5..4eb6169 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/swagger/TestSwaggerLoader.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/swagger/TestSwaggerLoader.java
@@ -41,8 +41,8 @@ import org.apache.servicecomb.foundation.common.exceptions.ServiceCombException;
 import org.apache.servicecomb.foundation.common.utils.JvmUtils;
 import org.apache.servicecomb.foundation.common.utils.ResourceUtil;
 import org.apache.servicecomb.registry.RegistrationManager;
-import org.apache.servicecomb.serviceregistry.TestRegistryBase;
 import org.apache.servicecomb.registry.api.registry.Microservice;
+import org.apache.servicecomb.serviceregistry.TestRegistryBase;
 import org.apache.servicecomb.swagger.SwaggerUtils;
 import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
 import org.junit.Assert;
@@ -67,7 +67,8 @@ public class TestSwaggerLoader extends TestRegistryBase {
 
     Microservice microservice = appManager.getOrCreateMicroserviceVersions(appId, serviceName)
         .getVersions().values().iterator().next().getMicroservice();
-    Assert.assertSame(swagger, RegistrationManager.INSTANCE.getSwaggerLoader().loadSwagger(microservice, schemaId));
+    Assert.assertSame(swagger, RegistrationManager.INSTANCE
+        .getSwaggerLoader().loadSwagger(microservice, null, schemaId));
   }
 
   @Test
@@ -84,7 +85,8 @@ public class TestSwaggerLoader extends TestRegistryBase {
 
     Microservice microservice = appManager.getOrCreateMicroserviceVersions(appId, serviceName)
         .getVersions().values().iterator().next().getMicroservice();
-    Swagger loadedSwagger = RegistrationManager.INSTANCE.getSwaggerLoader().loadSwagger(microservice, schemaId);
+    Swagger loadedSwagger = RegistrationManager.INSTANCE
+        .getSwaggerLoader().loadSwagger(microservice, null, schemaId);
     Assert.assertNotSame(swagger, loadedSwagger);
     Assert.assertEquals(swagger, loadedSwagger);
   }
@@ -98,7 +100,8 @@ public class TestSwaggerLoader extends TestRegistryBase {
 
     Microservice microservice = appManager.getOrCreateMicroserviceVersions(appId, serviceName)
         .getVersions().values().iterator().next().getMicroservice();
-    Swagger loadedSwagger = RegistrationManager.INSTANCE.getSwaggerLoader().loadSwagger(microservice, schemaId);
+    Swagger loadedSwagger = RegistrationManager.INSTANCE
+        .getSwaggerLoader().loadSwagger(microservice, null, schemaId);
     Assert.assertNotSame(swagger, loadedSwagger);
     Assert.assertEquals(swagger, loadedSwagger);
   }
@@ -112,7 +115,8 @@ public class TestSwaggerLoader extends TestRegistryBase {
 
     Microservice microservice = appManager.getOrCreateMicroserviceVersions(appId, serviceName)
         .getVersions().values().iterator().next().getMicroservice();
-    Swagger loadedSwagger = RegistrationManager.INSTANCE.getSwaggerLoader().loadSwagger(microservice, schemaId);
+    Swagger loadedSwagger = RegistrationManager.INSTANCE
+        .getSwaggerLoader().loadSwagger(microservice, null, schemaId);
     Assert.assertNotSame(swagger, loadedSwagger);
     Assert.assertEquals(swagger, loadedSwagger);
   }
@@ -128,7 +132,7 @@ public class TestSwaggerLoader extends TestRegistryBase {
     expectedException.expect(IllegalStateException.class);
     expectedException.expectMessage(
         "no schema in local, and can not get schema from service center, appId=other, microserviceName=ms3, version=1.0, serviceId=003, schemaId=hello.");
-    RegistrationManager.INSTANCE.getSwaggerLoader().loadSwagger(microservice, schemaId);
+    RegistrationManager.INSTANCE.getSwaggerLoader().loadSwagger(microservice, null, schemaId);
   }
 
   @Test
@@ -138,7 +142,8 @@ public class TestSwaggerLoader extends TestRegistryBase {
 
     Microservice microservice = appManager.getOrCreateMicroserviceVersions("other", "ms3")
         .getVersions().values().iterator().next().getMicroservice();
-    Swagger loadedSwagger = RegistrationManager.INSTANCE.getSwaggerLoader().loadSwagger(microservice, schemaId);
+    Swagger loadedSwagger = RegistrationManager.INSTANCE
+        .getSwaggerLoader().loadSwagger(microservice, null, schemaId);
     Assert.assertNotSame(swagger, loadedSwagger);
     Assert.assertEquals(swagger, loadedSwagger);
   }