Support listener pooling in keystone listener
some oslo.messaging transport backends support listener pooling, when the listener declares a pool it belongs, and each message of the topic is delivered once to each pool (plus to 'default' pool for those that have not declared a pool). In particular, rabbitmq and kafka support it. This mechanism should be preferrable over setting a separate topic for barbican to listen notifications on. This patch adds a new config option `[keystone_notifications]pool_name` (None by default for backward compatibility) that can be used to set up barbican-keystone-listener to create a separate pool for its listeners. For more details see oslo.messaging docs https://docs.openstack.org/oslo.messaging/latest/reference/notification_listener.html Change-Id: Ie011266f5ebe03bc6053bfe68e2bee27e07ea11c
This commit is contained in:
parent
63e6979023
commit
3355891490
@ -183,7 +183,22 @@ ks_queue_opts = [
|
|||||||
"will be dispatched to one of the servers in a "
|
"will be dispatched to one of the servers in a "
|
||||||
"round-robin fashion. That's why Barbican service "
|
"round-robin fashion. That's why Barbican service "
|
||||||
"should have its own dedicated notification queue so "
|
"should have its own dedicated notification queue so "
|
||||||
"that it receives all of Keystone notifications.")),
|
"that it receives all of Keystone notifications. "
|
||||||
|
"Alternatively if the chosen oslo.messaging backend "
|
||||||
|
"supports listener pooling (for example rabbitmq), "
|
||||||
|
"setting a non-default 'pool_name' option "
|
||||||
|
"should be preferred.")),
|
||||||
|
cfg.StrOpt('pool_name',
|
||||||
|
help=u._("Pool name for notifications listener. "
|
||||||
|
"Setting this to a distinctive value will allow "
|
||||||
|
"barbican notifications listener to receive its own "
|
||||||
|
"copy of all messages from the topic without "
|
||||||
|
"without interfering with other services listening "
|
||||||
|
"on the same topic. This feature is supported only "
|
||||||
|
"by some oslo.messaging backends "
|
||||||
|
"(in particilar by rabbitmq) and for those it is "
|
||||||
|
"preferrable to use it instead of separate "
|
||||||
|
"notification topic for barbican.")),
|
||||||
cfg.BoolOpt('allow_requeue', default=False,
|
cfg.BoolOpt('allow_requeue', default=False,
|
||||||
help=u._('True enables requeue feature in case of notification'
|
help=u._('True enables requeue feature in case of notification'
|
||||||
' processing error. Enable this only when underlying '
|
' processing error. Enable this only when underlying '
|
||||||
|
@ -106,10 +106,13 @@ def get_notification_server(targets, endpoints, serializer=None):
|
|||||||
"""
|
"""
|
||||||
allow_requeue = getattr(getattr(CONF, KS_NOTIFICATIONS_GRP_NAME),
|
allow_requeue = getattr(getattr(CONF, KS_NOTIFICATIONS_GRP_NAME),
|
||||||
'allow_requeue')
|
'allow_requeue')
|
||||||
|
pool_name = getattr(getattr(CONF, KS_NOTIFICATIONS_GRP_NAME),
|
||||||
|
'pool_name')
|
||||||
TRANSPORT._require_driver_features(requeue=allow_requeue)
|
TRANSPORT._require_driver_features(requeue=allow_requeue)
|
||||||
dispatcher = notify_dispatcher.NotificationDispatcher(endpoints,
|
dispatcher = notify_dispatcher.NotificationDispatcher(endpoints,
|
||||||
serializer)
|
serializer)
|
||||||
# we don't want blocking executor so use eventlet as executor choice
|
# we don't want blocking executor so use eventlet as executor choice
|
||||||
return listener.NotificationServer(TRANSPORT, targets, dispatcher,
|
return listener.NotificationServer(TRANSPORT, targets, dispatcher,
|
||||||
executor='eventlet',
|
executor='eventlet',
|
||||||
|
pool=pool_name,
|
||||||
allow_requeue=allow_requeue)
|
allow_requeue=allow_requeue)
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
It is now possible for barbican-keystone-listener to listen on the same
|
||||||
|
standard notification topic without interfering with other services by
|
||||||
|
using the notification listener pools feature of oslo.messaging.
|
||||||
|
To use it, set the new ``[keystone_notifications]pool_name`` option
|
||||||
|
to some unique value (but the same for all instances of
|
||||||
|
barbican-keystone-listener service).
|
||||||
|
This feature is available only for those messaging transports of
|
||||||
|
oslo.messaging that support it.
|
||||||
|
At the moment those are rabbitmq and kafka.
|
||||||
|
For more details see
|
||||||
|
`oslo.messagind docs <https://docs.openstack.org/oslo.messaging/latest/reference/notification_listener.html>`_
|
Loading…
x
Reference in New Issue
Block a user