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 {
