Author: toad
Date: 2005-12-01 17:16:30 +0000 (Thu, 01 Dec 2005)
New Revision: 7647

Modified:
   trunk/freenet/src/freenet/client/BlockFetcher.java
   trunk/freenet/src/freenet/client/BlockInserter.java
   trunk/freenet/src/freenet/client/StdSplitfileBlock.java
   trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
   trunk/freenet/src/freenet/node/InsertSender.java
   trunk/freenet/src/freenet/node/Version.java
Log:
258:
Logging.
Minor BlockTransmitter fixes (was hanging).
Overload sendAborted to let the receiver cancel the transfer.


Modified: trunk/freenet/src/freenet/client/BlockFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/BlockFetcher.java  2005-12-01 15:01:33 UTC 
(rev 7646)
+++ trunk/freenet/src/freenet/client/BlockFetcher.java  2005-12-01 17:16:30 UTC 
(rev 7647)
@@ -25,6 +25,10 @@
                this.dontEnterImplicitArchives = dontEnterImplicitArchives;
        }

+       public String getName() {
+               return "BlockFetcher for "+getNumber();
+       }
+       
        public void run() {
                Logger.minor(this, "Running: "+this);
                // Already added to runningFetches.

Modified: trunk/freenet/src/freenet/client/BlockInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/BlockInserter.java 2005-12-01 15:01:33 UTC 
(rev 7646)
+++ trunk/freenet/src/freenet/client/BlockInserter.java 2005-12-01 17:16:30 UTC 
(rev 7647)
@@ -49,6 +49,10 @@
                return uri;
        }

+       public String getName() {
+               return "BlockInserter for "+this.getNumber();
+       }
+       
        public void run() {
                try {
                        Logger.minor(this, "Running "+this);

Modified: trunk/freenet/src/freenet/client/StdSplitfileBlock.java
===================================================================
--- trunk/freenet/src/freenet/client/StdSplitfileBlock.java     2005-12-01 
15:01:33 UTC (rev 7646)
+++ trunk/freenet/src/freenet/client/StdSplitfileBlock.java     2005-12-01 
17:16:30 UTC (rev 7647)
@@ -39,7 +39,7 @@
                checkStartable();
                Logger.minor(this, "Starting "+this);
                try {
-                       Thread t = new Thread(this);
+                       Thread t = new Thread(this, getName());
                        t.setDaemon(true);
                        t.start();
                } catch (Throwable error) {
@@ -48,5 +48,7 @@
                }
        }

+       public abstract String getName();
+       
        protected abstract void checkStartable();
 }

Modified: trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
===================================================================
--- trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java     2005-12-01 
15:01:33 UTC (rev 7646)
+++ trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java     2005-12-01 
17:16:30 UTC (rev 7647)
@@ -117,6 +117,7 @@
                                                                        
if(_unsent.size() != 0) break;
                                                                        // No 
unsent packets
                                                                        
if(getNumSent() == _prb.getNumPackets()) {
+                                                                               
Logger.minor(this, "Sent all blocks, none unsent");
                                                                                
timeAllSent = System.currentTimeMillis();
                                                                        }
                                                                }
@@ -254,8 +255,10 @@
        public boolean send() {
                _receiverThread = Thread.currentThread();

+               PartiallyReceivedBlock.PacketReceivedListener myListener;
+               
                try {
-               _unsent = _prb.addListener(new 
PartiallyReceivedBlock.PacketReceivedListener() {;
+               _unsent = _prb.addListener(myListener = new 
PartiallyReceivedBlock.PacketReceivedListener() {;

                        public void packetReceived(int packetNo) {
                                _unsent.addLast(new Integer(packetNo));
@@ -285,8 +288,12 @@
                        }
                        Message msg;
                        try {
-                msg = 
_usm.waitFor(MessageFilter.create().setTimeout(SEND_TIMEOUT).setType(DMT.missingPacketNotification).setField(DMT.UID,
 _uid).or(MessageFilter.create().setType(DMT.allReceived).setField(DMT.UID, 
_uid)));
+                msg = 
_usm.waitFor(MessageFilter.create().setTimeout(SEND_TIMEOUT).setType(DMT.missingPacketNotification).setField(DMT.UID,
 _uid).or(MessageFilter.create().setType(DMT.allReceived).setField(DMT.UID, 
_uid).setTimeout(SEND_TIMEOUT)).or(MessageFilter.create().setType(DMT.sendAborted).setField(DMT.UID,
 _uid).setTimeout(SEND_TIMEOUT)));
             } catch (DisconnectedException e) {
+               // Ignore, see below
+               msg = null;
+            }
+            if(!_destination.isConnected()) {
                 Logger.normal(this, "Terminating send "+_uid+" to 
"+_destination+" from "+_usm.getPortNumber()+" because node disconnected while 
waiting");
                 synchronized(_senderThread) {
                        _sendComplete = true;
@@ -294,9 +301,10 @@
                 }
                 return false;
             }
-                       if(_sendComplete || !_destination.isConnected()) return 
false;
+            if(_sendComplete)
+               return false;
                        if (msg == null) {
-                               if(timeAllSent > 0 && 
System.currentTimeMillis() - timeAllSent > SEND_TIMEOUT &&
+                               if(timeAllSent > 0 && 
(System.currentTimeMillis() - timeAllSent) > SEND_TIMEOUT &&
                                                getNumSent() == 
_prb.getNumPackets()) {
                                        synchronized(_senderThread) {
                                                _sendComplete = true;
@@ -304,7 +312,10 @@
                                        }
                                        Logger.error(this, "Terminating send 
"+_uid+" to "+_destination+" from "+_usm.getPortNumber()+" as we haven't heard 
from receiver in "+SEND_TIMEOUT+"ms.");
                                        return false;
-                               } else continue;
+                               } else {
+                                       Logger.minor(this, "Ignoring timeout: 
timeAllSent="+timeAllSent+" ("+(System.currentTimeMillis() - timeAllSent)+"), 
getNumSent="+getNumSent()+"/"+_prb.getNumPackets());
+                                       continue;
+                               }
                        } else if 
(msg.getSpec().equals(DMT.missingPacketNotification)) {
                                LinkedList missing = (LinkedList) 
msg.getObject(DMT.MISSING);
                                for (Iterator i = missing.iterator(); 
i.hasNext();) {
@@ -325,6 +336,17 @@
                                        _senderThread.notifyAll();
                                }
                                return true;
+                       } else if (msg.getSpec().equals(DMT.sendAborted)) {
+                               // Overloaded: receiver no longer wants the data
+                               // Do NOT abort PRB, it's none of its business.
+                               // And especially, we don't want a downstream 
node to 
+                               // be able to abort our sends to all the others!
+                               _prb.removeListener(myListener);
+                               synchronized(_senderThread) {
+                                       _sendComplete = true;
+                                       _senderThread.notifyAll();
+                               }
+                               return false;
                        } else if(_sendComplete) {
                            // Terminated abnormally
                            return false;
@@ -365,7 +387,7 @@
                synchronized(_senderThread) {
                        while(!_sendComplete) {
                                try {
-                               _senderThread.wait(10*1000);
+                                       _senderThread.wait(10*1000);
                                } catch (InterruptedException e) {
                                        // Ignore
                                }

Modified: trunk/freenet/src/freenet/node/InsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/InsertSender.java    2005-12-01 15:01:33 UTC 
(rev 7646)
+++ trunk/freenet/src/freenet/node/InsertSender.java    2005-12-01 17:16:30 UTC 
(rev 7647)
@@ -251,7 +251,7 @@
             Logger.minor(this, "Sending data");
             if(receiveFailed) return;
             Sender s = new Sender(bt);
-            Thread senderThread = new Thread(s);
+            Thread senderThread = new Thread(s, "Sender for "+uid+" to 
"+next.getPeer());
             senderThread.setDaemon(true);
             senderThread.start();
             senderThreads.add(senderThread);

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-12-01 15:01:33 UTC (rev 
7646)
+++ trunk/freenet/src/freenet/node/Version.java 2005-12-01 17:16:30 UTC (rev 
7647)
@@ -20,10 +20,10 @@
        public static final String protocolVersion = "1.0";

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

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

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


Reply via email to