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/10/23 08:08:38 UTC

[incubator-servicecomb-java-chassis] 01/05: [SCB-718]If auto discovery failed, will cause a dead cycle

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 <73...@qq.com>
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