Преглед изворни кода

2008-03-15 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

	Merged aria2-0.13.0+1-dht.patch, PATCH#1911900
Tatsuhiro Tsujikawa пре 18 година
родитељ
комит
886c2c783a
4 измењених фајлова са 34 додато и 30 уклоњено
  1. 4 0
      ChangeLog
  2. 20 26
      src/DHTBucket.cc
  3. 7 1
      src/DHTBucket.h
  4. 3 3
      src/DHTRoutingTable.cc

+ 4 - 0
ChangeLog

@@ -1,3 +1,7 @@
+2008-03-15  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
+
+	Merged aria2-0.13.0+1-dht.patch, PATCH#1911900
+
 2008-03-15  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
 
 	Merged aria2-0.13.0+1-nls.patch, PATCH#1909984

+ 20 - 26
src/DHTBucket.cc

@@ -119,23 +119,6 @@ bool DHTBucket::addNode(const SharedHandle<DHTNode>& node)
       } else {
 	return false;
       }
-	/*
-      } else if(splitAllowed()) {
-	return false;
-      } else {
-	std::deque<SharedHandle<DHTNode> >::iterator ci = find(_cachedNodes.begin(), _cachedNodes.end(), node);
-	if(ci == _cachedNodes.end()) {
-	  _cachedNodes.push_back(node);
-	  if(_cachedNodes.size() > CACHE_SIZE) {
-	    _cachedNodes.erase(_cachedNodes.begin(), _cachedNodes().begin()+CACHE_SIZE-_cachedNodes.size());
-	  }
-	} else {
-	  _cachedNodes.erase(ci);
-	  _cachedNodes.push_back(node);
-	}
-	return true;
-      }
-	*/
     }
   } else {
     _nodes.erase(itr);
@@ -144,19 +127,25 @@ bool DHTBucket::addNode(const SharedHandle<DHTNode>& node)
   }
 }
 
+void DHTBucket::cacheNode(const SharedHandle<DHTNode>& node)
+{
+  // _cachedNodes are sorted by last time seen
+  _cachedNodes.push_front(node);
+  if(_cachedNodes.size() > CACHE_SIZE) {
+    _cachedNodes.resize(CACHE_SIZE, 0);
+  }
+}
+
 void DHTBucket::dropNode(const SharedHandle<DHTNode>& node)
 {
-  return;
-  /*
-  std::deque<SharedHandle<DHTNode> >::iterator itr = find(_nodes.begin(), _nodes.end(), node);
-  if(itr != _nodes.end()) {
-    _nodes.erase(itr);
-    if(_cachedNodes.size()) {
-      _nodes.push_back(_cachedNodes.back());
-      _cachedNodes.erase(_cachedNodes.begin()+_cachedNodes.size()-1);
+  if(_cachedNodes.size()) {
+    std::deque<SharedHandle<DHTNode> >::iterator itr = find(_nodes.begin(), _nodes.end(), node);
+    if(itr != _nodes.end()) {
+      _nodes.erase(itr);
+      _nodes.push_back(_cachedNodes.front());
+      _cachedNodes.erase(_cachedNodes.begin());
     }
   }
-  */
 }
 
 void DHTBucket::moveToHead(const SharedHandle<DHTNode>& node)
@@ -291,4 +280,9 @@ SharedHandle<DHTNode> DHTBucket::getLRUQuestionableNode() const
   }
 }
 
+const std::deque<SharedHandle<DHTNode> >& DHTBucket::getCachedNodes() const
+{
+  return _cachedNodes;
+}
+
 } // namespace aria2

+ 7 - 1
src/DHTBucket.h

@@ -61,7 +61,9 @@ private:
   // sorted in ascending order
   std::deque<SharedHandle<DHTNode> > _nodes;
 
-  //std::deque<SharedHandle<DHTNode> > _cachedNodes;
+  // a replacement cache. The maximum size is specified by CACHE_SIZE.
+  // This is sorted by last time seen.
+  std::deque<SharedHandle<DHTNode> > _cachedNodes;
 
   Time _lastUpdated;
 
@@ -89,6 +91,8 @@ public:
 
   bool addNode(const SharedHandle<DHTNode>& node);
 
+  void cacheNode(const SharedHandle<DHTNode>& node);
+
   bool splitAllowed() const;
   
   size_t getPrefixLength() const
@@ -131,6 +135,8 @@ public:
   bool containsQuestionableNode() const;
 
   SharedHandle<DHTNode> getLRUQuestionableNode() const;
+
+  const std::deque<SharedHandle<DHTNode> >& getCachedNodes() const;
 };
 
 } // namespace aria2

+ 3 - 3
src/DHTRoutingTable.cc

@@ -98,9 +98,9 @@ bool DHTRoutingTable::addNode(const SharedHandle<DHTNode>& node, bool good)
 	bnode = lbnode;
       }
     } else {
-      if(good && bucket->containsQuestionableNode()) {
-	_logger->debug("Issuing ReplaceNodeTask: new node=%s", node->toString().c_str());
-	_taskQueue->addImmediateTask(_taskFactory->createReplaceNodeTask(bucket, node));
+      if(good) {
+	bucket->cacheNode(node);
+	_logger->debug("Cached node=%s", node->toString().c_str());
       }
       return false;
     }