summaryrefslogtreecommitdiff
path: root/qpid/cpp/xml/cluster.xml
blob: df90fc6f8277ae1793a786ff6f15664b070c0276 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<?xml version="1.0"?>
<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
- 
-   http://www.apache.org/licenses/LICENSE-2.0
- 
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
-->

<amqp major="0" minor="10" port="5672">

  <!-- Controls sent between cluster nodes. -->

  <class name = "cluster" code = "0x80" label="Qpid clustering extensions.">
    <doc>Qpid extension class to allow clustered brokers to communicate.</doc>

    <control name="update-request" code="0x1" label="URL for a member.">
      <field name="url" type="str16"/>
    </control>

    <control name = "update-offer" code="0x2" label="Member offering to be updater for updatee.">
      <field name="updatee" type="uint64"/>
      <field name="cluster-id" type="uuid"/>
    </control>

    <control name="ready" code="0x10" label="New member is ready.">
      <field name="url" type="str16"/>
    </control>

    <control name="config-change" code="0x11" label="Raw cluster membership.">
      <field name="current" type="vbin16"/> <!-- packed member-id array -->
    </control>

    <control name="message-expired" code="0x12">
      <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>
	
    <control name="error-check" code="0x13">
      <field name="type" type="error-type"/>
      <field name="frame-seq" type="uint64"/>
    </control>
    
    <control name="shutdown" code="0x20" label="Shut down entire cluster"/>

  </class>

  <!-- TODO aconway 2008-09-10: support for un-attached connections. -->
  
  <!-- Controls associated with a specific connection. -->

  <class name="cluster-connection" code="0x81" label="Qpid clustering extensions.">

    <control name="deliver-close" code="0x2"/>

    <control name="deliver-do-output" code="0x3">
      <field name="bytes" type="uint32"/>
    </control>

    <!-- Update controls. Sent to a new broker in joining mode.
	 A connection is updateed as followed:
	 - open as a normal connection.
	 - attach sessions, create consumers, set flow with normal AMQP cokmmands.
	 - send /reset additional session state with controls below.
	 - send shadow-ready to mark end of shadow update.
	 - send update-complete when entire update is complete.
    -->
    
    <!-- Consumer state that cannot be set by standard AMQP controls. -->
    <control name="consumer-state" code="0x10">
      <field name="name" type="str8"/>
      <field name="blocked" type="bit"/>
      <field name="notifyEnabled" type="bit"/>
    </control>

    <!-- Delivery-record for outgoing messages sent but not yet accepted. -->
    <control name="delivery-record" code ="0x11">
      <field name="queue" type="str8"/>
      <field name="position" type="sequence-no"/>
      <field name="tag" type="str8"/>
      <field name="id" type="sequence-no"/>
      <field name="acquired" type="bit"/>		       <!--If not set, message follows. -->
      <field name="accepted" type="bit"/>
      <field name="cancelled" type="bit"/>
      <field name="completed" type="bit"/>
      <field name="ended" type="bit"/>
      <field name="windowing" type="bit"/>
      <field name="credit" type="uint32"/>
    </control>
    
    <!-- Tx transaction state. -->
    <control name="tx-start" code="0x12"/> 
    <control name="tx-accept" code="0x13"> <field name="commands" type="sequence-set"/> </control>
    <control name="tx-dequeue" code="0x14"> <field name="queue" type="str8"/> </control>
    <control name="tx-enqueue" code="0x15"> <field name="queue" type="str8"/> </control>
    <control name="tx-publish" code="0x16">
      <field name="queues" type="array"/>  <!--Array of str8 -->
      <field name="delivered" type="bit"/>
    </control>
    <control name="tx-end" code="0x17"/>
    <control name="accumulated-ack" code="0x18"> <field name="commands" type="sequence-set"/> </control>
    
    <!-- Complete a session state update. -->
    <control name="session-state" code="0x1F" label="Set session state during a brain update.">
      <!-- Target session deduced from channel number.  -->
      <field name="replay-start" type="sequence-no"/>	       <!-- Replay frames will start from this point.-->
      <field name="command-point" type="sequence-no"/>	       <!-- Id of next command sent -->
      <field name="sent-incomplete" type="sequence-set"/>      <!-- Commands sent and incomplete. -->

      <field name="expected" type="sequence-no"/>	       <!-- Next command expected. -->
      <field name="received" type="sequence-no"/>	       <!-- Received up to here (>= expected) -->
      <field name="unknown-completed" type="sequence-set"/>    <!-- Completed but not known to peer. -->
      <field name="received-incomplete" type="sequence-set"/>  <!-- Received and incomplete -->
    </control>

    <!-- Complete a shadow connection update. -->
    <control name="shadow-ready" code="0x20" label="End of shadow connection update.">
      <field name="member-id" type="uint64"/>
      <field name="connection-id" type="uint64"/>
      <field name="user-name" type="str8"/>
      <field name="fragment" type="str32"/>
    </control>

    <!-- Complete a cluster state update. -->
    <control name="membership" code="0x21" label="Cluster membership details.">
      <field name="joiners" type="map"/> <!-- member-id -> URL -->
      <field name="members" type="map"/> <!-- member-id -> state -->
      <field name="frame-seq" type="uint64"/>	 <!-- frame sequence number -->
    </control>

    <!-- Set the position of a replicated queue. -->
    <control name="queue-position" code="0x30">
      <field name="queue" type="str8"/>
      <field name="position" type="sequence-no"/>
    </control>

    <!-- Replicate encoded exchanges/queues. -->
    <control name="exchange" code="0x31"><field name="encoded" type="str32"/></control>
    <control name="queue" code="0x32"><field name="encoded" type="str32"/></control>

    <!-- Set expiry-id for subsequent messages. -->
    <control name="expiry-id" code="0x33"><field name="expiry-id" type="uint64"/></control>

  </class>
</amqp>