Don't calculate maxPeerListSize based on --bt-max-peers.

Always use MAX_PEER_LIST_SIZE by default.
pull/1/head
Tatsuhiro Tsujikawa 2011-02-07 00:22:06 +09:00
parent 6c44f6b8eb
commit 656f8cf901
3 changed files with 16 additions and 21 deletions

View File

@ -55,7 +55,8 @@ const int MAX_PEER_LIST_SIZE = 1024;
} // namespace } // namespace
DefaultPeerStorage::DefaultPeerStorage() DefaultPeerStorage::DefaultPeerStorage()
: removedPeerSessionDownloadLength_(0), : maxPeerListSize_(MAX_PEER_LIST_SIZE),
removedPeerSessionDownloadLength_(0),
removedPeerSessionUploadLength_(0), removedPeerSessionUploadLength_(0),
seederStateChoke_(new BtSeederStateChoke()), seederStateChoke_(new BtSeederStateChoke()),
leecherStateChoke_(new BtLeecherStateChoke()), leecherStateChoke_(new BtLeecherStateChoke()),
@ -89,18 +90,6 @@ bool DefaultPeerStorage::isPeerAlreadyAdded(const SharedHandle<Peer>& peer)
FindIdenticalPeer(peer)) != peers_.end(); FindIdenticalPeer(peer)) != peers_.end();
} }
namespace {
size_t calculateMaxPeerListSize(const SharedHandle<BtRuntime>& btRuntime)
{
if(!btRuntime) {
return MAX_PEER_LIST_SIZE;
}
return btRuntime->getMaxPeers() == 0 ?
MAX_PEER_LIST_SIZE :
btRuntime->getMaxPeers()+(btRuntime->getMaxPeers() >> 2);
}
} // namespace
bool DefaultPeerStorage::addPeer(const SharedHandle<Peer>& peer) { bool DefaultPeerStorage::addPeer(const SharedHandle<Peer>& peer) {
if(isPeerAlreadyAdded(peer)) { if(isPeerAlreadyAdded(peer)) {
A2_LOG_DEBUG(fmt("Adding %s:%u is rejected because it has been already" A2_LOG_DEBUG(fmt("Adding %s:%u is rejected because it has been already"
@ -108,9 +97,9 @@ bool DefaultPeerStorage::addPeer(const SharedHandle<Peer>& peer) {
peer->getIPAddress().c_str(), peer->getPort())); peer->getIPAddress().c_str(), peer->getPort()));
return false; return false;
} }
size_t maxPeerListSize = calculateMaxPeerListSize(btRuntime_); const size_t peerListSize = peers_.size();
if(peers_.size() >= maxPeerListSize) { if(peerListSize >= maxPeerListSize_) {
deleteUnusedPeer(peers_.size()-maxPeerListSize+1); deleteUnusedPeer(peerListSize-maxPeerListSize_+1);
} }
peers_.push_front(peer); peers_.push_front(peer);
A2_LOG_DEBUG(fmt("Now peer list contains %lu peers", A2_LOG_DEBUG(fmt("Now peer list contains %lu peers",
@ -120,10 +109,9 @@ bool DefaultPeerStorage::addPeer(const SharedHandle<Peer>& peer) {
void DefaultPeerStorage::addPeer(const std::vector<SharedHandle<Peer> >& peers) void DefaultPeerStorage::addPeer(const std::vector<SharedHandle<Peer> >& peers)
{ {
size_t maxPeerListSize = calculateMaxPeerListSize(btRuntime_);
size_t added = 0; size_t added = 0;
for(std::vector<SharedHandle<Peer> >::const_iterator itr = peers.begin(), for(std::vector<SharedHandle<Peer> >::const_iterator itr = peers.begin(),
eoi = peers.end(); itr != eoi && added < maxPeerListSize; ++itr) { eoi = peers.end(); itr != eoi && added < maxPeerListSize_; ++itr) {
const SharedHandle<Peer>& peer = *itr; const SharedHandle<Peer>& peer = *itr;
if(isPeerAlreadyAdded(peer)) { if(isPeerAlreadyAdded(peer)) {
A2_LOG_DEBUG(fmt("Adding %s:%u is rejected because it has been already" A2_LOG_DEBUG(fmt("Adding %s:%u is rejected because it has been already"
@ -137,8 +125,9 @@ void DefaultPeerStorage::addPeer(const std::vector<SharedHandle<Peer> >& peers)
peers_.push_front(peer); peers_.push_front(peer);
++added; ++added;
} }
if(peers_.size() >= maxPeerListSize) { const size_t peerListSize = peers_.size();
deleteUnusedPeer(peers_.size()-maxPeerListSize); if(peerListSize >= maxPeerListSize_) {
deleteUnusedPeer(peerListSize-maxPeerListSize_);
} }
A2_LOG_DEBUG(fmt("Now peer list contains %lu peers", A2_LOG_DEBUG(fmt("Now peer list contains %lu peers",
static_cast<unsigned long>(peers_.size()))); static_cast<unsigned long>(peers_.size())));

View File

@ -52,6 +52,7 @@ class DefaultPeerStorage : public PeerStorage {
private: private:
SharedHandle<BtRuntime> btRuntime_; SharedHandle<BtRuntime> btRuntime_;
SharedHandle<PieceStorage> pieceStorage_; SharedHandle<PieceStorage> pieceStorage_;
size_t maxPeerListSize_;
std::deque<SharedHandle<Peer> > peers_; std::deque<SharedHandle<Peer> > peers_;
std::deque<SharedHandle<Peer> > droppedPeers_; std::deque<SharedHandle<Peer> > droppedPeers_;
uint64_t removedPeerSessionDownloadLength_; uint64_t removedPeerSessionDownloadLength_;
@ -113,6 +114,11 @@ public:
void setPieceStorage(const SharedHandle<PieceStorage>& pieceStorage); void setPieceStorage(const SharedHandle<PieceStorage>& pieceStorage);
void setBtRuntime(const SharedHandle<BtRuntime>& btRuntime); void setBtRuntime(const SharedHandle<BtRuntime>& btRuntime);
void setMaxPeerListSize(size_t maxPeerListSize)
{
maxPeerListSize_ = maxPeerListSize;
}
}; };
} // namespace aria2 } // namespace aria2

View File

@ -98,7 +98,7 @@ void DefaultPeerStorageTest::testDeleteUnusedPeer() {
void DefaultPeerStorageTest::testAddPeer() { void DefaultPeerStorageTest::testAddPeer() {
DefaultPeerStorage ps; DefaultPeerStorage ps;
SharedHandle<BtRuntime> btRuntime(new BtRuntime()); SharedHandle<BtRuntime> btRuntime(new BtRuntime());
btRuntime->setMaxPeers(3); ps.setMaxPeerListSize(3);
ps.setBtRuntime(btRuntime); ps.setBtRuntime(btRuntime);
SharedHandle<Peer> peer1(new Peer("192.168.0.1", 6889)); SharedHandle<Peer> peer1(new Peer("192.168.0.1", 6889));