----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/10020/ -----------------------------------------------------------
Review request for qpid, Gordon Sim and Ted Ross. Summary (updated) ----------------- C++ Broker 'rebind' to steer messages from one queue to others Description (updated) ------- To get a true 'atomic rebind' one should (1) freeze all traffic going through all exchanges that have bindings to be changed. Failing that, one could (2) freeze all traffic going through each exchange while that exchange's bindings are changed. A third option would be (3) to freeze each individual binding while it is moved. Options (1) and (2) require per-message locking at the exchange level; these locks do not exist today and adding them would undoubtedly introduce performance degredation. For discussion please see https://issues.apache.org/jira/browse/QPID-4616 and review comments at https://reviews.apache.org/r/9698/ Option (3) requires no new locking and could leverage the locking methods that the exchanges already use. The change proposed here is a prototype that implements lightweight strategy #3. This review exposes what the feature is trying to accomplish and the basic framework is complete. It has: * Queue settings and status. * Management method to trigger the rebind. * Exchange methods to effect the rebind for each exchange type. * Broker changes to handle queues in the 'rebound' state where bind/unbind operations on them actually go to other queues. * Some test suite code to trigger the rebind method and its error paths. * A qpid.rebind exchange for backup agents to use to refill queues that are in rebind state and not accessable through normal bindings. Before this feature could transition to 'Ship It' it still needs: * An ACL property to control specification of rebind queues. * A handler for queue deletion while the queue is part of a rebind set. * Code to restore a queue from rebind state back to normal. * Proof that traffic can be properly recovered through a rebind This addresses bug QPID-4650. https://issues.apache.org/jira/browse/QPID-4650 Diffs (updated) ----- trunk/qpid/cpp/src/qpid/broker/Broker.h 1458431 trunk/qpid/cpp/src/qpid/broker/Broker.cpp 1458431 trunk/qpid/cpp/src/qpid/broker/DirectExchange.h 1458431 trunk/qpid/cpp/src/qpid/broker/DirectExchange.cpp 1458431 trunk/qpid/cpp/src/qpid/broker/Exchange.h 1458431 trunk/qpid/cpp/src/qpid/broker/FanOutExchange.h 1458431 trunk/qpid/cpp/src/qpid/broker/FanOutExchange.cpp 1458431 trunk/qpid/cpp/src/qpid/broker/HeadersExchange.h 1458431 trunk/qpid/cpp/src/qpid/broker/HeadersExchange.cpp 1458431 trunk/qpid/cpp/src/qpid/broker/Link.cpp 1458431 trunk/qpid/cpp/src/qpid/broker/Queue.h 1458431 trunk/qpid/cpp/src/qpid/broker/Queue.cpp 1458431 trunk/qpid/cpp/src/qpid/broker/QueueBindings.cpp 1458431 trunk/qpid/cpp/src/qpid/broker/QueueRebindHelpers.h PRE-CREATION trunk/qpid/cpp/src/qpid/broker/QueueSettings.h 1458431 trunk/qpid/cpp/src/qpid/broker/QueueSettings.cpp 1458431 trunk/qpid/cpp/src/qpid/broker/TopicExchange.h 1458431 trunk/qpid/cpp/src/qpid/broker/TopicExchange.cpp 1458431 trunk/qpid/cpp/src/qpid/ha/BrokerReplicator.h 1458431 trunk/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp 1458431 trunk/qpid/cpp/src/qpid/ha/QueueReplicator.h 1458431 trunk/qpid/cpp/src/qpid/ha/QueueReplicator.cpp 1458431 trunk/qpid/cpp/src/qpid/sys/CopyOnWriteArray.h 1458431 trunk/qpid/cpp/src/qpid/xml/XmlExchange.h 1458431 trunk/qpid/cpp/src/qpid/xml/XmlExchange.cpp 1458431 trunk/qpid/cpp/src/tests/queue_rebind.py PRE-CREATION trunk/qpid/cpp/src/tests/run_queue_rebind PRE-CREATION trunk/qpid/specs/management-schema.xml 1458431 trunk/qpid/tools/src/py/qpidtoollibs/broker.py 1458431 Diff: https://reviews.apache.org/r/10020/diff/ Testing (updated) ------- Several tests to exercise rebind code paths. Thanks, Chug Rolke