diff options
| author | Kim van der Riet <kpvdr@apache.org> | 2014-07-30 14:24:55 +0000 |
|---|---|---|
| committer | Kim van der Riet <kpvdr@apache.org> | 2014-07-30 14:24:55 +0000 |
| commit | e99e166a8e50f4a1eeb5034c0aeff04f0db8344b (patch) | |
| tree | 4bbdd02b3c10edf8c5829ce8187bda85fc1a3130 /qpid/cpp/src | |
| parent | 6fae60887199cdcd6b2db87996eb838b519cffcf (diff) | |
| download | qpid-python-e99e166a8e50f4a1eeb5034c0aeff04f0db8344b.tar.gz | |
QPID-5924 [linearstore] Qpidd Will Not Start with Large Number of Queues
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1614665 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
5 files changed, 10 insertions, 1 deletions
diff --git a/qpid/cpp/src/qpid/linearstore/journal/JournalFile.cpp b/qpid/cpp/src/qpid/linearstore/journal/JournalFile.cpp index f4bf88647e..ed03a8413f 100644 --- a/qpid/cpp/src/qpid/linearstore/journal/JournalFile.cpp +++ b/qpid/cpp/src/qpid/linearstore/journal/JournalFile.cpp @@ -169,6 +169,7 @@ void JournalFile::asyncFileHeaderWrite(io_context_t ioContextPtr, queueName_.size(), queueName_.data()); const std::size_t wr_size = QLS_JRNL_FHDR_RES_SIZE_SBLKS * QLS_SBLK_SIZE_KIB * 1024; + if (!isOpen()) open(); aio::prep_pwrite(aioControlBlockPtr_, fileHandle_, (void*)fileHeaderBasePtr_, wr_size, 0UL); if (!aio::is_aligned(aioControlBlockPtr_->u.c.buf, QLS_AIO_ALIGN_BOUNDARY_BYTES)) { std::ostringstream oss; @@ -190,6 +191,7 @@ void JournalFile::asyncPageWrite(io_context_t ioContextPtr, uint32_t dataSize_dblks) { const std::size_t wr_size = dataSize_dblks * QLS_DBLK_SIZE_BYTES; const uint64_t foffs = submittedDblkCount_.get() * QLS_DBLK_SIZE_BYTES; + if (!isOpen()) open(); aio::prep_pwrite_2(aioControlBlockPtr, fileHandle_, data, wr_size, foffs); if (!aio::is_aligned(aioControlBlockPtr->u.c.buf, QLS_AIO_ALIGN_BOUNDARY_BYTES)) { std::ostringstream oss; diff --git a/qpid/cpp/src/qpid/linearstore/journal/LinearFileController.cpp b/qpid/cpp/src/qpid/linearstore/journal/LinearFileController.cpp index 7984109a3a..8d43aff8c5 100644 --- a/qpid/cpp/src/qpid/linearstore/journal/LinearFileController.cpp +++ b/qpid/cpp/src/qpid/linearstore/journal/LinearFileController.cpp @@ -73,7 +73,6 @@ void LinearFileController::addJournalFile(JournalFile* journalFilePtr, } if (makeCurrentFlag) { currentJournalFilePtr_ = journalFilePtr; - currentJournalFilePtr_->open(); } } diff --git a/qpid/cpp/src/qpid/linearstore/journal/RecoveryManager.cpp b/qpid/cpp/src/qpid/linearstore/journal/RecoveryManager.cpp index de91796971..47aa2f634e 100644 --- a/qpid/cpp/src/qpid/linearstore/journal/RecoveryManager.cpp +++ b/qpid/cpp/src/qpid/linearstore/journal/RecoveryManager.cpp @@ -284,6 +284,12 @@ bool RecoveryManager::readNextRemainingRecord(void** const dataPtrPtr, return true; } +void RecoveryManager::recoveryComplete() { + if(inFileStream_.is_open()) { + inFileStream_.close(); + } +} + void RecoveryManager::setLinearFileControllerJournals(lfcAddJournalFileFn fnPtr, LinearFileController* lfcPtr) { if (journalEmptyFlag_) { diff --git a/qpid/cpp/src/qpid/linearstore/journal/RecoveryManager.h b/qpid/cpp/src/qpid/linearstore/journal/RecoveryManager.h index b668e1e2ea..eeda4630f3 100644 --- a/qpid/cpp/src/qpid/linearstore/journal/RecoveryManager.h +++ b/qpid/cpp/src/qpid/linearstore/journal/RecoveryManager.h @@ -122,6 +122,7 @@ public: bool& external, data_tok* const dtokp, bool ignore_pending_txns); + void recoveryComplete(); void setLinearFileControllerJournals(lfcAddJournalFileFn fnPtr, LinearFileController* lfcPtr); std::string toString(const std::string& jid); diff --git a/qpid/cpp/src/qpid/linearstore/journal/jcntl.cpp b/qpid/cpp/src/qpid/linearstore/journal/jcntl.cpp index 5da85fef1a..902b22dc71 100644 --- a/qpid/cpp/src/qpid/linearstore/journal/jcntl.cpp +++ b/qpid/cpp/src/qpid/linearstore/journal/jcntl.cpp @@ -137,6 +137,7 @@ jcntl::recover_complete() { if (!_readonly_flag) throw jexception(jerrno::JERR_JCNTL_NOTRECOVERED, "jcntl", "recover_complete"); + _recoveryManager.recoveryComplete(); _readonly_flag = false; } |
