mirror of https://github.com/aria2/aria2
Removed use of O_DIRECT because it performs bad.
parent
5c4a52ad74
commit
5bbfa742fc
|
@ -58,8 +58,7 @@ namespace aria2 {
|
||||||
AbstractDiskWriter::AbstractDiskWriter(const std::string& filename)
|
AbstractDiskWriter::AbstractDiskWriter(const std::string& filename)
|
||||||
: filename_(filename),
|
: filename_(filename),
|
||||||
fd_(-1),
|
fd_(-1),
|
||||||
readOnly_(false),
|
readOnly_(false)
|
||||||
directIOAllowed_(false)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
AbstractDiskWriter::~AbstractDiskWriter()
|
AbstractDiskWriter::~AbstractDiskWriter()
|
||||||
|
@ -281,26 +280,6 @@ uint64_t AbstractDiskWriter::size()
|
||||||
return File(filename_).size();
|
return File(filename_).size();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractDiskWriter::enableDirectIO()
|
|
||||||
{
|
|
||||||
#ifdef ENABLE_DIRECT_IO
|
|
||||||
if(directIOAllowed_) {
|
|
||||||
int flg;
|
|
||||||
while((flg = fcntl(fd_, F_GETFL)) == -1 && errno == EINTR);
|
|
||||||
while(fcntl(fd_, F_SETFL, flg|O_DIRECT) == -1 && errno == EINTR);
|
|
||||||
}
|
|
||||||
#endif // ENABLE_DIRECT_IO
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractDiskWriter::disableDirectIO()
|
|
||||||
{
|
|
||||||
#ifdef ENABLE_DIRECT_IO
|
|
||||||
int flg;
|
|
||||||
while((flg = fcntl(fd_, F_GETFL)) == -1 && errno == EINTR);
|
|
||||||
while(fcntl(fd_, F_SETFL, flg&(~O_DIRECT)) == -1 && errno == EINTR);
|
|
||||||
#endif // ENABLE_DIRECT_IO
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractDiskWriter::enableReadOnly()
|
void AbstractDiskWriter::enableReadOnly()
|
||||||
{
|
{
|
||||||
readOnly_ = true;
|
readOnly_ = true;
|
||||||
|
|
|
@ -47,8 +47,6 @@ private:
|
||||||
|
|
||||||
bool readOnly_;
|
bool readOnly_;
|
||||||
|
|
||||||
bool directIOAllowed_;
|
|
||||||
|
|
||||||
ssize_t writeDataInternal(const unsigned char* data, size_t len);
|
ssize_t writeDataInternal(const unsigned char* data, size_t len);
|
||||||
ssize_t readDataInternal(unsigned char* data, size_t len);
|
ssize_t readDataInternal(unsigned char* data, size_t len);
|
||||||
|
|
||||||
|
@ -76,12 +74,6 @@ public:
|
||||||
|
|
||||||
virtual uint64_t size();
|
virtual uint64_t size();
|
||||||
|
|
||||||
virtual void enableDirectIO();
|
|
||||||
|
|
||||||
virtual void disableDirectIO();
|
|
||||||
|
|
||||||
virtual void allowDirectIO() { directIOAllowed_ = true; }
|
|
||||||
|
|
||||||
virtual void enableReadOnly();
|
virtual void enableReadOnly();
|
||||||
|
|
||||||
virtual void disableReadOnly();
|
virtual void disableReadOnly();
|
||||||
|
|
|
@ -114,16 +114,6 @@ AbstractSingleDiskAdaptor::fileAllocationIterator()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::enableDirectIO()
|
|
||||||
{
|
|
||||||
diskWriter_->enableDirectIO();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::disableDirectIO()
|
|
||||||
{
|
|
||||||
diskWriter_->disableDirectIO();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractSingleDiskAdaptor::enableReadOnly()
|
void AbstractSingleDiskAdaptor::enableReadOnly()
|
||||||
{
|
{
|
||||||
diskWriter_->enableReadOnly();
|
diskWriter_->enableReadOnly();
|
||||||
|
|
|
@ -73,10 +73,6 @@ public:
|
||||||
|
|
||||||
virtual SharedHandle<FileAllocationIterator> fileAllocationIterator();
|
virtual SharedHandle<FileAllocationIterator> fileAllocationIterator();
|
||||||
|
|
||||||
virtual void enableDirectIO();
|
|
||||||
|
|
||||||
virtual void disableDirectIO();
|
|
||||||
|
|
||||||
// Make sure that DiskWriter is set before calling this function.
|
// Make sure that DiskWriter is set before calling this function.
|
||||||
virtual void enableReadOnly();
|
virtual void enableReadOnly();
|
||||||
|
|
||||||
|
|
|
@ -58,10 +58,6 @@ public:
|
||||||
// Allocates given length bytes of disk space from given offset. The
|
// Allocates given length bytes of disk space from given offset. The
|
||||||
// default implementation does nothing.
|
// default implementation does nothing.
|
||||||
virtual void allocate(off_t offset, uint64_t length) {}
|
virtual void allocate(off_t offset, uint64_t length) {}
|
||||||
|
|
||||||
virtual void enableDirectIO() = 0;
|
|
||||||
|
|
||||||
virtual void disableDirectIO() = 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef SharedHandle<BinaryStream> BinaryStreamHandle;
|
typedef SharedHandle<BinaryStream> BinaryStreamHandle;
|
||||||
|
|
|
@ -62,10 +62,6 @@ public:
|
||||||
|
|
||||||
virtual uint64_t size();
|
virtual uint64_t size();
|
||||||
|
|
||||||
virtual void enableDirectIO() {}
|
|
||||||
|
|
||||||
virtual void disableDirectIO() {}
|
|
||||||
|
|
||||||
void setString(const std::string& s);
|
void setString(const std::string& s);
|
||||||
|
|
||||||
std::string getString() const;
|
std::string getString() const;
|
||||||
|
|
|
@ -94,10 +94,6 @@ void CheckIntegrityEntry::proceedFileAllocation
|
||||||
} else {
|
} else {
|
||||||
entry->prepareForNextAction(commands, e);
|
entry->prepareForNextAction(commands, e);
|
||||||
}
|
}
|
||||||
// Disable directIO when fallocation() is going to be used.
|
|
||||||
if(getRequestGroup()->getOption()->get(PREF_FILE_ALLOCATION) == V_FALLOC) {
|
|
||||||
entry->disableDirectIO();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckIntegrityEntry::setValidator
|
void CheckIntegrityEntry::setValidator
|
||||||
|
|
|
@ -610,10 +610,6 @@ void DefaultPieceStorage::initStorage()
|
||||||
|
|
||||||
DiskWriterHandle writer =
|
DiskWriterHandle writer =
|
||||||
diskWriterFactory_->newDiskWriter(directDiskAdaptor->getFilePath());
|
diskWriterFactory_->newDiskWriter(directDiskAdaptor->getFilePath());
|
||||||
if(option_->getAsBool(PREF_ENABLE_DIRECT_IO)) {
|
|
||||||
writer->allowDirectIO();
|
|
||||||
}
|
|
||||||
|
|
||||||
directDiskAdaptor->setDiskWriter(writer);
|
directDiskAdaptor->setDiskWriter(writer);
|
||||||
diskAdaptor_ = directDiskAdaptor;
|
diskAdaptor_ = directDiskAdaptor;
|
||||||
} else {
|
} else {
|
||||||
|
@ -621,9 +617,6 @@ void DefaultPieceStorage::initStorage()
|
||||||
MultiDiskAdaptorHandle multiDiskAdaptor(new MultiDiskAdaptor());
|
MultiDiskAdaptorHandle multiDiskAdaptor(new MultiDiskAdaptor());
|
||||||
multiDiskAdaptor->setFileEntries(downloadContext_->getFileEntries().begin(),
|
multiDiskAdaptor->setFileEntries(downloadContext_->getFileEntries().begin(),
|
||||||
downloadContext_->getFileEntries().end());
|
downloadContext_->getFileEntries().end());
|
||||||
if(option_->getAsBool(PREF_ENABLE_DIRECT_IO)) {
|
|
||||||
multiDiskAdaptor->allowDirectIO();
|
|
||||||
}
|
|
||||||
multiDiskAdaptor->setPieceLength(downloadContext_->getPieceLength());
|
multiDiskAdaptor->setPieceLength(downloadContext_->getPieceLength());
|
||||||
multiDiskAdaptor->setMaxOpenFiles
|
multiDiskAdaptor->setMaxOpenFiles
|
||||||
(option_->getAsInt(PREF_BT_MAX_OPEN_FILES));
|
(option_->getAsInt(PREF_BT_MAX_OPEN_FILES));
|
||||||
|
|
|
@ -81,10 +81,6 @@ public:
|
||||||
|
|
||||||
virtual SharedHandle<FileAllocationIterator> fileAllocationIterator() = 0;
|
virtual SharedHandle<FileAllocationIterator> fileAllocationIterator() = 0;
|
||||||
|
|
||||||
virtual void enableDirectIO() {}
|
|
||||||
|
|
||||||
virtual void disableDirectIO() {}
|
|
||||||
|
|
||||||
virtual void enableReadOnly() {}
|
virtual void enableReadOnly() {}
|
||||||
|
|
||||||
virtual void disableReadOnly() {}
|
virtual void disableReadOnly() {}
|
||||||
|
|
|
@ -70,12 +70,6 @@ public:
|
||||||
// Returns file length
|
// Returns file length
|
||||||
virtual uint64_t size() = 0;
|
virtual uint64_t size() = 0;
|
||||||
|
|
||||||
virtual void enableDirectIO() = 0;
|
|
||||||
|
|
||||||
virtual void disableDirectIO() = 0;
|
|
||||||
|
|
||||||
virtual void allowDirectIO() {}
|
|
||||||
|
|
||||||
// Enables read-only mode. After this call, openExistingFile() opens
|
// Enables read-only mode. After this call, openExistingFile() opens
|
||||||
// file in read-only mode. This is an optional functionality. The
|
// file in read-only mode. This is an optional functionality. The
|
||||||
// default implementation is do nothing.
|
// default implementation is do nothing.
|
||||||
|
|
|
@ -44,14 +44,10 @@ namespace aria2 {
|
||||||
FileAllocationEntry::FileAllocationEntry(RequestGroup* requestGroup, Command* nextCommand):
|
FileAllocationEntry::FileAllocationEntry(RequestGroup* requestGroup, Command* nextCommand):
|
||||||
RequestGroupEntry(requestGroup, nextCommand),
|
RequestGroupEntry(requestGroup, nextCommand),
|
||||||
fileAllocationIterator_(requestGroup->getPieceStorage()->getDiskAdaptor()->fileAllocationIterator())
|
fileAllocationIterator_(requestGroup->getPieceStorage()->getDiskAdaptor()->fileAllocationIterator())
|
||||||
{
|
{}
|
||||||
getRequestGroup()->getPieceStorage()->getDiskAdaptor()->enableDirectIO();
|
|
||||||
}
|
|
||||||
|
|
||||||
FileAllocationEntry:: ~FileAllocationEntry()
|
FileAllocationEntry:: ~FileAllocationEntry()
|
||||||
{
|
{}
|
||||||
getRequestGroup()->getPieceStorage()->getDiskAdaptor()->disableDirectIO();
|
|
||||||
}
|
|
||||||
|
|
||||||
off_t FileAllocationEntry::getCurrentLength()
|
off_t FileAllocationEntry::getCurrentLength()
|
||||||
{
|
{
|
||||||
|
@ -73,9 +69,4 @@ void FileAllocationEntry::allocateChunk()
|
||||||
fileAllocationIterator_->allocateChunk();
|
fileAllocationIterator_->allocateChunk();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileAllocationEntry::disableDirectIO()
|
|
||||||
{
|
|
||||||
getRequestGroup()->getPieceStorage()->getDiskAdaptor()->disableDirectIO();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
|
@ -64,8 +64,6 @@ public:
|
||||||
|
|
||||||
virtual void prepareForNextAction(std::vector<Command*>& commands,
|
virtual void prepareForNextAction(std::vector<Command*>& commands,
|
||||||
DownloadEngine* e) = 0;
|
DownloadEngine* e) = 0;
|
||||||
|
|
||||||
void disableDirectIO();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
|
@ -61,11 +61,7 @@ IteratableChecksumValidator::IteratableChecksumValidator
|
||||||
|
|
||||||
IteratableChecksumValidator::~IteratableChecksumValidator()
|
IteratableChecksumValidator::~IteratableChecksumValidator()
|
||||||
{
|
{
|
||||||
#ifdef HAVE_POSIX_MEMALIGN
|
|
||||||
free(buffer_);
|
|
||||||
#else // !HAVE_POSIX_MEMALIGN
|
|
||||||
delete [] buffer_;
|
delete [] buffer_;
|
||||||
#endif // !HAVE_POSIX_MEMALIGN
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IteratableChecksumValidator::validateChunk()
|
void IteratableChecksumValidator::validateChunk()
|
||||||
|
@ -91,7 +87,6 @@ void IteratableChecksumValidator::validateChunk()
|
||||||
bool IteratableChecksumValidator::finished() const
|
bool IteratableChecksumValidator::finished() const
|
||||||
{
|
{
|
||||||
if((uint64_t)currentOffset_ >= dctx_->getTotalLength()) {
|
if((uint64_t)currentOffset_ >= dctx_->getTotalLength()) {
|
||||||
pieceStorage_->getDiskAdaptor()->disableDirectIO();
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
@ -105,15 +100,8 @@ uint64_t IteratableChecksumValidator::getTotalLength() const
|
||||||
|
|
||||||
void IteratableChecksumValidator::init()
|
void IteratableChecksumValidator::init()
|
||||||
{
|
{
|
||||||
#ifdef HAVE_POSIX_MEMALIGN
|
|
||||||
free(buffer_);
|
|
||||||
buffer_ = reinterpret_cast<unsigned char*>
|
|
||||||
(util::allocateAlignedMemory(ALIGNMENT, BUFSIZE));
|
|
||||||
#else // !HAVE_POSIX_MEMALIGN
|
|
||||||
delete [] buffer_;
|
delete [] buffer_;
|
||||||
buffer_ = new unsigned char[BUFSIZE];
|
buffer_ = new unsigned char[BUFSIZE];
|
||||||
#endif // !HAVE_POSIX_MEMALIGN
|
|
||||||
pieceStorage_->getDiskAdaptor()->enableDirectIO();
|
|
||||||
currentOffset_ = 0;
|
currentOffset_ = 0;
|
||||||
ctx_ = MessageDigest::create(dctx_->getChecksumHashAlgo());
|
ctx_ = MessageDigest::create(dctx_->getChecksumHashAlgo());
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,11 +69,7 @@ IteratableChunkChecksumValidator::IteratableChunkChecksumValidator
|
||||||
|
|
||||||
IteratableChunkChecksumValidator::~IteratableChunkChecksumValidator()
|
IteratableChunkChecksumValidator::~IteratableChunkChecksumValidator()
|
||||||
{
|
{
|
||||||
#ifdef HAVE_POSIX_MEMALIGN
|
|
||||||
free(buffer_);
|
|
||||||
#else // !HAVE_POSIX_MEMALIGN
|
|
||||||
delete [] buffer_;
|
delete [] buffer_;
|
||||||
#endif // !HAVE_POSIX_MEMALIGN
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -124,17 +120,8 @@ std::string IteratableChunkChecksumValidator::calculateActualChecksum()
|
||||||
|
|
||||||
void IteratableChunkChecksumValidator::init()
|
void IteratableChunkChecksumValidator::init()
|
||||||
{
|
{
|
||||||
#ifdef HAVE_POSIX_MEMALIGN
|
|
||||||
free(buffer_);
|
|
||||||
buffer_ = reinterpret_cast<unsigned char*>
|
|
||||||
(util::allocateAlignedMemory(ALIGNMENT, BUFSIZE));
|
|
||||||
#else // !HAVE_POSIX_MEMALIGN
|
|
||||||
delete [] buffer_;
|
delete [] buffer_;
|
||||||
buffer_ = new unsigned char[BUFSIZE];
|
buffer_ = new unsigned char[BUFSIZE];
|
||||||
#endif // !HAVE_POSIX_MEMALIGN
|
|
||||||
if(dctx_->getFileEntries().size() == 1) {
|
|
||||||
pieceStorage_->getDiskAdaptor()->enableDirectIO();
|
|
||||||
}
|
|
||||||
ctx_ = MessageDigest::create(dctx_->getPieceHashAlgo());
|
ctx_ = MessageDigest::create(dctx_->getPieceHashAlgo());
|
||||||
bitfield_->clearAllBit();
|
bitfield_->clearAllBit();
|
||||||
currentIndex_ = 0;
|
currentIndex_ = 0;
|
||||||
|
@ -176,7 +163,6 @@ std::string IteratableChunkChecksumValidator::digest(off_t offset, size_t length
|
||||||
bool IteratableChunkChecksumValidator::finished() const
|
bool IteratableChunkChecksumValidator::finished() const
|
||||||
{
|
{
|
||||||
if(currentIndex_ >= dctx_->getNumPieces()) {
|
if(currentIndex_ >= dctx_->getNumPieces()) {
|
||||||
pieceStorage_->getDiskAdaptor()->disableDirectIO();
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -56,7 +56,6 @@ namespace aria2 {
|
||||||
DiskWriterEntry::DiskWriterEntry(const SharedHandle<FileEntry>& fileEntry)
|
DiskWriterEntry::DiskWriterEntry(const SharedHandle<FileEntry>& fileEntry)
|
||||||
: fileEntry_(fileEntry),
|
: fileEntry_(fileEntry),
|
||||||
open_(false),
|
open_(false),
|
||||||
directIO_(false),
|
|
||||||
needsFileAllocation_(false)
|
needsFileAllocation_(false)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -69,9 +68,6 @@ void DiskWriterEntry::initAndOpenFile()
|
||||||
{
|
{
|
||||||
if(diskWriter_) {
|
if(diskWriter_) {
|
||||||
diskWriter_->initAndOpenFile(fileEntry_->getLength());
|
diskWriter_->initAndOpenFile(fileEntry_->getLength());
|
||||||
if(directIO_) {
|
|
||||||
diskWriter_->enableDirectIO();
|
|
||||||
}
|
|
||||||
open_ = true;
|
open_ = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,9 +76,6 @@ void DiskWriterEntry::openFile()
|
||||||
{
|
{
|
||||||
if(diskWriter_) {
|
if(diskWriter_) {
|
||||||
diskWriter_->openFile(fileEntry_->getLength());
|
diskWriter_->openFile(fileEntry_->getLength());
|
||||||
if(directIO_) {
|
|
||||||
diskWriter_->enableDirectIO();
|
|
||||||
}
|
|
||||||
open_ = true;
|
open_ = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -91,9 +84,6 @@ void DiskWriterEntry::openExistingFile()
|
||||||
{
|
{
|
||||||
if(diskWriter_) {
|
if(diskWriter_) {
|
||||||
diskWriter_->openExistingFile(fileEntry_->getLength());
|
diskWriter_->openExistingFile(fileEntry_->getLength());
|
||||||
if(directIO_) {
|
|
||||||
diskWriter_->enableDirectIO();
|
|
||||||
}
|
|
||||||
open_ = true;
|
open_ = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -126,26 +116,9 @@ bool DiskWriterEntry::operator<(const DiskWriterEntry& entry) const
|
||||||
return *fileEntry_ < *entry.fileEntry_;
|
return *fileEntry_ < *entry.fileEntry_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiskWriterEntry::enableDirectIO()
|
|
||||||
{
|
|
||||||
if(open_) {
|
|
||||||
diskWriter_->enableDirectIO();
|
|
||||||
}
|
|
||||||
directIO_ = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DiskWriterEntry::disableDirectIO()
|
|
||||||
{
|
|
||||||
if(open_) {
|
|
||||||
diskWriter_->disableDirectIO();
|
|
||||||
}
|
|
||||||
directIO_ = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
MultiDiskAdaptor::MultiDiskAdaptor()
|
MultiDiskAdaptor::MultiDiskAdaptor()
|
||||||
: pieceLength_(0),
|
: pieceLength_(0),
|
||||||
maxOpenFiles_(DEFAULT_MAX_OPEN_FILES),
|
maxOpenFiles_(DEFAULT_MAX_OPEN_FILES),
|
||||||
directIOAllowed_(false),
|
|
||||||
readOnly_(false)
|
readOnly_(false)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -253,9 +226,6 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
|
||||||
A2_LOG_DEBUG(fmt("Creating DiskWriter for filename=%s",
|
A2_LOG_DEBUG(fmt("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()));
|
||||||
if(directIOAllowed_) {
|
|
||||||
(*i)->getDiskWriter()->allowDirectIO();
|
|
||||||
}
|
|
||||||
if(readOnly_) {
|
if(readOnly_) {
|
||||||
(*i)->getDiskWriter()->enableReadOnly();
|
(*i)->getDiskWriter()->enableReadOnly();
|
||||||
}
|
}
|
||||||
|
@ -474,18 +444,6 @@ SharedHandle<FileAllocationIterator> MultiDiskAdaptor::fileAllocationIterator()
|
||||||
(new MultiFileAllocationIterator(this));
|
(new MultiFileAllocationIterator(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiDiskAdaptor::enableDirectIO()
|
|
||||||
{
|
|
||||||
std::for_each(diskWriterEntries_.begin(), diskWriterEntries_.end(),
|
|
||||||
mem_fun_sh(&DiskWriterEntry::enableDirectIO));
|
|
||||||
}
|
|
||||||
|
|
||||||
void MultiDiskAdaptor::disableDirectIO()
|
|
||||||
{
|
|
||||||
std::for_each(diskWriterEntries_.begin(), diskWriterEntries_.end(),
|
|
||||||
mem_fun_sh(&DiskWriterEntry::disableDirectIO));
|
|
||||||
}
|
|
||||||
|
|
||||||
void MultiDiskAdaptor::enableReadOnly()
|
void MultiDiskAdaptor::enableReadOnly()
|
||||||
{
|
{
|
||||||
readOnly_ = true;
|
readOnly_ = true;
|
||||||
|
|
|
@ -48,7 +48,6 @@ private:
|
||||||
SharedHandle<FileEntry> fileEntry_;
|
SharedHandle<FileEntry> fileEntry_;
|
||||||
SharedHandle<DiskWriter> diskWriter_;
|
SharedHandle<DiskWriter> diskWriter_;
|
||||||
bool open_;
|
bool open_;
|
||||||
bool directIO_;
|
|
||||||
bool needsFileAllocation_;
|
bool needsFileAllocation_;
|
||||||
public:
|
public:
|
||||||
DiskWriterEntry(const SharedHandle<FileEntry>& fileEntry);
|
DiskWriterEntry(const SharedHandle<FileEntry>& fileEntry);
|
||||||
|
@ -86,16 +85,6 @@ public:
|
||||||
|
|
||||||
bool operator<(const DiskWriterEntry& entry) const;
|
bool operator<(const DiskWriterEntry& entry) const;
|
||||||
|
|
||||||
// Set directIO_ to true.
|
|
||||||
// Additionally, if diskWriter is opened, diskWriter->enableDirectIO() is
|
|
||||||
// called.
|
|
||||||
void enableDirectIO();
|
|
||||||
|
|
||||||
// Set directIO_ to false.
|
|
||||||
// Additionally, if diskWriter is opened, diskWriter->disableDirectIO() is
|
|
||||||
// called.
|
|
||||||
void disableDirectIO();
|
|
||||||
|
|
||||||
bool needsFileAllocation() const
|
bool needsFileAllocation() const
|
||||||
{
|
{
|
||||||
return needsFileAllocation_;
|
return needsFileAllocation_;
|
||||||
|
@ -122,8 +111,6 @@ private:
|
||||||
|
|
||||||
size_t maxOpenFiles_;
|
size_t maxOpenFiles_;
|
||||||
|
|
||||||
bool directIOAllowed_;
|
|
||||||
|
|
||||||
bool readOnly_;
|
bool readOnly_;
|
||||||
|
|
||||||
void resetDiskWriterEntries();
|
void resetDiskWriterEntries();
|
||||||
|
@ -156,10 +143,6 @@ public:
|
||||||
|
|
||||||
virtual SharedHandle<FileAllocationIterator> fileAllocationIterator();
|
virtual SharedHandle<FileAllocationIterator> fileAllocationIterator();
|
||||||
|
|
||||||
virtual void enableDirectIO();
|
|
||||||
|
|
||||||
virtual void disableDirectIO();
|
|
||||||
|
|
||||||
virtual void enableReadOnly();
|
virtual void enableReadOnly();
|
||||||
|
|
||||||
virtual void disableReadOnly();
|
virtual void disableReadOnly();
|
||||||
|
@ -175,11 +158,6 @@ public:
|
||||||
return pieceLength_;
|
return pieceLength_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void allowDirectIO()
|
|
||||||
{
|
|
||||||
directIOAllowed_ = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void cutTrailingGarbage();
|
virtual void cutTrailingGarbage();
|
||||||
|
|
||||||
void setMaxOpenFiles(size_t maxOpenFiles);
|
void setMaxOpenFiles(size_t maxOpenFiles);
|
||||||
|
|
|
@ -56,11 +56,7 @@ SingleFileAllocationIterator::SingleFileAllocationIterator
|
||||||
offset_(offset),
|
offset_(offset),
|
||||||
totalLength_(totalLength),
|
totalLength_(totalLength),
|
||||||
buffer_(0)
|
buffer_(0)
|
||||||
{
|
{}
|
||||||
if(offset_%ALIGNMENT != 0) {
|
|
||||||
stream_->disableDirectIO();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SingleFileAllocationIterator::~SingleFileAllocationIterator()
|
SingleFileAllocationIterator::~SingleFileAllocationIterator()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue