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(){}