]> git.mxchange.org Git - quix0rs-apt-p2p.git/commitdiff
Fix some bugs in the pinging and ID checking.
authorCameron Dale <camrdale@gmail.com>
Thu, 20 Mar 2008 22:09:29 +0000 (15:09 -0700)
committerCameron Dale <camrdale@gmail.com>
Thu, 20 Mar 2008 22:09:29 +0000 (15:09 -0700)
Raise an exception if the node's ID has changed. This means the node's
returned results will be ignored.

The KTable replaceStaleNode now adds the new node if there's space even
if the old one isn't found. This is due to the node ID having changed
resulting in instantly removing the node from the routing table.

The handler for the ping result in insertNode was mistakenly taking the
Failure returned as a result as a node and passing it to replaceStaleNode.

apt_p2p_Khashmir/khashmir.py
apt_p2p_Khashmir/knode.py
apt_p2p_Khashmir/ktable.py

index 3ed7baf31b6f93c4b0e7583f69641bc8374e0f84..230de1fb3a18124b30a5b74291e1facb8948290e 100644 (file)
@@ -208,7 +208,7 @@ class KhashmirBase(protocol.Factory):
             (datetime.now() - old.lastSeen) > 
              timedelta(seconds=self.config['MIN_PING_INTERVAL'])):
             
-            def _staleNodeHandler(oldnode = old, newnode = node):
+            def _staleNodeHandler(failure, oldnode = old, newnode = node):
                 """The pinged node never responded, so replace it."""
                 self.table.replaceStaleNode(oldnode, newnode)
             
index 2e2c9b64392b9caf1eb3be2e11258ce225187667..36d77bdc99ea9a872f09609cad81db2f6af73cf8 100644 (file)
@@ -21,6 +21,7 @@ class KNodeBase(Node):
             if self.id != NULL_ID and senderid != self.id:
                 log.msg("Got response from different node than expected.")
                 self.table.invalidateNode(self)
+                raise Exception, "Node ID has changed"
                 
         return dict
 
index 864dfe50feaadf1732f3319e46f48d68403efdd9..1107f00ee4be9b2b19164809eae04172f6e0757e 100644 (file)
@@ -128,11 +128,13 @@ class KTable:
         try:
             it = self.buckets[i].l.index(stale.num)
         except ValueError:
-            return
-    
-        # Remove the stale node and insert the new one
-        del(self.buckets[i].l[it])
-        if new:
+            pass
+        else:
+            # Remove the stale node
+            del(self.buckets[i].l[it])
+        
+        # Insert the new node
+        if new and self._bucketIndexForInt(new.num) == i and len(self.buckets[i].l) < self.config['K']:
             self.buckets[i].l.append(new)
     
     def insertNode(self, node, contacted = True):