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*