mirror of https://github.com/aria2/aria2
2007-12-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Fixed the bug: aria2 doesn't utilize fast set index offered by peer. * src/Peer.{h, cc} * src/DefaultPieceStorage.cc * test/DefaultPieceStorageTest.ccpull/1/head
parent
2850c16f8a
commit
30739b0763
|
@ -1,3 +1,10 @@
|
||||||
|
2007-12-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
Fixed the bug: aria2 doesn't utilize fast set index offered by peer.
|
||||||
|
* src/Peer.{h, cc}
|
||||||
|
* src/DefaultPieceStorage.cc
|
||||||
|
* test/DefaultPieceStorageTest.cc
|
||||||
|
|
||||||
2007-12-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
2007-12-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
Rewritten direct I/O support routine
|
Rewritten direct I/O support routine
|
||||||
|
|
|
@ -166,11 +166,11 @@ PieceHandle DefaultPieceStorage::getMissingPiece(const PeerHandle& peer)
|
||||||
int32_t DefaultPieceStorage::getMissingFastPieceIndex(const PeerHandle& peer)
|
int32_t DefaultPieceStorage::getMissingFastPieceIndex(const PeerHandle& peer)
|
||||||
{
|
{
|
||||||
int32_t index = -1;
|
int32_t index = -1;
|
||||||
if(peer->isFastExtensionEnabled() && peer->countFastSet() > 0) {
|
if(peer->isFastExtensionEnabled() && peer->countPeerAllowedIndexSet() > 0) {
|
||||||
BitfieldMan tempBitfield(bitfieldMan->getBlockLength(),
|
BitfieldMan tempBitfield(bitfieldMan->getBlockLength(),
|
||||||
bitfieldMan->getTotalLength());
|
bitfieldMan->getTotalLength());
|
||||||
for(Integers::const_iterator itr = peer->getFastSet().begin();
|
for(Integers::const_iterator itr = peer->getPeerAllowedIndexSet().begin();
|
||||||
itr != peer->getFastSet().end(); itr++) {
|
itr != peer->getPeerAllowedIndexSet().end(); itr++) {
|
||||||
if(!bitfieldMan->isBitSet(index) && peer->hasPiece(*itr)) {
|
if(!bitfieldMan->isBitSet(index) && peer->hasPiece(*itr)) {
|
||||||
tempBitfield.setBit(*itr);
|
tempBitfield.setBit(*itr);
|
||||||
}
|
}
|
||||||
|
|
11
src/Peer.cc
11
src/Peer.cc
|
@ -114,22 +114,11 @@ void Peer::resetStatus() {
|
||||||
snubbing = false;
|
snubbing = false;
|
||||||
fastExtensionEnabled = false;
|
fastExtensionEnabled = false;
|
||||||
latency = DEFAULT_LATENCY;
|
latency = DEFAULT_LATENCY;
|
||||||
fastSet.clear();
|
|
||||||
peerAllowedIndexSet.clear();
|
peerAllowedIndexSet.clear();
|
||||||
amAllowedIndexSet.clear();
|
amAllowedIndexSet.clear();
|
||||||
peerStat.reset();
|
peerStat.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Peer::isInFastSet(int32_t index) const {
|
|
||||||
return find(fastSet.begin(), fastSet.end(), index) != fastSet.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Peer::addFastSetIndex(int32_t index) {
|
|
||||||
if(!isInFastSet(index)) {
|
|
||||||
fastSet.push_back(index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Peer::isInPeerAllowedIndexSet(int32_t index) const {
|
bool Peer::isInPeerAllowedIndexSet(int32_t index) const {
|
||||||
return find(peerAllowedIndexSet.begin(), peerAllowedIndexSet.end(),
|
return find(peerAllowedIndexSet.begin(), peerAllowedIndexSet.end(),
|
||||||
index) != peerAllowedIndexSet.end();
|
index) != peerAllowedIndexSet.end();
|
||||||
|
|
17
src/Peer.h
17
src/Peer.h
|
@ -63,8 +63,6 @@ private:
|
||||||
unsigned char peerId[PEER_ID_LENGTH];
|
unsigned char peerId[PEER_ID_LENGTH];
|
||||||
BitfieldMan* bitfield;
|
BitfieldMan* bitfield;
|
||||||
bool fastExtensionEnabled;
|
bool fastExtensionEnabled;
|
||||||
// allowed fast indexes that peer has sent by Allowed Fast message
|
|
||||||
Integers fastSet;
|
|
||||||
// fast index set which a peer has sent to localhost.
|
// fast index set which a peer has sent to localhost.
|
||||||
Integers peerAllowedIndexSet;
|
Integers peerAllowedIndexSet;
|
||||||
// fast index set which localhost has sent to a peer.
|
// fast index set which localhost has sent to a peer.
|
||||||
|
@ -179,14 +177,19 @@ public:
|
||||||
}
|
}
|
||||||
bool isFastExtensionEnabled() const { return fastExtensionEnabled; }
|
bool isFastExtensionEnabled() const { return fastExtensionEnabled; }
|
||||||
|
|
||||||
void addFastSetIndex(int32_t index);
|
|
||||||
const Integers& getFastSet() const { return fastSet; }
|
|
||||||
bool isInFastSet(int32_t index) const;
|
|
||||||
int32_t countFastSet() const { return fastSet.size(); }
|
|
||||||
|
|
||||||
void addPeerAllowedIndex(int32_t index);
|
void addPeerAllowedIndex(int32_t index);
|
||||||
bool isInPeerAllowedIndexSet(int32_t index) const;
|
bool isInPeerAllowedIndexSet(int32_t index) const;
|
||||||
|
|
||||||
|
int32_t countPeerAllowedIndexSet() const
|
||||||
|
{
|
||||||
|
return peerAllowedIndexSet.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
const Integers& getPeerAllowedIndexSet() const
|
||||||
|
{
|
||||||
|
return peerAllowedIndexSet;
|
||||||
|
}
|
||||||
|
|
||||||
void addAmAllowedIndex(int32_t index);
|
void addAmAllowedIndex(int32_t index);
|
||||||
bool isInAmAllowedIndexSet(int32_t index) const;
|
bool isInAmAllowedIndexSet(int32_t index) const;
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,7 @@ void DefaultPieceStorageTest::testGetMissingFastPiece() {
|
||||||
|
|
||||||
peer->setAllBitfield();
|
peer->setAllBitfield();
|
||||||
peer->setFastExtensionEnabled(true);
|
peer->setFastExtensionEnabled(true);
|
||||||
peer->addFastSetIndex(2);
|
peer->addPeerAllowedIndex(2);
|
||||||
|
|
||||||
PieceHandle piece = pss.getMissingFastPiece(peer);
|
PieceHandle piece = pss.getMissingFastPiece(peer);
|
||||||
CPPUNIT_ASSERT_EQUAL(string("piece: index=2, length=128"),
|
CPPUNIT_ASSERT_EQUAL(string("piece: index=2, length=128"),
|
||||||
|
|
Loading…
Reference in New Issue