Skip to content

Commit fec7a8a

Browse files
committed
AF: check host before closing
1 parent 7b1900b commit fec7a8a

File tree

6 files changed

+54
-2
lines changed

6 files changed

+54
-2
lines changed

src/main/java/com/arangodb/internal/net/DirtyReadHostHandler.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@ public void fail(Exception exception) {
6060
determineHostHandler().fail(exception);
6161
}
6262

63+
@Override
64+
public void failIfNotMatch(HostDescription host, Exception exception) {
65+
determineHostHandler().failIfNotMatch(host, exception);
66+
}
67+
6368
@Override
6469
public void reset() {
6570
determineHostHandler().reset();
@@ -81,6 +86,11 @@ public void closeCurrentOnError() {
8186
determineHostHandler().closeCurrentOnError();
8287
}
8388

89+
@Override
90+
public void closeCurrentOnErrorIfNotMatch(HostDescription host) {
91+
determineHostHandler().closeCurrentOnErrorIfNotMatch(host);
92+
}
93+
8494
@Override
8595
public void setJwt(String jwt) {
8696
master.setJwt(jwt);

src/main/java/com/arangodb/internal/net/FallbackHostHandler.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,13 @@ public void fail(Exception exception) {
7979
lastFailExceptions.add(exception);
8080
}
8181

82+
@Override
83+
public synchronized void failIfNotMatch(HostDescription host, Exception exception) {
84+
if (!host.equals(current.getDescription())) {
85+
fail(exception);
86+
}
87+
}
88+
8289
@Override
8390
public void reset() {
8491
iterations = 0;
@@ -104,6 +111,13 @@ public void closeCurrentOnError() {
104111
current.closeOnError();
105112
}
106113

114+
@Override
115+
public synchronized void closeCurrentOnErrorIfNotMatch(HostDescription host) {
116+
if (!host.equals(current.getDescription())) {
117+
closeCurrentOnError();
118+
}
119+
}
120+
107121
@Override
108122
public void setJwt(String jwt) {
109123
hosts.setJwt(jwt);

src/main/java/com/arangodb/internal/net/HostHandler.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ public interface HostHandler {
3333

3434
void fail(Exception exception);
3535

36+
void failIfNotMatch(HostDescription host, Exception exception);
37+
3638
void reset();
3739

3840
void confirm();
@@ -41,6 +43,8 @@ public interface HostHandler {
4143

4244
void closeCurrentOnError();
4345

46+
void closeCurrentOnErrorIfNotMatch(HostDescription host);
47+
4448
void setJwt(String jwt);
4549

4650
}

src/main/java/com/arangodb/internal/net/RandomHostHandler.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@ public void fail(Exception exception) {
5959
current = fallback.get(null, null);
6060
}
6161

62+
@Override
63+
public synchronized void failIfNotMatch(HostDescription host, Exception exception) {
64+
if (!host.equals(current.getDescription())) {
65+
fail(exception);
66+
}
67+
}
68+
6269
private Host getRandomHost(final boolean initial, final boolean closeConnections) {
6370
hosts = resolver.resolve(initial, closeConnections);
6471
final ArrayList<Host> hostList = new ArrayList<>(hosts.getHostsList());
@@ -85,6 +92,13 @@ public void closeCurrentOnError() {
8592
current.closeOnError();
8693
}
8794

95+
@Override
96+
public synchronized void closeCurrentOnErrorIfNotMatch(HostDescription host) {
97+
if (!host.equals(current.getDescription())) {
98+
closeCurrentOnError();
99+
}
100+
}
101+
88102
@Override
89103
public void setJwt(String jwt) {
90104
fallback.setJwt(jwt);

src/main/java/com/arangodb/internal/net/RoundRobinHostHandler.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,11 @@ public void fail(Exception exception) {
8989
lastFailExceptions.add(exception);
9090
}
9191

92+
@Override
93+
public void failIfNotMatch(HostDescription host, Exception exception) {
94+
fail(exception);
95+
}
96+
9297
@Override
9398
public void reset() {
9499
fails = 0;
@@ -109,6 +114,11 @@ public void closeCurrentOnError() {
109114
currentHost.closeOnError();
110115
}
111116

117+
@Override
118+
public void closeCurrentOnErrorIfNotMatch(HostDescription host) {
119+
closeCurrentOnError();
120+
}
121+
112122
@Override
113123
public void setJwt(String jwt) {
114124
hosts.setJwt(jwt);

src/main/java/com/arangodb/internal/velocystream/VstCommunicationSync.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@ protected Response execute(final Request request, final VstConnectionSync connec
151151
}
152152
final String location = e.getLocation();
153153
final HostDescription redirectHost = HostUtils.createFromLocation(location);
154-
hostHandler.closeCurrentOnError();
155-
hostHandler.fail(e);
154+
hostHandler.closeCurrentOnErrorIfNotMatch(redirectHost);
155+
hostHandler.failIfNotMatch(redirectHost, e);
156156
return execute(request, new HostHandle().setHost(redirectHost), attemptCount + 1);
157157
}
158158
}

0 commit comments

Comments
 (0)