summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2013-05-21 22:35:57 +0000
committerGordon Sim <gsim@apache.org>2013-05-21 22:35:57 +0000
commitb7c0f8d90ac6e5c789f2a93fc8c29ed25e69c707 (patch)
tree0e81eb0c9ff23fda9f7b92953bcaf395424bc1f5 /cpp/src
parent49d2d63866fb38bd4624f8ece95fdc4dd956f6c8 (diff)
downloadqpid-python-b7c0f8d90ac6e5c789f2a93fc8c29ed25e69c707.tar.gz
QPID-4591: patch from Ernie Allen to add queue sequence number to messages
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1485001 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/qpid/broker/Queue.cpp1
-rw-r--r--cpp/src/qpid/broker/QueueSettings.cpp8
-rw-r--r--cpp/src/qpid/broker/QueueSettings.h4
3 files changed, 12 insertions, 1 deletions
diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp
index 5e806699de..4c9058e78b 100644
--- a/cpp/src/qpid/broker/Queue.cpp
+++ b/cpp/src/qpid/broker/Queue.cpp
@@ -755,6 +755,7 @@ void Queue::push(Message& message, bool /*isRecovery*/)
{
Mutex::ScopedLock locker(messageLock);
message.setSequence(++sequence);
+ if (settings.sequencing) message.addAnnotation(settings.sequenceKey, (uint32_t)sequence);
messages->publish(message);
listeners.populate(copy);
observeEnqueue(message, locker);
diff --git a/cpp/src/qpid/broker/QueueSettings.cpp b/cpp/src/qpid/broker/QueueSettings.cpp
index 93b832733c..35aa46260c 100644
--- a/cpp/src/qpid/broker/QueueSettings.cpp
+++ b/cpp/src/qpid/broker/QueueSettings.cpp
@@ -63,6 +63,7 @@ const std::string LVQ_LEGACY("qpid.last_value_queue");
const std::string LVQ_LEGACY_KEY("qpid.LVQ_key");
const std::string LVQ_LEGACY_NOBROWSE("qpid.last_value_queue_no_browse");
+const std::string SEQUENCING("qpid.queue_msg_sequence");
bool handleFairshareSetting(const std::string& basename, const std::string& key, const qpid::types::Variant& value, QueueSettings& settings)
{
@@ -97,7 +98,8 @@ QueueSettings::QueueSettings(bool d, bool a) :
noLocal(false),
isBrowseOnly(false),
autoDeleteDelay(0),
- alertRepeatInterval(60)
+ alertRepeatInterval(60),
+ sequencing(false)
{}
bool QueueSettings::handle(const std::string& key, const qpid::types::Variant& value)
@@ -203,6 +205,10 @@ bool QueueSettings::handle(const std::string& key, const qpid::types::Variant& v
} else if (key == PAGE_FACTOR) {
pageFactor = value;
return true;
+ } else if (key == SEQUENCING) {
+ sequenceKey = value.getString();
+ sequencing = !sequenceKey.empty();
+ return true;
} else if (key == FILTER) {
filter = value.asString();
return true;
diff --git a/cpp/src/qpid/broker/QueueSettings.h b/cpp/src/qpid/broker/QueueSettings.h
index cf430db76d..19667e93ae 100644
--- a/cpp/src/qpid/broker/QueueSettings.h
+++ b/cpp/src/qpid/broker/QueueSettings.h
@@ -83,6 +83,10 @@ struct QueueSettings
uint64_t maxFileSize;
uint64_t maxFileCount;
+ std::string sequenceKey;
+ // store bool to avoid testing string value
+ bool sequencing;
+
std::string filter;
//yuck, yuck