Author: toad
Date: 2008-02-06 23:25:07 +0000 (Wed, 06 Feb 2008)
New Revision: 17624
Modified:
trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
trunk/freenet/src/freenet/node/FailureTable.java
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/PeerManager.java
Log:
Make per-node failure tables and ULPRs optional.
Modified: trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
--- trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2008-02-06
23:16:01 UTC (rev 17623)
+++ trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2008-02-06
23:25:07 UTC (rev 17624)
@@ -593,6 +593,10 @@
Node.dropPacketEveryLong=Frequency of dropping packets. Testing option used by
devs to simulate packet loss. 0 means never artificially drop a packet. Don't
touch this!
Node.enableARKs=Enable ARKs? (DON'T TURN THIS OFF!)
Node.enableARKsLong=Enable ARKs? (DON'T TURN THIS OFF!)
+Node.enablePerNodeFailureTables=Enable per-node failure tables?
+Node.enablePerNodeFailureTablesLong=Enable automatically rerouting around
nodes that failed a request within the last 10 minutes? Note that *we keep the
datastructures anyway*, but we use them for different things (ULPRs).
+Node.enableULPRDataPropagation=Enable ULPR data propagation?
+Node.enableULPRDataPropagationLong=Enable fast propagation of recently
requested keys to those nodes which have asked for them when the data is
eventually found? (Ultra-Lightweight Persistent Requests). Note that disabling
this will also turn off per-node failure tables.
Node.errorApplyingConfig=Error while applying the new config : ${error}
Node.extraPeerDir=Extra peer data directory
Node.extraPeerDirLong=Name of directory to put extra peer data in
Modified: trunk/freenet/src/freenet/node/FailureTable.java
===================================================================
--- trunk/freenet/src/freenet/node/FailureTable.java 2008-02-06 23:16:01 UTC
(rev 17623)
+++ trunk/freenet/src/freenet/node/FailureTable.java 2008-02-06 23:25:07 UTC
(rev 17624)
@@ -78,6 +78,7 @@
* @param timeout
*/
public void onFailed(Key key, PeerNode routedTo, short htl, int
timeout) {
+ if(!node.enableULPRDataPropagation) return;
long now = System.currentTimeMillis();
FailureTableEntry entry;
synchronized(this) {
@@ -95,6 +96,7 @@
}
public void onFinalFailure(Key key, PeerNode routedTo, short htl, int
timeout, PeerNode requestor) {
+ if(!node.enableULPRDataPropagation) return;
long now = System.currentTimeMillis();
FailureTableEntry entry;
synchronized(this) {
@@ -218,6 +220,7 @@
* near future). If there are nodes waiting for it, we will offer it to
them.
*/
public void onFound(KeyBlock block) {
+ if(!node.enableULPRDataPropagation) return;
Key key = block.getKey();
if(key == null) throw new NullPointerException();
FailureTableEntry entry;
@@ -238,6 +241,7 @@
* @param authenticator
*/
void onOffer(Key key, PeerNode peer, byte[] authenticator) {
+ if(!node.enableULPRDataPropagation) return;
if(logMINOR)
Logger.minor(this, "Offered key "+key+" by peer "+peer);
if(node.hasKey(key)) {
@@ -426,6 +430,7 @@
}
public OfferList getOffers(Key key) {
+ if(!node.enableULPRDataPropagation) return null;
BlockOfferList bl;
synchronized(this) {
bl = (BlockOfferList) blockOfferListByKey.get(key);
@@ -436,10 +441,12 @@
/** Called when a node disconnects */
public void onDisconnect(final PeerNode pn) {
+ if(!node.enableULPRDataPropagation) return;
// FIXME do something (off thread if expensive)
}
public TimedOutNodesList getTimedOutNodesList(Key key) {
+ if(!node.enableULPRDataPropagation) return null;
synchronized(this) {
return (FailureTableEntry) entriesByKey.get(key);
}
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2008-02-06 23:16:01 UTC (rev
17623)
+++ trunk/freenet/src/freenet/node/Node.java 2008-02-06 23:25:07 UTC (rev
17624)
@@ -368,6 +368,8 @@
private int inputBandwidthLimit;
boolean inputLimitDefault;
final boolean enableARKs;
+ final boolean enablePerNodeFailureTables;
+ final boolean enableULPRDataPropagation;
public static final short DEFAULT_MAX_HTL = (short)10;
private short maxHTL;
/** Type identifier for fproxy node to node messages, as sent on
DMT.nodeToNodeMessage's */
@@ -741,6 +743,32 @@
});
enableARKs = nodeConfig.getBoolean("enableARKs");
+ nodeConfig.register("enablePerNodeFailureTables", true,
sortOrder++, true, false, "Node.enablePerNodeFailureTables",
"Node.enablePerNodeFailureTablesLong", new BooleanCallback() {
+
+ public boolean get() {
+ return enablePerNodeFailureTables;
+ }
+
+ public void set(boolean val) throws
InvalidConfigValueException {
+ throw new InvalidConfigValueException("Cannot
change on the fly");
+ }
+
+ });
+ enablePerNodeFailureTables =
nodeConfig.getBoolean("enablePerNodeFailureTables");
+
+ nodeConfig.register("enableULPRDataPropagation", true,
sortOrder++, true, false, "Node.enableULPRDataPropagation",
"Node.enableULPRDataPropagationLong", new BooleanCallback() {
+
+ public boolean get() {
+ return enableULPRDataPropagation;
+ }
+
+ public void set(boolean val) throws
InvalidConfigValueException {
+ throw new InvalidConfigValueException("Cannot
change on the fly");
+ }
+
+ });
+ enableULPRDataPropagation =
nodeConfig.getBoolean("enableULPRDataPropagation");
+
// Determine the port number
// @see #191
if(oldConfig != null &&
"-1".equals(oldConfig.get("node.listenPort")))
Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java 2008-02-06 23:16:01 UTC
(rev 17623)
+++ trunk/freenet/src/freenet/node/PeerManager.java 2008-02-06 23:25:07 UTC
(rev 17624)
@@ -717,6 +717,7 @@
synchronized (this) {
peers = connectedPeers;
}
+ if(!node.enablePerNodeFailureTables) key = null;
if(logMINOR) Logger.minor(this, "Choosing closest peer:
connectedPeers="+peers.length);
double maxDiff = Double.MAX_VALUE;
if(!ignoreSelf)