From 3e08b645c2861fb36525e05061d6c8012fd30932 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Mon, 29 Apr 2013 18:04:17 +0000 Subject: QPID-4339: simple paged queue implementation git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1477236 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/QueueFactory.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'cpp/src/qpid/broker/QueueFactory.cpp') diff --git a/cpp/src/qpid/broker/QueueFactory.cpp b/cpp/src/qpid/broker/QueueFactory.cpp index efeb9ae53b..67499c9985 100644 --- a/cpp/src/qpid/broker/QueueFactory.cpp +++ b/cpp/src/qpid/broker/QueueFactory.cpp @@ -30,17 +30,18 @@ #include "qpid/broker/Fairshare.h" #include "qpid/broker/MessageDeque.h" #include "qpid/broker/MessageMap.h" +#include "qpid/broker/PagedQueue.h" #include "qpid/broker/PriorityQueue.h" #include "qpid/broker/QueueFlowLimit.h" #include "qpid/broker/ThresholdAlerts.h" #include "qpid/broker/FifoDistributor.h" +#include "qpid/log/Statement.h" #include #include namespace qpid { namespace broker { - QueueFactory::QueueFactory() : broker(0), store(0), parent(0) {} boost::shared_ptr QueueFactory::create(const std::string& name, const QueueSettings& settings) @@ -66,6 +67,17 @@ boost::shared_ptr QueueFactory::create(const std::string& name, const Que } else { queue->messages = std::auto_ptr(new PriorityQueue(settings.priorities)); } + } else if (settings.paging) { + if (!broker) { + QPID_LOG(warning, "Cannot create paged queue without broker context"); + } else if (!qpid::sys::MemoryMappedFile::isSupported()) { + QPID_LOG(warning, "Cannot create paged queue; memory mapped file support not available on this platform"); + } else { + queue->messages = std::auto_ptr(new PagedQueue(name, broker->getOptions().dataDir, + settings.maxPages ? settings.maxPages : 4, + settings.pageFactor ? settings.pageFactor : 1, + broker->getProtocolRegistry())); + } } else if (settings.lvqKey.empty()) {//LVQ already handled above queue->messages = std::auto_ptr(new MessageDeque()); } -- cgit v1.2.1