From aca8ebc0640cbef5eb9fa898be08dfe8d3a0f4ae Mon Sep 17 00:00:00 2001 From: Julia Kreger Date: Wed, 7 Dec 2022 11:56:32 -0800 Subject: [PATCH] Catch any exception for Cleaning No exception is used to communicate back, the exceptions are used to catch failures, and if we don't catch other possible exceptions leaving cleaning states, we may not clean up state properly. So instead of specific exceptions, we just catch any exception like is used earlier in the same method. Inspired by https://review.opendev.org/c/openstack/ironic/+/866856 and investigation through the code base as a result of inability to clean the node. Change-Id: I2a6bca3550819b98adbaffe315f77427b8a43d62 --- ironic/conductor/cleaning.py | 5 +++-- .../catch-all-cleaning-exceptions-1317a534a1c9db56.yaml | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 releasenotes/notes/catch-all-cleaning-exceptions-1317a534a1c9db56.yaml diff --git a/ironic/conductor/cleaning.py b/ironic/conductor/cleaning.py index 53d66ddd81..e59841a99b 100644 --- a/ironic/conductor/cleaning.py +++ b/ironic/conductor/cleaning.py @@ -114,8 +114,9 @@ def do_node_clean(task, clean_steps=None, disable_ramdisk=False): try: conductor_steps.set_node_cleaning_steps( task, disable_ramdisk=disable_ramdisk) - except (exception.InvalidParameterValue, - exception.NodeCleaningFailure) as e: + except Exception as e: + # Catch all exceptions and follow the error handling + # path so things are cleaned up properly. msg = (_('Cannot clean node %(node)s: %(msg)s') % {'node': node.uuid, 'msg': e}) return utils.cleaning_error_handler(task, msg) diff --git a/releasenotes/notes/catch-all-cleaning-exceptions-1317a534a1c9db56.yaml b/releasenotes/notes/catch-all-cleaning-exceptions-1317a534a1c9db56.yaml new file mode 100644 index 0000000000..eb3cc61f9a --- /dev/null +++ b/releasenotes/notes/catch-all-cleaning-exceptions-1317a534a1c9db56.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - | + Fixes an issue where unexpected exceptions coming from the process to + start cleaning would not trigger the cleaning_error_handler which + performs the needful internal resets to permit cleaning to be retried + again in the future. Now any error which is encountered during the + launch of cleaning will trigger the error handler.