)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"1c3da70d8cb551fd8c28129865ebd0cc82dacbf4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"82da7ba6_c1122586","updated":"2026-08-04 05:40:15.000000000","message":"Thanks, Dmitry, comments should be all resolved.","commit_id":"aecf59b61f23821f415c2a7a886f322971ad4ee0"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"7b60684817d7fbdfe050d8af18ce12f0b91bdf03","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"893d41e9_a5413116","updated":"2026-08-19 00:40:05.000000000","message":"Thank you for your review, Jay, uploading revised version.","commit_id":"786426d81d632004f558ff56d88d4cb3cd73b400"}],"ironic/drivers/modules/redfish/firmware.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d48be93d81284f7b165ee68493d814f04c0aedd3","unresolved":true,"context_lines":[{"line_number":646,"context_line":"        # NOTE(janders) if we see more than one System on the BMC, assume that"},{"line_number":647,"context_line":"        # we need to explicitly specify Target parameter when calling"},{"line_number":648,"context_line":"        # SimpleUpdate. This is needed for compatibility with sushy-tools"},{"line_number":649,"context_line":"        # in automated testing using VMs."},{"line_number":650,"context_line":"        if count \u003e 1:"},{"line_number":651,"context_line":"            target \u003d node.driver_info.get(\u0027redfish_system_id\u0027)"},{"line_number":652,"context_line":"            targets \u003d [target]"}],"source_content_type":"text/x-python","patch_set":1,"id":"c28ab363_a2bdc1eb","side":"PARENT","line":649,"updated":"2026-08-03 09:29:36.000000000","message":"This comment looks helpful, why delete it?","commit_id":"7f2e31b311f4f424e17fbac1b721f5c0b284de64"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"1c3da70d8cb551fd8c28129865ebd0cc82dacbf4","unresolved":false,"context_lines":[{"line_number":646,"context_line":"        # NOTE(janders) if we see more than one System on the BMC, assume that"},{"line_number":647,"context_line":"        # we need to explicitly specify Target parameter when calling"},{"line_number":648,"context_line":"        # SimpleUpdate. This is needed for compatibility with sushy-tools"},{"line_number":649,"context_line":"        # in automated testing using VMs."},{"line_number":650,"context_line":"        if count \u003e 1:"},{"line_number":651,"context_line":"            target \u003d node.driver_info.get(\u0027redfish_system_id\u0027)"},{"line_number":652,"context_line":"            targets \u003d [target]"}],"source_content_type":"text/x-python","patch_set":1,"id":"6b0d9550_8116ec16","side":"PARENT","line":649,"in_reply_to":"c28ab363_a2bdc1eb","updated":"2026-08-04 05:40:15.000000000","message":"Done","commit_id":"7f2e31b311f4f424e17fbac1b721f5c0b284de64"},{"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":"86fe0fcda4bf89fad5bdf8c6fedd833cb1b48ef5","unresolved":true,"context_lines":[{"line_number":829,"context_line":"        else:"},{"line_number":830,"context_line":"            LOG.error(\u0027No step type set on node %(node)s when attempting \u0027"},{"line_number":831,"context_line":"                      \u0027to report firmware update error: %(error)s\u0027,"},{"line_number":832,"context_line":"                      {\u0027node\u0027: task.node.uuid, \u0027error\u0027: error_msg})"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"    def _resume_step(self, task):"},{"line_number":835,"context_line":"        \"\"\"Notify the conductor to resume the current step."}],"source_content_type":"text/x-python","patch_set":4,"id":"f38e55f4_12e2e683","line":832,"updated":"2026-08-13 21:22:41.000000000","message":"This feels like it should lead to a node in error or in maintenance or *something*. Simply logging an error here won\u0027t put something in last_error or node history.","commit_id":"1fe7dffcf684e59eed76f4f71ae5955a4738becc"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"7b60684817d7fbdfe050d8af18ce12f0b91bdf03","unresolved":false,"context_lines":[{"line_number":829,"context_line":"        else:"},{"line_number":830,"context_line":"            LOG.error(\u0027No step type set on node %(node)s when attempting \u0027"},{"line_number":831,"context_line":"                      \u0027to report firmware update error: %(error)s\u0027,"},{"line_number":832,"context_line":"                      {\u0027node\u0027: task.node.uuid, \u0027error\u0027: error_msg})"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"    def _resume_step(self, task):"},{"line_number":835,"context_line":"        \"\"\"Notify the conductor to resume the current step."}],"source_content_type":"text/x-python","patch_set":4,"id":"f4a7478e_424f64e7","line":832,"in_reply_to":"f38e55f4_12e2e683","updated":"2026-08-19 00:40:05.000000000","message":"Good point, Jay. Added setting maintenance and node history entry. Is this good?","commit_id":"1fe7dffcf684e59eed76f4f71ae5955a4738becc"}],"ironic/tests/unit/drivers/modules/redfish/test_firmware.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d48be93d81284f7b165ee68493d814f04c0aedd3","unresolved":true,"context_lines":[{"line_number":952,"context_line":"        \"\"\"Test firmware update fails when overall timeout is exceeded."},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"        Uses _generate_new_driver_internal_info which sets clean_step, so"},{"line_number":955,"context_line":"        the error must be routed to cleaning_error_handler (not servicing)."},{"line_number":956,"context_line":"        \"\"\""},{"line_number":957,"context_line":"        self._generate_new_driver_internal_info([\u0027bmc\u0027])"},{"line_number":958,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bb97c82b_1bc396a0","line":955,"updated":"2026-08-03 09:29:36.000000000","message":"The previous comment was helpful, this seems to be an intermediate decision","commit_id":"c93a1818c6bc0efb74bb3ecaf8b206c866a4dd24"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"1c3da70d8cb551fd8c28129865ebd0cc82dacbf4","unresolved":false,"context_lines":[{"line_number":952,"context_line":"        \"\"\"Test firmware update fails when overall timeout is exceeded."},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"        Uses _generate_new_driver_internal_info which sets clean_step, so"},{"line_number":955,"context_line":"        the error must be routed to cleaning_error_handler (not servicing)."},{"line_number":956,"context_line":"        \"\"\""},{"line_number":957,"context_line":"        self._generate_new_driver_internal_info([\u0027bmc\u0027])"},{"line_number":958,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"377fc1e2_0f8ef70d","line":955,"in_reply_to":"bb97c82b_1bc396a0","updated":"2026-08-04 05:40:15.000000000","message":"Done","commit_id":"c93a1818c6bc0efb74bb3ecaf8b206c866a4dd24"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d48be93d81284f7b165ee68493d814f04c0aedd3","unresolved":true,"context_lines":[{"line_number":961,"context_line":"                     - datetime.timedelta(hours\u003d3)).isoformat()"},{"line_number":962,"context_line":"        self.node.set_driver_internal_info(\u0027redfish_fw_update_start_time\u0027,"},{"line_number":963,"context_line":"                                           past_time)"},{"line_number":964,"context_line":"        self.node.save()"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        firmware \u003d redfish_fw.RedfishFirmware()"},{"line_number":967,"context_line":"        with task_manager.acquire(self.context, self.node.uuid,"}],"source_content_type":"text/x-python","patch_set":1,"id":"b7900bb0_cda689c8","line":964,"updated":"2026-08-03 09:29:36.000000000","message":"Let\u0027s set the provision_state explicitly so that it\u0027s logical which error handler is used","commit_id":"c93a1818c6bc0efb74bb3ecaf8b206c866a4dd24"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"1c3da70d8cb551fd8c28129865ebd0cc82dacbf4","unresolved":false,"context_lines":[{"line_number":961,"context_line":"                     - datetime.timedelta(hours\u003d3)).isoformat()"},{"line_number":962,"context_line":"        self.node.set_driver_internal_info(\u0027redfish_fw_update_start_time\u0027,"},{"line_number":963,"context_line":"                                           past_time)"},{"line_number":964,"context_line":"        self.node.save()"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        firmware \u003d redfish_fw.RedfishFirmware()"},{"line_number":967,"context_line":"        with task_manager.acquire(self.context, self.node.uuid,"}],"source_content_type":"text/x-python","patch_set":1,"id":"97850e3c_a1f09fa8","line":964,"in_reply_to":"b7900bb0_cda689c8","updated":"2026-08-04 05:40:15.000000000","message":"Done","commit_id":"c93a1818c6bc0efb74bb3ecaf8b206c866a4dd24"}]}
