I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit 4803e60d authored by zzz's avatar zzz
Browse files

Limit fast tier to 30 max

parent abb62b93
No related branches found
No related tags found
No related merge requests found
...@@ -76,6 +76,7 @@ public class ProfileOrganizer { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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
......
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;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment