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]

Reply via email to