On Jan 26, 2008 3:34 PM, <toad at freenetproject.org> wrote:
> Author: toad
> Date: 2008-01-26 20:34:57 +0000 (Sat, 26 Jan 2008)
> New Revision: 17312
>
> Modified:
>   trunk/freenet/src/freenet/node/CHKInsertSender.java
>   trunk/freenet/src/freenet/node/InsertHandler.java
> Log:
> Reinstate (post 1105) 17307 and 17310.
>
> Modified: trunk/freenet/src/freenet/node/CHKInsertSender.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/CHKInsertSender.java 2008-01-26 20:24:22 
> UTC (rev 17311)
> +++ trunk/freenet/src/freenet/node/CHKInsertSender.java 2008-01-26 20:34:57 
> UTC (rev 17312)
> @@ -15,6 +15,7 @@
>  import freenet.io.comm.NotConnectedException;
>  import freenet.io.comm.PeerContext;
>  import freenet.io.xfer.AbortedException;
> +import freenet.io.xfer.BlockReceiver;
>  import freenet.io.xfer.BlockTransmitter;
>  import freenet.io.xfer.PartiallyReceivedBlock;
>  import freenet.keys.CHKBlock;
> @@ -172,6 +173,14 @@
>         this.closestLocation = closestLocation;
>         this.startTime = System.currentTimeMillis();
>         this.backgroundTransfers = new Vector();
> +        try {
> +                       if(prb.allReceived())
> +                               receiveCompleted = true;
> +               } catch (AbortedException e) {
> +                       receiveFailed = true;
> +                       receiveCompleted = true;
> +                       // Handle the rest of the consequences in realRun().
> +               }
>         logMINOR = Logger.shouldLog(Logger.MINOR, this);
>     }
>
> @@ -197,6 +206,7 @@
>     final PartiallyReceivedBlock prb;
>     final boolean fromStore;
>     private boolean receiveFailed;
> +    private boolean receiveCompleted;
>     final double closestLocation;
>     final long startTime;
>     private boolean sentRequest;
> @@ -606,6 +616,34 @@
>     private void finish(int code, PeerNode next) {
>        if(logMINOR) Logger.minor(this, "Finished: "+code+" on "+this, new 
> Exception("debug"));
>
> +       // Don't set the status code until we have received the data.
> +
> +       // FIXME remove timeout and just wait on 
> TRANSFER_COMPLETION_ACK_TIMEOUT below
> +       long receiveTimeout = System.currentTimeMillis() + 
> (BlockReceiver.MAX_CONSECUTIVE_MISSING_PACKET_REPORTS * 
> BlockReceiver.RECEIPT_TIMEOUT * 3);
> +       if(receiveCompleted) {
> +               synchronized(backgroundTransfers) {
> +                       while(true) {
> +                               if(receiveCompleted) break;
> +                               try {
> +                                       //FIXME delete below and reinstate: 
> backgroundTransfers.wait(TRANSFER_COMPLETION_ACK_TIMEOUT);
> +                                       int delay = (int) (receiveTimeout - 
> System.currentTimeMillis());
> +                                       if(delay > 0) 
> backgroundTransfers.wait(delay);
> +                                       else if(!receiveCompleted) {
> +                                               Logger.error(this, "Timeout 
> waiting for transfer completion on "+this);
> +                                               code = RECEIVE_FAILED;
> +                                               receiveFailed = true;
> +                                               receiveCompleted = true;
> +                                               break;
> +                                       }
> +                               } catch (InterruptedException e) {
> +                                       // Ignore
> +                               }
> +                       }
> +               }
> +               if(receiveFailed)
> +                       code = RECEIVE_FAILED;
> +       }
> +
>         synchronized(this) {
>                if((code == ROUTE_NOT_FOUND) && !sentRequest)
>                        code = ROUTE_REALLY_NOT_FOUND;
> @@ -659,6 +697,7 @@
>     public void receiveFailed() {
>        synchronized(backgroundTransfers) {
>                receiveFailed = true;
> +               receiveCompleted = true;
>                backgroundTransfers.notifyAll();
>        }
>        // Set status immediately.
> @@ -674,6 +713,16 @@
>     }
>
>     /**
> +     * Called by InsertHandler to notify that the receive has finished 
> successfully.
> +     */
> +    public void receiveCompleted() {
> +       synchronized(backgroundTransfers) {
> +               receiveCompleted = true;
> +               backgroundTransfers.notifyAll();
> +       }
> +    }
> +
> +    /**
>      * @return The current status as a string
>      */
>     public synchronized String getStatusString() {
>
> Modified: trunk/freenet/src/freenet/node/InsertHandler.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/InsertHandler.java   2008-01-26 20:24:22 
> UTC (rev 17311)
> +++ trunk/freenet/src/freenet/node/InsertHandler.java   2008-01-26 20:34:57 
> UTC (rev 17312)
> @@ -420,6 +420,8 @@
>                if(logMINOR) Logger.minor(this, "Receiving data for 
> "+InsertHandler.this);
>             try {
>                 br.receive();
> +                if(sender != null)
> +                       sender.receiveCompleted();
>                 if(logMINOR) Logger.minor(this, "Received data for 
> "+InsertHandler.this);
>                synchronized(InsertHandler.this) {
>                        receiveCompleted = true;
>
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
>

I think something is wrong with this patch (or the underlying 1105
base)  Node stats after 32 hrs running this revision:

Inserts: 0 total senders, 6 CHK handlers, 0 SSK handlers
Requests: 66 total senders, 50 CHK handlers, 13 SSK handlers
Transferring Requests: sending 43, receiving 12
ARK Fetch Requests: 2
FetcherByUSKSize: 0
BackgroundFetcherByUSKSize: 187
temporaryBackgroundFetchersLRUSize: 7

 Node status overview

bwlimitDelayTime: 0ms
nodeAveragePingTime: 383ms
networkSizeEstimateSession: 1596 nodes
networkSizeEstimate24h: 1445 nodes
avrConnPeersPerNode: 17.280488 peers
nodeUptime: 1d8h
routingMissDistance: 0.0000
backedOffPercent: 0.0%
pInstantReject: 100.0%
unclaimedFIFOSize: 0

 Peer statistics

Connected: 20
Disconnected: 2
Seeding for: 52

 Bandwidth

Input Rate: 1.37 KiB/sec (of 400 KiB)
Output Rate: 1.71 KiB/sec (of 30.0 KiB)
Total Input: 1.86 GiB (16.8 KiB/sec)
Total Output: 1.06 GiB (9.64 KiB/sec)
Payload Output: 517 MiB (4.56 KiB/sec)(47%)

Reply via email to