)]}'
{"ironic/conductor/utils.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"7fd355fe7d513098a01fc949604e80b9427150c4","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    if tear_down_cleaning:"},{"line_number":390,"context_line":"        try:"},{"line_number":391,"context_line":"            task.driver.deploy.tear_down_cleaning(task, power_off\u003dpower_off)"},{"line_number":392,"context_line":"        except Exception as e:"},{"line_number":393,"context_line":"            msg2 \u003d (\u0027Failed to tear down cleaning on node %(uuid)s, \u0027"},{"line_number":394,"context_line":"                    \u0027reason: %(err)s\u0027 % {\u0027err\u0027: e, \u0027uuid\u0027: node.uuid})"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_2b1966d6","line":391,"updated":"2019-05-07 12:22:54.000000000","message":"shouldn\u0027t this be always False ?\nMy understanding is that cleaning_error_handler is called every time there is a failure in the cleaning process, so the node should never be powered off when reaching this point.","commit_id":"c2405cfd9d1c3faada90dd490082b023ac9053a3"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"e4799a0b62212ef75a018cb547d2ea713c9b0c12","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    if tear_down_cleaning:"},{"line_number":390,"context_line":"        try:"},{"line_number":391,"context_line":"            task.driver.deploy.tear_down_cleaning(task, power_off\u003dpower_off)"},{"line_number":392,"context_line":"        except Exception as e:"},{"line_number":393,"context_line":"            msg2 \u003d (\u0027Failed to tear down cleaning on node %(uuid)s, \u0027"},{"line_number":394,"context_line":"                    \u0027reason: %(err)s\u0027 % {\u0027err\u0027: e, \u0027uuid\u0027: node.uuid})"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_815f1340","line":391,"in_reply_to":"dfbec78f_2b1966d6","updated":"2019-05-07 12:43:05.000000000","message":"There are situations where this function is called and the node should probably be shut off (like when the interfaces are validated to see if cleaning is feasible).\n\nI decided to keep the current function behavior as the default since everyone was fine with this during the past years (a kind of behavioral backwards compatibility), so I only changed the calls where this seemed obviously wrong to me.","commit_id":"c2405cfd9d1c3faada90dd490082b023ac9053a3"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"f293d3bb1fb29a98b6b63cb5629a5c0a829e3293","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    if tear_down_cleaning:"},{"line_number":390,"context_line":"        try:"},{"line_number":391,"context_line":"            task.driver.deploy.tear_down_cleaning(task, power_off\u003dpower_off)"},{"line_number":392,"context_line":"        except Exception as e:"},{"line_number":393,"context_line":"            msg2 \u003d (\u0027Failed to tear down cleaning on node %(uuid)s, \u0027"},{"line_number":394,"context_line":"                    \u0027reason: %(err)s\u0027 % {\u0027err\u0027: e, \u0027uuid\u0027: node.uuid})"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_94ff5200","line":391,"in_reply_to":"dfbec78f_815f1340","updated":"2019-05-07 13:33:27.000000000","message":"My concern is that this could be a bit confusing as the node will end up in CLEANFAIL, but powered off or on based on what triggered the call, and might not be always clear.\nFor example, the case you mentioned, when the interfaces are validated, will (or should) bring the node in CLEANFAIL and then it powers it off.\nIt still goes against the idea of being in maintenance and powered on if the cleaning fails, or in this case the validation, which being a prerequisite for the cleaning, should still be investigated.\nWith that said, I understand the need of keeping backwards compatibility, so if everyone else is ok with that, I am too :)","commit_id":"c2405cfd9d1c3faada90dd490082b023ac9053a3"}],"ironic/drivers/modules/agent_base_vendor.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"82e1a0dbf1957ab49e1f070c35baecf42f9cd478","unresolved":false,"context_lines":[{"line_number":546,"context_line":"                    \u0027step\u0027: node.clean_step})"},{"line_number":547,"context_line":"            LOG.error(msg)"},{"line_number":548,"context_line":"            return manager_utils.cleaning_error_handler("},{"line_number":549,"context_line":"                task, msg, tear_down_cleaning\u003dFalse)"},{"line_number":550,"context_line":"        elif command.get(\u0027command_status\u0027) \u003d\u003d \u0027CLEAN_VERSION_MISMATCH\u0027:"},{"line_number":551,"context_line":"            # Cache the new clean steps (and \u0027hardware_manager_version\u0027)"},{"line_number":552,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_7b0eeb8c","line":549,"updated":"2019-04-08 16:29:14.000000000","message":"Oh wow, yeah, we should have never stopped. EEK!","commit_id":"ee2d890cb87431bd91681587dc36f1d8990f1687"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"fe600a9c43d6aa2f5bfb6ecbb8d1021f7f2b6e18","unresolved":false,"context_lines":[{"line_number":546,"context_line":"                    \u0027step\u0027: node.clean_step})"},{"line_number":547,"context_line":"            LOG.error(msg)"},{"line_number":548,"context_line":"            return manager_utils.cleaning_error_handler("},{"line_number":549,"context_line":"                task, msg, tear_down_cleaning\u003dFalse)"},{"line_number":550,"context_line":"        elif command.get(\u0027command_status\u0027) \u003d\u003d \u0027CLEAN_VERSION_MISMATCH\u0027:"},{"line_number":551,"context_line":"            # Cache the new clean steps (and \u0027hardware_manager_version\u0027)"},{"line_number":552,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_04fe56ae","line":549,"range":{"start_line":549,"start_character":27,"end_line":549,"end_character":45},"updated":"2019-04-09 10:03:46.000000000","message":"This fix also required at [1]. I think we need it at [2] as well.\n[1] https://github.com/openstack/ironic/blob/244a533800afe0343e894574b96a6c3c67d6b889/ironic/conductor/manager.py#L1410\n[2] https://github.com/openstack/ironic/blob/c4ac28dff0418d9a4b2ec57d4e530425121013d4/ironic/drivers/modules/agent_base_vendor.py#L158","commit_id":"ee2d890cb87431bd91681587dc36f1d8990f1687"}],"ironic/drivers/modules/deploy_utils.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"f7481d80b407ae361e314c934bfd55cfc2f837e0","unresolved":false,"context_lines":[{"line_number":937,"context_line":""},{"line_number":938,"context_line":"    This method does the following:"},{"line_number":939,"context_line":"    1. Powers off the bare metal node (unless the node is fast"},{"line_number":940,"context_line":"       tracked or there was a cleaning failure)."},{"line_number":941,"context_line":"    2. If \u0027manage_boot\u0027 parameter is set to true, it also calls"},{"line_number":942,"context_line":"       the \u0027clean_up_ramdisk\u0027 method of boot interface to clean"},{"line_number":943,"context_line":"       up the environment that was set for booting agent ramdisk."}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_5b614711","line":940,"updated":"2019-07-22 11:03:43.000000000","message":"sphinx requires indentation to be at the same level for the entire paragraph :/","commit_id":"c345df78c40f4bea07734bce48470ba5e01b80f1"}],"releasenotes/notes/fix-do-not-tear-down-nodes-upon-cleaning-failure-a9cda6ae71ed2540.yaml":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"fe600a9c43d6aa2f5bfb6ecbb8d1021f7f2b6e18","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes a bug where ironic would shut a node down upon cleaning failure."},{"line_number":5,"context_line":"    Now, the node stays on (as documented and intended)."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"5fc1f717_c44cce77","line":5,"range":{"start_line":5,"start_character":24,"end_line":5,"end_character":26},"updated":"2019-04-09 10:03:46.000000000","message":"nit: s/ \u0027on\u0027 / \u0027powered on\u0027 /","commit_id":"ee2d890cb87431bd91681587dc36f1d8990f1687"}]}
