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