You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by cc...@apache.org on 2007/06/29 23:16:18 UTC
svn commit: r552037 - in /incubator/qpid/trunk/qpid/cpp/src/qpid/broker:
AutoDelete.cpp AutoDelete.h Broker.cpp BrokerAdapter.cpp
ConnectionFactory.cpp
Author: cctrieloff
Date: Fri Jun 29 14:16:17 2007
New Revision: 552037
URL: http://svn.apache.org/viewvc?view=rev&rev=552037
Log:
Updated AutoDelete, now only run when auto delete queues exist and
additional auto delete queues being declared. cuts 1-3% of CPU time
for concurrent publisher run.
Could do with some more auto delete tests...
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/AutoDelete.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/AutoDelete.h
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Broker.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/BrokerAdapter.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionFactory.cpp
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/AutoDelete.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/AutoDelete.cpp?view=diff&rev=552037&r1=552036&r2=552037
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/AutoDelete.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/AutoDelete.cpp Fri Jun 29 14:16:17 2007
@@ -25,12 +25,12 @@
using namespace qpid::broker;
using namespace qpid::sys;
-AutoDelete::AutoDelete(QueueRegistry* const _registry, uint32_t _period)
- : registry(_registry), period(_period*TIME_MSEC), stopped(true) { }
+AutoDelete::AutoDelete(QueueRegistry* const _registry, uint32_t _water_mark)
+ : registry(_registry), high_water_mark(_water_mark), water_mark(0) { }
void AutoDelete::add(Queue::shared_ptr const queue){
- Mutex::ScopedLock l(lock);
- queues.push(queue);
+ Mutex::ScopedLock l(lock);
+ queues.push(queue);
}
Queue::shared_ptr const AutoDelete::pop(){
@@ -43,7 +43,15 @@
return next;
}
-void AutoDelete::process(){
+void AutoDelete::clean(){
+ if (water_mark++ < high_water_mark)
+ return;
+ water_mark =0;
+ cleanNow();
+}
+
+
+void AutoDelete::cleanNow(){
Queue::shared_ptr seen;
for(Queue::shared_ptr q = pop(); q; q = pop()){
if(seen == q){
@@ -58,30 +66,9 @@
if(!seen) seen = q;
}
}
+
}
-void AutoDelete::run(){
- Monitor::ScopedLock l(monitor);
- while(!stopped){
- process();
- monitor.wait(AbsTime(now(), period));
- }
-}
-void AutoDelete::start(){
- Monitor::ScopedLock l(monitor);
- if(stopped){
- stopped = false;
- runner = Thread(this);
- }
-}
-void AutoDelete::stop(){
- {
- Monitor::ScopedLock l(monitor);
- if(stopped) return;
- stopped = true;
- }
- monitor.notify();
- runner.join();
-}
+
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/AutoDelete.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/AutoDelete.h?view=diff&rev=552037&r1=552036&r2=552037
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/AutoDelete.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/AutoDelete.h Fri Jun 29 14:16:17 2007
@@ -30,24 +30,20 @@
namespace qpid {
namespace broker{
- class AutoDelete : private qpid::sys::Runnable {
+ class AutoDelete {
qpid::sys::Mutex lock;
- qpid::sys::Monitor monitor;
std::queue<Queue::shared_ptr> queues;
QueueRegistry* const registry;
- sys::Duration period;
- volatile bool stopped;
- qpid::sys::Thread runner;
-
+ uint32_t high_water_mark;
+ uint32_t water_mark;
+
Queue::shared_ptr const pop();
- void process();
- virtual void run();
public:
- AutoDelete(QueueRegistry* const registry, uint32_t period);
+ AutoDelete(QueueRegistry* const registry, uint32_t _water_mark);
void add(Queue::shared_ptr const);
- void start();
- void stop();
+ void clean();
+ void cleanNow();
};
}
}
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Broker.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Broker.cpp?view=diff&rev=552037&r1=552036&r2=552037
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Broker.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Broker.cpp Fri Jun 29 14:16:17 2007
@@ -82,7 +82,7 @@
queues(store.get()),
timeout(30000),
stagingThreshold(0),
- cleaner(&queues, timeout/10),
+ cleaner(&queues, 100), // clean every 100 auto delete declares.
factory(*this),
dtxManager(store.get())
{
@@ -98,7 +98,6 @@
store->recover(recoverer);
}
- cleaner.start();
}
@@ -128,7 +127,7 @@
void Broker::shutdown() {
if (acceptor)
acceptor->shutdown();
- cleaner.stop();
+//cct cleaner.cleanNow(); // do we need to delete on close?
}
Broker::~Broker() {
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/BrokerAdapter.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/BrokerAdapter.cpp?view=diff&rev=552037&r1=552036&r2=552037
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/BrokerAdapter.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/BrokerAdapter.cpp Fri Jun 29 14:16:17 2007
@@ -219,7 +219,6 @@
assert(queue);
if (queue_created.second) { // This is a new queue
channel.setDefaultQueue(queue);
-
//apply settings & create persistent record if required
queue_created.first->create(arguments);
@@ -232,6 +231,7 @@
connection.exclusiveQueues.push_back(queue);
} else if(autoDelete){
broker.getCleaner().add(queue);
+ broker.getCleaner().clean(); // check if cleaning is needed
}
}
}
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionFactory.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionFactory.cpp?view=diff&rev=552037&r1=552036&r2=552037
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionFactory.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionFactory.cpp Fri Jun 29 14:16:17 2007
@@ -31,7 +31,7 @@
ConnectionFactory::~ConnectionFactory()
{
- broker.getCleaner().stop();
+
}
qpid::sys::ConnectionInputHandler*