mirror of https://github.com/aria2/aria2
2009-02-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed the bug that disk writer is not created even if it shares same piece with the preceding file if the length of previous file is 0. * src/MultiDiskAdaptor.cc * test/MultiDiskAdaptorTest.ccpull/1/head
parent
2dfee3dc49
commit
1c15b5373c
|
@ -1,3 +1,11 @@
|
||||||
|
2009-02-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Fixed the bug that disk writer is not created even if it shares
|
||||||
|
same piece with the preceding file if the length of previous file
|
||||||
|
is 0.
|
||||||
|
* src/MultiDiskAdaptor.cc
|
||||||
|
* test/MultiDiskAdaptorTest.cc
|
||||||
|
|
||||||
2009-02-23 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2009-02-23 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
In BitTorrent, Open files in read-only mode for hash check. After
|
In BitTorrent, Open files in read-only mode for hash check. After
|
||||||
|
|
|
@ -243,7 +243,8 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
|
||||||
// adjacent backward files are not needed to be allocated. They
|
// adjacent backward files are not needed to be allocated. They
|
||||||
// just requre DiskWriter
|
// just requre DiskWriter
|
||||||
for(; itr != diskWriterEntries.end() &&
|
for(; itr != diskWriterEntries.end() &&
|
||||||
!(*itr)->getFileEntry()->isRequested(); ++itr) {
|
(!(*itr)->getFileEntry()->isRequested() ||
|
||||||
|
(*itr)->getFileEntry()->getLength() == 0); ++itr) {
|
||||||
logger->debug("file=%s, offset=%lld",
|
logger->debug("file=%s, offset=%lld",
|
||||||
(*itr)->getFileEntry()->getPath().c_str(),
|
(*itr)->getFileEntry()->getPath().c_str(),
|
||||||
(*itr)->getFileEntry()->getOffset());
|
(*itr)->getFileEntry()->getOffset());
|
||||||
|
|
|
@ -54,16 +54,22 @@ std::deque<SharedHandle<FileEntry> > createEntries() {
|
||||||
SharedHandle<FileEntry>(new FileEntry("file3.txt", 0, 22)),
|
SharedHandle<FileEntry>(new FileEntry("file3.txt", 0, 22)),
|
||||||
SharedHandle<FileEntry>(new FileEntry("file4.txt", 2, 22)),
|
SharedHandle<FileEntry>(new FileEntry("file4.txt", 2, 22)),
|
||||||
SharedHandle<FileEntry>(new FileEntry("file5.txt", 0, 24)),
|
SharedHandle<FileEntry>(new FileEntry("file5.txt", 0, 24)),
|
||||||
|
SharedHandle<FileEntry>(new FileEntry("file6.txt", 3, 24)),
|
||||||
|
SharedHandle<FileEntry>(new FileEntry("file7.txt", 0, 27)),
|
||||||
|
SharedHandle<FileEntry>(new FileEntry("file8.txt", 2, 27)),
|
||||||
};
|
};
|
||||||
// 1 1 2 2
|
// 1 1 2 2 3
|
||||||
// 0....5....0....5....0....5
|
// 0....5....0....5....0....5....0
|
||||||
// ++--++--++--++--++--++--++
|
// ++--++--++--++--++--++--++--++--
|
||||||
// | file0
|
// | file0
|
||||||
// *************** file1
|
// *************** file1
|
||||||
// ******* file2
|
// ******* file2
|
||||||
// | file3
|
// | file3
|
||||||
// ** flie4
|
// ** flie4
|
||||||
// | file5
|
// | file5
|
||||||
|
// *** file6
|
||||||
|
// |file7
|
||||||
|
// ** file8
|
||||||
std::deque<SharedHandle<FileEntry> > entries(&array[0],
|
std::deque<SharedHandle<FileEntry> > entries(&array[0],
|
||||||
&array[arrayLength(array)]);
|
&array[arrayLength(array)]);
|
||||||
for(std::deque<SharedHandle<FileEntry> >::const_iterator i = entries.begin();
|
for(std::deque<SharedHandle<FileEntry> >::const_iterator i = entries.begin();
|
||||||
|
@ -192,7 +198,9 @@ void MultiDiskAdaptorTest::testResetDiskWriterEntries()
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::deque<SharedHandle<FileEntry> > fileEntries = createEntries();
|
std::deque<SharedHandle<FileEntry> > fileEntries = createEntries();
|
||||||
fileEntries[5]->setRequested(false);
|
for(size_t i = 5; i < 9; ++i) {
|
||||||
|
fileEntries[i]->setRequested(false);
|
||||||
|
}
|
||||||
adaptor->setFileEntries(fileEntries);
|
adaptor->setFileEntries(fileEntries);
|
||||||
// In openFile(), resetDiskWriterEntries() are called.
|
// In openFile(), resetDiskWriterEntries() are called.
|
||||||
adaptor->openFile();
|
adaptor->openFile();
|
||||||
|
@ -210,7 +218,7 @@ void MultiDiskAdaptorTest::testResetDiskWriterEntries()
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::deque<SharedHandle<FileEntry> > fileEntries = createEntries();
|
std::deque<SharedHandle<FileEntry> > fileEntries = createEntries();
|
||||||
for(size_t i = 1; i < 6; ++i) {
|
for(size_t i = 1; i < 9; ++i) {
|
||||||
fileEntries[i]->setRequested(false);
|
fileEntries[i]->setRequested(false);
|
||||||
}
|
}
|
||||||
adaptor->setFileEntries(fileEntries);
|
adaptor->setFileEntries(fileEntries);
|
||||||
|
@ -228,7 +236,7 @@ void MultiDiskAdaptorTest::testResetDiskWriterEntries()
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::deque<SharedHandle<FileEntry> > fileEntries = createEntries();
|
std::deque<SharedHandle<FileEntry> > fileEntries = createEntries();
|
||||||
for(size_t i = 2; i < 6; ++i) {
|
for(size_t i = 2; i < 9; ++i) {
|
||||||
fileEntries[i]->setRequested(false);
|
fileEntries[i]->setRequested(false);
|
||||||
}
|
}
|
||||||
adaptor->setFileEntries(fileEntries);
|
adaptor->setFileEntries(fileEntries);
|
||||||
|
@ -246,6 +254,29 @@ void MultiDiskAdaptorTest::testResetDiskWriterEntries()
|
||||||
|
|
||||||
adaptor->closeFile();
|
adaptor->closeFile();
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
std::deque<SharedHandle<FileEntry> > fileEntries = createEntries();
|
||||||
|
for(size_t i = 0; i < 6; ++i) {
|
||||||
|
fileEntries[i]->setRequested(false);
|
||||||
|
}
|
||||||
|
fileEntries[8]->setRequested(false);
|
||||||
|
adaptor->setFileEntries(fileEntries);
|
||||||
|
adaptor->openFile();
|
||||||
|
std::deque<SharedHandle<DiskWriterEntry> > entries =
|
||||||
|
adaptor->getDiskWriterEntries();
|
||||||
|
CPPUNIT_ASSERT(entries[0]->getDiskWriter().isNull());
|
||||||
|
CPPUNIT_ASSERT(entries[1]->getDiskWriter().isNull());
|
||||||
|
CPPUNIT_ASSERT(entries[2]->getDiskWriter().isNull());
|
||||||
|
CPPUNIT_ASSERT(entries[3]->getDiskWriter().isNull());
|
||||||
|
CPPUNIT_ASSERT(entries[4]->getDiskWriter().isNull());
|
||||||
|
// entries[6] spans entries[5] in the current implementation.
|
||||||
|
CPPUNIT_ASSERT(!entries[5]->getDiskWriter().isNull());
|
||||||
|
CPPUNIT_ASSERT(!entries[6]->getDiskWriter().isNull());
|
||||||
|
CPPUNIT_ASSERT(!entries[7]->getDiskWriter().isNull());
|
||||||
|
// entries[6] spans entries[8]
|
||||||
|
CPPUNIT_ASSERT(!entries[8]->getDiskWriter().isNull());
|
||||||
|
adaptor->closeFile();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void readFile(const std::string& filename, char* buf, int bufLength) {
|
void readFile(const std::string& filename, char* buf, int bufLength) {
|
||||||
|
|
Loading…
Reference in New Issue