)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"31f6e3782971a519ab3354ab78e1686a52a28d51","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"25b0af92_6f31525d","updated":"2023-02-03 19:18:46.000000000","message":"recheck timeout waiting for node","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"deb1362efdff3a87d37a903af43239e156a151b9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"7b6f38fd_53fb4fd4","updated":"2023-02-14 15:05:32.000000000","message":"I think it LGTM.","commit_id":"bc921118b1bc154df04c744612fafadb1081941a"}],"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0061325acf2faa2a446fdeae2749c055e79170fd","unresolved":true,"context_lines":[{"line_number":1962,"context_line":"        node \u003d api_utils.check_node_policy_and_retrieve("},{"line_number":1963,"context_line":"            \u0027baremetal:node:inventory:get\u0027, self.node_ident)"},{"line_number":1964,"context_line":"        try:"},{"line_number":1965,"context_line":"            ret \u003d inspect_utils.get_introspection_data(node,"},{"line_number":1966,"context_line":"                                                       api.request.context)"},{"line_number":1967,"context_line":"        except exception.InventoryNotFound:"},{"line_number":1968,"context_line":"            raise exception.HTTPNotFound()"}],"source_content_type":"text/x-python","patch_set":12,"id":"39e540c3_8b1802f5","line":1965,"updated":"2023-02-10 13:38:06.000000000","message":"nit: no need for a variable, you can (try to) return right away","commit_id":"f61b0661f9f22390452718a6ddfca49352be3174"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"4e6f3e34486bcef43fd891e4759c5ef331a2626f","unresolved":false,"context_lines":[{"line_number":1962,"context_line":"        node \u003d api_utils.check_node_policy_and_retrieve("},{"line_number":1963,"context_line":"            \u0027baremetal:node:inventory:get\u0027, self.node_ident)"},{"line_number":1964,"context_line":"        try:"},{"line_number":1965,"context_line":"            ret \u003d inspect_utils.get_introspection_data(node,"},{"line_number":1966,"context_line":"                                                       api.request.context)"},{"line_number":1967,"context_line":"        except exception.InventoryNotFound:"},{"line_number":1968,"context_line":"            raise exception.HTTPNotFound()"}],"source_content_type":"text/x-python","patch_set":12,"id":"dc93d240_a0425c26","line":1965,"in_reply_to":"39e540c3_8b1802f5","updated":"2023-02-10 14:03:10.000000000","message":"Ack","commit_id":"f61b0661f9f22390452718a6ddfca49352be3174"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0061325acf2faa2a446fdeae2749c055e79170fd","unresolved":true,"context_lines":[{"line_number":1965,"context_line":"            ret \u003d inspect_utils.get_introspection_data(node,"},{"line_number":1966,"context_line":"                                                       api.request.context)"},{"line_number":1967,"context_line":"        except exception.InventoryNotFound:"},{"line_number":1968,"context_line":"            raise exception.HTTPNotFound()"},{"line_number":1969,"context_line":"        return ret"},{"line_number":1970,"context_line":""},{"line_number":1971,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"130c65a6_01431352","line":1968,"updated":"2023-02-10 13:38:06.000000000","message":"Actually, NotInventoryNotFound inherits NotFound, so you don\u0027t need to catch the exception","commit_id":"f61b0661f9f22390452718a6ddfca49352be3174"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"4e6f3e34486bcef43fd891e4759c5ef331a2626f","unresolved":false,"context_lines":[{"line_number":1965,"context_line":"            ret \u003d inspect_utils.get_introspection_data(node,"},{"line_number":1966,"context_line":"                                                       api.request.context)"},{"line_number":1967,"context_line":"        except exception.InventoryNotFound:"},{"line_number":1968,"context_line":"            raise exception.HTTPNotFound()"},{"line_number":1969,"context_line":"        return ret"},{"line_number":1970,"context_line":""},{"line_number":1971,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"c93c2e00_05ab0c42","line":1968,"in_reply_to":"130c65a6_01431352","updated":"2023-02-10 14:03:10.000000000","message":"Done","commit_id":"f61b0661f9f22390452718a6ddfca49352be3174"}],"ironic/common/exception.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"92b0c4bf332968321f855d3d76d4a2e67c596bc7","unresolved":true,"context_lines":[{"line_number":871,"context_line":"    _msg_fmt \u003d _(\"Clean up failed for swift object %(obj)s during deletion\""},{"line_number":872,"context_line":"                 \" of node %(node)s.\")"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def __init__(self, obj\u003dNone, node\u003dNone):"},{"line_number":875,"context_line":"        super(SwiftObjectStillExists, self).__init__("},{"line_number":876,"context_line":"            obj\u003dobj,"},{"line_number":877,"context_line":"            node\u003dnode)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1dcae2b6_a0aad030","line":874,"updated":"2023-02-03 15:22:41.000000000","message":"This __init__ is not doing much and can be removed in favour of the parent class.","commit_id":"644974df3153a88b1fa8df8697ada32ac86063b7"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"b4491cb0054b5c313277af1b101be38cf8fb6b0d","unresolved":false,"context_lines":[{"line_number":871,"context_line":"    _msg_fmt \u003d _(\"Clean up failed for swift object %(obj)s during deletion\""},{"line_number":872,"context_line":"                 \" of node %(node)s.\")"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def __init__(self, obj\u003dNone, node\u003dNone):"},{"line_number":875,"context_line":"        super(SwiftObjectStillExists, self).__init__("},{"line_number":876,"context_line":"            obj\u003dobj,"},{"line_number":877,"context_line":"            node\u003dnode)"}],"source_content_type":"text/x-python","patch_set":9,"id":"56c606ba_d3db8b65","line":874,"in_reply_to":"1dcae2b6_a0aad030","updated":"2023-02-03 16:29:09.000000000","message":"Ack","commit_id":"644974df3153a88b1fa8df8697ada32ac86063b7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"92b0c4bf332968321f855d3d76d4a2e67c596bc7","unresolved":true,"context_lines":[{"line_number":872,"context_line":"                 \" of node %(node)s.\")"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def __init__(self, obj\u003dNone, node\u003dNone):"},{"line_number":875,"context_line":"        super(SwiftObjectStillExists, self).__init__("},{"line_number":876,"context_line":"            obj\u003dobj,"},{"line_number":877,"context_line":"            node\u003dnode)"}],"source_content_type":"text/x-python","patch_set":9,"id":"2a47e7b5_9cf80757","line":875,"updated":"2023-02-03 15:22:41.000000000","message":"nit: starting with Python 3, super can be called without arguments in this case","commit_id":"644974df3153a88b1fa8df8697ada32ac86063b7"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"b4491cb0054b5c313277af1b101be38cf8fb6b0d","unresolved":false,"context_lines":[{"line_number":872,"context_line":"                 \" of node %(node)s.\")"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def __init__(self, obj\u003dNone, node\u003dNone):"},{"line_number":875,"context_line":"        super(SwiftObjectStillExists, self).__init__("},{"line_number":876,"context_line":"            obj\u003dobj,"},{"line_number":877,"context_line":"            node\u003dnode)"}],"source_content_type":"text/x-python","patch_set":9,"id":"6d74cfcd_9c55ffee","line":875,"in_reply_to":"2a47e7b5_9cf80757","updated":"2023-02-03 16:29:09.000000000","message":"Ack","commit_id":"644974df3153a88b1fa8df8697ada32ac86063b7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0061325acf2faa2a446fdeae2749c055e79170fd","unresolved":true,"context_lines":[{"line_number":828,"context_line":"    _msg_fmt \u003d _(\"Node history record %(history)s could not be found.\")"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"class NodeInventoryNotFound(NotFound):"},{"line_number":832,"context_line":"    _msg_fmt \u003d _(\"Node inventory record %(inventory)s could not be found.\")"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"b0461433_f9da91b1","line":831,"updated":"2023-02-10 13:38:06.000000000","message":"I\u0027d prefer you reuse this class rather than creating a very similar one.","commit_id":"f61b0661f9f22390452718a6ddfca49352be3174"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"4e6f3e34486bcef43fd891e4759c5ef331a2626f","unresolved":false,"context_lines":[{"line_number":828,"context_line":"    _msg_fmt \u003d _(\"Node history record %(history)s could not be found.\")"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"class NodeInventoryNotFound(NotFound):"},{"line_number":832,"context_line":"    _msg_fmt \u003d _(\"Node inventory record %(inventory)s could not be found.\")"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"289a6063_991dec34","line":831,"in_reply_to":"b0461433_f9da91b1","updated":"2023-02-10 14:03:10.000000000","message":"Done","commit_id":"f61b0661f9f22390452718a6ddfca49352be3174"}],"ironic/conductor/manager.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d4435edfaa6fd83cff73659ee2f0dec75479c8cc","unresolved":false,"context_lines":[{"line_number":2025,"context_line":"                    notify_utils.emit_console_notification("},{"line_number":2026,"context_line":"                        task, \u0027console_set\u0027, fields.NotificationStatus.END)"},{"line_number":2027,"context_line":"            # Destroy Swift Inventory entries for this node"},{"line_number":2028,"context_line":"            inspect_utils.clean_up_swift_entries(node.id, context)"},{"line_number":2029,"context_line":""},{"line_number":2030,"context_line":"            node.destroy()"},{"line_number":2031,"context_line":"            LOG.info(\u0027Successfully deleted node %(node)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"80554ab2_be177e55","line":2028,"updated":"2023-01-23 16:59:08.000000000","message":"Let\u0027s handle any exceptions here, so that cleaning up swift does not cause the whole deletion to fail?","commit_id":"9ad4554a3599b7aa826b3dc4345f25a1cc96c843"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"439d4bec04e4a03b273f826350e153b614b0df4f","unresolved":true,"context_lines":[{"line_number":2026,"context_line":"                        task, \u0027console_set\u0027, fields.NotificationStatus.END)"},{"line_number":2027,"context_line":"            # Destroy Swift Inventory entries for this node"},{"line_number":2028,"context_line":"            try:"},{"line_number":2029,"context_line":"                inspect_utils.clean_up_swift_entries(node.id, context)"},{"line_number":2030,"context_line":"            except Exception as err:"},{"line_number":2031,"context_line":"                LOG.debug(\u0027Failed to delete Swift entries related \u0027"},{"line_number":2032,"context_line":"                          \u0027to the node %(node)s: %(err)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5c30989c_2ce4f23f","line":2029,"updated":"2023-01-25 15:43:22.000000000","message":"You can pass task instead, which will give access to both task.node (avoiding a new load) and task.context","commit_id":"eee6c0c07ba79c186e536d1c408491bbacbadf2c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c0c991384d4a88de73090ce3e86bd9da1dae691c","unresolved":true,"context_lines":[{"line_number":2025,"context_line":"                    notify_utils.emit_console_notification("},{"line_number":2026,"context_line":"                        task, \u0027console_set\u0027, fields.NotificationStatus.END)"},{"line_number":2027,"context_line":"            # Destroy Swift Inventory entries for this node"},{"line_number":2028,"context_line":"            try:"},{"line_number":2029,"context_line":"                inspect_utils.clean_up_swift_entries(task)"},{"line_number":2030,"context_line":"            except Exception as err:"},{"line_number":2031,"context_line":"                LOG.debug(\u0027Failed to delete Swift entries related \u0027"},{"line_number":2032,"context_line":"                          \u0027to the node %(node)s: %(err)s.\u0027,"},{"line_number":2033,"context_line":"                          {\u0027node\u0027: node.uuid, \u0027err\u0027: err})"},{"line_number":2034,"context_line":""},{"line_number":2035,"context_line":"            node.destroy()"},{"line_number":2036,"context_line":"            LOG.info(\u0027Successfully deleted node %(node)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"2b563753_16ebef6b","line":2033,"range":{"start_line":2028,"start_character":0,"end_line":2033,"end_character":58},"updated":"2023-01-27 18:28:28.000000000","message":"I think we should make the deletion failure an explicit failure to block node.destroy from occurring, so we don\u0027t orphan data.\n\nI\u0027m thinking this because one of the bigger complaints I\u0027ve heard from long term operators is unknown/orphaned data being stored in swift.\n\nRealistically, we can still capture any exception, but then I think we should fail. Doing so would require a new exception most likley.\n\nThoughts?","commit_id":"796e6edb237579bc5669846d6ba8879ad8ba456e"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"49fb1d0a6be52be5ec814ababa13d0cc1e1da991","unresolved":true,"context_lines":[{"line_number":2030,"context_line":"            except exception.SwiftObjectStillExists as e:"},{"line_number":2031,"context_line":"                if node.maintenance:"},{"line_number":2032,"context_line":"                    # Maintenance -\u003e Allow orphaning"},{"line_number":2033,"context_line":"                    LOG.warning(\u0027Swift object orphaned: %(e)s\u0027, {\u0027e\u0027: e})"},{"line_number":2034,"context_line":"                else:"},{"line_number":2035,"context_line":"                    LOG.error(e)"},{"line_number":2036,"context_line":"                    notify_utils.emit_console_notification("}],"source_content_type":"text/x-python","patch_set":8,"id":"0b3199d5_204e2310","line":2033,"updated":"2023-01-31 17:41:40.000000000","message":"nit: Is there any way to return information about the actual failure to the operator? e.g. \"Unable to X in Swift for Y reason?\"  (it\u0027s possible that utils.clean_up_swift_entries() already does this?)","commit_id":"2b9dc4418cc4878f6437b727bb0dcf5ffff4c08e"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"5156fb8a0ef7fd5b8f824f364f7ed260bf707aed","unresolved":false,"context_lines":[{"line_number":2030,"context_line":"            except exception.SwiftObjectStillExists as e:"},{"line_number":2031,"context_line":"                if node.maintenance:"},{"line_number":2032,"context_line":"                    # Maintenance -\u003e Allow orphaning"},{"line_number":2033,"context_line":"                    LOG.warning(\u0027Swift object orphaned: %(e)s\u0027, {\u0027e\u0027: e})"},{"line_number":2034,"context_line":"                else:"},{"line_number":2035,"context_line":"                    LOG.error(e)"},{"line_number":2036,"context_line":"                    notify_utils.emit_console_notification("}],"source_content_type":"text/x-python","patch_set":8,"id":"86e42a09_aef5a9c1","line":2033,"in_reply_to":"0b3199d5_204e2310","updated":"2023-02-01 15:14:00.000000000","message":"Done","commit_id":"2b9dc4418cc4878f6437b727bb0dcf5ffff4c08e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"92b0c4bf332968321f855d3d76d4a2e67c596bc7","unresolved":true,"context_lines":[{"line_number":2032,"context_line":"                    # Maintenance -\u003e Allow orphaning"},{"line_number":2033,"context_line":"                    LOG.warning(\u0027Swift object orphaned: %(e)s\u0027, {\u0027e\u0027: e})"},{"line_number":2034,"context_line":"                else:"},{"line_number":2035,"context_line":"                    LOG.error(e)"},{"line_number":2036,"context_line":"                    notify_utils.emit_console_notification("},{"line_number":2037,"context_line":"                        task, \u0027console_set\u0027, fields.NotificationStatus.ERROR)"},{"line_number":2038,"context_line":"            except Exception as err:"}],"source_content_type":"text/x-python","patch_set":9,"id":"afa7c05c_7e28c44c","line":2035,"updated":"2023-02-03 15:22:41.000000000","message":"The first argument for LOG.error is a string, not an exception object. I\u0027m not sure it\u0027s even going to work. Maybe use the same message as for the warning?","commit_id":"644974df3153a88b1fa8df8697ada32ac86063b7"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"b4491cb0054b5c313277af1b101be38cf8fb6b0d","unresolved":false,"context_lines":[{"line_number":2032,"context_line":"                    # Maintenance -\u003e Allow orphaning"},{"line_number":2033,"context_line":"                    LOG.warning(\u0027Swift object orphaned: %(e)s\u0027, {\u0027e\u0027: e})"},{"line_number":2034,"context_line":"                else:"},{"line_number":2035,"context_line":"                    LOG.error(e)"},{"line_number":2036,"context_line":"                    notify_utils.emit_console_notification("},{"line_number":2037,"context_line":"                        task, \u0027console_set\u0027, fields.NotificationStatus.ERROR)"},{"line_number":2038,"context_line":"            except Exception as err:"}],"source_content_type":"text/x-python","patch_set":9,"id":"664c44cb_4d88d0e4","line":2035,"in_reply_to":"afa7c05c_7e28c44c","updated":"2023-02-03 16:29:09.000000000","message":"Done","commit_id":"644974df3153a88b1fa8df8697ada32ac86063b7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"92b0c4bf332968321f855d3d76d4a2e67c596bc7","unresolved":true,"context_lines":[{"line_number":2036,"context_line":"                    notify_utils.emit_console_notification("},{"line_number":2037,"context_line":"                        task, \u0027console_set\u0027, fields.NotificationStatus.ERROR)"},{"line_number":2038,"context_line":"            except Exception as err:"},{"line_number":2039,"context_line":"                LOG.debug(\u0027Failed to delete Swift entries related \u0027"},{"line_number":2040,"context_line":"                          \u0027to the node %(node)s: %(err)s.\u0027,"},{"line_number":2041,"context_line":"                          {\u0027node\u0027: node.uuid, \u0027err\u0027: err})"},{"line_number":2042,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa3f3726_a8d1d149","line":2039,"updated":"2023-02-03 15:22:41.000000000","message":"In which case do we expect this? Looks like it can be a hard failure, but definitely not a debug message.","commit_id":"644974df3153a88b1fa8df8697ada32ac86063b7"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"b4491cb0054b5c313277af1b101be38cf8fb6b0d","unresolved":false,"context_lines":[{"line_number":2036,"context_line":"                    notify_utils.emit_console_notification("},{"line_number":2037,"context_line":"                        task, \u0027console_set\u0027, fields.NotificationStatus.ERROR)"},{"line_number":2038,"context_line":"            except Exception as err:"},{"line_number":2039,"context_line":"                LOG.debug(\u0027Failed to delete Swift entries related \u0027"},{"line_number":2040,"context_line":"                          \u0027to the node %(node)s: %(err)s.\u0027,"},{"line_number":2041,"context_line":"                          {\u0027node\u0027: node.uuid, \u0027err\u0027: err})"},{"line_number":2042,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"a8a4f6f2_cbf66120","line":2039,"in_reply_to":"fa3f3726_a8d1d149","updated":"2023-02-03 16:29:09.000000000","message":"Done","commit_id":"644974df3153a88b1fa8df8697ada32ac86063b7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"37edd76aabfdcf8f3b5b62c27beb6713a08e777f","unresolved":true,"context_lines":[{"line_number":2034,"context_line":"                else:"},{"line_number":2035,"context_line":"                    LOG.error(\u0027Swift object cannot be orphaned: %(e)s\u0027,"},{"line_number":2036,"context_line":"                              {\u0027e\u0027: e})"},{"line_number":2037,"context_line":"                    notify_utils.emit_console_notification("},{"line_number":2038,"context_line":"                        task, \u0027console_set\u0027, fields.NotificationStatus.ERROR)"},{"line_number":2039,"context_line":"            except Exception as err:"},{"line_number":2040,"context_line":"                LOG.error(\u0027Failed to delete Swift entries related \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"1162f79a_56b01cf7","line":2037,"updated":"2023-02-06 16:48:11.000000000","message":"This does not belong here (it\u0027s only for console handling). Also you need to re-raise the exception with just \u0027raise\u0027, otherwise you\u0027re ignoring it on this code path too.","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"28b18260315636107a225793225d15de8d75d601","unresolved":false,"context_lines":[{"line_number":2034,"context_line":"                else:"},{"line_number":2035,"context_line":"                    LOG.error(\u0027Swift object cannot be orphaned: %(e)s\u0027,"},{"line_number":2036,"context_line":"                              {\u0027e\u0027: e})"},{"line_number":2037,"context_line":"                    notify_utils.emit_console_notification("},{"line_number":2038,"context_line":"                        task, \u0027console_set\u0027, fields.NotificationStatus.ERROR)"},{"line_number":2039,"context_line":"            except Exception as err:"},{"line_number":2040,"context_line":"                LOG.error(\u0027Failed to delete Swift entries related \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"af30c986_7dc169bf","line":2037,"in_reply_to":"1162f79a_56b01cf7","updated":"2023-02-08 12:16:43.000000000","message":"Done","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"37edd76aabfdcf8f3b5b62c27beb6713a08e777f","unresolved":true,"context_lines":[{"line_number":2039,"context_line":"            except Exception as err:"},{"line_number":2040,"context_line":"                LOG.error(\u0027Failed to delete Swift entries related \u0027"},{"line_number":2041,"context_line":"                          \u0027to the node %(node)s: %(err)s.\u0027,"},{"line_number":2042,"context_line":"                          {\u0027node\u0027: node.uuid, \u0027err\u0027: err})"},{"line_number":2043,"context_line":""},{"line_number":2044,"context_line":"            node.destroy()"},{"line_number":2045,"context_line":"            LOG.info(\u0027Successfully deleted node %(node)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7d21dbe1_4b84ae0e","line":2042,"updated":"2023-02-06 16:48:11.000000000","message":"also missing raise?","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"28b18260315636107a225793225d15de8d75d601","unresolved":false,"context_lines":[{"line_number":2039,"context_line":"            except Exception as err:"},{"line_number":2040,"context_line":"                LOG.error(\u0027Failed to delete Swift entries related \u0027"},{"line_number":2041,"context_line":"                          \u0027to the node %(node)s: %(err)s.\u0027,"},{"line_number":2042,"context_line":"                          {\u0027node\u0027: node.uuid, \u0027err\u0027: err})"},{"line_number":2043,"context_line":""},{"line_number":2044,"context_line":"            node.destroy()"},{"line_number":2045,"context_line":"            LOG.info(\u0027Successfully deleted node %(node)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"b1071e4e_335c27ad","line":2042,"in_reply_to":"7d21dbe1_4b84ae0e","updated":"2023-02-08 12:16:43.000000000","message":"Done","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0061325acf2faa2a446fdeae2749c055e79170fd","unresolved":true,"context_lines":[{"line_number":2030,"context_line":"            except exception.SwiftObjectStillExists as e:"},{"line_number":2031,"context_line":"                if node.maintenance:"},{"line_number":2032,"context_line":"                    # Maintenance -\u003e Allow orphaning"},{"line_number":2033,"context_line":"                    LOG.warning(\u0027Swift object orphaned: %(e)s\u0027, {\u0027e\u0027: e})"},{"line_number":2034,"context_line":"                else:"},{"line_number":2035,"context_line":"                    LOG.error(\u0027Swift object cannot be orphaned: %(e)s\u0027,"},{"line_number":2036,"context_line":"                              {\u0027e\u0027: e})"}],"source_content_type":"text/x-python","patch_set":12,"id":"8b3b2720_40c32361","line":2033,"updated":"2023-02-10 13:38:06.000000000","message":"Both log messages will lack context, let us mention the node UUID","commit_id":"f61b0661f9f22390452718a6ddfca49352be3174"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"4e6f3e34486bcef43fd891e4759c5ef331a2626f","unresolved":false,"context_lines":[{"line_number":2030,"context_line":"            except exception.SwiftObjectStillExists as e:"},{"line_number":2031,"context_line":"                if node.maintenance:"},{"line_number":2032,"context_line":"                    # Maintenance -\u003e Allow orphaning"},{"line_number":2033,"context_line":"                    LOG.warning(\u0027Swift object orphaned: %(e)s\u0027, {\u0027e\u0027: e})"},{"line_number":2034,"context_line":"                else:"},{"line_number":2035,"context_line":"                    LOG.error(\u0027Swift object cannot be orphaned: %(e)s\u0027,"},{"line_number":2036,"context_line":"                              {\u0027e\u0027: e})"}],"source_content_type":"text/x-python","patch_set":12,"id":"585af789_afa0e601","line":2033,"in_reply_to":"8b3b2720_40c32361","updated":"2023-02-10 14:03:10.000000000","message":"Done","commit_id":"f61b0661f9f22390452718a6ddfca49352be3174"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0061325acf2faa2a446fdeae2749c055e79170fd","unresolved":true,"context_lines":[{"line_number":2034,"context_line":"                else:"},{"line_number":2035,"context_line":"                    LOG.error(\u0027Swift object cannot be orphaned: %(e)s\u0027,"},{"line_number":2036,"context_line":"                              {\u0027e\u0027: e})"},{"line_number":2037,"context_line":"                    raise e"},{"line_number":2038,"context_line":"            except Exception as err:"},{"line_number":2039,"context_line":"                LOG.error(\u0027Failed to delete Swift entries related \u0027"},{"line_number":2040,"context_line":"                          \u0027to the node %(node)s: %(err)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"8fd403f8_5bc33f36","line":2037,"updated":"2023-02-10 13:38:06.000000000","message":"See below","commit_id":"f61b0661f9f22390452718a6ddfca49352be3174"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"4e6f3e34486bcef43fd891e4759c5ef331a2626f","unresolved":false,"context_lines":[{"line_number":2034,"context_line":"                else:"},{"line_number":2035,"context_line":"                    LOG.error(\u0027Swift object cannot be orphaned: %(e)s\u0027,"},{"line_number":2036,"context_line":"                              {\u0027e\u0027: e})"},{"line_number":2037,"context_line":"                    raise e"},{"line_number":2038,"context_line":"            except Exception as err:"},{"line_number":2039,"context_line":"                LOG.error(\u0027Failed to delete Swift entries related \u0027"},{"line_number":2040,"context_line":"                          \u0027to the node %(node)s: %(err)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9b53a705_ae763108","line":2037,"in_reply_to":"8fd403f8_5bc33f36","updated":"2023-02-10 14:03:10.000000000","message":"Done","commit_id":"f61b0661f9f22390452718a6ddfca49352be3174"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0061325acf2faa2a446fdeae2749c055e79170fd","unresolved":true,"context_lines":[{"line_number":2039,"context_line":"                LOG.error(\u0027Failed to delete Swift entries related \u0027"},{"line_number":2040,"context_line":"                          \u0027to the node %(node)s: %(err)s.\u0027,"},{"line_number":2041,"context_line":"                          {\u0027node\u0027: node.uuid, \u0027err\u0027: err})"},{"line_number":2042,"context_line":"                raise err"},{"line_number":2043,"context_line":""},{"line_number":2044,"context_line":"            node.destroy()"},{"line_number":2045,"context_line":"            LOG.info(\u0027Successfully deleted node %(node)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"a7da1e64_78de3f8f","line":2042,"updated":"2023-02-10 13:38:06.000000000","message":"Please remove err, leave only\n\n raise\n \nThe reason: when you do \"naked\" raise, it reuses the traceback, while \"raise err\" will create a new traceback from this point.","commit_id":"f61b0661f9f22390452718a6ddfca49352be3174"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"4e6f3e34486bcef43fd891e4759c5ef331a2626f","unresolved":false,"context_lines":[{"line_number":2039,"context_line":"                LOG.error(\u0027Failed to delete Swift entries related \u0027"},{"line_number":2040,"context_line":"                          \u0027to the node %(node)s: %(err)s.\u0027,"},{"line_number":2041,"context_line":"                          {\u0027node\u0027: node.uuid, \u0027err\u0027: err})"},{"line_number":2042,"context_line":"                raise err"},{"line_number":2043,"context_line":""},{"line_number":2044,"context_line":"            node.destroy()"},{"line_number":2045,"context_line":"            LOG.info(\u0027Successfully deleted node %(node)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"4be6b393_1469d4fe","line":2042,"in_reply_to":"a7da1e64_78de3f8f","updated":"2023-02-10 14:03:10.000000000","message":"Done","commit_id":"f61b0661f9f22390452718a6ddfca49352be3174"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"deb1362efdff3a87d37a903af43239e156a151b9","unresolved":true,"context_lines":[{"line_number":2034,"context_line":"                                \u0027node %(node)s: %(e)s\u0027,"},{"line_number":2035,"context_line":"                                {\u0027node\u0027: node.uuid, \u0027e\u0027: e})"},{"line_number":2036,"context_line":"                else:"},{"line_number":2037,"context_line":"                    LOG.error(\u0027Swift object cannot be orphaned during \u0027"},{"line_number":2038,"context_line":"                              \u0027destruction of node %(node)s: %(e)s\u0027,"},{"line_number":2039,"context_line":"                              {\u0027node\u0027: node.uuid, \u0027e\u0027: e})"},{"line_number":2040,"context_line":"                    raise"},{"line_number":2041,"context_line":"            except Exception as err:"},{"line_number":2042,"context_line":"                LOG.error(\u0027Failed to delete Swift entries related \u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"5b603876_d619215e","line":2039,"range":{"start_line":2037,"start_character":0,"end_line":2039,"end_character":58},"updated":"2023-02-14 15:05:32.000000000","message":"nit: and one worthy of a follow-on... maybe. I\u0027d indicate while not in maintenance mode.","commit_id":"bc921118b1bc154df04c744612fafadb1081941a"}],"ironic/drivers/modules/inspect_utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d4435edfaa6fd83cff73659ee2f0dec75479c8cc","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        swift_object_name \u003d \u0027%s-%s\u0027 % (_OBJECT_NAME_PREFIX, node.uuid)"},{"line_number":68,"context_line":"        container \u003d CONF.inventory.swift_data_container"},{"line_number":69,"context_line":"        swift_api.delete_object(swift_object_name + \u0027-inventory\u0027, container)"},{"line_number":70,"context_line":"        swift_api.delete_object(swift_object_name + \u0027-plugin\u0027, container)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"def store_introspection_data(node, introspection_data, context):"}],"source_content_type":"text/x-python","patch_set":2,"id":"b6a16587_0c8f5b65","line":70,"updated":"2023-01-23 16:59:08.000000000","message":"Are you sure this does not fail if the object does not exist?","commit_id":"9ad4554a3599b7aa826b3dc4345f25a1cc96c843"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"439d4bec04e4a03b273f826350e153b614b0df4f","unresolved":true,"context_lines":[{"line_number":71,"context_line":"            swift_api.delete_object(swift_object_name + \u0027-inventory\u0027,"},{"line_number":72,"context_line":"                                    container)"},{"line_number":73,"context_line":"        except ClientException:"},{"line_number":74,"context_line":"            LOG.debug(\"Object does not exist or failed to be deleted\")"},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            swift_api.delete_object(swift_object_name + \u0027-plugin\u0027, container)"},{"line_number":77,"context_line":"        except ClientException:"}],"source_content_type":"text/x-python","patch_set":3,"id":"293b7c6f_14f98ca0","line":74,"updated":"2023-01-25 15:43:22.000000000","message":"Please mention the object and the node ID (same below).","commit_id":"eee6c0c07ba79c186e536d1c408491bbacbadf2c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c0c991384d4a88de73090ce3e86bd9da1dae691c","unresolved":true,"context_lines":[{"line_number":59,"context_line":"                     \"for node %(node)s\", {\u0027address\u0027: mac, \u0027node\u0027: node.uuid})"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def clean_up_swift_entries(task):"},{"line_number":63,"context_line":"    store_data \u003d CONF.inventory.data_backend"},{"line_number":64,"context_line":"    if store_data \u003d\u003d \u0027swift\u0027:"},{"line_number":65,"context_line":"        swift_api \u003d swift.SwiftAPI()"}],"source_content_type":"text/x-python","patch_set":5,"id":"cc790ec3_8658b795","line":62,"updated":"2023-01-27 18:28:28.000000000","message":"Please add a docstring.","commit_id":"796e6edb237579bc5669846d6ba8879ad8ba456e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"deb1362efdff3a87d37a903af43239e156a151b9","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                     \"for node %(node)s\", {\u0027address\u0027: mac, \u0027node\u0027: node.uuid})"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def clean_up_swift_entries(task):"},{"line_number":63,"context_line":"    store_data \u003d CONF.inventory.data_backend"},{"line_number":64,"context_line":"    if store_data \u003d\u003d \u0027swift\u0027:"},{"line_number":65,"context_line":"        swift_api \u003d swift.SwiftAPI()"}],"source_content_type":"text/x-python","patch_set":5,"id":"c1532cf5_395f6e6e","line":62,"in_reply_to":"cc790ec3_8658b795","updated":"2023-02-14 15:05:32.000000000","message":"Done","commit_id":"796e6edb237579bc5669846d6ba8879ad8ba456e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c0c991384d4a88de73090ce3e86bd9da1dae691c","unresolved":true,"context_lines":[{"line_number":67,"context_line":"        container \u003d CONF.inventory.swift_data_container"},{"line_number":68,"context_line":"        inventory_obj_name \u003d swift_object_name + \u0027-inventory\u0027"},{"line_number":69,"context_line":"        plugin_obj_name \u003d swift_object_name + \u0027-plugin\u0027"},{"line_number":70,"context_line":"        try:"},{"line_number":71,"context_line":"            swift_api.delete_object(inventory_obj_name, container)"},{"line_number":72,"context_line":"        except ClientException:"},{"line_number":73,"context_line":"            LOG.debug(\"Object %(obj)s related to node %(node)s \""},{"line_number":74,"context_line":"                      \"does not exist or failed to be deleted\","},{"line_number":75,"context_line":"                      {\u0027obj\u0027: inventory_obj_name, \u0027node\u0027: task.node.uuid})"},{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            swift_api.delete_object(plugin_obj_name, container)"},{"line_number":78,"context_line":"        except ClientException:"}],"source_content_type":"text/x-python","patch_set":5,"id":"05c56e2f_4438907d","line":75,"range":{"start_line":70,"start_character":0,"end_line":75,"end_character":74},"updated":"2023-01-27 18:28:28.000000000","message":"Ugh, swift doesn\u0027t make this easy at all. Perhaps something like what is below. I think the question beyond that is \"do we raise the exception or not, because as is, this will always silently succeed.\n\n        try:\n            swift_api.delete_object(inventory_obj_name, container)\n        except ClientException as e:\n            if e.http_status \u003d\u003d 404:\n                # Since we got a 404, we have no file, which is acceptable.\n                pass\n            LOG.debug(\"Object %(obj)s related to node %(node)s \"\n                      \"failed to be deleted.\",\n                      {\u0027obj\u0027: inventory_obj_name, \u0027node\u0027: task.node.uuid})\n            # The question here is if we raise the exception or if we just silently hide it.\n\nSwift has some similar logic for things like stat, where the presence of a file is checked. https://github.com/openstack/python-swiftclient/blob/02509acc71e6f609b6a9f3c8055479872bedaf2a/swiftclient/service.py#L566","commit_id":"796e6edb237579bc5669846d6ba8879ad8ba456e"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"49fb1d0a6be52be5ec814ababa13d0cc1e1da991","unresolved":true,"context_lines":[{"line_number":83,"context_line":"                # 404 -\u003e entry did not exist - acceptable."},{"line_number":84,"context_line":"                return"},{"line_number":85,"context_line":"            else:"},{"line_number":86,"context_line":"                LOG.debug(\"Object %(obj)s related to node %(node)s \""},{"line_number":87,"context_line":"                          \"failed to be deleted\","},{"line_number":88,"context_line":"                          {\u0027obj\u0027: inventory_obj_name, \u0027node\u0027: task.node.uuid})"},{"line_number":89,"context_line":"                raise exception.SwiftObjectStillExists(inventory_obj_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"c48c260e_824d15d4","line":86,"updated":"2023-01-31 17:41:40.000000000","message":"this needs to be logged at a higher level than debug (and if so, will satisfy my comment in the previous file)","commit_id":"2b9dc4418cc4878f6437b727bb0dcf5ffff4c08e"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"5156fb8a0ef7fd5b8f824f364f7ed260bf707aed","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                # 404 -\u003e entry did not exist - acceptable."},{"line_number":84,"context_line":"                return"},{"line_number":85,"context_line":"            else:"},{"line_number":86,"context_line":"                LOG.debug(\"Object %(obj)s related to node %(node)s \""},{"line_number":87,"context_line":"                          \"failed to be deleted\","},{"line_number":88,"context_line":"                          {\u0027obj\u0027: inventory_obj_name, \u0027node\u0027: task.node.uuid})"},{"line_number":89,"context_line":"                raise exception.SwiftObjectStillExists(inventory_obj_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"e8f55436_28fefc2c","line":86,"in_reply_to":"c48c260e_824d15d4","updated":"2023-02-01 15:14:00.000000000","message":"Ack","commit_id":"2b9dc4418cc4878f6437b727bb0dcf5ffff4c08e"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"49fb1d0a6be52be5ec814ababa13d0cc1e1da991","unresolved":true,"context_lines":[{"line_number":94,"context_line":"            if e.http_status \u003d\u003d 404:"},{"line_number":95,"context_line":"                # 404 -\u003e entry did not exist - acceptable."},{"line_number":96,"context_line":"                return"},{"line_number":97,"context_line":"            LOG.debug(\"Object %(obj)s related to node %(node)s \""},{"line_number":98,"context_line":"                      \"failed to be deleted\","},{"line_number":99,"context_line":"                      {\u0027obj\u0027: plugin_obj_name, \u0027node\u0027: task.node.uuid})"},{"line_number":100,"context_line":"            raise exception.SwiftObjectStillExists(plugin_obj_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"bd606d3d_1fa3c4fc","line":97,"updated":"2023-01-31 17:41:40.000000000","message":"same, please log at INFO or above","commit_id":"2b9dc4418cc4878f6437b727bb0dcf5ffff4c08e"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"5156fb8a0ef7fd5b8f824f364f7ed260bf707aed","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            if e.http_status \u003d\u003d 404:"},{"line_number":95,"context_line":"                # 404 -\u003e entry did not exist - acceptable."},{"line_number":96,"context_line":"                return"},{"line_number":97,"context_line":"            LOG.debug(\"Object %(obj)s related to node %(node)s \""},{"line_number":98,"context_line":"                      \"failed to be deleted\","},{"line_number":99,"context_line":"                      {\u0027obj\u0027: plugin_obj_name, \u0027node\u0027: task.node.uuid})"},{"line_number":100,"context_line":"            raise exception.SwiftObjectStillExists(plugin_obj_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"71d75cfc_fad4b4f5","line":97,"in_reply_to":"bd606d3d_1fa3c4fc","updated":"2023-02-01 15:14:00.000000000","message":"Ack","commit_id":"2b9dc4418cc4878f6437b727bb0dcf5ffff4c08e"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"49fb1d0a6be52be5ec814ababa13d0cc1e1da991","unresolved":true,"context_lines":[{"line_number":198,"context_line":"        plugin_data \u003d swift_api.get_object(swift_object_name + \u0027-plugin\u0027,"},{"line_number":199,"context_line":"                                           container)"},{"line_number":200,"context_line":"        return {\"inventory\": inventory_data, \"plugin_data\": plugin_data}"},{"line_number":201,"context_line":"    except exception.SwitfOperationError:"},{"line_number":202,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":8,"id":"a9ac552f_4e067aa3","line":201,"updated":"2023-01-31 17:41:40.000000000","message":"spelling: Swift\n\nAlso that indicates this line isn\u0027t touched at all in the currently-passing tests, you may want to consider increasing test coverage.","commit_id":"2b9dc4418cc4878f6437b727bb0dcf5ffff4c08e"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"5156fb8a0ef7fd5b8f824f364f7ed260bf707aed","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        plugin_data \u003d swift_api.get_object(swift_object_name + \u0027-plugin\u0027,"},{"line_number":199,"context_line":"                                           container)"},{"line_number":200,"context_line":"        return {\"inventory\": inventory_data, \"plugin_data\": plugin_data}"},{"line_number":201,"context_line":"    except exception.SwitfOperationError:"},{"line_number":202,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":8,"id":"d7ce8659_bfd30424","line":201,"in_reply_to":"a9ac552f_4e067aa3","updated":"2023-02-01 15:14:00.000000000","message":"Ack","commit_id":"2b9dc4418cc4878f6437b727bb0dcf5ffff4c08e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"92b0c4bf332968321f855d3d76d4a2e67c596bc7","unresolved":true,"context_lines":[{"line_number":81,"context_line":"        except ClientException as e:"},{"line_number":82,"context_line":"            if e.http_status \u003d\u003d 404:"},{"line_number":83,"context_line":"                # 404 -\u003e entry did not exist - acceptable."},{"line_number":84,"context_line":"                return"},{"line_number":85,"context_line":"            LOG.info(\"Object %(obj)s related to node %(node)s \""},{"line_number":86,"context_line":"                     \"failed to be deleted\","},{"line_number":87,"context_line":"                     {\u0027obj\u0027: inventory_obj_name, \u0027node\u0027: task.node.uuid})"}],"source_content_type":"text/x-python","patch_set":9,"id":"97aaab25_135e5e90","line":84,"updated":"2023-02-03 15:22:41.000000000","message":"You cannot return here, you need to try the 2nd deletion","commit_id":"644974df3153a88b1fa8df8697ada32ac86063b7"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"b4491cb0054b5c313277af1b101be38cf8fb6b0d","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        except ClientException as e:"},{"line_number":82,"context_line":"            if e.http_status \u003d\u003d 404:"},{"line_number":83,"context_line":"                # 404 -\u003e entry did not exist - acceptable."},{"line_number":84,"context_line":"                return"},{"line_number":85,"context_line":"            LOG.info(\"Object %(obj)s related to node %(node)s \""},{"line_number":86,"context_line":"                     \"failed to be deleted\","},{"line_number":87,"context_line":"                     {\u0027obj\u0027: inventory_obj_name, \u0027node\u0027: task.node.uuid})"}],"source_content_type":"text/x-python","patch_set":9,"id":"b662f454_83123ce7","line":84,"in_reply_to":"97aaab25_135e5e90","updated":"2023-02-03 16:29:09.000000000","message":"Ack","commit_id":"644974df3153a88b1fa8df8697ada32ac86063b7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"92b0c4bf332968321f855d3d76d4a2e67c596bc7","unresolved":true,"context_lines":[{"line_number":82,"context_line":"            if e.http_status \u003d\u003d 404:"},{"line_number":83,"context_line":"                # 404 -\u003e entry did not exist - acceptable."},{"line_number":84,"context_line":"                return"},{"line_number":85,"context_line":"            LOG.info(\"Object %(obj)s related to node %(node)s \""},{"line_number":86,"context_line":"                     \"failed to be deleted\","},{"line_number":87,"context_line":"                     {\u0027obj\u0027: inventory_obj_name, \u0027node\u0027: task.node.uuid})"},{"line_number":88,"context_line":"            raise exception.SwiftObjectStillExists(inventory_obj_name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ce5db279_bdabb6ad","line":85,"updated":"2023-02-03 15:22:41.000000000","message":"s/info/error/","commit_id":"644974df3153a88b1fa8df8697ada32ac86063b7"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"b4491cb0054b5c313277af1b101be38cf8fb6b0d","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            if e.http_status \u003d\u003d 404:"},{"line_number":83,"context_line":"                # 404 -\u003e entry did not exist - acceptable."},{"line_number":84,"context_line":"                return"},{"line_number":85,"context_line":"            LOG.info(\"Object %(obj)s related to node %(node)s \""},{"line_number":86,"context_line":"                     \"failed to be deleted\","},{"line_number":87,"context_line":"                     {\u0027obj\u0027: inventory_obj_name, \u0027node\u0027: task.node.uuid})"},{"line_number":88,"context_line":"            raise exception.SwiftObjectStillExists(inventory_obj_name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"39efa346_19582d84","line":85,"in_reply_to":"ce5db279_bdabb6ad","updated":"2023-02-03 16:29:09.000000000","message":"Done","commit_id":"644974df3153a88b1fa8df8697ada32ac86063b7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"92b0c4bf332968321f855d3d76d4a2e67c596bc7","unresolved":true,"context_lines":[{"line_number":93,"context_line":"            if e.http_status \u003d\u003d 404:"},{"line_number":94,"context_line":"                # 404 -\u003e entry did not exist - acceptable."},{"line_number":95,"context_line":"                return"},{"line_number":96,"context_line":"            LOG.info(\"Object %(obj)s related to node %(node)s \""},{"line_number":97,"context_line":"                     \"failed to be deleted\","},{"line_number":98,"context_line":"                     {\u0027obj\u0027: plugin_obj_name, \u0027node\u0027: task.node.uuid})"},{"line_number":99,"context_line":"            raise exception.SwiftObjectStillExists(plugin_obj_name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9daa46e2_bd10702c","line":96,"updated":"2023-02-03 15:22:41.000000000","message":"s/info/error/","commit_id":"644974df3153a88b1fa8df8697ada32ac86063b7"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"b4491cb0054b5c313277af1b101be38cf8fb6b0d","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            if e.http_status \u003d\u003d 404:"},{"line_number":94,"context_line":"                # 404 -\u003e entry did not exist - acceptable."},{"line_number":95,"context_line":"                return"},{"line_number":96,"context_line":"            LOG.info(\"Object %(obj)s related to node %(node)s \""},{"line_number":97,"context_line":"                     \"failed to be deleted\","},{"line_number":98,"context_line":"                     {\u0027obj\u0027: plugin_obj_name, \u0027node\u0027: task.node.uuid})"},{"line_number":99,"context_line":"            raise exception.SwiftObjectStillExists(plugin_obj_name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff06c80e_63a2afd8","line":96,"in_reply_to":"9daa46e2_bd10702c","updated":"2023-02-03 16:29:09.000000000","message":"Done","commit_id":"644974df3153a88b1fa8df8697ada32ac86063b7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"37edd76aabfdcf8f3b5b62c27beb6713a08e777f","unresolved":true,"context_lines":[{"line_number":70,"context_line":"    :param task: A TaskManager instance."},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    store_data \u003d CONF.inventory.data_backend"},{"line_number":73,"context_line":"    if store_data \u003d\u003d \u0027swift\u0027:"},{"line_number":74,"context_line":"        swift_api \u003d swift.SwiftAPI()"},{"line_number":75,"context_line":"        swift_object_name \u003d \u0027%s-%s\u0027 % (_OBJECT_NAME_PREFIX, task.node.uuid)"},{"line_number":76,"context_line":"        container \u003d CONF.inventory.swift_data_container"}],"source_content_type":"text/x-python","patch_set":10,"id":"5292ac01_b22d5a2f","line":73,"updated":"2023-02-06 16:48:11.000000000","message":"nit: you can simpify the flow a bit\n\n if CONF.inventory.data_backend !\u003d \u0027swift\u0027:\n     return","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"28b18260315636107a225793225d15de8d75d601","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    :param task: A TaskManager instance."},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    store_data \u003d CONF.inventory.data_backend"},{"line_number":73,"context_line":"    if store_data \u003d\u003d \u0027swift\u0027:"},{"line_number":74,"context_line":"        swift_api \u003d swift.SwiftAPI()"},{"line_number":75,"context_line":"        swift_object_name \u003d \u0027%s-%s\u0027 % (_OBJECT_NAME_PREFIX, task.node.uuid)"},{"line_number":76,"context_line":"        container \u003d CONF.inventory.swift_data_container"}],"source_content_type":"text/x-python","patch_set":10,"id":"7c3ab6b1_14c4988f","line":73,"in_reply_to":"5292ac01_b22d5a2f","updated":"2023-02-08 12:16:43.000000000","message":"Done","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"37edd76aabfdcf8f3b5b62c27beb6713a08e777f","unresolved":true,"context_lines":[{"line_number":84,"context_line":"                pass"},{"line_number":85,"context_line":"            else:"},{"line_number":86,"context_line":"                LOG.error(\"Object %(obj)s related to node %(node)s \""},{"line_number":87,"context_line":"                          \"failed to be deleted\","},{"line_number":88,"context_line":"                          {\u0027obj\u0027: inventory_obj_name, \u0027node\u0027: task.node.uuid})"},{"line_number":89,"context_line":"                raise exception.SwiftObjectStillExists(obj\u003dinventory_obj_name,"},{"line_number":90,"context_line":"                                                       node\u003dtask.node.uuid)"}],"source_content_type":"text/x-python","patch_set":10,"id":"6686da14_ffd0f1ff","line":87,"updated":"2023-02-06 16:48:11.000000000","message":"Could you at least log the exception e here? otherwise you\u0027re losing it completely.\n\nSame below","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"28b18260315636107a225793225d15de8d75d601","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                pass"},{"line_number":85,"context_line":"            else:"},{"line_number":86,"context_line":"                LOG.error(\"Object %(obj)s related to node %(node)s \""},{"line_number":87,"context_line":"                          \"failed to be deleted\","},{"line_number":88,"context_line":"                          {\u0027obj\u0027: inventory_obj_name, \u0027node\u0027: task.node.uuid})"},{"line_number":89,"context_line":"                raise exception.SwiftObjectStillExists(obj\u003dinventory_obj_name,"},{"line_number":90,"context_line":"                                                       node\u003dtask.node.uuid)"}],"source_content_type":"text/x-python","patch_set":10,"id":"aa58ca15_9feb1f30","line":87,"in_reply_to":"6686da14_ffd0f1ff","updated":"2023-02-08 12:16:43.000000000","message":"Done","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"37edd76aabfdcf8f3b5b62c27beb6713a08e777f","unresolved":true,"context_lines":[{"line_number":151,"context_line":"    or swift as configured."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    :param node_id: the Ironic node that the required data is about"},{"line_number":154,"context_line":"    :param context: an admin context"},{"line_number":155,"context_line":"    \"\"\""},{"line_number":156,"context_line":"    store_data \u003d CONF.inventory.data_backend"},{"line_number":157,"context_line":"    if store_data \u003d\u003d \u0027none\u0027:"}],"source_content_type":"text/x-python","patch_set":10,"id":"b0224a18_b701b657","line":154,"updated":"2023-02-06 16:48:11.000000000","message":"nit: missing :returns:","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"28b18260315636107a225793225d15de8d75d601","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    or swift as configured."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    :param node_id: the Ironic node that the required data is about"},{"line_number":154,"context_line":"    :param context: an admin context"},{"line_number":155,"context_line":"    \"\"\""},{"line_number":156,"context_line":"    store_data \u003d CONF.inventory.data_backend"},{"line_number":157,"context_line":"    if store_data \u003d\u003d \u0027none\u0027:"}],"source_content_type":"text/x-python","patch_set":10,"id":"2793911f_cf4715b6","line":154,"in_reply_to":"b0224a18_b701b657","updated":"2023-02-08 12:16:43.000000000","message":"Done","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"37edd76aabfdcf8f3b5b62c27beb6713a08e777f","unresolved":true,"context_lines":[{"line_number":197,"context_line":"    plug_obj \u003d swift_object_name + \u0027-plugin\u0027"},{"line_number":198,"context_line":"    try:"},{"line_number":199,"context_line":"        inventory_data \u003d swift_api.get_object(inv_obj, container)"},{"line_number":200,"context_line":"    except exception.SwiftOperationError:"},{"line_number":201,"context_line":"        LOG.info(\"Failed to retrieve object %(obj)s from swift\","},{"line_number":202,"context_line":"                 {\u0027obj\u0027: inv_obj})"},{"line_number":203,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":10,"id":"f426ee89_28522679","line":200,"updated":"2023-02-06 16:48:11.000000000","message":"I\u0027m not sure this change is correct, and I\u0027m even less sure it belongs in this patch. Previously, get_introspection_data would never return None. How will API behave in this case? Is it something we expect the requesters to see?","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"28b18260315636107a225793225d15de8d75d601","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    plug_obj \u003d swift_object_name + \u0027-plugin\u0027"},{"line_number":198,"context_line":"    try:"},{"line_number":199,"context_line":"        inventory_data \u003d swift_api.get_object(inv_obj, container)"},{"line_number":200,"context_line":"    except exception.SwiftOperationError:"},{"line_number":201,"context_line":"        LOG.info(\"Failed to retrieve object %(obj)s from swift\","},{"line_number":202,"context_line":"                 {\u0027obj\u0027: inv_obj})"},{"line_number":203,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":10,"id":"58ad9c12_8549e0af","line":200,"in_reply_to":"f426ee89_28522679","updated":"2023-02-08 12:16:43.000000000","message":"Raise SwiftObjectNotFoundError instead as discussed in IRC","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"fd78134351401b5a7ab4bce613250746dbbc648e","unresolved":true,"context_lines":[{"line_number":157,"context_line":"    \"\"\""},{"line_number":158,"context_line":"    store_data \u003d CONF.inventory.data_backend"},{"line_number":159,"context_line":"    if store_data \u003d\u003d \u0027none\u0027:"},{"line_number":160,"context_line":"        raise exception.NodeInventoryNotFound(node.uuid)"},{"line_number":161,"context_line":"    if store_data \u003d\u003d \u0027database\u0027:"},{"line_number":162,"context_line":"        try:"},{"line_number":163,"context_line":"            node_inventory \u003d objects.NodeInventory.get_by_node_id("}],"source_content_type":"text/x-python","patch_set":13,"id":"92c5f854_300da04b","line":160,"updated":"2023-02-10 14:26:03.000000000","message":"I suspect if you create the exception like this, it will use node.uuid as the error message, which is not what you want. I assume you meant (inventory\u003dnode.uuid)","commit_id":"be89d1a71e0376fcbae86d93326e391bd71069a5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"fd78134351401b5a7ab4bce613250746dbbc648e","unresolved":true,"context_lines":[{"line_number":162,"context_line":"        try:"},{"line_number":163,"context_line":"            node_inventory \u003d objects.NodeInventory.get_by_node_id("},{"line_number":164,"context_line":"                context, node.id)"},{"line_number":165,"context_line":"        except exception.NodeInventoryNotFound:"},{"line_number":166,"context_line":"            raise"},{"line_number":167,"context_line":"        return _node_inventory_convert(node_inventory)"},{"line_number":168,"context_line":"    if store_data \u003d\u003d \u0027swift\u0027:"}],"source_content_type":"text/x-python","patch_set":13,"id":"6d771637_249d4dcd","line":165,"updated":"2023-02-10 14:26:03.000000000","message":"This try..except block does nothing now and can be removed","commit_id":"be89d1a71e0376fcbae86d93326e391bd71069a5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"fd78134351401b5a7ab4bce613250746dbbc648e","unresolved":true,"context_lines":[{"line_number":169,"context_line":"        try:"},{"line_number":170,"context_line":"            node_inventory \u003d _get_introspection_data_from_swift(node.uuid)"},{"line_number":171,"context_line":"        except exception.SwiftObjectNotFoundError:"},{"line_number":172,"context_line":"            raise exception.NodeInventoryNotFound(node.uuid)"},{"line_number":173,"context_line":"        return node_inventory"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"894e9042_4241b3d3","line":172,"updated":"2023-02-10 14:26:03.000000000","message":"ditto re passing UUID","commit_id":"be89d1a71e0376fcbae86d93326e391bd71069a5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"623931096e35b96765042f93a06ce67b541d55f0","unresolved":true,"context_lines":[{"line_number":203,"context_line":"    try:"},{"line_number":204,"context_line":"        inventory_data \u003d swift_api.get_object(inv_obj, container)"},{"line_number":205,"context_line":"    except exception.SwiftOperationError:"},{"line_number":206,"context_line":"        LOG.info(\"Failed to retrieve object %(obj)s from swift\","},{"line_number":207,"context_line":"                 {\u0027obj\u0027: inv_obj})"},{"line_number":208,"context_line":"        raise exception.SwiftObjectNotFoundError(obj\u003dinv_obj,"},{"line_number":209,"context_line":"                                                 container\u003dcontainer,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f699554_0af19f70","line":206,"updated":"2023-02-14 09:17:44.000000000","message":"nit: s/info/error/","commit_id":"a7c752d1a4866dd0ad419a2cc179571c8b64b009"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"a1e60bbd6c25668028a21d8ee9dd7da19f642e6d","unresolved":false,"context_lines":[{"line_number":203,"context_line":"    try:"},{"line_number":204,"context_line":"        inventory_data \u003d swift_api.get_object(inv_obj, container)"},{"line_number":205,"context_line":"    except exception.SwiftOperationError:"},{"line_number":206,"context_line":"        LOG.info(\"Failed to retrieve object %(obj)s from swift\","},{"line_number":207,"context_line":"                 {\u0027obj\u0027: inv_obj})"},{"line_number":208,"context_line":"        raise exception.SwiftObjectNotFoundError(obj\u003dinv_obj,"},{"line_number":209,"context_line":"                                                 container\u003dcontainer,"}],"source_content_type":"text/x-python","patch_set":15,"id":"6c25d062_24b9b29a","line":206,"in_reply_to":"5f699554_0af19f70","updated":"2023-02-14 13:29:07.000000000","message":"Done","commit_id":"a7c752d1a4866dd0ad419a2cc179571c8b64b009"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"623931096e35b96765042f93a06ce67b541d55f0","unresolved":true,"context_lines":[{"line_number":211,"context_line":"    try:"},{"line_number":212,"context_line":"        plugin_data \u003d swift_api.get_object(plug_obj, container)"},{"line_number":213,"context_line":"    except exception.SwiftOperationError:"},{"line_number":214,"context_line":"        LOG.info(\"Failed to retrieve object %(obj)s from swift\","},{"line_number":215,"context_line":"                 {\u0027obj\u0027: plug_obj})"},{"line_number":216,"context_line":"        raise exception.SwiftObjectNotFoundError(obj\u003dplug_obj,"},{"line_number":217,"context_line":"                                                 container\u003dcontainer,"}],"source_content_type":"text/x-python","patch_set":15,"id":"808c28f3_ef967a25","line":214,"updated":"2023-02-14 09:17:44.000000000","message":"same","commit_id":"a7c752d1a4866dd0ad419a2cc179571c8b64b009"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"a1e60bbd6c25668028a21d8ee9dd7da19f642e6d","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    try:"},{"line_number":212,"context_line":"        plugin_data \u003d swift_api.get_object(plug_obj, container)"},{"line_number":213,"context_line":"    except exception.SwiftOperationError:"},{"line_number":214,"context_line":"        LOG.info(\"Failed to retrieve object %(obj)s from swift\","},{"line_number":215,"context_line":"                 {\u0027obj\u0027: plug_obj})"},{"line_number":216,"context_line":"        raise exception.SwiftObjectNotFoundError(obj\u003dplug_obj,"},{"line_number":217,"context_line":"                                                 container\u003dcontainer,"}],"source_content_type":"text/x-python","patch_set":15,"id":"87f649a9_19a0e81e","line":214,"in_reply_to":"808c28f3_ef967a25","updated":"2023-02-14 13:29:07.000000000","message":"Done","commit_id":"a7c752d1a4866dd0ad419a2cc179571c8b64b009"}],"ironic/tests/unit/conductor/test_manager.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"72faf6db42e0632b44622e4143faad377e009c86","unresolved":true,"context_lines":[{"line_number":3909,"context_line":"        CONF.set_override(\u0027data_backend\u0027, \u0027swift\u0027, group\u003d\u0027inventory\u0027)"},{"line_number":3910,"context_line":"        self._start_service()"},{"line_number":3911,"context_line":"        self.service.destroy_node(self.context, node.uuid)"},{"line_number":3912,"context_line":"        mock_clean_up.assert_called_once_with(task)"},{"line_number":3913,"context_line":""},{"line_number":3914,"context_line":""},{"line_number":3915,"context_line":"@mgr_utils.mock_record_keepalive"}],"source_content_type":"text/x-python","patch_set":4,"id":"b2af736c_3da80609","line":3912,"updated":"2023-01-26 11:37:30.000000000","message":"task is not defined here (you can use mock.ANY)","commit_id":"7d27bcc28bdd3ac33af16f970803a0a49193b5d1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"37edd76aabfdcf8f3b5b62c27beb6713a08e777f","unresolved":true,"context_lines":[{"line_number":3933,"context_line":"        mock_clean_up.side_effect \u003d exception.SwiftObjectStillExists("},{"line_number":3934,"context_line":"            obj\u003d\"inventory-123\", node\u003dnode.uuid)"},{"line_number":3935,"context_line":"        self._start_service()"},{"line_number":3936,"context_line":"        self.service.destroy_node(self.context, node.uuid)"},{"line_number":3937,"context_line":"        mock_notify.assert_called_once_with("},{"line_number":3938,"context_line":"            mock.ANY, \u0027console_set\u0027, obj_fields.NotificationStatus.ERROR)"},{"line_number":3939,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"6ec82577_26b90b01","line":3936,"updated":"2023-02-06 16:48:11.000000000","message":"This is supposed to fail to block the deletion.","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"28b18260315636107a225793225d15de8d75d601","unresolved":false,"context_lines":[{"line_number":3933,"context_line":"        mock_clean_up.side_effect \u003d exception.SwiftObjectStillExists("},{"line_number":3934,"context_line":"            obj\u003d\"inventory-123\", node\u003dnode.uuid)"},{"line_number":3935,"context_line":"        self._start_service()"},{"line_number":3936,"context_line":"        self.service.destroy_node(self.context, node.uuid)"},{"line_number":3937,"context_line":"        mock_notify.assert_called_once_with("},{"line_number":3938,"context_line":"            mock.ANY, \u0027console_set\u0027, obj_fields.NotificationStatus.ERROR)"},{"line_number":3939,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"0a964b59_f0dbf08b","line":3936,"in_reply_to":"6ec82577_26b90b01","updated":"2023-02-08 12:16:43.000000000","message":"Done","commit_id":"7149093ddcedc0ec519be9cfcac071620eedd58e"}],"ironic/tests/unit/db/test_nodes.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"72faf6db42e0632b44622e4143faad377e009c86","unresolved":true,"context_lines":[{"line_number":29,"context_line":"from ironic.tests.unit.db import utils"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"CONF \u003d inspector.CONF"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class DbNodeTestCase(base.DbTestCase):"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"0aaa4c95_734e9cd0","line":32,"updated":"2023-01-26 11:37:30.000000000","message":"This needs reverting","commit_id":"7d27bcc28bdd3ac33af16f970803a0a49193b5d1"}],"ironic/tests/unit/drivers/modules/test_inspect_utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"439d4bec04e4a03b273f826350e153b614b0df4f","unresolved":true,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @mock.patch.object(swift, \u0027SwiftAPI\u0027, autospec\u003dTrue)"},{"line_number":104,"context_line":"    @mock.patch.object(objects, \u0027Node\u0027, spec_set\u003dTrue, autospec\u003dTrue)"},{"line_number":105,"context_line":"    def test_clean_up_swift_entries(self, mock_node, swift_api_mock):"},{"line_number":106,"context_line":"        CONF.set_override(\u0027data_backend\u0027, \u0027swift\u0027, group\u003d\u0027inventory\u0027)"},{"line_number":107,"context_line":"        container \u003d \u0027introspection_data\u0027"},{"line_number":108,"context_line":"        CONF.set_override(\u0027swift_data_container\u0027, container, group\u003d\u0027inventory\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1590c652_c033cfeb","line":105,"updated":"2023-01-25 15:43:22.000000000","message":"Could you add one more test where swiftclient raises exceptions?","commit_id":"eee6c0c07ba79c186e536d1c408491bbacbadf2c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"623931096e35b96765042f93a06ce67b541d55f0","unresolved":true,"context_lines":[{"line_number":17,"context_line":"from unittest import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_utils import importutils"},{"line_number":20,"context_line":"from swiftclient.exceptions import ClientException"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from ironic.common import context as ironic_context"},{"line_number":23,"context_line":"from ironic.common import exception"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a30ebbf_2df0e8b2","line":20,"updated":"2023-02-14 09:17:44.000000000","message":"nit: we prefer to import whole modules, not contained items (classes, functions)","commit_id":"a7c752d1a4866dd0ad419a2cc179571c8b64b009"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"a1e60bbd6c25668028a21d8ee9dd7da19f642e6d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from unittest import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_utils import importutils"},{"line_number":20,"context_line":"from swiftclient.exceptions import ClientException"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from ironic.common import context as ironic_context"},{"line_number":23,"context_line":"from ironic.common import exception"}],"source_content_type":"text/x-python","patch_set":15,"id":"d562cafd_d906b043","line":20,"in_reply_to":"9a30ebbf_2df0e8b2","updated":"2023-02-14 13:29:07.000000000","message":"Done","commit_id":"a7c752d1a4866dd0ad419a2cc179571c8b64b009"}]}
