summaryrefslogtreecommitdiff
path: root/cpp/src/qpid
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid')
-rw-r--r--cpp/src/qpid/broker/Message.cpp10
-rw-r--r--cpp/src/qpid/broker/Message.h1
-rw-r--r--cpp/src/qpid/broker/Queue.cpp2
3 files changed, 11 insertions, 2 deletions
diff --git a/cpp/src/qpid/broker/Message.cpp b/cpp/src/qpid/broker/Message.cpp
index 6aeb9e47f9..2c3c444baa 100644
--- a/cpp/src/qpid/broker/Message.cpp
+++ b/cpp/src/qpid/broker/Message.cpp
@@ -59,7 +59,15 @@ Message::~Message()
void Message::forcePersistent()
{
- forcePersistentPolicy = true;
+ // only set forced bit if we actually need to force.
+ if (! getAdapter().isPersistent(frames) ){
+ forcePersistentPolicy = true;
+ }
+}
+
+bool Message::isForcedPersistent()
+{
+ return forcePersistentPolicy;
}
std::string Message::getRoutingKey() const
diff --git a/cpp/src/qpid/broker/Message.h b/cpp/src/qpid/broker/Message.h
index cd2513284a..94ce7561a7 100644
--- a/cpp/src/qpid/broker/Message.h
+++ b/cpp/src/qpid/broker/Message.h
@@ -147,6 +147,7 @@ public:
void addTraceId(const std::string& id);
void forcePersistent();
+ bool isForcedPersistent();
boost::intrusive_ptr<Message>& getReplacementMessage(const Queue* qfor) const;
void setReplacementMessage(boost::intrusive_ptr<Message> msg, const Queue* qfor);
diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp
index 64efc93a22..30b33d877b 100644
--- a/cpp/src/qpid/broker/Queue.cpp
+++ b/cpp/src/qpid/broker/Queue.cpp
@@ -668,7 +668,7 @@ void Queue::setLastNodeFailure()
for ( Messages::iterator i = messages.begin(); i != messages.end(); ++i ) {
if (lastValueQueue) checkLvqReplace(*i);
i->payload->forcePersistent();
- if (i->payload->getPersistenceId() == 0){
+ if (i->payload->isForcedPersistent() ){
enqueue(0, i->payload);
}
}