Author: toad
Date: 2007-11-19 19:34:25 +0000 (Mon, 19 Nov 2007)
New Revision: 15847
Modified:
trunk/freenet/src/freenet/io/AddressTracker.java
trunk/freenet/src/freenet/io/AddressTrackerItem.java
trunk/freenet/src/freenet/io/InetAddressAddressTrackerItem.java
trunk/freenet/src/freenet/io/PeerAddressTrackerItem.java
trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java
Log:
Packets cannot have been received until we actually start up the receive loop.
OTOH they cannot have been sent since we started starting up the node.
Modified: trunk/freenet/src/freenet/io/AddressTracker.java
===================================================================
--- trunk/freenet/src/freenet/io/AddressTracker.java 2007-11-19 19:26:00 UTC
(rev 15846)
+++ trunk/freenet/src/freenet/io/AddressTracker.java 2007-11-19 19:34:25 UTC
(rev 15847)
@@ -38,10 +38,12 @@
/** Maximum number of Item's of either type */
static final int MAX_ITEMS = 1000;
- private long timeDefinitelyNoPackets;
+ private long timeDefinitelyNoPacketsReceived;
+ private long timeDefinitelyNoPacketsSent;
public AddressTracker() {
- timeDefinitelyNoPackets = System.currentTimeMillis();
+ timeDefinitelyNoPacketsReceived = System.currentTimeMillis();
+ timeDefinitelyNoPacketsSent = System.currentTimeMillis();
}
public void sentPacketTo(Peer peer) {
@@ -58,11 +60,12 @@
synchronized(this) {
PeerAddressTrackerItem peerItem =
(PeerAddressTrackerItem) peerTrackers.get(peer);
if(peerItem == null) {
- peerItem = new
PeerAddressTrackerItem(timeDefinitelyNoPackets, peer);
+ peerItem = new
PeerAddressTrackerItem(timeDefinitelyNoPacketsReceived,
timeDefinitelyNoPacketsSent, peer);
if(peerTrackers.size() > MAX_ITEMS) {
peerTrackers.clear();
ipTrackers.clear();
- timeDefinitelyNoPackets = now;
+ timeDefinitelyNoPacketsReceived = now;
+ timeDefinitelyNoPacketsSent = now;
}
peerTrackers.put(peer, peerItem);
}
@@ -72,11 +75,12 @@
peerItem.receivedPacket(now);
InetAddressAddressTrackerItem ipItem =
(InetAddressAddressTrackerItem) ipTrackers.get(ip);
if(ipItem == null) {
- ipItem = new
InetAddressAddressTrackerItem(timeDefinitelyNoPackets, ip);
+ ipItem = new
InetAddressAddressTrackerItem(timeDefinitelyNoPacketsReceived,
timeDefinitelyNoPacketsSent, ip);
if(ipTrackers.size() > MAX_ITEMS) {
peerTrackers.clear();
ipTrackers.clear();
- timeDefinitelyNoPackets = now;
+ timeDefinitelyNoPacketsReceived = now;
+ timeDefinitelyNoPacketsSent = now;
}
ipTrackers.put(ip, ipItem);
}
@@ -86,4 +90,12 @@
ipItem.receivedPacket(now);
}
}
+
+ public synchronized void startReceive(long now) {
+ timeDefinitelyNoPacketsReceived = now;
+ }
+
+ public synchronized void startSend(long now) {
+ timeDefinitelyNoPacketsSent = now;
+ }
}
Modified: trunk/freenet/src/freenet/io/AddressTrackerItem.java
===================================================================
--- trunk/freenet/src/freenet/io/AddressTrackerItem.java 2007-11-19
19:26:00 UTC (rev 15846)
+++ trunk/freenet/src/freenet/io/AddressTrackerItem.java 2007-11-19
19:34:25 UTC (rev 15847)
@@ -27,10 +27,14 @@
/** The time at which the first packet was sent to this address. */
private long timeFirstSentPacket;
/** The earliest time, before timeFirstReceivedPacket, at which we know
for
- * certain that there was no packet sent or received. This may be the
- * startup time of the node, or it may be later, if we have had to
clear
- * the tracker cache. */
- private long timeDefinitelyNoPackets;
+ * certain that there was no packet received. This is typically the
startup
+ * time of the server socket. It may be later if the cache has to be
+ * flushed. */
+ private long timeDefinitelyNoPacketsReceived;
+ /** The earliest time, before timeFirstSentPacket, at which we know for
+ * certain that there was no packet sent. This is typically the startup
+ * time of the node. It may be later if the cache has to be flushed. */
+ private long timeDefinitelyNoPacketsSent;
/** The time at which we received the most recent packet */
private long timeLastReceivedPacket;
/** The time at which we sent the most recent packet */
@@ -40,14 +44,15 @@
/** The total number of packets received from this address */
private long packetsReceived;
- public AddressTrackerItem(long timeDefinitelyNoPackets) {
+ public AddressTrackerItem(long timeDefinitelyNoPacketsReceived, long
timeDefinitelyNoPacketSent) {
timeFirstReceivedPacket = -1;
timeFirstSentPacket = -1;
timeLastReceivedPacket = -1;
timeLastSentPacket = -1;
packetsSent = 0;
packetsReceived = 0;
- this.timeDefinitelyNoPackets = timeDefinitelyNoPackets;
+ this.timeDefinitelyNoPacketsReceived =
timeDefinitelyNoPacketsReceived;
+ this.timeDefinitelyNoPacketsSent = timeDefinitelyNoPacketsSent;
}
public synchronized void sentPacket(long now) {
@@ -80,10 +85,14 @@
return timeLastSentPacket;
}
- public synchronized long timeDefinitelyNoPackets() {
- return timeDefinitelyNoPackets;
+ public synchronized long timeDefinitelyNoPacketsSent() {
+ return timeDefinitelyNoPacketsSent;
}
+ public synchronized long timeDefinitelyNoPacketsReceived() {
+ return timeDefinitelyNoPacketsReceived;
+ }
+
public synchronized long packetsSent() {
return packetsSent;
}
Modified: trunk/freenet/src/freenet/io/InetAddressAddressTrackerItem.java
===================================================================
--- trunk/freenet/src/freenet/io/InetAddressAddressTrackerItem.java
2007-11-19 19:26:00 UTC (rev 15846)
+++ trunk/freenet/src/freenet/io/InetAddressAddressTrackerItem.java
2007-11-19 19:34:25 UTC (rev 15847)
@@ -19,8 +19,9 @@
public class InetAddressAddressTrackerItem extends AddressTrackerItem {
- public InetAddressAddressTrackerItem(long timeDefinitelyNoPackets,
InetAddress addr) {
- super(timeDefinitelyNoPackets);
+ public InetAddressAddressTrackerItem(long
timeDefinitelyNoPacketsReceived,
+ long timeDefinitelyNoPacketsSent, InetAddress addr) {
+ super(timeDefinitelyNoPacketsReceived,
timeDefinitelyNoPacketsSent);
this.addr = addr;
}
Modified: trunk/freenet/src/freenet/io/PeerAddressTrackerItem.java
===================================================================
--- trunk/freenet/src/freenet/io/PeerAddressTrackerItem.java 2007-11-19
19:26:00 UTC (rev 15846)
+++ trunk/freenet/src/freenet/io/PeerAddressTrackerItem.java 2007-11-19
19:34:25 UTC (rev 15847)
@@ -21,8 +21,9 @@
public final Peer peer;
- public PeerAddressTrackerItem(long timeDefinitelyNoPackets, Peer peer) {
- super(timeDefinitelyNoPackets);
+ public PeerAddressTrackerItem(long timeDefinitelyNoPacketsReceived,
+ long timeDefinitelyNoPacketsSent, Peer peer) {
+ super(timeDefinitelyNoPacketsReceived,
timeDefinitelyNoPacketsSent);
this.peer = peer;
}
Modified: trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java 2007-11-19
19:26:00 UTC (rev 15846)
+++ trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java 2007-11-19
19:34:25 UTC (rev 15847)
@@ -63,6 +63,7 @@
dropRandom = new Random();
logMINOR = Logger.shouldLog(Logger.MINOR, this);
tracker = new AddressTracker();
+ tracker.startSend(node.startupTime);
}
/** Must be called, or we will NPE in run() */
@@ -75,6 +76,7 @@
}
public void run() { // Listen for packets
+ tracker.startReceive(System.currentTimeMillis());
try {
runLoop();
} catch (Throwable t) {