diff options
Diffstat (limited to 'cpp/src/qpid/broker/QueueFactory.cpp')
-rw-r--r-- | cpp/src/qpid/broker/QueueFactory.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
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 <map> #include <memory> namespace qpid { namespace broker { - QueueFactory::QueueFactory() : broker(0), store(0), parent(0) {} boost::shared_ptr<Queue> QueueFactory::create(const std::string& name, const QueueSettings& settings) @@ -66,6 +67,17 @@ boost::shared_ptr<Queue> QueueFactory::create(const std::string& name, const Que } else { queue->messages = std::auto_ptr<Messages>(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<Messages>(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<Messages>(new MessageDeque()); } |