Просмотр исходного кода

Drop old node from DHT routing table if node ID has changed.

Tatsuhiro Tsujikawa 14 лет назад
Родитель
Сommit
2dba2f86a4
1 измененных файлов с 10 добавлено и 0 удалено
  1. 10 0
      src/DHTMessageTracker.cc

+ 10 - 0
src/DHTMessageTracker.cc

@@ -90,6 +90,16 @@ DHTMessageTracker::messageArrived
         A2_LOG_DEBUG(fmt("RTT is %s", util::itos(rtt).c_str()));
         message->getRemoteNode()->updateRTT(rtt);
         SharedHandle<DHTMessageCallback> callback = entry->getCallback();
+        if(!(*targetNode == *message->getRemoteNode())) {
+          // Node ID has changed. Drop previous node ID from
+          // DHTRoutingTable
+          A2_LOG_DEBUG
+            (fmt("Node ID has changed: old:%s, new:%s",
+                 util::toHex(targetNode->getID(), DHT_ID_LENGTH).c_str(),
+                 util::toHex(message->getRemoteNode()->getID(),
+                             DHT_ID_LENGTH).c_str()));
+          routingTable_->dropNode(targetNode);
+        }
         return std::make_pair(message, callback);
       } catch(RecoverableException& e) {
         handleTimeoutEntry(entry);