----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/12289/ -----------------------------------------------------------
(Updated July 31, 2013, 1:34 p.m.) Review request for qpid, Andrew Stitcher and Gordon Sim. Changes ------- Closer to final code: - added dummy store to verify actions on store. - de-duplication of transactional messages Unfinished: - Primary does not wait for backups to prepare() before committing. - All connected backups are assumed to be in the transaction, there are race conditions around brokers joining/leavinv where this assumption is invalid. - Need more tests. Summary (updated) ----------------- QPID-4327: HA TX transactions: basic replication. Bugs: QPID-4327 https://issues.apache.org/jira/browse/QPID-4327 Repository: qpid Description (updated) ------- QPID-4327: HA TX transactions: basic replication. On primary a PrimaryTxObserver observes a transaction's TxBuffer and generates transaction events on a tx-replication-queue. On the backup a TxReplicator receives the events and constructs a TxBuffer equivalent to the one in the primary. Unfinished: - Primary does not wait for backups to prepare() before committing. - All connected backups are assumed to be in the transaction, there are race conditions around brokers joining/leavinv where this assumption is invalid. - Need more tests. QPID-4327: HA get rid of Primary::get() singleton. QPID-4327: Added TransactionObserver interface. Added TransactionObserver interface, called at each point in a transaction's lifecycle. Currently only a single observer can be associated with a transaction. Added startTx, startDtx to BrokerObserver so plugins can observe transactions starting and set a TransactionObserver. QPID-4327: Renamed ConfigurationObserver as BrokerObserver. This class really was intended as a observer for broker-level events which includes configuration but may in future include other non-configuration events such as transactions. QPID-4327: Refactor to simplify TxAccept. Removed un-necessary RangeOps layers. QPID-4327: Optimize brokertest.ready() to improve test runtimes. Diffs (updated) ----- /trunk/qpid/cpp/include/qpid/framing/BufferTypes.h PRE-CREATION /trunk/qpid/cpp/src/CMakeLists.txt 1508523 /trunk/qpid/cpp/src/qpid/broker/Broker.h 1508523 /trunk/qpid/cpp/src/qpid/broker/Broker.cpp 1508523 /trunk/qpid/cpp/src/qpid/broker/BrokerObserver.h PRE-CREATION /trunk/qpid/cpp/src/qpid/broker/BrokerObservers.h PRE-CREATION /trunk/qpid/cpp/src/qpid/broker/ConfigurationObserver.h 1508523 /trunk/qpid/cpp/src/qpid/broker/ConfigurationObservers.h 1508523 /trunk/qpid/cpp/src/qpid/broker/DtxAck.h 1508523 /trunk/qpid/cpp/src/qpid/broker/ExchangeRegistry.cpp 1508523 /trunk/qpid/cpp/src/qpid/broker/MessageStoreModule.h 1508523 /trunk/qpid/cpp/src/qpid/broker/MessageStoreModule.cpp 1508523 /trunk/qpid/cpp/src/qpid/broker/Queue.h 1508523 /trunk/qpid/cpp/src/qpid/broker/Queue.cpp 1508523 /trunk/qpid/cpp/src/qpid/broker/QueueRegistry.cpp 1508523 /trunk/qpid/cpp/src/qpid/broker/RecoveredDequeue.h 1508523 /trunk/qpid/cpp/src/qpid/broker/RecoveredEnqueue.h 1508523 /trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp 1508523 /trunk/qpid/cpp/src/qpid/broker/TransactionObserver.h PRE-CREATION /trunk/qpid/cpp/src/qpid/broker/TxAccept.h 1508523 /trunk/qpid/cpp/src/qpid/broker/TxAccept.cpp 1508523 /trunk/qpid/cpp/src/qpid/broker/TxBuffer.h 1508523 /trunk/qpid/cpp/src/qpid/broker/TxBuffer.cpp 1508523 /trunk/qpid/cpp/src/qpid/broker/TxOp.h 1508523 /trunk/qpid/cpp/src/qpid/ha/Backup.h 1508523 /trunk/qpid/cpp/src/qpid/ha/BrokerReplicator.h 1508523 /trunk/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp 1508523 /trunk/qpid/cpp/src/qpid/ha/Event.h PRE-CREATION /trunk/qpid/cpp/src/qpid/ha/Event.cpp PRE-CREATION /trunk/qpid/cpp/src/qpid/ha/FailoverExchange.cpp 1508523 /trunk/qpid/cpp/src/qpid/ha/HaBroker.h 1508523 /trunk/qpid/cpp/src/qpid/ha/HaBroker.cpp 1508523 /trunk/qpid/cpp/src/qpid/ha/Membership.h 1508523 /trunk/qpid/cpp/src/qpid/ha/Membership.cpp 1508523 /trunk/qpid/cpp/src/qpid/ha/Primary.h 1508523 /trunk/qpid/cpp/src/qpid/ha/Primary.cpp 1508523 /trunk/qpid/cpp/src/qpid/ha/PrimaryTxObserver.h PRE-CREATION /trunk/qpid/cpp/src/qpid/ha/PrimaryTxObserver.cpp PRE-CREATION /trunk/qpid/cpp/src/qpid/ha/QueueReplicator.h 1508523 /trunk/qpid/cpp/src/qpid/ha/QueueReplicator.cpp 1508523 /trunk/qpid/cpp/src/qpid/ha/QueueSnapshots.h 1508523 /trunk/qpid/cpp/src/qpid/ha/RemoteBackup.h 1508523 /trunk/qpid/cpp/src/qpid/ha/RemoteBackup.cpp 1508523 /trunk/qpid/cpp/src/qpid/ha/ReplicatingSubscription.h 1508523 /trunk/qpid/cpp/src/qpid/ha/ReplicatingSubscription.cpp 1508523 /trunk/qpid/cpp/src/qpid/ha/StatusCheck.cpp 1508523 /trunk/qpid/cpp/src/qpid/ha/TxReplicator.h PRE-CREATION /trunk/qpid/cpp/src/qpid/ha/TxReplicator.cpp PRE-CREATION /trunk/qpid/cpp/src/qpid/ha/makeMessage.h 1508523 /trunk/qpid/cpp/src/qpid/ha/makeMessage.cpp 1508523 /trunk/qpid/cpp/src/qpid/ha/types.h 1508523 /trunk/qpid/cpp/src/qpid/ha/types.cpp 1508523 /trunk/qpid/cpp/src/tests/BrokerFixture.h 1508523 /trunk/qpid/cpp/src/tests/CMakeLists.txt 1508523 /trunk/qpid/cpp/src/tests/MessagingFixture.h 1508523 /trunk/qpid/cpp/src/tests/TransactionObserverTest.cpp PRE-CREATION /trunk/qpid/cpp/src/tests/TxMocks.h 1508523 /trunk/qpid/cpp/src/tests/brokertest.py 1508523 /trunk/qpid/cpp/src/tests/cluster_test.cpp PRE-CREATION /trunk/qpid/cpp/src/tests/ha_test.py 1508523 /trunk/qpid/cpp/src/tests/ha_tests.py 1508523 /trunk/qpid/cpp/src/tests/test_env.sh.in 1508523 /trunk/qpid/cpp/src/tests/test_store.cpp 1508523 /trunk/qpid/cpp/src/tests/test_tools.h 1508523 Diff: https://reviews.apache.org/r/12289/diff/ Testing ------- Basic tx replication appears to be working, used temporary log statements to prove the messages were being processed by the TxBuffer on the backup and not just being sent by the normal means. Thanks, Alan Conway