Add failover logging to show the amphora details.

When failover occurs, Octavia health-manager doesn't log any
information about the loadbalancer.  Due to this, operators can't
specify which loadbalancer got failed and which user was affected
by the failover.

This commit fix this issue by logging not only amphora_id but also
the linking information (e.g. loadbalancer_id, compute_id, ..)
when performing/completed the failover.

Change-Id: I9bdd6f2913c0da2b0772b4b694309ef993289360
Task: 34312
Story: 2005947
(cherry picked from commit 93e06a9239)
(cherry picked from commit f412d8521c)
This commit is contained in:
Noboru Iwamatsu 2019-06-25 18:24:48 +09:00 committed by Gregory Thiemonge
parent 3e1d0abece
commit 7722133fb2
1 changed files with 25 additions and 1 deletions

View File

@ -795,6 +795,22 @@ class ControllerWorker(base_taskflow.BaseTaskFlowEngine):
constants.LOADBALANCER_ID: amp.load_balancer_id,
constants.BUILD_TYPE_PRIORITY: priority, }
if amp.role in (constants.ROLE_MASTER, constants.ROLE_BACKUP):
amp_role = 'master_or_backup'
elif amp.role == constants.ROLE_STANDALONE:
amp_role = 'standalone'
elif amp.role is None:
amp_role = 'spare'
else:
amp_role = 'undefined'
LOG.info("Perform failover for an amphora: %s",
{"id": amp.id,
"load_balancer_id": amp.load_balancer_id,
"lb_network_ip": amp.lb_network_ip,
"compute_id": amp.compute_id,
"role": amp_role})
if amp.status == constants.DELETED:
LOG.warning('Amphora %s is marked DELETED in the database but '
'was submitted for failover. Deleting it from the '
@ -825,6 +841,13 @@ class ControllerWorker(base_taskflow.BaseTaskFlowEngine):
with tf_logging.DynamicLoggingListener(failover_amphora_tf, log=LOG):
failover_amphora_tf.run()
LOG.info("Successfully completed the failover for an amphora: %s",
{"id": amp.id,
"load_balancer_id": amp.load_balancer_id,
"lb_network_ip": amp.lb_network_ip,
"compute_id": amp.compute_id,
"role": amp_role})
def failover_amphora(self, amphora_id):
"""Perform failover operations for an amphora.
@ -855,7 +878,8 @@ class ControllerWorker(base_taskflow.BaseTaskFlowEngine):
except Exception:
LOG.error("Unable to revert LB status to ERROR.")
with excutils.save_and_reraise_exception():
LOG.error("Failover exception: %s", e)
LOG.error("Amphora %(id)s failover exception: %(exc)s",
{'id': amphora_id, 'exc': e})
def failover_loadbalancer(self, load_balancer_id):
"""Perform failover operations for a load balancer.