Author: robert
Date: 2007-12-20 20:17:52 +0000 (Thu, 20 Dec 2007)
New Revision: 16754

Modified:
   trunk/freenet/src/freenet/node/InsertHandler.java
Log:
send positive transfer notice if we are the end of the chain


Modified: trunk/freenet/src/freenet/node/InsertHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/InsertHandler.java   2007-12-20 20:03:35 UTC 
(rev 16753)
+++ trunk/freenet/src/freenet/node/InsertHandler.java   2007-12-20 20:17:52 UTC 
(rev 16754)
@@ -319,7 +319,10 @@
                sentCompletion = true;
         }

+               Message m=null;
+               
         if((sender != null) && (!sentCompletionWasSet)) {
+                       //If there are downstream senders, our final success 
report depends on there being no timeouts in the chain.
                while(true) {
                        synchronized(sender) {
                                if(sender.completed()) {
@@ -333,16 +336,23 @@
                        }
                }
                boolean failed = sender.anyTransfersFailed();
-               Message m = DMT.createFNPInsertTransfersCompleted(uid, failed);
+               m = DMT.createFNPInsertTransfersCompleted(uid, failed);
+               }
+               
+               if((sender == null) && (!sentCompletionWasSet) && (canCommit)) {
+                       //There are no downstream senders, but we stored the 
data locally, report successful transfer.
+                       //Note that this is done even if the verify fails.
+                       m = DMT.createFNPInsertTransfersCompleted(uid, false /* 
no timeouts */);
+               }               
+               
                try {
                        source.sendSync(m, this);
-                       if(logMINOR) Logger.minor(this, "Sent completion: 
"+failed+" for "+this);
+                       if(logMINOR) Logger.minor(this, "Sent completion: "+m+" 
for "+this);
                } catch (NotConnectedException e1) {
                        if(logMINOR) Logger.minor(this, "Not connected: 
"+source+" for "+this);
                        // May need to commit anyway...
                }
-        }
-        
+                       
         if(code != CHKInsertSender.TIMED_OUT && code != 
CHKInsertSender.GENERATED_REJECTED_OVERLOAD && 
                        code != CHKInsertSender.INTERNAL_ERROR && code != 
CHKInsertSender.ROUTE_REALLY_NOT_FOUND &&
                        code != CHKInsertSender.RECEIVE_FAILED && 
!receiveFailed()) {
@@ -383,7 +393,7 @@
                 toSend = DMT.createFNPDataInsertRejected(uid, 
DMT.DATA_INSERT_REJECTED_VERIFY_FAILED);
             } catch (AbortedException e) {
                Logger.error(this, "Receive failed: "+e);
-               // Receiver thread will handle below
+               // Receiver thread (below) will handle sending the failure 
notice
             }
         }
         if(toSend != null) {


Reply via email to