Author: kpvdr
Date: Tue Jun 26 18:23:27 2012
New Revision: 1354149
URL: http://svn.apache.org/viewvc?rev=1354149&view=rev
Log:
QPID-3858: WIP - fixed a few logic errors and race conditions in the consume
and transactional code
Modified:
qpid/branches/asyncstore/cpp/src/qpid/asyncStore/TxnHandleImpl.cpp
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/DeliveryRecord.cpp
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/DeliveryRecord.h
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/MessageConsumer.cpp
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/MessageConsumer.h
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/PerfTest.cpp
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/TxnAccept.cpp
Modified: qpid/branches/asyncstore/cpp/src/qpid/asyncStore/TxnHandleImpl.cpp
URL:
http://svn.apache.org/viewvc/qpid/branches/asyncstore/cpp/src/qpid/asyncStore/TxnHandleImpl.cpp?rev=1354149&r1=1354148&r2=1354149&view=diff
==============================================================================
--- qpid/branches/asyncstore/cpp/src/qpid/asyncStore/TxnHandleImpl.cpp
(original)
+++ qpid/branches/asyncstore/cpp/src/qpid/asyncStore/TxnHandleImpl.cpp Tue Jun
26 18:23:27 2012
@@ -110,7 +110,10 @@ void
TxnHandleImpl::createLocalXid()
{
uuid_t uuid;
+
+ // TODO: This call might not be thread safe - Valgrind's helgrind tool
emits warnings for this:
::uuid_generate_random(uuid);
+
char uuidStr[37]; // 36-char uuid + trailing '\0'
::uuid_unparse(uuid, uuidStr);
m_xid.assign(uuidStr);
Modified:
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/DeliveryRecord.cpp
URL:
http://svn.apache.org/viewvc/qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/DeliveryRecord.cpp?rev=1354149&r1=1354148&r2=1354149&view=diff
==============================================================================
---
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/DeliveryRecord.cpp
(original)
+++
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/DeliveryRecord.cpp
Tue Jun 26 18:23:27 2012
@@ -54,19 +54,6 @@ DeliveryRecord::accept()
return isRedundant();
}
-/*
-bool
-DeliveryRecord::accept(qpid::broker::TxnHandle& txn)
-{
- if (!m_ended) {
- m_queuedMessage.getQueue()->dequeue(txn, m_queuedMessage);
- m_accepted = true;
- setEnded();
- }
- return isRedundant();
-}
-*/
-
bool
DeliveryRecord::isAccepted() const
{
@@ -102,9 +89,7 @@ DeliveryRecord::dequeue(qpid::broker::Tx
void
DeliveryRecord::committed() const
{
-//std::cout << "DeliveryRecord::committed()" << std::endl << std::flush;
- m_msgConsumer.dequeueComplete();
- //m_queuedMessage.getQueue()->dequeueCommitted(m_queuedMessage);
+ m_msgConsumer.commitComplete();
}
QueuedMessage
Modified:
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/DeliveryRecord.h
URL:
http://svn.apache.org/viewvc/qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/DeliveryRecord.h?rev=1354149&r1=1354148&r2=1354149&view=diff
==============================================================================
---
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/DeliveryRecord.h
(original)
+++
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/DeliveryRecord.h
Tue Jun 26 18:23:27 2012
@@ -44,7 +44,6 @@ public:
bool accepted);
virtual ~DeliveryRecord();
bool accept();
-// bool accept(qpid::broker::TxnHandle& txn);
bool isAccepted() const;
bool setEnded();
bool isEnded() const;
Modified:
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/MessageConsumer.cpp
URL:
http://svn.apache.org/viewvc/qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/MessageConsumer.cpp?rev=1354149&r1=1354148&r2=1354149&view=diff
==============================================================================
---
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/MessageConsumer.cpp
(original)
+++
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/MessageConsumer.cpp
Tue Jun 26 18:23:27 2012
@@ -53,17 +53,12 @@ MessageConsumer::~MessageConsumer()
void
MessageConsumer::record(boost::shared_ptr<DeliveryRecord> dr)
{
- // TODO: May need a lock?
m_unacked.push_back(dr);
}
void
-MessageConsumer::dequeueComplete()
-{
-//std::cout << "MessageConsumer::dequeueComplete()" << std::endl << std::flush;
- // TODO: May need a lock
- //++m_numMsgs;
-}
+MessageConsumer::commitComplete()
+{}
void*
MessageConsumer::runConsumers()
@@ -75,8 +70,10 @@ MessageConsumer::runConsumers()
tb = new qpid::broker::TxnBuffer(m_resultQueue);
}
+ uint32_t msgsPerConsumer = m_perfTestParams.m_numEnqThreadsPerQueue *
m_perfTestParams.m_numMsgs /
+ m_perfTestParams.m_numDeqThreadsPerQueue;
uint32_t numMsgs = 0UL;
- while (numMsgs < m_perfTestParams.m_numMsgs) {
+ while (numMsgs < msgsPerConsumer) {
if (m_queue->dispatch(*this)) {
++numMsgs;
if (useTxns) {
@@ -101,7 +98,6 @@ MessageConsumer::runConsumers()
(*i)->accept();
}
m_unacked.clear();
- //++numMsgs;
}
} else {
::usleep(1000); // TODO - replace this poller with condition
variable
Modified:
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/MessageConsumer.h
URL:
http://svn.apache.org/viewvc/qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/MessageConsumer.h?rev=1354149&r1=1354148&r2=1354149&view=diff
==============================================================================
---
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/MessageConsumer.h
(original)
+++
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/MessageConsumer.h
Tue Jun 26 18:23:27 2012
@@ -52,7 +52,7 @@ public:
boost::shared_ptr<SimpleQueue> queue);
virtual ~MessageConsumer();
void record(boost::shared_ptr<DeliveryRecord> dr);
- void dequeueComplete();
+ void commitComplete();
void* runConsumers();
static void* startConsumers(void* ptr);
Modified:
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/PerfTest.cpp
URL:
http://svn.apache.org/viewvc/qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/PerfTest.cpp?rev=1354149&r1=1354148&r2=1354149&view=diff
==============================================================================
---
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/PerfTest.cpp
(original)
+++
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/PerfTest.cpp
Tue Jun 26 18:23:27 2012
@@ -80,16 +80,23 @@ PerfTest::run()
tests::storePerftools::common::ScopedTimer st(m_testResult);
for (uint16_t q = 0; q < m_testOpts.m_numQueues; q++) {
- boost::shared_ptr<MessageProducer> mp(new
MessageProducer(m_testOpts, m_msgData, m_store, m_resultQueue, m_queueList[q]));
- m_producers.push_back(mp);
for (uint16_t t = 0; t < m_testOpts.m_numEnqThreadsPerQueue; t++)
{ // TODO - replace with qpid threads
+ boost::shared_ptr<MessageProducer> mp(new
MessageProducer(m_testOpts,
+
m_msgData,
+
m_store,
+
m_resultQueue,
+
m_queueList[q]));
+ m_producers.push_back(mp);
boost::shared_ptr<tests::storePerftools::common::Thread>
tp(new tests::storePerftools::common::Thread(mp->startProducers,
reinterpret_cast<void*>(mp.get())));
threads.push_back(tp);
}
- boost::shared_ptr<MessageConsumer> mc(new
MessageConsumer(m_testOpts, m_store, m_resultQueue, m_queueList[q]));
- m_consumers.push_back(mc);
for (uint16_t dt = 0; dt < m_testOpts.m_numDeqThreadsPerQueue;
++dt) { // TODO - replace with qpid threads
+ boost::shared_ptr<MessageConsumer> mc(new
MessageConsumer(m_testOpts,
+
m_store,
+
m_resultQueue,
+
m_queueList[q]));
+ m_consumers.push_back(mc);
boost::shared_ptr<tests::storePerftools::common::Thread>
tp(new tests::storePerftools::common::Thread(mc->startConsumers,
reinterpret_cast<void*>(mc.get())));
threads.push_back(tp);
Modified:
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/TxnAccept.cpp
URL:
http://svn.apache.org/viewvc/qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/TxnAccept.cpp?rev=1354149&r1=1354148&r2=1354149&view=diff
==============================================================================
---
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/TxnAccept.cpp
(original)
+++
qpid/branches/asyncstore/cpp/src/tests/storePerftools/asyncPerf/TxnAccept.cpp
Tue Jun 26 18:23:27 2012
@@ -30,7 +30,7 @@ namespace storePerftools {
namespace asyncPerf {
TxnAccept::TxnAccept(std::deque<boost::shared_ptr<DeliveryRecord> >& ops) :
- m_ops(ops.begin(), ops.end())
+ m_ops(ops)
{}
TxnAccept::~TxnAccept()
@@ -63,7 +63,6 @@ TxnAccept::commit() throw()
(*i)->committed();
(*i)->setEnded();
}
- //m_ops.clear();
} catch (const std::exception& e) {
std::cerr << "TxnAccept: Failed to commit transaction: " << e.what()
<< std::endl;
} catch(...) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]