From a6f0aaed3ff2e2ce40665d4e90e92da9d3b3c753 Mon Sep 17 00:00:00 2001
From: Kirill Bespalov <kbespalov@mirantis.com>
Date: Mon, 25 Jul 2016 15:11:53 +0300
Subject: [PATCH] Delete fanout queues on gracefully shutdown

No reasons to kept fanout queues in case then
a rpc server is gracefully shutdown. The expiration
time of the fanout queue is too long (30 mins), so for
large scales it can accumulate a lot of messages before it be removed

Closes-Bug: 1606213
Change-Id: Ieaa35c454df542042f3a5424d70f87d486693024
---
 oslo_messaging/_drivers/impl_rabbit.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/oslo_messaging/_drivers/impl_rabbit.py b/oslo_messaging/_drivers/impl_rabbit.py
index f788bba51..a0f9ddf24 100644
--- a/oslo_messaging/_drivers/impl_rabbit.py
+++ b/oslo_messaging/_drivers/impl_rabbit.py
@@ -844,6 +844,11 @@ class Connection(object):
         """Close/release this connection."""
         self._heartbeat_stop()
         if self.connection:
+            for consumer, tag in self._consumers.items():
+                if consumer.type == 'fanout':
+                    LOG.debug('[connection close] Deleting fanout '
+                              'queue: %s ' % consumer.queue.name)
+                    consumer.queue.delete()
             self._set_current_channel(None)
             self.connection.release()
             self.connection = None
@@ -852,7 +857,6 @@ class Connection(object):
         """Reset a connection so it can be used again."""
         recoverable_errors = (self.connection.recoverable_channel_errors +
                               self.connection.recoverable_connection_errors)
-
         with self._connection_lock:
             try:
                 for consumer, tag in self._consumers.items():