diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-11-12 14:13:00 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-11-12 14:13:00 +0000 |
| commit | aef50efed072fd7bbbcceae8fdfde7f0570a1a40 (patch) | |
| tree | a5848d2943968c578790ddf05eb2b20f3c1fa73e /src | |
| parent | 7c41d11be325a2f85108a28a2111353ad0e208b4 (diff) | |
2007-11-12 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Do not rotate tiers in announce-list.
* src/DefaultBtAnnounce.{h, cc}: Removed trackerNumTry.
AnnounceList::allTiersFailed() used instead to detect whether
all
tiers are tried and failed.
* test/DefaultBtAnnounceTest.cc
* src/AnnounceList.{h, cc}: If all tiers are tried and failed
then
allTiersFailed() returns true. To reset tier pointer, call
resetTier();
* test/AnnounceListTest.cc
* src/TrackerWatcherCommand.cc (execute): Removed DlAbortEx
catch
clause. Catch RecoverableException instead of DlRetryEx instead.
Diffstat (limited to 'src')
| -rw-r--r-- | src/AnnounceList.cc | 16 | ||||
| -rw-r--r-- | src/AnnounceList.h | 4 | ||||
| -rw-r--r-- | src/DefaultBtAnnounce.cc | 12 | ||||
| -rw-r--r-- | src/DefaultBtAnnounce.h | 1 | ||||
| -rw-r--r-- | src/TrackerWatcherCommand.cc | 10 |
5 files changed, 24 insertions, 19 deletions
diff --git a/src/AnnounceList.cc b/src/AnnounceList.cc index eced1559..c50f7b13 100644 --- a/src/AnnounceList.cc +++ b/src/AnnounceList.cc @@ -103,16 +103,16 @@ void AnnounceList::announceSuccess() { } } -// TODO if currentTier reaches tiers.end(), then getAllTierTried() returns true void AnnounceList::announceFailure() { if(currentTrackerInitialized) { currentTracker++; if(currentTracker == (*currentTier)->urls.end()) { currentTier++; if(currentTier == tiers.end()) { - currentTier = tiers.begin(); + currentTrackerInitialized = false; + } else { + currentTracker = (*currentTier)->urls.begin(); } - currentTracker = (*currentTier)->urls.begin(); } } } @@ -225,3 +225,13 @@ void AnnounceList::shuffle() { random_shuffle(urls.begin(), urls.end()); } } + +bool AnnounceList::allTiersFailed() const +{ + return currentTier == tiers.end(); +} + +void AnnounceList::resetTier() +{ + resetIterator(); +} diff --git a/src/AnnounceList.h b/src/AnnounceList.h index c0123d67..998953f5 100644 --- a/src/AnnounceList.h +++ b/src/AnnounceList.h @@ -115,6 +115,10 @@ public: */ void moveToStoppedAllowedTier(); void moveToCompletedAllowedTier(); + + bool allTiersFailed() const; + + void resetTier(); }; #endif // _D_ANNOUNCE_LIST_H_ diff --git a/src/DefaultBtAnnounce.cc b/src/DefaultBtAnnounce.cc index b9b53256..52e5e895 100644 --- a/src/DefaultBtAnnounce.cc +++ b/src/DefaultBtAnnounce.cc @@ -55,7 +55,6 @@ DefaultBtAnnounce::DefaultBtAnnounce(BtContextHandle btContext, complete(0), incomplete(0), announceList(btContext->getAnnounceTiers()), - trackerNumTry(0), option(option), logger(LogFactory::getInstance()), _randomizer(SimpleRandomizer::getInstance()), @@ -76,7 +75,8 @@ void DefaultBtAnnounce::generateKey() } bool DefaultBtAnnounce::isDefaultAnnounceReady() { - return (trackers == 0 && prevAnnounceTime.elapsed(minInterval)); + return (trackers == 0 && prevAnnounceTime.elapsed(minInterval) && + !announceList.allTiersFailed()); } bool DefaultBtAnnounce::isStoppedAnnounceReady() { @@ -113,6 +113,8 @@ string DefaultBtAnnounce::getAnnounceUrl() { announceList.getEvent() == AnnounceTier::STARTED) { announceList.setEvent(AnnounceTier::STARTED_AFTER_COMPLETION); } + } else { + return ""; } int32_t numWant = 50; if(!btRuntime->lessThanEqMinPeer() || @@ -160,18 +162,16 @@ void DefaultBtAnnounce::announceSuccess() { void DefaultBtAnnounce::announceFailure() { trackers = 0; - trackerNumTry++; announceList.announceFailure(); } bool DefaultBtAnnounce::isAllAnnounceFailed() { - return - trackerNumTry >= option->getAsInt(PREF_TRACKER_MAX_TRIES); + return announceList.allTiersFailed(); } void DefaultBtAnnounce::resetAnnounce() { prevAnnounceTime.reset(); - trackerNumTry = 0; + announceList.resetTier(); } void diff --git a/src/DefaultBtAnnounce.h b/src/DefaultBtAnnounce.h index 774f0699..60deeebb 100644 --- a/src/DefaultBtAnnounce.h +++ b/src/DefaultBtAnnounce.h @@ -62,7 +62,6 @@ private: AnnounceList announceList; string trackerId; string key; - int32_t trackerNumTry; const Option* option; Logger* logger; RandomizerHandle _randomizer; diff --git a/src/TrackerWatcherCommand.cc b/src/TrackerWatcherCommand.cc index 043df899..66f6d06f 100644 --- a/src/TrackerWatcherCommand.cc +++ b/src/TrackerWatcherCommand.cc @@ -71,8 +71,6 @@ bool TrackerWatcherCommand::execute() { if(_trackerRequestGroup.isNull()) { _trackerRequestGroup = createAnnounce(); if(!_trackerRequestGroup.isNull()) { - //e->_requestGroupMan->addReservedGroup(_trackerRequestGroup); - //e->_requestGroupMan->fillRequestGroupFromReserver(e); e->addCommand(_trackerRequestGroup->createInitialCommand(e)); logger->debug("added tracker request command"); } @@ -83,13 +81,7 @@ bool TrackerWatcherCommand::execute() { processTrackerResponse(trackerResponse); btAnnounce->announceSuccess(); btAnnounce->resetAnnounce(); - } catch(DlAbortEx* ex) { - logger->error(EX_EXCEPTION_CAUGHT, ex); - delete ex; - btAnnounce->announceFailure(); - btAnnounce->resetAnnounce(); - } catch(DlRetryEx* ex) { - // TODO Can I remove this catch clause? + } catch(RecoverableException* ex) { logger->error(EX_EXCEPTION_CAUGHT, ex); delete ex; btAnnounce->announceFailure(); |
