Author: gsim
Date: Mon May 2 18:42:43 2016
New Revision: 1742020
URL: http://svn.apache.org/viewvc?rev=1742020&view=rev
Log:
QPID-7250: check that message can fit in a page before writing to disk
Modified:
qpid/trunk/qpid/cpp/src/qpid/broker/Messages.h
qpid/trunk/qpid/cpp/src/qpid/broker/PagedQueue.cpp
qpid/trunk/qpid/cpp/src/qpid/broker/PagedQueue.h
qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Messages.h
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Messages.h?rev=1742020&r1=1742019&r2=1742020&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Messages.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Messages.h Mon May 2 18:42:43 2016
@@ -94,7 +94,14 @@ class Messages
* Apply, the functor to each message held
*/
virtual void foreach(Functor) = 0;
- private:
+
+ /**
+ * Allows implementation to perform optional checks before message
+ * is stored.
+ */
+ virtual void check(const Message&) {};
+
+ private:
};
}} // namespace qpid::broker
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/PagedQueue.cpp
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/PagedQueue.cpp?rev=1742020&r1=1742019&r2=1742020&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/PagedQueue.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/PagedQueue.cpp Mon May 2 18:42:43 2016
@@ -130,12 +130,17 @@ bool PagedQueue::deleted(const QueueCurs
}
}
-void PagedQueue::publish(const Message& added)
+void PagedQueue::check(const Message& added)
{
if (encodedSize(added) > pageSize) {
QPID_LOG(error, "Message is larger than page size for queue " << name);
throw qpid::framing::PreconditionFailedException(QPID_MSG("Message is
larger than page size for queue " << name));
}
+}
+
+void PagedQueue::publish(const Message& added)
+{
+ check(added);
Used::reverse_iterator i = used.rbegin();
if (i != used.rend()) {
if (!i->second.isLoaded()) load(i->second);
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/PagedQueue.h
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/PagedQueue.h?rev=1742020&r1=1742019&r2=1742020&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/PagedQueue.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/PagedQueue.h Mon May 2 18:42:43 2016
@@ -32,6 +32,8 @@
namespace qpid {
namespace broker {
class ProtocolRegistry;
+
+
/**
*
*/
@@ -47,6 +49,7 @@ class PagedQueue : public Messages {
Message* find(const framing::SequenceNumber&, QueueCursor*);
Message* find(const QueueCursor&);
void foreach(Functor);
+ void check(const Message& added);
private:
class Page {
public:
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=1742020&r1=1742019&r2=1742020&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Mon May 2 18:42:43 2016
@@ -274,10 +274,13 @@ bool Queue::accept(const Message& msg)
//drop message
QPID_LOG(info, "Dropping excluded message from " << getName());
return false;
- } else if (selector) {
- return selector->filter(msg);
} else {
- return true;
+ messages->check(msg);
+ if (selector) {
+ return selector->filter(msg);
+ } else {
+ return true;
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]