Browse Source

Don't intentionally disconnect peers if we are currently syncing with them.

sync-multiple-blocks^2
CalDescent 3 years ago
parent
commit
78237fcd11
  1. 2
      src/main/java/org/qortal/controller/Controller.java
  2. 9
      src/main/java/org/qortal/network/Network.java
  3. 10
      src/main/java/org/qortal/network/Peer.java

2
src/main/java/org/qortal/controller/Controller.java

@ -722,6 +722,7 @@ public class Controller extends Thread {
hasStatusChanged = true; hasStatusChanged = true;
} }
} }
peer.setSyncInProgress(true);
if (hasStatusChanged) if (hasStatusChanged)
updateSysTray(); updateSysTray();
@ -801,6 +802,7 @@ public class Controller extends Thread {
return syncResult; return syncResult;
} finally { } finally {
isSynchronizing = false; isSynchronizing = false;
peer.setSyncInProgress(false);
} }
} }

9
src/main/java/org/qortal/network/Network.java

@ -645,10 +645,15 @@ public class Network {
} }
// Find peers that have reached their maximum connection age, and disconnect them // Find peers that have reached their maximum connection age, and disconnect them
List<Peer> peersToDisconnect = this.connectedPeers.stream().filter(peer -> peer.hasReachedMaxConnectionAge()).collect(Collectors.toList()); List<Peer> peersToDisconnect = this.connectedPeers.stream()
.filter(peer -> !peer.isSyncInProgress())
.filter(peer -> peer.hasReachedMaxConnectionAge())
.collect(Collectors.toList());
if (peersToDisconnect != null && peersToDisconnect.size() > 0) { if (peersToDisconnect != null && peersToDisconnect.size() > 0) {
for (Peer peer : peersToDisconnect) { for (Peer peer : peersToDisconnect) {
LOGGER.debug("Forcing disconnect of peer {} because connection age ({} ms) has reached the maximum ({} ms)", peer, peer.getConnectionAge(), peer.getMaxConnectionAge()); LOGGER.info("Forcing disconnection of peer {} because connection age ({} ms) " +
"has reached the maximum ({} ms)", peer, peer.getConnectionAge(), peer.getMaxConnectionAge());
peer.disconnect("Connection age too old"); peer.disconnect("Connection age too old");
} }
} }

10
src/main/java/org/qortal/network/Peer.java

@ -97,6 +97,8 @@ public class Peer {
byte[] ourChallenge; byte[] ourChallenge;
private boolean syncInProgress = false;
// Versioning // Versioning
public static final Pattern VERSION_PATTERN = Pattern.compile(Controller.VERSION_PREFIX public static final Pattern VERSION_PATTERN = Pattern.compile(Controller.VERSION_PREFIX
+ "(\\d{1,3})\\.(\\d{1,5})\\.(\\d{1,5})"); + "(\\d{1,3})\\.(\\d{1,5})\\.(\\d{1,5})");
@ -340,6 +342,14 @@ public class Peer {
} }
} }
public boolean isSyncInProgress() {
return this.syncInProgress;
}
public void setSyncInProgress(boolean syncInProgress) {
this.syncInProgress = syncInProgress;
}
@Override @Override
public String toString() { public String toString() {
// Easier, and nicer output, than peer.getRemoteSocketAddress() // Easier, and nicer output, than peer.getRemoteSocketAddress()

Loading…
Cancel
Save