summaryrefslogtreecommitdiff
path: root/qpid/cpp/design_docs/new-cluster-plan.txt
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/cpp/design_docs/new-cluster-plan.txt')
-rw-r--r--qpid/cpp/design_docs/new-cluster-plan.txt86
1 files changed, 53 insertions, 33 deletions
diff --git a/qpid/cpp/design_docs/new-cluster-plan.txt b/qpid/cpp/design_docs/new-cluster-plan.txt
index 6fb9d3fd9f..32e3f710e7 100644
--- a/qpid/cpp/design_docs/new-cluster-plan.txt
+++ b/qpid/cpp/design_docs/new-cluster-plan.txt
@@ -25,8 +25,8 @@ Meaning of priorities:
[#C] Can be addressed in a later release.
The existig prototype is bare bones to do performance benchmarks:
-- Implement publish and consumer locking protocol.
-- Defered delivery and asynchronous completion of message till self-delivered.
+- Implements publish and consumer locking protocol.
+- Defered delivery and asynchronous completion of message.
- Optimize the case all consumers are on the same node.
- No new member updates, no failover updates, no transactions, no persistence etc.
@@ -79,7 +79,6 @@ Multicast using fixed-size (64k) buffers, allow fragmetation of messages across
* Open questions
-
** TODO [#A] Queue sequence numbers vs. independant message IDs.
SCHEDULED: <2011-10-07 Fri>
@@ -94,18 +93,18 @@ However they imply additional map lookups that might hurt performance.
- [ ] Prototype independent message IDs, check performance.
* Outstanding Tasks
-** TODO [#A] Defer and async complete wiring commands.
+** TODO [#A] Defer and async completion of wiring commands.
Testing requirement: Many tests assume wiring changes are visible
across the cluster once the commad completes.
-Name clashes: avoid race if same name queue/exchange declared on 2
-brokers simultaneously
+Name clashes: need to avoid race if same name queue/exchange declared
+on 2 brokers simultaneously
-** TODO [#B] Management support
+** TODO [#A] Passing all existing cluster tests.
-- Replicate management methods that modify queues - e.g. move, purge.
-- Report connections - local only or cluster-wide?
+The new cluster should be a drop-in replacement for the old, so it
+should be able to pass all the existing tests.
** TODO [#A] Update to new members joining.
@@ -140,29 +139,28 @@ Exchange updatee:
Updater remains active throughout.
Updatee stalls clients until the update completes.
-** TODO [#B] TX transaction support.
-Extend broker::Cluster interface to capture transaction context and completion.
-Running brokers exchange TX information.
-New broker update includes TX information.
+Updating queue/exchange/binding objects is via the same encode/decode
+that is used by the store. Updatee to use recovery interfaces to
+recover?
-** TODO [#B] DTX transaction support.
-Extend broker::Cluster interface to capture transaction context and completion.
-Running brokers exchange DTX information.
-New broker update includes DTX information.
-** TODO [#B] Async completion of accept.
-When this is fixed in the standalone broker, it should be fixed for cluster.
+** TODO [#A] Failover updates to client.
+Implement the amq.failover exchange to notify clients of membership.
-** TODO [#B] Persistence support.
-InitialStatus protoocl etc. to support persistent start-up (existing code)
+** TODO [#B] Initial status protocol.
+Handshake to give status of each broker member to new members joining.
+Status includes
+- persistent store state (clean, dirty)
+- cluster protocol version.
+
+** TODO [#B] Persistent cluster support.
+Initial status protoocl to support persistent start-up (see existing code)
Only one broker recovers from store, update to others.
Assign cluster IDs to messages recovered from store, don't replicate. See Queue::recover.
-** TODO [#B] Handle other ways that messages can leave a queue.
-
-Ways other than a consumer that messages are taken off a queue.
-
+** TODO [#B] Management support
+Replicate management methods that modify queues - e.g. move, purge.
Target broker may not have all messages on other brokers for purge/destroy.
- Queue::move() - need to wait for lock? Replicate?
- Queue::get() - ???
@@ -171,6 +169,26 @@ Target broker may not have all messages on other brokers for purge/destroy.
Need to add callpoints & mcast messages to replicate these?
+** TODO [#B] TX transaction support.
+Extend broker::Cluster interface to capture transaction context and completion.
+Running brokers exchange TX information.
+New broker update includes TX information.
+
+ // FIXME aconway 2010-10-18: As things stand the cluster is not
+ // compatible with transactions
+ // - enqueues occur after routing is complete
+ // - no call to Cluster::enqueue, should be in Queue::process?
+ // - no transaction context associated with messages in the Cluster interface.
+ // - no call to Cluster::accept in Queue::dequeueCommitted
+
+** TODO [#B] DTX transaction support.
+Extend broker::Cluster interface to capture transaction context and completion.
+Running brokers exchange DTX information.
+New broker update includes DTX information.
+
+** TODO [#B] Async completion of accept.
+When this is fixed in the standalone broker, it should be fixed for cluster.
+
** TODO [#B] Network partitions and quorum.
Re-use existing implementation.
@@ -209,25 +227,27 @@ The old cluster has workarounds in the broker code that can be removed.
- [ ] drop security workarounds: cluster code now operates after message decoding.
- [ ] drop connection tracking in cluster code.
- [ ] simper inconsistent-error handling code, no need to stall.
-** TODO [#C] Support for live updates.
+** TODO [#C] Support for live upgrades.
+
Allow brokers in a running cluster to be replaced one-by-one with a new version.
The old cluster protocol was unstable because any changes in broker
state caused changes to the cluster protocol.The new design should be
much more stable.
-TODO: think about strategies for allowing live updates while extending
-the cluster protocol
-
-
-
-
+Points to implement:
+- Brokers should ignore unknown controls (with a warning) rather than an error.
+- Limit logging frequency for unknown control warnings.
+- Add a version number at front of every CPG message. Determines how the
+ rest of the message is decoded. (allows for entirely new encodings e.g. AMQP 1.0)
+- Protocol version XML element in cluster.xml, on each control.
+- Initial status protocol to include protocol version number.
** TODO [#C] Support for AMQP 1.0.
* Testing
** TODO [#A] Pass all existing cluster tests.
-Requires [[Defer and async complete wiring commands.]]
+Requires [[Defer and async completion of wiring commands.]]
** TODO [#A] New cluster tests.
Stress tests & performance benchmarks focused on changes in new cluster:
- concurrency by queues rather than connections.