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)


Reply via email to