Made the DHT bootstrapping use IPs instead of DNS names.
authorCameron Dale <camrdale@gmail.com>
Fri, 4 Jan 2008 01:43:14 +0000 (17:43 -0800)
committerCameron Dale <camrdale@gmail.com>
Fri, 4 Jan 2008 01:43:14 +0000 (17:43 -0800)
Also added some logging messages.
Also fixed a problem that caused the application to be loaded twice.

apt-dht.py
apt_dht/apt_dht.py
apt_dht/apt_dht_conf.py
apt_dht_Khashmir/DHT.py
apt_dht_Khashmir/krpc.py

index 67f7ab55c591d5b5e2a275b3c04d54cfc84f18bd..a532527f0f457941fd8c0741fdf0bc5705a3dd6f 100644 (file)
@@ -50,10 +50,12 @@ if config.has_option('DEFAULT', 'username') and config.get('DEFAULT', 'username'
 else:
     uid,gid = None,None
 
+log.msg('Starting application')
 application = service.Application("apt-dht", uid, gid)
-print service.IProcess(application).processName
-service.IProcess(application).processName = 'apt-dht'
+#print service.IProcess(application).processName
+#service.IProcess(application).processName = 'apt-dht'
 
+log.msg('Starting DHT')
 DHT = __import__(config.get('DEFAULT', 'DHT')+'.DHT', globals(), locals(), ['DHT'])
 assert(IDHT.implementedBy(DHT.DHT), "You must provide a DHT implementation that implements the IDHT interface.")
 myDHT = DHT.DHT()
@@ -61,6 +63,7 @@ myDHT.loadConfig(config, config.get('DEFAULT', 'DHT'))
 myDHT.join()
 
 if not config.getboolean('DEFAULT', 'DHT-only'):
+    log.msg('Starting main application server')
     from apt_dht.apt_dht import AptDHT
     myapp = AptDHT(myDHT)
     site = myapp.getSite()
index 50d79c72f2669f6c99beb213419913eab699f341..448d44f9e915355ba74d56b0d02ae97f58150d20 100644 (file)
@@ -1,6 +1,7 @@
 
 from twisted.internet import defer
 from twisted.web2 import server, http, http_headers
+from twisted.python import log
 
 from apt_dht_conf import config
 from PeerManager import PeerManager
@@ -9,6 +10,7 @@ from MirrorManager import MirrorManager
 
 class AptDHT:
     def __init__(self, dht):
+        log.msg('Initializing the main apt_dht application')
         self.dht = dht
         self.http_server = TopLevel(config.get('DEFAULT', 'cache_dir'), self)
         self.http_site = server.Site(self.http_server)
index 7ad5d9d2ee086010dd4fdb966642d13904c57931..dd474bfc622b8c5a58b98296ad463affdc89ef63 100644 (file)
@@ -40,7 +40,7 @@ DEFAULTS = {
 DHT_DEFAULTS = {
     # bootstrap nodes to contact to join the DHT
     'BOOTSTRAP': """www.camrdale.org:9977
-        steveholt.hopto.org:9977""",
+        steveholt.hopto.org:9976""",
     
     # whether this node is a bootstrap node
     'BOOTSTRAP_NODE': "no",
index 51fccc41838707dee1766d489803158547e83d71..dd4d5c46b7bd1a239ca8d2e11ea56bfabd653d42 100644 (file)
@@ -1,7 +1,8 @@
 
 import os, sha, random
 
-from twisted.internet import defer
+from twisted.internet import defer, reactor
+from twisted.internet.abstract import isIPAddress
 from twisted.trial import unittest
 from zope.interface import implements
 
@@ -59,9 +60,16 @@ class DHT:
         for node in self.bootstrap:
             host, port = node.rsplit(':', 1)
             port = int(port)
-            self.khashmir.addContact(host, port, self._join_single)
+            if isIPAddress(host):
+                self._join_gotIP(host, port)
+            else:
+                reactor.resolve(host).addCallback(self._join_gotIP, port)
         
         return self.joining
+
+    def _join_gotIP(self, ip, port):
+        """Called after an IP address has been found for a single bootstrap node."""
+        self.khashmir.addContact(ip, port, self._join_single)
     
     def _join_single(self):
         """Called when a single bootstrap node has been added."""
index 8910ac5033539aa5558be09166b0e47beeb38b32..8972c6c2102322acd36d4bf96a4cc7972ec1e838 100644 (file)
@@ -56,7 +56,7 @@ class hostbroker(protocol.DatagramProtocol):
 
 ## connection
 class KRPC:
-    noisy = 0
+    noisy = 1
     def __init__(self, addr, server, transport):
         self.transport = transport
         self.factory = server
@@ -72,8 +72,8 @@ class KRPC:
             if self.noisy:
                 print "response decode error: " + `e`
         else:
-            #if self.noisy:
-            #    print msg
+            if self.noisy:
+                print msg
             # look at msg type
             if msg[TYP]  == REQ:
                 ilen = len(str)