Author: mgoulish Date: Mon Sep 10 17:23:34 2012 New Revision: 1382991 URL: http://svn.apache.org/viewvc?rev=1382991&view=rev Log: Jira QPID-4142 browse-only queues
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp qpid/trunk/qpid/cpp/src/qpid/broker/QueueSettings.cpp qpid/trunk/qpid/cpp/src/qpid/broker/QueueSettings.h qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp?rev=1382991&r1=1382990&r2=1382991&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original) +++ qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Mon Sep 10 17:23:34 2012 @@ -206,6 +206,10 @@ Queue::Queue(const string& _name, const brokerMgmtObject->inc_queueCount(); } } + + if ( settings.isBrowseOnly ) { + QPID_LOG ( info, "Queue " << name << " is browse-only." ); + } } Queue::~Queue() @@ -483,6 +487,11 @@ void Queue::consume(Consumer::shared_ptr // Check for exclusivity of acquiring consumers. size_t acquiringConsumers = consumerCount - browserCount; if (c->preAcquires()) { + if(settings.isBrowseOnly) { + throw NotAllowedException( + QPID_MSG("Queue " << name << " is browse only. Refusing acquiring consumer.")); + } + if(exclusive) { throw ResourceLockedException( QPID_MSG("Queue " << getName() Modified: qpid/trunk/qpid/cpp/src/qpid/broker/QueueSettings.cpp URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/QueueSettings.cpp?rev=1382991&r1=1382990&r2=1382991&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/broker/QueueSettings.cpp (original) +++ qpid/trunk/qpid/cpp/src/qpid/broker/QueueSettings.cpp Mon Sep 10 17:23:34 2012 @@ -39,6 +39,7 @@ const std::string POLICY_TYPE("qpid.poli const std::string POLICY_TYPE_REJECT("reject"); const std::string POLICY_TYPE_RING("ring"); const std::string NO_LOCAL("no-local"); +const std::string BROWSE_ONLY("browse-only"); const std::string TRACE_ID("qpid.trace.id"); const std::string TRACE_EXCLUDES("qpid.trace.exclude"); const std::string LVQ_KEY("qpid.last_value_queue_key"); @@ -82,6 +83,7 @@ QueueSettings::QueueSettings(bool d, boo addTimestamp(false), dropMessagesAtLimit(false), noLocal(false), + isBrowseOnly(false), autoDeleteDelay(0), alertRepeatInterval(60) {} @@ -108,6 +110,9 @@ bool QueueSettings::handle(const std::st } else if (key == NO_LOCAL) { noLocal = value; return true; + } else if (key == BROWSE_ONLY) { + isBrowseOnly = value; + return true; } else if (key == TRACE_ID) { traceId = value.asString(); return true; Modified: qpid/trunk/qpid/cpp/src/qpid/broker/QueueSettings.h URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/QueueSettings.h?rev=1382991&r1=1382990&r2=1382991&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/broker/QueueSettings.h (original) +++ qpid/trunk/qpid/cpp/src/qpid/broker/QueueSettings.h Mon Sep 10 17:23:34 2012 @@ -59,6 +59,7 @@ struct QueueSettings bool dropMessagesAtLimit;//aka ring queue policy bool noLocal; + bool isBrowseOnly; std::string traceId; std::string traceExcludes; uint64_t autoDeleteDelay;//queueTtl? Modified: qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp?rev=1382991&r1=1382990&r2=1382991&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp (original) +++ qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp Mon Sep 10 17:23:34 2012 @@ -422,6 +422,11 @@ SessionAdapter::MessageHandlerImpl::subs if(!destination.empty() && state.exists(destination)) throw NotAllowedException(QPID_MSG("Consumer tags must be unique")); + if (queue->getSettings().isBrowseOnly && acquireMode == 0) { + QPID_LOG(info, "Overriding request to consume from browse-only queue " << queue->getName()); + acquireMode = 1; + } + // We allow browsing (acquireMode == 1) of exclusive queues, this is required by HA. if (queue->hasExclusiveOwner() && !queue->isExclusiveOwner(&session) && acquireMode == 0) throw ResourceLockedException(QPID_MSG("Cannot subscribe to exclusive queue " --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org