You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2013/11/08 18:41:31 UTC

svn commit: r1540138 - /qpid/trunk/qpid/cpp/src/qpid/broker/PagedQueue.cpp

Author: gsim
Date: Fri Nov  8 17:41:31 2013
New Revision: 1540138

URL: http://svn.apache.org/r1540138
Log:
QPID-5315: record persistence ids in paging file so they can be restored after paging out

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/PagedQueue.cpp

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=1540138&r1=1540137&r2=1540138&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/PagedQueue.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/PagedQueue.cpp Fri Nov  8 17:41:31 2013
@@ -30,20 +30,22 @@ namespace qpid {
 namespace broker {
 namespace {
 using qpid::sys::MemoryMappedFile;
+const uint32_t OVERHEAD(4/*content-size*/ + 4/*sequence-number*/ + 8/*persistence-id*/);
 
 size_t encodedSize(const Message& msg)
 {
-    return msg.getPersistentContext()->encodedSize() + 4/*content-size*/ + 4/*sequence-number*/;
+    return msg.getPersistentContext()->encodedSize() + OVERHEAD;
 }
 
 size_t encode(const Message& msg, char* data, size_t size)
 {
     uint32_t encoded = msg.getPersistentContext()->encodedSize();
-    uint32_t required = encoded + 4/*content-size*/ + 4/*sequence-number*/;
+    uint32_t required = encoded + OVERHEAD;
     if (required > size) return 0;
     qpid::framing::Buffer buffer(data, required);
     buffer.putLong(encoded);
     buffer.putLong(msg.getSequence());
+    buffer.putLongLong(msg.getPersistentContext()->getPersistenceId());
     msg.getPersistentContext()->encode(buffer);
     assert(buffer.getPosition() == required);
     return required;
@@ -54,11 +56,13 @@ size_t decode(ProtocolRegistry& protocol
     qpid::framing::Buffer metadata(const_cast<char*>(data), size);
     uint32_t encoded = metadata.getLong();
     uint32_t sequence = metadata.getLong();
+    uint64_t persistenceId = metadata.getLongLong();
     assert(metadata.available() >= encoded);
     qpid::framing::Buffer buffer(const_cast<char*>(data) + metadata.getPosition(), encoded);
     msg = protocols.decode(buffer);
     assert(buffer.getPosition() == encoded);
     msg.setSequence(qpid::framing::SequenceNumber(sequence));
+    msg.getPersistentContext()->setPersistenceId(persistenceId);
     return encoded + metadata.getPosition();
 }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org