build01462: Freenet 0.7.5 build 1462 is now available.
Thynix
released this
22 Nov 20:34
There is a new Windows installer; it is signed. (Without breaking internal
integrity checks like the last release.) It can run from and install to paths
with non-English characters. Thanks romnGit! There are currently translations
for English, French, and Spanish. If you'd like to contribute a translation for
your language [0] please send it to us. Options for contacting us include Sone,
GitHub, IRC, FMS, and the mailing list [1].
There are performance problems with some types of file downloads - specifically
bulk downloads for CHKs. We think this might be due to unofficial performance
patches negatively impacting performance for everyone not using them. If you
are running these patches we ask that you not run them so that bulk CHK
performance can be restored network-wide. In August 2011 build 1397 enabled New
Load Management, which was intended to avoid these types of weaknesses, but it
introduced performance problems at scale and was disabled. In the long term we
hope to fix these problems and redeploy NLM, but for right now we ask that
people not use these patches.
In this release:
* Add an opennet seed node. Thanks Juiceman!
* Add Korean Windows tray application translation. Thanks ilbe123!
* Fix potential security problems with malicious UPnP devices. Thanks to
waldheinz for the report.
* Select options by default on the "Add a Friend" page.
* Omit empty plugin groups on the plugin page.
* Avoid leaking node location in link length probe.
* Base stats page average distance on actual location instead of 0.0.
There is a new Windows tray application in development. It is planned to
replace the current tray and launcher for new installations. Its features:
* Hide the tray icon while Freenet continues running.
* Change startup preferences.
* Change which browser it launches.
* Hopefully will be false-positived less by antiviruses that are overly
suspicious of scripting languages.
* Be signed.
If you want to give feedback on the tray application it is here. [2]
Thank you for using Freenet!
- Steve Dougherty
----
[0] https://github.com/Thynix/Freenet_wininstaller_innosetup/tree/master/translations
[1] https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
[2] http://downloads.freenetproject.org/FreenetTray-testing-00c0832.exe
----
[0] CHK@8EdYztEh4HWmpLYj3ZQRauc6PEytM~lqYFdhEICs6TQ,qFrT-kz3-DK9eCz2ZeYcQk8xRmdKWbGroBewv0VYXfk,AAMC--8/Messages_en.isl
[1] https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
[2] CHK@98KM59LH-ellIBKQTPtx0evoA-iyd~vncm7qVtvEvis,HJDOEOae4QMo0k-Y2fABBZzUErcRQYRe-Vxhl~drG4g,AAMC--8/FreenetTray-testing-00c0832.exe
Developer changelog:
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:
--- 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.
--- 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]>