forked from I2P_Developers/i2p.i2p
* Tunnel Testing:
- Fix counting so it really takes 4 consecutive failures rather than 4 total to remove a tunnel - Credit or blame goes to the exploratory tunnel as well as the tunnel being tested - Adjust tunnel test timeout based on tunnel length * ExploratoryPeerSelector: Tweak logging * ProfileOrganizer: Adjust integration calculation again * build.xml: Add to help * checklist.txt: Tweak * readme.html: Fix forum links * netDb: Remove tunnel.testFailedTime
This commit is contained in:
@@ -3,7 +3,8 @@
|
|||||||
|
|
||||||
<target name="all" >
|
<target name="all" >
|
||||||
<echo message="Useful targets: " />
|
<echo message="Useful targets: " />
|
||||||
<echo message=" dist: distclean then package everything up (installer, clean tarball, update tarball)" />
|
<echo message=" pkg: distclean then package everything up (installer, clean tarball, update tarball)" />
|
||||||
|
<echo message=" dist: pkg and javadoc" />
|
||||||
<echo message=" installer: build the GUI installer" />
|
<echo message=" installer: build the GUI installer" />
|
||||||
<echo message=" tarball: tar the full install into i2p.tar.bz2 (extracts to build a new clean install)" />
|
<echo message=" tarball: tar the full install into i2p.tar.bz2 (extracts to build a new clean install)" />
|
||||||
<echo message=" updater: tar the built i2p specific files into an i2pupdate.zip (extracts safely over existing installs)" />
|
<echo message=" updater: tar the built i2p specific files into an i2pupdate.zip (extracts safely over existing installs)" />
|
||||||
|
@@ -15,7 +15,7 @@ Change revision in:
|
|||||||
core/java/src/net/i2p/CoreVersion.java
|
core/java/src/net/i2p/CoreVersion.java
|
||||||
|
|
||||||
Build and tag:
|
Build and tag:
|
||||||
ant dist
|
ant pkg
|
||||||
mtn ci
|
mtn ci
|
||||||
mtn tag h: i2p-0.6.1.xx
|
mtn tag h: i2p-0.6.1.xx
|
||||||
Sync with mtn.i2p2.i2p
|
Sync with mtn.i2p2.i2p
|
||||||
|
17
history.txt
17
history.txt
@@ -1,7 +1,22 @@
|
|||||||
|
2008-03-22 zzz
|
||||||
|
* Tunnel Testing:
|
||||||
|
- Fix counting so it really takes 4 consecutive failures
|
||||||
|
rather than 4 total to remove a tunnel
|
||||||
|
- Credit or blame goes to the exploratory tunnel as well
|
||||||
|
as the tunnel being tested
|
||||||
|
- Adjust tunnel test timeout based on tunnel length
|
||||||
|
* ExploratoryPeerSelector: Tweak logging
|
||||||
|
* ProfileOrganizer: Adjust integration calculation again
|
||||||
|
* build.xml: Add to help
|
||||||
|
* checklist.txt: Tweak
|
||||||
|
* readme.html: Fix forum links
|
||||||
|
* netDb: Remove tunnel.testFailedTime
|
||||||
|
|
||||||
2008-03-19 zzz
|
2008-03-19 zzz
|
||||||
* ExploratoryPeerSelector:
|
* ExploratoryPeerSelector:
|
||||||
- Exclude floodfill peers
|
- Exclude floodfill peers
|
||||||
- Tweak the HighCap vs. NonFailing decision
|
- Tweak the HighCap vs. NonFailing decision; try NonFailing
|
||||||
|
at least a minimum % of the time
|
||||||
* i2psnark: Increase retries for .torrent fetch
|
* i2psnark: Increase retries for .torrent fetch
|
||||||
* IRC Proxy: Prevent mIRC from sending an alternate DCC request
|
* IRC Proxy: Prevent mIRC from sending an alternate DCC request
|
||||||
containing an IP
|
containing an IP
|
||||||
|
@@ -9,7 +9,7 @@ you can:</p>
|
|||||||
<ul>
|
<ul>
|
||||||
<li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> and
|
<li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> and
|
||||||
<a href="http://perv.i2p/stats.cgi">perv.i2p</a>: sites tracking active eepsites</li>
|
<a href="http://perv.i2p/stats.cgi">perv.i2p</a>: sites tracking active eepsites</li>
|
||||||
<li><a href="http://forum.i2p/">forum.i2p</a>: a secure and anonymous connection to <a href="http://forum.i2p.net/">forum.i2p.net</a></li>
|
<li><a href="http://forum.i2p/">forum.i2p</a>: a secure and anonymous connection to <a href="http://forum.i2p2.de/">forum.i2p2.de</a></li>
|
||||||
<li><a href="http://www.i2p2.i2p/">www.i2p2.i2p</a> and mirror <a href="http://i2p-projekt.i2p">i2p-projekt.i2p</a>:
|
<li><a href="http://www.i2p2.i2p/">www.i2p2.i2p</a> and mirror <a href="http://i2p-projekt.i2p">i2p-projekt.i2p</a>:
|
||||||
secure and anonymous connections to <a href="http://www.i2p2.de/">www.i2p2.de</a></li>
|
secure and anonymous connections to <a href="http://www.i2p2.de/">www.i2p2.de</a></li>
|
||||||
<li><a href="http://eepsites.i2p/">eepsites.i2p</a>: an anonymously hosted search engine of eepsites</li>
|
<li><a href="http://eepsites.i2p/">eepsites.i2p</a>: an anonymously hosted search engine of eepsites</li>
|
||||||
@@ -59,7 +59,7 @@ If you cannot see any eepsites at all (even <a href="http://www.i2p2.i2p/">www.i
|
|||||||
be sure your browser proxy is set to localhost port 4444.
|
be sure your browser proxy is set to localhost port 4444.
|
||||||
You may also want to review the information on the
|
You may also want to review the information on the
|
||||||
<a href="http://www.i2p2.i2p/">I2P website</a>, post up messages to the
|
<a href="http://www.i2p2.i2p/">I2P website</a>, post up messages to the
|
||||||
<a href="http://forum.i2p.net/">I2P discussion forum</a>, or swing by #i2p or
|
<a href="http://forum.i2p2.de/">I2P discussion forum</a>, or swing by #i2p or
|
||||||
#i2p-chat on IRC at <a href="irc://irc.freenode.net/#i2p">irc.freenode.net</a>, irc.postman.i2p or irc.freshcoffee.i2p (they're linked together).</p>
|
#i2p-chat on IRC at <a href="irc://irc.freenode.net/#i2p">irc.freenode.net</a>, irc.postman.i2p or irc.freshcoffee.i2p (they're linked together).</p>
|
||||||
|
|
||||||
<p><b>As a note, you can change this page by editing the file "docs/readme.html"</b></p>
|
<p><b>As a note, you can change this page by editing the file "docs/readme.html"</b></p>
|
||||||
|
@@ -17,7 +17,7 @@ import net.i2p.CoreVersion;
|
|||||||
public class RouterVersion {
|
public class RouterVersion {
|
||||||
public final static String ID = "$Revision: 1.548 $ $Date: 2008-02-10 15:00:00 $";
|
public final static String ID = "$Revision: 1.548 $ $Date: 2008-02-10 15:00:00 $";
|
||||||
public final static String VERSION = "0.6.1.32";
|
public final static String VERSION = "0.6.1.32";
|
||||||
public final static long BUILD = 8;
|
public final static long BUILD = 9;
|
||||||
public static void main(String args[]) {
|
public static void main(String args[]) {
|
||||||
System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
|
System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
|
||||||
System.out.println("Router ID: " + RouterVersion.ID);
|
System.out.println("Router ID: " + RouterVersion.ID);
|
||||||
|
@@ -136,6 +136,7 @@ public class StatisticsManager implements Service {
|
|||||||
//includeRate("tunnel.fragmentedDropped", stats, new long[] { 10*60*1000, 3*60*60*1000 });
|
//includeRate("tunnel.fragmentedDropped", stats, new long[] { 10*60*1000, 3*60*60*1000 });
|
||||||
//includeRate("tunnel.fullFragments", stats, new long[] { 10*60*1000, 3*60*60*1000 });
|
//includeRate("tunnel.fullFragments", stats, new long[] { 10*60*1000, 3*60*60*1000 });
|
||||||
//includeRate("tunnel.smallFragments", stats, new long[] { 10*60*1000, 3*60*60*1000 });
|
//includeRate("tunnel.smallFragments", stats, new long[] { 10*60*1000, 3*60*60*1000 });
|
||||||
|
if (commentMeOutInDot33)
|
||||||
includeRate("tunnel.testFailedTime", stats, new long[] { 10*60*1000 });
|
includeRate("tunnel.testFailedTime", stats, new long[] { 10*60*1000 });
|
||||||
|
|
||||||
includeRate("tunnel.buildFailure", stats, new long[] { 60*60*1000 });
|
includeRate("tunnel.buildFailure", stats, new long[] { 60*60*1000 });
|
||||||
|
@@ -20,9 +20,10 @@ public class IntegrationCalculator extends Calculator {
|
|||||||
public double calc(PeerProfile profile) {
|
public double calc(PeerProfile profile) {
|
||||||
// give more weight to recent counts
|
// give more weight to recent counts
|
||||||
long val = profile.getDbIntroduction().getRate(24*60*60*1000l).getCurrentEventCount();
|
long val = profile.getDbIntroduction().getRate(24*60*60*1000l).getCurrentEventCount();
|
||||||
val += 2 * 4 * profile.getDbIntroduction().getRate(6*60*60*1000l).getCurrentEventCount();
|
val += 2 * 4 * profile.getDbIntroduction().getRate(6*60*60*1000l).getLastEventCount();
|
||||||
|
val += 3 * 4 * profile.getDbIntroduction().getRate(6*60*60*1000l).getCurrentEventCount();
|
||||||
val += 4 * 24 * profile.getDbIntroduction().getRate(60*60*1000l).getCurrentEventCount();
|
val += 4 * 24 * profile.getDbIntroduction().getRate(60*60*1000l).getCurrentEventCount();
|
||||||
val /= 7;
|
val /= 10;
|
||||||
val += profile.getIntegrationBonus();
|
val += profile.getIntegrationBonus();
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
@@ -137,10 +137,11 @@ public class TunnelCreatorConfig implements TunnelInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Make configurable? - but can't easily get to pool options from here
|
||||||
private static final int MAX_CONSECUTIVE_TEST_FAILURES = 3;
|
private static final int MAX_CONSECUTIVE_TEST_FAILURES = 3;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The tunnel failed, so stop using it
|
* The tunnel failed a test, so (maybe) stop using it
|
||||||
*/
|
*/
|
||||||
public boolean tunnelFailed() {
|
public boolean tunnelFailed() {
|
||||||
_failures++;
|
_failures++;
|
||||||
@@ -155,11 +156,8 @@ public class TunnelCreatorConfig implements TunnelInfo {
|
|||||||
public int getTunnelFailures() { return _failures; }
|
public int getTunnelFailures() { return _failures; }
|
||||||
|
|
||||||
public void testSuccessful(int ms) {
|
public void testSuccessful(int ms) {
|
||||||
int failures = _failures - 1;
|
if (!_failed)
|
||||||
if (failures < 0)
|
|
||||||
_failures = 0;
|
_failures = 0;
|
||||||
else
|
|
||||||
_failures = failures;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
@@ -73,13 +73,13 @@ class ExploratoryPeerSelector extends TunnelPeerSelector {
|
|||||||
failPct = 100 - MIN_NONFAILING_PCT;
|
failPct = 100 - MIN_NONFAILING_PCT;
|
||||||
} else {
|
} else {
|
||||||
failPct = getExploratoryFailPercentage(ctx);
|
failPct = getExploratoryFailPercentage(ctx);
|
||||||
|
Log l = ctx.logManager().getLog(getClass());
|
||||||
|
if (l.shouldLog(Log.DEBUG))
|
||||||
|
l.debug("Fail pct: " + failPct);
|
||||||
// always try a little, this helps keep the failPct stat accurate too
|
// always try a little, this helps keep the failPct stat accurate too
|
||||||
if (failPct > 100 - MIN_NONFAILING_PCT)
|
if (failPct > 100 - MIN_NONFAILING_PCT)
|
||||||
failPct = 100 - MIN_NONFAILING_PCT;
|
failPct = 100 - MIN_NONFAILING_PCT;
|
||||||
}
|
}
|
||||||
Log l = ctx.logManager().getLog(getClass());
|
|
||||||
if (l.shouldLog(Log.DEBUG))
|
|
||||||
l.error("Fail pct: " + failPct);
|
|
||||||
return (failPct >= ctx.random().nextInt(100));
|
return (failPct >= ctx.random().nextInt(100));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -29,6 +29,7 @@ public class PooledTunnelCreatorConfig extends TunnelCreatorConfig {
|
|||||||
_live = false;
|
_live = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// calls TestJob
|
||||||
public void testSuccessful(int ms) {
|
public void testSuccessful(int ms) {
|
||||||
if (_testJob != null)
|
if (_testJob != null)
|
||||||
_testJob.testSuccessful(ms);
|
_testJob.testSuccessful(ms);
|
||||||
@@ -36,8 +37,14 @@ public class PooledTunnelCreatorConfig extends TunnelCreatorConfig {
|
|||||||
_live = true;
|
_live = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// called from TestJob
|
||||||
|
public void testJobSuccessful(int ms) {
|
||||||
|
super.testSuccessful(ms);
|
||||||
|
_live = true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The tunnel failed, so stop using it
|
* The tunnel failed a test, so (maybe) stop using it
|
||||||
*/
|
*/
|
||||||
public boolean tunnelFailed() {
|
public boolean tunnelFailed() {
|
||||||
boolean rv = super.tunnelFailed();
|
boolean rv = super.tunnelFailed();
|
||||||
|
@@ -27,6 +27,7 @@ class TestJob extends JobImpl {
|
|||||||
private boolean _found;
|
private boolean _found;
|
||||||
private TunnelInfo _outTunnel;
|
private TunnelInfo _outTunnel;
|
||||||
private TunnelInfo _replyTunnel;
|
private TunnelInfo _replyTunnel;
|
||||||
|
private PooledTunnelCreatorConfig _otherTunnel;
|
||||||
|
|
||||||
/** base to randomize the test delay on */
|
/** base to randomize the test delay on */
|
||||||
private static final int TEST_DELAY = 30*1000;
|
private static final int TEST_DELAY = 30*1000;
|
||||||
@@ -78,9 +79,11 @@ class TestJob extends JobImpl {
|
|||||||
if (_cfg.isInbound()) {
|
if (_cfg.isInbound()) {
|
||||||
_replyTunnel = _cfg;
|
_replyTunnel = _cfg;
|
||||||
_outTunnel = getContext().tunnelManager().selectOutboundTunnel();
|
_outTunnel = getContext().tunnelManager().selectOutboundTunnel();
|
||||||
|
_otherTunnel = (PooledTunnelCreatorConfig) _outTunnel;
|
||||||
} else {
|
} else {
|
||||||
_replyTunnel = getContext().tunnelManager().selectInboundTunnel();
|
_replyTunnel = getContext().tunnelManager().selectInboundTunnel();
|
||||||
_outTunnel = _cfg;
|
_outTunnel = _cfg;
|
||||||
|
_otherTunnel = (PooledTunnelCreatorConfig) _replyTunnel;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (_replyTunnel == null) || (_outTunnel == null) ) {
|
if ( (_replyTunnel == null) || (_outTunnel == null) ) {
|
||||||
@@ -156,6 +159,13 @@ class TestJob extends JobImpl {
|
|||||||
noteSuccess(ms, _outTunnel);
|
noteSuccess(ms, _outTunnel);
|
||||||
noteSuccess(ms, _replyTunnel);
|
noteSuccess(ms, _replyTunnel);
|
||||||
|
|
||||||
|
_cfg.testJobSuccessful(ms);
|
||||||
|
// credit the expl. tunnel too
|
||||||
|
if (_otherTunnel.getLength() > 1)
|
||||||
|
_otherTunnel.testJobSuccessful(ms);
|
||||||
|
|
||||||
|
if (_log.shouldLog(Log.DEBUG))
|
||||||
|
_log.debug("Tunnel test successful in " + ms + "ms: " + _cfg);
|
||||||
scheduleRetest();
|
scheduleRetest();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,6 +188,9 @@ class TestJob extends JobImpl {
|
|||||||
if (_log.shouldLog(Log.WARN))
|
if (_log.shouldLog(Log.WARN))
|
||||||
_log.warn("Tunnel test failed in " + timeToFail + "ms: " + _cfg);
|
_log.warn("Tunnel test failed in " + timeToFail + "ms: " + _cfg);
|
||||||
boolean keepGoing = _cfg.tunnelFailed();
|
boolean keepGoing = _cfg.tunnelFailed();
|
||||||
|
// blame the expl. tunnel too
|
||||||
|
if (_otherTunnel.getLength() > 1)
|
||||||
|
_otherTunnel.tunnelFailed();
|
||||||
if (keepGoing) {
|
if (keepGoing) {
|
||||||
scheduleRetest(true);
|
scheduleRetest(true);
|
||||||
} else {
|
} else {
|
||||||
@@ -190,8 +203,18 @@ class TestJob extends JobImpl {
|
|||||||
|
|
||||||
/** randomized time we should wait before testing */
|
/** randomized time we should wait before testing */
|
||||||
private int getDelay() { return TEST_DELAY + getContext().random().nextInt(TEST_DELAY); }
|
private int getDelay() { return TEST_DELAY + getContext().random().nextInt(TEST_DELAY); }
|
||||||
|
|
||||||
/** how long we allow tests to run for before failing them */
|
/** how long we allow tests to run for before failing them */
|
||||||
private int getTestPeriod() { return 15*1000; }
|
private int getTestPeriod() {
|
||||||
|
if (_outTunnel == null || _replyTunnel == null)
|
||||||
|
return 15*1000;
|
||||||
|
// Give it 2.5s per hop + 5s (2 hop tunnel = length 3, so this will be 15s for two 2-hop tunnels)
|
||||||
|
// Minimum is 7.5s (since a 0-hop could be the expl. tunnel, but only >= 1-hop client tunnels are tested)
|
||||||
|
// Network average for success is about 1.5s.
|
||||||
|
// Another possibility - make configurable via pool options
|
||||||
|
return 2500 * (_outTunnel.getLength() + _replyTunnel.getLength());
|
||||||
|
}
|
||||||
|
|
||||||
private void scheduleRetest() { scheduleRetest(false); }
|
private void scheduleRetest() { scheduleRetest(false); }
|
||||||
private void scheduleRetest(boolean asap) {
|
private void scheduleRetest(boolean asap) {
|
||||||
if (asap) {
|
if (asap) {
|
||||||
@@ -286,4 +309,4 @@ class TestJob extends JobImpl {
|
|||||||
return rv.toString();
|
return rv.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user