mirror of https://github.com/aria2/aria2
2010-06-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Made protected member variable private. Added accessor funcs. * src/AbstractSingleDiskAdaptor.cc * src/AbstractSingleDiskAdaptor.h * src/DirectDiskAdaptor.cc * src/DirectDiskAdaptor.h * src/DiskAdaptor.cc * src/DiskAdaptor.h * src/MultiDiskAdaptor.cc * src/MultiDiskAdaptor.h * src/MultiFileAllocationIterator.cc * src/MultiFileAllocationIterator.h * test/BtBitfieldMessageTest.cc * test/BtHaveAllMessageTest.cc * test/BtHaveMessageTest.ccpull/1/head
parent
56ea539975
commit
b914f6d810
17
ChangeLog
17
ChangeLog
|
@ -1,3 +1,20 @@
|
||||||
|
2010-06-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Made protected member variable private. Added accessor funcs.
|
||||||
|
* src/AbstractSingleDiskAdaptor.cc
|
||||||
|
* src/AbstractSingleDiskAdaptor.h
|
||||||
|
* src/DirectDiskAdaptor.cc
|
||||||
|
* src/DirectDiskAdaptor.h
|
||||||
|
* src/DiskAdaptor.cc
|
||||||
|
* src/DiskAdaptor.h
|
||||||
|
* src/MultiDiskAdaptor.cc
|
||||||
|
* src/MultiDiskAdaptor.h
|
||||||
|
* src/MultiFileAllocationIterator.cc
|
||||||
|
* src/MultiFileAllocationIterator.h
|
||||||
|
* test/BtBitfieldMessageTest.cc
|
||||||
|
* test/BtHaveAllMessageTest.cc
|
||||||
|
* test/BtHaveMessageTest.cc
|
||||||
|
|
||||||
2010-06-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2010-06-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Made protected member variable private. Added accessor funcs.
|
Made protected member variable private. Added accessor funcs.
|
||||||
|
|
|
@ -39,42 +39,45 @@
|
||||||
# include "FallocFileAllocationIterator.h"
|
# include "FallocFileAllocationIterator.h"
|
||||||
#endif // HAVE_POSIX_FALLOCATE
|
#endif // HAVE_POSIX_FALLOCATE
|
||||||
#include "DiskWriter.h"
|
#include "DiskWriter.h"
|
||||||
|
#include "FileEntry.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
AbstractSingleDiskAdaptor::AbstractSingleDiskAdaptor():
|
AbstractSingleDiskAdaptor::AbstractSingleDiskAdaptor():
|
||||||
totalLength(0), _readOnly(false) {}
|
_totalLength(0), _readOnly(false) {}
|
||||||
|
|
||||||
AbstractSingleDiskAdaptor::~AbstractSingleDiskAdaptor() {}
|
AbstractSingleDiskAdaptor::~AbstractSingleDiskAdaptor() {}
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::initAndOpenFile()
|
void AbstractSingleDiskAdaptor::initAndOpenFile()
|
||||||
{
|
{
|
||||||
diskWriter->initAndOpenFile(totalLength);
|
_diskWriter->initAndOpenFile(_totalLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::openFile()
|
void AbstractSingleDiskAdaptor::openFile()
|
||||||
{
|
{
|
||||||
diskWriter->openFile(totalLength);
|
_diskWriter->openFile(_totalLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::closeFile()
|
void AbstractSingleDiskAdaptor::closeFile()
|
||||||
{
|
{
|
||||||
diskWriter->closeFile();
|
_diskWriter->closeFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::openExistingFile()
|
void AbstractSingleDiskAdaptor::openExistingFile()
|
||||||
{
|
{
|
||||||
diskWriter->openExistingFile(totalLength);
|
_diskWriter->openExistingFile(_totalLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::writeData(const unsigned char* data, size_t len, off_t offset)
|
void AbstractSingleDiskAdaptor::writeData
|
||||||
|
(const unsigned char* data, size_t len, off_t offset)
|
||||||
{
|
{
|
||||||
diskWriter->writeData(data, len, offset);
|
_diskWriter->writeData(data, len, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t AbstractSingleDiskAdaptor::readData(unsigned char* data, size_t len, off_t offset)
|
ssize_t AbstractSingleDiskAdaptor::readData
|
||||||
|
(unsigned char* data, size_t len, off_t offset)
|
||||||
{
|
{
|
||||||
return diskWriter->readData(data, len, offset);
|
return _diskWriter->readData(data, len, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractSingleDiskAdaptor::fileExists()
|
bool AbstractSingleDiskAdaptor::fileExists()
|
||||||
|
@ -89,21 +92,24 @@ uint64_t AbstractSingleDiskAdaptor::size()
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::truncate(uint64_t length)
|
void AbstractSingleDiskAdaptor::truncate(uint64_t length)
|
||||||
{
|
{
|
||||||
diskWriter->truncate(length);
|
_diskWriter->truncate(length);
|
||||||
}
|
}
|
||||||
|
|
||||||
FileAllocationIteratorHandle AbstractSingleDiskAdaptor::fileAllocationIterator()
|
FileAllocationIteratorHandle
|
||||||
|
AbstractSingleDiskAdaptor::fileAllocationIterator()
|
||||||
{
|
{
|
||||||
#ifdef HAVE_POSIX_FALLOCATE
|
#ifdef HAVE_POSIX_FALLOCATE
|
||||||
if(_fallocate) {
|
if(doesFallocate()) {
|
||||||
SharedHandle<FallocFileAllocationIterator> h
|
SharedHandle<FallocFileAllocationIterator> h
|
||||||
(new FallocFileAllocationIterator(diskWriter.get(), size(), totalLength));
|
(new FallocFileAllocationIterator
|
||||||
|
(_diskWriter.get(), size() ,_totalLength));
|
||||||
return h;
|
return h;
|
||||||
} else
|
} else
|
||||||
#endif // HAVE_POSIX_FALLOCATE
|
#endif // HAVE_POSIX_FALLOCATE
|
||||||
{
|
{
|
||||||
SingleFileAllocationIteratorHandle h
|
SingleFileAllocationIteratorHandle h
|
||||||
(new SingleFileAllocationIterator(diskWriter.get(),size(),totalLength));
|
(new SingleFileAllocationIterator
|
||||||
|
(_diskWriter.get(), size(), _totalLength));
|
||||||
h->init();
|
h->init();
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
@ -111,41 +117,42 @@ FileAllocationIteratorHandle AbstractSingleDiskAdaptor::fileAllocationIterator()
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::enableDirectIO()
|
void AbstractSingleDiskAdaptor::enableDirectIO()
|
||||||
{
|
{
|
||||||
diskWriter->enableDirectIO();
|
_diskWriter->enableDirectIO();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::disableDirectIO()
|
void AbstractSingleDiskAdaptor::disableDirectIO()
|
||||||
{
|
{
|
||||||
diskWriter->disableDirectIO();
|
_diskWriter->disableDirectIO();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::enableReadOnly()
|
void AbstractSingleDiskAdaptor::enableReadOnly()
|
||||||
{
|
{
|
||||||
diskWriter->enableReadOnly();
|
_diskWriter->enableReadOnly();
|
||||||
_readOnly = true;
|
_readOnly = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::disableReadOnly()
|
void AbstractSingleDiskAdaptor::disableReadOnly()
|
||||||
{
|
{
|
||||||
diskWriter->disableReadOnly();
|
_diskWriter->disableReadOnly();
|
||||||
_readOnly = false;
|
_readOnly = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::cutTrailingGarbage()
|
void AbstractSingleDiskAdaptor::cutTrailingGarbage()
|
||||||
{
|
{
|
||||||
if(File(getFilePath()).size() > totalLength) {
|
if(File(getFilePath()).size() > _totalLength) {
|
||||||
diskWriter->truncate(totalLength);
|
_diskWriter->truncate(_totalLength);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::setDiskWriter(const DiskWriterHandle& diskWriter)
|
void AbstractSingleDiskAdaptor::setDiskWriter
|
||||||
|
(const DiskWriterHandle& diskWriter)
|
||||||
{
|
{
|
||||||
this->diskWriter = diskWriter;
|
_diskWriter = diskWriter;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::setTotalLength(const uint64_t& totalLength)
|
void AbstractSingleDiskAdaptor::setTotalLength(const uint64_t& totalLength)
|
||||||
{
|
{
|
||||||
this->totalLength = totalLength;
|
_totalLength = totalLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
|
@ -43,9 +43,9 @@ class DiskWriter;
|
||||||
class FileAllocationIterator;
|
class FileAllocationIterator;
|
||||||
|
|
||||||
class AbstractSingleDiskAdaptor : public DiskAdaptor {
|
class AbstractSingleDiskAdaptor : public DiskAdaptor {
|
||||||
protected:
|
private:
|
||||||
SharedHandle<DiskWriter> diskWriter;
|
SharedHandle<DiskWriter> _diskWriter;
|
||||||
uint64_t totalLength;
|
uint64_t _totalLength;
|
||||||
bool _readOnly;
|
bool _readOnly;
|
||||||
public:
|
public:
|
||||||
AbstractSingleDiskAdaptor();
|
AbstractSingleDiskAdaptor();
|
||||||
|
@ -93,14 +93,14 @@ public:
|
||||||
|
|
||||||
const SharedHandle<DiskWriter>& getDiskWriter() const
|
const SharedHandle<DiskWriter>& getDiskWriter() const
|
||||||
{
|
{
|
||||||
return diskWriter;
|
return _diskWriter;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setTotalLength(const uint64_t& totalLength);
|
void setTotalLength(const uint64_t& totalLength);
|
||||||
|
|
||||||
uint64_t getTotalLength() const
|
uint64_t getTotalLength() const
|
||||||
{
|
{
|
||||||
return totalLength;
|
return _totalLength;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace aria2 {
|
||||||
|
|
||||||
const std::string& DirectDiskAdaptor::getFilePath()
|
const std::string& DirectDiskAdaptor::getFilePath()
|
||||||
{
|
{
|
||||||
return fileEntries.front()->getPath();
|
return getFileEntries().front()->getPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t DirectDiskAdaptor::utime(const Time& actime, const Time& modtime)
|
size_t DirectDiskAdaptor::utime(const Time& actime, const Time& modtime)
|
||||||
|
|
|
@ -41,9 +41,6 @@ namespace aria2 {
|
||||||
|
|
||||||
class DirectDiskAdaptor : public AbstractSingleDiskAdaptor {
|
class DirectDiskAdaptor : public AbstractSingleDiskAdaptor {
|
||||||
public:
|
public:
|
||||||
DirectDiskAdaptor() {};
|
|
||||||
virtual ~DirectDiskAdaptor() {};
|
|
||||||
|
|
||||||
virtual const std::string& getFilePath();
|
virtual const std::string& getFilePath();
|
||||||
|
|
||||||
virtual size_t utime(const Time& actime, const Time& modtime);
|
virtual size_t utime(const Time& actime, const Time& modtime);
|
||||||
|
|
|
@ -43,8 +43,6 @@ DiskAdaptor::DiskAdaptor():
|
||||||
#ifdef HAVE_POSIX_FALLOCATE
|
#ifdef HAVE_POSIX_FALLOCATE
|
||||||
_fallocate(false),
|
_fallocate(false),
|
||||||
#endif // HAVE_POSIX_FALLOCATE
|
#endif // HAVE_POSIX_FALLOCATE
|
||||||
logger(LogFactory::getInstance()) {}
|
_logger(LogFactory::getInstance()) {}
|
||||||
|
|
||||||
DiskAdaptor::~DiskAdaptor() {}
|
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
|
@ -49,15 +49,20 @@ class Logger;
|
||||||
class FileAllocationIterator;
|
class FileAllocationIterator;
|
||||||
|
|
||||||
class DiskAdaptor:public BinaryStream {
|
class DiskAdaptor:public BinaryStream {
|
||||||
protected:
|
private:
|
||||||
std::vector<SharedHandle<FileEntry> > fileEntries;
|
std::vector<SharedHandle<FileEntry> > _fileEntries;
|
||||||
#ifdef HAVE_POSIX_FALLOCATE
|
#ifdef HAVE_POSIX_FALLOCATE
|
||||||
bool _fallocate;
|
bool _fallocate;
|
||||||
#endif // HAVE_POSIX_FALLOCATE
|
#endif // HAVE_POSIX_FALLOCATE
|
||||||
Logger* logger;
|
Logger* _logger;
|
||||||
|
protected:
|
||||||
|
Logger* getLogger() const
|
||||||
|
{
|
||||||
|
return _logger;
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
DiskAdaptor();
|
DiskAdaptor();
|
||||||
virtual ~DiskAdaptor();
|
virtual ~DiskAdaptor() {}
|
||||||
|
|
||||||
virtual void openFile() = 0;
|
virtual void openFile() = 0;
|
||||||
|
|
||||||
|
@ -74,12 +79,12 @@ public:
|
||||||
template<typename InputIterator>
|
template<typename InputIterator>
|
||||||
void setFileEntries(InputIterator first, InputIterator last)
|
void setFileEntries(InputIterator first, InputIterator last)
|
||||||
{
|
{
|
||||||
fileEntries.assign(first, last);
|
_fileEntries.assign(first, last);
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<SharedHandle<FileEntry> >& getFileEntries() const
|
const std::vector<SharedHandle<FileEntry> >& getFileEntries() const
|
||||||
{
|
{
|
||||||
return fileEntries;
|
return _fileEntries;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual SharedHandle<FileAllocationIterator> fileAllocationIterator() = 0;
|
virtual SharedHandle<FileAllocationIterator> fileAllocationIterator() = 0;
|
||||||
|
|
|
@ -53,22 +53,20 @@
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
DiskWriterEntry::DiskWriterEntry(const SharedHandle<FileEntry>& fileEntry):
|
DiskWriterEntry::DiskWriterEntry(const SharedHandle<FileEntry>& fileEntry):
|
||||||
fileEntry(fileEntry), _open(false), _directIO(false),
|
_fileEntry(fileEntry), _open(false), _directIO(false),
|
||||||
_needsFileAllocation(false) {}
|
_needsFileAllocation(false) {}
|
||||||
|
|
||||||
DiskWriterEntry::~DiskWriterEntry() {}
|
|
||||||
|
|
||||||
const std::string& DiskWriterEntry::getFilePath() const
|
const std::string& DiskWriterEntry::getFilePath() const
|
||||||
{
|
{
|
||||||
return fileEntry->getPath();
|
return _fileEntry->getPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiskWriterEntry::initAndOpenFile()
|
void DiskWriterEntry::initAndOpenFile()
|
||||||
{
|
{
|
||||||
if(!diskWriter.isNull()) {
|
if(!_diskWriter.isNull()) {
|
||||||
diskWriter->initAndOpenFile(fileEntry->getLength());
|
_diskWriter->initAndOpenFile(_fileEntry->getLength());
|
||||||
if(_directIO) {
|
if(_directIO) {
|
||||||
diskWriter->enableDirectIO();
|
_diskWriter->enableDirectIO();
|
||||||
}
|
}
|
||||||
_open = true;
|
_open = true;
|
||||||
}
|
}
|
||||||
|
@ -76,10 +74,10 @@ void DiskWriterEntry::initAndOpenFile()
|
||||||
|
|
||||||
void DiskWriterEntry::openFile()
|
void DiskWriterEntry::openFile()
|
||||||
{
|
{
|
||||||
if(!diskWriter.isNull()) {
|
if(!_diskWriter.isNull()) {
|
||||||
diskWriter->openFile(fileEntry->getLength());
|
_diskWriter->openFile(_fileEntry->getLength());
|
||||||
if(_directIO) {
|
if(_directIO) {
|
||||||
diskWriter->enableDirectIO();
|
_diskWriter->enableDirectIO();
|
||||||
}
|
}
|
||||||
_open = true;
|
_open = true;
|
||||||
}
|
}
|
||||||
|
@ -87,10 +85,10 @@ void DiskWriterEntry::openFile()
|
||||||
|
|
||||||
void DiskWriterEntry::openExistingFile()
|
void DiskWriterEntry::openExistingFile()
|
||||||
{
|
{
|
||||||
if(!diskWriter.isNull()) {
|
if(!_diskWriter.isNull()) {
|
||||||
diskWriter->openExistingFile(fileEntry->getLength());
|
_diskWriter->openExistingFile(_fileEntry->getLength());
|
||||||
if(_directIO) {
|
if(_directIO) {
|
||||||
diskWriter->enableDirectIO();
|
_diskWriter->enableDirectIO();
|
||||||
}
|
}
|
||||||
_open = true;
|
_open = true;
|
||||||
}
|
}
|
||||||
|
@ -99,14 +97,14 @@ void DiskWriterEntry::openExistingFile()
|
||||||
void DiskWriterEntry::closeFile()
|
void DiskWriterEntry::closeFile()
|
||||||
{
|
{
|
||||||
if(_open) {
|
if(_open) {
|
||||||
diskWriter->closeFile();
|
_diskWriter->closeFile();
|
||||||
_open = false;
|
_open = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DiskWriterEntry::fileExists()
|
bool DiskWriterEntry::fileExists()
|
||||||
{
|
{
|
||||||
return fileEntry->exists();
|
return _fileEntry->exists();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t DiskWriterEntry::size() const
|
uint64_t DiskWriterEntry::size() const
|
||||||
|
@ -116,18 +114,18 @@ uint64_t DiskWriterEntry::size() const
|
||||||
|
|
||||||
void DiskWriterEntry::setDiskWriter(const SharedHandle<DiskWriter>& diskWriter)
|
void DiskWriterEntry::setDiskWriter(const SharedHandle<DiskWriter>& diskWriter)
|
||||||
{
|
{
|
||||||
this->diskWriter = diskWriter;
|
_diskWriter = diskWriter;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DiskWriterEntry::operator<(const DiskWriterEntry& entry) const
|
bool DiskWriterEntry::operator<(const DiskWriterEntry& entry) const
|
||||||
{
|
{
|
||||||
return fileEntry < entry.fileEntry;
|
return _fileEntry < entry._fileEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiskWriterEntry::enableDirectIO()
|
void DiskWriterEntry::enableDirectIO()
|
||||||
{
|
{
|
||||||
if(_open) {
|
if(_open) {
|
||||||
diskWriter->enableDirectIO();
|
_diskWriter->enableDirectIO();
|
||||||
}
|
}
|
||||||
_directIO = true;
|
_directIO = true;
|
||||||
}
|
}
|
||||||
|
@ -135,19 +133,17 @@ void DiskWriterEntry::enableDirectIO()
|
||||||
void DiskWriterEntry::disableDirectIO()
|
void DiskWriterEntry::disableDirectIO()
|
||||||
{
|
{
|
||||||
if(_open) {
|
if(_open) {
|
||||||
diskWriter->disableDirectIO();
|
_diskWriter->disableDirectIO();
|
||||||
}
|
}
|
||||||
_directIO = false;
|
_directIO = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
MultiDiskAdaptor::MultiDiskAdaptor():
|
MultiDiskAdaptor::MultiDiskAdaptor():
|
||||||
pieceLength(0),
|
_pieceLength(0),
|
||||||
_maxOpenFiles(DEFAULT_MAX_OPEN_FILES),
|
_maxOpenFiles(DEFAULT_MAX_OPEN_FILES),
|
||||||
_directIOAllowed(false),
|
_directIOAllowed(false),
|
||||||
_readOnly(false) {}
|
_readOnly(false) {}
|
||||||
|
|
||||||
MultiDiskAdaptor::~MultiDiskAdaptor() {}
|
|
||||||
|
|
||||||
static SharedHandle<DiskWriterEntry> createDiskWriterEntry
|
static SharedHandle<DiskWriterEntry> createDiskWriterEntry
|
||||||
(const SharedHandle<FileEntry>& fileEntry,
|
(const SharedHandle<FileEntry>& fileEntry,
|
||||||
bool needsFileAllocation)
|
bool needsFileAllocation)
|
||||||
|
@ -157,29 +153,26 @@ static SharedHandle<DiskWriterEntry> createDiskWriterEntry
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MultiDiskAdaptor::resetDiskWriterEntries()
|
void MultiDiskAdaptor::resetDiskWriterEntries()
|
||||||
{
|
{
|
||||||
diskWriterEntries.clear();
|
_diskWriterEntries.clear();
|
||||||
|
|
||||||
if(fileEntries.empty()) {
|
if(getFileEntries().empty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
|
for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
|
||||||
fileEntries.begin(), eoi = fileEntries.end(); i != eoi; ++i) {
|
getFileEntries().begin(), eoi = getFileEntries().end(); i != eoi; ++i) {
|
||||||
diskWriterEntries.push_back
|
_diskWriterEntries.push_back
|
||||||
(createDiskWriterEntry(*i, (*i)->isRequested()));
|
(createDiskWriterEntry(*i, (*i)->isRequested()));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<std::string, bool> dwreq;
|
std::map<std::string, bool> dwreq;
|
||||||
|
// TODO Currently, _pieceLength == 0 is used for unit testing only.
|
||||||
// TODO Currently, pieceLength == 0 is used for unit testing only.
|
if(_pieceLength > 0) {
|
||||||
if(pieceLength > 0) {
|
|
||||||
std::vector<SharedHandle<DiskWriterEntry> >::const_iterator done =
|
std::vector<SharedHandle<DiskWriterEntry> >::const_iterator done =
|
||||||
diskWriterEntries.begin();
|
_diskWriterEntries.begin();
|
||||||
for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator itr =
|
for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator itr =
|
||||||
diskWriterEntries.begin(), eoi = diskWriterEntries.end();
|
_diskWriterEntries.begin(), eoi = _diskWriterEntries.end();
|
||||||
itr != eoi;) {
|
itr != eoi;) {
|
||||||
const SharedHandle<FileEntry>& fileEntry = (*itr)->getFileEntry();
|
const SharedHandle<FileEntry>& fileEntry = (*itr)->getFileEntry();
|
||||||
|
|
||||||
|
@ -188,8 +181,8 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
off_t pieceStartOffset =
|
off_t pieceStartOffset =
|
||||||
(fileEntry->getOffset()/pieceLength)*pieceLength;
|
(fileEntry->getOffset()/_pieceLength)*_pieceLength;
|
||||||
if(itr != diskWriterEntries.begin()) {
|
if(itr != _diskWriterEntries.begin()) {
|
||||||
for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
|
for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
|
||||||
itr-1; true; --i) {
|
itr-1; true; --i) {
|
||||||
const SharedHandle<FileEntry>& fileEntry = (*i)->getFileEntry();
|
const SharedHandle<FileEntry>& fileEntry = (*i)->getFileEntry();
|
||||||
|
@ -208,12 +201,13 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
|
||||||
|
|
||||||
if(fileEntry->getLength() > 0) {
|
if(fileEntry->getLength() > 0) {
|
||||||
off_t lastPieceStartOffset =
|
off_t lastPieceStartOffset =
|
||||||
(fileEntry->getOffset()+fileEntry->getLength()-1)/pieceLength*pieceLength;
|
(fileEntry->getOffset()+fileEntry->getLength()-1)/
|
||||||
if(logger->debug()) {
|
_pieceLength*_pieceLength;
|
||||||
logger->debug("Checking adjacent backward file to %s"
|
if(getLogger()->debug()) {
|
||||||
" whose lastPieceStartOffset+pieceLength=%lld",
|
getLogger()->debug("Checking adjacent backward file to %s"
|
||||||
|
" whose lastPieceStartOffset+_pieceLength=%lld",
|
||||||
fileEntry->getPath().c_str(),
|
fileEntry->getPath().c_str(),
|
||||||
lastPieceStartOffset+pieceLength);
|
lastPieceStartOffset+_pieceLength);
|
||||||
}
|
}
|
||||||
++itr;
|
++itr;
|
||||||
// adjacent backward files are not needed to be allocated. They
|
// adjacent backward files are not needed to be allocated. They
|
||||||
|
@ -221,15 +215,15 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
|
||||||
for(; itr != eoi &&
|
for(; itr != eoi &&
|
||||||
(!(*itr)->getFileEntry()->isRequested() ||
|
(!(*itr)->getFileEntry()->isRequested() ||
|
||||||
(*itr)->getFileEntry()->getLength() == 0); ++itr) {
|
(*itr)->getFileEntry()->getLength() == 0); ++itr) {
|
||||||
if(logger->debug()) {
|
if(getLogger()->debug()) {
|
||||||
logger->debug("file=%s, offset=%lld",
|
getLogger()->debug("file=%s, offset=%lld",
|
||||||
(*itr)->getFileEntry()->getPath().c_str(),
|
(*itr)->getFileEntry()->getPath().c_str(),
|
||||||
(*itr)->getFileEntry()->getOffset());
|
(*itr)->getFileEntry()->getOffset());
|
||||||
}
|
}
|
||||||
if((*itr)->getFileEntry()->getOffset() <
|
if((*itr)->getFileEntry()->getOffset() <
|
||||||
static_cast<off_t>(lastPieceStartOffset+pieceLength)) {
|
static_cast<off_t>(lastPieceStartOffset+_pieceLength)) {
|
||||||
if(logger->debug()) {
|
if(getLogger()->debug()) {
|
||||||
logger->debug("%s needs diskwriter",
|
getLogger()->debug("%s needs diskwriter",
|
||||||
(*itr)->getFileEntry()->getPath().c_str());
|
(*itr)->getFileEntry()->getPath().c_str());
|
||||||
}
|
}
|
||||||
dwreq[(*itr)->getFileEntry()->getPath()] = true;
|
dwreq[(*itr)->getFileEntry()->getPath()] = true;
|
||||||
|
@ -246,13 +240,13 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
|
||||||
}
|
}
|
||||||
DefaultDiskWriterFactory dwFactory;
|
DefaultDiskWriterFactory dwFactory;
|
||||||
for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
|
for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
|
||||||
diskWriterEntries.begin(), eoi = diskWriterEntries.end();
|
_diskWriterEntries.begin(), eoi = _diskWriterEntries.end();
|
||||||
i != eoi; ++i) {
|
i != eoi; ++i) {
|
||||||
if((*i)->needsFileAllocation() ||
|
if((*i)->needsFileAllocation() ||
|
||||||
dwreq.find((*i)->getFileEntry()->getPath()) != dwreq.end() ||
|
dwreq.find((*i)->getFileEntry()->getPath()) != dwreq.end() ||
|
||||||
(*i)->fileExists()) {
|
(*i)->fileExists()) {
|
||||||
if(logger->debug()) {
|
if(getLogger()->debug()) {
|
||||||
logger->debug("Creating DiskWriter for filename=%s",
|
getLogger()->debug("Creating DiskWriter for filename=%s",
|
||||||
(*i)->getFilePath().c_str());
|
(*i)->getFilePath().c_str());
|
||||||
}
|
}
|
||||||
(*i)->setDiskWriter(dwFactory.newDiskWriter((*i)->getFilePath()));
|
(*i)->setDiskWriter(dwFactory.newDiskWriter((*i)->getFilePath()));
|
||||||
|
@ -269,7 +263,7 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
|
||||||
void MultiDiskAdaptor::mkdir() const
|
void MultiDiskAdaptor::mkdir() const
|
||||||
{
|
{
|
||||||
for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
|
for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
|
||||||
diskWriterEntries.begin(), eoi = diskWriterEntries.end();
|
_diskWriterEntries.begin(), eoi = _diskWriterEntries.end();
|
||||||
i != eoi; ++i) {
|
i != eoi; ++i) {
|
||||||
(*i)->getFileEntry()->setupDir();
|
(*i)->getFileEntry()->setupDir();
|
||||||
}
|
}
|
||||||
|
@ -279,7 +273,7 @@ void MultiDiskAdaptor::openIfNot
|
||||||
(const SharedHandle<DiskWriterEntry>& entry, void (DiskWriterEntry::*open)())
|
(const SharedHandle<DiskWriterEntry>& entry, void (DiskWriterEntry::*open)())
|
||||||
{
|
{
|
||||||
if(!entry->isOpen()) {
|
if(!entry->isOpen()) {
|
||||||
// logger->debug("DiskWriterEntry: Cache MISS. offset=%s",
|
// getLogger()->debug("DiskWriterEntry: Cache MISS. offset=%s",
|
||||||
// util::itos(entry->getFileEntry()->getOffset()).c_str());
|
// util::itos(entry->getFileEntry()->getOffset()).c_str());
|
||||||
|
|
||||||
size_t numOpened = _openedDiskWriterEntries.size();
|
size_t numOpened = _openedDiskWriterEntries.size();
|
||||||
|
@ -287,7 +281,8 @@ void MultiDiskAdaptor::openIfNot
|
||||||
if(numOpened >= _maxOpenFiles) {
|
if(numOpened >= _maxOpenFiles) {
|
||||||
// Cache is full.
|
// Cache is full.
|
||||||
// Choose one DiskWriterEntry randomly and close it.
|
// Choose one DiskWriterEntry randomly and close it.
|
||||||
size_t index = SimpleRandomizer::getInstance()->getRandomNumber(numOpened);
|
size_t index =
|
||||||
|
SimpleRandomizer::getInstance()->getRandomNumber(numOpened);
|
||||||
std::vector<SharedHandle<DiskWriterEntry> >::iterator i =
|
std::vector<SharedHandle<DiskWriterEntry> >::iterator i =
|
||||||
_openedDiskWriterEntries.begin();
|
_openedDiskWriterEntries.begin();
|
||||||
std::advance(i, index);
|
std::advance(i, index);
|
||||||
|
@ -297,7 +292,7 @@ void MultiDiskAdaptor::openIfNot
|
||||||
_openedDiskWriterEntries.push_back(entry);
|
_openedDiskWriterEntries.push_back(entry);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// logger->debug("DiskWriterEntry: Cache HIT. offset=%s",
|
// getLogger()->debug("DiskWriterEntry: Cache HIT. offset=%s",
|
||||||
// util::itos(entry->getFileEntry()->getOffset()).c_str());
|
// util::itos(entry->getFileEntry()->getOffset()).c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -308,8 +303,8 @@ void MultiDiskAdaptor::openFile()
|
||||||
mkdir();
|
mkdir();
|
||||||
// Call DiskWriterEntry::openFile to make sure that zero-length files are
|
// Call DiskWriterEntry::openFile to make sure that zero-length files are
|
||||||
// created.
|
// created.
|
||||||
for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin(),
|
for(DiskWriterEntries::const_iterator itr = _diskWriterEntries.begin(),
|
||||||
eoi = diskWriterEntries.end(); itr != eoi; ++itr) {
|
eoi = _diskWriterEntries.end(); itr != eoi; ++itr) {
|
||||||
openIfNot(*itr, &DiskWriterEntry::openFile);
|
openIfNot(*itr, &DiskWriterEntry::openFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -319,8 +314,8 @@ void MultiDiskAdaptor::initAndOpenFile()
|
||||||
resetDiskWriterEntries();
|
resetDiskWriterEntries();
|
||||||
mkdir();
|
mkdir();
|
||||||
// Call DiskWriterEntry::initAndOpenFile to make files truncated.
|
// Call DiskWriterEntry::initAndOpenFile to make files truncated.
|
||||||
for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin(),
|
for(DiskWriterEntries::const_iterator itr = _diskWriterEntries.begin(),
|
||||||
eoi = diskWriterEntries.end(); itr != eoi; ++itr) {
|
eoi = _diskWriterEntries.end(); itr != eoi; ++itr) {
|
||||||
openIfNot(*itr, &DiskWriterEntry::initAndOpenFile);
|
openIfNot(*itr, &DiskWriterEntry::initAndOpenFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -333,16 +328,15 @@ void MultiDiskAdaptor::openExistingFile()
|
||||||
|
|
||||||
void MultiDiskAdaptor::closeFile()
|
void MultiDiskAdaptor::closeFile()
|
||||||
{
|
{
|
||||||
for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin(),
|
std::for_each(_diskWriterEntries.begin(), _diskWriterEntries.end(),
|
||||||
eoi = diskWriterEntries.end(); itr != eoi; ++itr) {
|
mem_fun_sh(&DiskWriterEntry::closeFile));
|
||||||
(*itr)->closeFile();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isInRange(const DiskWriterEntryHandle entry, off_t offset)
|
static bool isInRange(const DiskWriterEntryHandle entry, off_t offset)
|
||||||
{
|
{
|
||||||
return entry->getFileEntry()->getOffset() <= offset &&
|
return entry->getFileEntry()->getOffset() <= offset &&
|
||||||
(uint64_t)offset < entry->getFileEntry()->getOffset()+entry->getFileEntry()->getLength();
|
(uint64_t)offset <
|
||||||
|
entry->getFileEntry()->getOffset()+entry->getFileEntry()->getLength();
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t calculateLength(const DiskWriterEntryHandle entry,
|
static size_t calculateLength(const DiskWriterEntryHandle entry,
|
||||||
|
@ -366,7 +360,8 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
static DiskWriterEntries::const_iterator
|
static DiskWriterEntries::const_iterator
|
||||||
findFirstDiskWriterEntry(const DiskWriterEntries& diskWriterEntries, off_t offset)
|
findFirstDiskWriterEntry
|
||||||
|
(const DiskWriterEntries& diskWriterEntries, off_t offset)
|
||||||
{
|
{
|
||||||
DiskWriterEntries::const_iterator first =
|
DiskWriterEntries::const_iterator first =
|
||||||
std::upper_bound(diskWriterEntries.begin(), diskWriterEntries.end(),
|
std::upper_bound(diskWriterEntries.begin(), diskWriterEntries.end(),
|
||||||
|
@ -395,12 +390,13 @@ static void throwOnDiskWriterNotOpened(const SharedHandle<DiskWriterEntry>& e,
|
||||||
void MultiDiskAdaptor::writeData(const unsigned char* data, size_t len,
|
void MultiDiskAdaptor::writeData(const unsigned char* data, size_t len,
|
||||||
off_t offset)
|
off_t offset)
|
||||||
{
|
{
|
||||||
DiskWriterEntries::const_iterator first = findFirstDiskWriterEntry(diskWriterEntries, offset);
|
DiskWriterEntries::const_iterator first =
|
||||||
|
findFirstDiskWriterEntry(_diskWriterEntries, offset);
|
||||||
|
|
||||||
size_t rem = len;
|
size_t rem = len;
|
||||||
off_t fileOffset = offset-(*first)->getFileEntry()->getOffset();
|
off_t fileOffset = offset-(*first)->getFileEntry()->getOffset();
|
||||||
for(DiskWriterEntries::const_iterator i = first,
|
for(DiskWriterEntries::const_iterator i = first,
|
||||||
eoi = diskWriterEntries.end(); i != eoi; ++i) {
|
eoi = _diskWriterEntries.end(); i != eoi; ++i) {
|
||||||
size_t writeLength = calculateLength(*i, fileOffset, rem);
|
size_t writeLength = calculateLength(*i, fileOffset, rem);
|
||||||
|
|
||||||
openIfNot(*i, &DiskWriterEntry::openFile);
|
openIfNot(*i, &DiskWriterEntry::openFile);
|
||||||
|
@ -418,16 +414,17 @@ void MultiDiskAdaptor::writeData(const unsigned char* data, size_t len,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t MultiDiskAdaptor::readData(unsigned char* data, size_t len, off_t offset)
|
ssize_t MultiDiskAdaptor::readData
|
||||||
|
(unsigned char* data, size_t len, off_t offset)
|
||||||
{
|
{
|
||||||
DiskWriterEntries::const_iterator first =
|
DiskWriterEntries::const_iterator first =
|
||||||
findFirstDiskWriterEntry(diskWriterEntries, offset);
|
findFirstDiskWriterEntry(_diskWriterEntries, offset);
|
||||||
|
|
||||||
size_t rem = len;
|
size_t rem = len;
|
||||||
size_t totalReadLength = 0;
|
size_t totalReadLength = 0;
|
||||||
off_t fileOffset = offset-(*first)->getFileEntry()->getOffset();
|
off_t fileOffset = offset-(*first)->getFileEntry()->getOffset();
|
||||||
for(DiskWriterEntries::const_iterator i = first,
|
for(DiskWriterEntries::const_iterator i = first,
|
||||||
eoi = diskWriterEntries.end(); i != eoi; ++i) {
|
eoi = _diskWriterEntries.end(); i != eoi; ++i) {
|
||||||
size_t readLength = calculateLength(*i, fileOffset, rem);
|
size_t readLength = calculateLength(*i, fileOffset, rem);
|
||||||
|
|
||||||
openIfNot(*i, &DiskWriterEntry::openFile);
|
openIfNot(*i, &DiskWriterEntry::openFile);
|
||||||
|
@ -449,20 +446,16 @@ ssize_t MultiDiskAdaptor::readData(unsigned char* data, size_t len, off_t offset
|
||||||
|
|
||||||
bool MultiDiskAdaptor::fileExists()
|
bool MultiDiskAdaptor::fileExists()
|
||||||
{
|
{
|
||||||
for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
|
return std::find_if(getFileEntries().begin(), getFileEntries().end(),
|
||||||
fileEntries.begin(), eoi = fileEntries.end(); i != eoi; ++i) {
|
mem_fun_sh(&FileEntry::exists)) !=
|
||||||
if((*i)->exists()) {
|
getFileEntries().end();
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t MultiDiskAdaptor::size()
|
uint64_t MultiDiskAdaptor::size()
|
||||||
{
|
{
|
||||||
uint64_t size = 0;
|
uint64_t size = 0;
|
||||||
for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
|
for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
|
||||||
fileEntries.begin(), eoi = fileEntries.end(); i != eoi; ++i) {
|
getFileEntries().begin(), eoi = getFileEntries().end(); i != eoi; ++i) {
|
||||||
size += File((*i)->getPath()).size();
|
size += File((*i)->getPath()).size();
|
||||||
}
|
}
|
||||||
return size;
|
return size;
|
||||||
|
@ -470,23 +463,20 @@ uint64_t MultiDiskAdaptor::size()
|
||||||
|
|
||||||
FileAllocationIteratorHandle MultiDiskAdaptor::fileAllocationIterator()
|
FileAllocationIteratorHandle MultiDiskAdaptor::fileAllocationIterator()
|
||||||
{
|
{
|
||||||
return SharedHandle<FileAllocationIterator>(new MultiFileAllocationIterator(this));
|
return SharedHandle<FileAllocationIterator>
|
||||||
|
(new MultiFileAllocationIterator(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiDiskAdaptor::enableDirectIO()
|
void MultiDiskAdaptor::enableDirectIO()
|
||||||
{
|
{
|
||||||
for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin(),
|
std::for_each(_diskWriterEntries.begin(), _diskWriterEntries.end(),
|
||||||
eoi = diskWriterEntries.end(); itr != eoi; ++itr) {
|
mem_fun_sh(&DiskWriterEntry::enableDirectIO));
|
||||||
(*itr)->enableDirectIO();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiDiskAdaptor::disableDirectIO()
|
void MultiDiskAdaptor::disableDirectIO()
|
||||||
{
|
{
|
||||||
for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin(),
|
std::for_each(_diskWriterEntries.begin(), _diskWriterEntries.end(),
|
||||||
eoi = diskWriterEntries.end(); itr != eoi; ++itr) {
|
mem_fun_sh(&DiskWriterEntry::disableDirectIO));
|
||||||
(*itr)->disableDirectIO();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiDiskAdaptor::enableReadOnly()
|
void MultiDiskAdaptor::enableReadOnly()
|
||||||
|
@ -502,7 +492,7 @@ void MultiDiskAdaptor::disableReadOnly()
|
||||||
void MultiDiskAdaptor::cutTrailingGarbage()
|
void MultiDiskAdaptor::cutTrailingGarbage()
|
||||||
{
|
{
|
||||||
for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
|
for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
|
||||||
diskWriterEntries.begin(), eoi = diskWriterEntries.end();
|
_diskWriterEntries.begin(), eoi = _diskWriterEntries.end();
|
||||||
i != eoi; ++i) {
|
i != eoi; ++i) {
|
||||||
uint64_t length = (*i)->getFileEntry()->getLength();
|
uint64_t length = (*i)->getFileEntry()->getLength();
|
||||||
if(File((*i)->getFilePath()).size() > length) {
|
if(File((*i)->getFilePath()).size() > length) {
|
||||||
|
@ -522,7 +512,7 @@ size_t MultiDiskAdaptor::utime(const Time& actime, const Time& modtime)
|
||||||
{
|
{
|
||||||
size_t numOK = 0;
|
size_t numOK = 0;
|
||||||
for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
|
for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
|
||||||
fileEntries.begin(), eoi = fileEntries.end(); i != eoi; ++i) {
|
getFileEntries().begin(), eoi = getFileEntries().end(); i != eoi; ++i) {
|
||||||
if((*i)->isRequested()) {
|
if((*i)->isRequested()) {
|
||||||
File f((*i)->getPath());
|
File f((*i)->getPath());
|
||||||
if(f.isFile() && f.utime(actime, modtime)) {
|
if(f.isFile() && f.utime(actime, modtime)) {
|
||||||
|
|
|
@ -45,16 +45,14 @@ class DiskWriter;
|
||||||
|
|
||||||
class DiskWriterEntry {
|
class DiskWriterEntry {
|
||||||
private:
|
private:
|
||||||
SharedHandle<FileEntry> fileEntry;
|
SharedHandle<FileEntry> _fileEntry;
|
||||||
SharedHandle<DiskWriter> diskWriter;
|
SharedHandle<DiskWriter> _diskWriter;
|
||||||
bool _open;
|
bool _open;
|
||||||
bool _directIO;
|
bool _directIO;
|
||||||
bool _needsFileAllocation;
|
bool _needsFileAllocation;
|
||||||
public:
|
public:
|
||||||
DiskWriterEntry(const SharedHandle<FileEntry>& fileEntry);
|
DiskWriterEntry(const SharedHandle<FileEntry>& fileEntry);
|
||||||
|
|
||||||
~DiskWriterEntry();
|
|
||||||
|
|
||||||
const std::string& getFilePath() const;
|
const std::string& getFilePath() const;
|
||||||
|
|
||||||
void initAndOpenFile();
|
void initAndOpenFile();
|
||||||
|
@ -76,14 +74,14 @@ public:
|
||||||
|
|
||||||
const SharedHandle<FileEntry>& getFileEntry() const
|
const SharedHandle<FileEntry>& getFileEntry() const
|
||||||
{
|
{
|
||||||
return fileEntry;
|
return _fileEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setDiskWriter(const SharedHandle<DiskWriter>& diskWriter);
|
void setDiskWriter(const SharedHandle<DiskWriter>& diskWriter);
|
||||||
|
|
||||||
const SharedHandle<DiskWriter>& getDiskWriter() const
|
const SharedHandle<DiskWriter>& getDiskWriter() const
|
||||||
{
|
{
|
||||||
return diskWriter;
|
return _diskWriter;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator<(const DiskWriterEntry& entry) const;
|
bool operator<(const DiskWriterEntry& entry) const;
|
||||||
|
@ -117,8 +115,8 @@ typedef std::vector<DiskWriterEntryHandle> DiskWriterEntries;
|
||||||
class MultiDiskAdaptor : public DiskAdaptor {
|
class MultiDiskAdaptor : public DiskAdaptor {
|
||||||
friend class MultiFileAllocationIterator;
|
friend class MultiFileAllocationIterator;
|
||||||
private:
|
private:
|
||||||
size_t pieceLength;
|
size_t _pieceLength;
|
||||||
DiskWriterEntries diskWriterEntries;
|
DiskWriterEntries _diskWriterEntries;
|
||||||
|
|
||||||
std::vector<SharedHandle<DiskWriterEntry> > _openedDiskWriterEntries;
|
std::vector<SharedHandle<DiskWriterEntry> > _openedDiskWriterEntries;
|
||||||
|
|
||||||
|
@ -140,8 +138,6 @@ private:
|
||||||
public:
|
public:
|
||||||
MultiDiskAdaptor();
|
MultiDiskAdaptor();
|
||||||
|
|
||||||
virtual ~MultiDiskAdaptor();
|
|
||||||
|
|
||||||
virtual void initAndOpenFile();
|
virtual void initAndOpenFile();
|
||||||
|
|
||||||
virtual void openFile();
|
virtual void openFile();
|
||||||
|
@ -171,12 +167,13 @@ public:
|
||||||
|
|
||||||
virtual bool isReadOnlyEnabled() const { return _readOnly; }
|
virtual bool isReadOnlyEnabled() const { return _readOnly; }
|
||||||
|
|
||||||
void setPieceLength(size_t pieceLength) {
|
void setPieceLength(size_t pieceLength)
|
||||||
this->pieceLength = pieceLength;
|
{
|
||||||
|
_pieceLength = pieceLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t getPieceLength() const {
|
size_t getPieceLength() const {
|
||||||
return pieceLength;
|
return _pieceLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
void allowDirectIO()
|
void allowDirectIO()
|
||||||
|
@ -193,7 +190,7 @@ public:
|
||||||
const std::vector<SharedHandle<DiskWriterEntry> >&
|
const std::vector<SharedHandle<DiskWriterEntry> >&
|
||||||
getDiskWriterEntries() const
|
getDiskWriterEntries() const
|
||||||
{
|
{
|
||||||
return diskWriterEntries;
|
return _diskWriterEntries;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -45,8 +45,8 @@ namespace aria2 {
|
||||||
|
|
||||||
MultiFileAllocationIterator::MultiFileAllocationIterator(MultiDiskAdaptor* diskAdaptor):
|
MultiFileAllocationIterator::MultiFileAllocationIterator(MultiDiskAdaptor* diskAdaptor):
|
||||||
_diskAdaptor(diskAdaptor),
|
_diskAdaptor(diskAdaptor),
|
||||||
_entries(_diskAdaptor->diskWriterEntries.begin(),
|
_entries(_diskAdaptor->_diskWriterEntries.begin(),
|
||||||
_diskAdaptor->diskWriterEntries.end()),
|
_diskAdaptor->_diskWriterEntries.end()),
|
||||||
_offset(0)
|
_offset(0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,6 @@ private:
|
||||||
std::deque<SharedHandle<DiskWriterEntry> > _entries;
|
std::deque<SharedHandle<DiskWriterEntry> > _entries;
|
||||||
SharedHandle<FileAllocationIterator> _fileAllocationIterator;
|
SharedHandle<FileAllocationIterator> _fileAllocationIterator;
|
||||||
off_t _offset;
|
off_t _offset;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MultiFileAllocationIterator(MultiDiskAdaptor* diskAdaptor);
|
MultiFileAllocationIterator(MultiDiskAdaptor* diskAdaptor);
|
||||||
|
|
||||||
|
@ -64,7 +63,8 @@ public:
|
||||||
|
|
||||||
virtual uint64_t getTotalLength();
|
virtual uint64_t getTotalLength();
|
||||||
|
|
||||||
const std::deque<SharedHandle<DiskWriterEntry> >& getDiskWriterEntries() const;
|
const std::deque<SharedHandle<DiskWriterEntry> >&
|
||||||
|
getDiskWriterEntries() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef SharedHandle<MultiFileAllocationIterator> MultiFileAllocationIteratorHandle;
|
typedef SharedHandle<MultiFileAllocationIterator> MultiFileAllocationIteratorHandle;
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include "Peer.h"
|
#include "Peer.h"
|
||||||
#include "MockPieceStorage.h"
|
#include "MockPieceStorage.h"
|
||||||
#include "DlAbortEx.h"
|
#include "DlAbortEx.h"
|
||||||
|
#include "FileEntry.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "Peer.h"
|
#include "Peer.h"
|
||||||
#include "MockPieceStorage.h"
|
#include "MockPieceStorage.h"
|
||||||
#include "DlAbortEx.h"
|
#include "DlAbortEx.h"
|
||||||
|
#include "FileEntry.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "Peer.h"
|
#include "Peer.h"
|
||||||
#include "MockPieceStorage.h"
|
#include "MockPieceStorage.h"
|
||||||
#include "DlAbortEx.h"
|
#include "DlAbortEx.h"
|
||||||
|
#include "FileEntry.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue