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/06/12 12:14:09 UTC

[servicecomb-java-chassis] 02/05: [SCB-2796]fix configuration item and test cases error

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 b745257d26586e6fb036389dd6ce8b56ccf14a74
Author: liubao <bi...@qq.com>
AuthorDate: Fri Jun 9 11:47:39 2023 +0800

    [SCB-2796]fix configuration item and test cases error
---
 .../servicecomb/core/bootstrap/SCBBootstrap.java   |  5 +++
 .../servicecomb/serviceregistry/RegistryUtils.java | 40 ++++++++++++++--------
 .../servicecomb/serviceregistry/TestRegistry.java  |  2 +-
 .../cache/TestMicroserviceInstanceCache.java       | 21 +++++-------
 .../instance/TestInstanceCacheCheckerMock.java     |  2 +-
 .../TestInstanceCacheCheckerWithoutMock.java       |  5 +--
 .../registry/TestLocalServiceRegistry.java         |  7 ++--
 .../registry/TestRemoteServiceRegistry.java        |  9 +++--
 .../transport/rest/servlet/TestRestServlet.java    |  3 +-
 .../rest/vertx/TestRestServerVerticle.java         |  2 ++
 .../rest/vertx/TestVertxRestDispatcher.java        |  2 ++
 11 files changed, 58 insertions(+), 40 deletions(-)

diff --git a/core/src/main/java/org/apache/servicecomb/core/bootstrap/SCBBootstrap.java b/core/src/main/java/org/apache/servicecomb/core/bootstrap/SCBBootstrap.java
index 1967e5609..8fc096f26 100644
--- a/core/src/main/java/org/apache/servicecomb/core/bootstrap/SCBBootstrap.java
+++ b/core/src/main/java/org/apache/servicecomb/core/bootstrap/SCBBootstrap.java
@@ -26,4 +26,9 @@ public class SCBBootstrap {
     DiscoveryManager.INSTANCE.init();
     return new SCBEngineForTest();
   }
+
+  public static void resetSCBEngineForTest() {
+    RegistrationManager.INSTANCE.destroy();
+    DiscoveryManager.INSTANCE.destroy();
+  }
 }
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 e0e36cb41..fe16cd4b6 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
@@ -57,13 +57,19 @@ import com.google.common.eventbus.Subscribe;
 import com.netflix.config.DynamicPropertyFactory;
 
 public final class RegistryUtils {
+
   private static final Logger LOGGER = LoggerFactory.getLogger(RegistryUtils.class);
 
+  public static final String SERVICECOMB_SERVICE_REGISTRY_REPEATED_INITIALIZATION_ALLOWED
+      = "servicecomb.service.registry.repeated.initialization.allowed";
+
   /**
    * The default ServiceRegistry instance
    */
   private static volatile ServiceRegistry serviceRegistry;
 
+  private static volatile boolean running = false;
+
   private static final Map<String, ServiceRegistry> EXTRA_SERVICE_REGISTRIES = new LinkedHashMap<>();
 
   private static AggregateServiceRegistryCache aggregateServiceRegistryCache;
@@ -74,10 +80,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.");
+          .getBooleanProperty(SERVICECOMB_SERVICE_REGISTRY_REPEATED_INITIALIZATION_ALLOWED, false).get()) {
+        return;
       }
-      return;
+      throw new IllegalStateException("Registry has already bean initialized and not allowed to initialize twice.");
     }
 
     initializeServiceRegistriesWithConfig(ConfigUtil.createLocalConfig());
@@ -85,14 +91,6 @@ 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);
@@ -123,17 +121,31 @@ public final class RegistryUtils {
   }
 
   public static void run() {
+    if (running) {
+      if (DynamicPropertyFactory.getInstance()
+          .getBooleanProperty(SERVICECOMB_SERVICE_REGISTRY_REPEATED_INITIALIZATION_ALLOWED, false).get()) {
+        return;
+      }
+      throw new IllegalStateException("Registry has already bean initialized and not allowed to initialize twice.");
+    }
     executeOnEachServiceRegistry(ServiceRegistry::run);
   }
 
   public static void destroy() {
     executeOnEachServiceRegistry(ServiceRegistry::destroy);
+    running = false;
+    if (serviceRegistry != null) {
+      serviceRegistry = null;
+    }
+    EXTRA_SERVICE_REGISTRIES.clear();
   }
 
+  @VisibleForTesting
   public static ServiceRegistry getServiceRegistry() {
     return serviceRegistry;
   }
 
+  @VisibleForTesting
   public static void setServiceRegistry(ServiceRegistry serviceRegistry) {
     RegistryUtils.serviceRegistry = serviceRegistry;
     initAggregateServiceRegistryCache();
@@ -266,8 +278,8 @@ public final class RegistryUtils {
   }
 
   public static void executeOnEachServiceRegistry(Consumer<ServiceRegistry> action) {
-    if (null != getServiceRegistry()) {
-      action.accept(getServiceRegistry());
+    if (null != serviceRegistry) {
+      action.accept(serviceRegistry);
     }
     if (!EXTRA_SERVICE_REGISTRIES.isEmpty()) {
       EXTRA_SERVICE_REGISTRIES.forEach((k, v) -> action.accept(v));
@@ -309,7 +321,7 @@ public final class RegistryUtils {
 
   public static ServiceRegistry getServiceRegistry(String registryName) {
     if (ServiceRegistry.DEFAULT_REGISTRY_NAME.equals(registryName)) {
-      return getServiceRegistry();
+      return serviceRegistry;
     }
 
     return EXTRA_SERVICE_REGISTRIES.get(registryName);
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 4c63986e9..1c0e96640 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
@@ -81,7 +81,7 @@ public class TestRegistry {
 
   @AfterEach
   public void tearDown() throws Exception {
-    RegistryUtils.reset();
+    RegistryUtils.destroy();
   }
 
   @SuppressWarnings("deprecation")
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/cache/TestMicroserviceInstanceCache.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/cache/TestMicroserviceInstanceCache.java
index cdd84019d..b838cd86b 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/cache/TestMicroserviceInstanceCache.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/cache/TestMicroserviceInstanceCache.java
@@ -20,30 +20,32 @@ package org.apache.servicecomb.serviceregistry.cache;
 import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
 import org.apache.servicecomb.registry.DiscoveryManager;
+import org.apache.servicecomb.registry.api.registry.Microservice;
+import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.registry.cache.MicroserviceInstanceCache;
 import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.serviceregistry.ServiceRegistry;
-import org.apache.servicecomb.registry.api.registry.Microservice;
-import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
-import org.junit.AfterClass;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
 
 import mockit.Expectations;
 import mockit.Mock;
 import mockit.MockUp;
 import mockit.Mocked;
-import org.junit.jupiter.api.Assertions;
 
 public class TestMicroserviceInstanceCache {
   @Before
   public void setup() {
     ConfigUtil.installDynamicConfig();
+    RegistryUtils.init();
   }
 
-  @AfterClass
-  public static void classTeardown() {
+  @After
+  public void teardown() {
+    RegistryUtils.destroy();
     ArchaiusUtils.resetConfig();
   }
 
@@ -75,12 +77,7 @@ public class TestMicroserviceInstanceCache {
   public void testGetOrCreateMicroserviceInstance(@Mocked ServiceRegistry serviceRegistry,
       @Mocked ServiceRegistryClient client,
       @Mocked MicroserviceInstance instance) {
-    new MockUp<RegistryUtils>() {
-      @Mock
-      ServiceRegistry getServiceRegistry() {
-        return serviceRegistry;
-      }
-    };
+    RegistryUtils.setServiceRegistry(serviceRegistry);
     new Expectations() {
       {
         serviceRegistry.getServiceRegistryClient();
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 db28af29e..771bbcfe1 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,7 +73,7 @@ public class TestInstanceCacheCheckerMock {
   @After
   public void tearDown() throws Exception {
     ArchaiusUtils.resetConfig();
-    RegistryUtils.reset();
+    RegistryUtils.destroy();
   }
 
   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 2e71578f7..8d833905f 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,7 +69,7 @@ public class TestInstanceCacheCheckerWithoutMock {
   @After
   public void tearDown() throws Exception {
     ArchaiusUtils.resetConfig();
-    RegistryUtils.reset();
+    RegistryUtils.destroy();
   }
 
   @Test
@@ -102,7 +102,8 @@ public class TestInstanceCacheCheckerWithoutMock {
 
     MicroserviceVersionRule microserviceVersionRule = DiscoveryManager.INSTANCE.getAppManager()
         .getOrCreateMicroserviceVersionRule(appId, microserviceName, DefinitionConst.VERSION_RULE_ALL);
-    Assertions.assertEquals(microserviceName, microserviceVersionRule.getLatestMicroserviceVersion().getMicroserviceName());
+    Assertions.assertEquals(microserviceName,
+        microserviceVersionRule.getLatestMicroserviceVersion().getMicroserviceName());
 
     InstanceCacheSummary instanceCacheSummary = checker.check();
 
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 bf2dcbe11..c81dd2a5a 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
@@ -28,6 +28,8 @@ 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 com.netflix.config.ConcurrentCompositeConfiguration;
 import com.netflix.config.ConcurrentMapConfiguration;
@@ -36,9 +38,6 @@ import com.netflix.config.DynamicPropertyFactory;
 
 import mockit.Deencapsulation;
 
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-
 public class TestLocalServiceRegistry {
   private static final AbstractConfiguration inMemoryConfig = new ConcurrentMapConfiguration();
 
@@ -67,7 +66,7 @@ public class TestLocalServiceRegistry {
 
   @AfterEach
   public void tearDown() throws Exception {
-    RegistryUtils.reset();
+    RegistryUtils.destroy();
   }
 
   @Test
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 f46999b6a..bce8f3c37 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
@@ -23,13 +23,15 @@ import java.util.concurrent.TimeUnit;
 import org.apache.commons.configuration.Configuration;
 import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
-import org.apache.servicecomb.serviceregistry.event.ShutdownEvent;
 import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.serviceregistry.ServiceRegistry;
 import org.apache.servicecomb.serviceregistry.client.LocalServiceRegistryClientImpl;
 import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
 import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig;
+import org.apache.servicecomb.serviceregistry.event.ShutdownEvent;
 import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
 
 import com.google.common.eventbus.EventBus;
 
@@ -38,9 +40,6 @@ import mockit.Injectable;
 import mockit.Mock;
 import mockit.MockUp;
 
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-
 public class TestRemoteServiceRegistry {
   static class TestingRemoteServiceRegistry extends RemoteServiceRegistry {
     public TestingRemoteServiceRegistry(EventBus eventBus, ServiceRegistryConfig serviceRegistryConfig,
@@ -56,7 +55,7 @@ public class TestRemoteServiceRegistry {
 
   @AfterEach
   public void tearDown() throws Exception {
-    RegistryUtils.reset();
+    RegistryUtils.destroy();
   }
 
   @Test
diff --git a/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestRestServlet.java b/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestRestServlet.java
index 01855f89f..b4f2a0a9b 100644
--- a/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestRestServlet.java
+++ b/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestRestServlet.java
@@ -29,11 +29,11 @@ import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
 
 import mockit.Deencapsulation;
 import mockit.Mock;
 import mockit.MockUp;
-import org.junit.jupiter.api.Assertions;
 
 public class TestRestServlet {
   private RestServlet restservlet = null;
@@ -51,6 +51,7 @@ public class TestRestServlet {
   public void tearDown() {
     restservlet = null;
     SCBEngine.getInstance().destroy();
+    SCBBootstrap.resetSCBEngineForTest();
     ArchaiusUtils.resetConfig();
   }
 
diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestRestServerVerticle.java b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestRestServerVerticle.java
index 57a6a2ac1..684a6de69 100644
--- a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestRestServerVerticle.java
+++ b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestRestServerVerticle.java
@@ -30,6 +30,7 @@ import org.apache.servicecomb.core.transport.AbstractTransport;
 import org.apache.servicecomb.foundation.common.Holder;
 import org.apache.servicecomb.foundation.common.net.URIEndpointObject;
 import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
+import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.hamcrest.MatcherAssert;
 import org.hamcrest.Matchers;
 import org.junit.After;
@@ -75,6 +76,7 @@ public class TestRestServerVerticle {
     startPromise = null;
     SCBEngine.getInstance().destroy();
     ArchaiusUtils.resetConfig();
+    RegistryUtils.destroy();
   }
 
   @Test
diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestVertxRestDispatcher.java b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestVertxRestDispatcher.java
index 3a98723c5..0c6f85f17 100644
--- a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestVertxRestDispatcher.java
+++ b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestVertxRestDispatcher.java
@@ -42,6 +42,7 @@ import org.apache.servicecomb.core.transport.TransportManager;
 import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
+import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
 import org.hamcrest.MatcherAssert;
 import org.hamcrest.Matchers;
@@ -96,6 +97,7 @@ public class TestVertxRestDispatcher {
   public void teardown() {
     SCBEngine.getInstance().destroy();
     ArchaiusUtils.resetConfig();
+    RegistryUtils.destroy();
   }
 
   @Test