mirror of https://github.com/aria2/aria2
2009-03-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Reuse URIs when all unused URIs run out. * src/OptionHandlerFactory.cc * src/RequestGroup.cc * src/prefs.cc * src/prefs.hpull/1/head
parent
15582ed8cd
commit
d8678a8dd0
|
@ -1,3 +1,11 @@
|
||||||
|
2009-03-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Reuse URIs when all unused URIs run out.
|
||||||
|
* src/OptionHandlerFactory.cc
|
||||||
|
* src/RequestGroup.cc
|
||||||
|
* src/prefs.cc
|
||||||
|
* src/prefs.h
|
||||||
|
|
||||||
2009-03-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2009-03-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Refactored BtMessage subclasses. BtCancelMessage, BtRequestMessage
|
Refactored BtMessage subclasses. BtCancelMessage, BtRequestMessage
|
||||||
|
|
|
@ -453,6 +453,14 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
|
||||||
op->addTag(TAG_HTTP);
|
op->addTag(TAG_HTTP);
|
||||||
handlers.push_back(op);
|
handlers.push_back(op);
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
SharedHandle<OptionHandler> op(new BooleanOptionHandler
|
||||||
|
(PREF_REUSE_URI,
|
||||||
|
NO_DESCRIPTION,
|
||||||
|
V_TRUE));
|
||||||
|
op->hide();
|
||||||
|
handlers.push_back(op);
|
||||||
|
}
|
||||||
{
|
{
|
||||||
SharedHandle<UnitNumberOptionHandler> op(new UnitNumberOptionHandler
|
SharedHandle<UnitNumberOptionHandler> op(new UnitNumberOptionHandler
|
||||||
(PREF_SEGMENT_SIZE,
|
(PREF_SEGMENT_SIZE,
|
||||||
|
|
|
@ -562,6 +562,40 @@ void RequestGroup::createNextCommand(std::deque<Command*>& commands,
|
||||||
unsigned int numCommand,
|
unsigned int numCommand,
|
||||||
const std::string& method)
|
const std::string& method)
|
||||||
{
|
{
|
||||||
|
if(_option->getAsBool(PREF_REUSE_URI) && _uris.empty()) {
|
||||||
|
std::deque<std::string> uris = _spentUris;
|
||||||
|
std::sort(uris.begin(), uris.end());
|
||||||
|
uris.erase(std::unique(uris.begin(), uris.end()), uris.end());
|
||||||
|
|
||||||
|
std::deque<std::string> errorUris(_uriResults.size());
|
||||||
|
std::transform(_uriResults.begin(), _uriResults.end(),
|
||||||
|
errorUris.begin(), std::mem_fun_ref(&URIResult::getURI));
|
||||||
|
std::sort(errorUris.begin(), errorUris.end());
|
||||||
|
errorUris.erase(std::unique(errorUris.begin(), errorUris.end()),
|
||||||
|
errorUris.end());
|
||||||
|
|
||||||
|
std::deque<std::string> reusableURIs;
|
||||||
|
std::set_difference(uris.begin(), uris.end(),
|
||||||
|
errorUris.begin(), errorUris.end(),
|
||||||
|
std::back_inserter(reusableURIs));
|
||||||
|
size_t ininum = reusableURIs.size();
|
||||||
|
_logger->debug("Found %u reusable URIs",
|
||||||
|
static_cast<unsigned int>(ininum));
|
||||||
|
// Reuse at least _numConcurrentCommand URIs here to avoid to
|
||||||
|
// run this process repeatedly.
|
||||||
|
if(ininum > 0 && ininum < _numConcurrentCommand) {
|
||||||
|
_logger->debug("fewer than _numConcurrentCommand=%u",
|
||||||
|
_numConcurrentCommand);
|
||||||
|
for(size_t i = 0; i < _numConcurrentCommand/ininum; ++i) {
|
||||||
|
_uris.insert(_uris.end(), reusableURIs.begin(), reusableURIs.end());
|
||||||
|
}
|
||||||
|
_uris.insert(_uris.end(), reusableURIs.begin(),
|
||||||
|
reusableURIs.begin()+(_numConcurrentCommand%ininum));
|
||||||
|
_logger->debug("Duplication complete: now %u URIs for reuse",
|
||||||
|
static_cast<unsigned int>(_uris.size()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::deque<std::string> pendingURIs;
|
std::deque<std::string> pendingURIs;
|
||||||
for(; numCommand--; ) {
|
for(; numCommand--; ) {
|
||||||
std::string uri = _uriSelector->select(_uris);
|
std::string uri = _uriSelector->select(_uris);
|
||||||
|
|
|
@ -160,6 +160,8 @@ const std::string PREF_ENABLE_HTTP_SERVER("enable-http-server");
|
||||||
const std::string PREF_RESET_URI("reset-uri");
|
const std::string PREF_RESET_URI("reset-uri");
|
||||||
// value: true | false
|
// value: true | false
|
||||||
const std::string PREF_DRY_RUN("dry-run");
|
const std::string PREF_DRY_RUN("dry-run");
|
||||||
|
// value: true | false
|
||||||
|
const std::string PREF_REUSE_URI("reuse-uri");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FTP related preferences
|
* FTP related preferences
|
||||||
|
|
|
@ -164,6 +164,8 @@ extern const std::string PREF_ENABLE_HTTP_SERVER;
|
||||||
extern const std::string PREF_RESET_URI;
|
extern const std::string PREF_RESET_URI;
|
||||||
// value: true | false
|
// value: true | false
|
||||||
extern const std::string PREF_DRY_RUN;
|
extern const std::string PREF_DRY_RUN;
|
||||||
|
// value: true | false
|
||||||
|
extern const std::string PREF_REUSE_URI;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FTP related preferences
|
* FTP related preferences
|
||||||
|
|
Loading…
Reference in New Issue