You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2011/10/13 14:49:14 UTC

svn commit: r1182815 - in /qpid/branches/qpid-2920-active/qpid/cpp/design_docs: new-cluster-design.txt new-cluster-plan.txt

Author: aconway
Date: Thu Oct 13 12:49:14 2011
New Revision: 1182815

URL: http://svn.apache.org/viewvc?rev=1182815&view=rev
Log:
QPID-2920: Update new-cluster-plan.txt and new-cluster-design.txt.

Refined comments on live upgrade in design and plan.

Modified:
    qpid/branches/qpid-2920-active/qpid/cpp/design_docs/new-cluster-design.txt
    qpid/branches/qpid-2920-active/qpid/cpp/design_docs/new-cluster-plan.txt

Modified: qpid/branches/qpid-2920-active/qpid/cpp/design_docs/new-cluster-design.txt
URL: http://svn.apache.org/viewvc/qpid/branches/qpid-2920-active/qpid/cpp/design_docs/new-cluster-design.txt?rev=1182815&r1=1182814&r2=1182815&view=diff
==============================================================================
--- qpid/branches/qpid-2920-active/qpid/cpp/design_docs/new-cluster-design.txt (original)
+++ qpid/branches/qpid-2920-active/qpid/cpp/design_docs/new-cluster-design.txt Thu Oct 13 12:49:14 2011
@@ -83,20 +83,21 @@ context.
 
 ** A new cluster design.
 
-Clearly defined interface between broker code and cluster plug-in.
+1. Clearly defined interface between broker code and cluster plug-in.
 
-Replicate queue events rather than client data.
-- Broker behavior only needs to match per-queue.
-- Smaller amount of code (queue implementation) that must behave predictably.
-- Events only need be serialized per-queue, allows concurrency between queues
-
-Use a moving queue ownership protocol to agree order of dequeues.
-No longer relies on identical state and lock-step behavior to cause
-identical dequeues on each broker.
-
-Use multiple CPG groups to process different queues in parallel. Use a
-fixed set of groups and hash queue names to choose the group for each
-queue.
+2. Replicate queue events rather than client data.
+ - Only requires consistent enqueue order.
+ - Events only need be serialized per-queue, allows concurrency between queues
+ - Allows for replicated and non-replicated queues.
+
+3. Use a lock protocol to agree order of dequeues: only the broker
+   holding the lock can acqiure & dequeue.  No longer relies on
+   identical state and lock-step behavior to cause identical dequeues
+   on each broker.
+
+4. Use multiple CPG groups to process different queues in
+   parallel. Use a fixed set of groups and hash queue names to choose
+   the group for each queue.
 
 *** Requirements
 
@@ -295,20 +296,23 @@ flow control is sufficient for qpid.
 ** Live upgrades
 
 Live upgrades refers to the ability to upgrade a cluster while it is
-running, with no downtime. Each brokers in the cluster is shut down,
-and then re-started with a new version of the broker code.
+running, with no downtime. Brokers are shut down and re-start brokers
+in the cluster is shut down, and then re-started with a new version of
+the broker code.
 
 To achieve this
 - Cluster protocl XML file has a new element <version number=N> attached
   to each method. This is the version at which the method was added.
-- New versions can only add methods, existing methods cannot be changed.
+- New versions can add methods, existing methods cannot be changed.
 - The cluster handshake for new members includes the protocol version
   at each member.
 - The cluster's version is the lowest version among its members.
-- A newer broker can join and older cluster. When it does, it must restrict 
-  itself to speaking the older version protocol.
+- A newer broker can join and older cluster but not vice versa.
+- A newer broker in an old cluster must speak the old protocol for the
+  benefit of older brokers. It can also use newer controls which
+  will be ignored by old broekrs.
 - When the cluster version increases (because the lowest version member has left)
-  the remaining members may move up to the new version.
+  the remaining members may switch to using only the new version.
 
 
 * Design debates

Modified: qpid/branches/qpid-2920-active/qpid/cpp/design_docs/new-cluster-plan.txt
URL: http://svn.apache.org/viewvc/qpid/branches/qpid-2920-active/qpid/cpp/design_docs/new-cluster-plan.txt?rev=1182815&r1=1182814&r2=1182815&view=diff
==============================================================================
--- qpid/branches/qpid-2920-active/qpid/cpp/design_docs/new-cluster-plan.txt (original)
+++ qpid/branches/qpid-2920-active/qpid/cpp/design_docs/new-cluster-plan.txt Thu Oct 13 12:49:14 2011
@@ -227,22 +227,28 @@ The old cluster has workarounds in the b
 - [ ] 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 upgrades.
 
 Allow brokers in a running cluster to be replaced one-by-one with a new version.
+(see new-cluster-design for design notes.)
 
 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.
 
-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)
+Points to implement in anticipation of live upgrade:
+- Prefix each CPG message with a version number and length.
+  Version number determines how to decode the message.
+- Brokers ignore messages that have a higher version number than they understand.
 - Protocol version XML element in cluster.xml, on each control.
 - Initial status protocol to include protocol version number.
 
+New member udpates: use the store encode/decode for updates, use the
+same backward compatibility strategy as the store. This allows for
+adding new elements to the end of structures but not changing or
+removing new elements.
+
 ** TODO [#C] Support for AMQP 1.0.
 
 * Testing



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org