Skip to content

Commit 1b66cac

Browse files
author
michele
committed
bugfix reconnection after more than 3 failures
1 parent 311e2dd commit 1b66cac

File tree

2 files changed

+59
-51
lines changed

2 files changed

+59
-51
lines changed

β€ŽChangeLog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
66

77
## [Unreleased]
88

9+
- bugfix reconnection after more than 3 failures
10+
911
## [6.2.0] - 2019-09-05
1012

1113
- merged async driver

β€Žsrc/main/java/com/arangodb/internal/net/FallbackHostHandler.java

Lines changed: 57 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -20,71 +20,77 @@
2020

2121
package com.arangodb.internal.net;
2222

23+
import com.arangodb.ArangoDBException;
24+
2325
import java.util.List;
2426

2527
/**
2628
* @author Mark Vollmary
27-
*
2829
*/
2930
public class FallbackHostHandler implements HostHandler {
3031

31-
private Host current;
32-
private Host lastSuccess;
33-
private int iterations;
34-
private final HostResolver resolver;
35-
private boolean firstOpened;
32+
private final HostResolver resolver;
33+
private Host current;
34+
private Host lastSuccess;
35+
private int iterations;
36+
private boolean firstOpened;
3637

37-
public FallbackHostHandler(final HostResolver resolver) {
38-
this.resolver = resolver;
39-
iterations = 0;
40-
current = lastSuccess = resolver.resolve(true, false).getHostsList().get(0);
41-
firstOpened = true;
42-
}
38+
public FallbackHostHandler(final HostResolver resolver) {
39+
this.resolver = resolver;
40+
iterations = 0;
41+
current = lastSuccess = resolver.resolve(true, false).getHostsList().get(0);
42+
firstOpened = true;
43+
}
4344

44-
@Override
45-
public Host get(final HostHandle hostHandle, AccessType accessType) {
46-
return current != lastSuccess || iterations < 3 ? current : null;
47-
}
45+
@Override
46+
public Host get(final HostHandle hostHandle, AccessType accessType) {
47+
if (current != lastSuccess || iterations < 3) {
48+
return current;
49+
} else {
50+
reset();
51+
throw new ArangoDBException("Cannot contact any host!");
52+
}
53+
}
4854

49-
@Override
50-
public void success() {
51-
lastSuccess = current;
52-
}
55+
@Override
56+
public void success() {
57+
lastSuccess = current;
58+
}
5359

54-
@Override
55-
public void fail() {
56-
final List<Host> hosts = resolver.resolve(false, false).getHostsList();
57-
final int index = hosts.indexOf(current) + 1;
58-
final boolean inBound = index < hosts.size();
59-
current = hosts.get(inBound ? index : 0);
60-
if (!inBound) {
61-
iterations++;
62-
}
63-
}
60+
@Override
61+
public void fail() {
62+
final List<Host> hosts = resolver.resolve(false, false).getHostsList();
63+
final int index = hosts.indexOf(current) + 1;
64+
final boolean inBound = index < hosts.size();
65+
current = hosts.get(inBound ? index : 0);
66+
if (!inBound) {
67+
iterations++;
68+
}
69+
}
6470

65-
@Override
66-
public void reset() {
67-
iterations = 0;
68-
}
71+
@Override
72+
public void reset() {
73+
iterations = 0;
74+
}
6975

70-
@Override
71-
public void confirm() {
72-
if (firstOpened) {
73-
// after first successful established connection, update host list
74-
resolver.resolve(false, false);
75-
firstOpened = false;
76-
}
77-
}
76+
@Override
77+
public void confirm() {
78+
if (firstOpened) {
79+
// after first successful established connection, update host list
80+
resolver.resolve(false, false);
81+
firstOpened = false;
82+
}
83+
}
7884

79-
@Override
80-
public void close() {
81-
final HostSet hosts = resolver.resolve(false, false);
82-
hosts.close();
83-
}
85+
@Override
86+
public void close() {
87+
final HostSet hosts = resolver.resolve(false, false);
88+
hosts.close();
89+
}
8490

85-
@Override
86-
public void closeCurrentOnError() {
87-
current.closeOnError();
88-
}
91+
@Override
92+
public void closeCurrentOnError() {
93+
current.closeOnError();
94+
}
8995

9096
}

0 commit comments

Comments
 (0)