)]}'
{"ironic/drivers/modules/ipmitool.py":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"224e3f354c23ad0c6572205831e7d781b1550f2f","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    end_time \u003d (time.time() + timeout)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    while True:"},{"line_number":427,"context_line":"        num_tries \u003d num_tries - 1"},{"line_number":428,"context_line":"        # NOTE(deva): ensure that no communications are sent to a BMC more"},{"line_number":429,"context_line":"        #             often than once every min_command_interval seconds."}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_0039033f","line":426,"range":{"start_line":426,"start_character":4,"end_line":426,"end_character":15},"updated":"2018-10-05 06:30:36.000000000","message":"Can we remove this unnecessary loop and make it one time execution?","commit_id":"b883b8950d3726344e0021811fe8df2897633986"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4a6f9328b90cbad10d43711aab9633324366e304","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    end_time \u003d (time.time() + timeout)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    while True:"},{"line_number":427,"context_line":"        num_tries \u003d num_tries - 1"},{"line_number":428,"context_line":"        # NOTE(deva): ensure that no communications are sent to a BMC more"},{"line_number":429,"context_line":"        #             often than once every min_command_interval seconds."}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_6030c9ea","line":426,"updated":"2018-10-08 14:38:40.000000000","message":"if \"timing\" is not supported, num_retries can be \u003e1","commit_id":"b883b8950d3726344e0021811fe8df2897633986"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1296ad311e4d9706c7cb9aae88c7ea01098a8846","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    end_time \u003d (time.time() + timeout)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    while True:"},{"line_number":427,"context_line":"        num_tries \u003d num_tries - 1"},{"line_number":428,"context_line":"        # NOTE(deva): ensure that no communications are sent to a BMC more"},{"line_number":429,"context_line":"        #             often than once every min_command_interval seconds."}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_34fdc16c","line":426,"range":{"start_line":426,"start_character":4,"end_line":426,"end_character":15},"in_reply_to":"3f79a3b5_0039033f","updated":"2018-10-12 21:06:34.000000000","message":"Done","commit_id":"b883b8950d3726344e0021811fe8df2897633986"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1296ad311e4d9706c7cb9aae88c7ea01098a8846","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    end_time \u003d (time.time() + timeout)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    while True:"},{"line_number":427,"context_line":"        num_tries \u003d num_tries - 1"},{"line_number":428,"context_line":"        # NOTE(deva): ensure that no communications are sent to a BMC more"},{"line_number":429,"context_line":"        #             often than once every min_command_interval seconds."}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_14f8c57b","line":426,"in_reply_to":"3f79a3b5_6030c9ea","updated":"2018-10-12 21:06:34.000000000","message":"+1","commit_id":"b883b8950d3726344e0021811fe8df2897633986"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4a6f9328b90cbad10d43711aab9633324366e304","unresolved":false,"context_lines":[{"line_number":466,"context_line":"                                    {\u0027node\u0027: driver_info[\u0027uuid\u0027],"},{"line_number":467,"context_line":"                                     \u0027cmd\u0027: e.cmd, \u0027error\u0027: e})"},{"line_number":468,"context_line":"            finally:"},{"line_number":469,"context_line":"                LAST_CMD_TIME[driver_info[\u0027address\u0027]] \u003d time.time()"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"def _set_and_wait(task, power_action, driver_info, timeout\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_802de590","line":469,"updated":"2018-10-08 14:38:40.000000000","message":"side note: this logic is not working really well in presence of ipmitool own retries..","commit_id":"b883b8950d3726344e0021811fe8df2897633986"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"fb1766cd0cbee257aac8d2af9cffb8f633eb2e31","unresolved":false,"context_lines":[{"line_number":466,"context_line":"                                    {\u0027node\u0027: driver_info[\u0027uuid\u0027],"},{"line_number":467,"context_line":"                                     \u0027cmd\u0027: e.cmd, \u0027error\u0027: e})"},{"line_number":468,"context_line":"            finally:"},{"line_number":469,"context_line":"                LAST_CMD_TIME[driver_info[\u0027address\u0027]] \u003d time.time()"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"def _set_and_wait(task, power_action, driver_info, timeout\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_aee1e12d","line":469,"in_reply_to":"3f79a3b5_802de590","updated":"2018-10-09 09:00:09.000000000","message":"recall the headache it caused, maybe we should completely drop relying on ipmitool retries.\nit\u0027s implementation dependent, and the internal timeout changes between different versions.","commit_id":"b883b8950d3726344e0021811fe8df2897633986"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1296ad311e4d9706c7cb9aae88c7ea01098a8846","unresolved":false,"context_lines":[{"line_number":466,"context_line":"                                    {\u0027node\u0027: driver_info[\u0027uuid\u0027],"},{"line_number":467,"context_line":"                                     \u0027cmd\u0027: e.cmd, \u0027error\u0027: e})"},{"line_number":468,"context_line":"            finally:"},{"line_number":469,"context_line":"                LAST_CMD_TIME[driver_info[\u0027address\u0027]] \u003d time.time()"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"def _set_and_wait(task, power_action, driver_info, timeout\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_f46c299e","line":469,"in_reply_to":"3f79a3b5_aee1e12d","updated":"2018-10-12 21:06:34.000000000","message":"The ultimate solution has been proposed here [1].\n\n1. https://review.openstack.org/#/c/610007/","commit_id":"b883b8950d3726344e0021811fe8df2897633986"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5e61e654a06f7b5fc5ea42a7340af5821d7324db","unresolved":false,"context_lines":[{"line_number":449,"context_line":"                return out, err"},{"line_number":450,"context_line":"            except processutils.ProcessExecutionError as e:"},{"line_number":451,"context_line":"                with excutils.save_and_reraise_exception() as ctxt:"},{"line_number":452,"context_line":"                    err_list \u003d [x for x in IPMITOOL_RETRYABLE_FAILURES"},{"line_number":453,"context_line":"                                if x in six.text_type(e)]"},{"line_number":454,"context_line":"                    if ((time.time() \u003e end_time)"},{"line_number":455,"context_line":"                        or (num_tries \u003d\u003d 0)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_1a9c92bd","line":452,"range":{"start_line":452,"start_character":20,"end_line":452,"end_character":70},"updated":"2018-10-24 02:10:43.000000000","message":"This may not be as big of an issue now, but doing this change will short circuit retries of re-triable errors which were implemented when BMCs returned \"Too busy, try again\" messages were received, which were mapped into ipmitool immediately exiting with an error code. :\\ (Which is how we got the first retriable error for the retry logic, where HP Moonshot BMC IPMI pass-through was returning errors.) Without the retry loop the single error would torpedo a deploy operation completely.\n\nI feel like if we change the conditional below to apply a little bit of sanity to if (num_tries \u003d 0 and ipmitool_retry_logic_present and not err_list) might work?\n\nFWIW, the logic in ipmtiool might have changed since ?1.5.18? days where retry support was present, but it was not retrying in many cases.","commit_id":"95604b7834de315f9efbbff7be6f2c9d9b0564de"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"3699d9a0dfd971fe97588567ccb6ce9acf834521","unresolved":false,"context_lines":[{"line_number":449,"context_line":"                return out, err"},{"line_number":450,"context_line":"            except processutils.ProcessExecutionError as e:"},{"line_number":451,"context_line":"                with excutils.save_and_reraise_exception() as ctxt:"},{"line_number":452,"context_line":"                    err_list \u003d [x for x in IPMITOOL_RETRYABLE_FAILURES"},{"line_number":453,"context_line":"                                if x in six.text_type(e)]"},{"line_number":454,"context_line":"                    if ((time.time() \u003e end_time)"},{"line_number":455,"context_line":"                        or (num_tries \u003d\u003d 0)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_50eb6d0f","line":452,"range":{"start_line":452,"start_character":20,"end_line":452,"end_character":70},"in_reply_to":"3f79a3b5_1a9c92bd","updated":"2018-10-29 12:34:07.000000000","message":"My current change aims at keeping ipmitool runtime limited by the configuration option no matter what. Before my patch, ipmitool could take as long as -R squared worth of retries on soft errors (including the timeout failure, what could reflect on the overall run time, ironic task utilization etc).\n\nIt now seems to me that the best option would be to leave the current logic around ipmitool as-is, but enforce overall ipmitool runtime via [1]. What do you think?\n\n1. https://review.openstack.org/#/c/610007/","commit_id":"95604b7834de315f9efbbff7be6f2c9d9b0564de"}]}
