From 65547070fe449b061ee848874cbb64a7736d646d Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Tue, 12 Nov 2013 16:03:20 +0000 Subject: QPID-5316: add paging-dir option git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1541122 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/DataDir.cpp | 17 +++++++---------- qpid/cpp/src/qpid/broker/Broker.cpp | 10 ++++++++++ qpid/cpp/src/qpid/broker/Broker.h | 3 +++ qpid/cpp/src/qpid/broker/QueueFactory.cpp | 2 +- 4 files changed, 21 insertions(+), 11 deletions(-) (limited to 'qpid/cpp/src') diff --git a/qpid/cpp/src/qpid/DataDir.cpp b/qpid/cpp/src/qpid/DataDir.cpp index ad732052ab..cfdb536d2c 100644 --- a/qpid/cpp/src/qpid/DataDir.cpp +++ b/qpid/cpp/src/qpid/DataDir.cpp @@ -30,18 +30,15 @@ DataDir::DataDir (std::string path) : enabled (!path.empty ()), dirPath (path) { - if (!enabled) + if (enabled) { - QPID_LOG (info, "No data directory - Disabling persistent configuration"); - return; + sys::FileSysDir dir(dirPath); + if (!dir.exists()) + dir.mkdir(); + std::string lockFileName(path); + lockFileName += "/lock"; + lockFile = std::auto_ptr(new sys::LockFile(lockFileName, true)); } - - sys::FileSysDir dir(dirPath); - if (!dir.exists()) - dir.mkdir(); - std::string lockFileName(path); - lockFileName += "/lock"; - lockFile = std::auto_ptr(new sys::LockFile(lockFileName, true)); } DataDir::~DataDir () {} diff --git a/qpid/cpp/src/qpid/broker/Broker.cpp b/qpid/cpp/src/qpid/broker/Broker.cpp index 1e25af3b64..9a5f05ccb2 100644 --- a/qpid/cpp/src/qpid/broker/Broker.cpp +++ b/qpid/cpp/src/qpid/broker/Broker.cpp @@ -163,6 +163,7 @@ Broker::Options::Options(const std::string& name) : addOptions() ("data-dir", optValue(dataDir,"DIR"), "Directory to contain persistent data generated by the broker") ("no-data-dir", optValue(noDataDir), "Don't use a data directory. No persistent configuration will be loaded or stored") + ("paging-dir", optValue(pagingDir,"DIR"), "Directory in which paging files will be created for paged queues") ("port,p", optValue(port,"PORT"), "Tells the broker to listen on PORT") ("interface", optValue(listenInterfaces, "|"), "Which network interfaces to use to listen for incoming connections") ("listen-disable", optValue(listenDisabled, ""), "Transports to disable listening") @@ -216,6 +217,7 @@ Broker::Broker(const Broker::Options& conf) : store(new NullMessageStore), acl(0), dataDir(conf.noDataDir ? std::string() : conf.dataDir), + pagingDir(conf.pagingDir), queues(this), exchanges(this), links(this), @@ -231,6 +233,9 @@ Broker::Broker(const Broker::Options& conf) : expiryPolicy(new ExpiryPolicy), getKnownBrokers(boost::bind(&Broker::getKnownBrokersImpl, this)) { + if (!dataDir.isEnabled()) { + QPID_LOG (info, "No data directory - Disabling persistent configuration"); + } try { if (conf.enableMgmt) { QPID_LOG(info, "Management enabled"); @@ -380,6 +385,11 @@ Broker::Broker(const Broker::Options& conf) : } } +std::string Broker::getPagingDirectoryPath() +{ + return pagingDir.isEnabled() ? pagingDir.getPath() : dataDir.getPath(); +} + void Broker::declareStandardExchange(const std::string& name, const std::string& type) { bool storeEnabled = store.get() != NULL; diff --git a/qpid/cpp/src/qpid/broker/Broker.h b/qpid/cpp/src/qpid/broker/Broker.h index fe6dd6379b..4e46b71cc9 100644 --- a/qpid/cpp/src/qpid/broker/Broker.h +++ b/qpid/cpp/src/qpid/broker/Broker.h @@ -91,6 +91,7 @@ class Broker : public sys::Runnable, public Plugin::Target, bool noDataDir; std::string dataDir; + std::string pagingDir; uint16_t port; std::vector listenInterfaces; std::vector listenDisabled; @@ -175,6 +176,7 @@ class Broker : public sys::Runnable, public Plugin::Target, std::auto_ptr store; AclModule* acl; DataDir dataDir; + DataDir pagingDir; ConnectionObservers connectionObservers; BrokerObservers brokerObservers; @@ -239,6 +241,7 @@ class Broker : public sys::Runnable, public Plugin::Target, Options& getOptions() { return config; } ProtocolRegistry& getProtocolRegistry() { return protocolRegistry; } ObjectFactoryRegistry& getObjectFactoryRegistry() { return objectFactory; } + std::string getPagingDirectoryPath(); void setExpiryPolicy(const boost::intrusive_ptr& e) { expiryPolicy = e; } boost::intrusive_ptr getExpiryPolicy() { return expiryPolicy; } diff --git a/qpid/cpp/src/qpid/broker/QueueFactory.cpp b/qpid/cpp/src/qpid/broker/QueueFactory.cpp index 807026ef0d..90609c1f9d 100644 --- a/qpid/cpp/src/qpid/broker/QueueFactory.cpp +++ b/qpid/cpp/src/qpid/broker/QueueFactory.cpp @@ -76,7 +76,7 @@ boost::shared_ptr QueueFactory::create(const std::string& name, const Que } 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, + queue->messages = std::auto_ptr(new PagedQueue(name, broker->getPagingDirectoryPath(), settings.maxPages ? settings.maxPages : 4, settings.pageFactor ? settings.pageFactor : 1, broker->getProtocolRegistry())); -- cgit v1.2.1