mirror of https://github.com/aria2/aria2
2009-03-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed the bug that AdaptiveURISelector doesn't select any URI when all URIs are tested and their timeout is not reached. * src/AdaptiveURISelector.cc * src/AdaptiveURISelector.hpull/1/head
parent
ff20576d01
commit
5c63e74e80
|
@ -1,3 +1,10 @@
|
|||
2009-03-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Fixed the bug that AdaptiveURISelector doesn't select any URI when
|
||||
all URIs are tested and their timeout is not reached.
|
||||
* src/AdaptiveURISelector.cc
|
||||
* src/AdaptiveURISelector.h
|
||||
|
||||
2009-03-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Changed the default value of --http-auth-challenge option to false.
|
||||
|
|
|
@ -151,35 +151,45 @@ std::string AdaptiveURISelector::selectOne(const std::deque<std::string>& uris)
|
|||
} else {
|
||||
/* Here we return a mirror which need to be tested again */
|
||||
std::string toReTest = getFirstToTestUri(uris);
|
||||
_logger->debug("AdaptiveURISelector: choosing mirror %s which has not"
|
||||
" been tested recently for connection #%d",
|
||||
toReTest.c_str(), _nbConnections);
|
||||
return toReTest;
|
||||
if(toReTest != A2STR::NIL) {
|
||||
_logger->debug("AdaptiveURISelector: choosing mirror %s which has not"
|
||||
" been tested recently for connection #%d",
|
||||
toReTest.c_str(), _nbConnections);
|
||||
return toReTest;
|
||||
} else {
|
||||
return getBestMirror(uris);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* Here we return one of the bests mirrors */
|
||||
unsigned int max = getMaxDownloadSpeed(uris);
|
||||
unsigned int min = max-(int)(max*0.25);
|
||||
std::deque<std::string> bests = getUrisBySpeed(uris, min);
|
||||
|
||||
if (bests.size() < 2) {
|
||||
std::string uri = getMaxDownloadSpeedUri(uris);
|
||||
_logger->debug("AdaptiveURISelector: choosing the best mirror :"
|
||||
" %.2fKB/s %s (other mirrors are at least 25%% slower)",
|
||||
(float) max/1024, uri.c_str());
|
||||
return uri;
|
||||
} else {
|
||||
std::string uri = selectRandomUri(bests);
|
||||
_logger->debug("AdaptiveURISelector: choosing randomly one of the best"
|
||||
" mirrors (range [%.2fKB/s, %.2fKB/s]): %s",
|
||||
(float) min/1024, (float) max/1024, uri.c_str());
|
||||
return uri;
|
||||
}
|
||||
return getBestMirror(uris);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string AdaptiveURISelector::getBestMirror
|
||||
(const std::deque<std::string>& uris) const
|
||||
{
|
||||
/* Here we return one of the bests mirrors */
|
||||
unsigned int max = getMaxDownloadSpeed(uris);
|
||||
unsigned int min = max-(int)(max*0.25);
|
||||
std::deque<std::string> bests = getUrisBySpeed(uris, min);
|
||||
|
||||
if (bests.size() < 2) {
|
||||
std::string uri = getMaxDownloadSpeedUri(uris);
|
||||
_logger->debug("AdaptiveURISelector: choosing the best mirror :"
|
||||
" %.2fKB/s %s (other mirrors are at least 25%% slower)",
|
||||
(float) max/1024, uri.c_str());
|
||||
return uri;
|
||||
} else {
|
||||
std::string uri = selectRandomUri(bests);
|
||||
_logger->debug("AdaptiveURISelector: choosing randomly one of the best"
|
||||
" mirrors (range [%.2fKB/s, %.2fKB/s]): %s",
|
||||
(float) min/1024, (float) max/1024, uri.c_str());
|
||||
return uri;
|
||||
}
|
||||
}
|
||||
|
||||
void AdaptiveURISelector::resetCounters()
|
||||
{
|
||||
const Option* op = _requestGroup->getOption();
|
||||
|
|
|
@ -70,6 +70,7 @@ private:
|
|||
std::string getFirstToTestUri(const std::deque<std::string>& uris) const;
|
||||
SharedHandle<ServerStat> getServerStats(const std::string& uri) const;
|
||||
unsigned int getNbTestedServers(const std::deque<std::string>& uris) const;
|
||||
std::string getBestMirror(const std::deque<std::string>& uris) const;
|
||||
public:
|
||||
AdaptiveURISelector(const SharedHandle<ServerStatMan>& serverStatMan,
|
||||
const SharedHandle<RequestGroup>& requestGroup);
|
||||
|
|
Loading…
Reference in New Issue