summaryrefslogtreecommitdiff
path: root/cpp/xml
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2009-06-30 20:51:38 +0000
committerAlan Conway <aconway@apache.org>2009-06-30 20:51:38 +0000
commit82091ce825923252d7a224ebf771be61e8dd15a2 (patch)
tree71250d9c795c56447a23cb7ceef3db8d19c3ed0c /cpp/xml
parentb9c6b3e4f92ca2398cca1dc59ca8fdbfc693762f (diff)
downloadqpid-python-82091ce825923252d7a224ebf771be61e8dd15a2.tar.gz
Fix cluster race condition with connections closed by broker while in use.
If a client is using a connection that is closed at the broker end because of an error, there is a race condition that allows the connection to be incorrectly re-created on replica brokers which can cause those brokers to exit with an error that does not occur on the directly connected broker. The fix: explicitly announce new connections, shadow connections are no longer implicitly created on first use. Make error-check a cluster control so it can be handled independently of the lifecycle of the connection where an error initially occured. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@789947 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/xml')
-rw-r--r--cpp/xml/cluster.xml34
1 files changed, 19 insertions, 15 deletions
diff --git a/cpp/xml/cluster.xml b/cpp/xml/cluster.xml
index 8b1d47e56e..d9ab6e97cb 100644
--- a/cpp/xml/cluster.xml
+++ b/cpp/xml/cluster.xml
@@ -48,6 +48,21 @@
<field name="id" type="uint64"/>
</control>
+ <domain name="error-type" type="uint8" label="Types of error">
+ <enum>
+ <choice name="none" value="0"/>
+ <choice name="session" value="1"/>
+ <choice name="connection" value="2"/>
+ </enum>
+ </domain>
+
+ <!-- Check for error consistency across the cluster -->
+ <control name="error-check" code="0x14">
+ <field name="type" type="error-type"/>
+ <field name="frame-seq" type="uint64"/>
+ </control>
+
+
<control name="shutdown" code="0x20" label="Shut down entire cluster"/>
</class>
@@ -56,8 +71,8 @@
<class name="cluster-connection" code="0x81" label="Qpid clustering extensions.">
- <!-- Abort a connection that is sending invalid data. -->
- <control name="abort" code="0x1"/>
+ <!-- Announce a new connection -->
+ <control name="announce" code="0x1"/>
<!-- Marks the cluster-wide point when a connection is considered closed. -->
<control name="deliver-close" code="0x2"/>
@@ -67,19 +82,8 @@
<field name="limit" type="uint32"/>
</control>
- <domain name="error-type" type="uint8" label="Types of error">
- <enum>
- <choice name="none" value="0"/>
- <choice name="session" value="1"/>
- <choice name="connection" value="2"/>
- </enum>
- </domain>
-
- <!-- Check for error consistency across the cluster -->
- <control name="error-check" code="0x4">
- <field name="type" type="error-type"/>
- <field name="frame-seq" type="uint64"/>
- </control>
+ <!-- Abort a connection that is sending invalid data. -->
+ <control name="abort" code="0x4"/>
<!-- Update controls. Sent to a new broker in joining mode.
A connection is updateed as followed: