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