Merge "Task Manager: Log if the lock takes too long"

This commit is contained in:
Zuul 2024-12-04 18:58:46 +00:00 committed by Gerrit Code Review
commit a5b95d56ab
2 changed files with 11 additions and 1 deletions

View File

@ -3223,7 +3223,6 @@ class NodesController(rest.RestController):
chassis_uuid = api_node.get('chassis_uuid')
notify.emit_end_notification(context, new_node, 'update',
chassis_uuid=chassis_uuid)
return api_node
@METRICS.timer('NodesController.delete')

View File

@ -338,6 +338,10 @@ class TaskManager(object):
else:
stop_after = tenacity.stop_after_attempt(1)
max_lock_time = \
CONF.conductor.node_locked_retry_interval * \
CONF.conductor.node_locked_retry_attempts
# NodeLocked exceptions can be annoying. Let's try to alleviate
# some of that pain by retrying our lock attempts.
@tenacity.retry(
@ -347,6 +351,13 @@ class TaskManager(object):
CONF.conductor.node_locked_retry_interval),
reraise=True)
def reserve_node():
if self._debug_timer.elapsed() > max_lock_time:
LOG.warning('We have exceeded the normal maximum time window '
'to complete a node lock attempting to reserve '
'node %(node)s for purpose %(purpose)s. At '
'%(time).2f seconds.',
{'node': self.node_id, 'purpose': self._purpose,
'time': self._debug_timer.elapsed()})
self.node = objects.Node.reserve(self.context, CONF.host,
self.node_id)
LOG.debug("Node %(node)s successfully reserved for %(purpose)s "