You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2009/05/01 21:59:57 UTC

svn commit: r770802 - in /qpid/trunk/qpid/cpp/src/qpid/broker: DeliveryRecord.cpp DeliveryRecord.h DtxAck.cpp DtxAck.h SemanticState.cpp TxAccept.cpp

Author: aconway
Date: Fri May  1 19:59:57 2009
New Revision: 770802

URL: http://svn.apache.org/viewvc?rev=770802&view=rev
Log:
Replace std::list with std::deque for SemanticState::unacked - more efficient, improves latency.

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/DeliveryRecord.cpp
    qpid/trunk/qpid/cpp/src/qpid/broker/DeliveryRecord.h
    qpid/trunk/qpid/cpp/src/qpid/broker/DtxAck.cpp
    qpid/trunk/qpid/cpp/src/qpid/broker/DtxAck.h
    qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp
    qpid/trunk/qpid/cpp/src/qpid/broker/TxAccept.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/DeliveryRecord.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/DeliveryRecord.cpp?rev=770802&r1=770801&r2=770802&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/DeliveryRecord.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/DeliveryRecord.cpp Fri May  1 19:59:57 2009
@@ -179,8 +179,8 @@
 
 AckRange DeliveryRecord::findRange(DeliveryRecords& records, DeliveryId first, DeliveryId last)
 {
-    ack_iterator start = find_if(records.begin(), records.end(), boost::bind(&DeliveryRecord::matchOrAfter, _1, first));
-    ack_iterator end = start;
+    DeliveryRecords::iterator start = find_if(records.begin(), records.end(), boost::bind(&DeliveryRecord::matchOrAfter, _1, first));
+    DeliveryRecords::iterator end = start;
      
     if (start != records.end()) {
         if (first == last) {

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/DeliveryRecord.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/DeliveryRecord.h?rev=770802&r1=770801&r2=770802&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/DeliveryRecord.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/DeliveryRecord.h Fri May  1 19:59:57 2009
@@ -37,25 +37,23 @@
 class SemanticState;
 class DeliveryRecord;
 
-typedef std::list<DeliveryRecord> DeliveryRecords; 
-typedef std::list<DeliveryRecord>::iterator ack_iterator; 
+typedef std::deque<DeliveryRecord> DeliveryRecords; 
 
 struct AckRange
 {
-    ack_iterator start;
-    ack_iterator end;    
-    AckRange(ack_iterator _start, ack_iterator _end) : start(_start), end(_end) {}
+    DeliveryRecords::iterator start;
+    DeliveryRecords::iterator end;    
+    AckRange(DeliveryRecords::iterator _start, DeliveryRecords::iterator _end) : start(_start), end(_end) {}
 };
 
 
 /**
  * Record of a delivery for which an ack is outstanding.
  */
-class DeliveryRecord
-{
+class DeliveryRecord {
     QueuedMessage msg;
     mutable Queue::shared_ptr queue;
-    const std::string tag;
+    std::string tag;
     DeliveryId id;
     bool acquired;
     bool acceptExpected;
@@ -63,7 +61,7 @@
 
     bool completed;
     bool ended;
-    const bool windowing;
+    bool windowing;
 
     /**
      * Record required credit on construction as the pointer to the
@@ -72,7 +70,7 @@
      * to reallocate credit when it is completed (which could happen
      * after that).
      */
-    const uint32_t credit;
+    uint32_t credit;
 
   public:
     QPID_BROKER_EXTERN DeliveryRecord(const QueuedMessage& msg,

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/DtxAck.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/DtxAck.cpp?rev=770802&r1=770801&r2=770802&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/DtxAck.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/DtxAck.cpp Fri May  1 19:59:57 2009
@@ -26,7 +26,7 @@
 using std::mem_fun_ref;
 using namespace qpid::broker;
 
-DtxAck::DtxAck(const qpid::framing::SequenceSet& acked, std::list<DeliveryRecord>& unacked)
+DtxAck::DtxAck(const qpid::framing::SequenceSet& acked, DeliveryRecords& unacked)
 {
     remove_copy_if(unacked.begin(), unacked.end(), inserter(pending, pending.end()), 
                    not1(bind2nd(mem_fun_ref(&DeliveryRecord::coveredBy), &acked)));
@@ -36,7 +36,7 @@
 {
     try{
         //record dequeue in the store
-        for (ack_iterator i = pending.begin(); i != pending.end(); i++) {
+        for (DeliveryRecords::iterator i = pending.begin(); i != pending.end(); i++) {
             i->dequeue(ctxt);
         }
         return true;

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/DtxAck.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/DtxAck.h?rev=770802&r1=770801&r2=770802&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/DtxAck.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/DtxAck.h Fri May  1 19:59:57 2009
@@ -31,10 +31,10 @@
 namespace qpid {
     namespace broker {
         class DtxAck : public TxOp{
-            std::list<DeliveryRecord> pending;
+            DeliveryRecords pending;
 
         public:
-            DtxAck(const framing::SequenceSet& acked, std::list<DeliveryRecord>& unacked);
+            DtxAck(const framing::SequenceSet& acked, DeliveryRecords& unacked);
             virtual bool prepare(TransactionContext* ctxt) throw();
             virtual void commit() throw();
             virtual void rollback() throw();

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp?rev=770802&r1=770801&r2=770802&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp Fri May  1 19:59:57 2009
@@ -440,7 +440,7 @@
         //unconfirmed messages re redelivered and therefore have their
         //id adjusted, confirmed messages are not and so the ordering
         //w.r.t id is lost
-        unacked.sort();
+        std::sort(unacked.begin(), unacked.end());
     }
 }
 
@@ -642,12 +642,12 @@
 
             //if the messages are already completed, they can be
             //removed from the record
-            unacked.remove_if(mem_fun_ref(&DeliveryRecord::isRedundant));
+            unacked.erase(std::remove_if(unacked.begin(), unacked.end(), mem_fun_ref(&DeliveryRecord::isRedundant)), unacked.end());
 
         }
     } else {
         for_each(range.start, range.end, boost::bind(&DeliveryRecord::accept, _1, (TransactionContext*) 0));
-        unacked.remove_if(mem_fun_ref(&DeliveryRecord::isRedundant));
+        unacked.erase(std::remove_if(unacked.begin(), unacked.end(), mem_fun_ref(&DeliveryRecord::isRedundant)), unacked.end());
     }
 }
 
@@ -655,7 +655,7 @@
 {
     AckRange range = findRange(first, last);
     for_each(range.start, range.end, boost::bind(&SemanticState::complete, this, _1));
-    unacked.remove_if(mem_fun_ref(&DeliveryRecord::isRedundant));
+    unacked.erase(std::remove_if(unacked.begin(), unacked.end(), mem_fun_ref(&DeliveryRecord::isRedundant)), unacked.end());
     requestDispatch();
 }
 

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/TxAccept.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/TxAccept.cpp?rev=770802&r1=770801&r2=770802&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/TxAccept.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/TxAccept.cpp Fri May  1 19:59:57 2009
@@ -58,8 +58,8 @@
     std::for_each(ranges.begin(), ranges.end(), bind(&RangeOp::commit, _1));
     //now remove if isRedundant():
     if (!ranges.empty()) {
-        ack_iterator i = ranges.front().range.start;
-        ack_iterator end = ranges.back().range.end;
+        DeliveryRecords::iterator i = ranges.front().range.start;
+        DeliveryRecords::iterator end = ranges.back().range.end;
         while (i != end) {
             if (i->isRedundant()) {
                 i = unacked.erase(i);



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org