From a021a12543b728c00da0ef9c3c2d3d4e26202094 Mon Sep 17 00:00:00 2001 From: hebelala Date: Fri, 24 Sep 2021 14:55:41 +0800 Subject: [PATCH 1/2] send yield command as ping, for fail fast --- .../vesoft/nebula/client/graph/net/RoundRobinLoadBalancer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/src/main/java/com/vesoft/nebula/client/graph/net/RoundRobinLoadBalancer.java b/client/src/main/java/com/vesoft/nebula/client/graph/net/RoundRobinLoadBalancer.java index 661dcaa80..d9a9817c4 100644 --- a/client/src/main/java/com/vesoft/nebula/client/graph/net/RoundRobinLoadBalancer.java +++ b/client/src/main/java/com/vesoft/nebula/client/graph/net/RoundRobinLoadBalancer.java @@ -64,8 +64,9 @@ public boolean ping(HostAddress addr) { try { Connection connection = new SyncConnection(); connection.open(addr, this.timeout); + boolean pong = connection.ping(); connection.close(); - return true; + return pong; } catch (IOErrorException e) { return false; } From 1c6a538330e7d96713894ee513ca23fe4795556f Mon Sep 17 00:00:00 2001 From: hebelala Date: Fri, 24 Sep 2021 15:04:14 +0800 Subject: [PATCH 2/2] use ConcurrentHashMap instead of HashMap, to avoid volatile problem --- .../nebula/client/graph/net/RoundRobinLoadBalancer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/main/java/com/vesoft/nebula/client/graph/net/RoundRobinLoadBalancer.java b/client/src/main/java/com/vesoft/nebula/client/graph/net/RoundRobinLoadBalancer.java index d9a9817c4..b1dbb63aa 100644 --- a/client/src/main/java/com/vesoft/nebula/client/graph/net/RoundRobinLoadBalancer.java +++ b/client/src/main/java/com/vesoft/nebula/client/graph/net/RoundRobinLoadBalancer.java @@ -3,9 +3,9 @@ import com.vesoft.nebula.client.graph.data.HostAddress; import com.vesoft.nebula.client.graph.exception.IOErrorException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -16,7 +16,7 @@ public class RoundRobinLoadBalancer implements LoadBalancer { private static final int S_OK = 0; private static final int S_BAD = 1; private final List addresses = new ArrayList<>(); - private final Map serversStatus = new HashMap<>(); + private final Map serversStatus = new ConcurrentHashMap<>(); private final int timeout; private final AtomicInteger pos = new AtomicInteger(0); private final int delayTime = 60; // unit seconds