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

commit d66a4fc58f5264e17e131b4bf004aa424596c021
Author: liubao <[email protected]>
AuthorDate: Thu Jun 8 17:48:43 2023 +0800

    [SCB-2796]Do not allow call registry initialization twice and keep 
compatible to 1.x data center configuration
---
 .../registry/api/registry/MicroserviceInstance.java    |  7 ++++---
 .../servicecomb/serviceregistry/RegistryUtils.java     | 18 ++++++++++++++++--
 .../servicecomb/serviceregistry/TestRegistry.java      |  6 ++++++
 .../instance/TestInstanceCacheCheckerMock.java         |  1 +
 .../instance/TestInstanceCacheCheckerWithoutMock.java  |  1 +
 .../registry/TestLocalServiceRegistry.java             |  7 +++++++
 .../registry/TestRemoteServiceRegistry.java            |  7 +++++++
 7 files changed, 42 insertions(+), 5 deletions(-)

diff --git 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstance.java
 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstance.java
index 954fe0495..f7d41bf3a 100644
--- 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstance.java
+++ 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstance.java
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.configuration.Configuration;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.registry.config.InstancePropertiesLoader;
 import org.apache.servicecomb.registry.definition.DefinitionConst;
@@ -198,13 +199,13 @@ public class MicroserviceInstance {
     String dataCenterName = DynamicPropertyFactory.getInstance()
         .getStringProperty("servicecomb.datacenter.name", null)
         .get();
+    if (StringUtils.isEmpty(dataCenterName)) {
+      return;
+    }
     String region = DynamicPropertyFactory.getInstance().
         getStringProperty("servicecomb.datacenter.region", null).get();
     String availableZone = DynamicPropertyFactory.getInstance().
         getStringProperty("servicecomb.datacenter.availableZone", null).get();
-    if (dataCenterName == null && region == null && availableZone == null) {
-      return;
-    }
     DataCenterInfo dataCenterInfo = new DataCenterInfo();
     dataCenterInfo.setName(dataCenterName);
     dataCenterInfo.setRegion(region);
diff --git 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/RegistryUtils.java
 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/RegistryUtils.java
index b8b70a357..e0e36cb41 100644
--- 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/RegistryUtils.java
+++ 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/RegistryUtils.java
@@ -52,7 +52,9 @@ import 
org.apache.servicecomb.serviceregistry.task.MicroserviceInstanceRegisterT
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.eventbus.Subscribe;
+import com.netflix.config.DynamicPropertyFactory;
 
 public final class RegistryUtils {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(RegistryUtils.class);
@@ -71,6 +73,10 @@ public final class RegistryUtils {
 
   public static synchronized void init() {
     if (serviceRegistry != null) {
+      if (DynamicPropertyFactory.getInstance()
+          
.getBooleanProperty("servicecomb.service.registry.initialization.notAllowed", 
true).get()) {
+        throw new IllegalStateException("Registry has already bean initialized 
and not allowed to initialize twice.");
+      }
       return;
     }
 
@@ -79,6 +85,14 @@ public final class RegistryUtils {
     initAggregateServiceRegistryCache();
   }
 
+  @VisibleForTesting
+  public static synchronized void reset() {
+    if (serviceRegistry != null) {
+      serviceRegistry.destroy();
+      serviceRegistry = null;
+    }
+  }
+
   private static void initAggregateServiceRegistryCache() {
     ArrayList<ServiceRegistry> serviceRegistries = new ArrayList<>();
     executeOnEachServiceRegistry(serviceRegistries::add);
@@ -148,7 +162,7 @@ public final class RegistryUtils {
 
 
   public static List<MicroserviceInstance> findServiceInstance(String appId, 
String serviceName,
-                                                               String 
versionRule) {
+      String versionRule) {
     MicroserviceCache serviceCache = 
aggregateServiceRegistryCache.findServiceCache(
         MicroserviceCacheKey.builder()
             .appId(appId).serviceName(serviceName)
@@ -185,7 +199,7 @@ public final class RegistryUtils {
   }
 
   public static MicroserviceInstances findServiceInstances(String appId, 
String serviceName,
-                                                           String versionRule) 
{
+      String versionRule) {
     MicroserviceCache serviceCache = 
aggregateServiceRegistryCache.findServiceCache(
         MicroserviceCacheKey.builder()
             .appId(appId)
diff --git 
a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/TestRegistry.java
 
b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/TestRegistry.java
index 9a9338110..4c63986e9 100644
--- 
a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/TestRegistry.java
+++ 
b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/TestRegistry.java
@@ -39,6 +39,7 @@ import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 import org.mockito.Mockito;
 
@@ -78,6 +79,11 @@ public class TestRegistry {
     inMemoryConfig.clear();
   }
 
+  @AfterEach
+  public void tearDown() throws Exception {
+    RegistryUtils.reset();
+  }
+
   @SuppressWarnings("deprecation")
   @Test
   public void testDelegate() {
diff --git 
a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerMock.java
 
b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerMock.java
index 9de7f5ee5..db28af29e 100644
--- 
a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerMock.java
+++ 
b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerMock.java
@@ -73,6 +73,7 @@ public class TestInstanceCacheCheckerMock {
   @After
   public void tearDown() throws Exception {
     ArchaiusUtils.resetConfig();
+    RegistryUtils.reset();
   }
 
   private Holder<MicroserviceInstances> createFindServiceInstancesResult() {
diff --git 
a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerWithoutMock.java
 
b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerWithoutMock.java
index a99f849e0..2e71578f7 100644
--- 
a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerWithoutMock.java
+++ 
b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerWithoutMock.java
@@ -69,6 +69,7 @@ public class TestInstanceCacheCheckerWithoutMock {
   @After
   public void tearDown() throws Exception {
     ArchaiusUtils.resetConfig();
+    RegistryUtils.reset();
   }
 
   @Test
diff --git 
a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestLocalServiceRegistry.java
 
b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestLocalServiceRegistry.java
index c9ee3a0ed..bf2dcbe11 100644
--- 
a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestLocalServiceRegistry.java
+++ 
b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestLocalServiceRegistry.java
@@ -35,6 +35,8 @@ import com.netflix.config.ConfigurationManager;
 import com.netflix.config.DynamicPropertyFactory;
 
 import mockit.Deencapsulation;
+
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 
 public class TestLocalServiceRegistry {
@@ -63,6 +65,11 @@ public class TestLocalServiceRegistry {
     inMemoryConfig.clear();
   }
 
+  @AfterEach
+  public void tearDown() throws Exception {
+    RegistryUtils.reset();
+  }
+
   @Test
   public void testLifeCycle() {
     ServiceRegistry serviceRegistry = 
LocalServiceRegistryFactory.createLocal();
diff --git 
a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java
 
b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java
index dc769fa07..f46999b6a 100644
--- 
a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java
+++ 
b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java
@@ -37,6 +37,8 @@ import mockit.Expectations;
 import mockit.Injectable;
 import mockit.Mock;
 import mockit.MockUp;
+
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 
 public class TestRemoteServiceRegistry {
@@ -52,6 +54,11 @@ public class TestRemoteServiceRegistry {
     }
   }
 
+  @AfterEach
+  public void tearDown() throws Exception {
+    RegistryUtils.reset();
+  }
+
   @Test
   public void testLifeCycle(@Injectable ServiceRegistryConfig config,
       @Injectable ServiceRegistry registry) throws InterruptedException {

Reply via email to