diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-04-05 10:38:15 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-04-05 10:38:15 +0000 |
| commit | becd34bcb9eae1aecd6b1ec2a79f8990aee04ec6 (patch) | |
| tree | 9b6c22edebc9a0f671062e78c99252a3219f9a7d | |
| parent | 88318194070be9b14ee2295919c2c211b7fd501d (diff) | |
2009-04-05 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed the bug that removed peer's session upload/download length
are counted twice in _cachedTransferStat before it is
re-calculated. This affected the calculation of shara ratio,
resulting aria2 wrongly determines that specified share ratio is
reached. Also fixed the typo in calculateStatFor function name.
* src/BtSetup.cc
* src/DefaultPeerStorage.cc
* src/ShareRatioSeedCriteria.h
* test/ShareRatioSeedCriteriaTest.cc
| -rw-r--r-- | ChangeLog | 12 | ||||
| -rw-r--r-- | src/BtSetup.cc | 2 | ||||
| -rw-r--r-- | src/DefaultPeerStorage.cc | 15 | ||||
| -rw-r--r-- | src/ShareRatioSeedCriteria.h | 12 | ||||
| -rw-r--r-- | test/ShareRatioSeedCriteriaTest.cc | 7 |
5 files changed, 25 insertions, 23 deletions
@@ -1,3 +1,15 @@ +2009-04-05 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net> + + Fixed the bug that removed peer's session upload/download length + are counted twice in _cachedTransferStat before it is + re-calculated. This affected the calculation of shara ratio, + resulting aria2 wrongly determines that specified share ratio is + reached. Also fixed the typo in calculateStatFor function name. + * src/BtSetup.cc + * src/DefaultPeerStorage.cc + * src/ShareRatioSeedCriteria.h + * test/ShareRatioSeedCriteriaTest.cc + 2009-04-01 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net> * Release 1.3.0 diff --git a/src/BtSetup.cc b/src/BtSetup.cc index 8ed29674..033e9b6a 100644 --- a/src/BtSetup.cc +++ b/src/BtSetup.cc @@ -57,6 +57,7 @@ #include "DHTRegistry.h" #include "BtProgressInfoFile.h" #include "BtAnnounce.h" +#include "BtRuntime.h" namespace aria2 { @@ -136,7 +137,6 @@ void BtSetup::setup(std::deque<Command*>& commands, btContext)); cri->setPieceStorage(pieceStorage); cri->setPeerStorage(peerStorage); - cri->setBtRuntime(btRuntime); unionCri->addSeedCriteria(cri); } diff --git a/src/DefaultPeerStorage.cc b/src/DefaultPeerStorage.cc index c13f6b41..a8e8df8e 100644 --- a/src/DefaultPeerStorage.cc +++ b/src/DefaultPeerStorage.cc @@ -192,7 +192,7 @@ void DefaultPeerStorage::getActivePeers(std::deque<SharedHandle<Peer> >& activeP std::for_each(peers.begin(), peers.end(), CollectActivePeer(activePeers)); } -static TransferStat caluclateStatFor(const SharedHandle<Peer>& peer) +static TransferStat calculateStatFor(const SharedHandle<Peer>& peer) { struct timeval now; gettimeofday(&now, 0); @@ -223,7 +223,7 @@ TransferStat DefaultPeerStorage::calculateStat() s.sessionDownloadLength = (*i)->getSessionDownloadLength(); s.sessionUploadLength = (*i)->getSessionUploadLength(); - _peerTransferStatMap[(*i)->getID()] = caluclateStatFor(*i); + _peerTransferStatMap[(*i)->getID()] = calculateStatFor(*i); stat += s; } _cachedTransferStat = stat; @@ -240,8 +240,8 @@ TransferStat DefaultPeerStorage::calculateStat() void DefaultPeerStorage::updateTransferStatFor(const SharedHandle<Peer>& peer) { logger->debug("Updating TransferStat for peer %s", peer->getID().c_str()); - _cachedTransferStat = _cachedTransferStat-_peerTransferStatMap[peer->getID()]; - TransferStat s = caluclateStatFor(peer); + _cachedTransferStat -= _peerTransferStatMap[peer->getID()]; + TransferStat s = calculateStatFor(peer); _cachedTransferStat += s; _peerTransferStatMap[peer->getID()] = s; } @@ -266,8 +266,11 @@ void DefaultPeerStorage::onErasingPeer(const SharedHandle<Peer>& peer) {} void DefaultPeerStorage::onReturningPeer(const SharedHandle<Peer>& peer) { if(peer->isActive()) { - removedPeerSessionDownloadLength += peer->getSessionDownloadLength(); - removedPeerSessionUploadLength += peer->getSessionUploadLength(); + TransferStat removedStat(calculateStatFor(peer)); + removedPeerSessionDownloadLength += removedStat.getSessionDownloadLength(); + removedPeerSessionUploadLength += removedStat.getSessionUploadLength(); + _cachedTransferStat -= removedStat; + // Execute choking algorithm if unchoked and interested peer is // disconnected. if(!peer->amChoking() && peer->peerInterested()) { diff --git a/src/ShareRatioSeedCriteria.h b/src/ShareRatioSeedCriteria.h index 41a8ae92..d09d5219 100644 --- a/src/ShareRatioSeedCriteria.h +++ b/src/ShareRatioSeedCriteria.h @@ -39,7 +39,6 @@ #include "BtContext.h" #include "PeerStorage.h" #include "PieceStorage.h" -#include "BtRuntime.h" namespace aria2 { @@ -49,7 +48,6 @@ private: SharedHandle<BtContext> btContext; SharedHandle<PeerStorage> _peerStorage; SharedHandle<PieceStorage> _pieceStorage; - SharedHandle<BtRuntime> _btRuntime; public: ShareRatioSeedCriteria(double ratio, const SharedHandle<BtContext>& btContext) :ratio(ratio), @@ -64,10 +62,9 @@ public: return false; } TransferStat stat = _peerStorage->calculateStat(); - uint64_t allTimeUploadLength = - _btRuntime->getUploadLengthAtStartup()+stat.getSessionUploadLength(); return ratio <= - ((double)allTimeUploadLength)/_pieceStorage->getCompletedLength(); + (double)stat.getAllTimeUploadLength()/ + _pieceStorage->getCompletedLength(); } void setRatio(double ratio) { @@ -87,11 +84,6 @@ public: { _pieceStorage = pieceStorage; } - - void setBtRuntime(const SharedHandle<BtRuntime>& btRuntime) - { - _btRuntime = btRuntime; - } }; } // namespace aria2 diff --git a/test/ShareRatioSeedCriteriaTest.cc b/test/ShareRatioSeedCriteriaTest.cc index 13db47c1..8b5d8a15 100644 --- a/test/ShareRatioSeedCriteriaTest.cc +++ b/test/ShareRatioSeedCriteriaTest.cc @@ -30,13 +30,9 @@ void ShareRatioSeedCriteriaTest::testEvaluate() { btContext->setTotalLength(1000000); btContext->setInfoHash((const unsigned char*)infoHash.c_str()); - SharedHandle<BtRuntime> btRuntime(new BtRuntime()); - btRuntime->setUploadLengthAtStartup(500000); - SharedHandle<MockPeerStorage> peerStorage(new MockPeerStorage()); TransferStat stat; - stat.setSessionDownloadLength(1000000); - stat.setSessionUploadLength(500000); + stat.setAllTimeUploadLength(1000000); peerStorage->setStat(stat); SharedHandle<MockPieceStorage> pieceStorage(new MockPieceStorage()); @@ -45,7 +41,6 @@ void ShareRatioSeedCriteriaTest::testEvaluate() { ShareRatioSeedCriteria cri(1.0, btContext); cri.setPeerStorage(peerStorage); cri.setPieceStorage(pieceStorage); - cri.setBtRuntime(btRuntime); CPPUNIT_ASSERT(cri.evaluate()); |
