Merge "Option to enable provisioning status sync with neutron db"
This commit is contained in:
commit
208395ff79
|
@ -72,6 +72,9 @@
|
|||
# noop_event_streamer
|
||||
# event_streamer_driver = noop_event_streamer
|
||||
|
||||
# Enable provisioning status sync with neutron db
|
||||
# sync_provisioning_status = False
|
||||
|
||||
[keystone_authtoken]
|
||||
# This group of config options are imported from keystone middleware. Thus the
|
||||
# option names should match the names declared in the middleware.
|
||||
|
|
|
@ -183,7 +183,9 @@ healthmanager_opts = [
|
|||
'don\'t need to sync the database or are running '
|
||||
'octavia in stand alone mode use the '
|
||||
'noop_event_streamer'),
|
||||
default='noop_event_streamer')]
|
||||
default='noop_event_streamer'),
|
||||
cfg.BoolOpt('sync_provisioning_status', default=False,
|
||||
help=_("Enable provisioning status sync with neutron db"))]
|
||||
|
||||
oslo_messaging_opts = [
|
||||
cfg.StrOpt('topic'),
|
||||
|
|
|
@ -107,6 +107,7 @@ DEGRADED = 'DEGRADED'
|
|||
ERROR = 'ERROR'
|
||||
NO_MONITOR = 'NO_MONITOR'
|
||||
OPERATING_STATUS = 'operating_status'
|
||||
PROVISIONING_STATUS = 'provisioning_status'
|
||||
SUPPORTED_OPERATING_STATUSES = (ONLINE, OFFLINE, DEGRADED, ERROR, NO_MONITOR)
|
||||
|
||||
AMPHORA_VM = 'VM'
|
||||
|
|
|
@ -42,6 +42,7 @@ class UpdateHealthDb(object):
|
|||
self.loadbalancer_repo = repo.LoadBalancerRepository()
|
||||
self.member_repo = repo.MemberRepository()
|
||||
self.pool_repo = repo.PoolRepository()
|
||||
self.sync_prv_status = cfg.CONF.health_manager.sync_provisioning_status
|
||||
|
||||
def emit(self, info_type, info_id, info_obj):
|
||||
cnt = update_serializer.InfoContainer(info_type, info_id, info_obj)
|
||||
|
@ -50,15 +51,22 @@ class UpdateHealthDb(object):
|
|||
def _update_status_and_emit_event(self, session, repo, entity_type,
|
||||
entity_id, new_op_status):
|
||||
entity = repo.get(session, id=entity_id)
|
||||
message = {}
|
||||
if entity.operating_status.lower() != new_op_status.lower():
|
||||
LOG.debug("%s %s status has changed from %s to "
|
||||
"%s. Updating db and sending event.",
|
||||
entity_type, entity_id, entity.operating_status,
|
||||
new_op_status)
|
||||
repo.update(session, entity_id, operating_status=new_op_status)
|
||||
self.emit(
|
||||
entity_type, entity_id,
|
||||
{constants.OPERATING_STATUS: new_op_status})
|
||||
message.update({constants.OPERATING_STATUS: new_op_status})
|
||||
if self.sync_prv_status:
|
||||
LOG.debug("%s %s provisioning_status %s. Updating db and sending"
|
||||
" event.", entity_type, entity_id,
|
||||
entity.provisioning_status)
|
||||
message.update(
|
||||
{constants.PROVISIONING_STATUS: entity.provisioning_status})
|
||||
if message:
|
||||
self.emit(entity_type, entity_id, message)
|
||||
|
||||
def update_health(self, health):
|
||||
"""This function is to update db info based on amphora status
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
upgrade:
|
||||
- Added option 'sync_provisioning_status' to enable synchronizing provisioning status
|
||||
of loadbalancers with the neutron-lbaas database. Enabling this option will queue one
|
||||
additional message per amphora every heartbeat interval.
|
||||
fixes:
|
||||
- Resolved an issue that could cause provisioning status to become out of sync between
|
||||
neutron-lbaas and octavia during high load.
|
Loading…
Reference in New Issue