Author: toad
Date: 2005-11-12 02:35:45 +0000 (Sat, 12 Nov 2005)
New Revision: 7535

Modified:
   trunk/freenet/src/freenet/client/BlockInserter.java
   trunk/freenet/src/freenet/client/RetryTracker.java
   trunk/freenet/src/freenet/io/comm/DummyPeerContext.java
   trunk/freenet/src/freenet/io/comm/PeerContext.java
   trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
   trunk/freenet/src/freenet/node/InsertHandler.java
   trunk/freenet/src/freenet/node/InsertSender.java
   trunk/freenet/src/freenet/node/KeyTracker.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/Version.java
   trunk/freenet/src/freenet/support/DoublyLinkedList.java
   trunk/freenet/src/freenet/support/DoublyLinkedListImpl.java
   trunk/freenet/src/freenet/support/UpdatableSortedLinkedList.java
Log:
174:
More work on splitfiles.
Has exposed some serious underlying bugs.
DOES NOT WORK!

Modified: trunk/freenet/src/freenet/client/BlockInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/BlockInserter.java 2005-11-12 00:58:36 UTC 
(rev 7534)
+++ trunk/freenet/src/freenet/client/BlockInserter.java 2005-11-12 02:35:45 UTC 
(rev 7535)
@@ -51,6 +51,7 @@

        public void run() {
                try {
+                       Logger.minor(this, "Running "+this);
                        if(fetchedData == null)
                                throw new NullPointerException();
                        realRun();

Modified: trunk/freenet/src/freenet/client/RetryTracker.java
===================================================================
--- trunk/freenet/src/freenet/client/RetryTracker.java  2005-11-12 00:58:36 UTC 
(rev 7534)
+++ trunk/freenet/src/freenet/client/RetryTracker.java  2005-11-12 02:35:45 UTC 
(rev 7535)
@@ -209,6 +209,11 @@
                                ", running: "+runningBlocks.size()+", levels: 
"+levels.size()+", finishOnEmpty: "+finishOnEmpty);
                if(runningBlocks.size() == 1)
                        Logger.minor(this, "Only block running: 
"+runningBlocks.toArray()[0]);
+               else if(levels.isEmpty()) {
+                       for(Iterator i=runningBlocks.iterator();i.hasNext();) {
+                               Logger.minor(this, "Still running: "+i.next());
+                       }
+               }
                if((succeededBlocks.size() >= targetSuccesses)
                                || (runningBlocks.isEmpty() && levels.isEmpty() 
&& finishOnEmpty)) {
                        killed = true;

Modified: trunk/freenet/src/freenet/io/comm/DummyPeerContext.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/DummyPeerContext.java     2005-11-12 
00:58:36 UTC (rev 7534)
+++ trunk/freenet/src/freenet/io/comm/DummyPeerContext.java     2005-11-12 
02:35:45 UTC (rev 7535)
@@ -22,4 +22,8 @@
                // Do nothing
        }

+       public boolean isConnected() {
+               return false;
+       }
+
 }

Modified: trunk/freenet/src/freenet/io/comm/PeerContext.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/PeerContext.java  2005-11-12 00:58:36 UTC 
(rev 7534)
+++ trunk/freenet/src/freenet/io/comm/PeerContext.java  2005-11-12 02:35:45 UTC 
(rev 7535)
@@ -12,4 +12,7 @@

     /** Force the peer to disconnect */
        void forceDisconnect();
+
+       /** Is the peer connected? If we can't tell, return true. */
+       boolean isConnected();
 }

Modified: trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
===================================================================
--- trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java     2005-11-12 
00:58:36 UTC (rev 7534)
+++ trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java     2005-11-12 
02:35:45 UTC (rev 7535)
@@ -62,12 +62,14 @@
        public boolean send() {
                final PacketThrottle throttle = 
PacketThrottle.getThrottle(_destination.getPeer(), _prb._packetSize);
                _receiverThread = Thread.currentThread();
-               _senderThread = new Thread() {
+               _senderThread = new Thread("_senderThread for "+_uid) {

                        public void run() {
                                int sentSinceLastPing = 0;
                                while (!_sendComplete) {
-                                               long waitUntil = 
System.currentTimeMillis() + throttle.getDelay();
+                                               long delay = 
throttle.getDelay();
+                                               long waitUntil = 
System.currentTimeMillis() + delay;
+                                               Logger.minor(this, "Waiting for 
"+delay+" ms for "+_uid+" : "+throttle);
                                                try {
                                                        while (waitUntil > 
System.currentTimeMillis()) {
                                                                
if(_sendComplete) return;
@@ -136,6 +138,7 @@
                 _sendComplete = true;
                 return false;
             }
+                       if(_sendComplete || !_destination.isConnected()) return 
false;
                        if (msg == null) {
                                if (getNumSent() == _prb.getNumPackets()) {
                                        _sendComplete = true;

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2005-11-12 
00:58:36 UTC (rev 7534)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2005-11-12 
02:35:45 UTC (rev 7535)
@@ -811,7 +811,7 @@
                     pn.requeueMessageItems(messages, i, messages.length-i, 
false);
                     return;
                 } catch (Throwable e) {
-                    Logger.error(this, "Caught "+e+" while sending messages, 
requeueing");
+                    Logger.error(this, "Caught "+e+" while sending messages, 
requeueing", e);
                     // Requeue
                     pn.requeueMessageItems(messages, i, messages.length-i, 
false);
                     return;

Modified: trunk/freenet/src/freenet/node/InsertHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/InsertHandler.java   2005-11-12 00:58:36 UTC 
(rev 7534)
+++ trunk/freenet/src/freenet/node/InsertHandler.java   2005-11-12 02:35:45 UTC 
(rev 7535)
@@ -155,7 +155,10 @@
                 continue;
             }

-            if(status == InsertSender.REJECTED_OVERLOAD) {
+            // Internal error counts as overload. It'd only create a timeout 
otherwise, which is the same thing anyway.
+            // We *really* need a good way to deal with nodes that constantly 
R_O!
+            if(status == InsertSender.REJECTED_OVERLOAD || 
+                       status == InsertSender.INTERNAL_ERROR) {
                 msg = DMT.createFNPRejectedOverload(uid);
                 source.send(msg);
                 return;

Modified: trunk/freenet/src/freenet/node/InsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/InsertSender.java    2005-11-12 00:58:36 UTC 
(rev 7534)
+++ trunk/freenet/src/freenet/node/InsertSender.java    2005-11-12 02:35:45 UTC 
(rev 7535)
@@ -54,6 +54,7 @@
     static final int SUCCESS = 0;
     static final int ROUTE_NOT_FOUND = 1;
     static final int REJECTED_OVERLOAD = 2;
+    static final int INTERNAL_ERROR = 3;

     public String toString() {
         return super.toString()+" for "+uid;
@@ -261,6 +262,7 @@
         }
         } catch (Throwable t) {
             Logger.error(this, "Caught "+t, t);
+            finish(INTERNAL_ERROR);
         } finally {
             node.completed(uid);
                node.removeInsertSender(myKey, origHTL, this);
@@ -317,6 +319,8 @@
             return "REJECTED: OVERLOAD";
         if(status == NOT_FINISHED)
             return "NOT FINISHED";
+        if(status == INTERNAL_ERROR)
+               return "INTERNAL ERROR";
         return "UNKNOWN STATUS CODE: "+status;
     }
 }

Modified: trunk/freenet/src/freenet/node/KeyTracker.java
===================================================================
--- trunk/freenet/src/freenet/node/KeyTracker.java      2005-11-12 00:58:36 UTC 
(rev 7534)
+++ trunk/freenet/src/freenet/node/KeyTracker.java      2005-11-12 02:35:45 UTC 
(rev 7535)
@@ -185,6 +185,18 @@
             prev = i;
             return old;
         }
+
+        private DoublyLinkedList parent;
+        
+               public DoublyLinkedList getParent() {
+                       return parent;
+               }
+
+               public DoublyLinkedList setParent(DoublyLinkedList l) {
+                       DoublyLinkedList old = parent;
+                       parent = l;
+                       return old;
+               }
     }

     private abstract class BaseQueuedResend extends PacketActionItem 
implements IndexableUpdatableSortedLinkedListItem {
@@ -249,6 +261,18 @@
         public Object indexValue() {
             return packetNumberAsInteger;
         }
+        
+        private DoublyLinkedList parent;
+        
+               public DoublyLinkedList getParent() {
+                       return parent;
+               }
+
+               public DoublyLinkedList setParent(DoublyLinkedList l) {
+                       DoublyLinkedList old = parent;
+                       parent = l;
+                       return old;
+               }
     }

     private class QueuedResendRequest extends BaseQueuedResend {

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2005-11-12 00:58:36 UTC (rev 
7534)
+++ trunk/freenet/src/freenet/node/Node.java    2005-11-12 02:35:45 UTC (rev 
7535)
@@ -437,6 +437,8 @@
                throw new 
LowLevelPutException(LowLevelPutException.REJECTED_OVERLOAD);
             case InsertSender.ROUTE_NOT_FOUND:
                throw new 
LowLevelPutException(LowLevelPutException.ROUTE_NOT_FOUND);
+            case InsertSender.INTERNAL_ERROR:
+               throw new 
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
             default:
                        Logger.error(this, "Unknown InsertSender code in 
putCHK: "+is.getStatus()+" on "+is);
                        throw new 
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-11-12 00:58:36 UTC (rev 
7534)
+++ trunk/freenet/src/freenet/node/Version.java 2005-11-12 02:35:45 UTC (rev 
7535)
@@ -20,10 +20,10 @@
        public static final String protocolVersion = "1.0";

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

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

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

Modified: trunk/freenet/src/freenet/support/DoublyLinkedList.java
===================================================================
--- trunk/freenet/src/freenet/support/DoublyLinkedList.java     2005-11-12 
00:58:36 UTC (rev 7534)
+++ trunk/freenet/src/freenet/support/DoublyLinkedList.java     2005-11-12 
02:35:45 UTC (rev 7535)
@@ -15,6 +15,9 @@
         Item setNext(Item i);
         Item getPrev();
         Item setPrev(Item i);
+        // Strictly for sanity checking
+        DoublyLinkedList getParent();
+        DoublyLinkedList setParent(DoublyLinkedList l);
     }

     void clear();

Modified: trunk/freenet/src/freenet/support/DoublyLinkedListImpl.java
===================================================================
--- trunk/freenet/src/freenet/support/DoublyLinkedListImpl.java 2005-11-12 
00:58:36 UTC (rev 7534)
+++ trunk/freenet/src/freenet/support/DoublyLinkedListImpl.java 2005-11-12 
02:35:45 UTC (rev 7535)
@@ -217,6 +217,8 @@
      * @return  this item, or null if the item was not in the list
      */
     public DoublyLinkedList.Item remove(DoublyLinkedList.Item i) {
+       if (i.getParent() != this)
+               throw new PromiscuousItemException(i);
         DoublyLinkedList.Item next = i.getNext(), prev = i.getPrev();
         if (next == null || prev == null) return null;  // not in the list
         prev.setNext(next);
@@ -231,6 +233,10 @@
      * Inserts item J before item I (going from head to tail).
      */
     public void insertPrev(DoublyLinkedList.Item i, DoublyLinkedList.Item j) {
+       if (i.getParent() != this)
+               throw new PromiscuousItemException(i);
+       if (j.getParent() != null)
+               throw new PromiscuousItemException(j);
         if (j.getNext() != null || j.getPrev() != null)
             throw new PromiscuousItemException(j);
         DoublyLinkedList.Item prev = i.getPrev();
@@ -255,6 +261,10 @@
      * Inserts item J after item I (going from head to tail).
      */
     public void insertNext(DoublyLinkedList.Item i, DoublyLinkedList.Item j) {
+       if (i.getParent() != this)
+               throw new PromiscuousItemException(i);
+       if (j.getParent() != null)
+               throw new PromiscuousItemException(j);
         if (j.getNext() != null || j.getPrev() != null)
             throw new PromiscuousItemException(j);
         DoublyLinkedList.Item next = i.getNext();
@@ -390,6 +400,7 @@

     public static class Item implements DoublyLinkedList.Item {
         private DoublyLinkedList.Item next, prev;
+        private DoublyLinkedList list;
         public Object clone() {
             if(getClass() != Item.class)
                 throw new RuntimeException("Must implement clone() for 
"+getClass());
@@ -411,6 +422,14 @@
             prev = i;
             return old;
         }
+               public DoublyLinkedList getParent() {
+                       return list;
+               }
+               public DoublyLinkedList setParent(DoublyLinkedList l) {
+                       DoublyLinkedList old = list;
+                       list = l;
+                       return old;
+               }
     }
 }


Modified: trunk/freenet/src/freenet/support/UpdatableSortedLinkedList.java
===================================================================
--- trunk/freenet/src/freenet/support/UpdatableSortedLinkedList.java    
2005-11-12 00:58:36 UTC (rev 7534)
+++ trunk/freenet/src/freenet/support/UpdatableSortedLinkedList.java    
2005-11-12 02:35:45 UTC (rev 7535)
@@ -131,7 +131,7 @@
     /**
      * @return The number of items in the list.
      */
-    public int size() {
+    public synchronized int size() {
         return list.size();
     }

@@ -140,6 +140,9 @@
      */
     public synchronized UpdatableSortedLinkedListItem[] toArray() {
         int size = list.size();
+        if(size < 0)
+               throw new IllegalStateException("list.size() = "+size+" for 
"+this);
+               
         UpdatableSortedLinkedListItem[] output = 
             new UpdatableSortedLinkedListItem[size];
         int i=0;


Reply via email to