From 5a2f398eca68b2b0330ddcec2b222bf76875f82f Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Wed, 28 Nov 2007 14:22:28 +0000 Subject: 2007-11-28 Tatsuhiro Tsujikawa Added direct I/O support. The current implementation uses O_DIRECT, which is not posix standard and is tested on linux 2.6.21. Currently only file allocation uses direct I/O. * src/SingleFileAllocationIterator.{h, cc} * test/SingleFileAllocationIteratorTest.cc * src/MultiFileAllocationIterator.{h, cc} * test/MultiFileAllocationIteratorTest.cc * src/BinaryStream.h * src/DiskWriter.h * src/AbstractDiskWriter.{h, cc} * src/ByteArrayDiskWriter.h * src/DiskAdaptor.h * src/AbstractSingleDiskAdaptor.{h, cc} * src/MultiDiskAdaptor.{h, cc} * src/FileAllocationEntry.cc * src/Util.{h, cc} * src/OptionHandlerFactory.cc * src/prefs.h * src/version_usage.cc * src/option_processing.cc Moved FileAllocationMan::markCurrentFileAllocationEntryDone() to handleException. * src/MultiFileAllocationIterator.cc Added EINTR handling * src/SocketCore.cc --- src/MultiFileAllocationIterator.h | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) (limited to 'src/MultiFileAllocationIterator.h') diff --git a/src/MultiFileAllocationIterator.h b/src/MultiFileAllocationIterator.h index bbed59b6..a9b4aa8a 100644 --- a/src/MultiFileAllocationIterator.h +++ b/src/MultiFileAllocationIterator.h @@ -38,38 +38,35 @@ #include "FileAllocationIterator.h" class MultiDiskAdaptor; -class FileEntry; -typedef SharedHandle FileEntryHandle; -typedef deque FileEntries; +class DiskWriterEntry; +typedef SharedHandle DiskWriterEntryHandle; +typedef deque DiskWriterEntries; +class SingleFileAllocationIterator; +typedef SharedHandle SingleFileAllocationIteratorHandle; class MultiFileAllocationIterator:public FileAllocationIterator { private: MultiDiskAdaptor* _diskAdaptor; - FileEntries _entries; - FileEntryHandle _currentEntry; + DiskWriterEntries _entries; + SingleFileAllocationIteratorHandle _fileAllocationIterator; int64_t _offset; - FileEntries makeFileEntries(const FileEntries& srcEntries, int32_t pieceLength) const; + DiskWriterEntries makeDiskWriterEntries(const DiskWriterEntries& srcEntries, int32_t pieceLength) const; public: MultiFileAllocationIterator(MultiDiskAdaptor* diskAdaptor); virtual ~MultiFileAllocationIterator(); - void prepareNextEntry(); - virtual void allocateChunk(); virtual bool finished(); - virtual int64_t getCurrentLength() - { - return _offset; - } + virtual int64_t getCurrentLength(); virtual int64_t getTotalLength(); - const FileEntries& getFileEntries() const; + const DiskWriterEntries& getDiskWriterEntries() const; }; typedef SharedHandle MultiFileAllocationIteratorHandle; -- cgit