mirror of
https://github.com/boldsuck/haveno.git
synced 2024-12-22 20:19:21 +00:00
ignore switch connection request within 10s, 2 per min
This commit is contained in:
parent
eb8025f6e8
commit
fc3407cd50
1 changed files with 23 additions and 5 deletions
|
@ -106,10 +106,12 @@ public final class XmrConnectionService {
|
||||||
private List<MoneroConnectionManagerListener> listeners = new ArrayList<>();
|
private List<MoneroConnectionManagerListener> listeners = new ArrayList<>();
|
||||||
|
|
||||||
// connection switching
|
// connection switching
|
||||||
private static final int EXCLUDE_CONNECTION_SECONDS = 300;
|
private static final int EXCLUDE_CONNECTION_SECONDS = 180;
|
||||||
private static final int MAX_SWITCH_REQUESTS_PER_MINUTE = 3;
|
private static final int MAX_SWITCH_REQUESTS_PER_MINUTE = 2;
|
||||||
private Set<MoneroRpcConnection> excludedConnections = new HashSet<>();
|
private static final int SKIP_SWITCH_WITHIN_MS = 10000;
|
||||||
private int numRequestsLastMinute;
|
private int numRequestsLastMinute;
|
||||||
|
private long lastSwitchTimestamp;
|
||||||
|
private Set<MoneroRpcConnection> excludedConnections = new HashSet<>();
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public XmrConnectionService(P2PService p2PService,
|
public XmrConnectionService(P2PService p2PService,
|
||||||
|
@ -270,15 +272,28 @@ public final class XmrConnectionService {
|
||||||
if (bestConnection != null) setConnection(bestConnection);
|
if (bestConnection != null) setConnection(bestConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean requestSwitchToNextBestConnection() {
|
public synchronized boolean requestSwitchToNextBestConnection() {
|
||||||
log.warn("Request made to switch to next best monerod, current monerod={}", getConnection() == null ? null : getConnection().getUri());
|
log.warn("Request made to switch to next best monerod, current monerod={}", getConnection() == null ? null : getConnection().getUri());
|
||||||
|
|
||||||
|
// skip if shut down started
|
||||||
|
if (isShutDownStarted) {
|
||||||
|
log.warn("Skipping switch to next best Monero connection because shut down has started");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// skip if connection is fixed
|
// skip if connection is fixed
|
||||||
if (isFixedConnection() || !connectionManager.getAutoSwitch()) {
|
if (isFixedConnection() || !connectionManager.getAutoSwitch()) {
|
||||||
log.info("Skipping switch to next best Monero connection because connection is fixed or auto switch is disabled");
|
log.info("Skipping switch to next best Monero connection because connection is fixed or auto switch is disabled");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// skip if last switch was too recent
|
||||||
|
boolean skipSwitch = System.currentTimeMillis() - lastSwitchTimestamp < SKIP_SWITCH_WITHIN_MS;
|
||||||
|
if (skipSwitch) {
|
||||||
|
log.warn("Skipping switch to next best Monero connection because last switch was less than {} seconds ago", SKIP_SWITCH_WITHIN_MS / 1000);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// skip if too many requests in the last minute
|
// skip if too many requests in the last minute
|
||||||
if (numRequestsLastMinute > MAX_SWITCH_REQUESTS_PER_MINUTE) {
|
if (numRequestsLastMinute > MAX_SWITCH_REQUESTS_PER_MINUTE) {
|
||||||
log.warn("Skipping switch to next best Monero connection because more than {} requests were made in the last minute", MAX_SWITCH_REQUESTS_PER_MINUTE);
|
log.warn("Skipping switch to next best Monero connection because more than {} requests were made in the last minute", MAX_SWITCH_REQUESTS_PER_MINUTE);
|
||||||
|
@ -301,11 +316,14 @@ public final class XmrConnectionService {
|
||||||
if (currentConnection != null) excludedConnections.remove(currentConnection);
|
if (currentConnection != null) excludedConnections.remove(currentConnection);
|
||||||
}, EXCLUDE_CONNECTION_SECONDS);
|
}, EXCLUDE_CONNECTION_SECONDS);
|
||||||
|
|
||||||
// switch to best connection
|
// return if no connection to switch to
|
||||||
if (bestConnection == null) {
|
if (bestConnection == null) {
|
||||||
log.warn("No connection to switch to");
|
log.warn("No connection to switch to");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// switch to best connection
|
||||||
|
lastSwitchTimestamp = System.currentTimeMillis();
|
||||||
setConnection(bestConnection);
|
setConnection(bestConnection);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue