forked from Qortal/qortal
Prefer the route with the least number of hops when relaying.
This commit is contained in:
parent
1a59379162
commit
1864468818
@ -392,6 +392,33 @@ public class ArbitraryDataFileManager extends Thread {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ArbitraryRelayInfo getOptimalRelayInfoEntryForHash(String hash58) {
|
||||||
|
LOGGER.trace("Fetching relay info for hash: {}", hash58);
|
||||||
|
List<ArbitraryRelayInfo> relayInfoList = this.getRelayInfoListForHash(hash58);
|
||||||
|
if (relayInfoList != null && !relayInfoList.isEmpty()) {
|
||||||
|
|
||||||
|
// Remove any with null requestHops
|
||||||
|
relayInfoList.removeIf(r -> r.getRequestHops() == null);
|
||||||
|
|
||||||
|
// If list is now empty, then just return one at random
|
||||||
|
if (relayInfoList.isEmpty()) {
|
||||||
|
return this.getRandomRelayInfoEntryForHash(hash58);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort by number of hops (lowest first)
|
||||||
|
relayInfoList.sort(Comparator.comparingInt(ArbitraryRelayInfo::getRequestHops));
|
||||||
|
|
||||||
|
// FUTURE: secondary sort by requestTime?
|
||||||
|
|
||||||
|
ArbitraryRelayInfo relayInfo = relayInfoList.get(0);
|
||||||
|
|
||||||
|
LOGGER.trace("Returning optimal relay info for hash: {} (requestHops {})", hash58, relayInfo.getRequestHops());
|
||||||
|
return relayInfo;
|
||||||
|
}
|
||||||
|
LOGGER.trace("No relay info exists for hash: {}", hash58);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private ArbitraryRelayInfo getRandomRelayInfoEntryForHash(String hash58) {
|
private ArbitraryRelayInfo getRandomRelayInfoEntryForHash(String hash58) {
|
||||||
LOGGER.trace("Fetching random relay info for hash: {}", hash58);
|
LOGGER.trace("Fetching random relay info for hash: {}", hash58);
|
||||||
List<ArbitraryRelayInfo> relayInfoList = this.getRelayInfoListForHash(hash58);
|
List<ArbitraryRelayInfo> relayInfoList = this.getRelayInfoListForHash(hash58);
|
||||||
@ -442,7 +469,7 @@ public class ArbitraryDataFileManager extends Thread {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
ArbitraryDataFile arbitraryDataFile = ArbitraryDataFile.fromHash(hash, signature);
|
ArbitraryDataFile arbitraryDataFile = ArbitraryDataFile.fromHash(hash, signature);
|
||||||
ArbitraryRelayInfo relayInfo = this.getRandomRelayInfoEntryForHash(hash58);
|
ArbitraryRelayInfo relayInfo = this.getOptimalRelayInfoEntryForHash(hash58);
|
||||||
|
|
||||||
if (arbitraryDataFile.exists()) {
|
if (arbitraryDataFile.exists()) {
|
||||||
LOGGER.trace("Hash {} exists", hash58);
|
LOGGER.trace("Hash {} exists", hash58);
|
||||||
|
Loading…
Reference in New Issue
Block a user