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
pull/1/head
Tatsuhiro Tsujikawa 2009-11-20 07:47:42 +00:00
parent 39c2b57842
commit 60e3e46c52
8 changed files with 37 additions and 3 deletions

View File

@ -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

View File

@ -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",

View File

@ -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());

View File

@ -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);

View File

@ -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

View File

@ -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();

View File

@ -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

View File

@ -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());
}