summaryrefslogtreecommitdiff
path: root/cpp/xml
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2012-06-21 16:05:09 +0000
committerAlan Conway <aconway@apache.org>2012-06-21 16:05:09 +0000
commit7b02f9f0e0ad5e4380d87284282183362c86d4ff (patch)
treeaa8ff676fd4467b92c8138e68d6a8a5da1cb535a /cpp/xml
parent7326230dd64dff32bcddac95647c74ba331c8222 (diff)
downloadqpid-python-7b02f9f0e0ad5e4380d87284282183362c86d4ff.tar.gz
QPID-4082: cluster de-sync after broker restart & queue replication
Having queue state replication between 2 clusters, restarting a broker in both source+destination clusters sometimes leads to cluster de-sync. No QMF communication is involved, though symptoms are similar to the bug caused by missing propagation of QMF errors within a cluster. The bug is caused by "deliveryCount" in SemanticState::ConsumerImpl (qpid/broker/SemanticState.cpp) not being replicated to a joining cluster node during catch-up. When the elder broker in src.cluster sends session.sync() after sending 5 messages (per --ack 5 in qpid-route), the recently joiner node in src.cluster does not do so, what leads to the cluster de-sync. The patch: - adds to "consumer-state" method (see xml/cluster.xml file change) to update a new joi-ner a new property deliveryCount - updates cluster::Connection::consumerState to send deliveryCount to the method - updates cluster::Connection::consumerState to set the received deliveryCount - add two methods to broker::SemanticState::ConsumerImpl for getting and setting deliveryCount git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1352588 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/xml')
-rw-r--r--cpp/xml/cluster.xml1
1 files changed, 1 insertions, 0 deletions
diff --git a/cpp/xml/cluster.xml b/cpp/xml/cluster.xml
index f9b8caf185..09434ea37b 100644
--- a/cpp/xml/cluster.xml
+++ b/cpp/xml/cluster.xml
@@ -179,6 +179,7 @@
<field name="position" type="sequence-no"/>
<field name="used-msg-credit" type="uint32"/>
<field name="used-byte-credit" type="uint32"/>
+ <field name="deliveryCount" type="uint32"/>
</control>
<!-- Delivery-record for outgoing messages sent but not yet accepted. -->