From 35b7423475086deb3341cf2b9dc80e8225b36e0e Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Thu, 24 Jun 2021 11:35:48 +0200 Subject: [PATCH 1/2] fixed host handler failures count --- .../com/arangodb/internal/net/FallbackHostHandler.java | 1 + .../java/com/arangodb/internal/net/RandomHostHandler.java | 8 +++----- .../arangodb/internal/velocystream/VstCommunication.java | 1 + 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/arangodb/internal/net/FallbackHostHandler.java b/src/main/java/com/arangodb/internal/net/FallbackHostHandler.java index 0630f2a4d..41c7244f6 100644 --- a/src/main/java/com/arangodb/internal/net/FallbackHostHandler.java +++ b/src/main/java/com/arangodb/internal/net/FallbackHostHandler.java @@ -55,6 +55,7 @@ public Host get(final HostHandle hostHandle, AccessType accessType) { @Override public void success() { lastSuccess = current; + iterations = 0; } @Override diff --git a/src/main/java/com/arangodb/internal/net/RandomHostHandler.java b/src/main/java/com/arangodb/internal/net/RandomHostHandler.java index f1359abd2..3faee8d52 100644 --- a/src/main/java/com/arangodb/internal/net/RandomHostHandler.java +++ b/src/main/java/com/arangodb/internal/net/RandomHostHandler.java @@ -30,27 +30,26 @@ public class RandomHostHandler implements HostHandler { private final HostResolver resolver; private final HostHandler fallback; - private Host origin; private Host current; public RandomHostHandler(final HostResolver resolver, final HostHandler fallback) { super(); this.resolver = resolver; this.fallback = fallback; - origin = current = getRandomHost(true, false); + current = getRandomHost(true, false); } @Override public Host get(final HostHandle hostHandle, AccessType accessType) { if (current == null) { - origin = current = getRandomHost(false, true); + current = getRandomHost(false, true); } return current; } @Override public void success() { - current = origin; + fallback.success(); } @Override @@ -60,7 +59,6 @@ public void fail() { } private Host getRandomHost(final boolean initial, final boolean closeConnections) { - final ArrayList hosts = new ArrayList<>(resolver.resolve(initial, closeConnections).getHostsList()); Collections.shuffle(hosts); return hosts.get(0); diff --git a/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java b/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java index 720ac6f02..44aab992b 100644 --- a/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java +++ b/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java @@ -83,6 +83,7 @@ protected synchronized C connect(final HostHandle hostHandle, final AccessType a } final C connection = (C) host.connection(); if (connection.isOpen()) { + hostHandler.success(); return connection; } else { try { From ccc38d7eb47d7a0ba66523a2ad83113ae8e5340e Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Thu, 24 Jun 2021 12:00:29 +0200 Subject: [PATCH 2/2] fixed host handler tests --- .../java/com/arangodb/internal/HostHandlerTest.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/arangodb/internal/HostHandlerTest.java b/src/test/java/com/arangodb/internal/HostHandlerTest.java index 06352d8c4..077634ed8 100644 --- a/src/test/java/com/arangodb/internal/HostHandlerTest.java +++ b/src/test/java/com/arangodb/internal/HostHandlerTest.java @@ -117,12 +117,18 @@ public void randomHostHandlerSingleHost() { @Test public void randomHostHandlerMultipeHosts() { final HostHandler handler = new RandomHostHandler(MULTIPLE_HOSTS, new FallbackHostHandler(MULTIPLE_HOSTS)); + final Host pick0 = handler.get(null, null); assertThat(pick0, anyOf(is(HOST_0), is(HOST_1), is(HOST_2))); handler.fail(); - assertThat(handler.get(null, null), anyOf(is(HOST_0), is(HOST_1), is(HOST_2))); + + final Host pick1 = handler.get(null, null); + assertThat(pick1, anyOf(is(HOST_0), is(HOST_1), is(HOST_2))); handler.success(); - assertThat(handler.get(null, null), is(pick0)); + + final Host pick3 = handler.get(null, null); + assertThat(pick3, anyOf(is(HOST_0), is(HOST_1), is(HOST_2))); + assertThat(pick3, is(pick1)); } @Test