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 2018/03/16 01:54:12 UTC

[incubator-servicecomb-java-chassis] 02/03: save serviceCenterInfo in AbstractServiceRegistry, compare version by class Version

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/incubator-servicecomb-java-chassis.git

commit ea98b4e17e50a6c0572ab81f0a28ca64b9071a84
Author: weichao666 <we...@huawei.com>
AuthorDate: Thu Mar 15 20:55:54 2018 +0800

    save serviceCenterInfo in AbstractServiceRegistry,compare version by class Version
---
 .../servicecomb/serviceregistry/api/Const.java     |  2 ++
 .../api/registry/FrameworkVersions.java            | 17 ---------------
 .../client/http/ServiceRegistryClientImpl.java     |  2 +-
 .../registry/AbstractServiceRegistry.java          | 16 ++++++++++++++-
 .../servicecomb/serviceregistry/TestRegistry.java  | 11 ----------
 .../api/registry/TestFrameworkVersions.java        | 24 ----------------------
 .../registry/TestLocalServiceRegistry.java         | 24 ----------------------
 .../registry/TestRemoteServiceRegistry.java        | 17 ---------------
 .../registry/TestServiceRegistryFactory.java       | 13 ++++++++++--
 9 files changed, 29 insertions(+), 97 deletions(-)

diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/Const.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/Const.java
index 5f3173a..8166bec 100644
--- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/Const.java
+++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/Const.java
@@ -158,4 +158,6 @@ public final class Const {
   public static final String URL_PREFIX = "urlPrefix";
 
   public static final String INSTANCE_PUBKEY_PRO = "publickey";
+
+  public static final String SERVICECENTER_FRAMEWORK_VERSION = "1.0.0";
 }
diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/FrameworkVersions.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/FrameworkVersions.java
index a9dce0f..5c87855 100644
--- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/FrameworkVersions.java
+++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/FrameworkVersions.java
@@ -22,29 +22,12 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.ServiceLoader;
 
-import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.serviceregistry.api.Versions;
-import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class FrameworkVersions {
-  private static final Logger LOGGER = LoggerFactory.getLogger(FrameworkVersions.class);
   private static final ServiceLoader<Versions> frameworkVersions = ServiceLoader.load(Versions.class);
 
   public static String allVersions() {
-    ServiceRegistryClient client = RegistryUtils.getServiceRegistryClient();
-    ServiceCenterInfo serviceCenterInfo = client.getServiceCenterInfo();
-    if (serviceCenterInfo == null) {
-      LOGGER.error("query servicecenter version info failed.");
-    }
-    String scVersion = serviceCenterInfo.getVersion();
-    //old scVersion which earlier than 1.0.0 not report frameworkVersion, e.g. 0.5.0
-    String oldScVersion = "0.[0-5].0+";
-    if (scVersion.matches(oldScVersion)) {
-      return "";
-    }
-
     Map<String, String> versions = new HashMap<>();
     Entry<String, String> entry;
     StringBuffer sb = new StringBuffer();
diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java
index ab7f597..e916338 100644
--- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java
+++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java
@@ -65,7 +65,7 @@ import io.vertx.core.Handler;
 import io.vertx.core.buffer.Buffer;
 import io.vertx.core.http.HttpClientResponse;
 
-public final class ServiceRegistryClientImpl implements ServiceRegistryClient {
+public class ServiceRegistryClientImpl implements ServiceRegistryClient {
   private static final Logger LOGGER = LoggerFactory.getLogger(ServiceRegistryClientImpl.class);
 
   private IpPortManager ipPortManager;
diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java
index 6ad86bf..b524e2b 100644
--- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java
+++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java
@@ -33,6 +33,7 @@ import org.apache.servicecomb.serviceregistry.api.registry.FrameworkVersions;
 import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
 import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceFactory;
 import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
+import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo;
 import org.apache.servicecomb.serviceregistry.cache.InstanceCacheManager;
 import org.apache.servicecomb.serviceregistry.cache.InstanceCacheManagerNew;
 import org.apache.servicecomb.serviceregistry.client.IpPortManager;
@@ -45,6 +46,8 @@ import org.apache.servicecomb.serviceregistry.definition.MicroserviceDefinition;
 import org.apache.servicecomb.serviceregistry.task.MicroserviceServiceCenterTask;
 import org.apache.servicecomb.serviceregistry.task.ServiceCenterTask;
 import org.apache.servicecomb.serviceregistry.task.event.ShutdownEvent;
+import org.apache.servicecomb.serviceregistry.version.Version;
+import org.apache.servicecomb.serviceregistry.version.VersionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -75,6 +78,8 @@ public abstract class AbstractServiceRegistry implements ServiceRegistry {
 
   protected ServiceCenterTask serviceCenterTask;
 
+  protected ServiceCenterInfo serviceCenterInfo;
+
   public AbstractServiceRegistry(EventBus eventBus, ServiceRegistryConfig serviceRegistryConfig,
       MicroserviceDefinition microserviceDefinition) {
     this.eventBus = eventBus;
@@ -98,6 +103,11 @@ public abstract class AbstractServiceRegistry implements ServiceRegistry {
       srClient = createServiceRegistryClient();
     }
 
+    serviceCenterInfo = srClient.getServiceCenterInfo();
+    if (serviceCenterInfo == null) {
+      throw new IllegalStateException("Failed to load servicecenter info");
+    }
+
     createServiceCenterTask();
 
     eventBus.register(this);
@@ -174,9 +184,13 @@ public abstract class AbstractServiceRegistry implements ServiceRegistry {
   }
 
   private void loadFrameworkVersions() {
+    Version scVersion = VersionUtils.getOrCreate(serviceCenterInfo.getVersion());
+    Version frameworkVersion = VersionUtils.getOrCreate(Const.SERVICECENTER_FRAMEWORK_VERSION);
     Framework framework = new Framework();
     framework.setName(CONFIG_FRAMEWORK_DEFAULT_NAME);
-    framework.setVersion(FrameworkVersions.allVersions());
+    if (scVersion.compareTo(frameworkVersion) >= 0) {
+      framework.setVersion(FrameworkVersions.allVersions());
+    }
     microservice.setFramework(framework);
     microservice.setRegisterBy(CONFIG_DEFAULT_REGISTER_BY);
   }
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/TestRegistry.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/TestRegistry.java
index f4e9382..8237ef4 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/TestRegistry.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/TestRegistry.java
@@ -34,8 +34,6 @@ import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.foundation.common.net.NetUtils;
 import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
 import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
-import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo;
-import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
 import org.apache.servicecomb.serviceregistry.client.http.MicroserviceInstances;
 import org.apache.servicecomb.serviceregistry.registry.ServiceRegistryFactory;
 import org.junit.AfterClass;
@@ -57,9 +55,6 @@ import mockit.Mocked;
 
 public class TestRegistry {
   private static final AbstractConfiguration inMemoryConfig = new ConcurrentMapConfiguration();
-  private static ServiceRegistryClient registryClient = Mockito.mock(ServiceRegistryClient.class);
-  private static ServiceRegistry serviceRegistry = Mockito.mock(ServiceRegistry.class);
-  private static ServiceCenterInfo serviceCenterInfo = Mockito.mock(ServiceCenterInfo.class);
 
   @BeforeClass
   public static void initSetup() throws Exception {
@@ -69,11 +64,6 @@ public class TestRegistry {
     configuration.addConfiguration(inMemoryConfig);
 
     ConfigurationManager.install(configuration);
-
-    Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", serviceRegistry);
-    Mockito.when(serviceRegistry.getServiceRegistryClient()).thenReturn(registryClient);
-    Mockito.when(registryClient.getServiceCenterInfo()).thenReturn(serviceCenterInfo);
-    Mockito.when(serviceCenterInfo.getVersion()).thenReturn("1.0.0");
   }
 
   @AfterClass
@@ -82,7 +72,6 @@ public class TestRegistry {
     Deencapsulation.setField(ConfigurationManager.class, "customConfigurationInstalled", false);
     Deencapsulation.setField(DynamicPropertyFactory.class, "config", null);
     RegistryUtils.setServiceRegistry(null);
-    Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", null);
   }
 
   @Before
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestFrameworkVersions.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestFrameworkVersions.java
index 5d16727..e0dde1a 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestFrameworkVersions.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestFrameworkVersions.java
@@ -17,34 +17,10 @@
 
 package org.apache.servicecomb.serviceregistry.api.registry;
 
-import org.apache.servicecomb.serviceregistry.RegistryUtils;
-import org.apache.servicecomb.serviceregistry.ServiceRegistry;
-import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
-import org.junit.AfterClass;
 import org.junit.Assert;
-import org.junit.BeforeClass;
 import org.junit.Test;
-import org.mockito.Mockito;
-import mockit.Deencapsulation;
 
 public class TestFrameworkVersions {
-  private static ServiceRegistryClient registryClient = Mockito.mock(ServiceRegistryClient.class);
-  private static ServiceRegistry serviceRegistry = Mockito.mock(ServiceRegistry.class);
-  private static ServiceCenterInfo serviceCenterInfo = Mockito.mock(ServiceCenterInfo.class);
-
-  @BeforeClass
-  public static void init() {
-    Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", serviceRegistry);
-    Mockito.when(serviceRegistry.getServiceRegistryClient()).thenReturn(registryClient);
-    Mockito.when(registryClient.getServiceCenterInfo()).thenReturn(serviceCenterInfo);
-    Mockito.when(serviceCenterInfo.getVersion()).thenReturn("1.0.0");
-  }
-
-  @AfterClass
-  public static void teardown() {
-    Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", null);
-  }
-
   @Test
   public void testFrameworkVersions() {
     Assert.assertEquals("ServiceComb:null", FrameworkVersions.allVersions());
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestLocalServiceRegistry.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestLocalServiceRegistry.java
index cbdcc73..6332995 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestLocalServiceRegistry.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestLocalServiceRegistry.java
@@ -19,36 +19,12 @@ package org.apache.servicecomb.serviceregistry.registry;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.serviceregistry.ServiceRegistry;
 import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
-import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo;
-import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
-import org.junit.AfterClass;
 import org.junit.Assert;
-import org.junit.BeforeClass;
 import org.junit.Test;
-import org.mockito.Mockito;
-
-import mockit.Deencapsulation;
 
 public class TestLocalServiceRegistry {
-  private static ServiceRegistryClient registryClient = Mockito.mock(ServiceRegistryClient.class);
-  private static ServiceRegistry serviceRegistry = Mockito.mock(ServiceRegistry.class);
-  private static ServiceCenterInfo serviceCenterInfo = Mockito.mock(ServiceCenterInfo.class);
-
-  @BeforeClass
-  public static void init() {
-    Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", serviceRegistry);
-    Mockito.when(serviceRegistry.getServiceRegistryClient()).thenReturn(registryClient);
-    Mockito.when(registryClient.getServiceCenterInfo()).thenReturn(serviceCenterInfo);
-    Mockito.when(serviceCenterInfo.getVersion()).thenReturn("1.0.0");
-  }
-
-  @AfterClass
-  public static void teardown() {
-    Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", null);
-  }
 
   @Test
   public void testLifeCycle() {
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java
index 8b21c34..5e8e6e7 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java
@@ -25,7 +25,6 @@ import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.foundation.common.net.IpPort;
 import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.serviceregistry.ServiceRegistry;
-import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo;
 import org.apache.servicecomb.serviceregistry.client.LocalServiceRegistryClientImpl;
 import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
 import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig;
@@ -34,13 +33,10 @@ import org.apache.servicecomb.serviceregistry.definition.MicroserviceDefinition;
 import org.apache.servicecomb.serviceregistry.task.event.PullMicroserviceVersionsInstancesEvent;
 import org.apache.servicecomb.serviceregistry.task.event.ShutdownEvent;
 import org.hamcrest.Matchers;
-import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
-import org.mockito.Mockito;
-
 import com.google.common.eventbus.EventBus;
 
 import mockit.Deencapsulation;
@@ -51,10 +47,6 @@ import mockit.MockUp;
 import mockit.Mocked;
 
 public class TestRemoteServiceRegistry {
-  private static ServiceRegistryClient registryClient = Mockito.mock(ServiceRegistryClient.class);
-  private static ServiceRegistry serviceRegistry = Mockito.mock(ServiceRegistry.class);
-  private static ServiceCenterInfo serviceCenterInfo = Mockito.mock(ServiceCenterInfo.class);
-
   class TestingRemoteServiceRegistry extends RemoteServiceRegistry {
     public TestingRemoteServiceRegistry(EventBus eventBus, ServiceRegistryConfig serviceRegistryConfig,
         MicroserviceDefinition microserviceDefinition) {
@@ -101,10 +93,6 @@ public class TestRemoteServiceRegistry {
     EventBus bus = new EventBus();
     RemoteServiceRegistry remote = new TestingRemoteServiceRegistry(bus, config, definition);
     remote.init();
-    Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", serviceRegistry);
-    Mockito.when(serviceRegistry.getServiceRegistryClient()).thenReturn(registryClient);
-    Mockito.when(registryClient.getServiceCenterInfo()).thenReturn(serviceCenterInfo);
-    Mockito.when(serviceCenterInfo.getVersion()).thenReturn("1.0.0");
     remote.run();
     Assert.assertTrue(2 <= remote.getTaskPool().getTaskCount()); // includes complete tasks
 
@@ -145,9 +133,4 @@ public class TestRemoteServiceRegistry {
     Deencapsulation.setField(remote, "taskPool", taskPool);
     bus.post(event);
   }
-
-  @AfterClass
-  public static void teardown() {
-    Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", null);
-  }
 }
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestServiceRegistryFactory.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestServiceRegistryFactory.java
index 1e62441..d6357a0 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestServiceRegistryFactory.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestServiceRegistryFactory.java
@@ -20,6 +20,7 @@ package org.apache.servicecomb.serviceregistry.registry;
 import java.util.Collections;
 
 import org.apache.servicecomb.serviceregistry.ServiceRegistry;
+import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo;
 import org.apache.servicecomb.serviceregistry.client.LocalServiceRegistryClientImpl;
 import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
 import org.apache.servicecomb.serviceregistry.client.http.ServiceRegistryClientImpl;
@@ -42,8 +43,16 @@ public class TestServiceRegistryFactory {
     ServiceRegistryConfig serviceRegistryConfig = ServiceRegistryConfig.INSTANCE;
     MicroserviceDefinition microserviceDefinition = new MicroserviceDefinition(Collections.emptyList());
 
-    ServiceRegistry serviceRegistry =
-        ServiceRegistryFactory.create(eventBus, serviceRegistryConfig, microserviceDefinition);
+    ServiceRegistry serviceRegistry = new RemoteServiceRegistry(eventBus, serviceRegistryConfig, microserviceDefinition) {
+      @Override
+      protected ServiceRegistryClient createServiceRegistryClient() {
+        return new ServiceRegistryClientImpl(ipPortManager) {
+          public ServiceCenterInfo getServiceCenterInfo() {
+            return new ServiceCenterInfo();
+          }
+        };
+      }
+    };
     serviceRegistry.init();
     ServiceRegistryClient client = serviceRegistry.getServiceRegistryClient();
     Assert.assertTrue(client instanceof ServiceRegistryClientImpl);

-- 
To stop receiving notification emails like this one, please contact
liubao@apache.org.