Author: zothar
Date: 2006-05-30 02:19:36 +0000 (Tue, 30 May 2006)
New Revision: 8945
Modified:
trunk/freenet/src/freenet/io/comm/FreenetInetAddress.java
trunk/freenet/src/freenet/io/comm/UdpSocketManager.java
trunk/freenet/src/freenet/node/DNSRequester.java
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/PeerNode.java
Log:
Get the order and semantics of DNS requests sorted out. Explicitly don't do
DNS requests in anywhere we shouldn't in the code (hopefully I didn't miss
something). Don't do DNS requests until the second cycle through DNSRequests
after startup (which may improve startup performance). Various DNS related
tweaks and cleanups.
Modified: trunk/freenet/src/freenet/io/comm/FreenetInetAddress.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/FreenetInetAddress.java 2006-05-30
01:08:59 UTC (rev 8944)
+++ trunk/freenet/src/freenet/io/comm/FreenetInetAddress.java 2006-05-30
02:19:36 UTC (rev 8945)
@@ -161,7 +161,7 @@
if (_address != null) {
return _address;
} else {
- if(doDNSRequest == false) return null;
+ if(!doDNSRequest) return null;
InetAddress addr = getHandshakeAddress();
if( addr != null ) {
this._address = addr;
Modified: trunk/freenet/src/freenet/io/comm/UdpSocketManager.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/UdpSocketManager.java 2006-05-30
01:08:59 UTC (rev 8944)
+++ trunk/freenet/src/freenet/io/comm/UdpSocketManager.java 2006-05-30
02:19:36 UTC (rev 8945)
@@ -471,7 +471,7 @@
* @param destination The peer to send it to.
*/
public void sendPacket(byte[] blockToSend, Peer destination) {
- if( destination.getAddress() == null ) {
+ if( destination.getAddress(false) == null ) {
Logger.error(this, "Tried sending to bad destination
address: null:" + destination.getPort());
return;
}
@@ -482,7 +482,7 @@
}
}
DatagramPacket packet = new DatagramPacket(blockToSend,
blockToSend.length);
- packet.setAddress(destination.getAddress());
+ packet.setAddress(destination.getAddress(false));
packet.setPort(destination.getPort());
// TODO: keep?
Modified: trunk/freenet/src/freenet/node/DNSRequester.java
===================================================================
--- trunk/freenet/src/freenet/node/DNSRequester.java 2006-05-30 01:08:59 UTC
(rev 8944)
+++ trunk/freenet/src/freenet/node/DNSRequester.java 2006-05-30 02:19:36 UTC
(rev 8945)
@@ -12,6 +12,7 @@
final Thread myThread;
final Node node;
private long lastLogTime = 0;
+ private boolean firstCycle = true;
DNSRequester(Node node) {
this.node = node;
@@ -60,10 +61,10 @@
if(!pn.isConnected()) {
// Not connected
// Try new DNS lookup
- // **FIXME** Logger.normal(this, "Calling
myabeUpdateHandshakeIPs() for peer '"+pn.getPeer()+"' named
'"+pn.getName()+"'");
- pn.maybeUpdateHandshakeIPs();
+ pn.maybeUpdateHandshakeIPs(firstCycle);
}
}
+ firstCycle = false;
try {
synchronized(this) {
wait(200); // sleep 200ms
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2006-05-30 01:08:59 UTC (rev
8944)
+++ trunk/freenet/src/freenet/node/Node.java 2006-05-30 02:19:36 UTC (rev
8945)
@@ -626,7 +626,8 @@
if(myOldPeer.getPort() != portNumber)
throw new IllegalArgumentException("Wrong port number "+
myOldPeer.getPort()+" should be
"+portNumber);
- oldIPAddress = myOldPeer.getAddress();
+ // DNSRequester doesn't deal with our own node
+ oldIPAddress = myOldPeer.getAddress(true);
}
String identity = fs.get("identity");
if(identity == null)
@@ -2056,7 +2057,8 @@
for(int i=0;i<peerList.length;i++) {
Peer p = peerList[i].getRemoteDetectedPeer();
if(p == null || p.isNull()) continue;
- InetAddress ip = p.getAddress();
+ // DNSRequester doesn't deal with our own node
+ InetAddress ip = p.getAddress(true);
if(!IPUtil.checkAddress(ip)) continue;
if(countsByPeer.containsKey(ip)) {
Integer count = (Integer)
countsByPeer.get(ip);
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2006-05-30 01:08:59 UTC
(rev 8944)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2006-05-30 02:19:36 UTC
(rev 8945)
@@ -478,7 +478,7 @@
}
toOutputString.append("'");
// Actually do the DNS request for the member Peer of
localHandshakeIPs
-
toOutputString.append(localHandshakeIPs[i].getHandshakeAddress());
+ toOutputString.append(localHandshakeIPs[i].getAddress(false));
toOutputString.append("'");
needSep = true;
}
@@ -486,14 +486,20 @@
return toOutputString.toString();
}
- public void maybeUpdateHandshakeIPs() {
- long now = System.currentTimeMillis();
- if((now - lastAttemptedHandshakeIPUpdateTime) < 5*60*1000) return; // 5
minutes
- lastAttemptedHandshakeIPUpdateTime = now;
- Logger.normal(this, "Updating handshake IPs for peer '"+getPeer()+"'
named '"+myName+"'");
-
- Peer[] p=null;
-
+ /**
+ * Do occasional DNS requests, but ignoreHostnames should be true
+ * for the first cycle through the peers by DNSRequester at node
+ * startup (faster startup time if we know some IPs already)
+ */
+ public void maybeUpdateHandshakeIPs(boolean ignoreHostnames) {
+ long now = System.currentTimeMillis();
+ if((now - lastAttemptedHandshakeIPUpdateTime) < (5*60*1000)) return;
// 5 minutes
+ // We want to come back right away for DNS requesting if this is our
first time through
+ if(!ignoreHostnames)
+ lastAttemptedHandshakeIPUpdateTime = now;
+ Logger.normal(this, "Updating handshake IPs for peer '"+getPeer()+"'
named '"+myName+"' ("+ignoreHostnames+")");
+ Peer[] localHandshakeIPs;
+ Peer[] p = null;
Peer[] myNominalPeer;
// Don't synchronize while doing lookups which may take a long time!
@@ -503,14 +509,26 @@
if(myNominalPeer.length == 0) {
if(detectedPeer == null) {
+ localHandshakeIPs = null;
synchronized(this) {
- handshakeIPs = null;
+ handshakeIPs = localHandshakeIPs;
}
Logger.normal(this, "1: maybeUpdateHandshakeIPs got a
result of: "+handshakeIPsToString());
return;
}
+ localHandshakeIPs = new Peer[] { detectedPeer };
+ for(int i=0;i<localHandshakeIPs.length;i++) {
+ if(ignoreHostnames) {
+ // Don't do a DNS request on the first cycle
through PeerNodes by DNSRequest
+ // upon startup (I suspect the following won't
do anything, but just in case)
+ localHandshakeIPs[i].getAddress(false);
+ } else {
+ // Actually do the DNS request for the member
Peer of localHandshakeIPs
+ localHandshakeIPs[i].getHandshakeAddress();
+ }
+ }
synchronized(this) {
- handshakeIPs = new Peer[] { detectedPeer };
+ handshakeIPs = localHandshakeIPs;
}
Logger.normal(this, "2: maybeUpdateHandshakeIPs got a result
of: "+handshakeIPsToString());
return;
@@ -542,8 +560,13 @@
newPeers[p.length] = extra;
p = newPeers;
}
+ localHandshakeIPs = p;
+ for(int i=0;i<localHandshakeIPs.length;i++) {
+ // Actually do the DNS request for the member Peer of
localHandshakeIPs
+ localHandshakeIPs[i].getHandshakeAddress();
+ }
synchronized(this) {
- handshakeIPs = p;
+ handshakeIPs = localHandshakeIPs;
}
Logger.normal(this, "3: maybeUpdateHandshakeIPs got a result of:
"+handshakeIPsToString());
return;