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%)