Limit fast tier to 30 max
This commit is contained in:
@ -76,6 +76,7 @@ public class ProfileOrganizer {
|
|||||||
*/
|
*/
|
||||||
public static final String PROP_MINIMUM_FAST_PEERS = "profileOrganizer.minFastPeers";
|
public static final String PROP_MINIMUM_FAST_PEERS = "profileOrganizer.minFastPeers";
|
||||||
public static final int DEFAULT_MINIMUM_FAST_PEERS = 8;
|
public static final int DEFAULT_MINIMUM_FAST_PEERS = 8;
|
||||||
|
/** this is misnamed, it is really the max minimum number. */
|
||||||
private static final int DEFAULT_MAXIMUM_FAST_PEERS = 16;
|
private static final int DEFAULT_MAXIMUM_FAST_PEERS = 16;
|
||||||
/**
|
/**
|
||||||
* Defines the minimum number of 'high capacity' peers that the organizer should
|
* Defines the minimum number of 'high capacity' peers that the organizer should
|
||||||
@ -674,6 +675,7 @@ public class ProfileOrganizer {
|
|||||||
|
|
||||||
locked_unfailAsNecessary();
|
locked_unfailAsNecessary();
|
||||||
locked_promoteFastAsNecessary();
|
locked_promoteFastAsNecessary();
|
||||||
|
locked_demoteFastAsNecessary();
|
||||||
|
|
||||||
Collections.shuffle(_notFailingPeersList, _context.random());
|
Collections.shuffle(_notFailingPeersList, _context.random());
|
||||||
|
|
||||||
@ -747,6 +749,28 @@ public class ProfileOrganizer {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We want to put a cap on the fast pool, to use only a small set of routers
|
||||||
|
* for client tunnels for anonymity reasons. Also, unless we use only a small
|
||||||
|
* number, we don't really find out who the fast ones are.
|
||||||
|
* @since 0.7.10
|
||||||
|
*/
|
||||||
|
private void locked_demoteFastAsNecessary() {
|
||||||
|
int maxFastPeers = getMaximumFastPeers();
|
||||||
|
int numToDemote = _fastPeers.size() - maxFastPeers;
|
||||||
|
if (numToDemote > 0) {
|
||||||
|
if (_log.shouldLog(Log.INFO))
|
||||||
|
_log.info("Need to explicitly demote " + numToDemote + " peers from the fast group");
|
||||||
|
// sort by speed, slowest-first
|
||||||
|
Set<PeerProfile> sorted = new TreeSet(new SpeedComparator());
|
||||||
|
sorted.addAll(_fastPeers.values());
|
||||||
|
Iterator<PeerProfile> iter = sorted.iterator();
|
||||||
|
for (int i = 0; i < numToDemote; i++) {
|
||||||
|
_fastPeers.remove(iter.next().getPeer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** how many not failing/active peers must we have? */
|
/** how many not failing/active peers must we have? */
|
||||||
private final static int MIN_NOT_FAILING_ACTIVE = 3;
|
private final static int MIN_NOT_FAILING_ACTIVE = 3;
|
||||||
/**
|
/**
|
||||||
@ -916,6 +940,7 @@ public class ProfileOrganizer {
|
|||||||
locked_calculateSpeedThresholdMean(reordered);
|
locked_calculateSpeedThresholdMean(reordered);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
/*****
|
||||||
Set speeds = new TreeSet();
|
Set speeds = new TreeSet();
|
||||||
for (Iterator iter = reordered.iterator(); iter.hasNext(); ) {
|
for (Iterator iter = reordered.iterator(); iter.hasNext(); ) {
|
||||||
PeerProfile profile = (PeerProfile)iter.next();
|
PeerProfile profile = (PeerProfile)iter.next();
|
||||||
@ -939,6 +964,7 @@ public class ProfileOrganizer {
|
|||||||
}
|
}
|
||||||
if (_log.shouldLog(Log.INFO))
|
if (_log.shouldLog(Log.INFO))
|
||||||
_log.info("Threshold value for speed: " + _thresholdSpeedValue + " out of speeds: " + speeds);
|
_log.info("Threshold value for speed: " + _thresholdSpeedValue + " out of speeds: " + speeds);
|
||||||
|
*****/
|
||||||
}
|
}
|
||||||
|
|
||||||
private void locked_calculateSpeedThresholdMean(Set reordered) {
|
private void locked_calculateSpeedThresholdMean(Set reordered) {
|
||||||
@ -1196,6 +1222,10 @@ public class ProfileOrganizer {
|
|||||||
return _context.getProperty(PROP_MINIMUM_FAST_PEERS, def);
|
return _context.getProperty(PROP_MINIMUM_FAST_PEERS, def);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** fixme add config @since 0.7.10 */
|
||||||
|
protected int getMaximumFastPeers() {
|
||||||
|
return 30;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines the minimum number of 'fast' peers that the organizer should select. If
|
* Defines the minimum number of 'fast' peers that the organizer should select. If
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
package net.i2p.router.peermanager;
|
||||||
|
|
||||||
|
import java.util.Comparator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Order profiles by their speed (lowest first).
|
||||||
|
* @since 0.7.10
|
||||||
|
*/
|
||||||
|
class SpeedComparator implements Comparator<PeerProfile> {
|
||||||
|
|
||||||
|
public int compare(PeerProfile left, PeerProfile right) {
|
||||||
|
|
||||||
|
double lval = left.getSpeedValue();
|
||||||
|
double rval = right.getSpeedValue();
|
||||||
|
|
||||||
|
if (lval > rval)
|
||||||
|
return 1;
|
||||||
|
if (lval < rval)
|
||||||
|
return -1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user