summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/QueueFactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/broker/QueueFactory.cpp')
-rw-r--r--cpp/src/qpid/broker/QueueFactory.cpp14
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());
}