Re: Review Request 12289: QPID-4327: TransactionObserver interface

2013-07-12 Thread Alan Conway

---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/12289/
---

(Updated July 12, 2013, 4:19 p.m.)


Review request for qpid, Andrew Stitcher and Gordon Sim.


Changes
---

Added bug link


Summary (updated)
-

QPID-4327: TransactionObserver interface


Bugs: QPID-4327
https://issues.apache.org/jira/browse/QPID-4327


Repository: qpid


Description
---

QPID-4327: HA added PrimaryTransactionObserver.

Initial implementation only logs some trace messages.

QPID-4327: 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.


Diffs
-

  /trunk/qpid/cpp/src/CMakeLists.txt 1501768 
  /trunk/qpid/cpp/src/Makefile.am 1501768 
  /trunk/qpid/cpp/src/ha.mk 1501768 
  /trunk/qpid/cpp/src/qpid/broker/Broker.h 1501768 
  /trunk/qpid/cpp/src/qpid/broker/Broker.cpp 1501768 
  /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 1501768 
  /trunk/qpid/cpp/src/qpid/broker/ConfigurationObservers.h 1501768 
  /trunk/qpid/cpp/src/qpid/broker/DtxAck.h 1501768 
  /trunk/qpid/cpp/src/qpid/broker/ExchangeRegistry.cpp 1501768 
  /trunk/qpid/cpp/src/qpid/broker/Queue.h 1501768 
  /trunk/qpid/cpp/src/qpid/broker/Queue.cpp 1501768 
  /trunk/qpid/cpp/src/qpid/broker/QueueRegistry.cpp 1501768 
  /trunk/qpid/cpp/src/qpid/broker/RecoveredDequeue.h 1501768 
  /trunk/qpid/cpp/src/qpid/broker/RecoveredEnqueue.h 1501768 
  /trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp 1501768 
  /trunk/qpid/cpp/src/qpid/broker/TransactionObserver.h PRE-CREATION 
  /trunk/qpid/cpp/src/qpid/broker/TxAccept.h 1501768 
  /trunk/qpid/cpp/src/qpid/broker/TxAccept.cpp 1501768 
  /trunk/qpid/cpp/src/qpid/broker/TxBuffer.h 1501768 
  /trunk/qpid/cpp/src/qpid/broker/TxBuffer.cpp 1501768 
  /trunk/qpid/cpp/src/qpid/broker/TxOp.h 1501768 
  /trunk/qpid/cpp/src/qpid/ha/HaBroker.cpp 1501768 
  /trunk/qpid/cpp/src/qpid/ha/Primary.h 1501768 
  /trunk/qpid/cpp/src/qpid/ha/Primary.cpp 1501768 
  /trunk/qpid/cpp/src/qpid/ha/PrimaryTransactionObserver.h PRE-CREATION 
  /trunk/qpid/cpp/src/qpid/ha/PrimaryTransactionObserver.cpp PRE-CREATION 
  /trunk/qpid/cpp/src/qpid/ha/QueueSnapshots.h 1501768 
  /trunk/qpid/cpp/src/qpid/ha/RemoteBackup.h 1501768 
  /trunk/qpid/cpp/src/qpid/ha/RemoteBackup.cpp 1501768 
  /trunk/qpid/cpp/src/tests/CMakeLists.txt 1501768 
  /trunk/qpid/cpp/src/tests/Makefile.am 1501768 
  /trunk/qpid/cpp/src/tests/TransactionObserverTest.cpp PRE-CREATION 
  /trunk/qpid/cpp/src/tests/TxMocks.h 1501768 
  /trunk/qpid/cpp/src/tests/brokertest.py 1501768 
  /trunk/qpid/cpp/src/tests/ha_tests.py 1501768 
  /trunk/qpid/cpp/src/tests/test_env.sh.in 1501768 
  /trunk/qpid/cpp/src/tests/test_tools.h 1501768 

Diff: https://reviews.apache.org/r/12289/diff/


Testing
---

It compiles


Thanks,

Alan Conway



Re: Review Request 12289: QPID-4327: TransactionObserver interface.

2013-07-08 Thread Gordon Sim

---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/12289/#review22810
---



/trunk/qpid/cpp/src/qpid/broker/TransactionObserver.h
https://reviews.apache.org/r/12289/#comment46520

It's really the enqueue and dequeue operations that are transactional. It 
might be better to define this interface in terms of those.

It would also seem - on the surface at least - a little more consistent to 
have a set of TransactionObservers at the broker level (along side those for 
queues and connections), rather than a factory that is then used to attach 
different observer instances to transaction buffers.

E.g.

class TransactionObserver {
  void enqueued(TransactionContext, const Message, const 
boost::shared_ptrQueue) = 0;
  void dequeued(TransactionContext, const Message, const 
boost::shared_ptrQueue) = 0;
  void started(TransactionContext) = 0;
  void prepared(TransactionContext) = 0;
  void committed(TransactionContext) = 0;
  void rolledback(TransactionContext) = 0;
}

Perhaps adding a 'std::string getId()' method to TransactionContext if 
needed.

Though 1.0 doesn't yet support transactions, DeliveryRecords is an 0-10 
specific class so the interface you have here would need to change for 1.0 
anyway I suspect.


- Gordon Sim


On July 5, 2013, 9:34 p.m., Alan Conway wrote:
 
 ---
 This is an automatically generated e-mail. To reply, visit:
 https://reviews.apache.org/r/12289/
 ---
 
 (Updated July 5, 2013, 9:34 p.m.)
 
 
 Review request for qpid, Andrew Stitcher and Gordon Sim.
 
 
 Repository: qpid
 
 
 Description
 ---
 
 QPID-4327: TransactionObserver interface.
 
 Plugin can set TransactionObserverFactory to create TransactionObservers.
 TransactionObserver interface is called at each point in a transactions 
 lifecycle.
 Currently only allows a single TransactionObserverFactory per broker.
 
 This is a bit ugly, any ideas to make it neater would be much appreciated.
 
 
 Diffs
 -
 
   /trunk/qpid/cpp/src/qpid/broker/Broker.h 1500107 
   /trunk/qpid/cpp/src/qpid/broker/Queue.cpp 1500107 
   /trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp 1500107 
   /trunk/qpid/cpp/src/qpid/broker/TransactionObserver.h PRE-CREATION 
   /trunk/qpid/cpp/src/qpid/broker/TxBuffer.h 1500107 
   /trunk/qpid/cpp/src/tests/brokertest.py 1500107 
   /trunk/qpid/cpp/src/tests/ha_tests.py 1500107 
 
 Diff: https://reviews.apache.org/r/12289/diff/
 
 
 Testing
 ---
 
 It compiles
 
 
 Thanks,
 
 Alan Conway
 




Re: Review Request 12289: QPID-4327: TransactionObserver interface.

2013-07-08 Thread Alan Conway


 On July 8, 2013, 12:10 p.m., Gordon Sim wrote:
  /trunk/qpid/cpp/src/qpid/broker/TransactionObserver.h, line 48
  https://reviews.apache.org/r/12289/diff/1/?file=318402#file318402line48
 
  It's really the enqueue and dequeue operations that are transactional. 
  It might be better to define this interface in terms of those.
  
  It would also seem - on the surface at least - a little more consistent 
  to have a set of TransactionObservers at the broker level (along side those 
  for queues and connections), rather than a factory that is then used to 
  attach different observer instances to transaction buffers.
  
  E.g.
  
  class TransactionObserver {
void enqueued(TransactionContext, const Message, const 
  boost::shared_ptrQueue) = 0;
void dequeued(TransactionContext, const Message, const 
  boost::shared_ptrQueue) = 0;
void started(TransactionContext) = 0;
void prepared(TransactionContext) = 0;
void committed(TransactionContext) = 0;
void rolledback(TransactionContext) = 0;
  }
  
  Perhaps adding a 'std::string getId()' method to TransactionContext if 
  needed.
  
  Though 1.0 doesn't yet support transactions, DeliveryRecords is an 0-10 
  specific class so the interface you have here would need to change for 1.0 
  anyway I suspect.

Regarding It would also seem - on the surface at least - a little more 
consistent to have a set of TransactionObservers at the broker level (along 
side those for queues and connections), rather than a factory that is then used 
to attach different observer instances to transaction buffers.

The way I have it is more consistent with e.g. QueueObserver - an individual 
observer for each queue. It avoids another layer of maps by going direct to the 
correct observer. There is no QueueObserverFactory because a plugin can 
register a ConfigObserver and be informed of queue creation, so can attach it's 
observer. There isn't such an intercept point for transactions (that I know of) 
so I added the factory. Maybe there's a more consistent way to add such a point 
- ConfigObserver doesn't seem the right place though. Maybe ConfigObserver 
could be renamed to something more generic (BrokerEventObserver? yuck.) 

Regarding your interface above I'll rework things on those lines...


- Alan


---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/12289/#review22810
---


On July 5, 2013, 9:34 p.m., Alan Conway wrote:
 
 ---
 This is an automatically generated e-mail. To reply, visit:
 https://reviews.apache.org/r/12289/
 ---
 
 (Updated July 5, 2013, 9:34 p.m.)
 
 
 Review request for qpid, Andrew Stitcher and Gordon Sim.
 
 
 Repository: qpid
 
 
 Description
 ---
 
 QPID-4327: TransactionObserver interface.
 
 Plugin can set TransactionObserverFactory to create TransactionObservers.
 TransactionObserver interface is called at each point in a transactions 
 lifecycle.
 Currently only allows a single TransactionObserverFactory per broker.
 
 This is a bit ugly, any ideas to make it neater would be much appreciated.
 
 
 Diffs
 -
 
   /trunk/qpid/cpp/src/qpid/broker/Broker.h 1500107 
   /trunk/qpid/cpp/src/qpid/broker/Queue.cpp 1500107 
   /trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp 1500107 
   /trunk/qpid/cpp/src/qpid/broker/TransactionObserver.h PRE-CREATION 
   /trunk/qpid/cpp/src/qpid/broker/TxBuffer.h 1500107 
   /trunk/qpid/cpp/src/tests/brokertest.py 1500107 
   /trunk/qpid/cpp/src/tests/ha_tests.py 1500107 
 
 Diff: https://reviews.apache.org/r/12289/diff/
 
 
 Testing
 ---
 
 It compiles
 
 
 Thanks,
 
 Alan Conway
 




Re: Review Request 12289: QPID-4327: TransactionObserver interface.

2013-07-08 Thread Alan Conway

---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/12289/
---

(Updated July 8, 2013, 8:40 p.m.)


Review request for qpid, Andrew Stitcher and Gordon Sim.


Changes
---

Implemented call points, added unit tests. 
Not the final story yet, I will rework based on Gordon's comments 
https://reviews.apache.org/r/12289/diff/1/?file=318402#file318402line48


Repository: qpid


Description (updated)
---

QPID-4327: TransactionObserver interface.

A plugin can set the Broker's TransactionObserverFactory to create
TransactionObservers.  The TransactionObserver interface is called at each point
in a transactions lifecycle.  Currently only allows a single
TransactionObserverFactory per broker.


Diffs (updated)
-

  /trunk/qpid/cpp/src/qpid/broker/Broker.h 1500613 
  /trunk/qpid/cpp/src/qpid/broker/Broker.cpp 1500613 
  /trunk/qpid/cpp/src/qpid/broker/DtxAck.h 1500613 
  /trunk/qpid/cpp/src/qpid/broker/Queue.h 1500613 
  /trunk/qpid/cpp/src/qpid/broker/Queue.cpp 1500613 
  /trunk/qpid/cpp/src/qpid/broker/RecoveredDequeue.h 1500613 
  /trunk/qpid/cpp/src/qpid/broker/RecoveredEnqueue.h 1500613 
  /trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp 1500613 
  /trunk/qpid/cpp/src/qpid/broker/TransactionObserver.h PRE-CREATION 
  /trunk/qpid/cpp/src/qpid/broker/TxAccept.h 1500613 
  /trunk/qpid/cpp/src/qpid/broker/TxAccept.cpp 1500613 
  /trunk/qpid/cpp/src/qpid/broker/TxBuffer.h 1500613 
  /trunk/qpid/cpp/src/qpid/broker/TxBuffer.cpp 1500613 
  /trunk/qpid/cpp/src/qpid/broker/TxOp.h 1500613 
  /trunk/qpid/cpp/src/qpid/ha/HaBroker.cpp 1500613 
  /trunk/qpid/cpp/src/tests/CMakeLists.txt 1500613 
  /trunk/qpid/cpp/src/tests/Makefile.am 1500613 
  /trunk/qpid/cpp/src/tests/TransactionObserverTest.cpp PRE-CREATION 
  /trunk/qpid/cpp/src/tests/TxMocks.h 1500613 
  /trunk/qpid/cpp/src/tests/brokertest.py 1500613 
  /trunk/qpid/cpp/src/tests/ha_tests.py 1500613 
  /trunk/qpid/cpp/src/tests/test_tools.h 1500613 

Diff: https://reviews.apache.org/r/12289/diff/


Testing
---

It compiles


Thanks,

Alan Conway



Re: Review Request 12289: QPID-4327: TransactionObserver interface.

2013-07-08 Thread Gordon Sim


 On July 8, 2013, 12:10 p.m., Gordon Sim wrote:
  /trunk/qpid/cpp/src/qpid/broker/TransactionObserver.h, line 48
  https://reviews.apache.org/r/12289/diff/1/?file=318402#file318402line48
 
  It's really the enqueue and dequeue operations that are transactional. 
  It might be better to define this interface in terms of those.
  
  It would also seem - on the surface at least - a little more consistent 
  to have a set of TransactionObservers at the broker level (along side those 
  for queues and connections), rather than a factory that is then used to 
  attach different observer instances to transaction buffers.
  
  E.g.
  
  class TransactionObserver {
void enqueued(TransactionContext, const Message, const 
  boost::shared_ptrQueue) = 0;
void dequeued(TransactionContext, const Message, const 
  boost::shared_ptrQueue) = 0;
void started(TransactionContext) = 0;
void prepared(TransactionContext) = 0;
void committed(TransactionContext) = 0;
void rolledback(TransactionContext) = 0;
  }
  
  Perhaps adding a 'std::string getId()' method to TransactionContext if 
  needed.
  
  Though 1.0 doesn't yet support transactions, DeliveryRecords is an 0-10 
  specific class so the interface you have here would need to change for 1.0 
  anyway I suspect.
 
 Alan Conway wrote:
 Regarding It would also seem - on the surface at least - a little more 
 consistent to have a set of TransactionObservers at the broker level (along 
 side those for queues and connections), rather than a factory that is then 
 used to attach different observer instances to transaction buffers.
 
 The way I have it is more consistent with e.g. QueueObserver - an 
 individual observer for each queue. It avoids another layer of maps by going 
 direct to the correct observer. There is no QueueObserverFactory because a 
 plugin can register a ConfigObserver and be informed of queue creation, so 
 can attach it's observer. There isn't such an intercept point for 
 transactions (that I know of) so I added the factory. Maybe there's a more 
 consistent way to add such a point - ConfigObserver doesn't seem the right 
 place though. Maybe ConfigObserver could be renamed to something more generic 
 (BrokerEventObserver? yuck.) 
 
 Regarding your interface above I'll rework things on those lines...

What about having a broker level set of observers, but adding those to each 
TransactionContext/TransactionBuffer and allowing code to attach additional 
observers to specific TransactionContexts/TransactionBuffers if desired?


- Gordon


---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/12289/#review22810
---


On July 8, 2013, 8:40 p.m., Alan Conway wrote:
 
 ---
 This is an automatically generated e-mail. To reply, visit:
 https://reviews.apache.org/r/12289/
 ---
 
 (Updated July 8, 2013, 8:40 p.m.)
 
 
 Review request for qpid, Andrew Stitcher and Gordon Sim.
 
 
 Repository: qpid
 
 
 Description
 ---
 
 QPID-4327: TransactionObserver interface.
 
 A plugin can set the Broker's TransactionObserverFactory to create
 TransactionObservers.  The TransactionObserver interface is called at each 
 point
 in a transactions lifecycle.  Currently only allows a single
 TransactionObserverFactory per broker.
 
 
 Diffs
 -
 
   /trunk/qpid/cpp/src/qpid/broker/Broker.h 1500613 
   /trunk/qpid/cpp/src/qpid/broker/Broker.cpp 1500613 
   /trunk/qpid/cpp/src/qpid/broker/DtxAck.h 1500613 
   /trunk/qpid/cpp/src/qpid/broker/Queue.h 1500613 
   /trunk/qpid/cpp/src/qpid/broker/Queue.cpp 1500613 
   /trunk/qpid/cpp/src/qpid/broker/RecoveredDequeue.h 1500613 
   /trunk/qpid/cpp/src/qpid/broker/RecoveredEnqueue.h 1500613 
   /trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp 1500613 
   /trunk/qpid/cpp/src/qpid/broker/TransactionObserver.h PRE-CREATION 
   /trunk/qpid/cpp/src/qpid/broker/TxAccept.h 1500613 
   /trunk/qpid/cpp/src/qpid/broker/TxAccept.cpp 1500613 
   /trunk/qpid/cpp/src/qpid/broker/TxBuffer.h 1500613 
   /trunk/qpid/cpp/src/qpid/broker/TxBuffer.cpp 1500613 
   /trunk/qpid/cpp/src/qpid/broker/TxOp.h 1500613 
   /trunk/qpid/cpp/src/qpid/ha/HaBroker.cpp 1500613 
   /trunk/qpid/cpp/src/tests/CMakeLists.txt 1500613 
   /trunk/qpid/cpp/src/tests/Makefile.am 1500613 
   /trunk/qpid/cpp/src/tests/TransactionObserverTest.cpp PRE-CREATION 
   /trunk/qpid/cpp/src/tests/TxMocks.h 1500613 
   /trunk/qpid/cpp/src/tests/brokertest.py 1500613 
   /trunk/qpid/cpp/src/tests/ha_tests.py 1500613 
   /trunk/qpid/cpp/src/tests/test_tools.h 1500613 
 
 Diff: https://reviews.apache.org/r/12289/diff/
 
 
 Testing
 ---
 
 It compiles
 
 
 Thanks,
 
 Alan Conway
 




Review Request 12289: QPID-4327: TransactionObserver interface.

2013-07-05 Thread Alan Conway

---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/12289/
---

Review request for qpid, Andrew Stitcher and Gordon Sim.


Repository: qpid


Description
---

QPID-4327: TransactionObserver interface.

Plugin can set TransactionObserverFactory to create TransactionObservers.
TransactionObserver interface is called at each point in a transactions 
lifecycle.
Currently only allows a single TransactionObserverFactory per broker.

This is a bit ugly, any ideas to make it neater would be much appreciated.


Diffs
-

  /trunk/qpid/cpp/src/qpid/broker/Broker.h 1500107 
  /trunk/qpid/cpp/src/qpid/broker/Queue.cpp 1500107 
  /trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp 1500107 
  /trunk/qpid/cpp/src/qpid/broker/TransactionObserver.h PRE-CREATION 
  /trunk/qpid/cpp/src/qpid/broker/TxBuffer.h 1500107 
  /trunk/qpid/cpp/src/tests/brokertest.py 1500107 
  /trunk/qpid/cpp/src/tests/ha_tests.py 1500107 

Diff: https://reviews.apache.org/r/12289/diff/


Testing
---

It compiles


Thanks,

Alan Conway