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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
|
Key:
F = Functional
PF = Partially Functional
NR = Needs Additional Review
ND = Needs Additional Design
NF = Not Functional
Connection:
variables/configuration:
- reconnect: F, NR, ND
+ reconnect functionality is done and the API semantics provided
are ready for review
+ reconnect policies need to be finished, there is currently
only one hardcoded reconnect policy (retry every three
seconds), we need to define the pre-canned policies that we
want to support and a means to configure them, as well as a
very simple plugin/callback for defining ad-hoc policies
+ need to feed failover exchange into the reconnect policy
+ acks can be lost on reconnect
+ handle reconnect during commit/rollback
- timeout: NF
+ some sort of timeout threshold for killing the connection
methods:
- open/__init__: F, ND
+ need to support kerberos
+ need a better way of supplying various kinds of configuration:
- authentication info
- transport specific configuration options, e.g
- heartbeat
- socket options
- tcp-nodelay
- multiple brokers
- session: F, NR
- connect: F, NR
- disconnect: F, NR
- connected: F, NR
- close: F, NR, ND
+ currently there is no distinction between a "close" that does
a complete handshake with the remote broker, and a "close"
that reclaims resources, this means that close can fail with
an exception, I don't like this as it is unclear to the user
if there is a responsibility to do further cleanup in this
case
errors:
- ConnectionError: F, NR
+ ConnectError F, NR
+ Disconnected F, NR
- notification of disconnect?
Session:
methods:
- sender: F, NR, ND
+ need to detail address options
+ need to define subject pattern semantics
+ consider providing convenience for sender/receiver caching
+ need to provide sync option, possibly change default
- receiver: F, NR, ND
+ need to detail address options
+ need to define filter syntax/semantics
+ consider providing convenience for sender/receiver caching
+ need to provide sync option, possibly change default
- acknowledge: F, NR
- reject: NF
- release: NF
- commit: F, NR
- rollback: F, NR
- next_receiver: F, NR
- close: F, ND
+ see comment on Connection.close
errors:
- SessionError: F, NR, ND
+ SendError: F, NR, ND
+ ReceiveError: F, NR, ND
+ should there be fatal/non fatal variants?
Sender:
methods:
- pending: F, NR
- send: F, NR
- sync: F, NR, ND
+ currently this blocks until pending == 0, I'm thinking of
renaming this to wait and adding a slightly richer interface
that would let you wait for something like pending < n
- close: F, NR
errors:
- SendError
+ InsufficientCapacity
+ need specific subhierarchy for certain conditions, e.g. no such queue
Receiver:
methods:
- pending: F, NR
- listen: F, ND
+ see comment on Session.fetch
- fetch: F, NR, ND
+ explicit grant for receiver
+ changing capacity/prefetch to issue credit on ack rather than
fetch return
- sync/wait: NF
- close: F, NR
errors:
- ReceiveError
+ Empty
+ need specific subhierarchy for certain conditions, e.g. no such queue
Message:
- standard message properties: F, NR, ND
- map messages: F, NR
+ needs interop testing: NF
+ needs java impl: NF
- list messages: F, NR, NI
+ needs interop testing: NF
+ needs java impl: NF
- boxed types: NF
Address:
- syntax: F, NR
+ need to consider whitespace in name/subject
+ consider unquoted string concept
- subject related changes, e.g. allowing patterns on both ends: NF
- creating/deleting queues/exchanges F, NR
+ need to handle cleanup of temp queues/topics: F, NR
+ passthrough options for creating exchanges/queues: F, NR
- integration with java: NF
- queue browsing: F, NR
- temporary queues: NF
- xquery: NF
Testing:
- stress/soak testing for async: NF
- stress/soak testing for reconnect: NF
- interop testing: NF
- multi session and multi connection client tests: NF
Documentation:
- api level docs largely present but need updating and elaboration
- tutorial: NF
Examples:
- drain: F, NR
- spout: F, NR
- server: F, NR
- client: NF
- other examples, e.g. async?
Miscellaneous:
- standard ping-like (drain/spout) utilities for all clients: NF
- caching of resolved addresses
- consider using separate session for query/deletion/creation of addresses
|