mirror of https://github.com/aria2/aria2
2008-09-07 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Fixed the bug that exception is thrown when MultiDiskAdaptor::size() is called if the number of file entries are greater than max open files. * src/AbstractSingleDiskAdaptor.cc * src/AbstractSingleDiskAdaptor.h * src/DiskAdaptor.h * src/MultiDiskAdaptor.cc * src/MultiDiskAdaptor.h * test/MultiDiskAdaptorTest.ccpull/1/head
parent
5fb94a3af0
commit
390538d0b5
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
||||||
|
2008-09-07 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
Fixed the bug that exception is thrown when MultiDiskAdaptor::size() is
|
||||||
|
called if the number of file entries are greater than max open files.
|
||||||
|
* src/AbstractSingleDiskAdaptor.cc
|
||||||
|
* src/AbstractSingleDiskAdaptor.h
|
||||||
|
* src/DiskAdaptor.h
|
||||||
|
* src/MultiDiskAdaptor.cc
|
||||||
|
* src/MultiDiskAdaptor.h
|
||||||
|
* test/MultiDiskAdaptorTest.cc
|
||||||
|
|
||||||
2008-09-07 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
2008-09-07 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
Added a constuctor that receives struct timeval.
|
Added a constuctor that receives struct timeval.
|
||||||
|
|
|
@ -78,7 +78,7 @@ bool AbstractSingleDiskAdaptor::fileExists()
|
||||||
return File(getFilePath()).exists();
|
return File(getFilePath()).exists();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t AbstractSingleDiskAdaptor::size() const
|
uint64_t AbstractSingleDiskAdaptor::size()
|
||||||
{
|
{
|
||||||
return diskWriter->size();
|
return diskWriter->size();
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,7 @@ public:
|
||||||
|
|
||||||
virtual bool fileExists();
|
virtual bool fileExists();
|
||||||
|
|
||||||
virtual uint64_t size() const;
|
virtual uint64_t size();
|
||||||
|
|
||||||
virtual void truncate(uint64_t length);
|
virtual void truncate(uint64_t length);
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ public:
|
||||||
|
|
||||||
virtual std::string getFilePath() = 0;
|
virtual std::string getFilePath() = 0;
|
||||||
|
|
||||||
virtual uint64_t size() const = 0;
|
virtual uint64_t size() = 0;
|
||||||
|
|
||||||
// optional behavior
|
// optional behavior
|
||||||
virtual void truncate(uint64_t length) {}
|
virtual void truncate(uint64_t length) {}
|
||||||
|
|
|
@ -411,11 +411,12 @@ bool MultiDiskAdaptor::fileExists()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO call DiskWriter::openFile() before calling this function.
|
// TODO call DiskWriter::openFile() before calling this function.
|
||||||
uint64_t MultiDiskAdaptor::size() const
|
uint64_t MultiDiskAdaptor::size()
|
||||||
{
|
{
|
||||||
uint64_t size = 0;
|
uint64_t size = 0;
|
||||||
for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin();
|
for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin();
|
||||||
itr != diskWriterEntries.end(); ++itr) {
|
itr != diskWriterEntries.end(); ++itr) {
|
||||||
|
openIfNot(*itr, &DiskWriterEntry::openFile, _cachedTopDirPath);
|
||||||
size += (*itr)->size();
|
size += (*itr)->size();
|
||||||
}
|
}
|
||||||
return size;
|
return size;
|
||||||
|
|
|
@ -147,7 +147,7 @@ public:
|
||||||
return getTopDirPath();
|
return getTopDirPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual uint64_t size() const;
|
virtual uint64_t size();
|
||||||
|
|
||||||
virtual SharedHandle<FileAllocationIterator> fileAllocationIterator();
|
virtual SharedHandle<FileAllocationIterator> fileAllocationIterator();
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ class MultiDiskAdaptorTest:public CppUnit::TestFixture {
|
||||||
CPPUNIT_TEST(testWriteData);
|
CPPUNIT_TEST(testWriteData);
|
||||||
CPPUNIT_TEST(testReadData);
|
CPPUNIT_TEST(testReadData);
|
||||||
CPPUNIT_TEST(testCutTrailingGarbage);
|
CPPUNIT_TEST(testCutTrailingGarbage);
|
||||||
|
CPPUNIT_TEST(testSize);
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
private:
|
private:
|
||||||
SharedHandle<MultiDiskAdaptor> adaptor;
|
SharedHandle<MultiDiskAdaptor> adaptor;
|
||||||
|
@ -31,6 +32,7 @@ public:
|
||||||
void testWriteData();
|
void testWriteData();
|
||||||
void testReadData();
|
void testReadData();
|
||||||
void testCutTrailingGarbage();
|
void testCutTrailingGarbage();
|
||||||
|
void testSize();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -167,4 +169,32 @@ void MultiDiskAdaptorTest::testCutTrailingGarbage()
|
||||||
File(topDirPath+"/"+entries[1]->getPath()).size());
|
File(topDirPath+"/"+entries[1]->getPath()).size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MultiDiskAdaptorTest::testSize()
|
||||||
|
{
|
||||||
|
std::string dir = "/tmp";
|
||||||
|
std::string topDir = ".";
|
||||||
|
std::string topDirPath = dir+"/"+topDir;
|
||||||
|
std::string prefix = "aria2_MultiDiskAdaptorTest_testSize_";
|
||||||
|
SharedHandle<FileEntry> entries[] = {
|
||||||
|
SharedHandle<FileEntry>(new FileEntry(prefix+"1", 1, 0)),
|
||||||
|
SharedHandle<FileEntry>(new FileEntry(prefix+"2", 1, 1))
|
||||||
|
};
|
||||||
|
for(size_t i = 0; i < arrayLength(entries); ++i) {
|
||||||
|
createFile(topDirPath+"/"+entries[i]->getPath(),
|
||||||
|
entries[i]->getLength());
|
||||||
|
}
|
||||||
|
std::deque<SharedHandle<FileEntry> > fileEntries
|
||||||
|
(&entries[0], &entries[arrayLength(entries)]);
|
||||||
|
|
||||||
|
MultiDiskAdaptor adaptor;
|
||||||
|
adaptor.setStoreDir(dir);
|
||||||
|
adaptor.setTopDir(topDir);
|
||||||
|
adaptor.setFileEntries(fileEntries);
|
||||||
|
adaptor.setMaxOpenFiles(1);
|
||||||
|
|
||||||
|
adaptor.openFile();
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL((uint64_t)2, adaptor.size());
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
Loading…
Reference in New Issue