From 5383f9f097d221e578d213a098a74eb53b04ea96 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Tue, 25 Nov 2014 14:25:42 +0000 Subject: [PATCH] Profiles: Change slice selection argument from an int to an enum for clarity --- .../router/peermanager/ProfileOrganizer.java | 45 +++++++++++++------ .../tunnel/pool/ClientPeerSelector.java | 7 +-- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java index ca2829b151..7ebc4ce936 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java @@ -367,6 +367,29 @@ public class ProfileOrganizer { return; } + /** + * Replaces integer subTierMode argument, for clarity + * + * @since 0.9.18 + */ + public enum Slice { + + SLICE_ALL(0x00, 0), + SLICE_0_1(0x02, 0), + SLICE_2_3(0x02, 2), + SLICE_0(0x03, 0), + SLICE_1(0x03, 1), + SLICE_2(0x03, 2), + SLICE_3(0x03, 3); + + final int mask, val; + + Slice(int mask, int val) { + this.mask = mask; + this.val = val; + } + } + /** * Return a set of Hashes for peers that are both fast and reliable. If an insufficient * number of peers are both fast and reliable, fall back onto high capacity peers, and if that @@ -388,15 +411,15 @@ public class ProfileOrganizer { * 7: return only from group 3 *</pre> */ - public void selectFastPeers(int howMany, Set<Hash> exclude, Set<Hash> matches, Hash randomKey, int subTierMode) { + public void selectFastPeers(int howMany, Set<Hash> exclude, Set<Hash> matches, Hash randomKey, Slice subTierMode) { getReadLock(); try { - if (subTierMode > 0) { + if (subTierMode != Slice.SLICE_ALL) { int sz = _fastPeers.size(); - if (sz < 6 || (subTierMode >= 4 && sz < 12)) - subTierMode = 0; + if (sz < 6 || (subTierMode.mask >= 3 && sz < 12)) + subTierMode = Slice.SLICE_ALL; } - if (subTierMode > 0) + if (subTierMode != Slice.SLICE_ALL) locked_selectPeers(_fastPeers, howMany, exclude, matches, randomKey, subTierMode); else locked_selectPeers(_fastPeers, howMany, exclude, matches, 2); @@ -1302,7 +1325,8 @@ public class ProfileOrganizer { * 7: return only from group 3 *</pre> */ - private void locked_selectPeers(Map<Hash, PeerProfile> peers, int howMany, Set<Hash> toExclude, Set<Hash> matches, Hash randomKey, int subTierMode) { + private void locked_selectPeers(Map<Hash, PeerProfile> peers, int howMany, Set<Hash> toExclude, + Set<Hash> matches, Hash randomKey, Slice subTierMode) { List<Hash> all = new ArrayList<Hash>(peers.keySet()); // use RandomIterator to avoid shuffling the whole thing for (Iterator<Hash> iter = new RandomIterator<Hash>(all); (matches.size() < howMany) && iter.hasNext(); ) { @@ -1314,13 +1338,8 @@ public class ProfileOrganizer { if (_us.equals(peer)) continue; int subTier = getSubTier(peer, randomKey); - if (subTierMode >= 4) { - if (subTier != (subTierMode & 0x03)) - continue; - } else { - if ((subTier >> 1) != (subTierMode & 0x01)) - continue; - } + if ((subTier & subTierMode.mask) != subTierMode.val) + continue; boolean ok = isSelectable(peer); if (ok) matches.add(peer); diff --git a/router/java/src/net/i2p/router/tunnel/pool/ClientPeerSelector.java b/router/java/src/net/i2p/router/tunnel/pool/ClientPeerSelector.java index 2e13c4c57f..a96504b7c7 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/ClientPeerSelector.java +++ b/router/java/src/net/i2p/router/tunnel/pool/ClientPeerSelector.java @@ -8,6 +8,7 @@ import java.util.Set; import net.i2p.data.Hash; import net.i2p.router.RouterContext; import net.i2p.router.TunnelPoolSettings; +import static net.i2p.router.peermanager.ProfileOrganizer.Slice.*; /** * Pick peers randomly out of the fast pool, and put them into tunnels @@ -49,7 +50,7 @@ class ClientPeerSelector extends TunnelPeerSelector { if (!settings.isInbound()) { // exclude existing OBEPs to get some diversity } - ctx.profileOrganizer().selectFastPeers(1, exclude, matches, settings.getRandomKey(), length == 2 ? 2 : 4); + ctx.profileOrganizer().selectFastPeers(1, exclude, matches, settings.getRandomKey(), length == 2 ? SLICE_0_1 : SLICE_0); matches.remove(ctx.routerHash()); exclude.addAll(matches); rv.addAll(matches); @@ -57,7 +58,7 @@ class ClientPeerSelector extends TunnelPeerSelector { if (length > 2) { // middle hop(s) // group 2 or 3 - ctx.profileOrganizer().selectFastPeers(length - 2, exclude, matches, settings.getRandomKey(), 3); + ctx.profileOrganizer().selectFastPeers(length - 2, exclude, matches, settings.getRandomKey(), SLICE_2_3); matches.remove(ctx.routerHash()); if (matches.size() > 1) { // order the middle peers for tunnels >= 4 hops @@ -75,7 +76,7 @@ class ClientPeerSelector extends TunnelPeerSelector { if (settings.isInbound()) { // exclude existing IBGWs to get some diversity } - ctx.profileOrganizer().selectFastPeers(1, exclude, matches, settings.getRandomKey(), length == 2 ? 3 : 5); + ctx.profileOrganizer().selectFastPeers(1, exclude, matches, settings.getRandomKey(), length == 2 ? SLICE_2_3 : SLICE_1); matches.remove(ctx.routerHash()); rv.addAll(matches); } -- GitLab