Author: toad
Date: 2005-12-01 14:44:46 +0000 (Thu, 01 Dec 2005)
New Revision: 7645

Modified:
   trunk/freenet/src/freenet/client/BlockInserter.java
   trunk/freenet/src/freenet/client/FileInserter.java
   trunk/freenet/src/freenet/client/InserterException.java
   trunk/freenet/src/freenet/node/InsertSender.java
   trunk/freenet/src/freenet/node/LowLevelPutException.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/PeerManager.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/TextModeClientInterface.java
   trunk/freenet/src/freenet/node/Version.java
Log:
256: (mandatory)
New insert error mode: REALLY_ROUTE_NOT_FOUND ( = we couldn't reach a single 
node ).
Probably want to provide this for requests too at some point.
Add nodes to connectedPeers only when they are actually connected.
Add node after promoting an unverified tracker.
This caused many instances of connections appearing to fail.

Modified: trunk/freenet/src/freenet/client/BlockInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/BlockInserter.java 2005-12-01 00:26:42 UTC 
(rev 7644)
+++ trunk/freenet/src/freenet/client/BlockInserter.java 2005-12-01 14:44:46 UTC 
(rev 7645)
@@ -72,19 +72,21 @@
                        succeeded = true;
                        tracker.success(this);
                } catch (InserterException e) {
-                       switch(e.mode) {
+                       int mode = e.getMode();
+                       switch(mode) {
                        case InserterException.REJECTED_OVERLOAD:
                        case InserterException.ROUTE_NOT_FOUND:
-                               nonfatalError(e, e.mode);
+                       case InserterException.ROUTE_REALLY_NOT_FOUND:
+                               nonfatalError(e, mode);
                                return;
                        case InserterException.INTERNAL_ERROR:
                        case InserterException.BUCKET_ERROR:
-                               fatalError(e, e.mode);
+                               fatalError(e, mode);
                                return;
                        case InserterException.FATAL_ERRORS_IN_BLOCKS:
                        case InserterException.TOO_MANY_RETRIES_IN_BLOCKS:
                                // Huh?
-                               Logger.error(this, "Got error inserting blocks 
("+e.mode+") while inserting a block - WTF?");
+                               Logger.error(this, "Got error inserting blocks 
("+e.getMessage()+") while inserting a block - WTF?");
                                fatalError(e, InserterException.INTERNAL_ERROR);
                                return;
                        case InserterException.INVALID_URI:
@@ -92,7 +94,7 @@
                                fatalError(e, InserterException.INTERNAL_ERROR);
                                return;
                        default:
-                               Logger.error(this, "Unknown insert error 
"+e.mode+" while inserting a block");
+                               Logger.error(this, "Unknown insert error 
"+mode+" while inserting a block");
                                fatalError(e, InserterException.INTERNAL_ERROR);
                                return;
                        }

Modified: trunk/freenet/src/freenet/client/FileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/FileInserter.java  2005-12-01 00:26:42 UTC 
(rev 7644)
+++ trunk/freenet/src/freenet/client/FileInserter.java  2005-12-01 14:44:46 UTC 
(rev 7645)
@@ -2,7 +2,6 @@

 import java.io.IOException;

-import freenet.client.events.GeneratedURIEvent;
 import freenet.client.events.SimpleBlockPutEvent;
 import freenet.keys.CHKEncodeException;
 import freenet.keys.ClientCHKBlock;
@@ -152,6 +151,8 @@
                        throw new 
InserterException(InserterException.REJECTED_OVERLOAD, uri);
                case LowLevelPutException.ROUTE_NOT_FOUND:
                        throw new 
InserterException(InserterException.ROUTE_NOT_FOUND, uri);
+               case LowLevelPutException.ROUTE_REALLY_NOT_FOUND:
+                       throw new 
InserterException(InserterException.ROUTE_REALLY_NOT_FOUND, uri);
                default:
                        Logger.error(this, "Unknown LowLevelPutException code: 
"+e.code+" on "+this);
                        throw new 
InserterException(InserterException.INTERNAL_ERROR, e, null);

Modified: trunk/freenet/src/freenet/client/InserterException.java
===================================================================
--- trunk/freenet/src/freenet/client/InserterException.java     2005-12-01 
00:26:42 UTC (rev 7644)
+++ trunk/freenet/src/freenet/client/InserterException.java     2005-12-01 
14:44:46 UTC (rev 7645)
@@ -6,7 +6,7 @@
 public class InserterException extends Exception {
        private static final long serialVersionUID = -1106716067841151962L;

-       public final int mode;
+       private final int mode;
        /** For collection errors */
        public FailureCodeTracker errorCodes;
        /** If a non-serious error, the URI */
@@ -64,6 +64,8 @@
        public static final int FATAL_ERRORS_IN_BLOCKS = 6;
        /** Could not insert a splitfile because a block failed too many times 
*/
        public static final int TOO_MANY_RETRIES_IN_BLOCKS = 7;
+       /** Not able to leave the node at all */
+       public static final int ROUTE_REALLY_NOT_FOUND = 8;

        public static String getMessage(int mode) {
                switch(mode) {
@@ -81,6 +83,8 @@
                        return "Could not insert splitfile: ran out of retries 
(nonfatal errors)";
                case ROUTE_NOT_FOUND:
                        return "Could not propagate the insert to enough nodes 
(normal on small networks, try fetching it anyway)";
+               case ROUTE_REALLY_NOT_FOUND:
+                       return "Insert could not leave the node at all";
                default:
                        return "Unknown error "+mode;
                }

Modified: trunk/freenet/src/freenet/node/InsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/InsertSender.java    2005-12-01 00:26:42 UTC 
(rev 7644)
+++ trunk/freenet/src/freenet/node/InsertSender.java    2005-12-01 14:44:46 UTC 
(rev 7645)
@@ -86,6 +86,8 @@
     static final int TIMED_OUT = 4;
     /** Locally Generated a RejectedOverload */
     static final int GENERATED_REJECTED_OVERLOAD = 5;
+    /** Could not get off the node at all! */
+    static final int ROUTE_REALLY_NOT_FOUND = 6;

     public String toString() {
         return super.toString()+" for "+uid;
@@ -213,6 +215,8 @@

             if(msg == null || msg.getSpec() != DMT.FNPAccepted) continue;

+            Logger.minor(this, "Got Accepted on "+this);
+            
             // Send them the data.
             // Which might be the new data resulting from a collision...

@@ -405,6 +409,9 @@
                }
         }

+        if(code == ROUTE_NOT_FOUND && blockSenders.isEmpty())
+               code = ROUTE_REALLY_NOT_FOUND;
+        
         status = code;

         synchronized(this) {

Modified: trunk/freenet/src/freenet/node/LowLevelPutException.java
===================================================================
--- trunk/freenet/src/freenet/node/LowLevelPutException.java    2005-12-01 
00:26:42 UTC (rev 7644)
+++ trunk/freenet/src/freenet/node/LowLevelPutException.java    2005-12-01 
14:44:46 UTC (rev 7645)
@@ -9,6 +9,8 @@
        /** A downstream node is overloaded, and rejected the insert. We should
         * reduce our rate of sending inserts. */
        public static final int REJECTED_OVERLOAD = 3;
+       /** Insert could not get off the node at all */
+       public static final int ROUTE_REALLY_NOT_FOUND = 4;

        /** Failure code */
        public final int code;
@@ -21,6 +23,8 @@
                        return "Could not store the data on enough nodes";
                case REJECTED_OVERLOAD:
                        return "A node downstream either timed out or was 
overloaded (retry)";
+               case ROUTE_REALLY_NOT_FOUND:
+                       return "The insert could not get off the node at all";
                default:
                        return "Unknown error code: "+reason;
                }

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2005-12-01 00:26:42 UTC (rev 
7644)
+++ trunk/freenet/src/freenet/node/Node.java    2005-12-01 14:44:46 UTC (rev 
7645)
@@ -567,6 +567,8 @@
                                throw new 
LowLevelPutException(LowLevelPutException.REJECTED_OVERLOAD);
                        case InsertSender.ROUTE_NOT_FOUND:
                                throw new 
LowLevelPutException(LowLevelPutException.ROUTE_NOT_FOUND);
+                       case InsertSender.ROUTE_REALLY_NOT_FOUND:
+                               throw new 
LowLevelPutException(LowLevelPutException.ROUTE_REALLY_NOT_FOUND);
                        case InsertSender.INTERNAL_ERROR:
                                throw new 
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
                        default:

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2005-12-01 00:26:42 UTC 
(rev 7644)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2005-12-01 14:44:46 UTC 
(rev 7645)
@@ -104,6 +104,10 @@
     }

     public synchronized void addConnectedPeer(PeerNode pn) {
+       if(!pn.isConnected()) {
+               Logger.minor(this, "Not connected: "+pn);
+               return;
+       }
         for(int i=0;i<connectedPeers.length;i++) {
             if(connectedPeers[i] == pn) {
                 Logger.minor(this, "Already connected: "+pn);
@@ -210,8 +214,8 @@
         // This is safe as they will add themselves when they
         // reconnect, and they can't do it yet as we are synchronized.
         Vector v = new Vector(connectedPeers.length);
-        for(int i=0;i<connectedPeers.length;i++) {
-            PeerNode pn = connectedPeers[i];
+        for(int i=0;i<myPeers.length;i++) {
+            PeerNode pn = myPeers[i];
             if(pn == exclude) continue;
             if(pn.isConnected()) {
                 v.add(pn);

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2005-12-01 00:26:42 UTC 
(rev 7644)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2005-12-01 14:44:46 UTC 
(rev 7645)
@@ -30,7 +30,6 @@
 import freenet.support.LRUHashtable;
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
-import freenet.support.math.BootstrappingDecayingRunningAverage;
 import freenet.support.math.RunningAverage;
 import freenet.support.math.SimpleRunningAverage;

@@ -611,7 +610,7 @@
         if(thisBootID != this.bootID) {
             connectedTime = System.currentTimeMillis();
             Logger.minor(this, "Changed boot ID from "+bootID+" to 
"+thisBootID);
-            // We are connected, but we need a new KeyTracker
+            isConnected = false; // Will be reset below
             if(previousTracker != null) {
                 KeyTracker old = previousTracker;
                 previousTracker = null;
@@ -647,7 +646,8 @@
                        Logger.error(this, "Disconnected in completedHandshake 
with "+this);
                        return true; // i suppose
                }
-        node.peers.addConnectedPeer(this);
+               if(isConnected)
+                       node.peers.addConnectedPeer(this);
         sentInitialMessages = false;
         return true;
     }
@@ -695,6 +695,7 @@
             unverifiedTracker = null;
             isConnected = true;
             ctx = null;
+            node.peers.addConnectedPeer(this);
             maybeSendInitialMessages();
         }
     }

Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java 2005-12-01 
00:26:42 UTC (rev 7644)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java 2005-12-01 
14:44:46 UTC (rev 7645)
@@ -235,7 +235,8 @@
                System.out.println("Error: "+e.getMessage());
                if(e.uri != null)
                        System.out.println("URI would have been: "+e.uri);
-               if(e.mode == e.FATAL_ERRORS_IN_BLOCKS || e.mode == 
e.TOO_MANY_RETRIES_IN_BLOCKS) {
+               int mode = e.getMode();
+               if(mode == InserterException.FATAL_ERRORS_IN_BLOCKS || mode == 
InserterException.TOO_MANY_RETRIES_IN_BLOCKS) {
                        System.out.println("Splitfile-specific 
error:\n"+e.errorCodes.toVerboseString());
                }
                return;

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-12-01 00:26:42 UTC (rev 
7644)
+++ trunk/freenet/src/freenet/node/Version.java 2005-12-01 14:44:46 UTC (rev 
7645)
@@ -20,10 +20,10 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       public static final int buildNumber = 255;
+       public static final int buildNumber = 256;

        /** Oldest build of Fred we will talk to */
-       public static final int lastGoodBuild = 255;
+       public static final int lastGoodBuild = 256;

        /** The highest reported build of fred */
        public static int highestSeenBuild = buildNumber;


Reply via email to