diff options
Diffstat (limited to 'qpid/cpp/src/qpid/linearstore/jrnl/LinearFileController.h')
-rw-r--r-- | qpid/cpp/src/qpid/linearstore/jrnl/LinearFileController.h | 57 |
1 files changed, 35 insertions, 22 deletions
diff --git a/qpid/cpp/src/qpid/linearstore/jrnl/LinearFileController.h b/qpid/cpp/src/qpid/linearstore/jrnl/LinearFileController.h index ff880a2647..7721685196 100644 --- a/qpid/cpp/src/qpid/linearstore/jrnl/LinearFileController.h +++ b/qpid/cpp/src/qpid/linearstore/jrnl/LinearFileController.h @@ -23,14 +23,16 @@ #define QPID_LINEARSTORE_LINEARFILECONTROLLER_H_ #include <deque> -#include "qpid/linearstore/jrnl/aio.h" #include "qpid/linearstore/jrnl/AtomicCounter.h" #include "qpid/linearstore/jrnl/EmptyFilePoolTypes.h" -#include "qpid/linearstore/jrnl/smutex.h" -struct file_hdr_t; +// libaio forward declares +typedef struct io_context* io_context_t; +typedef struct iocb aio_cb; + namespace qpid { namespace qls_jrnl { + class EmptyFilePool; class jcntl; class JournalFile; @@ -41,35 +43,44 @@ protected: typedef std::deque<JournalFile*> JournalFileList_t; typedef JournalFileList_t::iterator JournalFileListItr_t; - jcntl& jcntlRef; - std::string journalDirectory; - EmptyFilePool* emptyFilePoolPtr; - JournalFile* currentJournalFilePtr; - AtomicCounter<uint64_t> fileSeqCounter; - AtomicCounter<uint64_t> recordIdCounter; + jcntl& jcntlRef_; + std::string journalDirectory_; + EmptyFilePool* emptyFilePoolPtr_; + JournalFile* currentJournalFilePtr_; + AtomicCounter<uint64_t> fileSeqCounter_; + AtomicCounter<uint64_t> recordIdCounter_; - JournalFileList_t journalFileList; - smutex journalFileListMutex; + JournalFileList_t journalFileList_; + smutex journalFileListMutex_; public: - LinearFileController(jcntl& jcntlRef_); + LinearFileController(jcntl& jcntlRef); virtual ~LinearFileController(); - void initialize(const std::string& journalDirectory_, EmptyFilePool* emptyFilePoolPtr_); + void initialize(const std::string& journalDirectory, + EmptyFilePool* emptyFilePoolPtr, + uint64_t initialFileNumberVal); void finalize(); - void pullEmptyFileFromEfp(); - void purgeFilesToEfp(); + void addJournalFile(const std::string& fileName, + const uint64_t fileNumber, + const uint32_t fileSize_kib, + const uint32_t completedDblkCount); + efpDataSize_kib_t dataSize_kib() const; - efpFileSize_kib_t fileSize_kib() const; efpDataSize_sblks_t dataSize_sblks() const; + efpFileSize_kib_t fileSize_kib() const; efpFileSize_sblks_t fileSize_sblks() const; - uint64_t getNextRecordId(); + void pullEmptyFileFromEfp(); + void purgeFilesToEfp(); - // Functions for manipulating counts of non-current JournalFile instances in journalFileList + // Functions for manipulating counts of non-current JournalFile instances in journalFileList_ + uint32_t getEnqueuedRecordCount(const efpFileCount_t fileSeqNumber); + uint32_t incrEnqueuedRecordCount(const efpFileCount_t fileSeqNumber); uint32_t decrEnqueuedRecordCount(const efpFileCount_t fileSeqNumber); - uint32_t addWriteCompletedDblkCount(const efpFileCount_t fileSeqNumber, const uint32_t a); + uint32_t addWriteCompletedDblkCount(const efpFileCount_t fileSeqNumber, + const uint32_t a); uint16_t decrOutstandingAioOperationCount(const efpFileCount_t fileSeqNumber); // Pass-through functions for JournalFile class @@ -106,18 +117,20 @@ public: bool isFull() const; // True if all possible dblks have been submitted (but may not yet have returned from AIO) bool isFullAndComplete() const; // True if all submitted dblks have returned from AIO u_int32_t getOutstandingAioDblks() const; // Dblks still to be written - bool getNextFile() const; // True when next file is needed + bool needNextFile() const; // True when next file is needed // Debug aid const std::string status(const uint8_t indentDepth) const; protected: - bool checkCurrentJournalFileValid() const; void assertCurrentJournalFileValid(const char* const functionName) const; - JournalFile* find(const efpFileCount_t fileSeqNumber); // NOT THREAD SAFE - use under external lock + bool checkCurrentJournalFileValid() const; + JournalFile* find(const efpFileCount_t fileSeqNumber); uint64_t getNextFileSeqNum(); }; +typedef void (LinearFileController::*lfcAddJournalFileFn)(const std::string&, const uint64_t, const uint32_t, const uint32_t); + }} // namespace qpid::qls_jrnl #endif // QPID_LINEARSTORE_LINEARFILECONTROLLER_H_ |