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 54bd9dd1db67c9cfe3f6a0bb6965f33eb059fad9 Author: laijianbin <[email protected]> AuthorDate: Sun Sep 30 23:28:51 2018 +0800 [SCB-718]If auto discovery failed, will cause a dead cycle --- .../servicecomb/serviceregistry/client/IpPortManager.java | 15 ++++++++++++--- .../serviceregistry/registry/RemoteServiceRegistry.java | 6 ++---- .../serviceregistry/client/TestIpPortManager.java | 14 ++++++++++++++ 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/IpPortManager.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/IpPortManager.java index 0d5db0a..1bc92fc 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/IpPortManager.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/IpPortManager.java @@ -51,8 +51,13 @@ public class IpPortManager { private boolean autoDiscoveryInited = false; private int maxRetryTimes; + - public int getMaxRetryTimes() { + public void setAutoDiscoveryInited(boolean autoDiscoveryInited) { + this.autoDiscoveryInited = autoDiscoveryInited; + } + +public int getMaxRetryTimes() { return maxRetryTimes; } @@ -73,10 +78,14 @@ public class IpPortManager { // we have to do this operation after the first time setup has already done public void initAutoDiscovery() { if (!autoDiscoveryInited && this.serviceRegistryConfig.isRegistryAutoDiscovery()) { - instanceCacheManager.getOrCreate(REGISTRY_APP_ID, + InstanceCache cache = instanceCacheManager.getOrCreate(REGISTRY_APP_ID, REGISTRY_SERVICE_NAME, DefinitionConst.VERSION_RULE_LATEST); - autoDiscoveryInited = true; + if(cache.getInstanceMap().size() > 0) { + setAutoDiscoveryInited(true); + }else { + setAutoDiscoveryInited(false); + } } } diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/RemoteServiceRegistry.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/RemoteServiceRegistry.java index 8eb4fb2..39e1271 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/RemoteServiceRegistry.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/RemoteServiceRegistry.java @@ -25,7 +25,7 @@ import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient; import org.apache.servicecomb.serviceregistry.client.http.ServiceRegistryClientImpl; import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig; import org.apache.servicecomb.serviceregistry.definition.MicroserviceDefinition; -import org.apache.servicecomb.serviceregistry.task.MicroserviceRegisterTask; +import org.apache.servicecomb.serviceregistry.task.MicroserviceInstanceHeartbeatTask; import org.apache.servicecomb.serviceregistry.task.event.PeriodicPullEvent; import org.apache.servicecomb.serviceregistry.task.event.PullMicroserviceVersionsInstancesEvent; import org.apache.servicecomb.serviceregistry.task.event.ShutdownEvent; @@ -94,10 +94,8 @@ public class RemoteServiceRegistry extends AbstractServiceRegistry { } @Subscribe - public void onMicroserviceRegistryTask(MicroserviceRegisterTask event) { - if (event.isRegistered()) { + public void onMicroserviceRegistryTask(MicroserviceInstanceHeartbeatTask event) { ipPortManager.initAutoDiscovery(); - } } public ScheduledThreadPoolExecutor getTaskPool() { diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/TestIpPortManager.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/TestIpPortManager.java index 771b2d9..225b970 100644 --- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/TestIpPortManager.java +++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/TestIpPortManager.java @@ -122,6 +122,7 @@ public class TestIpPortManager { }; manager.initAutoDiscovery(); + manager.setAutoDiscoveryInited(true); IpPort address4 = manager.getNextAvailableAddress(address3); if (address1.getPort() == 9980) { Assert.assertEquals("127.0.0.1", address4.getHostOrIp()); @@ -135,6 +136,19 @@ public class TestIpPortManager { IpPort address5 = manager.getNextAvailableAddress(address4); Assert.assertEquals("127.0.0.1", address5.getHostOrIp()); Assert.assertEquals(9980, address5.getPort()); + + manager.initAutoDiscovery(); + manager.setAutoDiscoveryInited(false); + IpPort address6 = manager.getNextAvailableAddress(address3); + if(address1.getPort() == 9980) { + Assert.assertEquals("127.0.0.1", address6.getHostOrIp()); + Assert.assertEquals(9980, address6.getPort()); + }else { + address6 = manager.getNextAvailableAddress(address1); + Assert.assertEquals("127.0.0.1", address6.getHostOrIp()); + Assert.assertEquals(9980, address6.getPort()); + } + } @Test
