You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2008/08/05 15:39:05 UTC
svn commit: r682710 - in /incubator/qpid/trunk/qpid:
cpp/src/qpid/broker/Queue.cpp cpp/src/qpid/broker/Queue.h
specs/management-schema.xml
Author: tross
Date: Tue Aug 5 06:39:04 2008
New Revision: 682710
URL: http://svn.apache.org/viewvc?rev=682710&view=rev
Log:
QPID-1214 - Committed William's patch
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.h
incubator/qpid/trunk/qpid/specs/management-schema.xml
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp?rev=682710&r1=682709&r2=682710&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Tue Aug 5 06:39:04 2008
@@ -31,6 +31,7 @@
#include "qpid/framing/reply_exceptions.h"
#include "qpid/sys/Monitor.h"
#include "qpid/sys/Time.h"
+#include "qpid/management/ArgsQueuePurge.h"
#include <iostream>
#include <algorithm>
@@ -372,11 +373,24 @@
return msg;
}
-uint32_t Queue::purge(){
+/**
+ * purge - for purging all or some messages on a queue
+ * depending on the purge_request
+ *
+ * purge_request == 0 then purge all messages
+ * == N then purge N messages from queue
+ * Sometimes purge_request == 1 to unblock the top of queue
+ */
+uint32_t Queue::purge(const uint32_t purge_request){
Mutex::ScopedLock locker(messageLock);
- int count = messages.size();
- while(!messages.empty()) {
+ uint32_t purge_count = purge_request; // only comes into play if >0
+
+ uint32_t count = 0;
+ // Either purge them all or just the some (purge_count) while the queue isn't empty.
+ while((!purge_request || purge_count--) && !messages.empty())
+ {
popAndDequeue();
+ count++;
}
return count;
}
@@ -710,7 +724,7 @@
}
Manageable::status_t Queue::ManagementMethod (uint32_t methodId,
- Args& /*args*/)
+ Args& args)
{
Manageable::status_t status = Manageable::STATUS_UNKNOWN_METHOD;
@@ -719,7 +733,8 @@
switch (methodId)
{
case management::Queue::METHOD_PURGE :
- purge ();
+ management::ArgsQueuePurge iargs = dynamic_cast<const management::ArgsQueuePurge&>(args);
+ purge (iargs.i_request);
status = Manageable::STATUS_OK;
break;
}
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.h?rev=682710&r1=682709&r2=682710&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.h Tue Aug 5 06:39:04 2008
@@ -161,7 +161,8 @@
void consume(Consumer& c, bool exclusive = false);
void cancel(Consumer& c);
- uint32_t purge();
+ uint32_t purge(const uint32_t purge_request = 0); //defaults to all messages
+
uint32_t getMessageCount() const;
uint32_t getConsumerCount() const;
inline const string& getName() const { return name; }
Modified: incubator/qpid/trunk/qpid/specs/management-schema.xml
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/specs/management-schema.xml?rev=682710&r1=682709&r2=682710&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/specs/management-schema.xml (original)
+++ incubator/qpid/trunk/qpid/specs/management-schema.xml Tue Aug 5 06:39:04 2008
@@ -160,7 +160,9 @@
<statistic name="unackedMessages" type="hilo32" unit="message" desc="Messages consumed but not yet acked"/>
<statistic name="messageLatency" type="mmaTime" unit="nanosecond" desc="Broker latency through this queue"/>
- <method name="purge" desc="Discard all messages on queue"/>
+ <method name="purge" desc="Discard all or some messages on a queue">
+ <arg name="request" dir="I" type="uint32" desc="0 for all messages or n>0 for n messages"/>
+ </method>
</class>
<!--