Browse Source

Gracefully handle consumer cancel notifications

With mirrored queues and clustered rabbit nodes a queue is still
mastered by a single rabbit node. When the rabbit node dies an
election occurs amongst the remaining nodes and a new master is
elected. When a slave is promoted to master it will close all the
open channels to its consumers but it will not close the
connections. This is reported to consumers as a consumer cancel
notification (CCN). Consumers need to re-subscribe to these queues
when they recieve a CCN.

kombu 2.1.4+ reports CCNs as channel errors. This patch updates
the ensure function to be more inline with the upstream kombu
functionality. We now monitor for channel errors as well as
connection errors and initiate a reconnect if we detect an error.

Change-Id: Ie00f67e65250dc983fa45877c14091ad4ae136b4
Partial-Bug: 856764
tags/1.3.0a9
Chet Burgess 6 years ago
parent
commit
0400cbf4f8
1 changed files with 4 additions and 0 deletions
  1. +4
    -0
      oslo/messaging/_drivers/impl_rabbit.py

+ 4
- 0
oslo/messaging/_drivers/impl_rabbit.py View File

@@ -511,6 +511,7 @@ class Connection(object):
self.connection = None
self.connection = kombu.connection.BrokerConnection(**params)
self.connection_errors = self.connection.connection_errors
self.channel_errors = self.connection.channel_errors
if self.memory_transport:
# Kludge to speed up tests.
self.connection.transport.polling_interval = 0.0
@@ -588,6 +589,9 @@ class Connection(object):
except self.connection_errors as e:
if error_callback:
error_callback(e)
except self.channel_errors as e:
if error_callback:
error_callback(e)
except (socket.timeout, IOError) as e:
if error_callback:
error_callback(e)


Loading…
Cancel
Save