mirror of
https://github.com/Qortal/qortal.git
synced 2025-05-14 05:37:51 +00:00
remove purge timeout setting, updates to pruning
This commit is contained in:
parent
ea06a7fe91
commit
e6f349ca41
@ -106,7 +106,9 @@ public class RNSNetwork {
|
|||||||
static final String defaultConfigPath = Settings.getInstance().isTestNet() ? RNSCommon.defaultRNSConfigPathTestnet: RNSCommon.defaultRNSConfigPath;
|
static final String defaultConfigPath = Settings.getInstance().isTestNet() ? RNSCommon.defaultRNSConfigPathTestnet: RNSCommon.defaultRNSConfigPath;
|
||||||
private final int MAX_PEERS = Settings.getInstance().getReticulumMaxPeers();
|
private final int MAX_PEERS = Settings.getInstance().getReticulumMaxPeers();
|
||||||
private final int MIN_DESIRED_PEERS = Settings.getInstance().getReticulumMinDesiredPeers();
|
private final int MIN_DESIRED_PEERS = Settings.getInstance().getReticulumMinDesiredPeers();
|
||||||
private final long PRUNE_INTERVAL = Settings.getInstance().getReticulumPruneInterval();
|
// How long [ms] between pruning of peers
|
||||||
|
private long PRUNE_INTERVAL = 1 * 60 * 1000L; // ms;
|
||||||
|
|
||||||
Identity serverIdentity;
|
Identity serverIdentity;
|
||||||
public Destination baseDestination;
|
public Destination baseDestination;
|
||||||
private volatile boolean isShuttingDown = false;
|
private volatile boolean isShuttingDown = false;
|
||||||
@ -250,8 +252,9 @@ public class RNSNetwork {
|
|||||||
|
|
||||||
public void broadcast(Function<RNSPeer, Message> peerMessageBuilder) {
|
public void broadcast(Function<RNSPeer, Message> peerMessageBuilder) {
|
||||||
for (RNSPeer peer : getImmutableLinkedPeers()) {
|
for (RNSPeer peer : getImmutableLinkedPeers()) {
|
||||||
if (this.isShuttingDown)
|
if (this.isShuttingDown) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Message message = peerMessageBuilder.apply(peer);
|
Message message = peerMessageBuilder.apply(peer);
|
||||||
|
|
||||||
@ -259,7 +262,10 @@ public class RNSNetwork {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
peer.sendMessage(message);
|
var pl = peer.getPeerLink();
|
||||||
|
if (nonNull(pl) && (pl.getStatus() == ACTIVE)) {
|
||||||
|
peer.sendMessage(message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -481,6 +487,12 @@ public class RNSNetwork {
|
|||||||
|
|
||||||
final Long now = NTP.getTime();
|
final Long now = NTP.getTime();
|
||||||
|
|
||||||
|
// Prune stuck/slow/old peers (moved from Controller)
|
||||||
|
task = maybeProduceRNSPrunePeersTask(now);
|
||||||
|
if (task != null) {
|
||||||
|
return task;
|
||||||
|
}
|
||||||
|
|
||||||
// ping task (Link+Channel+Buffer)
|
// ping task (Link+Channel+Buffer)
|
||||||
task = maybeProducePeerPingTask(now);
|
task = maybeProducePeerPingTask(now);
|
||||||
if (task != null) {
|
if (task != null) {
|
||||||
@ -677,53 +689,64 @@ public class RNSNetwork {
|
|||||||
var incomingPeerList = getIncomingPeers();
|
var incomingPeerList = getIncomingPeers();
|
||||||
log.info("number of links (linkedPeers / incomingPeers) before prunig: {}, {}", peerList.size(),
|
log.info("number of links (linkedPeers / incomingPeers) before prunig: {}, {}", peerList.size(),
|
||||||
incomingPeerList.size());
|
incomingPeerList.size());
|
||||||
Link pLink;
|
// prune initiator peers
|
||||||
LinkStatus lStatus;
|
List<RNSPeer> lps = getLinkedPeers();
|
||||||
var now = Instant.now();
|
for (RNSPeer p : lps) {
|
||||||
for (RNSPeer p: peerList) {
|
var pLink = p.getPeerLink();
|
||||||
pLink = p.getPeerLink();
|
|
||||||
//var peerLastAccessTimestamp = p.getLastAccessTimestamp();
|
|
||||||
var peerLastPingResponseReceived = p.getLastPingResponseReceived();
|
|
||||||
log.info("prunePeers - pLink: {}, destinationHash: {}",
|
|
||||||
pLink, Hex.encodeHexString(p.getDestinationHash()));
|
|
||||||
log.debug("peer: {}", p);
|
|
||||||
if (nonNull(pLink)) {
|
if (nonNull(pLink)) {
|
||||||
if ((p.getPeerTimedOut()) && (peerLastPingResponseReceived.isBefore(now.minusMillis(LINK_UNREACHABLE_TIMEOUT)))) {
|
log.info("peer link: {}, status: {}", pLink, pLink.getStatus());
|
||||||
// close peer link for now
|
if (pLink.getStatus() == ACTIVE) {
|
||||||
|
p.pingRemote();
|
||||||
|
}
|
||||||
|
if (p.getPeerTimedOut()) {
|
||||||
pLink.teardown();
|
pLink.teardown();
|
||||||
}
|
}
|
||||||
lStatus = pLink.getStatus();
|
|
||||||
log.info("Link {} status: {}", pLink, lStatus);
|
|
||||||
// lStatus in: PENDING, HANDSHAKE, ACTIVE, STALE, CLOSED
|
|
||||||
if ((lStatus == STALE) || (pLink.getTeardownReason() == TIMEOUT) || (isUnreachable(p))) {
|
|
||||||
//p.shutdown();
|
|
||||||
//peerList.remove(p);
|
|
||||||
removeLinkedPeer(p);
|
|
||||||
} else if (lStatus == HANDSHAKE) {
|
|
||||||
// stuck in handshake state (do we need to shutdown/remove it?)
|
|
||||||
log.info("peer status HANDSHAKE");
|
|
||||||
//p.shutdown();
|
|
||||||
//peerList.remove(p);
|
|
||||||
removeLinkedPeer(p);
|
|
||||||
}
|
|
||||||
// either reach peer or disable link
|
|
||||||
p.pingRemote();
|
|
||||||
} else {
|
|
||||||
if (peerLastPingResponseReceived.isBefore(now.minusMillis(LINK_UNREACHABLE_TIMEOUT))) {
|
|
||||||
//peerList.remove(p);
|
|
||||||
removeLinkedPeer(p);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Link pLink;
|
||||||
|
//LinkStatus lStatus;
|
||||||
|
//var now = Instant.now();
|
||||||
|
//for (RNSPeer p: peerList) {
|
||||||
|
// pLink = p.getPeerLink();
|
||||||
|
// var peerLastAccessTimestamp = p.getLastAccessTimestamp();
|
||||||
|
// var peerLastPingResponseReceived = p.getLastPingResponseReceived();
|
||||||
|
// log.info("peerLink: {}, status: {}", pLink, pLink.getStatus());
|
||||||
|
// log.info("prunePeers - pLink: {}, destinationHash: {}",
|
||||||
|
// pLink, Hex.encodeHexString(p.getDestinationHash()));
|
||||||
|
// log.debug("peer: {}", p);
|
||||||
|
// if (nonNull(pLink)) {
|
||||||
|
// if ((p.getPeerTimedOut()) && (peerLastPingResponseReceived.isBefore(now.minusMillis(LINK_UNREACHABLE_TIMEOUT)))) {
|
||||||
|
// // close peer link for now
|
||||||
|
// pLink.teardown();
|
||||||
|
// }
|
||||||
|
// lStatus = pLink.getStatus();
|
||||||
|
// log.info("Link {} status: {}", pLink, lStatus);
|
||||||
|
// // lStatus in: PENDING, HANDSHAKE, ACTIVE, STALE, CLOSED
|
||||||
|
// if ((lStatus == STALE) || (pLink.getTeardownReason() == TIMEOUT) || (isUnreachable(p))) {
|
||||||
|
// //p.shutdown();
|
||||||
|
// //peerList.remove(p);
|
||||||
|
// removeLinkedPeer(p);
|
||||||
|
// } else if (lStatus == HANDSHAKE) {
|
||||||
|
// // stuck in handshake state (do we need to shutdown/remove it?)
|
||||||
|
// log.info("peer status HANDSHAKE");
|
||||||
|
// //p.shutdown();
|
||||||
|
// //peerList.remove(p);
|
||||||
|
// removeLinkedPeer(p);
|
||||||
|
// }
|
||||||
|
// // either reach peer or disable link
|
||||||
|
// p.pingRemote();
|
||||||
|
// } else {
|
||||||
|
// if (peerLastPingResponseReceived.isBefore(now.minusMillis(LINK_UNREACHABLE_TIMEOUT))) {
|
||||||
|
// //peerList.remove(p);
|
||||||
|
// removeLinkedPeer(p);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
List<RNSPeer> inaps = incomingNonActivePeers();
|
List<RNSPeer> inaps = incomingNonActivePeers();
|
||||||
//log.info("number of inactive incoming peers: {}", inaps.size());
|
//log.info("number of inactive incoming peers: {}", inaps.size());
|
||||||
//var incomingPeerList = getIncomingPeers();
|
|
||||||
//log.info("number of links (linkedPeers / incomingPeers) before prunig: {}, {}", peerList.size(),
|
|
||||||
// incomingPeerList.size());
|
|
||||||
for (RNSPeer p: inaps) {
|
for (RNSPeer p: inaps) {
|
||||||
incomingPeerList.remove(incomingPeerList.indexOf(p));
|
incomingPeerList.remove(incomingPeerList.indexOf(p));
|
||||||
}
|
}
|
||||||
//removeExpiredPeers(this.linkedPeers);
|
|
||||||
log.info("number of links (linkedPeers / incomingPeers) after prunig: {}, {}", peerList.size(),
|
log.info("number of links (linkedPeers / incomingPeers) after prunig: {}, {}", peerList.size(),
|
||||||
incomingPeerList.size());
|
incomingPeerList.size());
|
||||||
maybeAnnounce(getBaseDestination());
|
maybeAnnounce(getBaseDestination());
|
||||||
@ -739,35 +762,6 @@ public class RNSNetwork {
|
|||||||
* Helper methods
|
* Helper methods
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//@Synchronized
|
|
||||||
//public RNSPeer getPeerIfExists(RNSPeer peer) {
|
|
||||||
// List<RNSPeer> lps = RNSNetwork.getInstance().getLinkedPeers();
|
|
||||||
// RNSPeer result = null;
|
|
||||||
// for (RNSPeer p: lps) {
|
|
||||||
// if (nonNull(p.getDestinationHash()) && Arrays.equals(p.getDestinationHash(), peer.getDestinationHash())) {
|
|
||||||
// log.info("found match by destinationHash");
|
|
||||||
// result = p;
|
|
||||||
// //break;
|
|
||||||
// }
|
|
||||||
// if (nonNull(p.getPeerDestinationHash()) && Arrays.equals(p.getPeerDestinationHash(), peer.getPeerDestinationHash())) {
|
|
||||||
// log.info("found match by peerDestinationHash");
|
|
||||||
// result = p;
|
|
||||||
// //break;
|
|
||||||
// }
|
|
||||||
// if (nonNull(p.getPeerBaseDestinationHash()) && Arrays.equals(p.getPeerBaseDestinationHash(), peer.getPeerBaseDestinationHash())) {
|
|
||||||
// log.info("found match by peerBaseDestinationHash");
|
|
||||||
// result = p;
|
|
||||||
// //break;
|
|
||||||
// }
|
|
||||||
// if (nonNull(p.getRemoteTestHash()) && Arrays.equals(p.getRemoteTestHash(), peer.getRemoteTestHash())) {
|
|
||||||
// log.info("found match by remoteTestHash");
|
|
||||||
// result = p;
|
|
||||||
// //break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return result;
|
|
||||||
//}
|
|
||||||
|
|
||||||
public RNSPeer findPeerByLink(Link link) {
|
public RNSPeer findPeerByLink(Link link) {
|
||||||
//List<RNSPeer> lps = RNSNetwork.getInstance().getLinkedPeers();
|
//List<RNSPeer> lps = RNSNetwork.getInstance().getLinkedPeers();
|
||||||
List<RNSPeer> lps = RNSNetwork.getInstance().getImmutableLinkedPeers();
|
List<RNSPeer> lps = RNSNetwork.getInstance().getImmutableLinkedPeers();
|
||||||
|
@ -277,14 +277,17 @@ public class RNSPeer {
|
|||||||
if (link.getTeardownReason() == TIMEOUT) {
|
if (link.getTeardownReason() == TIMEOUT) {
|
||||||
log.info("The link timed out");
|
log.info("The link timed out");
|
||||||
this.peerTimedOut = true;
|
this.peerTimedOut = true;
|
||||||
|
this.peerBuffer = null;
|
||||||
} else if (link.getTeardownReason() == INITIATOR_CLOSED) {
|
} else if (link.getTeardownReason() == INITIATOR_CLOSED) {
|
||||||
log.info("Link closed callback: The initiator closed the link");
|
log.info("Link closed callback: The initiator closed the link");
|
||||||
log.info("peerLink {} closed (link: {}), link destination hash: {}",
|
log.info("peerLink {} closed (link: {}), link destination hash: {}",
|
||||||
peerLink, link, encodeHexString(link.getDestination().getHash()));
|
peerLink, link, encodeHexString(link.getDestination().getHash()));
|
||||||
|
this.peerBuffer = null;
|
||||||
} else if (link.getTeardownReason() == DESTINATION_CLOSED) {
|
} else if (link.getTeardownReason() == DESTINATION_CLOSED) {
|
||||||
log.info("Link closed callback: The link was closed by the peer, removing peer");
|
log.info("Link closed callback: The link was closed by the peer, removing peer");
|
||||||
log.info("peerLink {} closed (link: {}), link destination hash: {}",
|
log.info("peerLink {} closed (link: {}), link destination hash: {}",
|
||||||
peerLink, link, encodeHexString(link.getDestination().getHash()));
|
peerLink, link, encodeHexString(link.getDestination().getHash()));
|
||||||
|
this.peerBuffer = null;
|
||||||
} else {
|
} else {
|
||||||
log.info("Link closed callback");
|
log.info("Link closed callback");
|
||||||
}
|
}
|
||||||
@ -306,7 +309,7 @@ public class RNSPeer {
|
|||||||
this.peerBuffer.close();
|
this.peerBuffer.close();
|
||||||
this.peerBuffer = null;
|
this.peerBuffer = null;
|
||||||
}
|
}
|
||||||
peerLink.teardown();
|
this.peerLink.teardown();
|
||||||
}
|
}
|
||||||
} else if (msgText.startsWith("open::")) {
|
} else if (msgText.startsWith("open::")) {
|
||||||
var targetPeerHash = subarray(message, 7, message.length);
|
var targetPeerHash = subarray(message, 7, message.length);
|
||||||
|
@ -622,8 +622,6 @@ public class Settings {
|
|||||||
private int reticulumMinDesiredPeers = 3;
|
private int reticulumMinDesiredPeers = 3;
|
||||||
/** Maximum number of task executor network threads */
|
/** Maximum number of task executor network threads */
|
||||||
private int reticulumMaxNetworkThreadPoolSize = 89;
|
private int reticulumMaxNetworkThreadPoolSize = 89;
|
||||||
/** How long [ms] between pruning of peers */
|
|
||||||
private long reticulumPruneInterval = 2 * 60 * 1000L; // ms;
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
@ -1394,10 +1392,6 @@ public class Settings {
|
|||||||
return this.reticulumMaxNetworkThreadPoolSize;
|
return this.reticulumMaxNetworkThreadPoolSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getReticulumPruneInterval() {
|
|
||||||
return this.reticulumPruneInterval;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getBuildArbitraryResourcesBatchSize() {
|
public int getBuildArbitraryResourcesBatchSize() {
|
||||||
return buildArbitraryResourcesBatchSize;
|
return buildArbitraryResourcesBatchSize;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user