summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorKim van der Riet <kpvdr@apache.org>2014-07-30 14:24:55 +0000
committerKim van der Riet <kpvdr@apache.org>2014-07-30 14:24:55 +0000
commite99e166a8e50f4a1eeb5034c0aeff04f0db8344b (patch)
tree4bbdd02b3c10edf8c5829ce8187bda85fc1a3130 /qpid/cpp/src
parent6fae60887199cdcd6b2db87996eb838b519cffcf (diff)
downloadqpid-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')
-rw-r--r--qpid/cpp/src/qpid/linearstore/journal/JournalFile.cpp2
-rw-r--r--qpid/cpp/src/qpid/linearstore/journal/LinearFileController.cpp1
-rw-r--r--qpid/cpp/src/qpid/linearstore/journal/RecoveryManager.cpp6
-rw-r--r--qpid/cpp/src/qpid/linearstore/journal/RecoveryManager.h1
-rw-r--r--qpid/cpp/src/qpid/linearstore/journal/jcntl.cpp1
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;
}