Changes in 1462: The InnoSetup Windows installer that romnGit made is included in this release. It is signed and can run from Unicode paths. Because the launcher and tray do not pack files, they are not affected by the Wine bug that results in 0-byte output files. This allows using AHK-L, which supports Unicode paths.
Changes in Fred:
* New seed node run by Juiceman.
* Select options by default on the "Add a Friend" page.
* Omit empty plugin groups on the plugin page.
* Plugin manager refactoring.
* Replace some custom synchronization methods with standard library
ones.
* Restore Fniki default bookmark localization to avoid a log message
for those who have not updated their default bookmarks.
* Formatting and minor performance cleanup.
* Rewrite Location class for simplicity and boundary case bugs.
* Base stats page average distance on actual location instead of 0.0.
* Exclude invalid locations from link length probe results. New peers
that have yet to exchange references will have the sentinal location
-1.0. When this happened the link length was between a fixed
negative value and the node's location, which is noticable.
Changes in UPnP:
* Escape strings from the UPnP device. These were only displayed on
the detailed device status page.
The CHK bulk queue has performance problems. It's not clear whether
they're gone at the moment but given that no new release went out that
might have prompted them, shenanigans are afoot. It might be an attack
on the network, or it might be these unofficial patches:
# PeerNode_reduced_backoff_times:
--- a/src/freenet/node/PeerNode.java
+++ b/src/freenet/node/PeerNode.java
@@ -2924,14 +2924,25 @@
public boolean isRoutingBackedOff(boolean realTime) {
long now = System.currentTimeMillis();
- double pingTime;
+ double pingTime; double mPeerPingTime;
synchronized(this) {
long routingBackedOffUntil = realTime ?
routingBackedOffUntilRT :
routingBackedOffUntilBulk;
long transferBackedOffUntil = realTime ?
transferBackedOffUntilRT :
transferBackedOffUntilBulk;
- if(now < routingBackedOffUntil || now <
transferBackedOffUntil)
return true;
+ if(now < routingBackedOffUntil || now <
transferBackedOffUntil) {
+ //oo
+ long remRoutingBackedOff = Math.max(0,
routingBackedOffUntil - now);
+ long remTransferBackedOff = Math.max(0,
transferBackedOffUntil - now);
+ Logger.minor(this, "remaining
routingBackedOff="+remRoutingBackedOff+" remaining
transferBackedOff="+remTransferBackedOff+
+ " last
reason="+getLastBackoffReason(realTime));
+ return true;
+ }
pingTime = averagePingTime();
}
- if(pingTime > maxPeerPingTime()) return true;
+ mPeerPingTime = maxPeerPingTime();
+ if(pingTime > mPeerPingTime) {
+ Logger.minor(this, "pingTime="+pingTime+"
maxPeerPingTime="+mPeerPingTime);
+ return true;
+ }
return false;
}
@@ -2951,21 +2962,21 @@
long routingBackedOffUntilRT = -1;
long routingBackedOffUntilBulk = -1;
/** Initial nominal routing backoff length */
- static final int INITIAL_ROUTING_BACKOFF_LENGTH = (int)
SECONDS.toMillis(1);
+ static final int INITIAL_ROUTING_BACKOFF_LENGTH = 200; //oo: 200 ms
//1000; // 1 second
/** How much to multiply by during fast routing backoff */
static final int BACKOFF_MULTIPLIER = 2;
/** Maximum upper limit to routing backoff slow or fast */
- static final int MAX_ROUTING_BACKOFF_LENGTH = (int) HOURS.toMillis(3);
+ static final int MAX_ROUTING_BACKOFF_LENGTH = 3*60*1000; //oo: 3
minutes //3 * 60 * 60 * 1000; // 3 hours
/** Current nominal routing backoff length */
// Transfer Backoff
long transferBackedOffUntilRT = -1;
long transferBackedOffUntilBulk = -1;
- static final int INITIAL_TRANSFER_BACKOFF_LENGTH = (int)
SECONDS.toMillis(30); // 60 seconds, but it starts at twice this.
+ static final int INITIAL_TRANSFER_BACKOFF_LENGTH = 200; //oo: 200 ms
//30*1000; // 60 seconds, but it starts at twice this.
static final int TRANSFER_BACKOFF_MULTIPLIER = 2;
- static final int MAX_TRANSFER_BACKOFF_LENGTH = (int) HOURS.toMillis(3);
+ static final int MAX_TRANSFER_BACKOFF_LENGTH = 3*60*1000; //oo: 3
minutes //3 * 60 * 60 * 1000; // 3 hours
int transferBackoffLengthRT = INITIAL_TRANSFER_BACKOFF_LENGTH;
int transferBackoffLengthBulk = INITIAL_TRANSFER_BACKOFF_LENGTH;
@@ -3143,7 +3154,7 @@
synchronized(this) {
// Don't un-backoff if still backed off
long until;
- if(now > (until = realTime ? routingBackedOffUntilRT :
routingBackedOffUntilBulk)) {
+ if (true) { //oo (now > (until = realTime ?
routingBackedOffUntilRT
: routingBackedOffUntilBulk)) {
if(realTime)
routingBackoffLengthRT =
INITIAL_ROUTING_BACKOFF_LENGTH;
else
@@ -3225,7 +3236,7 @@
synchronized(this) {
// Don't un-backoff if still backed off
long until;
- if(now > (until = realTime ? transferBackedOffUntilRT :
transferBackedOffUntilBulk)) {
+ if (true) { //oo (now > (until = realTime ?
transferBackedOffUntilRT
: transferBackedOffUntilBulk)) {
if(realTime)
routingBackoffLengthRT =
INITIAL_TRANSFER_BACKOFF_LENGTH;
else
This adds logging and greatly reduces backoff - both the initial value
and the maximum. To be fair the 3 hour maximum backoff time does seem
ridiculously high. It also immeditately exits backoff upon a successful
transfer or not receiving an overload. We speculate this leads to a
patched node overwhelming its peers with requests.
# RequestStarter-delay:
--- a/src/freenet/node/RequestStarter.java
+++ b/src/freenet/node/RequestStarter.java
@@ -80,6 +80,8 @@
private final boolean isInsert;
private final boolean isSSK;
final boolean realTime;
+ private long lastDelay;
+ private final long a, b, c, minDelay;
static final int MAX_WAITING_FOR_SLOTS = 50;
@@ -96,6 +98,11 @@
this.isInsert = isInsert;
this.isSSK = isSSK;
this.realTime = realTime;
+ this.lastDelay = 4000; // start slowly
+ this.a = 10;//7;
+ this.b = 400;//2;
+ this.c = 1;//1;
+ this.minDelay = 0; //100
}
void setScheduler(RequestScheduler sched) {
@@ -141,8 +148,15 @@
if(logMINOR) Logger.minor(this, "Running
"+req+" priority
"+req.getPriority());
if(!req.localRequestOnly) {
// Wait
- long delay;
- delay = throttle.getDelay();
+ long delay; long toadsDelay;
+ toadsDelay = throttle.getDelay();
+ if (this.isSSK || this.realTime) { //
use toads delay
+ delay = toadsDelay;
+ } else {
+ delay = (a*this.minDelay +
b*this.lastDelay + c*toadsDelay) / (a
+ b + c);
+ if(logMINOR) Logger.minor(this,
"timestamp="+System.currentTimeMillis()+" toadsDelay="+toadsDelay+"
newDelay="+delay+" from "+throttle);
+ }
+ this.lastDelay = delay;
if(logMINOR) Logger.minor(this,
"Delay="+delay+" from "+throttle);
long sleepUntil = cycleTime + delay;
if(!LOCAL_REQUESTS_COMPETE_FAIRLY) {
This prioritizes the bulk CHK queue over the others by decreasing the
delay on its requests.
These were distributed with a script that fetches the source tarball and
applies the patches. The public release of the script correlated with
hundreds of fetches of the source tarball from the project webserver (we
don't keep logs for long so we can't check more precisely than that) and
an apparent plummeting in block longevity. [0] This may actually be that
nodes are overwhelmed and backed off, and patched nodes are more aggressive.
- Steve Dougherty
[0]
SSK@sCzfyxndzgtfzoPRUQExz4Y6wNmLDzOpW04umOoIBAk,~X5tIffdcfNWPIKZ2tHgSGPqIk9au31oJ301qB8kTSw,AQACAAE/fetchpull-1168/figure/fetchplots.png
Authors:
Amorphous-Serendipity <[email protected]>
Bert Massop <[email protected]>
David ‘Bombe’ Roden <[email protected]>
misaakidis <[email protected]>
nicolas hernandez <[email protected]>
Steve Dougherty <[email protected]>
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Devl mailing list [email protected] https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
