mirror of https://github.com/aria2/aria2
2009-11-20 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed the bug that slow server is not knocked down in favor of faster one. * src/AbstractCommand.cc * src/DefaultPieceStorage.cc * src/DefaultPieceStorage.h * src/PieceStorage.h * src/UnknownLengthPieceStorage.cc * src/UnknownLengthPieceStorage.h * test/MockPieceStorage.hpull/1/head
parent
39c2b57842
commit
60e3e46c52
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
|||
2009-11-20 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Fixed the bug that slow server is not knocked down in favor of
|
||||
faster one.
|
||||
* src/AbstractCommand.cc
|
||||
* src/DefaultPieceStorage.cc
|
||||
* src/DefaultPieceStorage.h
|
||||
* src/PieceStorage.h
|
||||
* src/UnknownLengthPieceStorage.cc
|
||||
* src/UnknownLengthPieceStorage.h
|
||||
* test/MockPieceStorage.h
|
||||
|
||||
2009-11-20 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Fixed the bug that Request object is not added to
|
||||
|
|
|
@ -105,9 +105,9 @@ bool AbstractCommand::execute() {
|
|||
return true;
|
||||
}
|
||||
// TODO it is not needed to check other PeerStats every time.
|
||||
// Find faster Request when this is the only active Request
|
||||
if(!req.isNull() && _requestGroup->getNumStreamConnection() == 1 &&
|
||||
_fileEntry->countPooledRequest() > 0) {
|
||||
// Find faster Request when no segment is available.
|
||||
if(!req.isNull() && _fileEntry->countPooledRequest() > 0 &&
|
||||
!_requestGroup->getPieceStorage()->hasMissingUnusedPiece()) {
|
||||
SharedHandle<Request> fasterRequest = _fileEntry->findFasterRequest(req);
|
||||
if(!fasterRequest.isNull()) {
|
||||
logger->info("CUID#%d - Use faster Request hostname=%s, port=%u",
|
||||
|
|
|
@ -196,6 +196,12 @@ bool DefaultPieceStorage::hasMissingPiece(const PeerHandle& peer)
|
|||
peer->getBitfieldLength());
|
||||
}
|
||||
|
||||
bool DefaultPieceStorage::hasMissingUnusedPiece()
|
||||
{
|
||||
size_t index;
|
||||
return bitfieldMan->getFirstMissingUnusedIndex(index);
|
||||
}
|
||||
|
||||
PieceHandle DefaultPieceStorage::getMissingPiece(const SharedHandle<Peer>& peer)
|
||||
{
|
||||
return getMissingPiece(peer->getBitfield(), peer->getBitfieldLength());
|
||||
|
|
|
@ -121,6 +121,8 @@ public:
|
|||
|
||||
virtual bool hasMissingPiece(const SharedHandle<Peer>& peer);
|
||||
|
||||
virtual bool hasMissingUnusedPiece();
|
||||
|
||||
virtual SharedHandle<Piece> getMissingPiece(const SharedHandle<Peer>& peer);
|
||||
|
||||
virtual SharedHandle<Piece> getMissingFastPiece(const SharedHandle<Peer>& peer);
|
||||
|
|
|
@ -62,6 +62,8 @@ public:
|
|||
*/
|
||||
virtual bool hasMissingPiece(const SharedHandle<Peer>& peer) = 0;
|
||||
|
||||
virtual bool hasMissingUnusedPiece() = 0;
|
||||
|
||||
/**
|
||||
* Returns a piece that the peer has but localhost doesn't.
|
||||
* The piece will be marked "used" status in order to prevent other command
|
||||
|
|
|
@ -78,6 +78,11 @@ bool UnknownLengthPieceStorage::hasMissingPiece(const SharedHandle<Peer>& peer)
|
|||
abort();
|
||||
}
|
||||
|
||||
bool UnknownLengthPieceStorage::hasMissingUnusedPiece()
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
SharedHandle<Piece> UnknownLengthPieceStorage::getMissingPiece(const SharedHandle<Peer>& peer)
|
||||
{
|
||||
abort();
|
||||
|
|
|
@ -73,6 +73,8 @@ public:
|
|||
*/
|
||||
virtual bool hasMissingPiece(const SharedHandle<Peer>& peer);
|
||||
|
||||
virtual bool hasMissingUnusedPiece();
|
||||
|
||||
/**
|
||||
* Returns a piece that the peer has but localhost doesn't.
|
||||
* The piece will be marked "used" status in order to prevent other command
|
||||
|
|
|
@ -44,6 +44,11 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
virtual bool hasMissingUnusedPiece()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual SharedHandle<Piece> getMissingPiece(const SharedHandle<Peer>& peer) {
|
||||
return SharedHandle<Piece>(new Piece());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue