From toad at freenetproject.org Sat Mar 1 00:02:39 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 00:02:39 +0000 (UTC) Subject: [freenet-cvs] r18276 - trunk/freenet/src/freenet/node Message-ID: <20080301000239.8D1703882E5@freenetproject.org> Author: toad Date: 2008-03-01 00:02:38 +0000 (Sat, 01 Mar 2008) New Revision: 18276 Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java Log: Remove bothNoderefs back compatibility code. Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java =================================================================== --- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-02-29 23:59:41 UTC (rev 18275) +++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 00:02:38 UTC (rev 18276) @@ -581,8 +581,7 @@ processJFKMessage2(payload, 4, pn, replyTo, true, setupType); } else if(packetType == 3) { // Phase 4 - if(!processJFKMessage4(payload, 4, pn, replyTo, false, true, setupType, true)) - processJFKMessage4(payload, 4, pn, replyTo, false, true, setupType, false); + processJFKMessage4(payload, 4, pn, replyTo, false, true, setupType); } else { Logger.error(this, "Invalid phase "+packetType+" for anonymous-initiator (we are the responder)"); } @@ -684,8 +683,7 @@ * using the same keys as in the previous message. * The signature is non-message recovering */ - if(!processJFKMessage4(payload, 3, pn, replyTo, oldOpennetPeer, false, -1, true)) - processJFKMessage4(payload, 3, pn, replyTo, oldOpennetPeer, false, -1, false); + processJFKMessage4(payload, 3, pn, replyTo, oldOpennetPeer, false, -1); } } else { Logger.error(this, "Decrypted auth packet but unknown negotiation type "+negType+" from "+replyTo+" possibly from "+pn); @@ -1214,7 +1212,7 @@ * @param pn The PeerNode we are talking to. Cannot be null as we are the initiator. * @param replyTo The Peer we are replying to. */ - private boolean processJFKMessage4(byte[] payload, int inputOffset, PeerNode pn, Peer replyTo, boolean oldOpennetPeer, boolean unknownInitiator, int setupType, boolean bothNoderefs) + private boolean processJFKMessage4(byte[] payload, int inputOffset, PeerNode pn, Peer replyTo, boolean oldOpennetPeer, boolean unknownInitiator, int setupType) { final long t1 = System.currentTimeMillis(); if(logMINOR) Logger.minor(this, "Got a JFK(4) message, processing it - "+pn.getPeer()); @@ -1230,8 +1228,7 @@ final int expectedLength = HASH_LENGTH + // HMAC of the cyphertext (c.getBlockSize() >> 3) + // IV - HASH_LENGTH + // the signature - (bothNoderefs ? pn.jfkMyRef.length : 0) // my reference + HASH_LENGTH // the signature ; if(payload.length < expectedLength + 3) { Logger.error(this, "Packet too short from "+pn.getPeer()+": "+payload.length+" after decryption in JFK(4), should be "+(expectedLength + 3)); @@ -1279,7 +1276,7 @@ byte[] data = new byte[decypheredPayload.length - decypheredPayloadOffset]; System.arraycopy(decypheredPayload, decypheredPayloadOffset, data, 0, decypheredPayload.length - decypheredPayloadOffset); long bootID = Fields.bytesToLong(data); - byte[] hisRef = new byte[data.length - (bothNoderefs ? pn.jfkMyRef.length : 0) - 8]; + byte[] hisRef = new byte[data.length - 8]; System.arraycopy(data, 8, hisRef, 0, hisRef.length); // verify the signature From toad at freenetproject.org Sat Mar 1 00:26:35 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 00:26:35 +0000 (UTC) Subject: [freenet-cvs] r18277 - trunk/freenet/src/freenet/node Message-ID: <20080301002635.2C1AC479801@freenetproject.org> Author: toad Date: 2008-03-01 00:26:34 +0000 (Sat, 01 Mar 2008) New Revision: 18277 Modified: trunk/freenet/src/freenet/node/PeerNode.java Log: If we have just added a node, its location will be blank. If we then don't send our location because we don't have its location, it will stay that way. Modified: trunk/freenet/src/freenet/node/PeerNode.java =================================================================== --- trunk/freenet/src/freenet/node/PeerNode.java 2008-03-01 00:02:38 UTC (rev 18276) +++ trunk/freenet/src/freenet/node/PeerNode.java 2008-03-01 00:26:34 UTC (rev 18277) @@ -1918,8 +1918,7 @@ Message dRouting = DMT.createRoutingStatus(!disableRoutingHasBeenSetLocally); try { - //FIXME: Why is location only if routable, and the others not? - if(isRoutable()) + if(isRealConnection()) sendAsync(locMsg, null, 0, null); sendAsync(ipMsg, null, 0, null); sendAsync(timeMsg, null, 0, null); From toad at freenetproject.org Sat Mar 1 01:50:43 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 01:50:43 +0000 (UTC) Subject: [freenet-cvs] r18278 - trunk/freenet/src/freenet/node Message-ID: <20080301015043.26CA347970D@freenetproject.org> Author: toad Date: 2008-03-01 01:50:42 +0000 (Sat, 01 Mar 2008) New Revision: 18278 Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java Log: Revert 18276: restore compatibility with nodes that send bothNoderefs still (most nodes...) Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java =================================================================== --- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 00:26:34 UTC (rev 18277) +++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 01:50:42 UTC (rev 18278) @@ -407,7 +407,7 @@ int dataLength = (byte1 << 8) + byte2; if(logMINOR) Logger.minor(this, "Data length: "+dataLength+" (1 = "+byte1+" 2 = "+byte2+ ')'); if(dataLength > length - (ivLength+hash.length+2)) { - if(logMINOR) Logger.minor(this, "Invalid data length "+dataLength+" ("+(length - (ivLength+hash.length+2))+") in tryProcessAuth"); + if(logMINOR) Logger.minor(this, "Invalid data length "+dataLength+" ("+(length - (ivLength+hash.length+2))+") in tryProcessAuthAnon"); SHA256.returnMessageDigest(md); return false; } @@ -425,7 +425,7 @@ processDecryptedAuthAnon(payload, peer); return true; } else { - if(logMINOR) Logger.minor(this, "Incorrect hash in tryProcessAuth for "+peer+" (length="+dataLength+"): \nreal hash="+HexUtil.bytesToHex(realHash)+"\n bad hash="+HexUtil.bytesToHex(hash)); + if(logMINOR) Logger.minor(this, "Incorrect hash in tryProcessAuthAnon for "+peer+" (length="+dataLength+"): \nreal hash="+HexUtil.bytesToHex(realHash)+"\n bad hash="+HexUtil.bytesToHex(hash)); return false; } } @@ -581,7 +581,8 @@ processJFKMessage2(payload, 4, pn, replyTo, true, setupType); } else if(packetType == 3) { // Phase 4 - processJFKMessage4(payload, 4, pn, replyTo, false, true, setupType); + if(!processJFKMessage4(payload, 4, pn, replyTo, false, true, setupType, true)) + processJFKMessage4(payload, 4, pn, replyTo, false, true, setupType, false); } else { Logger.error(this, "Invalid phase "+packetType+" for anonymous-initiator (we are the responder)"); } @@ -683,7 +684,8 @@ * using the same keys as in the previous message. * The signature is non-message recovering */ - processJFKMessage4(payload, 3, pn, replyTo, oldOpennetPeer, false, -1); + if(!processJFKMessage4(payload, 3, pn, replyTo, oldOpennetPeer, false, -1, true)) + processJFKMessage4(payload, 3, pn, replyTo, oldOpennetPeer, false, -1, false); } } else { Logger.error(this, "Decrypted auth packet but unknown negotiation type "+negType+" from "+replyTo+" possibly from "+pn); @@ -1127,8 +1129,7 @@ // Send reply sendJFKMessage4(1, 2, 3, nonceInitiator, nonceResponder,initiatorExponential, responderExponential, - c, Ke, Ka, authenticator, hisRef, pn, replyTo, unknownInitiator, setupType, !unknownInitiator); - // FIXME change last argument to FALSE when this build is mandatory. + c, Ke, Ka, authenticator, hisRef, pn, replyTo, unknownInitiator, setupType); c.initialize(Ks); @@ -1212,7 +1213,7 @@ * @param pn The PeerNode we are talking to. Cannot be null as we are the initiator. * @param replyTo The Peer we are replying to. */ - private boolean processJFKMessage4(byte[] payload, int inputOffset, PeerNode pn, Peer replyTo, boolean oldOpennetPeer, boolean unknownInitiator, int setupType) + private boolean processJFKMessage4(byte[] payload, int inputOffset, PeerNode pn, Peer replyTo, boolean oldOpennetPeer, boolean unknownInitiator, int setupType, boolean bothNoderefs) { final long t1 = System.currentTimeMillis(); if(logMINOR) Logger.minor(this, "Got a JFK(4) message, processing it - "+pn.getPeer()); @@ -1228,7 +1229,8 @@ final int expectedLength = HASH_LENGTH + // HMAC of the cyphertext (c.getBlockSize() >> 3) + // IV - HASH_LENGTH // the signature + HASH_LENGTH + // the signature + (bothNoderefs ? pn.jfkMyRef.length : 0) // my reference ; if(payload.length < expectedLength + 3) { Logger.error(this, "Packet too short from "+pn.getPeer()+": "+payload.length+" after decryption in JFK(4), should be "+(expectedLength + 3)); @@ -1276,7 +1278,7 @@ byte[] data = new byte[decypheredPayload.length - decypheredPayloadOffset]; System.arraycopy(decypheredPayload, decypheredPayloadOffset, data, 0, decypheredPayload.length - decypheredPayloadOffset); long bootID = Fields.bytesToLong(data); - byte[] hisRef = new byte[data.length - 8]; + byte[] hisRef = new byte[data.length - (bothNoderefs ? pn.jfkMyRef.length : 0) - 8]; System.arraycopy(data, 8, hisRef, 0, hisRef.length); // verify the signature @@ -1293,7 +1295,7 @@ System.arraycopy(pn.jfkMyRef, 0, locallyGeneratedText, bufferOffset, pn.jfkMyRef.length); byte[] messageHash = SHA256.digest(locallyGeneratedText); if(!DSA.verify(pn.peerPubKey, remoteSignature, new NativeBigInteger(1, messageHash), false)) { - Logger.error(this, "The signature verification has failed!! JFK(4) -"+pn.getPeer()+" message hash "+HexUtil.bytesToHex(messageHash)); + Logger.error(this, "The signature verification has failed!! JFK(4) -"+pn.getPeer()+" message hash "+HexUtil.bytesToHex(messageHash)+" length "+locallyGeneratedText.length+" hisRef "+hisRef.length+" hash "+Fields.hashCode(hisRef)+" myRef "+pn.jfkMyRef.length+" hash "+Fields.hashCode(pn.jfkMyRef)+" boot ID "+bootID); return false; } @@ -1477,7 +1479,7 @@ * @param pn The PeerNode to encrypt the auth packet to. Cannot be null, because even in anonymous initiator, * we will have created one before calling this method. */ - private void sendJFKMessage4(int version,int negType,int phase,byte[] nonceInitiator,byte[] nonceResponder,byte[] initiatorExponential,byte[] responderExponential, BlockCipher c, byte[] Ke, byte[] Ka, byte[] authenticator, byte[] hisRef, PeerNode pn, Peer replyTo, boolean unknownInitiator, int setupType, boolean bothNoderefs) + private void sendJFKMessage4(int version,int negType,int phase,byte[] nonceInitiator,byte[] nonceResponder,byte[] initiatorExponential,byte[] responderExponential, BlockCipher c, byte[] Ke, byte[] Ka, byte[] authenticator, byte[] hisRef, PeerNode pn, Peer replyTo, boolean unknownInitiator, int setupType) { if(logMINOR) Logger.minor(this, "Sending a JFK(4) message to "+pn.getPeer()); @@ -1491,9 +1493,10 @@ System.arraycopy(myRef, 0, data, 8, myRef.length); System.arraycopy(hisRef, 0, data, 8 + myRef.length, hisRef.length); - byte[] messageHash = SHA256.digest(assembleDHParams(nonceInitiator, nonceResponder, _initiatorExponential, _responderExponential, pn.identity, data)); + byte[] params = assembleDHParams(nonceInitiator, nonceResponder, _initiatorExponential, _responderExponential, pn.identity, data); + byte[] messageHash = SHA256.digest(params); if(logMINOR) - Logger.minor(this, "Message hash: "+HexUtil.bytesToHex(messageHash)); + Logger.minor(this, "Message hash: "+HexUtil.bytesToHex(messageHash)+" length "+params.length+" myRef: "+myRef.length+" hash "+Fields.hashCode(myRef)+" hisRef: "+hisRef.length+" hash "+Fields.hashCode(hisRef)+" boot ID "+node.bootID); DSASignature localSignature = crypto.sign(messageHash); byte[] r = localSignature.getRBytes(Node.SIGNATURE_PARAMETER_LENGTH); byte[] s = localSignature.getSBytes(Node.SIGNATURE_PARAMETER_LENGTH); @@ -1503,8 +1506,8 @@ byte[] iv=new byte[ivLength]; node.random.nextBytes(iv); pk.reset(iv); - // If !bothNoderefs, then don't include the last bit - int dataLength = data.length - (bothNoderefs ? 0 : hisRef.length); + // Don't include the last bit + int dataLength = data.length - hisRef.length; byte[] cyphertext = new byte[JFK_PREFIX_RESPONDER.length + ivLength + Node.SIGNATURE_PARAMETER_LENGTH * 2 + dataLength]; int cleartextOffset = 0; From toad at freenetproject.org Sat Mar 1 02:00:03 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 02:00:03 +0000 (UTC) Subject: [freenet-cvs] r18279 - trunk/freenet/src/freenet/node Message-ID: <20080301020003.86EA0479811@freenetproject.org> Author: toad Date: 2008-03-01 02:00:03 +0000 (Sat, 01 Mar 2008) New Revision: 18279 Modified: trunk/freenet/src/freenet/node/PeerManager.java Log: Don't break new connections - add to connectedPeers if isConnected && isRealConnection. Otherwise we get nasty breakage e.g. not adding because it hasn't got a location yet. Modified: trunk/freenet/src/freenet/node/PeerManager.java =================================================================== --- trunk/freenet/src/freenet/node/PeerManager.java 2008-03-01 01:50:42 UTC (rev 18278) +++ trunk/freenet/src/freenet/node/PeerManager.java 2008-03-01 02:00:03 UTC (rev 18279) @@ -373,10 +373,14 @@ public void addConnectedPeer(PeerNode pn) { logMINOR = Logger.shouldLog(Logger.MINOR, this); - if(!pn.isRoutable()) { - if(logMINOR) Logger.minor(this, "Not ReallyConnected: "+pn); + if(!pn.isRealConnection()) { + if(logMINOR) Logger.minor(this, "Not a real connection: "+pn); return; } + if(!pn.isConnected()) { + if(logMINOR) Logger.minor(this, "Not connected: "+pn); + return; + } synchronized(this) { for(int i=0;i Author: toad Date: 2008-03-01 02:00:37 +0000 (Sat, 01 Mar 2008) New Revision: 18280 Modified: trunk/freenet/src/freenet/node/NodeDispatcher.java Log: Accept a LocChangeNotification even when we don't have a location yet. (DUHHHH!!) Modified: trunk/freenet/src/freenet/node/NodeDispatcher.java =================================================================== --- trunk/freenet/src/freenet/node/NodeDispatcher.java 2008-03-01 02:00:03 UTC (rev 18279) +++ trunk/freenet/src/freenet/node/NodeDispatcher.java 2008-03-01 02:00:37 UTC (rev 18280) @@ -121,16 +121,16 @@ } // We claim it in any case return true; + } else if(source.isRealConnection() && spec == DMT.FNPLocChangeNotification) { + double newLoc = m.getDouble(DMT.LOCATION); + source.updateLocation(newLoc); + return true; } - + if(!source.isRoutable()) return false; if(Logger.shouldLog(Logger.DEBUG, this)) Logger.debug(this, "Not routable"); - if(spec == DMT.FNPLocChangeNotification) { - double newLoc = m.getDouble(DMT.LOCATION); - source.updateLocation(newLoc); - return true; - } else if(spec == DMT.FNPNetworkID) { + if(spec == DMT.FNPNetworkID) { source.handleFNPNetworkID(m); return true; } else if(spec == DMT.FNPSwapRequest) { From toad at freenetproject.org Sat Mar 1 02:12:21 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 02:12:21 +0000 (UTC) Subject: [freenet-cvs] r18281 - trunk/freenet/src/freenet/node Message-ID: <20080301021221.5BE98479828@freenetproject.org> Author: toad Date: 2008-03-01 02:12:20 +0000 (Sat, 01 Mar 2008) New Revision: 18281 Modified: trunk/freenet/src/freenet/node/PeerManager.java Log: Fix another case where a connection could get removed from the connected list just because it hasn't got a location yet. Modified: trunk/freenet/src/freenet/node/PeerManager.java =================================================================== --- trunk/freenet/src/freenet/node/PeerManager.java 2008-03-01 02:00:37 UTC (rev 18280) +++ trunk/freenet/src/freenet/node/PeerManager.java 2008-03-01 02:12:20 UTC (rev 18281) @@ -309,7 +309,7 @@ // removing from connectedPeers ArrayList a = new ArrayList(); for(int i=0;i Author: toad Date: 2008-03-01 02:14:55 +0000 (Sat, 01 Mar 2008) New Revision: 18282 Modified: trunk/freenet/src/freenet/node/Version.java Log: 1118: Link layer: - Fix various bugs causing nodes to not exchange locations (not to use the FNPLocChangeNotification, not to send it, etc) and therefore causing connections to new nodes to fail. - The criteria to be on the connected peers list is not that it be routable, it's now that it is a real connection and is connected. This appears to be necessary for new connections (as above) to work. - Don't send JFK(4)'s with bothNoderefs, even if we are doing a normal darknet/opennet connection. Remove the code to send them. - Keep the code to parse bothNoderefs JFK(4)'s, and fix a bug breaking one-noderef JFK(4)'s if pn.jfkMyRef hasn't been set (it should be, but it's not essential). - Don't include physical.udp, ark.number and ark.pubURI in for-setup noderefs, they will be passed across later via an N2NTM. Congestion control: - Report the correct number of bytes (1024, not 1137) to the master throttle, for both block and bulk transfers. - Token buckets: Don't allow force-grabbing a negative number of tokens. Log an error if this happens. Dev stuff: - PeerNode.isLocalAddress(): trivial simplification. - Trivial clarifications. - Logging. toad zothar Modified: trunk/freenet/src/freenet/node/Version.java =================================================================== --- trunk/freenet/src/freenet/node/Version.java 2008-03-01 02:12:20 UTC (rev 18281) +++ trunk/freenet/src/freenet/node/Version.java 2008-03-01 02:14:55 UTC (rev 18282) @@ -24,11 +24,11 @@ public static final String protocolVersion = "1.0"; /** The build number of the current revision */ - private static final int buildNumber = 1117; + private static final int buildNumber = 1118; /** Oldest build of Fred we will talk to */ private static final int oldLastGoodBuild = 1113; - private static final int newLastGoodBuild = 1117; + private static final int newLastGoodBuild = 1118; static final long transitionTime; static { From toad at freenetproject.org Sat Mar 1 12:18:07 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 12:18:07 +0000 (UTC) Subject: [freenet-cvs] r18283 - trunk/freenet/src/freenet/clients/http Message-ID: <20080301121807.D5566479619@freenetproject.org> Author: toad Date: 2008-03-01 12:18:07 +0000 (Sat, 01 Mar 2008) New Revision: 18283 Modified: trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java Log: If there are SSK replies / CHK replies running, show that fact, even if nothing else is. Modified: trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java =================================================================== --- trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java 2008-03-01 02:14:55 UTC (rev 18282) +++ trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java 2008-03-01 12:18:07 UTC (rev 18283) @@ -826,7 +826,8 @@ if ((numInserts == 0) && (numRequests == 0) && (numTransferringRequests == 0) && (numCHKRequests == 0) && (numSSKRequests == 0) && (numCHKInserts == 0) && (numSSKInserts == 0) && - (numTransferringRequestHandlers == 0)) { + (numTransferringRequestHandlers == 0) && + (numCHKOfferReplys == 0) && (numSSKOfferReplys == 0)) { activityInfoboxContent.addChild("#", l10n("noRequests")); return null; } else { From toad at freenetproject.org Sat Mar 1 12:20:11 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 12:20:11 +0000 (UTC) Subject: [freenet-cvs] r18284 - trunk/freenet/src/freenet/node Message-ID: <20080301122011.469B0479619@freenetproject.org> Author: toad Date: 2008-03-01 12:20:11 +0000 (Sat, 01 Mar 2008) New Revision: 18284 Modified: trunk/freenet/src/freenet/node/NodeStats.java Log: Log the number of offer replies running Modified: trunk/freenet/src/freenet/node/NodeStats.java =================================================================== --- trunk/freenet/src/freenet/node/NodeStats.java 2008-03-01 12:18:07 UTC (rev 18283) +++ trunk/freenet/src/freenet/node/NodeStats.java 2008-03-01 12:20:11 UTC (rev 18284) @@ -449,7 +449,7 @@ int numCHKOfferReplies = node.getNumCHKOfferReplies() + 1; int numSSKOfferReplies = node.getNumSSKOfferReplies() + 1; if(logMINOR) - Logger.minor(this, "Running (adjusted): CHK fetch "+numCHKRequests+" SSK fetch "+numSSKRequests+" CHK insert "+numCHKInserts+" SSK insert "+numSSKInserts); + Logger.minor(this, "Running (adjusted): CHK fetch "+numCHKRequests+" SSK fetch "+numSSKRequests+" CHK insert "+numCHKInserts+" SSK insert "+numSSKInserts+" CHK offer replies "+numCHKOfferReplies+" SSK offer replies "+numSSKOfferReplies); double bandwidthLiabilityOutput = successfulChkFetchBytesSentAverage.currentValue() * numCHKRequests + From toad at freenetproject.org Sat Mar 1 12:37:18 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 12:37:18 +0000 (UTC) Subject: [freenet-cvs] r18285 - trunk/freenet/src/freenet/node Message-ID: <20080301123718.7389C479700@freenetproject.org> Author: toad Date: 2008-03-01 12:37:17 +0000 (Sat, 01 Mar 2008) New Revision: 18285 Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java Log: Prevent NegativeArrayIndex Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java =================================================================== --- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 12:20:11 UTC (rev 18284) +++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 12:37:17 UTC (rev 18285) @@ -1230,7 +1230,8 @@ final int expectedLength = HASH_LENGTH + // HMAC of the cyphertext (c.getBlockSize() >> 3) + // IV HASH_LENGTH + // the signature - (bothNoderefs ? pn.jfkMyRef.length : 0) // my reference + (bothNoderefs ? pn.jfkMyRef.length : 0) + // my reference + 8 // bootID ; if(payload.length < expectedLength + 3) { Logger.error(this, "Packet too short from "+pn.getPeer()+": "+payload.length+" after decryption in JFK(4), should be "+(expectedLength + 3)); From toad at freenetproject.org Sat Mar 1 14:02:28 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 14:02:28 +0000 (UTC) Subject: [freenet-cvs] r18286 - trunk/freenet/src/freenet/node Message-ID: <20080301140228.4EB38479759@freenetproject.org> Author: toad Date: 2008-03-01 14:02:28 +0000 (Sat, 01 Mar 2008) New Revision: 18286 Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java Log: Prevent NegativeArrayIndexException's. Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java =================================================================== --- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 12:37:17 UTC (rev 18285) +++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 14:02:28 UTC (rev 18286) @@ -1229,12 +1229,13 @@ final int expectedLength = HASH_LENGTH + // HMAC of the cyphertext (c.getBlockSize() >> 3) + // IV - HASH_LENGTH + // the signature + Node.SIGNATURE_PARAMETER_LENGTH * 2 + // the signature (bothNoderefs ? pn.jfkMyRef.length : 0) + // my reference 8 // bootID ; - if(payload.length < expectedLength + 3) { - Logger.error(this, "Packet too short from "+pn.getPeer()+": "+payload.length+" after decryption in JFK(4), should be "+(expectedLength + 3)); + if(payload.length - inputOffset < expectedLength + 3) { + if(!bothNoderefs) + Logger.error(this, "Packet too short from "+pn.getPeer()+": "+payload.length+" after decryption in JFK(4), should be "+(expectedLength + 3)); return false; } byte[] jfkBuffer = pn.getJFKBuffer(); @@ -1279,6 +1280,10 @@ byte[] data = new byte[decypheredPayload.length - decypheredPayloadOffset]; System.arraycopy(decypheredPayload, decypheredPayloadOffset, data, 0, decypheredPayload.length - decypheredPayloadOffset); long bootID = Fields.bytesToLong(data); + if(data.length - (bothNoderefs ? pn.jfkMyRef.length : 0) - 8 < 0) { + Logger.error(this, "No space for hisRef: bothNoderefs="+bothNoderefs+" data.length="+data.length+" myRef.length="+(pn.jfkMyRef==null?0:pn.jfkMyRef.length)+" orig data length "+(payload.length-inputOffset)); + return false; + } byte[] hisRef = new byte[data.length - (bothNoderefs ? pn.jfkMyRef.length : 0) - 8]; System.arraycopy(data, 8, hisRef, 0, hisRef.length); From toad at freenetproject.org Sat Mar 1 14:52:59 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 14:52:59 +0000 (UTC) Subject: [freenet-cvs] r18287 - trunk/freenet/src/freenet/node Message-ID: <20080301145259.12EE7478992@freenetproject.org> Author: toad Date: 2008-03-01 14:52:58 +0000 (Sat, 01 Mar 2008) New Revision: 18287 Modified: trunk/freenet/src/freenet/node/NodeDispatcher.java Log: DOH DOH DOH DOH DOH DOH DOH DOH DOH!!! Unlock UID when we reject a GetOfferedKey. This bug was causing pInstantReject -> 100% despite no running requests (actually there were running SSK offers... except they weren't running, they were rejected!) Modified: trunk/freenet/src/freenet/node/NodeDispatcher.java =================================================================== --- trunk/freenet/src/freenet/node/NodeDispatcher.java 2008-03-01 14:02:28 UTC (rev 18286) +++ trunk/freenet/src/freenet/node/NodeDispatcher.java 2008-03-01 14:52:58 UTC (rev 18287) @@ -217,6 +217,7 @@ } catch (NotConnectedException e) { Logger.normal(this, "Rejecting (overload) data request from "+source.getPeer()+": "+e); } + node.unlockUID(uid, isSSK, false, false, true); return true; } From toad at freenetproject.org Sat Mar 1 15:23:47 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 15:23:47 +0000 (UTC) Subject: [freenet-cvs] r18288 - trunk/freenet/src/freenet/node Message-ID: <20080301152347.8CE9C479759@freenetproject.org> Author: toad Date: 2008-03-01 15:23:47 +0000 (Sat, 01 Mar 2008) New Revision: 18288 Modified: trunk/freenet/src/freenet/node/Version.java Log: 1119: Link level: - Fix NegativeArrayIndex in FNPPacketMangler.processJFKMessage when trying to process a non-bothNoderefs packet as a bothNoderefs packet. Load management: - Unlock UID when we reject a GetOfferedKey. This bug was causing pInstantReject -> 100% despite no running requests (actually there were running SSK offers... except they weren't running, they were rejected!) Stats: - Show CHK/SSK replies even if nothing else is running. - Log CHK/SSK replies with NodeStats logging. toad Sorry for all the recent mess. :( Various bugfixes and removal-of-obsolete-code and relatively minor changes triggered or introduced serious although often small bugs... Please upgrade, 1118 is seriously broken. Modified: trunk/freenet/src/freenet/node/Version.java =================================================================== --- trunk/freenet/src/freenet/node/Version.java 2008-03-01 14:52:58 UTC (rev 18287) +++ trunk/freenet/src/freenet/node/Version.java 2008-03-01 15:23:47 UTC (rev 18288) @@ -24,11 +24,11 @@ public static final String protocolVersion = "1.0"; /** The build number of the current revision */ - private static final int buildNumber = 1118; + private static final int buildNumber = 1119; /** Oldest build of Fred we will talk to */ private static final int oldLastGoodBuild = 1113; - private static final int newLastGoodBuild = 1118; + private static final int newLastGoodBuild = 1119; static final long transitionTime; static { From toad at freenetproject.org Sat Mar 1 15:33:25 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 15:33:25 +0000 (UTC) Subject: [freenet-cvs] r18289 - trunk/freenet/src/freenet/clients/http Message-ID: <20080301153325.C48D847984E@freenetproject.org> Author: toad Date: 2008-03-01 15:33:25 +0000 (Sat, 01 Mar 2008) New Revision: 18289 Modified: trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java Log: Show the current node location in the swap stats box. Modified: trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java =================================================================== --- trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java 2008-03-01 15:23:47 UTC (rev 18288) +++ trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java 2008-03-01 15:33:25 UTC (rev 18289) @@ -600,6 +600,7 @@ private void drawSwapStatsBox(HTMLNode locationSwapInfobox, long nodeUptimeSeconds, double swaps, double noSwaps) { locationSwapInfobox.addChild("div", "class", "infobox-header", "Location swaps"); + double location = node.getLocation(); int startedSwaps = node.getStartedSwaps(); int swapsRejectedAlreadyLocked = node.getSwapsRejectedAlreadyLocked(); int swapsRejectedNowhereToGo = node.getSwapsRejectedNowhereToGo(); @@ -612,6 +613,7 @@ HTMLNode locationSwapInfoboxContent = locationSwapInfobox.addChild("div", "class", "infobox-content"); HTMLNode locationSwapList = locationSwapInfoboxContent.addChild("ul"); + locationSwapList.addChild("li", "location:\u00a0" + location); if (swaps > 0.0) { locationSwapList.addChild("li", "locChangeSession:\u00a0" + fix1p6sci.format(locChangeSession)); locationSwapList.addChild("li", "locChangePerSwap:\u00a0" + fix1p6sci.format(locChangeSession/swaps)); From toad at freenetproject.org Sat Mar 1 17:53:41 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 17:53:41 +0000 (UTC) Subject: [freenet-cvs] r18290 - trunk/freenet/src/freenet/support/io Message-ID: <20080301175341.3BA1E479899@freenetproject.org> Author: toad Date: 2008-03-01 17:53:41 +0000 (Sat, 01 Mar 2008) New Revision: 18290 Modified: trunk/freenet/src/freenet/support/io/BucketTools.java Log: Better error message. Modified: trunk/freenet/src/freenet/support/io/BucketTools.java =================================================================== --- trunk/freenet/src/freenet/support/io/BucketTools.java 2008-03-01 15:33:25 UTC (rev 18289) +++ trunk/freenet/src/freenet/support/io/BucketTools.java 2008-03-01 17:53:41 UTC (rev 18290) @@ -284,7 +284,7 @@ if(bytes <= 0) { if(truncateLength == Long.MAX_VALUE) break; - throw new IOException("Could not move required quantity of data: "+bytes+" (moved "+moved+" of "+truncateLength+"): unable to read from "+is); + throw new IOException("Could not move required quantity of data in copyTo: "+bytes+" (moved "+moved+" of "+truncateLength+"): unable to read from "+is); } os.write(buf, 0, bytes); moved += bytes; @@ -310,7 +310,7 @@ if(bytes <= 0) { if(truncateLength == Long.MAX_VALUE) break; - throw new IOException("Could not move required quantity of data: "+bytes+" (moved "+moved+" of "+truncateLength+"): unable to read from "+is); + throw new IOException("Could not move required quantity of data in copyFrom: "+bytes+" (moved "+moved+" of "+truncateLength+"): unable to read from "+is); } os.write(buf, 0, bytes); moved += bytes; From mrogers at freenetproject.org Sat Mar 1 18:41:41 2008 From: mrogers at freenetproject.org (mrogers at freenetproject.org) Date: Sat, 1 Mar 2008 18:41:41 +0000 (UTC) Subject: [freenet-cvs] r18291 - in trunk/apps/load-balancing-sims/phase7: . sim sim/clients sim/handlers sim/messages Message-ID: <20080301184141.35D3D478182@freenetproject.org> Author: mrogers Date: 2008-03-01 18:41:40 +0000 (Sat, 01 Mar 2008) New Revision: 18291 Modified: trunk/apps/load-balancing-sims/phase7/choplog trunk/apps/load-balancing-sims/phase7/sim/CongestionWindow.java trunk/apps/load-balancing-sims/phase7/sim/DeadlineQueue.java trunk/apps/load-balancing-sims/phase7/sim/Event.java trunk/apps/load-balancing-sims/phase7/sim/EventTarget.java trunk/apps/load-balancing-sims/phase7/sim/LruCache.java trunk/apps/load-balancing-sims/phase7/sim/LruMap.java trunk/apps/load-balancing-sims/phase7/sim/Network.java trunk/apps/load-balancing-sims/phase7/sim/NetworkInterface.java trunk/apps/load-balancing-sims/phase7/sim/Node.java trunk/apps/load-balancing-sims/phase7/sim/Packet.java trunk/apps/load-balancing-sims/phase7/sim/Peer.java trunk/apps/load-balancing-sims/phase7/sim/SearchThrottle.java trunk/apps/load-balancing-sims/phase7/sim/Sim.java trunk/apps/load-balancing-sims/phase7/sim/TokenBucket.java trunk/apps/load-balancing-sims/phase7/sim/TokenTest.java trunk/apps/load-balancing-sims/phase7/sim/clients/Client.java trunk/apps/load-balancing-sims/phase7/sim/clients/SimplePublisher.java trunk/apps/load-balancing-sims/phase7/sim/handlers/ChkInsertHandler.java trunk/apps/load-balancing-sims/phase7/sim/handlers/ChkRequestHandler.java trunk/apps/load-balancing-sims/phase7/sim/handlers/MessageHandler.java trunk/apps/load-balancing-sims/phase7/sim/handlers/RequestHandler.java trunk/apps/load-balancing-sims/phase7/sim/handlers/SskInsertHandler.java trunk/apps/load-balancing-sims/phase7/sim/handlers/SskRequestHandler.java trunk/apps/load-balancing-sims/phase7/sim/messages/Accepted.java trunk/apps/load-balancing-sims/phase7/sim/messages/Block.java trunk/apps/load-balancing-sims/phase7/sim/messages/ChkDataFound.java trunk/apps/load-balancing-sims/phase7/sim/messages/ChkInsert.java trunk/apps/load-balancing-sims/phase7/sim/messages/ChkRequest.java trunk/apps/load-balancing-sims/phase7/sim/messages/DataInsert.java trunk/apps/load-balancing-sims/phase7/sim/messages/DataNotFound.java trunk/apps/load-balancing-sims/phase7/sim/messages/InsertReply.java trunk/apps/load-balancing-sims/phase7/sim/messages/Message.java trunk/apps/load-balancing-sims/phase7/sim/messages/RejectedLoop.java trunk/apps/load-balancing-sims/phase7/sim/messages/RejectedOverload.java trunk/apps/load-balancing-sims/phase7/sim/messages/RouteNotFound.java trunk/apps/load-balancing-sims/phase7/sim/messages/Search.java trunk/apps/load-balancing-sims/phase7/sim/messages/SskAccepted.java trunk/apps/load-balancing-sims/phase7/sim/messages/SskDataFound.java trunk/apps/load-balancing-sims/phase7/sim/messages/SskInsert.java trunk/apps/load-balancing-sims/phase7/sim/messages/SskPubKey.java trunk/apps/load-balancing-sims/phase7/sim/messages/SskRequest.java trunk/apps/load-balancing-sims/phase7/sim/messages/Token.java trunk/apps/load-balancing-sims/phase7/sim/messages/TransfersCompleted.java Log: Copyright messages (finally!) and a few cleanups Modified: trunk/apps/load-balancing-sims/phase7/choplog =================================================================== --- trunk/apps/load-balancing-sims/phase7/choplog 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/choplog 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,4 +1,5 @@ #!/usr/bin/perl +# This software has been placed in the public domain by its author while () { split ' '; print unless ($_[0] < $ARGV[0]); Modified: trunk/apps/load-balancing-sims/phase7/sim/CongestionWindow.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/CongestionWindow.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/CongestionWindow.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // AIMD congestion control package sim; Modified: trunk/apps/load-balancing-sims/phase7/sim/DeadlineQueue.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/DeadlineQueue.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/DeadlineQueue.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // A queue storing outgoing messages and their coalescing deadlines package sim; Modified: trunk/apps/load-balancing-sims/phase7/sim/Event.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/Event.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/Event.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim; import java.util.TreeSet; // Gotta love the collections framework... @@ -7,8 +9,8 @@ private static TreeSet queue = new TreeSet(); private static double now = 0.0; - private static double lastLogTime = Double.POSITIVE_INFINITY; - private static int nextId = 0; + private static int nextId = 0, currentId = -1, lastLogId = -1; + private static int nextCode = 0; // Unique event codes public static double duration = Double.POSITIVE_INFINITY; public static boolean blankLine = false; // Blank line between events? @@ -16,15 +18,16 @@ { queue.clear(); now = 0.0; - lastLogTime = Double.POSITIVE_INFINITY; nextId = 0; + currentId = -1; + lastLogId = -1; duration = Double.POSITIVE_INFINITY; } public static void schedule (EventTarget target, double delay, - int type, Object data) + int code, Object data) { - queue.add (new Event (target, delay + now, type, data)); + queue.add (new Event (target, delay + now, code, data)); } public static boolean nextEvent() @@ -39,8 +42,9 @@ // Update the clock now = e.time; // Pass the packet to the target's callback method + currentId = e.id; queue.remove (e); - e.target.handleEvent (e.type, e.data); + e.target.handleEvent (e.code, e.data); return true; } catch (java.util.NoSuchElementException x) { @@ -54,11 +58,16 @@ return now; } + public static int code() + { + return nextCode++; + } + public static void log (String message) { // Print a blank line between events - if (blankLine && now > lastLogTime) System.out.println(); - lastLogTime = now; + if (blankLine && currentId > lastLogId) System.out.println(); + lastLogId = currentId; System.out.print (now + " " + message + "\n"); } @@ -73,14 +82,14 @@ private EventTarget target; private double time; private int id; - private int type; + private int code; private Object data; - private Event (EventTarget target, double time, int type, Object data) + private Event (EventTarget target, double time, int code, Object data) { this.target = target; this.time = time; - this.type = type; + this.code = code; this.data = data; id = nextId++; } Modified: trunk/apps/load-balancing-sims/phase7/sim/EventTarget.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/EventTarget.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/EventTarget.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim; public interface EventTarget @@ -2,3 +4,3 @@ { - public void handleEvent (int type, Object data); + public void handleEvent (int code, Object data); } Modified: trunk/apps/load-balancing-sims/phase7/sim/LruCache.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/LruCache.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/LruCache.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // Limited-capacity LRU cache package sim; Modified: trunk/apps/load-balancing-sims/phase7/sim/LruMap.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/LruMap.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/LruMap.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // Limited-capacity LRU cache that stores a value for each key package sim; Modified: trunk/apps/load-balancing-sims/phase7/sim/Network.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/Network.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/Network.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim; import java.util.HashMap; Modified: trunk/apps/load-balancing-sims/phase7/sim/NetworkInterface.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/NetworkInterface.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/NetworkInterface.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // A node's low-level network interface package sim; @@ -104,24 +106,14 @@ } // EventTarget interface - public void handleEvent (int type, Object data) + public void handleEvent (int code, Object data) { - switch (type) { - case RX_QUEUE: - rxQueueAdd ((Packet) data); - break; - - case RX_END: - rxEnd ((Packet) data); - break; - - case TX_END: - txEnd ((Packet) data); - break; - } + if (code == RX_QUEUE) rxQueueAdd ((Packet) data); + else if (code == RX_END) rxEnd ((Packet) data); + else if (code == TX_END) txEnd ((Packet) data); } - public final static int RX_QUEUE = 1; - private final static int RX_END = 2; - private final static int TX_END = 3; + public final static int RX_QUEUE = Event.code(); + private final static int RX_END = Event.code(); + private final static int TX_END = Event.code(); } Modified: trunk/apps/load-balancing-sims/phase7/sim/Node.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/Node.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/Node.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim; import sim.clients.Client; import sim.handlers.*; @@ -636,49 +638,32 @@ } // EventTarget interface - public void handleEvent (int type, Object data) + public void handleEvent (int code, Object data) { - switch (type) { - case REQUEST_CHK: + if (code == REQUEST_CHK) generateChkRequest ((Integer) data); - break; - - case INSERT_CHK: + else if (code == INSERT_CHK) generateChkInsert ((Integer) data, null); - break; - - case REQUEST_SSK: + else if (code == REQUEST_SSK) generateSskRequest ((Integer) data); - break; - - case INSERT_SSK: + else if (code == INSERT_SSK) generateSskInsert ((Integer) data, 0, null); - break; - - case SSK_COLLISION: + else if (code == SSK_COLLISION) generateSskInsert ((Integer) data, 1, null); - break; - - case ALLOCATE_TOKENS: + else if (code == ALLOCATE_TOKENS) allocateTokens(); - break; - - case SEND_SEARCH: + else if (code == SEND_SEARCH) sendSearch(); - break; - - case TIMER: + else if (code == TIMER) timer(); - break; - } } - public final static int REQUEST_CHK = 1; - public final static int INSERT_CHK = 2; - public final static int REQUEST_SSK = 3; - public final static int INSERT_SSK = 4; - public final static int SSK_COLLISION = 5; - private final static int ALLOCATE_TOKENS = 6; - private final static int SEND_SEARCH = 7; - private final static int TIMER = 8; + public final static int REQUEST_CHK = Event.code(); + public final static int INSERT_CHK = Event.code(); + public final static int REQUEST_SSK = Event.code(); + public final static int INSERT_SSK = Event.code(); + public final static int SSK_COLLISION = Event.code(); + private final static int ALLOCATE_TOKENS = Event.code(); + private final static int SEND_SEARCH = Event.code(); + private final static int TIMER = Event.code(); } Modified: trunk/apps/load-balancing-sims/phase7/sim/Packet.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/Packet.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/Packet.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // A low-level packet (as opposed to a high-level message) package sim; Modified: trunk/apps/load-balancing-sims/phase7/sim/Peer.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/Peer.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/Peer.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim; import sim.messages.*; import java.util.LinkedList; Modified: trunk/apps/load-balancing-sims/phase7/sim/SearchThrottle.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/SearchThrottle.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/SearchThrottle.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // An AIMD leaky bucket package sim; Modified: trunk/apps/load-balancing-sims/phase7/sim/Sim.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/Sim.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/Sim.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim; import sim.clients.SimplePublisher; @@ -92,14 +94,14 @@ new Sim().run (load / 60.0); } - public void handleEvent (int type, Object data) + public void handleEvent (int code, Object data) { - if (type == RESET_COUNTERS) { + if (code == RESET_COUNTERS) { Node.succeededLocally = 0; Node.succeededRemotely = 0; Node.failed = 0; } } - private final static int RESET_COUNTERS = 1; + private final static int RESET_COUNTERS = Event.code(); } Modified: trunk/apps/load-balancing-sims/phase7/sim/TokenBucket.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/TokenBucket.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/TokenBucket.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim; class TokenBucket Modified: trunk/apps/load-balancing-sims/phase7/sim/TokenTest.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/TokenTest.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/TokenTest.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim; class TokenTest Modified: trunk/apps/load-balancing-sims/phase7/sim/clients/Client.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/clients/Client.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/clients/Client.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.clients; import sim.messages.Search; Modified: trunk/apps/load-balancing-sims/phase7/sim/clients/SimplePublisher.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/clients/SimplePublisher.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/clients/SimplePublisher.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // A simple publisher that inserts keys using a Poisson process and informs // each reader after an average of ten minutes @@ -79,10 +81,10 @@ // EventTarget interface - public void handleEvent (int type, Object data) + public void handleEvent (int code, Object data) { - if (type == PUBLISH) publish(); + if (code == PUBLISH) publish(); } - private final static int PUBLISH = 1; + private final static int PUBLISH = Event.code(); } Modified: trunk/apps/load-balancing-sims/phase7/sim/handlers/ChkInsertHandler.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/handlers/ChkInsertHandler.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/handlers/ChkInsertHandler.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // The state of a CHK insert as stored at each node along the path package sim.handlers; @@ -206,34 +208,23 @@ } // EventTarget interface - public void handleEvent (int type, Object data) + public void handleEvent (int code, Object data) { - switch (type) { - case ACCEPTED_TIMEOUT: + if (code == ACCEPTED_TIMEOUT) acceptedTimeout ((Peer) data); - break; - - case SEARCH_TIMEOUT: + else if (code == SEARCH_TIMEOUT) searchTimeout ((Peer) data); - break; - - case DATA_TIMEOUT: + else if (code == DATA_TIMEOUT) dataTimeout(); - break; - - case TRANSFER_IN_TIMEOUT: + else if (code == TRANSFER_IN_TIMEOUT) transferInTimeout(); - break; - - case TRANSFER_OUT_TIMEOUT: + else if (code == TRANSFER_OUT_TIMEOUT) transferOutTimeout ((Peer) data); - break; - } } - private final static int ACCEPTED_TIMEOUT = 1; - private final static int SEARCH_TIMEOUT = 2; - private final static int DATA_TIMEOUT = 3; - private final static int TRANSFER_IN_TIMEOUT = 4; - private final static int TRANSFER_OUT_TIMEOUT = 5; + private final static int ACCEPTED_TIMEOUT = Event.code(); + private final static int SEARCH_TIMEOUT = Event.code(); + private final static int DATA_TIMEOUT = Event.code(); + private final static int TRANSFER_IN_TIMEOUT = Event.code(); + private final static int TRANSFER_OUT_TIMEOUT = Event.code(); } Modified: trunk/apps/load-balancing-sims/phase7/sim/handlers/ChkRequestHandler.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/handlers/ChkRequestHandler.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/handlers/ChkRequestHandler.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // The state of a CHK request as stored at each node along the path package sim.handlers; Modified: trunk/apps/load-balancing-sims/phase7/sim/handlers/MessageHandler.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/handlers/MessageHandler.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/handlers/MessageHandler.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // The state of a search as stored at each node along the path package sim.handlers; Modified: trunk/apps/load-balancing-sims/phase7/sim/handlers/RequestHandler.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/handlers/RequestHandler.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/handlers/RequestHandler.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // The parent class of ChkRequestHandler and SskRequestHandler package sim.handlers; @@ -71,24 +73,17 @@ } // EventTarget interface - public void handleEvent (int type, Object data) + public void handleEvent (int code, Object data) { - switch (type) { - case ACCEPTED_TIMEOUT: + if (code == ACCEPTED_TIMEOUT) acceptedTimeout ((Peer) data); - break; - - case SEARCH_TIMEOUT: + else if (code == SEARCH_TIMEOUT) searchTimeout ((Peer) data); - break; - - case TRANSFER_TIMEOUT: + else if (code == TRANSFER_TIMEOUT) transferTimeout ((Peer) data); - break; - } } - protected final static int ACCEPTED_TIMEOUT = 1; - protected final static int SEARCH_TIMEOUT = 2; - protected final static int TRANSFER_TIMEOUT = 3; + protected final static int ACCEPTED_TIMEOUT = Event.code(); + protected final static int SEARCH_TIMEOUT = Event.code(); + protected final static int TRANSFER_TIMEOUT = Event.code(); } Modified: trunk/apps/load-balancing-sims/phase7/sim/handlers/SskInsertHandler.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/handlers/SskInsertHandler.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/handlers/SskInsertHandler.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // The state of an SSK insert as stored at each node along the path package sim.handlers; @@ -161,24 +163,17 @@ } // EventTarget interface - public void handleEvent (int type, Object data) + public void handleEvent (int code, Object data) { - switch (type) { - case KEY_TIMEOUT: + if (code == KEY_TIMEOUT) keyTimeout(); - break; - - case ACCEPTED_TIMEOUT: + else if (code == ACCEPTED_TIMEOUT) acceptedTimeout ((Peer) data); - break; - - case SEARCH_TIMEOUT: + else if (code == SEARCH_TIMEOUT) searchTimeout ((Peer) data); - break; - } } - private final static int KEY_TIMEOUT = 1; - private final static int ACCEPTED_TIMEOUT = 2; - private final static int SEARCH_TIMEOUT = 3; + private final static int KEY_TIMEOUT = Event.code(); + private final static int ACCEPTED_TIMEOUT = Event.code(); + private final static int SEARCH_TIMEOUT = Event.code(); } Modified: trunk/apps/load-balancing-sims/phase7/sim/handlers/SskRequestHandler.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/handlers/SskRequestHandler.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/handlers/SskRequestHandler.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // The state of an SSK request as stored at each node along the path package sim.handlers; Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/Accepted.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/Accepted.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/Accepted.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class Accepted extends Message Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/Block.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/Block.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/Block.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // A single block of a multi-block transfer (currently 32 blocks per transfer) package sim.messages; Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/ChkDataFound.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/ChkDataFound.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/ChkDataFound.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class ChkDataFound extends Message Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/ChkInsert.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/ChkInsert.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/ChkInsert.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; import sim.clients.Client; Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/ChkRequest.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/ChkRequest.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/ChkRequest.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class ChkRequest extends Search Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/DataInsert.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/DataInsert.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/DataInsert.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class DataInsert extends Message Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/DataNotFound.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/DataNotFound.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/DataNotFound.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class DataNotFound extends Message Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/InsertReply.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/InsertReply.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/InsertReply.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class InsertReply extends Message Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/Message.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/Message.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/Message.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + // A high-level message (as opposed to a low-level packet) package sim.messages; Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/RejectedLoop.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/RejectedLoop.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/RejectedLoop.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class RejectedLoop extends Message Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/RejectedOverload.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/RejectedOverload.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/RejectedOverload.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class RejectedOverload extends Message Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/RouteNotFound.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/RouteNotFound.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/RouteNotFound.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class RouteNotFound extends Message Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/Search.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/Search.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/Search.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; import sim.clients.Client; Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/SskAccepted.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/SskAccepted.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/SskAccepted.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class SskAccepted extends Message Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/SskDataFound.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/SskDataFound.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/SskDataFound.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class SskDataFound extends Message Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/SskInsert.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/SskInsert.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/SskInsert.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; import sim.clients.Client; Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/SskPubKey.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/SskPubKey.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/SskPubKey.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class SskPubKey extends Message Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/SskRequest.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/SskRequest.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/SskRequest.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class SskRequest extends Search Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/Token.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/Token.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/Token.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class Token extends Message Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/TransfersCompleted.java =================================================================== --- trunk/apps/load-balancing-sims/phase7/sim/messages/TransfersCompleted.java 2008-03-01 17:53:41 UTC (rev 18290) +++ trunk/apps/load-balancing-sims/phase7/sim/messages/TransfersCompleted.java 2008-03-01 18:41:40 UTC (rev 18291) @@ -1,3 +1,5 @@ +// This software has been placed in the public domain by its author + package sim.messages; public class TransfersCompleted extends Message From toad at freenetproject.org Sat Mar 1 19:58:00 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 19:58:00 +0000 (UTC) Subject: [freenet-cvs] r18292 - trunk/freenet/src/freenet/client/async Message-ID: <20080301195800.EDB8C4796C8@freenetproject.org> Author: toad Date: 2008-03-01 19:58:00 +0000 (Sat, 01 Mar 2008) New Revision: 18292 Modified: trunk/freenet/src/freenet/client/async/RequestCooldownQueue.java Log: Increase minimum size of the cooldown queue to 128. Modified: trunk/freenet/src/freenet/client/async/RequestCooldownQueue.java =================================================================== --- trunk/freenet/src/freenet/client/async/RequestCooldownQueue.java 2008-03-01 18:41:40 UTC (rev 18291) +++ trunk/freenet/src/freenet/client/async/RequestCooldownQueue.java 2008-03-01 19:58:00 UTC (rev 18292) @@ -29,7 +29,7 @@ int endPtr; static boolean logMINOR; - static final int MIN_SIZE = 2; + static final int MIN_SIZE = 128; final long cooldownTime; From toad at freenetproject.org Sat Mar 1 20:00:59 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 20:00:59 +0000 (UTC) Subject: [freenet-cvs] r18293 - trunk/freenet/src/freenet/client/async Message-ID: <20080301200059.ACF9E479A21@freenetproject.org> Author: toad Date: 2008-03-01 20:00:59 +0000 (Sat, 01 Mar 2008) New Revision: 18293 Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java Log: Logging Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java =================================================================== --- trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java 2008-03-01 19:58:00 UTC (rev 18292) +++ trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java 2008-03-01 20:00:59 UTC (rev 18293) @@ -675,6 +675,8 @@ o = pendingKeys.get(key); } if(o == null) { + // Not an error as this can happen due to race conditions etc. + if(logMINOR) Logger.minor(this, "Restoring key but no keys queued?? for "+key); continue; } else if(o instanceof SendableGet) { SendableGet get = (SendableGet) o; From toad at freenetproject.org Sat Mar 1 20:03:58 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 20:03:58 +0000 (UTC) Subject: [freenet-cvs] r18294 - trunk/freenet/src/freenet/client/async Message-ID: <20080301200358.84360479B48@freenetproject.org> Author: toad Date: 2008-03-01 20:03:58 +0000 (Sat, 01 Mar 2008) New Revision: 18294 Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java Log: Synchronization fix Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java =================================================================== --- trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java 2008-03-01 20:00:59 UTC (rev 18293) +++ trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java 2008-03-01 20:03:58 UTC (rev 18294) @@ -629,7 +629,7 @@ if(logMINOR) Logger.minor(this, "maybeQueueOfferedKey("+key+","+force); short priority = Short.MAX_VALUE; - synchronized(this) { + synchronized(pendingKeys) { if(force) { // FIXME what priority??? priority = RequestStarter.IMMEDIATE_SPLITFILE_PRIORITY_CLASS; From toad at freenetproject.org Sat Mar 1 20:07:57 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 20:07:57 +0000 (UTC) Subject: [freenet-cvs] r18295 - trunk/freenet/src/freenet/client/async Message-ID: <20080301200757.AE62B479D2B@freenetproject.org> Author: toad Date: 2008-03-01 20:07:57 +0000 (Sat, 01 Mar 2008) New Revision: 18295 Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java Log: Don't create a cooldown queue if we don't need one. Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java =================================================================== --- trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java 2008-03-01 20:03:58 UTC (rev 18294) +++ trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java 2008-03-01 20:07:57 UTC (rev 18295) @@ -187,7 +187,10 @@ } else { offeredKeys = null; } + if(!forInserts) cooldownQueue = new RequestCooldownQueue(COOLDOWN_PERIOD); + else + cooldownQueue = null; logMINOR = Logger.shouldLog(Logger.MINOR, this); } @@ -529,6 +532,7 @@ for(int i=0;i Author: toad Date: 2008-03-01 20:08:33 +0000 (Sat, 01 Mar 2008) New Revision: 18296 Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java Log: indenting Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java =================================================================== --- trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java 2008-03-01 20:07:57 UTC (rev 18295) +++ trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java 2008-03-01 20:08:33 UTC (rev 18296) @@ -188,7 +188,7 @@ offeredKeys = null; } if(!forInserts) - cooldownQueue = new RequestCooldownQueue(COOLDOWN_PERIOD); + cooldownQueue = new RequestCooldownQueue(COOLDOWN_PERIOD); else cooldownQueue = null; logMINOR = Logger.shouldLog(Logger.MINOR, this); @@ -533,7 +533,7 @@ offeredKeys[i].remove(key); } if(cooldownQueue != null) - cooldownQueue.removeKey(key, getter.getCooldownWakeupByKey(key)); + cooldownQueue.removeKey(key, getter.getCooldownWakeupByKey(key)); } /** @@ -604,12 +604,12 @@ if(o instanceof SendableGet) { gets = new SendableGet[] { (SendableGet) o }; if(cooldownQueue != null) - cooldownQueue.removeKey(key, ((SendableGet)o).getCooldownWakeupByKey(key)); + cooldownQueue.removeKey(key, ((SendableGet)o).getCooldownWakeupByKey(key)); } else { gets = (SendableGet[]) o; if(cooldownQueue != null) - for(int i=0;i -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 toad has declared that 18296 is an 'indent only' commit: That's TRUE. orig/ClientRequestScheduler$1.class : 1cc971459af883aafef2e1bc1e05133b98ffdacf orig/ClientRequestScheduler.class : 5a6318112629dc15f0bd32baecc8937f08ad3630 orig/ClientRequestScheduler$PrioritySchedulerCallback.class : d7caf1cecb3494cf687acc8bca7f3194b4e6abdc -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iQIVAwUBR8m4LFiZGG6DH7hRAQJ/uBAA5RC3KBv2vHV0u4dvhImj7izjVnoDRSBF lBRJ+l4dni+7PWwEg/sU8wsZ9wgVNhT6h9jwXPk3y1itYQiIl0lCznz2I0Xv6CR1 m4Vjy1Iy2xvi1XrNilD/ky4yJFKZ3EkUPfpXp/HQc7KVnZiiOXP33OMc3evKfYSk sM+g6RH1qPNKtX9amkO5Un+EVpRic3ow0YQsAA5QFp44dH7n71OUBqrrQXF6IU1V mBEJClijdZ/6RaapGxGFQiEndK3F64+1sh39gjIwHZ/dR4ycZqqmzTiAE/htfAXI BmFFxvnYKCpnfgGNRek4vS15iKKBm1WWTYgyCYM+ieRNDvdInQZJSvMNlnv90KUi ATiofMUxddf/yn1WVG995+4Aptw36K2qYfxgOeVDBbA1EGbn3xZ6jcmoueR8svSY lothILlKJqJbVapi8MK40/vNva3TQeXaoQBiAJmMJhZYkBDHrBZIomrWKuYaS/I6 Z7xQ4Vd9jiu/Uu6+z9dig75Gt7gOKugduPyA66k/MexgLb0bnWm/TDHkzUpKNRfA pxW9Qqy3dGGSBaNV/We00jBYDuygDNkMhlB3D8LbpfaaeYvTgHvD+RXwGvG25hYT 4xD2dz94R3ptvdN+z4l3R1iOa3cBqiAl20rvFJOnVIkSzDvmOd0wcrrRJ62Ij70m M/1wg1HMkuc= =u6/J -----END PGP SIGNATURE----- From toad at freenetproject.org Sat Mar 1 20:23:07 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 20:23:07 +0000 (UTC) Subject: [freenet-cvs] r18297 - trunk/freenet/src/freenet/io/comm Message-ID: <20080301202307.8D895479837@freenetproject.org> Author: toad Date: 2008-03-01 20:23:07 +0000 (Sat, 01 Mar 2008) New Revision: 18297 Modified: trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java Log: Don't log packets to the overall Total Bandwidth if we fail to send them e.g. due to IPv6 being disabled. Modified: trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java =================================================================== --- trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java 2008-03-01 20:08:33 UTC (rev 18296) +++ trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java 2008-03-01 20:23:07 UTC (rev 18297) @@ -247,13 +247,11 @@ packet.setAddress(address); packet.setPort(port); - // TODO: keep? - // packet.length() is simply the size of the buffer, it knows nothing of UDP headers - IOStatisticCollector.addInfo(address + ":" + port, 0, blockToSend.length + UDP_HEADERS_LENGTH); - tracker.sentPacketTo(destination); try { _sock.send(packet); + tracker.sentPacketTo(destination); + IOStatisticCollector.addInfo(address + ":" + port, 0, blockToSend.length + UDP_HEADERS_LENGTH); if(logMINOR) Logger.minor(this, "Sent packet length "+blockToSend.length+" to "+address); } catch (IOException e) { if(packet.getAddress() instanceof Inet6Address) From toad at freenetproject.org Sat Mar 1 20:36:29 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 20:36:29 +0000 (UTC) Subject: [freenet-cvs] r18298 - in trunk/freenet/src/freenet: clients/http l10n node Message-ID: <20080301203629.3F706479D36@freenetproject.org> Author: toad Date: 2008-03-01 20:36:28 +0000 (Sat, 01 Mar 2008) New Revision: 18298 Modified: trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties trunk/freenet/src/freenet/node/KeyTracker.java trunk/freenet/src/freenet/node/NodeStats.java trunk/freenet/src/freenet/node/PeerNode.java Log: Monitor and display the number of bytes used to resend packets. Modified: trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java =================================================================== --- trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java 2008-03-01 20:23:07 UTC (rev 18297) +++ trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java 2008-03-01 20:36:28 UTC (rev 18298) @@ -811,6 +811,7 @@ activityList.addChild("li", l10n("offeredKeyOutput", "total", SizeUtil.formatSize(node.nodeStats.getOfferedKeysTotalBytesSent(), true))); activityList.addChild("li", l10n("swapOutput", "total", SizeUtil.formatSize(node.nodeStats.getSwappingTotalBytesSent(), true))); activityList.addChild("li", l10n("authBytes", "total", SizeUtil.formatSize(node.nodeStats.getTotalAuthBytesSent(), true))); + activityList.addChild("li", l10n("resendBytes", "total", SizeUtil.formatSize(node.nodeStats.getResendBytesSent(), true))); } } Modified: trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties =================================================================== --- trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2008-03-01 20:23:07 UTC (rev 18297) +++ trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2008-03-01 20:36:28 UTC (rev 18298) @@ -994,6 +994,7 @@ StatisticsToadlet.threads=Running threads: ${running}/${max} StatisticsToadlet.threadsByPriority=Threads by priority StatisticsToadlet.priority=Priority +StatisticsToadlet.resendBytes=Resent bytes: ${total} StatisticsToadlet.running=Running StatisticsToadlet.waiting=Waiting StatisticsToadlet.requestOutput=Request output (excluding payload): CHK ${chk} SSK ${ssk}. Modified: trunk/freenet/src/freenet/node/KeyTracker.java =================================================================== --- trunk/freenet/src/freenet/node/KeyTracker.java 2008-03-01 20:23:07 UTC (rev 18297) +++ trunk/freenet/src/freenet/node/KeyTracker.java 2008-03-01 20:36:28 UTC (rev 18298) @@ -1010,7 +1010,7 @@ AsyncMessageCallback[] callbacks = element.callbacks; // Ignore packet# if(logMINOR) Logger.minor(this, "Queueing resend of what was once "+element.packetNumber); - messages[i] = new MessageItem(buf, callbacks, true, 0, null, element.priority); + messages[i] = new MessageItem(buf, callbacks, true, 0, pn.node.nodeStats.resendByteCounter, element.priority); } pn.requeueMessageItems(messages, 0, messages.length, true); Modified: trunk/freenet/src/freenet/node/NodeStats.java =================================================================== --- trunk/freenet/src/freenet/node/NodeStats.java 2008-03-01 20:23:07 UTC (rev 18297) +++ trunk/freenet/src/freenet/node/NodeStats.java 2008-03-01 20:36:28 UTC (rev 18298) @@ -9,6 +9,7 @@ import freenet.config.InvalidConfigValueException; import freenet.config.SubConfig; import freenet.crypt.RandomSource; +import freenet.io.comm.ByteCounter; import freenet.io.comm.DMT; import freenet.io.comm.IOStatisticCollector; import freenet.l10n.L10n; @@ -1136,4 +1137,28 @@ return totalAuthBytesSent; } + private long resendBytesSent; + + public final ByteCounter resendByteCounter = new ByteCounter() { + + public void receivedBytes(int x) { + // Ignore + } + + public void sentBytes(int x) { + synchronized(NodeStats.this) { + resendBytesSent += x; + } + } + + public void sentPayload(int x) { + // Ignore + } + + }; + + public long getResendBytesSent() { + return resendBytesSent; + } + } Modified: trunk/freenet/src/freenet/node/PeerNode.java =================================================================== --- trunk/freenet/src/freenet/node/PeerNode.java 2008-03-01 20:23:07 UTC (rev 18297) +++ trunk/freenet/src/freenet/node/PeerNode.java 2008-03-01 20:36:28 UTC (rev 18298) @@ -2476,7 +2476,7 @@ Logger.error(this, "No tracker to resend packet " + item.packetNumber + " on"); continue; } - MessageItem mi = new MessageItem(item.buf, item.callbacks, true, 0, null, item.priority); + MessageItem mi = new MessageItem(item.buf, item.callbacks, true, 0, node.nodeStats.resendByteCounter, item.priority); requeueMessageItems(new MessageItem[]{mi}, 0, 1, true); } } From toad at freenetproject.org Sat Mar 1 20:53:34 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 20:53:34 +0000 (UTC) Subject: [freenet-cvs] r18299 - trunk/freenet/src/freenet/node Message-ID: <20080301205334.75D66479849@freenetproject.org> Author: toad Date: 2008-03-01 20:53:34 +0000 (Sat, 01 Mar 2008) New Revision: 18299 Modified: trunk/freenet/src/freenet/node/Node.java trunk/freenet/src/freenet/node/NodeClientCore.java trunk/freenet/src/freenet/node/RequestHandler.java Log: Fix race condition resulting in sendTerminal being called twice. Modified: trunk/freenet/src/freenet/node/Node.java =================================================================== --- trunk/freenet/src/freenet/node/Node.java 2008-03-01 20:36:28 UTC (rev 18298) +++ trunk/freenet/src/freenet/node/Node.java 2008-03-01 20:53:34 UTC (rev 18299) @@ -1893,7 +1893,7 @@ * a RequestSender, unless the HTL is 0, in which case NULL. * RequestSender. */ - public Object makeRequestSender(Key key, short htl, long uid, PeerNode source, boolean localOnly, boolean cache, boolean ignoreStore, boolean offersOnly) { + public Object makeRequestSender(Key key, short htl, long uid, PeerNode source, boolean localOnly, boolean cache, boolean ignoreStore, boolean offersOnly, RequestSender.Listener listener) { logMINOR = Logger.shouldLog(Logger.MINOR, this); if(logMINOR) Logger.minor(this, "makeRequestSender("+key+ ',' +htl+ ',' +uid+ ',' +source+") on "+getDarknetPortNumber()); // In store? @@ -1933,6 +1933,7 @@ } if(sender != null) { if(logMINOR) Logger.minor(this, "Data already being transferred: "+sender); + if(listener != null) sender.addListener(listener); return sender; } @@ -1955,6 +1956,7 @@ sender = new RequestSender(key, null, htl, uid, this, source, offersOnly); // RequestSender adds itself to requestSenders } + if(listener != null) sender.addListener(listener); sender.start(); if(logMINOR) Logger.minor(this, "Created new sender: "+sender); return sender; Modified: trunk/freenet/src/freenet/node/NodeClientCore.java =================================================================== --- trunk/freenet/src/freenet/node/NodeClientCore.java 2008-03-01 20:36:28 UTC (rev 18298) +++ trunk/freenet/src/freenet/node/NodeClientCore.java 2008-03-01 20:53:34 UTC (rev 18299) @@ -470,7 +470,7 @@ */ void asyncGet(Key key, boolean cache, boolean offersOnly, long uid, RequestSender.Listener listener) { try { - Object o = node.makeRequestSender(key, node.maxHTL(), uid, null, false, cache, false, offersOnly); + Object o = node.makeRequestSender(key, node.maxHTL(), uid, null, false, cache, false, offersOnly, listener); if(o instanceof CHKBlock) { node.unlockUID(uid, false, false, true, false); return; // Already have it. @@ -509,7 +509,7 @@ throw new LowLevelGetException(LowLevelGetException.INTERNAL_ERROR); } try { - Object o = node.makeRequestSender(key.getNodeCHK(), node.maxHTL(), uid, null, localOnly, cache, ignoreStore, false); + Object o = node.makeRequestSender(key.getNodeCHK(), node.maxHTL(), uid, null, localOnly, cache, ignoreStore, false, null); if(o instanceof CHKBlock) { try { return new ClientCHKBlock((CHKBlock)o, key); @@ -624,7 +624,7 @@ throw new LowLevelGetException(LowLevelGetException.INTERNAL_ERROR); } try { - Object o = node.makeRequestSender(key.getNodeKey(), node.maxHTL(), uid, null, localOnly, cache, ignoreStore, false); + Object o = node.makeRequestSender(key.getNodeKey(), node.maxHTL(), uid, null, localOnly, cache, ignoreStore, false, null); if(o instanceof SSKBlock) { try { SSKBlock block = (SSKBlock)o; Modified: trunk/freenet/src/freenet/node/RequestHandler.java =================================================================== --- trunk/freenet/src/freenet/node/RequestHandler.java 2008-03-01 20:36:28 UTC (rev 18298) +++ trunk/freenet/src/freenet/node/RequestHandler.java 2008-03-01 20:53:34 UTC (rev 18299) @@ -132,7 +132,7 @@ Message accepted = DMT.createFNPAccepted(uid); source.sendAsync(accepted, null, 0, this); - Object o = node.makeRequestSender(key, htl, uid, source, false, true, false, false); + Object o = node.makeRequestSender(key, htl, uid, source, false, true, false, false, this); if(o instanceof KeyBlock) { returnLocalData((KeyBlock)o); return; @@ -150,8 +150,6 @@ //If we cannot respond before this time, the 'source' node has already fatally timed out (and we need not return packets which will not be claimed) searchStartTime = System.currentTimeMillis(); responseDeadline = searchStartTime + RequestSender.FETCH_TIMEOUT + source.getProbableSendQueueTime(); - - rs.addListener(this); } public void onReceivedRejectOverload() { From toad at freenetproject.org Sat Mar 1 20:59:53 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 20:59:53 +0000 (UTC) Subject: [freenet-cvs] r18300 - trunk/freenet/src/freenet/node Message-ID: <20080301205953.B03A147989F@freenetproject.org> Author: toad Date: 2008-03-01 20:59:53 +0000 (Sat, 01 Mar 2008) New Revision: 18300 Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java Log: Fix the resent bytes counter. Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java =================================================================== --- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 20:53:34 UTC (rev 18299) +++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 20:59:53 UTC (rev 18300) @@ -2558,6 +2558,7 @@ public void resend(ResendPacketItem item) throws PacketSequenceException, WouldBlockException, KeyChangedException, NotConnectedException { processOutgoingPreformatted(item.buf, 0, item.buf.length, item.kt, item.packetNumber, item.callbacks, 0, item.priority); + node.nodeStats.resendByteCounter.sentBytes(item.buf.length + fullHeadersLengthOneMessage); } public int[] supportedNegTypes() { From toad at freenetproject.org Sat Mar 1 21:00:56 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 21:00:56 +0000 (UTC) Subject: [freenet-cvs] r18301 - trunk/freenet/src/freenet/node Message-ID: <20080301210056.E78EA479868@freenetproject.org> Author: toad Date: 2008-03-01 21:00:56 +0000 (Sat, 01 Mar 2008) New Revision: 18301 Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java Log: Slight improvement to accuracy: formatted messages already have the two bytes per message. Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java =================================================================== --- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 20:59:53 UTC (rev 18300) +++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 21:00:56 UTC (rev 18301) @@ -1992,7 +1992,7 @@ int packetNumber = kt.allocateOutgoingPacketNumberNeverBlock(); this.processOutgoingPreformatted(buf, 0, buf.length, kt, packetNumber, mi.cb, mi.alreadyReportedBytes, mi.getPriority()); //MARK: onSent() - mi.onSent(buf.length + fullHeadersLengthOneMessage); + mi.onSent(buf.length + fullHeadersLengthMinimum); } catch (NotConnectedException e) { Logger.normal(this, "Caught "+e+" while sending messages ("+mi_name+") to "+pn.getPeer()+requeueLogString); // Requeue @@ -2558,7 +2558,7 @@ public void resend(ResendPacketItem item) throws PacketSequenceException, WouldBlockException, KeyChangedException, NotConnectedException { processOutgoingPreformatted(item.buf, 0, item.buf.length, item.kt, item.packetNumber, item.callbacks, 0, item.priority); - node.nodeStats.resendByteCounter.sentBytes(item.buf.length + fullHeadersLengthOneMessage); + node.nodeStats.resendByteCounter.sentBytes(item.buf.length + fullHeadersLengthMinimum); } public int[] supportedNegTypes() { From toad at freenetproject.org Sat Mar 1 21:08:07 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 21:08:07 +0000 (UTC) Subject: [freenet-cvs] r18302 - trunk/freenet/src/freenet/io/comm Message-ID: <20080301210807.A77E54798EF@freenetproject.org> Author: toad Date: 2008-03-01 21:08:07 +0000 (Sat, 01 Mar 2008) New Revision: 18302 Modified: trunk/freenet/src/freenet/io/comm/DMT.java Log: typo Modified: trunk/freenet/src/freenet/io/comm/DMT.java =================================================================== --- trunk/freenet/src/freenet/io/comm/DMT.java 2008-03-01 21:00:56 UTC (rev 18301) +++ trunk/freenet/src/freenet/io/comm/DMT.java 2008-03-01 21:08:07 UTC (rev 18302) @@ -171,7 +171,7 @@ } public static int bulkPacketTransmitSize(int size) { - return size + 8 /* uid */ + 4 /* packet# */ + 4 /* Message hader */; + return size + 8 /* uid */ + 4 /* packet# */ + 4 /* Message header */; } //This is of priority BULK_DATA to cut down on suprious resend requests, it will be queued after the packets it represents From toad at freenetproject.org Sat Mar 1 21:17:09 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 21:17:09 +0000 (UTC) Subject: [freenet-cvs] r18303 - in trunk/freenet/src/freenet: io/xfer node node/updater Message-ID: <20080301211709.295A547970D@freenetproject.org> Author: toad Date: 2008-03-01 21:17:08 +0000 (Sat, 01 Mar 2008) New Revision: 18303 Modified: trunk/freenet/src/freenet/io/xfer/BulkReceiver.java trunk/freenet/src/freenet/io/xfer/BulkTransmitter.java trunk/freenet/src/freenet/node/DarknetPeerNode.java trunk/freenet/src/freenet/node/OpennetManager.java trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java Log: Bulk* now supports a ByteCounter. Modified: trunk/freenet/src/freenet/io/xfer/BulkReceiver.java =================================================================== --- trunk/freenet/src/freenet/io/xfer/BulkReceiver.java 2008-03-01 21:08:07 UTC (rev 18302) +++ trunk/freenet/src/freenet/io/xfer/BulkReceiver.java 2008-03-01 21:17:08 UTC (rev 18303) @@ -3,6 +3,7 @@ * http://www.gnu.org/ for further details of the GPL. */ package freenet.io.xfer; +import freenet.io.comm.ByteCounter; import freenet.io.comm.DMT; import freenet.io.comm.DisconnectedException; import freenet.io.comm.Message; @@ -29,12 +30,14 @@ private boolean sentCancel; /** Not persistent over reboots */ final long peerBootID; + private final ByteCounter ctr; - public BulkReceiver(PartiallyReceivedBulk prb, PeerContext peer, long uid) { + public BulkReceiver(PartiallyReceivedBulk prb, PeerContext peer, long uid, ByteCounter ctr) { this.prb = prb; this.peer = peer; this.uid = uid; this.peerBootID = peer.getBootID(); + this.ctr = ctr; } public void onAborted() { @@ -43,7 +46,7 @@ sentCancel = true; } try { - peer.sendAsync(DMT.createFNPBulkReceiveAborted(uid), null, 0, null); + peer.sendAsync(DMT.createFNPBulkReceiveAborted(uid), null, 0, ctr); } catch (NotConnectedException e) { // Cool } @@ -59,7 +62,7 @@ MessageFilter mfPacket = MessageFilter.create().setSource(peer).setType(DMT.FNPBulkPacketSend) .setField(DMT.UID, uid).setTimeout(TIMEOUT); if(prb.hasWholeFile()) { try { - peer.sendAsync(DMT.createFNPBulkReceivedAll(uid), null, 0, null); + peer.sendAsync(DMT.createFNPBulkReceivedAll(uid), null, 0, ctr); } catch (NotConnectedException e) { // Ignore, we have the data. } @@ -67,7 +70,7 @@ } Message m; try { - m = prb.usm.waitFor(mfSendKilled.or(mfPacket), null); + m = prb.usm.waitFor(mfSendKilled.or(mfPacket), ctr); } catch (DisconnectedException e) { prb.abort(RetrievalException.SENDER_DISCONNECTED, "Sender disconnected"); return false; Modified: trunk/freenet/src/freenet/io/xfer/BulkTransmitter.java =================================================================== --- trunk/freenet/src/freenet/io/xfer/BulkTransmitter.java 2008-03-01 21:08:07 UTC (rev 18302) +++ trunk/freenet/src/freenet/io/xfer/BulkTransmitter.java 2008-03-01 21:17:08 UTC (rev 18303) @@ -4,6 +4,7 @@ package freenet.io.xfer; import freenet.io.comm.AsyncMessageFilterCallback; +import freenet.io.comm.ByteCounter; import freenet.io.comm.DMT; import freenet.io.comm.DisconnectedException; import freenet.io.comm.Message; @@ -47,6 +48,7 @@ final boolean noWait; private long finishTime=-1; private String cancelReason; + private final ByteCounter ctr; /** * Create a bulk data transmitter. @@ -57,12 +59,13 @@ * @param noWait If true, don't wait for an FNPBulkReceivedAll, return as soon as we've sent everything. * @throws DisconnectedException If the peer we are trying to send to becomes disconnected. */ - public BulkTransmitter(PartiallyReceivedBulk prb, PeerContext peer, long uid, DoubleTokenBucket masterThrottle, boolean noWait) throws DisconnectedException { + public BulkTransmitter(PartiallyReceivedBulk prb, PeerContext peer, long uid, DoubleTokenBucket masterThrottle, boolean noWait, ByteCounter ctr) throws DisconnectedException { this.prb = prb; this.peer = peer; this.uid = uid; this.masterThrottle = masterThrottle; this.noWait = noWait; + this.ctr = ctr; peerBootID = peer.getBootID(); // Need to sync on prb while doing both operations, to avoid race condition. // Specifically, we must not get calls to blockReceived() until blocksNotSentButPresent @@ -153,7 +156,7 @@ sentCancel = true; } try { - peer.sendAsync(DMT.createFNPBulkSendAborted(uid), null, 0, null); + peer.sendAsync(DMT.createFNPBulkSendAborted(uid), null, 0, ctr); } catch (NotConnectedException e) { // Cool } @@ -245,7 +248,7 @@ // Congestion control and bandwidth limiting try { peer.getThrottle().sendThrottledMessage(DMT.createFNPBulkPacketSend(uid, blockNo, buf), peer, - masterThrottle, prb.blockSize, null); + masterThrottle, prb.blockSize, ctr); synchronized(this) { blocksNotSentButPresent.setBit(blockNo, false); } Modified: trunk/freenet/src/freenet/node/DarknetPeerNode.java =================================================================== --- trunk/freenet/src/freenet/node/DarknetPeerNode.java 2008-03-01 21:08:07 UTC (rev 18302) +++ trunk/freenet/src/freenet/node/DarknetPeerNode.java 2008-03-01 21:17:08 UTC (rev 18303) @@ -842,7 +842,7 @@ throw new Error("Impossible: FileNotFoundException opening with RAF with rw! "+e, e); } prb = new PartiallyReceivedBulk(node.usm, size, Node.PACKET_SIZE, data, false); - receiver = new BulkReceiver(prb, DarknetPeerNode.this, uid); + receiver = new BulkReceiver(prb, DarknetPeerNode.this, uid, null); // FIXME make this persistent node.executor.execute(new Runnable() { public void run() { @@ -881,7 +881,7 @@ public void send() throws DisconnectedException { prb = new PartiallyReceivedBulk(node.usm, size, Node.PACKET_SIZE, data, true); - transmitter = new BulkTransmitter(prb, DarknetPeerNode.this, uid, node.outputThrottle, false); + transmitter = new BulkTransmitter(prb, DarknetPeerNode.this, uid, node.outputThrottle, false, null); if(logMINOR) Logger.minor(this, "Sending "+uid); node.executor.execute(new Runnable() { Modified: trunk/freenet/src/freenet/node/OpennetManager.java =================================================================== --- trunk/freenet/src/freenet/node/OpennetManager.java 2008-03-01 21:08:07 UTC (rev 18302) +++ trunk/freenet/src/freenet/node/OpennetManager.java 2008-03-01 21:17:08 UTC (rev 18303) @@ -508,7 +508,7 @@ new PartiallyReceivedBulk(node.usm, padded.length, Node.PACKET_SIZE, raf, true); try { BulkTransmitter bt = - new BulkTransmitter(prb, peer, xferUID, node.outputThrottle, true); + new BulkTransmitter(prb, peer, xferUID, node.outputThrottle, true, null); bt.send(); } catch (DisconnectedException e) { throw new NotConnectedException(e); @@ -611,7 +611,7 @@ byte[] buf = new byte[paddedLength]; ByteArrayRandomAccessThing raf = new ByteArrayRandomAccessThing(buf); PartiallyReceivedBulk prb = new PartiallyReceivedBulk(node.usm, buf.length, Node.PACKET_SIZE, raf, false); - BulkReceiver br = new BulkReceiver(prb, source, xferUID); + BulkReceiver br = new BulkReceiver(prb, source, xferUID, null); if(logMINOR) Logger.minor(this, "Receiving noderef (reply="+isReply+") as bulk transfer for request uid "+uid+" with transfer "+xferUID+" from "+source); if(!br.receive()) { Modified: trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java =================================================================== --- trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java 2008-03-01 21:08:07 UTC (rev 18302) +++ trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java 2008-03-01 21:17:08 UTC (rev 18303) @@ -494,7 +494,7 @@ final BulkTransmitter bt; try { - bt = new BulkTransmitter(prb, source, uid, updateManager.node.outputThrottle, false); + bt = new BulkTransmitter(prb, source, uid, updateManager.node.outputThrottle, false, null); } catch (DisconnectedException e) { Logger.error(this, "Peer "+source+" asked us for the blob file for the revocation key, then disconnected: "+e, e); return true; @@ -624,7 +624,7 @@ PartiallyReceivedBulk prb = new PartiallyReceivedBulk(updateManager.node.getUSM(), length, Node.PACKET_SIZE, raf, false); - final BulkReceiver br = new BulkReceiver(prb, source, uid); + final BulkReceiver br = new BulkReceiver(prb, source, uid, null); updateManager.node.executor.execute(new Runnable() { @@ -867,7 +867,7 @@ final BulkTransmitter bt; try { - bt = new BulkTransmitter(prb, source, uid, updateManager.node.outputThrottle, false); + bt = new BulkTransmitter(prb, source, uid, updateManager.node.outputThrottle, false, null); } catch (DisconnectedException e) { Logger.error(this, "Peer "+source+" asked us for the blob file for the main jar, then disconnected: "+e, e); return true; @@ -1006,7 +1006,7 @@ PartiallyReceivedBulk prb = new PartiallyReceivedBulk(updateManager.node.getUSM(), length, Node.PACKET_SIZE, raf, false); - final BulkReceiver br = new BulkReceiver(prb, source, uid); + final BulkReceiver br = new BulkReceiver(prb, source, uid, null); updateManager.node.executor.execute(new Runnable() { From toad at freenetproject.org Sat Mar 1 21:32:31 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 21:32:31 +0000 (UTC) Subject: [freenet-cvs] r18304 - trunk/freenet/src/freenet/node Message-ID: <20080301213231.5C199479931@freenetproject.org> Author: toad Date: 2008-03-01 21:32:31 +0000 (Sat, 01 Mar 2008) New Revision: 18304 Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java trunk/freenet/src/freenet/node/KeyTracker.java trunk/freenet/src/freenet/node/PeerNode.java Log: PeerNode: Make pingAverage private. Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java =================================================================== --- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 21:17:08 UTC (rev 18303) +++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 21:32:31 UTC (rev 18304) @@ -1926,7 +1926,7 @@ if((seqNumber != -1) && tracker.alreadyReceived(seqNumber)) { tracker.queueAck(seqNumber); // Must keep the connection open! - if(logMINOR) Logger.minor(this, "Received packet twice ("+seqNumber+") from "+tracker.pn.getPeer()+": "+seqNumber+" ("+TimeUtil.formatTime((long) tracker.pn.pingAverage.currentValue(), 2, true)+" ping avg)"); + if(logMINOR) Logger.minor(this, "Received packet twice ("+seqNumber+") from "+tracker.pn.getPeer()+": "+seqNumber+" ("+TimeUtil.formatTime((long) tracker.pn.averagePingTime(), 2, true)+" ping avg)"); return; } Modified: trunk/freenet/src/freenet/node/KeyTracker.java =================================================================== --- trunk/freenet/src/freenet/node/KeyTracker.java 2008-03-01 21:17:08 UTC (rev 18303) +++ trunk/freenet/src/freenet/node/KeyTracker.java 2008-03-01 21:32:31 UTC (rev 18304) @@ -425,8 +425,8 @@ */ public void onAcked() { long t = Math.max(0, System.currentTimeMillis() - createdTime); - pn.pingAverage.report(t); - if(logMINOR) Logger.minor(this, "Reported round-trip time of "+TimeUtil.formatTime(t, 2, true)+" on "+pn.getPeer()+" (avg "+TimeUtil.formatTime((long)pn.pingAverage.currentValue(),2,true)+", #"+packetNumber+ ')'); + pn.reportPing(t); + if(logMINOR) Logger.minor(this, "Reported round-trip time of "+TimeUtil.formatTime(t, 2, true)+" on "+pn.getPeer()+" (avg "+TimeUtil.formatTime((long)pn.averagePingTime(),2,true)+", #"+packetNumber+ ')'); } long urgentDelay() { @@ -646,7 +646,7 @@ QueuedAckRequest qr = (QueuedAckRequest)ackRequestQueue.removeByKey(new Integer(seqNo)); if(qr != null) qr.onAcked(); else - Logger.normal(this, "Removing ack request twice? Null on "+seqNo+" from "+pn.getPeer()+" ("+TimeUtil.formatTime((int) pn.pingAverage.currentValue(), 2, true)+" ping avg)"); + Logger.normal(this, "Removing ack request twice? Null on "+seqNo+" from "+pn.getPeer()+" ("+TimeUtil.formatTime((int) pn.averagePingTime(), 2, true)+" ping avg)"); } /** Modified: trunk/freenet/src/freenet/node/PeerNode.java =================================================================== --- trunk/freenet/src/freenet/node/PeerNode.java 2008-03-01 21:17:08 UTC (rev 18303) +++ trunk/freenet/src/freenet/node/PeerNode.java 2008-03-01 21:32:31 UTC (rev 18304) @@ -2617,7 +2617,7 @@ final static int MAX_PINGS = 5; final LRUHashtable pingsSentTimes = new LRUHashtable(); long pingNumber; - final RunningAverage pingAverage; + private final RunningAverage pingAverage; /** * @return The probability of a request sent to this peer being rejected (locally) @@ -3608,4 +3608,8 @@ if(peer == null) return false; // presumably return !IPUtil.isValidAddress(peer.getAddress(), false); } + + public void reportPing(long t) { + this.pingAverage.report(t); + } } From toad at freenetproject.org Sat Mar 1 22:54:31 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 22:54:31 +0000 (UTC) Subject: [freenet-cvs] r18305 - in trunk/freenet/src/freenet: clients/http node Message-ID: <20080301225431.E092247961D@freenetproject.org> Author: toad Date: 2008-03-01 22:54:31 +0000 (Sat, 01 Mar 2008) New Revision: 18305 Modified: trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java trunk/freenet/src/freenet/node/FNPPacketMangler.java trunk/freenet/src/freenet/node/KeyTracker.java trunk/freenet/src/freenet/node/PeerNode.java trunk/freenet/src/freenet/node/PeerNodeStatus.java Log: Track resent bytes separately for each peer. Display this on the connections pages. Modified: trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java =================================================================== --- trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java 2008-03-01 21:32:31 UTC (rev 18304) +++ trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java 2008-03-01 22:54:31 UTC (rev 18305) @@ -437,7 +437,7 @@ if(advancedModeEnabled) { peerTableHeaderRow.addChild("th", "%\u00a0Time Routable"); - peerTableHeaderRow.addChild("th", "Total\u00a0Traffic\u00a0(in/out)"); + peerTableHeaderRow.addChild("th", "Total\u00a0Traffic\u00a0(in/out/resent)"); peerTableHeaderRow.addChild("th", "Congestion\u00a0Control"); peerTableHeaderRow.addChild("th", "Time\u00a0Delta"); } @@ -803,7 +803,7 @@ // percent of time connected column peerRow.addChild("td", "class", "peer-idle" /* FIXME */).addChild("#", fix1.format(peerNodeStatus.getPercentTimeRoutableConnection())); // total traffic column - peerRow.addChild("td", "class", "peer-idle" /* FIXME */).addChild("#", SizeUtil.formatSize(peerNodeStatus.getTotalInputBytes())+" / "+SizeUtil.formatSize(peerNodeStatus.getTotalOutputBytes())); + peerRow.addChild("td", "class", "peer-idle" /* FIXME */).addChild("#", SizeUtil.formatSize(peerNodeStatus.getTotalInputBytes())+" / "+SizeUtil.formatSize(peerNodeStatus.getTotalOutputBytes())+"/"+SizeUtil.formatSize(peerNodeStatus.getResendBytesSent())); // congestion control PacketThrottle t = peerNodeStatus.getThrottle(); String val; Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java =================================================================== --- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 21:32:31 UTC (rev 18304) +++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-03-01 22:54:31 UTC (rev 18305) @@ -2558,7 +2558,7 @@ public void resend(ResendPacketItem item) throws PacketSequenceException, WouldBlockException, KeyChangedException, NotConnectedException { processOutgoingPreformatted(item.buf, 0, item.buf.length, item.kt, item.packetNumber, item.callbacks, 0, item.priority); - node.nodeStats.resendByteCounter.sentBytes(item.buf.length + fullHeadersLengthMinimum); + item.pn.resendByteCounter.sentBytes(item.buf.length + fullHeadersLengthMinimum); } public int[] supportedNegTypes() { Modified: trunk/freenet/src/freenet/node/KeyTracker.java =================================================================== --- trunk/freenet/src/freenet/node/KeyTracker.java 2008-03-01 21:32:31 UTC (rev 18304) +++ trunk/freenet/src/freenet/node/KeyTracker.java 2008-03-01 22:54:31 UTC (rev 18305) @@ -1010,7 +1010,7 @@ AsyncMessageCallback[] callbacks = element.callbacks; // Ignore packet# if(logMINOR) Logger.minor(this, "Queueing resend of what was once "+element.packetNumber); - messages[i] = new MessageItem(buf, callbacks, true, 0, pn.node.nodeStats.resendByteCounter, element.priority); + messages[i] = new MessageItem(buf, callbacks, true, 0, pn.resendByteCounter, element.priority); } pn.requeueMessageItems(messages, 0, messages.length, true); Modified: trunk/freenet/src/freenet/node/PeerNode.java =================================================================== --- trunk/freenet/src/freenet/node/PeerNode.java 2008-03-01 21:32:31 UTC (rev 18304) +++ trunk/freenet/src/freenet/node/PeerNode.java 2008-03-01 22:54:31 UTC (rev 18305) @@ -2476,7 +2476,7 @@ Logger.error(this, "No tracker to resend packet " + item.packetNumber + " on"); continue; } - MessageItem mi = new MessageItem(item.buf, item.callbacks, true, 0, node.nodeStats.resendByteCounter, item.priority); + MessageItem mi = new MessageItem(item.buf, item.callbacks, true, 0, resendByteCounter, item.priority); requeueMessageItems(new MessageItem[]{mi}, 0, 1, true); } } @@ -3612,4 +3612,30 @@ public void reportPing(long t) { this.pingAverage.report(t); } + + private long resendBytesSent; + + public final ByteCounter resendByteCounter = new ByteCounter() { + + public void receivedBytes(int x) { + // Ignore + } + + public void sentBytes(int x) { + synchronized(PeerNode.this) { + resendBytesSent += x; + } + node.nodeStats.resendByteCounter.sentBytes(x); + } + + public void sentPayload(int x) { + // Ignore + } + + }; + + public long getResendBytesSent() { + return resendBytesSent; + } + } Modified: trunk/freenet/src/freenet/node/PeerNodeStatus.java =================================================================== --- trunk/freenet/src/freenet/node/PeerNodeStatus.java 2008-03-01 21:32:31 UTC (rev 18304) +++ trunk/freenet/src/freenet/node/PeerNodeStatus.java 2008-03-01 22:54:31 UTC (rev 18305) @@ -87,6 +87,8 @@ private final boolean isSeedClient; private final boolean isSearchable; + + private final long resendBytesSent; PeerNodeStatus(PeerNode peerNode, boolean noHeavy) { Peer p = peerNode.getPeer(); @@ -135,6 +137,7 @@ this.isSeedClient = peerNode instanceof SeedClientPeerNode; this.isSeedServer = peerNode instanceof SeedServerPeerNode; this.isSearchable = peerNode.isRealConnection(); + this.resendBytesSent = peerNode.getResendBytesSent(); } /** @@ -369,4 +372,9 @@ public boolean isSearchable() { return isSearchable; } + + public long getResendBytesSent() { + return resendBytesSent; + } + } From toad at freenetproject.org Sat Mar 1 23:02:30 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 23:02:30 +0000 (UTC) Subject: [freenet-cvs] r18306 - trunk/freenet/src/freenet/io/xfer Message-ID: <20080301230230.D79B64788BC@freenetproject.org> Author: toad Date: 2008-03-01 23:02:30 +0000 (Sat, 01 Mar 2008) New Revision: 18306 Modified: trunk/freenet/src/freenet/io/xfer/BulkTransmitter.java Log: Report payload to the callback, since it's excluded from the non-payload callback by us including packetSize for bytes-reported-already. Modified: trunk/freenet/src/freenet/io/xfer/BulkTransmitter.java =================================================================== --- trunk/freenet/src/freenet/io/xfer/BulkTransmitter.java 2008-03-01 22:54:31 UTC (rev 18305) +++ trunk/freenet/src/freenet/io/xfer/BulkTransmitter.java 2008-03-01 23:02:30 UTC (rev 18306) @@ -249,6 +249,7 @@ try { peer.getThrottle().sendThrottledMessage(DMT.createFNPBulkPacketSend(uid, blockNo, buf), peer, masterThrottle, prb.blockSize, ctr); + if(ctr != null) ctr.sentPayload(prb.blockSize); synchronized(this) { blocksNotSentButPresent.setBit(blockNo, false); } From toad at freenetproject.org Sat Mar 1 23:11:34 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 23:11:34 +0000 (UTC) Subject: [freenet-cvs] r18307 - trunk/freenet/src/freenet/node Message-ID: <20080301231134.AE43B47815C@freenetproject.org> Author: toad Date: 2008-03-01 23:11:34 +0000 (Sat, 01 Mar 2008) New Revision: 18307 Modified: trunk/freenet/src/freenet/node/RequestHandler.java Log: Fix NullPointerException Modified: trunk/freenet/src/freenet/node/RequestHandler.java =================================================================== --- trunk/freenet/src/freenet/node/RequestHandler.java 2008-03-01 23:02:30 UTC (rev 18306) +++ trunk/freenet/src/freenet/node/RequestHandler.java 2008-03-01 23:11:34 UTC (rev 18307) @@ -219,7 +219,7 @@ if (now > responseDeadline) { // Offer the data if there is any. node.failureTable.onFinalFailure(key, null, htl, -1, source); - PeerNode routedLast = rs.routedLast(); + PeerNode routedLast = rs == null ? null : rs.routedLast(); Logger.error(this, "requestsender took too long to respond to requestor ("+TimeUtil.formatTime((now - searchStartTime), 2, true)+"/"+rs.getStatusString()+") routed to "+(routedLast == null ? "null" : routedLast.shortToString())); applyByteCounts(); unregisterRequestHandlerWithNode(); From toad at freenetproject.org Sat Mar 1 23:13:55 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 23:13:55 +0000 (UTC) Subject: [freenet-cvs] r18308 - in trunk/freenet/src/freenet: clients/http l10n node node/updater Message-ID: <20080301231355.C86F847919E@freenetproject.org> Author: toad Date: 2008-03-01 23:13:55 +0000 (Sat, 01 Mar 2008) New Revision: 18308 Modified: trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties trunk/freenet/src/freenet/node/NodeStats.java trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java Log: Track bytes used by Update Over Mandatory. Modified: trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java =================================================================== --- trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java 2008-03-01 23:11:34 UTC (rev 18307) +++ trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java 2008-03-01 23:13:55 UTC (rev 18308) @@ -812,6 +812,7 @@ activityList.addChild("li", l10n("swapOutput", "total", SizeUtil.formatSize(node.nodeStats.getSwappingTotalBytesSent(), true))); activityList.addChild("li", l10n("authBytes", "total", SizeUtil.formatSize(node.nodeStats.getTotalAuthBytesSent(), true))); activityList.addChild("li", l10n("resendBytes", "total", SizeUtil.formatSize(node.nodeStats.getResendBytesSent(), true))); + activityList.addChild("li", l10n("uomBytes", "total", SizeUtil.formatSize(node.nodeStats.getUOMBytesSent(), true))); } } Modified: trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties =================================================================== --- trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2008-03-01 23:11:34 UTC (rev 18307) +++ trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2008-03-01 23:13:55 UTC (rev 18308) @@ -1001,6 +1001,7 @@ StatisticsToadlet.totalInput=Total Input: ${total} (${rate}/sec) StatisticsToadlet.totalOutput=Total Output: ${total} (${rate}/sec) StatisticsToadlet.transferringRequests=Transferring Requests: sending ${senders}, receiving ${receivers} +StatisticsToadlet.uomBytes=Updater Output: ${total} StatisticsToadlet.usedMemory=Used Java memory: ${memory} StatisticsToadlet.versionTitle=Node Version Information SymlinkerToadlet.symlinks=Symlinks in ToadletServer Modified: trunk/freenet/src/freenet/node/NodeStats.java =================================================================== --- trunk/freenet/src/freenet/node/NodeStats.java 2008-03-01 23:11:34 UTC (rev 18307) +++ trunk/freenet/src/freenet/node/NodeStats.java 2008-03-01 23:13:55 UTC (rev 18308) @@ -1161,4 +1161,13 @@ return resendBytesSent; } + private long uomBytesSent; + + public synchronized void reportUOMBytesSent(int x) { + uomBytesSent += x; + } + + public long getUOMBytesSent() { + return uomBytesSent; + } } Modified: trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java =================================================================== --- trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java 2008-03-01 23:11:34 UTC (rev 18307) +++ trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java 2008-03-01 23:13:55 UTC (rev 18308) @@ -9,6 +9,7 @@ import freenet.config.Config; import freenet.config.InvalidConfigValueException; import freenet.config.SubConfig; +import freenet.io.comm.ByteCounter; import freenet.io.comm.DMT; import freenet.io.comm.Message; import freenet.io.comm.NotConnectedException; @@ -189,7 +190,7 @@ if((!hasBeenBlown) && (mainUpdater == null || mainUpdater.getFetchedVersion() <= 0)) return; } try { - peer.sendAsync(getUOMAnnouncement(), null, 0, null); + peer.sendAsync(getUOMAnnouncement(), null, 0, ctr); } catch (NotConnectedException e) { // Sad, but ignore it } @@ -887,4 +888,20 @@ return Math.max(0, REVOCATION_FETCH_TIMEOUT - (now - gotJarTime)); } + final ByteCounter ctr = new ByteCounter() { + + public void receivedBytes(int x) { + // FIXME + } + + public void sentBytes(int x) { + node.nodeStats.reportUOMBytesSent(x); + } + + public void sentPayload(int x) { + node.nodeStats.reportUOMBytesSent(x); + } + + }; + } Modified: trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java =================================================================== --- trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java 2008-03-01 23:11:34 UTC (rev 18307) +++ trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java 2008-03-01 23:13:55 UTC (rev 18308) @@ -172,7 +172,7 @@ public void sent() { // Cool } - }, 0, null); + }, 0, updateManager.ctr); // The reply message will start the transfer. It includes the revocation URI // so we can tell if anything wierd is happening. @@ -275,7 +275,7 @@ } }, REQUEST_MAIN_JAR_TIMEOUT); } - }, 0, null); + }, 0, updateManager.ctr); } catch (NotConnectedException e) { synchronized(this) { nodesAskedSendMainJar.remove(source); @@ -494,7 +494,7 @@ final BulkTransmitter bt; try { - bt = new BulkTransmitter(prb, source, uid, updateManager.node.outputThrottle, false, null); + bt = new BulkTransmitter(prb, source, uid, updateManager.node.outputThrottle, false, updateManager.ctr); } catch (DisconnectedException e) { Logger.error(this, "Peer "+source+" asked us for the blob file for the revocation key, then disconnected: "+e, e); return true; @@ -540,7 +540,7 @@ return super.toString() + "("+uid+":"+source.getPeer()+")"; } - }, 0, null); + }, 0, updateManager.ctr); } catch (NotConnectedException e) { Logger.error(this, "Peer "+source+" asked us for the blob file for the revocation key, then disconnected when we tried to send the UOMSendingRevocation: "+e, e); return true; @@ -624,7 +624,7 @@ PartiallyReceivedBulk prb = new PartiallyReceivedBulk(updateManager.node.getUSM(), length, Node.PACKET_SIZE, raf, false); - final BulkReceiver br = new BulkReceiver(prb, source, uid, null); + final BulkReceiver br = new BulkReceiver(prb, source, uid, updateManager.ctr); updateManager.node.executor.execute(new Runnable() { @@ -867,7 +867,7 @@ final BulkTransmitter bt; try { - bt = new BulkTransmitter(prb, source, uid, updateManager.node.outputThrottle, false, null); + bt = new BulkTransmitter(prb, source, uid, updateManager.node.outputThrottle, false, updateManager.ctr); } catch (DisconnectedException e) { Logger.error(this, "Peer "+source+" asked us for the blob file for the main jar, then disconnected: "+e, e); return true; @@ -914,7 +914,7 @@ return super.toString() + "("+uid+":"+source.getPeer()+")"; } - }, 0, null); + }, 0, updateManager.ctr); } catch (NotConnectedException e) { Logger.error(this, "Peer "+source+" asked us for the blob file for the main jar, then disconnected when we tried to send the UOMSendingMain: "+e, e); return true; @@ -1006,7 +1006,7 @@ PartiallyReceivedBulk prb = new PartiallyReceivedBulk(updateManager.node.getUSM(), length, Node.PACKET_SIZE, raf, false); - final BulkReceiver br = new BulkReceiver(prb, source, uid, null); + final BulkReceiver br = new BulkReceiver(prb, source, uid, updateManager.ctr); updateManager.node.executor.execute(new Runnable() { From toad at freenetproject.org Sat Mar 1 23:15:55 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 23:15:55 +0000 (UTC) Subject: [freenet-cvs] r18309 - in trunk/freenet/src/freenet/node: . updater Message-ID: <20080301231555.4843E4791A0@freenetproject.org> Author: toad Date: 2008-03-01 23:15:55 +0000 (Sat, 01 Mar 2008) New Revision: 18309 Modified: trunk/freenet/src/freenet/node/LocationManager.java trunk/freenet/src/freenet/node/Node.java trunk/freenet/src/freenet/node/PeerManager.java trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java Log: Add a ByteCounter to localBroadcast(). Modified: trunk/freenet/src/freenet/node/LocationManager.java =================================================================== --- trunk/freenet/src/freenet/node/LocationManager.java 2008-03-01 23:13:55 UTC (rev 18308) +++ trunk/freenet/src/freenet/node/LocationManager.java 2008-03-01 23:15:55 UTC (rev 18309) @@ -574,7 +574,7 @@ */ private void announceLocChange() { Message msg = DMT.createFNPLocChangeNotification(getLocation()); - node.peers.localBroadcast(msg, false, true); + node.peers.localBroadcast(msg, false, true, this); } private boolean locked; Modified: trunk/freenet/src/freenet/node/Node.java =================================================================== --- trunk/freenet/src/freenet/node/Node.java 2008-03-01 23:13:55 UTC (rev 18308) +++ trunk/freenet/src/freenet/node/Node.java 2008-03-01 23:15:55 UTC (rev 18309) @@ -2707,7 +2707,7 @@ try { Message msg = DMT.createFNPDisconnect(false, false, -1, new ShortBuffer(new byte[0])); - peers.localBroadcast(msg, true, false); + peers.localBroadcast(msg, true, false, null); } catch (Throwable t) { try { // E.g. if we haven't finished startup Modified: trunk/freenet/src/freenet/node/PeerManager.java =================================================================== --- trunk/freenet/src/freenet/node/PeerManager.java 2008-03-01 23:13:55 UTC (rev 18308) +++ trunk/freenet/src/freenet/node/PeerManager.java 2008-03-01 23:15:55 UTC (rev 18309) @@ -23,6 +23,7 @@ import java.util.ArrayList; import freenet.io.comm.AsyncMessageCallback; +import freenet.io.comm.ByteCounter; import freenet.io.comm.DMT; import freenet.io.comm.FreenetInetAddress; import freenet.io.comm.Message; @@ -639,7 +640,7 @@ /** * Asynchronously send this message to every connected peer. */ - public void localBroadcast(Message msg, boolean ignoreRoutability, boolean onlyRealConnections) { + public void localBroadcast(Message msg, boolean ignoreRoutability, boolean onlyRealConnections, ByteCounter ctr) { PeerNode[] peers; synchronized (this) { // myPeers not connectedPeers as connectedPeers only contains @@ -654,7 +655,7 @@ } if(onlyRealConnections && !peers[i].isRealConnection()) continue; try { - peers[i].sendAsync(msg, null, 0, null); + peers[i].sendAsync(msg, null, 0, ctr); } catch (NotConnectedException e) { // Ignore } Modified: trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java =================================================================== --- trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java 2008-03-01 23:13:55 UTC (rev 18308) +++ trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java 2008-03-01 23:15:55 UTC (rev 18309) @@ -168,7 +168,7 @@ msg = getUOMAnnouncement(); broadcastUOMAnnounces = true; } - node.peers.localBroadcast(msg, true, true); + node.peers.localBroadcast(msg, true, true, ctr); } private Message getUOMAnnouncement() { From toad at freenetproject.org Sat Mar 1 23:18:28 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 23:18:28 +0000 (UTC) Subject: [freenet-cvs] r18310 - trunk/freenet/src/freenet/node Message-ID: <20080301231828.2E80D4796D0@freenetproject.org> Author: toad Date: 2008-03-01 23:18:27 +0000 (Sat, 01 Mar 2008) New Revision: 18310 Modified: trunk/freenet/src/freenet/node/RequestHandler.java Log: Fix another NPE Modified: trunk/freenet/src/freenet/node/RequestHandler.java =================================================================== --- trunk/freenet/src/freenet/node/RequestHandler.java 2008-03-01 23:15:55 UTC (rev 18309) +++ trunk/freenet/src/freenet/node/RequestHandler.java 2008-03-01 23:18:27 UTC (rev 18310) @@ -220,7 +220,7 @@ // Offer the data if there is any. node.failureTable.onFinalFailure(key, null, htl, -1, source); PeerNode routedLast = rs == null ? null : rs.routedLast(); - Logger.error(this, "requestsender took too long to respond to requestor ("+TimeUtil.formatTime((now - searchStartTime), 2, true)+"/"+rs.getStatusString()+") routed to "+(routedLast == null ? "null" : routedLast.shortToString())); + Logger.error(this, "requestsender took too long to respond to requestor ("+TimeUtil.formatTime((now - searchStartTime), 2, true)+"/"+(rs == null ? "null" : rs.getStatusString())+") routed to "+(routedLast == null ? "null" : routedLast.shortToString())); applyByteCounts(); unregisterRequestHandlerWithNode(); return; From toad at freenetproject.org Sat Mar 1 23:33:05 2008 From: toad at freenetproject.org (toad at freenetproject.org) Date: Sat, 1 Mar 2008 23:33:05 +0000 (UTC) Subject: [freenet-cvs] r18311 - in trunk/freenet/src/freenet: clients/http l10n node Message-ID: <20080301233305.6BA0E47991A@freenetproject.org> Author: toad Date: 2008-03-01 23:33:05 +0000 (Sat, 01 Mar 2008) New Revision: 18311 Modified: trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties trunk/freenet/src/freenet/node/AnnounceSender.java trunk/freenet/src/freenet/node/NodeStats.java Log: Track and show the total number of bytes used for announcements. Modified: trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java =================================================================== --- trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java 2008-03-01 23:18:27 UTC (rev 18310) +++ trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java 2008-03-01 23:33:05 UTC (rev 18311) @@ -813,6 +813,7 @@ activityList.addChild("li", l10n("authBytes", "total", SizeUtil.formatSize(node.nodeStats.getTotalAuthBytesSent(), true))); activityList.addChild("li", l10n("resendBytes", "total", SizeUtil.formatSize(node.nodeStats.getResendBytesSent(), true))); activityList.addChild("li", l10n("uomBytes", "total", SizeUtil.formatSize(node.nodeStats.getUOMBytesSent(), true))); + activityList.addChild("li", l10n("announceBytes", "total", SizeUtil.formatSize(node.nodeStats.getAnnounceBytesSent(), true))); } } Modified: trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties =================================================================== --- trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2008-03-01 23:18:27 UTC (rev 18310) +++ trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2008-03-01 23:33:05 UTC (rev 18311) @@ -965,6 +965,7 @@ StatisticsToadlet.activityInserts=Inserts: ${totalSenders} total senders, ${CHKhandlers} CHK handlers, ${SSKhandlers} SSK handlers StatisticsToadlet.activityRequests=Requests: ${totalSenders} total senders, ${CHKhandlers} CHK handlers, ${SSKhandlers} SSK handlers StatisticsToadlet.allocMemory=Allocated Java memory: ${memory} +StatisticsToadlet.announceBytes=Announcement output: ${total} StatisticsToadlet.authBytes=Connection setup: ${total} output StatisticsToadlet.bandwidthTitle=Bandwidth StatisticsToadlet.cpus=Available CPUs: ${count} Modified: trunk/freenet/src/freenet/node/AnnounceSender.java =================================================================== --- trunk/freenet/src/freenet/node/AnnounceSender.java 2008-03-01 23:18:27 UTC (rev 18310) +++ trunk/freenet/src/freenet/node/AnnounceSender.java 2008-03-01 23:33:05 UTC (rev 18311) @@ -502,35 +502,14 @@ om.sendAnnouncementReply(uid, next, ref, this); } - private volatile Object totalBytesSync = new Object(); - private int totalBytesSent; - public void sentBytes(int x) { - synchronized(totalBytesSync) { - totalBytesSent += x; - } + node.nodeStats.announceByteCounter.sentBytes(x); } - public int getTotalSentBytes() { - synchronized(totalBytesSync) { - return totalBytesSent; - } - } - - private int totalBytesReceived; - public void receivedBytes(int x) { - synchronized(totalBytesSync) { - totalBytesReceived += x; - } + node.nodeStats.announceByteCounter.receivedBytes(x); } - public int getTotalReceivedBytes() { - synchronized(totalBytesSync) { - return totalBytesReceived; - } - } - public void sentPayload(int x) { // Doesn't count. } Modified: trunk/freenet/src/freenet/node/NodeStats.java =================================================================== --- trunk/freenet/src/freenet/node/NodeStats.java 2008-03-01 23:18:27 UTC (rev 18310) +++ trunk/freenet/src/freenet/node/NodeStats.java 2008-03-01 23:33:05 UTC (rev 18311) @@ -1152,7 +1152,10 @@ } public void sentPayload(int x) { - // Ignore + Logger.error(this, "Payload sent in resendByteCounter????", new Exception("error")); + synchronized(NodeStats.this) { + resendBytesSent += x; + } } }; @@ -1170,4 +1173,33 @@ public long getUOMBytesSent() { return uomBytesSent; } + + // Opennet-related bytes - *not* including bytes sent on requests, those are accounted towards + // the requests' totals. + + private long announceBytesSent; + + public final ByteCounter announceByteCounter = new ByteCounter() { + + public void receivedBytes(int x) { + // Ignore + } + + public void sentBytes(int x) { + synchronized(NodeStats.this) { + announceBytesSent += x; + } + } + + pub