diff options
author | Gordon Sim <gsim@apache.org> | 2013-11-08 17:41:31 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2013-11-08 17:41:31 +0000 |
commit | 520f7a07a51455b67be6852546cc9f006706a104 (patch) | |
tree | e4b9a84f70b6d43637c509722618b9617056801d | |
parent | 0319629d9bbd6d3b27329832512dd7690ff4af9c (diff) | |
download | qpid-python-520f7a07a51455b67be6852546cc9f006706a104.tar.gz |
QPID-5315: record persistence ids in paging file so they can be restored after paging out
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1540138 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/cpp/src/qpid/broker/PagedQueue.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/qpid/cpp/src/qpid/broker/PagedQueue.cpp b/qpid/cpp/src/qpid/broker/PagedQueue.cpp index 58996bd200..9701617b01 100644 --- a/qpid/cpp/src/qpid/broker/PagedQueue.cpp +++ b/qpid/cpp/src/qpid/broker/PagedQueue.cpp @@ -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& protocols, Message& msg, const char* data, size_ 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(); } |