Author: toad
Date: 2008-08-06 16:20:20 +0000 (Wed, 06 Aug 2008)
New Revision: 21634
Modified:
trunk/freenet/src/freenet/node/FNPPacketMangler.java
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/SeedServerTestPeerNode.java
trunk/freenet/src/freenet/node/simulator/SeednodePingTest.java
Log:
Significant improvements on nextgens' seednode tester
Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-08-06
13:57:25 UTC (rev 21633)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-08-06
16:20:20 UTC (rev 21634)
@@ -976,7 +976,7 @@
}
// At this point we know it's from the peer, so we can report a
packet received.
- pn.receivedPacket(true);
+ pn.receivedPacket(true, false);
sendJFKMessage3(1, 2, 3, nonceInitiator, nonceResponder,
hisExponential, authenticator, pn, replyTo, unknownInitiator, setupType);
@@ -1153,7 +1153,7 @@
}
// At this point we know it's from the peer, so we can report a
packet received.
- pn.receivedPacket(true);
+ pn.receivedPacket(true, false);
// Send reply
sendJFKMessage4(1, 2, 3, nonceInitiator,
nonceResponder,initiatorExponential, responderExponential,
@@ -1954,8 +1954,9 @@
tracker.destForgotPacket(realSeqNo);
}
- tracker.pn.receivedPacket(false); // Must keep the connection
open, even if it's an ack packet only and on an incompatible connection - we
may want to do a UOM transfer e.g.
-
+ tracker.pn.receivedPacket(false, true); // Must keep the
connection open, even if it's an ack packet only and on an incompatible
connection - we may want to do a UOM transfer e.g.
+// System.err.println(tracker.pn.getIdentityString()+" : received
packet");
+
// No sequence number == no messages
if((seqNumber != -1) && tracker.alreadyReceived(seqNumber)) {
@@ -2586,6 +2587,7 @@
// pn.getPeer() cannot be null
try {
sendPacket(output, kt.pn.getPeer(), kt.pn,
alreadyReportedBytes);
+// System.err.println(kt.pn.getIdentityString()+" : sent
packet length "+output.length);
} catch (LocalAddressException e) {
Logger.error(this, "Tried to send data packet to local
address: "+kt.pn.getPeer()+" for "+kt.pn.allowLocalAddresses());
}
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2008-08-06 13:57:25 UTC (rev
21633)
+++ trunk/freenet/src/freenet/node/Node.java 2008-08-06 16:20:20 UTC (rev
21634)
@@ -3139,8 +3139,8 @@
/**
* Connect this node to another node (for purposes of testing)
*/
- public void connectToSeednode(SeedServerPeerNode node) throws
OpennetDisabledException, FSParseException, PeerParseException,
ReferenceSignatureVerificationException {
-
peers.addPeer(createNewSeedServerTestPeerNode(node.exportFieldSet()),false,false);
+ public void connectToSeednode(SeedServerTestPeerNode node) throws
OpennetDisabledException, FSParseException, PeerParseException,
ReferenceSignatureVerificationException {
+ peers.addPeer(node,false,false);
}
public void connect(Node node) throws FSParseException,
PeerParseException, ReferenceSignatureVerificationException {
peers.connect(node.darknetCrypto.exportPublicFieldSet(),
darknetCrypto.packetMangler);
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2008-08-06 13:57:25 UTC
(rev 21633)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2008-08-06 16:20:20 UTC
(rev 21634)
@@ -143,6 +143,8 @@
private long timeLastSentPacket;
/** When did we last receive a packet? */
private long timeLastReceivedPacket;
+ /** When did we last receive a non-auth packet? */
+ private long timeLastReceivedDataPacket;
/** When was isConnected() last true? */
private long timeLastConnected;
/** When was isRoutingCompatible() last true? */
@@ -1105,6 +1107,10 @@
public synchronized long lastReceivedPacketTime() {
return timeLastReceivedPacket;
}
+
+ public synchronized long lastReceivedDataPacketTime() {
+ return timeLastReceivedDataPacket;
+ }
public synchronized long timeLastConnected() {
return timeLastConnected;
@@ -1765,8 +1771,9 @@
* @throws NotConnectedException
* @param dontLog If true, don't log an error or throw an exception if
we are not connected. This
* can be used in handshaking when the connection hasn't been verified
yet.
+ * @param dataPacket If this is a real packet, as opposed to a handshake
packet.
*/
- void receivedPacket(boolean dontLog) {
+ void receivedPacket(boolean dontLog, boolean dataPacket) {
synchronized(this) {
if((!isConnected) && (!dontLog)) {
// Don't log if we are disconnecting, because
receiving packets during disconnecting is normal.
@@ -1785,6 +1792,8 @@
long now = System.currentTimeMillis();
synchronized(this) {
timeLastReceivedPacket = now;
+ if(dataPacket)
+ timeLastReceivedDataPacket = now;
}
}
@@ -1976,7 +1985,7 @@
" old: " + previousTracker + " unverified: " +
unverifiedTracker + " bootID: " + thisBootID + " for " + shortToString());
// Received a packet
- receivedPacket(unverified);
+ receivedPacket(unverified, false);
setPeerNodeStatus(now);
Modified: trunk/freenet/src/freenet/node/SeedServerTestPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/SeedServerTestPeerNode.java 2008-08-06
13:57:25 UTC (rev 21633)
+++ trunk/freenet/src/freenet/node/SeedServerTestPeerNode.java 2008-08-06
16:20:20 UTC (rev 21634)
@@ -42,5 +42,43 @@
protected void sendInitialMessages() {}
+ public enum FATE {
+ // Never connected
+ NEVER_CONNECTED,
+ // Connected but no packets received yet
+ CONNECTED_NO_PACKETS_RECEIVED,
+ // Connected and received packets
+ CONNECTED_SUCCESS,
+ // Connected but timed out after no packets received
+ CONNECTED_TIMEOUT_NO_PACKETS_RECEIVED,
+ // Connected but then disconnected for no known reason
+ CONNECTED_DISCONNECTED_UNKNOWN
+ }
+ public void onRemove() {
+ long lastReceivedDataPacketTime = lastReceivedDataPacketTime();
+ if(lastReceivedDataPacketTime <= 0 &&
timeLastConnectionCompleted() > 0)
+ System.err.println(this.getIdentityString()+" :
REMOVED: TIMEOUT: NO PACKETS RECEIVED AFTER SUCCESSFUL CONNECTION SETUP");
+ else if(timeLastConnectionCompleted() <= 0)
+ System.err.println(this.getIdentityString()+" :
REMOVED: NEVER CONNECTED");
+ else
+ System.err.println(this.getIdentityString()+" :
REMOVED: UNKNOWN CAUSE");
+ super.onRemove();
+ }
+
+ public FATE getFate() {
+ long lastReceivedDataPacketTime = lastReceivedDataPacketTime();
+ if(isConnected()) {
+ if(lastReceivedDataPacketTime <= 0)
+ return FATE.CONNECTED_NO_PACKETS_RECEIVED;
+ else
+ return FATE.CONNECTED_SUCCESS;
+ }
+ long lastConnectionTime = timeLastConnectionCompleted();
+ if(lastConnectionTime <= 0)
+ return FATE.NEVER_CONNECTED;
+ if(lastReceivedDataPacketTime <= 0)
+ return FATE.CONNECTED_TIMEOUT_NO_PACKETS_RECEIVED;
+ return FATE.CONNECTED_DISCONNECTED_UNKNOWN;
+ }
}
Modified: trunk/freenet/src/freenet/node/simulator/SeednodePingTest.java
===================================================================
--- trunk/freenet/src/freenet/node/simulator/SeednodePingTest.java
2008-08-06 13:57:25 UTC (rev 21633)
+++ trunk/freenet/src/freenet/node/simulator/SeednodePingTest.java
2008-08-06 16:20:20 UTC (rev 21634)
@@ -15,6 +15,7 @@
import freenet.node.OpennetDisabledException;
import freenet.node.SeedServerPeerNode;
import freenet.node.SeedServerTestPeerNode;
+import freenet.node.SeedServerTestPeerNode.FATE;
import freenet.support.Executor;
import freenet.support.Logger;
import freenet.support.PooledExecutor;
@@ -23,6 +24,8 @@
import freenet.support.TimeUtil;
import java.io.File;
import java.io.IOException;
+import java.util.EnumMap;
+import java.util.Map;
import java.util.Vector;
/**
@@ -61,7 +64,8 @@
Thread.sleep(8000);
int pingID = 0;
- while(true) {
+ long deadline = System.currentTimeMillis() + 5*60*1000;
+ while(System.currentTimeMillis() < deadline) {
int countConnectedSeednodes = 0;
for(SeedServerPeerNode seednode :
node.peers.getConnectedSeedServerPeersVector(null)) {
try {
@@ -86,8 +90,24 @@
System.out.println(seednode.getIdentityString()
+ " is not connected "+seednode.getHandshakeCount());
}
}
+ Map<FATE, Integer> totals = new
EnumMap(SeedServerTestPeerNode.FATE.class);
+ for(SeedServerTestPeerNode seednode : seedNodes) {
+ FATE fate = seednode.getFate();
+ Integer x = totals.get(fate);
+ if(x == null)
+ totals.put(fate, 1);
+ else
+ totals.put(fate, x+1);
+ System.out.println(seednode.getIdentityString() + " :
"+fate+ " : "+seednode.getPeerNodeStatusString());
+ }
+ System.out.println("TOTALS:");
+ for(FATE fate : totals.keySet()) {
+ System.out.println(fate + " : "+totals.get(fate));
+ }
System.out.println("##################
("+node.peers.countConnectedPeers()+")
"+countConnectedSeednodes+'/'+node.peers.countSeednodes());
Thread.sleep(5000);
}
+ System.out.println("Completed seednodes scan.");
+ System.exit(0);
}
}