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]

Reply via email to