Author: gsim
Date: Tue Nov  7 08:58:31 2006
New Revision: 472166

URL: http://svn.apache.org/viewvc?view=rev&rev=472166
Log:
Modified TransactionalStore to return the txn ctxt as an auto_ptr to make 
ownership more obvious.

Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/NullMessageStore.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/NullMessageStore.h
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/TransactionalStore.h
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/TxBuffer.cpp
    incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxAckTest.cpp
    incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxBufferTest.cpp
    incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxPublishTest.cpp

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/NullMessageStore.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/NullMessageStore.cpp?view=diff&rev=472166&r1=472165&r2=472166
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/NullMessageStore.cpp 
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/NullMessageStore.cpp Tue Nov  
7 08:58:31 2006
@@ -46,8 +46,8 @@
 void NullMessageStore::aborted(const string * const){
     std::cout << "WARNING: Persistence not enabled." << std::endl;
 }
-TransactionContext* NullMessageStore::begin(){
-    return 0;
+std::auto_ptr<TransactionContext> NullMessageStore::begin(){
+    return std::auto_ptr<TransactionContext>();
 }
 void NullMessageStore::commit(TransactionContext*){
 }

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/NullMessageStore.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/NullMessageStore.h?view=diff&rev=472166&r1=472165&r2=472166
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/NullMessageStore.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/NullMessageStore.h Tue Nov  7 
08:58:31 2006
@@ -39,7 +39,7 @@
             void dequeue(TransactionContext* ctxt, Message::shared_ptr& msg, 
const Queue& queue, const string * const xid);
             void committed(const string * const xid);
             void aborted(const string * const xid);
-            TransactionContext* begin();
+            std::auto_ptr<TransactionContext> begin();
             void commit(TransactionContext* ctxt);
             void abort(TransactionContext* ctxt);
             ~NullMessageStore(){}

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/TransactionalStore.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/TransactionalStore.h?view=diff&rev=472166&r1=472165&r2=472166
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/TransactionalStore.h 
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/TransactionalStore.h Tue Nov  
7 08:58:31 2006
@@ -18,8 +18,12 @@
 #ifndef _TransactionalStore_
 #define _TransactionalStore_
 
+#include <memory>
+
 namespace qpid {
     namespace broker {
+        struct InvalidTransactionContextException : public std::exception {};
+
         class TransactionContext{
         public:
             virtual ~TransactionContext(){}
@@ -27,7 +31,7 @@
 
         class TransactionalStore{
         public:
-            virtual TransactionContext* begin() = 0;
+            virtual std::auto_ptr<TransactionContext> begin() = 0;
             virtual void commit(TransactionContext*) = 0;
             virtual void abort(TransactionContext*) = 0;
 

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/TxBuffer.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/TxBuffer.cpp?view=diff&rev=472166&r1=472165&r2=472166
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/TxBuffer.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/TxBuffer.cpp Tue Nov  7 
08:58:31 2006
@@ -20,27 +20,31 @@
 using std::mem_fun;
 using namespace qpid::broker;
 
-bool TxBuffer::prepare(TransactionalStore* const store){
-    TransactionContext* ctxt(0);
+bool TxBuffer::prepare(TransactionalStore* const store)
+{
+    std::auto_ptr<TransactionContext> ctxt;
     if(store) ctxt = store->begin();
     for(op_iterator i = ops.begin(); i < ops.end(); i++){
-        if(!(*i)->prepare(ctxt)){
-            if(store) store->abort(ctxt);
+        if(!(*i)->prepare(ctxt.get())){
+            if(store) store->abort(ctxt.get());
             return false;
         }
     }
-    if(store) store->commit(ctxt);
+    if(store) store->commit(ctxt.get());
     return true;
 }
 
-void TxBuffer::commit(){
+void TxBuffer::commit()
+{
     for_each(ops.begin(), ops.end(), mem_fun(&TxOp::commit));
 }
 
-void TxBuffer::rollback(){
+void TxBuffer::rollback()
+{
     for_each(ops.begin(), ops.end(), mem_fun(&TxOp::rollback));
 }
 
-void TxBuffer::enlist(TxOp* const op){
+void TxBuffer::enlist(TxOp* const op)
+{
     ops.push_back(op);
 }

Modified: incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxAckTest.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxAckTest.cpp?view=diff&rev=472166&r1=472165&r2=472166
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxAckTest.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxAckTest.cpp Tue Nov  
7 08:58:31 2006
@@ -48,7 +48,7 @@
         void enqueue(TransactionContext*, Message::shared_ptr&, const Queue&, 
const string * const){}
         void committed(const string * const){}
         void aborted(const string * const){}
-        TransactionContext* begin(){ return 0; }
+        std::auto_ptr<TransactionContext> begin(){ return 
std::auto_ptr<TransactionContext>(); }
         void commit(TransactionContext*){}
         void abort(TransactionContext*){}        
         ~TestMessageStore(){}

Modified: incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxBufferTest.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxBufferTest.cpp?view=diff&rev=472166&r1=472165&r2=472166
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxBufferTest.cpp 
(original)
+++ incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxBufferTest.cpp Tue 
Nov  7 08:58:31 2006
@@ -34,35 +34,6 @@
 
 class TxBufferTest : public CppUnit::TestCase  
 {
-    class TestTransactionContext : public TransactionContext{
-        enum states {OPEN = 1, COMMITTED = 2, ABORTED = 3};
-        int state;
-    public:
-        TestTransactionContext() : state(OPEN) {}
-        void commit(){
-            if(state != OPEN) throw "txn already completed";
-            state = COMMITTED;
-        }
-
-        void abort(){
-            if(state != OPEN) throw "txn already completed";
-            state = ABORTED;
-        }
-
-        bool isCommitted(){
-            return state == COMMITTED;
-        }
-
-        bool isAborted(){
-            return state == ABORTED;
-        }
-
-        bool isOpen(){
-            return state == OPEN;
-        }
-        ~TestTransactionContext(){}
-    };
-
     class MockTxOp : public TxOp{
         enum op_codes {PREPARE=2, COMMIT=4, ROLLBACK=8};
         std::vector<int> expected;
@@ -105,24 +76,45 @@
         std::vector<int> expected;
         std::vector<int> actual;
 
+        enum states {OPEN = 1, COMMITTED = 2, ABORTED = 3};
+        int state;
+
+        class TestTransactionContext : public TransactionContext{
+            MockTransactionalStore* store;
+        public:
+            TestTransactionContext(MockTransactionalStore* _store) : 
store(_store) {}
+            void commit(){
+                if(store->state != OPEN) throw "txn already completed";
+                store->state = COMMITTED;
+            }
+
+            void abort(){
+                if(store->state != OPEN) throw "txn already completed";
+                store->state = ABORTED;
+            }
+            ~TestTransactionContext(){}
+        };
+
+
     public:
-        TestTransactionContext txn;
+        MockTransactionalStore() : state(OPEN){}
 
-        TransactionContext* begin(){
+        std::auto_ptr<TransactionContext> begin(){ 
             actual.push_back(BEGIN);
-            return &txn;
+            std::auto_ptr<TransactionContext> txn(new 
TestTransactionContext(this));
+            return txn;
         }
         void commit(TransactionContext* ctxt){
             actual.push_back(COMMIT);
-            TestTransactionContext* 
_txn(dynamic_cast<TestTransactionContext*>(ctxt));
-            CPPUNIT_ASSERT_EQUAL(_txn, &txn);
-            _txn->commit();
+            TestTransactionContext* 
txn(dynamic_cast<TestTransactionContext*>(ctxt));
+            CPPUNIT_ASSERT(txn);
+            txn->commit();
         }
         void abort(TransactionContext* ctxt){
             actual.push_back(ABORT);
-            TestTransactionContext* 
_txn(dynamic_cast<TestTransactionContext*>(ctxt));
-            CPPUNIT_ASSERT_EQUAL(_txn, &txn);
-            _txn->abort();
+            TestTransactionContext* 
txn(dynamic_cast<TestTransactionContext*>(ctxt));
+            CPPUNIT_ASSERT(txn);
+            txn->abort();
         }        
         MockTransactionalStore& expectBegin(){
             expected.push_back(BEGIN);
@@ -139,6 +131,18 @@
         void check(){
             assertEqualVector(expected, actual);
         }
+
+        bool isCommitted(){
+            return state == COMMITTED;
+        }
+        
+        bool isAborted(){
+            return state == ABORTED;
+        }
+        
+        bool isOpen(){
+            return state == OPEN;
+        }
         ~MockTransactionalStore(){}
     };
 
@@ -170,7 +174,7 @@
         CPPUNIT_ASSERT(buffer.prepare(&store));
         buffer.commit();
         store.check();
-        CPPUNIT_ASSERT(store.txn.isCommitted());
+        CPPUNIT_ASSERT(store.isCommitted());
         opA.check();
         opB.check();
         opC.check();
@@ -193,7 +197,7 @@
 
         CPPUNIT_ASSERT(!buffer.prepare(&store));
         store.check();
-        CPPUNIT_ASSERT(store.txn.isAborted());
+        CPPUNIT_ASSERT(store.isAborted());
         opA.check();
         opB.check();
         opC.check();

Modified: incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxPublishTest.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxPublishTest.cpp?view=diff&rev=472166&r1=472165&r2=472166
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxPublishTest.cpp 
(original)
+++ incubator/qpid/trunk/qpid/cpp/test/unit/qpid/broker/TxPublishTest.cpp Tue 
Nov  7 08:58:31 2006
@@ -49,7 +49,7 @@
         void dequeue(TransactionContext*, Message::shared_ptr&, const Queue&, 
const string * const){}
         void committed(const string * const){}
         void aborted(const string * const){}
-        TransactionContext* begin(){ return 0; }
+        std::auto_ptr<TransactionContext> begin(){ return 
std::auto_ptr<TransactionContext>(); }
         void commit(TransactionContext*){}
         void abort(TransactionContext*){}        
         ~TestMessageStore(){}


Reply via email to