)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"6d72eab679196fdb1cc93c82abc07301438bc3a2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Jesse J. Cook \u003cjesse.j.cook@member.fsf.org\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-01-10 17:32:19 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add rescuewait timeout perodic task"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Ensure nodes don\u0027t get stuck in rescuewait forever when"},{"line_number":10,"context_line":"a rescue ramdisk fails to boot and start heartbeating."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"ba5201f7_74b92e15","line":7,"range":{"start_line":7,"start_character":23,"end_line":7,"end_character":30},"updated":"2017-01-10 19:40:39.000000000","message":"s/perodic/periodic/","commit_id":"47e122b73523b9668311113837e5714e5ca2c96d"},{"author":{"_account_id":11642,"name":"Jesse J. Cook","email":"jesse.cook@rackspace.com","username":"crashenx"},"change_message_id":"32cf62ee5168072820c776eb391ccbc5c6a9b957","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Jesse J. Cook \u003cjesse.j.cook@member.fsf.org\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-01-10 17:32:19 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add rescuewait timeout perodic task"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Ensure nodes don\u0027t get stuck in rescuewait forever when"},{"line_number":10,"context_line":"a rescue ramdisk fails to boot and start heartbeating."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"ba5201f7_7581258f","line":7,"range":{"start_line":7,"start_character":23,"end_line":7,"end_character":30},"in_reply_to":"ba5201f7_74b92e15","updated":"2017-01-10 22:51:13.000000000","message":"fixed","commit_id":"47e122b73523b9668311113837e5714e5ca2c96d"},{"author":{"_account_id":19593,"name":"Anup Navare","email":"anup.d.navare@intel.com","username":"anup"},"change_message_id":"ebe30687c0c74b7cabfc2371f3c8ed8bd7ba94a1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mario Villaplana \u003cmario.villaplana@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-04-03 14:13:45 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add rescuewait timeout periodic task"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Ensure nodes don\u0027t get stuck in rescuewait forever when"},{"line_number":10,"context_line":"a rescue ramdisk fails to boot and start heartbeating."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"dfeb2761_8346f020","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":14},"updated":"2017-04-03 23:56:43.000000000","message":"super nit: s/rescuewait/RESCUEWAIT to  be consistent with releasenotes and doc strings. (ignore my comment if you feel lower-upper casing is interchangeable)","commit_id":"e8f8fd09f7e52f954f8c547b0c0c98f198e32a55"}],"etc/ironic/ironic.conf.sample":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"71fc6145a6f21016287dc0fdffb907dbf354132a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"ba5201f7_3a4f97bf","updated":"2017-01-10 17:29:20.000000000","message":"I think this file needs to be regenerated","commit_id":"d2c3dd4d6e4c635e8c998d20729372f86d23db01"},{"author":{"_account_id":11642,"name":"Jesse J. Cook","email":"jesse.cook@rackspace.com","username":"crashenx"},"change_message_id":"68186564ad801c5cf6be9b612887d482c71afd03","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"ba5201f7_dd08452b","in_reply_to":"ba5201f7_3a4f97bf","updated":"2017-01-10 17:33:09.000000000","message":"Oops. Thanks! Done.","commit_id":"d2c3dd4d6e4c635e8c998d20729372f86d23db01"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"c332d2bde1d2555a5ff4ba3e7e10c93a0359c1c2","unresolved":false,"context_lines":[{"line_number":962,"context_line":""},{"line_number":963,"context_line":"# Interval between checks of rescue timeouts, in seconds."},{"line_number":964,"context_line":"# (integer value)"},{"line_number":965,"context_line":"# Minimum value: 0"},{"line_number":966,"context_line":"#check_rescue_state_interval \u003d 60"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"# Timeout (seconds) to wait for a callback from a deploy"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"1a1ced50_1da8b58c","line":965,"range":{"start_line":965,"start_character":0,"end_line":965,"end_character":18},"updated":"2017-03-22 06:23:57.000000000","message":"This file needs to be re-generated.","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"edbdd9fce132ba714cd953a2c07715d2b28e279c","unresolved":false,"context_lines":[{"line_number":962,"context_line":""},{"line_number":963,"context_line":"# Interval between checks of rescue timeouts, in seconds."},{"line_number":964,"context_line":"# (integer value)"},{"line_number":965,"context_line":"# Minimum value: 0"},{"line_number":966,"context_line":"#check_rescue_state_interval \u003d 60"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"# Timeout (seconds) to wait for a callback from a deploy"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"1a1ced50_331bc682","line":965,"range":{"start_line":965,"start_character":0,"end_line":965,"end_character":18},"in_reply_to":"1a1ced50_1da8b58c","updated":"2017-03-22 17:57:27.000000000","message":"Done","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"aefe077127eaa623e0bb6aaf2b24c5d8ac31e062","unresolved":false,"context_lines":[{"line_number":1126,"context_line":"# (integer value)"},{"line_number":1127,"context_line":"#check_provision_state_interval \u003d 60"},{"line_number":1128,"context_line":""},{"line_number":1129,"context_line":"# Interval (seconds) between checks of rescue callback"},{"line_number":1130,"context_line":"# timeouts. This option is part of rescue feature work, which"},{"line_number":1131,"context_line":"# is not currently exposed to users. (integer value)"},{"line_number":1132,"context_line":"# Minimum value: 1"}],"source_content_type":"application/octet-stream","patch_set":52,"id":"ff82abbf_6bafdf7c","line":1129,"updated":"2017-11-27 23:08:54.000000000","message":"nit, I\u0027m not sure I\u0027d put \u0027callback\u0027 here. Just in case we decide to use it for something other than callback...","commit_id":"3c03d5876d867d97875ea832ad799856bac313a5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"9645dc47a61d147c701ef8e24b9bbb790ebefd33","unresolved":false,"context_lines":[{"line_number":1126,"context_line":"# (integer value)"},{"line_number":1127,"context_line":"#check_provision_state_interval \u003d 60"},{"line_number":1128,"context_line":""},{"line_number":1129,"context_line":"# Interval (seconds) between checks of rescue callback"},{"line_number":1130,"context_line":"# timeouts. This option is part of rescue feature work, which"},{"line_number":1131,"context_line":"# is not currently exposed to users. (integer value)"},{"line_number":1132,"context_line":"# Minimum value: 1"}],"source_content_type":"application/octet-stream","patch_set":52,"id":"ff82abbf_447ae1b9","line":1129,"in_reply_to":"ff82abbf_6bafdf7c","updated":"2017-11-29 16:27:37.000000000","message":"Done","commit_id":"3c03d5876d867d97875ea832ad799856bac313a5"}],"ironic/conductor/manager.py":[{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6f42a3206596037963984ab62b4fae3cd2593b9f","unresolved":false,"context_lines":[{"line_number":1350,"context_line":"                eventlet.sleep(0)"},{"line_number":1351,"context_line":""},{"line_number":1352,"context_line":"    @METRICS.timer(\u0027ConductorManager._check_deploy_timeouts\u0027)"},{"line_number":1353,"context_line":"    @periodics.periodic(spacing\u003dCONF.conductor.check_provision_state_interval)"},{"line_number":1354,"context_line":"    def _check_rescue_timeouts(self, context):"},{"line_number":1355,"context_line":"        \"\"\"Periodically checks whether a rescue RPC call has timed out."},{"line_number":1356,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_71661d52","line":1353,"range":{"start_line":1353,"start_character":32,"end_line":1353,"end_character":77},"updated":"2017-01-06 18:12:13.000000000","message":"nit: it\u0027s probably worth documenting in the sample config that this will be used as an interval for checking both deploy and rescuewait timeouts","commit_id":"6a3207de06e1505bae26e2f71688aafc63897c55"},{"author":{"_account_id":11642,"name":"Jesse J. Cook","email":"jesse.cook@rackspace.com","username":"crashenx"},"change_message_id":"78127cfd0c5ccdb3190bd5edc5fb0679d5bc4c11","unresolved":false,"context_lines":[{"line_number":1350,"context_line":"                eventlet.sleep(0)"},{"line_number":1351,"context_line":""},{"line_number":1352,"context_line":"    @METRICS.timer(\u0027ConductorManager._check_deploy_timeouts\u0027)"},{"line_number":1353,"context_line":"    @periodics.periodic(spacing\u003dCONF.conductor.check_provision_state_interval)"},{"line_number":1354,"context_line":"    def _check_rescue_timeouts(self, context):"},{"line_number":1355,"context_line":"        \"\"\"Periodically checks whether a rescue RPC call has timed out."},{"line_number":1356,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_e575e7ca","line":1353,"range":{"start_line":1353,"start_character":32,"end_line":1353,"end_character":77},"in_reply_to":"ba5201f7_71661d52","updated":"2017-01-06 20:32:05.000000000","message":"Yeah this is totes wrong; added new interval","commit_id":"6a3207de06e1505bae26e2f71688aafc63897c55"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6f42a3206596037963984ab62b4fae3cd2593b9f","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"                   \u0027maintenance\u0027: False,"},{"line_number":1368,"context_line":"                   \u0027provisioned_before\u0027: callback_timeout}"},{"line_number":1369,"context_line":"        sort_key \u003d \u0027provision_updated_at\u0027"},{"line_number":1370,"context_line":"        callback_method \u003d utils.cleanup_after_timeout"},{"line_number":1371,"context_line":"        err_handler \u003d utils.provisioning_error_handler"},{"line_number":1372,"context_line":"        self._fail_if_in_state(context, filters, states.RESCUEWAIT,"},{"line_number":1373,"context_line":"                               sort_key, callback_method, err_handler)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_11779102","line":1370,"range":{"start_line":1370,"start_character":26,"end_line":1370,"end_character":53},"updated":"2017-01-06 18:12:13.000000000","message":"This callback has error messages that mention \"deploy\" timeouts. These should be changed to reference a rescue timeout in this case.","commit_id":"6a3207de06e1505bae26e2f71688aafc63897c55"},{"author":{"_account_id":11642,"name":"Jesse J. Cook","email":"jesse.cook@rackspace.com","username":"crashenx"},"change_message_id":"78127cfd0c5ccdb3190bd5edc5fb0679d5bc4c11","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"                   \u0027maintenance\u0027: False,"},{"line_number":1368,"context_line":"                   \u0027provisioned_before\u0027: callback_timeout}"},{"line_number":1369,"context_line":"        sort_key \u003d \u0027provision_updated_at\u0027"},{"line_number":1370,"context_line":"        callback_method \u003d utils.cleanup_after_timeout"},{"line_number":1371,"context_line":"        err_handler \u003d utils.provisioning_error_handler"},{"line_number":1372,"context_line":"        self._fail_if_in_state(context, filters, states.RESCUEWAIT,"},{"line_number":1373,"context_line":"                               sort_key, callback_method, err_handler)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_05810b8f","line":1370,"range":{"start_line":1370,"start_character":26,"end_line":1370,"end_character":53},"in_reply_to":"ba5201f7_11779102","updated":"2017-01-06 20:32:05.000000000","message":"created new callback","commit_id":"6a3207de06e1505bae26e2f71688aafc63897c55"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"726f10dd1f5d0eb30b65c9737249539b054dda1e","unresolved":false,"context_lines":[{"line_number":1647,"context_line":"                               callback_method\u003dutils.cleanup_cleanwait_timeout)"},{"line_number":1648,"context_line":""},{"line_number":1649,"context_line":"    @METRICS.timer(\u0027ConductorManager._check_rescuewait_timeouts\u0027)"},{"line_number":1650,"context_line":"    @periodics.periodic(spacing\u003dCONF.conductor.check_rescue_state_interval)"},{"line_number":1651,"context_line":"    def _check_rescuewait_timeouts(self, context):"},{"line_number":1652,"context_line":"        \"\"\"Periodically checks whether a rescue RPC call has timed out."},{"line_number":1653,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a30ddce_3b8358ce","line":1650,"updated":"2017-03-07 12:25:29.000000000","message":"You can add parameter enabled\u003dbool(CONF.conductor.rescue_callback_timeout), periodic task will not be executed at all if disabled, and remove l1659-1660.","commit_id":"dfd3e934a9dd85d58591742a81350e2474cb3963"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"9cc5c8ec6984694f1d0cbcf913d9322c9bb94055","unresolved":false,"context_lines":[{"line_number":1647,"context_line":"                               callback_method\u003dutils.cleanup_cleanwait_timeout)"},{"line_number":1648,"context_line":""},{"line_number":1649,"context_line":"    @METRICS.timer(\u0027ConductorManager._check_rescuewait_timeouts\u0027)"},{"line_number":1650,"context_line":"    @periodics.periodic(spacing\u003dCONF.conductor.check_rescue_state_interval)"},{"line_number":1651,"context_line":"    def _check_rescuewait_timeouts(self, context):"},{"line_number":1652,"context_line":"        \"\"\"Periodically checks whether a rescue RPC call has timed out."},{"line_number":1653,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a30ddce_6f2500aa","line":1650,"in_reply_to":"9a30ddce_3b8358ce","updated":"2017-03-07 16:27:54.000000000","message":"Done","commit_id":"dfd3e934a9dd85d58591742a81350e2474cb3963"},{"author":{"_account_id":19593,"name":"Anup Navare","email":"anup.d.navare@intel.com","username":"anup"},"change_message_id":"b00a62589e0981fb053a86f4c98d7f4c733feabb","unresolved":false,"context_lines":[{"line_number":1652,"context_line":"    def _check_rescuewait_timeouts(self, context):"},{"line_number":1653,"context_line":"        \"\"\"Periodically checks whether a rescue RPC call has timed out."},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"        If a rescue call has timed out, the rescue failed and we clean up."},{"line_number":1656,"context_line":""},{"line_number":1657,"context_line":"        :param context: request context."},{"line_number":1658,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_ea053ac2","line":1655,"range":{"start_line":1655,"start_character":8,"end_line":1655,"end_character":74},"updated":"2017-03-20 00:49:31.000000000","message":"suggestion: this string looks incomplete, can it be re-worded something like \"If a rescue call has timed out, then process the event fail and clean up\" I will try to avoid use of \u0027we\u0027.","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6a60a22c989f89bab0eea433854c0ee0e0e22225","unresolved":false,"context_lines":[{"line_number":1652,"context_line":"    def _check_rescuewait_timeouts(self, context):"},{"line_number":1653,"context_line":"        \"\"\"Periodically checks whether a rescue RPC call has timed out."},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"        If a rescue call has timed out, the rescue failed and we clean up."},{"line_number":1656,"context_line":""},{"line_number":1657,"context_line":"        :param context: request context."},{"line_number":1658,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_fd605003","line":1655,"range":{"start_line":1655,"start_character":8,"end_line":1655,"end_character":74},"in_reply_to":"1a1ced50_ea053ac2","updated":"2017-03-21 19:16:35.000000000","message":"Done","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"eb9e80ce7edb0a81c830fe6fcf29988bcc426768","unresolved":false,"context_lines":[{"line_number":1661,"context_line":"                   \u0027provision_state\u0027: states.RESCUEWAIT,"},{"line_number":1662,"context_line":"                   \u0027maintenance\u0027: False,"},{"line_number":1663,"context_line":"                   \u0027provisioned_before\u0027: callback_timeout}"},{"line_number":1664,"context_line":"        self._fail_if_in_state(context, filters, states.RESCUEWAIT,"},{"line_number":1665,"context_line":"                               \u0027provision_updated_at\u0027,"},{"line_number":1666,"context_line":"                               keep_target_state\u003dTrue,"},{"line_number":1667,"context_line":"                               callback_method\u003dutils.cleanup_rescuewait_timeout"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a1ff146_7ae79640","line":1664,"range":{"start_line":1664,"start_character":49,"end_line":1664,"end_character":66},"updated":"2017-03-14 18:13:46.000000000","message":"Would this be states.RESCUEFAIL?","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6a60a22c989f89bab0eea433854c0ee0e0e22225","unresolved":false,"context_lines":[{"line_number":1661,"context_line":"                   \u0027provision_state\u0027: states.RESCUEWAIT,"},{"line_number":1662,"context_line":"                   \u0027maintenance\u0027: False,"},{"line_number":1663,"context_line":"                   \u0027provisioned_before\u0027: callback_timeout}"},{"line_number":1664,"context_line":"        self._fail_if_in_state(context, filters, states.RESCUEWAIT,"},{"line_number":1665,"context_line":"                               \u0027provision_updated_at\u0027,"},{"line_number":1666,"context_line":"                               keep_target_state\u003dTrue,"},{"line_number":1667,"context_line":"                               callback_method\u003dutils.cleanup_rescuewait_timeout"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_dd3e34d9","line":1664,"range":{"start_line":1664,"start_character":49,"end_line":1664,"end_character":66},"in_reply_to":"1a1ced50_6a4cea42","updated":"2017-03-21 19:16:35.000000000","message":"It\u0027s supposed to be RESCUEWAIT. _fail_if_in_state takes nodes that meet particular sets of conditions and puts them in a fail state. It wouldn\u0027t make sense to fail nodes that are already in a failed (RESCUEFAIL) state.","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":19593,"name":"Anup Navare","email":"anup.d.navare@intel.com","username":"anup"},"change_message_id":"b00a62589e0981fb053a86f4c98d7f4c733feabb","unresolved":false,"context_lines":[{"line_number":1661,"context_line":"                   \u0027provision_state\u0027: states.RESCUEWAIT,"},{"line_number":1662,"context_line":"                   \u0027maintenance\u0027: False,"},{"line_number":1663,"context_line":"                   \u0027provisioned_before\u0027: callback_timeout}"},{"line_number":1664,"context_line":"        self._fail_if_in_state(context, filters, states.RESCUEWAIT,"},{"line_number":1665,"context_line":"                               \u0027provision_updated_at\u0027,"},{"line_number":1666,"context_line":"                               keep_target_state\u003dTrue,"},{"line_number":1667,"context_line":"                               callback_method\u003dutils.cleanup_rescuewait_timeout"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_6a4cea42","line":1664,"range":{"start_line":1664,"start_character":49,"end_line":1664,"end_character":66},"in_reply_to":"3a1ff146_7ae79640","updated":"2017-03-20 00:49:31.000000000","message":"Rama it should be RESCUEWAIT, it is the state the node is currently in. Take a look at https://github.com/openstack/ironic/blob/70a6301115bfc3ef340589cb046ca6e0c9efa0e3/ironic/conductor/base_manager.py#L415","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"2c17a6f82c7dd4c43b64b188886826260b391179","unresolved":false,"context_lines":[{"line_number":1651,"context_line":""},{"line_number":1652,"context_line":"        :param context: request context."},{"line_number":1653,"context_line":"        \"\"\""},{"line_number":1654,"context_line":"        callback_timeout \u003d CONF.conductor.rescue_callback_timeout"},{"line_number":1655,"context_line":"        filters \u003d {\u0027reserved\u0027: False,"},{"line_number":1656,"context_line":"                   \u0027provision_state\u0027: states.RESCUEWAIT,"},{"line_number":1657,"context_line":"                   \u0027maintenance\u0027: False,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a1ced50_6aeff81d","line":1654,"updated":"2017-03-22 21:38:37.000000000","message":"Isn\u0027t a check missing here?\n\n        if not callback_timeout:\n            return","commit_id":"0582333e75339f43cff3f67948f1e9ebe8c23d5a"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"a8e8d1bd06096ee108ae3b470b1a9a59f95c9916","unresolved":false,"context_lines":[{"line_number":1651,"context_line":""},{"line_number":1652,"context_line":"        :param context: request context."},{"line_number":1653,"context_line":"        \"\"\""},{"line_number":1654,"context_line":"        callback_timeout \u003d CONF.conductor.rescue_callback_timeout"},{"line_number":1655,"context_line":"        filters \u003d {\u0027reserved\u0027: False,"},{"line_number":1656,"context_line":"                   \u0027provision_state\u0027: states.RESCUEWAIT,"},{"line_number":1657,"context_line":"                   \u0027maintenance\u0027: False,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a1ced50_3b2f1040","line":1654,"in_reply_to":"1a1ced50_2a2a6090","updated":"2017-03-22 23:28:46.000000000","message":"That\u0027s right; missed it :)","commit_id":"0582333e75339f43cff3f67948f1e9ebe8c23d5a"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"0f14ba26c47eeb41bce0832dab34f85ded8f4e01","unresolved":false,"context_lines":[{"line_number":1651,"context_line":""},{"line_number":1652,"context_line":"        :param context: request context."},{"line_number":1653,"context_line":"        \"\"\""},{"line_number":1654,"context_line":"        callback_timeout \u003d CONF.conductor.rescue_callback_timeout"},{"line_number":1655,"context_line":"        filters \u003d {\u0027reserved\u0027: False,"},{"line_number":1656,"context_line":"                   \u0027provision_state\u0027: states.RESCUEWAIT,"},{"line_number":1657,"context_line":"                   \u0027maintenance\u0027: False,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a1ced50_2a2a6090","line":1654,"in_reply_to":"1a1ced50_6aeff81d","updated":"2017-03-22 22:12:54.000000000","message":"I believe this in handled in the periodic decorator in L1646:\n\n  enabled\u003dbool(CONF.conductor.rescue_callback_timeout))\n\nActually this is a cleaner way to disable the task than the checks on L1631-L1633.","commit_id":"0582333e75339f43cff3f67948f1e9ebe8c23d5a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"aefe077127eaa623e0bb6aaf2b24c5d8ac31e062","unresolved":false,"context_lines":[{"line_number":1683,"context_line":"    @periodics.periodic(spacing\u003dCONF.conductor.check_rescue_state_interval,"},{"line_number":1684,"context_line":"                        enabled\u003dbool(CONF.conductor.rescue_callback_timeout))"},{"line_number":1685,"context_line":"    def _check_rescuewait_timeouts(self, context):"},{"line_number":1686,"context_line":"        \"\"\"Periodically checks whether a rescue RPC call has timed out."},{"line_number":1687,"context_line":""},{"line_number":1688,"context_line":"        If a rescue call has timed out, fail the rescue and clean up."},{"line_number":1689,"context_line":""}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_8b37c34d","line":1686,"updated":"2017-11-27 23:08:54.000000000","message":"i wonder what you mean by \u0027rescue RPC call\u0027. The RPC call (from API to conductor) doesn\u0027t time out, it returns (if I understand what that means). We just want to make sure we aren\u0027t waiting forever in rescue wait state, for the rescue ramdisk to be heartbeating, right?","commit_id":"3c03d5876d867d97875ea832ad799856bac313a5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"9645dc47a61d147c701ef8e24b9bbb790ebefd33","unresolved":false,"context_lines":[{"line_number":1683,"context_line":"    @periodics.periodic(spacing\u003dCONF.conductor.check_rescue_state_interval,"},{"line_number":1684,"context_line":"                        enabled\u003dbool(CONF.conductor.rescue_callback_timeout))"},{"line_number":1685,"context_line":"    def _check_rescuewait_timeouts(self, context):"},{"line_number":1686,"context_line":"        \"\"\"Periodically checks whether a rescue RPC call has timed out."},{"line_number":1687,"context_line":""},{"line_number":1688,"context_line":"        If a rescue call has timed out, fail the rescue and clean up."},{"line_number":1689,"context_line":""}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_062ffe87","line":1686,"in_reply_to":"ff82abbf_8b37c34d","updated":"2017-11-29 16:27:37.000000000","message":"Done","commit_id":"3c03d5876d867d97875ea832ad799856bac313a5"}],"ironic/conductor/utils.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"47be32d40152b64033d7497c1fa8ae1fbd552734","unresolved":false,"context_lines":[{"line_number":321,"context_line":"    :param task: a TaskManager instance."},{"line_number":322,"context_line":"    \"\"\""},{"line_number":323,"context_line":"    node \u003d task.node"},{"line_number":324,"context_line":"    msg \u003d (_(\u0027Timeout reached while waiting for callback for node %s\u0027)"},{"line_number":325,"context_line":"           % node.uuid)"},{"line_number":326,"context_line":"    node.last_error \u003d msg"},{"line_number":327,"context_line":"    LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_88be96d2","line":324,"range":{"start_line":324,"start_character":13,"end_line":324,"end_character":69},"updated":"2017-01-10 10:34:44.000000000","message":"Mostly a nit, but would be good to indicate that it was waiting for the \"rescue ramdisk\" to callback. We probably can get this by looking at the target_provision_state but it doesn\u0027t do any harm to have a more explicit last error message.","commit_id":"114a360587bd83d2fd544d15059fecc748aa9005"},{"author":{"_account_id":11642,"name":"Jesse J. Cook","email":"jesse.cook@rackspace.com","username":"crashenx"},"change_message_id":"33fb8028a966d0f90d13a38a3ba6842f10011ec4","unresolved":false,"context_lines":[{"line_number":321,"context_line":"    :param task: a TaskManager instance."},{"line_number":322,"context_line":"    \"\"\""},{"line_number":323,"context_line":"    node \u003d task.node"},{"line_number":324,"context_line":"    msg \u003d (_(\u0027Timeout reached while waiting for callback for node %s\u0027)"},{"line_number":325,"context_line":"           % node.uuid)"},{"line_number":326,"context_line":"    node.last_error \u003d msg"},{"line_number":327,"context_line":"    LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_bd1b8bc9","line":324,"range":{"start_line":324,"start_character":13,"end_line":324,"end_character":69},"in_reply_to":"ba5201f7_88be96d2","updated":"2017-01-10 15:16:51.000000000","message":"Done","commit_id":"114a360587bd83d2fd544d15059fecc748aa9005"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"5c56425644326734c2a9b00f262ac844abb8bd38","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"@task_manager.require_exclusive_lock"},{"line_number":318,"context_line":"def cleanup_rescuewait_timeout(task):"},{"line_number":319,"context_line":"    \"\"\"Cleanup rescue task after timeout."},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    :param task: a TaskManager instance."}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_9d307d09","line":318,"updated":"2017-01-10 17:56:26.000000000","message":"Is there a unit test for this function?","commit_id":"47e122b73523b9668311113837e5714e5ca2c96d"},{"author":{"_account_id":11642,"name":"Jesse J. Cook","email":"jesse.cook@rackspace.com","username":"crashenx"},"change_message_id":"32cf62ee5168072820c776eb391ccbc5c6a9b957","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"@task_manager.require_exclusive_lock"},{"line_number":318,"context_line":"def cleanup_rescuewait_timeout(task):"},{"line_number":319,"context_line":"    \"\"\"Cleanup rescue task after timeout."},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    :param task: a TaskManager instance."}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_1570d9db","line":318,"in_reply_to":"ba5201f7_9d307d09","updated":"2017-01-10 22:51:13.000000000","message":"Added one","commit_id":"47e122b73523b9668311113837e5714e5ca2c96d"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"3a8c56cf15ee0a17414012a5e32a27275eede107","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    msg \u003d (_(\u0027Timeout reached while waiting for rescue ramdisk callback \u0027"},{"line_number":325,"context_line":"             \u0027for node %s\u0027) % node.uuid)"},{"line_number":326,"context_line":"    node.last_error \u003d msg"},{"line_number":327,"context_line":"    LOG.error(msg)"},{"line_number":328,"context_line":"    node.save()"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    error_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a3c09a3_1cfdb76e","line":327,"updated":"2017-01-18 22:38:02.000000000","message":"There needs to be a task.process_event(\"fail\") here to advance the state machine (RESCUEWAIT -\u003e RESCUEFAIL)\nUnless you\u0027re expecting the driver to handle that?","commit_id":"e657b9f770bb18a1de4f126c45efa542429205c9"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"f0bee4aace40f0705526380e61c2d11c85c88b9f","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    msg \u003d (_(\u0027Timeout reached while waiting for rescue ramdisk callback \u0027"},{"line_number":325,"context_line":"             \u0027for node %s\u0027) % node.uuid)"},{"line_number":326,"context_line":"    node.last_error \u003d msg"},{"line_number":327,"context_line":"    LOG.error(msg)"},{"line_number":328,"context_line":"    node.save()"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    error_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_e30b2922","line":327,"in_reply_to":"5a3905b3_bab0c344","updated":"2017-01-23 22:00:53.000000000","message":"Ah, you\u0027re right: https://github.com/openstack/ironic/blob/0ca92550b3dbebf7f852f46b7aae7727a37d659a/ironic/conductor/base_manager.py#L409\n\nThanks.","commit_id":"e657b9f770bb18a1de4f126c45efa542429205c9"},{"author":{"_account_id":11642,"name":"Jesse J. Cook","email":"jesse.cook@rackspace.com","username":"crashenx"},"change_message_id":"8a314bbeabcf52b5f3c519a96ce1b98490a002b5","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    msg \u003d (_(\u0027Timeout reached while waiting for rescue ramdisk callback \u0027"},{"line_number":325,"context_line":"             \u0027for node %s\u0027) % node.uuid)"},{"line_number":326,"context_line":"    node.last_error \u003d msg"},{"line_number":327,"context_line":"    LOG.error(msg)"},{"line_number":328,"context_line":"    node.save()"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    error_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_bab0c344","line":327,"in_reply_to":"7a3c09a3_1cfdb76e","updated":"2017-01-20 18:45:29.000000000","message":"in ironic/conductor/manager this is set as the callback via the method _fail_if_in_state. This method, defined in ironic/conductor/base_manager appears to then call this callback from process_event(\u0027fail\u0027). Therefore, unless I\u0027m mistaken, this method is called after the process_event(\u0027fail\u0027) is already executed.","commit_id":"e657b9f770bb18a1de4f126c45efa542429205c9"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"726f10dd1f5d0eb30b65c9737249539b054dda1e","unresolved":false,"context_lines":[{"line_number":325,"context_line":"             \u0027for node %s\u0027) % node.uuid)"},{"line_number":326,"context_line":"    node.last_error \u003d msg"},{"line_number":327,"context_line":"    LOG.error(msg)"},{"line_number":328,"context_line":"    node.save()"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    error_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":331,"context_line":"                  \u0027 %(error)s\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a30ddce_db031c0e","line":328,"updated":"2017-03-07 12:25:29.000000000","message":"nit: you can remove this and use \"finally\" before l343.","commit_id":"dfd3e934a9dd85d58591742a81350e2474cb3963"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"9cc5c8ec6984694f1d0cbcf913d9322c9bb94055","unresolved":false,"context_lines":[{"line_number":325,"context_line":"             \u0027for node %s\u0027) % node.uuid)"},{"line_number":326,"context_line":"    node.last_error \u003d msg"},{"line_number":327,"context_line":"    LOG.error(msg)"},{"line_number":328,"context_line":"    node.save()"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    error_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":331,"context_line":"                  \u0027 %(error)s\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a30ddce_cf1a6c17","line":328,"in_reply_to":"9a30ddce_db031c0e","updated":"2017-03-07 16:27:54.000000000","message":"Done","commit_id":"dfd3e934a9dd85d58591742a81350e2474cb3963"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0ec9a75e2c8c9caad90d2c064476bdc1b348a54b","unresolved":false,"context_lines":[{"line_number":327,"context_line":"    LOG.error(msg)"},{"line_number":328,"context_line":"    node.save()"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    error_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":331,"context_line":"                  \u0027 %(error)s\u0027)"},{"line_number":332,"context_line":"    try:"},{"line_number":333,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":334,"context_line":"    except Exception as e:"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba2be162_8d3e3026","line":331,"range":{"start_line":330,"start_character":4,"end_line":331,"end_character":31},"updated":"2017-03-03 16:58:31.000000000","message":"nit: This variable is used once at L335, perhaps just avoid creating it and do: \n\n msg \u003d _(\u0027Cleanup ...\u0027) % {...}\n\n...\n\nAlso there\u0027s a double space after \"timeout: \"","commit_id":"dfd3e934a9dd85d58591742a81350e2474cb3963"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"9cc5c8ec6984694f1d0cbcf913d9322c9bb94055","unresolved":false,"context_lines":[{"line_number":327,"context_line":"    LOG.error(msg)"},{"line_number":328,"context_line":"    node.save()"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    error_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":331,"context_line":"                  \u0027 %(error)s\u0027)"},{"line_number":332,"context_line":"    try:"},{"line_number":333,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":334,"context_line":"    except Exception as e:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a30ddce_af6ff890","line":331,"range":{"start_line":330,"start_character":4,"end_line":331,"end_character":31},"in_reply_to":"ba2be162_8d3e3026","updated":"2017-03-07 16:27:54.000000000","message":"Done","commit_id":"dfd3e934a9dd85d58591742a81350e2474cb3963"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"726f10dd1f5d0eb30b65c9737249539b054dda1e","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        msg \u003d error_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":336,"context_line":"        LOG.error(msg)"},{"line_number":337,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":338,"context_line":"            node.last_error \u003d msg"},{"line_number":339,"context_line":"        else:"},{"line_number":340,"context_line":"            node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"},{"line_number":341,"context_line":"                                \u0027exception was encountered while aborting. \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a30ddce_1b369403","line":338,"updated":"2017-03-07 12:25:29.000000000","message":"This overwrites last_error about timeout, maybe create generic message like l340-342.","commit_id":"dfd3e934a9dd85d58591742a81350e2474cb3963"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"9cc5c8ec6984694f1d0cbcf913d9322c9bb94055","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        msg \u003d error_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":336,"context_line":"        LOG.error(msg)"},{"line_number":337,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":338,"context_line":"            node.last_error \u003d msg"},{"line_number":339,"context_line":"        else:"},{"line_number":340,"context_line":"            node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"},{"line_number":341,"context_line":"                                \u0027exception was encountered while aborting. \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a30ddce_6fbb4073","line":338,"in_reply_to":"9a30ddce_1b369403","updated":"2017-03-07 16:27:54.000000000","message":"Not sure what you mean by generic message. Do you mean having the same error message for IronicException and other exceptions?\n\nWe still mention the timeout in the error message.","commit_id":"dfd3e934a9dd85d58591742a81350e2474cb3963"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6a60a22c989f89bab0eea433854c0ee0e0e22225","unresolved":false,"context_lines":[{"line_number":327,"context_line":"    LOG.error(msg)"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    try:"},{"line_number":330,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":331,"context_line":"    except Exception as e:"},{"line_number":332,"context_line":"        msg \u003d (_(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":333,"context_line":"                 \u0027%(error)s\u0027) % {\u0027node\u0027: node.uuid, \u0027error\u0027: e})"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_404df83c","line":330,"updated":"2017-03-21 19:16:35.000000000","message":"I realized that the base driver class didn\u0027t have this. I added it with a default of no-op so that authors of drivers with synchronous rescue don\u0027t have to implement it.","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"073917560f991659834e8a66f0adef6f64f61c26","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    try:"},{"line_number":330,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":331,"context_line":"    except Exception as e:"},{"line_number":332,"context_line":"        msg \u003d (_(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":333,"context_line":"                 \u0027%(error)s\u0027) % {\u0027node\u0027: node.uuid, \u0027error\u0027: e})"},{"line_number":334,"context_line":"        LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a30ddce_d4cacb19","line":331,"range":{"start_line":331,"start_character":4,"end_line":331,"end_character":26},"updated":"2017-03-08 16:19:03.000000000","message":"Need to add testcase for exception handling","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6a60a22c989f89bab0eea433854c0ee0e0e22225","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    try:"},{"line_number":330,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":331,"context_line":"    except Exception as e:"},{"line_number":332,"context_line":"        msg \u003d (_(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":333,"context_line":"                 \u0027%(error)s\u0027) % {\u0027node\u0027: node.uuid, \u0027error\u0027: e})"},{"line_number":334,"context_line":"        LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_dd646fba","line":331,"range":{"start_line":331,"start_character":4,"end_line":331,"end_character":26},"in_reply_to":"9a30ddce_d4cacb19","updated":"2017-03-21 19:16:35.000000000","message":"Done","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2c5dd52778b82b9a9d8b20b69150cf23e2f8552d","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        msg \u003d (_(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":333,"context_line":"                 \u0027%(error)s\u0027) % {\u0027node\u0027: node.uuid, \u0027error\u0027: e})"},{"line_number":334,"context_line":"        LOG.error(msg)"},{"line_number":335,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":336,"context_line":"            node.last_error \u003d msg"},{"line_number":337,"context_line":"        else:"},{"line_number":338,"context_line":"            node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"},{"line_number":339,"context_line":"                                \u0027exception was encountered while aborting. \u0027"},{"line_number":340,"context_line":"                                \u0027More info may be found in the log file.\u0027)"},{"line_number":341,"context_line":"    finally:"},{"line_number":342,"context_line":"        node.save()"},{"line_number":343,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a30ddce_75192679","line":340,"range":{"start_line":335,"start_character":0,"end_line":340,"end_character":74},"updated":"2017-03-08 11:39:16.000000000","message":"Let\u0027s handle it properly then\n\n try:\n     task.driver.rescue.clean_up(task)\n except exception.IronicException e:\n     \u003cthings specific to the IronicException\u003e\n except Exception as e:\n     \u003cthings specific to an unkown exception\u003e\n finally:\n      node.save()","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"073917560f991659834e8a66f0adef6f64f61c26","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        msg \u003d (_(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":333,"context_line":"                 \u0027%(error)s\u0027) % {\u0027node\u0027: node.uuid, \u0027error\u0027: e})"},{"line_number":334,"context_line":"        LOG.error(msg)"},{"line_number":335,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":336,"context_line":"            node.last_error \u003d msg"},{"line_number":337,"context_line":"        else:"},{"line_number":338,"context_line":"            node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"},{"line_number":339,"context_line":"                                \u0027exception was encountered while aborting. \u0027"},{"line_number":340,"context_line":"                                \u0027More info may be found in the log file.\u0027)"},{"line_number":341,"context_line":"    finally:"},{"line_number":342,"context_line":"        node.save()"},{"line_number":343,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a30ddce_f4834fca","line":340,"range":{"start_line":335,"start_character":0,"end_line":340,"end_character":74},"in_reply_to":"9a30ddce_75192679","updated":"2017-03-08 16:19:03.000000000","message":"++","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6a60a22c989f89bab0eea433854c0ee0e0e22225","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        msg \u003d (_(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":333,"context_line":"                 \u0027%(error)s\u0027) % {\u0027node\u0027: node.uuid, \u0027error\u0027: e})"},{"line_number":334,"context_line":"        LOG.error(msg)"},{"line_number":335,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":336,"context_line":"            node.last_error \u003d msg"},{"line_number":337,"context_line":"        else:"},{"line_number":338,"context_line":"            node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"},{"line_number":339,"context_line":"                                \u0027exception was encountered while aborting. \u0027"},{"line_number":340,"context_line":"                                \u0027More info may be found in the log file.\u0027)"},{"line_number":341,"context_line":"    finally:"},{"line_number":342,"context_line":"        node.save()"},{"line_number":343,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_183a9acc","line":340,"range":{"start_line":335,"start_character":0,"end_line":340,"end_character":74},"in_reply_to":"9a30ddce_f4834fca","updated":"2017-03-21 19:16:35.000000000","message":"Done. I think the point was to avoid duplicating the log message, but I did this in another way with proper exception handling.","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"eb21c9da35505d3e6a566990231497e8b290868b","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    try:"},{"line_number":330,"context_line":"        fail_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":331,"context_line":"                     \u0027%(error)s\u0027)"},{"line_number":332,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":333,"context_line":"    except exception.IronicException as e:"},{"line_number":334,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_8c01e7b1","line":331,"updated":"2017-03-21 21:10:30.000000000","message":"this has to be changed since log messages shouldn\u0027t be translated.","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"edbdd9fce132ba714cd953a2c07715d2b28e279c","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    try:"},{"line_number":330,"context_line":"        fail_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":331,"context_line":"                     \u0027%(error)s\u0027)"},{"line_number":332,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":333,"context_line":"    except exception.IronicException as e:"},{"line_number":334,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_c943a86a","line":331,"in_reply_to":"1a1ced50_2f89bb75","updated":"2017-03-22 17:57:27.000000000","message":"Yeah, stuff in last_error still has to be translated since it\u0027s user-facing.\n\nI\u0027d also prefer fixing all these in batches of modules separate from this feature addition.\n\nSee my comment in the previous patch set in this series (rescue api/conductor patches) for my reasoning.","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"01d7bdecea82786fe8c2e83fc3ddbb686b83ddc2","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    try:"},{"line_number":330,"context_line":"        fail_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":331,"context_line":"                     \u0027%(error)s\u0027)"},{"line_number":332,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":333,"context_line":"    except exception.IronicException as e:"},{"line_number":334,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_2f89bb75","line":331,"in_reply_to":"1a1ced50_8c01e7b1","updated":"2017-03-22 04:38:25.000000000","message":"IMHO, fail_msg is saved in node.last_error, which is considered as passing the message out of the method\u0027s context, thus _() should be used.\n\nhttps://docs.openstack.org/developer/oslo.i18n/guidelines.html#choosing-a-marker-function\n\nThis file contains more occurrences of _LW, they should be fixed in a follow-up patch.","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"01d7bdecea82786fe8c2e83fc3ddbb686b83ddc2","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        node.last_error \u003d msg"},{"line_number":337,"context_line":"    except Exception as e:"},{"line_number":338,"context_line":"        import sys"},{"line_number":339,"context_line":"        sys.stderr.write(\"unknown EXCEPTION BELOW!\\n\")"},{"line_number":340,"context_line":"        sys.stderr.write(str(e))"},{"line_number":341,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":342,"context_line":"        LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_cc9d9567","line":339,"range":{"start_line":339,"start_character":26,"end_line":339,"end_character":50},"updated":"2017-03-22 04:38:25.000000000","message":"nit: \u0027Unknown exception found:\\n\u0027","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"edbdd9fce132ba714cd953a2c07715d2b28e279c","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        node.last_error \u003d msg"},{"line_number":337,"context_line":"    except Exception as e:"},{"line_number":338,"context_line":"        import sys"},{"line_number":339,"context_line":"        sys.stderr.write(\"unknown EXCEPTION BELOW!\\n\")"},{"line_number":340,"context_line":"        sys.stderr.write(str(e))"},{"line_number":341,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":342,"context_line":"        LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_893450fc","line":339,"range":{"start_line":339,"start_character":26,"end_line":339,"end_character":50},"in_reply_to":"1a1ced50_cc9d9567","updated":"2017-03-22 17:57:27.000000000","message":"oops! this was something i added during development and wasn\u0027t supposed to make it to gerrit, sorry :)","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"c332d2bde1d2555a5ff4ba3e7e10c93a0359c1c2","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        LOG.error(msg)"},{"line_number":336,"context_line":"        node.last_error \u003d msg"},{"line_number":337,"context_line":"    except Exception as e:"},{"line_number":338,"context_line":"        import sys"},{"line_number":339,"context_line":"        sys.stderr.write(\"unknown EXCEPTION BELOW!\\n\")"},{"line_number":340,"context_line":"        sys.stderr.write(str(e))"},{"line_number":341,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":342,"context_line":"        LOG.error(msg)"},{"line_number":343,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_ddfe1dad","line":340,"range":{"start_line":338,"start_character":8,"end_line":340,"end_character":32},"updated":"2017-03-22 06:23:57.000000000","message":"Why are we writting this to stderr? LOG.error and updating node.last_error should be enough.","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"edbdd9fce132ba714cd953a2c07715d2b28e279c","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        LOG.error(msg)"},{"line_number":336,"context_line":"        node.last_error \u003d msg"},{"line_number":337,"context_line":"    except Exception as e:"},{"line_number":338,"context_line":"        import sys"},{"line_number":339,"context_line":"        sys.stderr.write(\"unknown EXCEPTION BELOW!\\n\")"},{"line_number":340,"context_line":"        sys.stderr.write(str(e))"},{"line_number":341,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":342,"context_line":"        LOG.error(msg)"},{"line_number":343,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_c93ac8e6","line":340,"range":{"start_line":338,"start_character":8,"end_line":340,"end_character":32},"in_reply_to":"1a1ced50_ddfe1dad","updated":"2017-03-22 17:57:27.000000000","message":"oops! this was something i added during development and wasn\u0027t supposed to make it to gerrit, sorry :)","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"01d7bdecea82786fe8c2e83fc3ddbb686b83ddc2","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        sys.stderr.write(str(e))"},{"line_number":341,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":342,"context_line":"        LOG.error(msg)"},{"line_number":343,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"},{"line_number":344,"context_line":"                            \u0027exception was encountered while aborting. \u0027"},{"line_number":345,"context_line":"                            \u0027More info may be found in the log file.\u0027)"},{"line_number":346,"context_line":"    finally:"},{"line_number":347,"context_line":"        node.save()"},{"line_number":348,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_8f6aafb1","line":345,"range":{"start_line":343,"start_character":0,"end_line":345,"end_character":70},"updated":"2017-03-22 04:38:25.000000000","message":"nits?\ns/but/and\ns/aborting/cleaning up","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"edbdd9fce132ba714cd953a2c07715d2b28e279c","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        sys.stderr.write(str(e))"},{"line_number":341,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":342,"context_line":"        LOG.error(msg)"},{"line_number":343,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"},{"line_number":344,"context_line":"                            \u0027exception was encountered while aborting. \u0027"},{"line_number":345,"context_line":"                            \u0027More info may be found in the log file.\u0027)"},{"line_number":346,"context_line":"    finally:"},{"line_number":347,"context_line":"        node.save()"},{"line_number":348,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_c911e85e","line":345,"range":{"start_line":343,"start_character":0,"end_line":345,"end_character":70},"in_reply_to":"1a1ced50_8f6aafb1","updated":"2017-03-22 17:57:27.000000000","message":"Done","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"fa64062cbdfadb61b64d819125f4fd303a77eb2b","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":335,"context_line":"        LOG.error(msg)"},{"line_number":336,"context_line":"        node.last_error \u003d msg"},{"line_number":337,"context_line":"    except Exception as e:"},{"line_number":338,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":339,"context_line":"        LOG.error(msg)"},{"line_number":340,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, and an unhandled \u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a1ced50_e9eaf1ab","line":337,"range":{"start_line":337,"start_character":11,"end_line":337,"end_character":26},"updated":"2017-03-23 16:04:47.000000000","message":"Should we be handling this exception here? Better to fall it through...","commit_id":"0582333e75339f43cff3f67948f1e9ebe8c23d5a"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"69e68aa862a093dc62a9d7bdfd6c0f1cf0451d8e","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":335,"context_line":"        LOG.error(msg)"},{"line_number":336,"context_line":"        node.last_error \u003d msg"},{"line_number":337,"context_line":"    except Exception as e:"},{"line_number":338,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":339,"context_line":"        LOG.error(msg)"},{"line_number":340,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, and an unhandled \u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"ffe62b97_e7282635","line":337,"range":{"start_line":337,"start_character":11,"end_line":337,"end_character":26},"in_reply_to":"1a1ced50_e9eaf1ab","updated":"2017-03-27 15:25:52.000000000","message":"This would only happen if a driver raises an exception that isn\u0027t known to ironic (likely a driver implementation error).\n\nThis is here so we can capture the error and add the node UUID to the log message for the operator to correlate the issue on the node with the logs, since unknown exceptions (those that do not subclass IronicException) may not have node UUID in them.\n\nIf we fall through, this useful information won\u0027t get logged, and we also couldn\u0027t guarantee that the node is saved with the appropriate last_error.","commit_id":"0582333e75339f43cff3f67948f1e9ebe8c23d5a"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"fa64062cbdfadb61b64d819125f4fd303a77eb2b","unresolved":false,"context_lines":[{"line_number":337,"context_line":"    except Exception as e:"},{"line_number":338,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":339,"context_line":"        LOG.error(msg)"},{"line_number":340,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, and an unhandled \u0027"},{"line_number":341,"context_line":"                            \u0027exception was encountered while cleaning up. \u0027"},{"line_number":342,"context_line":"                            \u0027More info may be found in the log file.\u0027)"},{"line_number":343,"context_line":"    finally:"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a1ced50_691c41c2","line":340,"range":{"start_line":340,"start_character":47,"end_line":340,"end_character":63},"updated":"2017-03-23 16:04:47.000000000","message":"The said exception is already got handled in this code block. May be we could just say \u0027an exception was encountered ...\u0027","commit_id":"0582333e75339f43cff3f67948f1e9ebe8c23d5a"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"69e68aa862a093dc62a9d7bdfd6c0f1cf0451d8e","unresolved":false,"context_lines":[{"line_number":337,"context_line":"    except Exception as e:"},{"line_number":338,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":339,"context_line":"        LOG.error(msg)"},{"line_number":340,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, and an unhandled \u0027"},{"line_number":341,"context_line":"                            \u0027exception was encountered while cleaning up. \u0027"},{"line_number":342,"context_line":"                            \u0027More info may be found in the log file.\u0027)"},{"line_number":343,"context_line":"    finally:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ffe62b97_67b9b62c","line":340,"range":{"start_line":340,"start_character":47,"end_line":340,"end_character":63},"in_reply_to":"1a1ced50_691c41c2","updated":"2017-03-27 15:25:52.000000000","message":"Sure - how about \"an unknown exception\"?","commit_id":"0582333e75339f43cff3f67948f1e9ebe8c23d5a"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"f8f405c5e1e32e3c83aa1155e1c928a10b266a2c","unresolved":false,"context_lines":[{"line_number":320,"context_line":"    :param task: a TaskManager instance."},{"line_number":321,"context_line":"    \"\"\""},{"line_number":322,"context_line":"    node \u003d task.node"},{"line_number":323,"context_line":"    msg \u003d (_(\u0027Timeout reached while waiting for rescue ramdisk callback \u0027"},{"line_number":324,"context_line":"             \u0027for node %s\u0027) % node.uuid)"},{"line_number":325,"context_line":"    node.last_error \u003d msg"},{"line_number":326,"context_line":"    LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ff0f0b1f_01677a27","line":323,"range":{"start_line":323,"start_character":10,"end_line":323,"end_character":13},"updated":"2017-05-22 04:35:02.000000000","message":"Remove log translation","commit_id":"67d904ea7add18d1afa710b998b482d8abcec6f4"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"3e62ffa22dc86f7b539782463948207e73d30f88","unresolved":false,"context_lines":[{"line_number":320,"context_line":"    :param task: a TaskManager instance."},{"line_number":321,"context_line":"    \"\"\""},{"line_number":322,"context_line":"    node \u003d task.node"},{"line_number":323,"context_line":"    msg \u003d (_(\u0027Timeout reached while waiting for rescue ramdisk callback \u0027"},{"line_number":324,"context_line":"             \u0027for node %s\u0027) % node.uuid)"},{"line_number":325,"context_line":"    node.last_error \u003d msg"},{"line_number":326,"context_line":"    LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ff0f0b1f_96af4fe2","line":323,"range":{"start_line":323,"start_character":10,"end_line":323,"end_character":13},"in_reply_to":"ff0f0b1f_01677a27","updated":"2017-05-22 06:08:17.000000000","message":"Done","commit_id":"67d904ea7add18d1afa710b998b482d8abcec6f4"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"f8f405c5e1e32e3c83aa1155e1c928a10b266a2c","unresolved":false,"context_lines":[{"line_number":326,"context_line":"    LOG.error(msg)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    try:"},{"line_number":329,"context_line":"        fail_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":330,"context_line":"                     \u0027%(error)s\u0027)"},{"line_number":331,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":332,"context_line":"    except exception.IronicException as e:"}],"source_content_type":"text/x-python","patch_set":25,"id":"ff0f0b1f_81726ae2","line":329,"range":{"start_line":329,"start_character":19,"end_line":329,"end_character":21},"updated":"2017-05-22 04:35:02.000000000","message":"ditto","commit_id":"67d904ea7add18d1afa710b998b482d8abcec6f4"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"3e62ffa22dc86f7b539782463948207e73d30f88","unresolved":false,"context_lines":[{"line_number":326,"context_line":"    LOG.error(msg)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    try:"},{"line_number":329,"context_line":"        fail_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":330,"context_line":"                     \u0027%(error)s\u0027)"},{"line_number":331,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":332,"context_line":"    except exception.IronicException as e:"}],"source_content_type":"text/x-python","patch_set":25,"id":"ff0f0b1f_56b9b72b","line":329,"range":{"start_line":329,"start_character":19,"end_line":329,"end_character":21},"in_reply_to":"ff0f0b1f_81726ae2","updated":"2017-05-22 06:08:17.000000000","message":"Done","commit_id":"67d904ea7add18d1afa710b998b482d8abcec6f4"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"45d4bec36bc71fda2147fd8f6c1fb7d564379317","unresolved":false,"context_lines":[{"line_number":336,"context_line":"    except Exception as e:"},{"line_number":337,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":338,"context_line":"        LOG.error(msg)"},{"line_number":339,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, and an unknown \u0027"},{"line_number":340,"context_line":"                            \u0027exception was encountered while cleaning up. \u0027"},{"line_number":341,"context_line":"                            \u0027More info may be found in the log file.\u0027)"},{"line_number":342,"context_line":"    finally:"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff0f0b1f_22d6f9f2","line":339,"updated":"2017-05-22 09:39:39.000000000","message":"Wouldn\u0027t it be more helpful to add the exception \u0027e\u0027 in node.last_error ?","commit_id":"11407fb8200f65d00c8b718d5407ee1e9c83eae2"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"7d27ff1b46d33015eef5fd48968b23fdf6c8be87","unresolved":false,"context_lines":[{"line_number":336,"context_line":"    except Exception as e:"},{"line_number":337,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":338,"context_line":"        LOG.error(msg)"},{"line_number":339,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, and an unknown \u0027"},{"line_number":340,"context_line":"                            \u0027exception was encountered while cleaning up. \u0027"},{"line_number":341,"context_line":"                            \u0027More info may be found in the log file.\u0027)"},{"line_number":342,"context_line":"    finally:"}],"source_content_type":"text/x-python","patch_set":26,"id":"df140735_d6b8b911","line":339,"in_reply_to":"ff0f0b1f_22d6f9f2","updated":"2017-06-06 03:59:51.000000000","message":"Done","commit_id":"11407fb8200f65d00c8b718d5407ee1e9c83eae2"},{"author":{"_account_id":19593,"name":"Anup Navare","email":"anup.d.navare@intel.com","username":"anup"},"change_message_id":"2784b5f2eaa4d0f852657ef66b4f8be8e9d6fc70","unresolved":false,"context_lines":[{"line_number":336,"context_line":"    except Exception as e:"},{"line_number":337,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":338,"context_line":"        LOG.error(msg)"},{"line_number":339,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, and an unknown \u0027"},{"line_number":340,"context_line":"                            \u0027exception was encountered while cleaning up: \u0027"},{"line_number":341,"context_line":"                            \u0027%s. More info may be found in the log file.\u0027) % e"},{"line_number":342,"context_line":"    finally:"}],"source_content_type":"text/x-python","patch_set":28,"id":"7f231b9d_4004bf7b","line":339,"range":{"start_line":339,"start_character":13,"end_line":339,"end_character":23},"updated":"2017-06-09 23:01:00.000000000","message":"Should we show fail_msg itself to be consistent? (not insisting on it, but i have seen usually it is the same)","commit_id":"43532376c3dfc264abce74b999b89d49fc740f47"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"8b47f12a98e8fdfd7eef0bec99e032fa08181b2f","unresolved":false,"context_lines":[{"line_number":336,"context_line":"    except Exception as e:"},{"line_number":337,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":338,"context_line":"        LOG.error(msg)"},{"line_number":339,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, and an unknown \u0027"},{"line_number":340,"context_line":"                            \u0027exception was encountered while cleaning up: \u0027"},{"line_number":341,"context_line":"                            \u0027%s. More info may be found in the log file.\u0027) % e"},{"line_number":342,"context_line":"    finally:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f201791_1f63af1c","line":339,"range":{"start_line":339,"start_character":13,"end_line":339,"end_character":23},"in_reply_to":"7f231b9d_4004bf7b","updated":"2017-06-21 12:03:00.000000000","message":"I think it is better to add this description since this particular exception is an Ironic Exception.","commit_id":"43532376c3dfc264abce74b999b89d49fc740f47"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"1f57994558a2dad951981edcadb756e499e9c157","unresolved":false,"context_lines":[{"line_number":363,"context_line":"    :param task: a TaskManager instance."},{"line_number":364,"context_line":"    \"\"\""},{"line_number":365,"context_line":"    node \u003d task.node"},{"line_number":366,"context_line":"    msg \u003d (\u0027Timeout reached while waiting for rescue ramdisk callback \u0027"},{"line_number":367,"context_line":"           \u0027for node %s\u0027 % node.uuid)"},{"line_number":368,"context_line":"    node.last_error \u003d msg"},{"line_number":369,"context_line":"    LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"3f1d235d_966ca19c","line":366,"updated":"2017-07-06 08:05:40.000000000","message":"_() is necessary for a user visible message.","commit_id":"bb0c7d4db4c50fae4106138cc2bcd9b50c3d7ae4"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"08a5265ce76dbb3d901653a9b2d89888b30ef045","unresolved":false,"context_lines":[{"line_number":363,"context_line":"    :param task: a TaskManager instance."},{"line_number":364,"context_line":"    \"\"\""},{"line_number":365,"context_line":"    node \u003d task.node"},{"line_number":366,"context_line":"    msg \u003d (\u0027Timeout reached while waiting for rescue ramdisk callback \u0027"},{"line_number":367,"context_line":"           \u0027for node %s\u0027 % node.uuid)"},{"line_number":368,"context_line":"    node.last_error \u003d msg"},{"line_number":369,"context_line":"    LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"1f1a1f67_8c7d4db3","line":366,"in_reply_to":"3f1d235d_966ca19c","updated":"2017-07-13 11:06:36.000000000","message":"Done","commit_id":"bb0c7d4db4c50fae4106138cc2bcd9b50c3d7ae4"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"1f57994558a2dad951981edcadb756e499e9c157","unresolved":false,"context_lines":[{"line_number":369,"context_line":"    LOG.error(msg)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    try:"},{"line_number":372,"context_line":"        fail_msg \u003d (\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":373,"context_line":"                    \u0027%(error)s\u0027)"},{"line_number":374,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":375,"context_line":"    except exception.IronicException as e:"}],"source_content_type":"text/x-python","patch_set":32,"id":"3f1d235d_b6e43d0e","line":372,"updated":"2017-07-06 08:05:40.000000000","message":"_() is also necessary here.","commit_id":"bb0c7d4db4c50fae4106138cc2bcd9b50c3d7ae4"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"08a5265ce76dbb3d901653a9b2d89888b30ef045","unresolved":false,"context_lines":[{"line_number":369,"context_line":"    LOG.error(msg)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    try:"},{"line_number":372,"context_line":"        fail_msg \u003d (\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":373,"context_line":"                    \u0027%(error)s\u0027)"},{"line_number":374,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":375,"context_line":"    except exception.IronicException as e:"}],"source_content_type":"text/x-python","patch_set":32,"id":"1f1a1f67_4c517536","line":372,"in_reply_to":"3f1d235d_b6e43d0e","updated":"2017-07-13 11:06:36.000000000","message":"Done","commit_id":"bb0c7d4db4c50fae4106138cc2bcd9b50c3d7ae4"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"21763c5459aef930f34b8af6eb06d356a499c33d","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":385,"context_line":"    except exception.IronicException as e:"},{"line_number":386,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":387,"context_line":"        LOG.error(msg)"},{"line_number":388,"context_line":"        node.last_error \u003d msg"},{"line_number":389,"context_line":"    except Exception as e:"},{"line_number":390,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"}],"source_content_type":"text/x-python","patch_set":37,"id":"7f287b81_ba7bfc89","line":387,"updated":"2017-09-08 10:36:10.000000000","message":"LOG.exception","commit_id":"676ad460d1839ada84e4ec0e506419f960442e88"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3246ea6ba070a2630b6a650efd94d41b2423ded5","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":385,"context_line":"    except exception.IronicException as e:"},{"line_number":386,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":387,"context_line":"        LOG.error(msg)"},{"line_number":388,"context_line":"        node.last_error \u003d msg"},{"line_number":389,"context_line":"    except Exception as e:"},{"line_number":390,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"}],"source_content_type":"text/x-python","patch_set":37,"id":"5f2577a7_992e91a3","line":387,"in_reply_to":"7f287b81_ba7bfc89","updated":"2017-09-12 05:56:17.000000000","message":"Done","commit_id":"676ad460d1839ada84e4ec0e506419f960442e88"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"21763c5459aef930f34b8af6eb06d356a499c33d","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        node.last_error \u003d msg"},{"line_number":389,"context_line":"    except Exception as e:"},{"line_number":390,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":391,"context_line":"        LOG.error(msg)"},{"line_number":392,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, and an unknown \u0027"},{"line_number":393,"context_line":"                            \u0027exception was encountered while cleaning up: \u0027"},{"line_number":394,"context_line":"                            \u0027%s. More info may be found in the log file.\u0027) % e"}],"source_content_type":"text/x-python","patch_set":37,"id":"7f287b81_9a6cc0d0","line":391,"updated":"2017-09-08 10:36:10.000000000","message":"ditto","commit_id":"676ad460d1839ada84e4ec0e506419f960442e88"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3246ea6ba070a2630b6a650efd94d41b2423ded5","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        node.last_error \u003d msg"},{"line_number":389,"context_line":"    except Exception as e:"},{"line_number":390,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":391,"context_line":"        LOG.error(msg)"},{"line_number":392,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, and an unknown \u0027"},{"line_number":393,"context_line":"                            \u0027exception was encountered while cleaning up: \u0027"},{"line_number":394,"context_line":"                            \u0027%s. More info may be found in the log file.\u0027) % e"}],"source_content_type":"text/x-python","patch_set":37,"id":"5f2577a7_792be593","line":391,"in_reply_to":"7f287b81_9a6cc0d0","updated":"2017-09-12 05:56:17.000000000","message":"Done","commit_id":"676ad460d1839ada84e4ec0e506419f960442e88"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"21763c5459aef930f34b8af6eb06d356a499c33d","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        LOG.error(msg)"},{"line_number":392,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, and an unknown \u0027"},{"line_number":393,"context_line":"                            \u0027exception was encountered while cleaning up: \u0027"},{"line_number":394,"context_line":"                            \u0027%s. More info may be found in the log file.\u0027) % e"},{"line_number":395,"context_line":"    finally:"},{"line_number":396,"context_line":"        node.save()"},{"line_number":397,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"7f287b81_7af474f1","line":394,"range":{"start_line":394,"start_character":33,"end_line":394,"end_character":72},"updated":"2017-09-08 10:36:10.000000000","message":"Please move this before exception as string because it can contain a lot of text.","commit_id":"676ad460d1839ada84e4ec0e506419f960442e88"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3246ea6ba070a2630b6a650efd94d41b2423ded5","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        LOG.error(msg)"},{"line_number":392,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, and an unknown \u0027"},{"line_number":393,"context_line":"                            \u0027exception was encountered while cleaning up: \u0027"},{"line_number":394,"context_line":"                            \u0027%s. More info may be found in the log file.\u0027) % e"},{"line_number":395,"context_line":"    finally:"},{"line_number":396,"context_line":"        node.save()"},{"line_number":397,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"5f2577a7_391f9d6d","line":394,"range":{"start_line":394,"start_character":33,"end_line":394,"end_character":72},"in_reply_to":"7f287b81_7af474f1","updated":"2017-09-12 05:56:17.000000000","message":"Done","commit_id":"676ad460d1839ada84e4ec0e506419f960442e88"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"aefe077127eaa623e0bb6aaf2b24c5d8ac31e062","unresolved":false,"context_lines":[{"line_number":409,"context_line":"             \u0027for node %s\u0027) % node.uuid)"},{"line_number":410,"context_line":"    node.last_error \u003d msg"},{"line_number":411,"context_line":"    LOG.error(msg)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    try:"},{"line_number":414,"context_line":"        fail_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":415,"context_line":"                     \u0027%(error)s\u0027)"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_4bd9bbf0","line":412,"updated":"2017-11-27 23:08:54.000000000","message":"I think we should do a node.save() here.","commit_id":"3c03d5876d867d97875ea832ad799856bac313a5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"9645dc47a61d147c701ef8e24b9bbb790ebefd33","unresolved":false,"context_lines":[{"line_number":409,"context_line":"             \u0027for node %s\u0027) % node.uuid)"},{"line_number":410,"context_line":"    node.last_error \u003d msg"},{"line_number":411,"context_line":"    LOG.error(msg)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    try:"},{"line_number":414,"context_line":"        fail_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":415,"context_line":"                     \u0027%(error)s\u0027)"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_26432244","line":412,"in_reply_to":"ff82abbf_4bd9bbf0","updated":"2017-11-29 16:27:37.000000000","message":"Done","commit_id":"3c03d5876d867d97875ea832ad799856bac313a5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"aefe077127eaa623e0bb6aaf2b24c5d8ac31e062","unresolved":false,"context_lines":[{"line_number":411,"context_line":"    LOG.error(msg)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    try:"},{"line_number":414,"context_line":"        fail_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":415,"context_line":"                     \u0027%(error)s\u0027)"},{"line_number":416,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":417,"context_line":"    except exception.IronicException as e:"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_0b7bb3bd","line":414,"updated":"2017-11-27 23:08:54.000000000","message":"this line should not cause an exception to be raised. I\u0027d prefer if it was outside the try for that reason, but it might just be me.","commit_id":"3c03d5876d867d97875ea832ad799856bac313a5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"9645dc47a61d147c701ef8e24b9bbb790ebefd33","unresolved":false,"context_lines":[{"line_number":411,"context_line":"    LOG.error(msg)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    try:"},{"line_number":414,"context_line":"        fail_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":415,"context_line":"                     \u0027%(error)s\u0027)"},{"line_number":416,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":417,"context_line":"    except exception.IronicException as e:"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_0644de45","line":414,"in_reply_to":"ff82abbf_0b7bb3bd","updated":"2017-11-29 16:27:37.000000000","message":"Done","commit_id":"3c03d5876d867d97875ea832ad799856bac313a5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"aefe077127eaa623e0bb6aaf2b24c5d8ac31e062","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":419,"context_line":"        LOG.exception(msg)"},{"line_number":420,"context_line":"        node.refresh()"},{"line_number":421,"context_line":"        node.last_error \u003d msg"},{"line_number":422,"context_line":"    except Exception as e:"},{"line_number":423,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":424,"context_line":"        LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_8beca38f","line":421,"updated":"2017-11-27 23:08:54.000000000","message":"if this happens, it overwrites L410. I think we should do a node.save() after L410, so that at least for a few micro seconds, that other error might be seen. Who knows how long the clean up will take before it errors...","commit_id":"3c03d5876d867d97875ea832ad799856bac313a5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"9645dc47a61d147c701ef8e24b9bbb790ebefd33","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":419,"context_line":"        LOG.exception(msg)"},{"line_number":420,"context_line":"        node.refresh()"},{"line_number":421,"context_line":"        node.last_error \u003d msg"},{"line_number":422,"context_line":"    except Exception as e:"},{"line_number":423,"context_line":"        msg \u003d fail_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":424,"context_line":"        LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_86a6ae0e","line":421,"in_reply_to":"ff82abbf_8beca38f","updated":"2017-11-29 16:27:37.000000000","message":"Done","commit_id":"3c03d5876d867d97875ea832ad799856bac313a5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"aefe077127eaa623e0bb6aaf2b24c5d8ac31e062","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, and an unknown \u0027"},{"line_number":427,"context_line":"                            \u0027exception was encountered while cleaning up. \u0027"},{"line_number":428,"context_line":"                            \u0027More info may be found in the log file. \u0027"},{"line_number":429,"context_line":"                            \u0027Error: %s.\u0027) % e"},{"line_number":430,"context_line":"    finally:"},{"line_number":431,"context_line":"        node.save()"},{"line_number":432,"context_line":""}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_eba8cf20","line":429,"updated":"2017-11-27 23:08:54.000000000","message":"It seems like someone was against providing too much \u0027internal\u0027 errors in .last_error but ... (this isn\u0027t consistent with the error handling in cleanup_after_timeout()).","commit_id":"3c03d5876d867d97875ea832ad799856bac313a5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"9645dc47a61d147c701ef8e24b9bbb790ebefd33","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        node.last_error \u003d _(\u0027Rescue timed out, and an unknown \u0027"},{"line_number":427,"context_line":"                            \u0027exception was encountered while cleaning up. \u0027"},{"line_number":428,"context_line":"                            \u0027More info may be found in the log file. \u0027"},{"line_number":429,"context_line":"                            \u0027Error: %s.\u0027) % e"},{"line_number":430,"context_line":"    finally:"},{"line_number":431,"context_line":"        node.save()"},{"line_number":432,"context_line":""}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_efbd0d02","line":429,"in_reply_to":"ff82abbf_eba8cf20","updated":"2017-11-29 16:27:37.000000000","message":"Done","commit_id":"3c03d5876d867d97875ea832ad799856bac313a5"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"7e52340c36ad1ea46b41a8b6db5b1705e337b438","unresolved":false,"context_lines":[{"line_number":414,"context_line":"    error_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":415,"context_line":"                  \u0027%(error)s\u0027)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    try:"},{"line_number":418,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":419,"context_line":"    except Exception as e:"},{"line_number":420,"context_line":"        msg \u003d error_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"}],"source_content_type":"text/x-python","patch_set":59,"id":"df87a7cf_b75d807a","line":417,"updated":"2017-12-18 08:36:14.000000000","message":"I wonder if it might be better to power off the node as a part of clean up.","commit_id":"5a436e1a4d02ac8bd657d4b2e0dd9fcb3e9249d8"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"32b126816157bb6d0ea9df7031934014b0a2fa86","unresolved":false,"context_lines":[{"line_number":414,"context_line":"    error_msg \u003d _(\u0027Cleanup failed for node %(node)s after rescue timeout: \u0027"},{"line_number":415,"context_line":"                  \u0027%(error)s\u0027)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    try:"},{"line_number":418,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":419,"context_line":"    except Exception as e:"},{"line_number":420,"context_line":"        msg \u003d error_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"}],"source_content_type":"text/x-python","patch_set":59,"id":"df87a7cf_e08fbc20","line":417,"in_reply_to":"df87a7cf_b75d807a","updated":"2018-01-03 06:17:11.000000000","message":"Done","commit_id":"5a436e1a4d02ac8bd657d4b2e0dd9fcb3e9249d8"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"7e52340c36ad1ea46b41a8b6db5b1705e337b438","unresolved":false,"context_lines":[{"line_number":422,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":423,"context_line":"            node.last_error \u003d msg"},{"line_number":424,"context_line":"        else:"},{"line_number":425,"context_line":"            node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"},{"line_number":426,"context_line":"                                \u0027exception was encountered while aborting. \u0027"},{"line_number":427,"context_line":"                                \u0027More info may be found in the log file.\u0027)"},{"line_number":428,"context_line":"        node.save()"}],"source_content_type":"text/x-python","patch_set":59,"id":"df87a7cf_f7946839","line":425,"updated":"2017-12-18 08:36:14.000000000","message":"I prefer using LOG.exception() for unknown errors, which might be helpful.","commit_id":"5a436e1a4d02ac8bd657d4b2e0dd9fcb3e9249d8"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"32b126816157bb6d0ea9df7031934014b0a2fa86","unresolved":false,"context_lines":[{"line_number":422,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":423,"context_line":"            node.last_error \u003d msg"},{"line_number":424,"context_line":"        else:"},{"line_number":425,"context_line":"            node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"},{"line_number":426,"context_line":"                                \u0027exception was encountered while aborting. \u0027"},{"line_number":427,"context_line":"                                \u0027More info may be found in the log file.\u0027)"},{"line_number":428,"context_line":"        node.save()"}],"source_content_type":"text/x-python","patch_set":59,"id":"df87a7cf_0dce7d59","line":425,"in_reply_to":"df87a7cf_f7946839","updated":"2018-01-03 06:17:11.000000000","message":"Done","commit_id":"5a436e1a4d02ac8bd657d4b2e0dd9fcb3e9249d8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fe5d1d8a103fa99464f6248f8bb5384d090b181d","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    \"\"\""},{"line_number":407,"context_line":"    node \u003d task.node"},{"line_number":408,"context_line":"    msg \u003d (_(\u0027Timeout reached while waiting for rescue ramdisk callback \u0027"},{"line_number":409,"context_line":"             \u0027for node %s\u0027) % node.uuid)"},{"line_number":410,"context_line":"    node.last_error \u003d msg"},{"line_number":411,"context_line":"    LOG.error(msg)"},{"line_number":412,"context_line":"    node.save()"}],"source_content_type":"text/x-python","patch_set":60,"id":"bf8cb3f7_3d9ea807","line":409,"updated":"2017-12-20 19:35:32.000000000","message":"just a nit. This msg is being saved in the node\u0027s last_error field. No need to mention the node UUID in the msg since we know which node it is.","commit_id":"37850df094d1bc451db0f83bae45e1f58e86b87f"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"32b126816157bb6d0ea9df7031934014b0a2fa86","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    \"\"\""},{"line_number":407,"context_line":"    node \u003d task.node"},{"line_number":408,"context_line":"    msg \u003d (_(\u0027Timeout reached while waiting for rescue ramdisk callback \u0027"},{"line_number":409,"context_line":"             \u0027for node %s\u0027) % node.uuid)"},{"line_number":410,"context_line":"    node.last_error \u003d msg"},{"line_number":411,"context_line":"    LOG.error(msg)"},{"line_number":412,"context_line":"    node.save()"}],"source_content_type":"text/x-python","patch_set":60,"id":"9f91af0f_c70d403f","line":409,"in_reply_to":"bf8cb3f7_3d9ea807","updated":"2018-01-03 06:17:11.000000000","message":"Done","commit_id":"37850df094d1bc451db0f83bae45e1f58e86b87f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fe5d1d8a103fa99464f6248f8bb5384d090b181d","unresolved":false,"context_lines":[{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    try:"},{"line_number":418,"context_line":"        node_power_action(task, states.POWER_OFF)"},{"line_number":419,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":420,"context_line":"    except Exception as e:"},{"line_number":421,"context_line":"        msg \u003d error_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":422,"context_line":"        LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":60,"id":"bf8cb3f7_9d3574fa","line":419,"updated":"2017-12-20 19:35:32.000000000","message":"If, for whatever reason, we cannot power off the node, de we still want to do rescue.clean_up?","commit_id":"37850df094d1bc451db0f83bae45e1f58e86b87f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b4ef885861f3d7e84b09ef2376ad829cbb6ac8dc","unresolved":false,"context_lines":[{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    try:"},{"line_number":418,"context_line":"        node_power_action(task, states.POWER_OFF)"},{"line_number":419,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":420,"context_line":"    except Exception as e:"},{"line_number":421,"context_line":"        msg \u003d error_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":422,"context_line":"        LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":60,"id":"bf8cb3f7_fb5fe80b","line":419,"in_reply_to":"bf8cb3f7_9d3574fa","updated":"2017-12-20 20:19:23.000000000","message":"Well, I guess the operator would have to attempt to unrescue again, so I think this is okay...  It seems that failure to power off would be worthy to block things at that point.","commit_id":"37850df094d1bc451db0f83bae45e1f58e86b87f"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"32b126816157bb6d0ea9df7031934014b0a2fa86","unresolved":false,"context_lines":[{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    try:"},{"line_number":418,"context_line":"        node_power_action(task, states.POWER_OFF)"},{"line_number":419,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":420,"context_line":"    except Exception as e:"},{"line_number":421,"context_line":"        msg \u003d error_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":422,"context_line":"        LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":60,"id":"9f91af0f_c269aebe","line":419,"in_reply_to":"bf8cb3f7_fb5fe80b","updated":"2018-01-03 06:17:11.000000000","message":"I agree with Julia.","commit_id":"37850df094d1bc451db0f83bae45e1f58e86b87f"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"1708825373a64bd293013d3d8b91b1c8a4371846","unresolved":false,"context_lines":[{"line_number":419,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":420,"context_line":"    except Exception as e:"},{"line_number":421,"context_line":"        msg \u003d error_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":422,"context_line":"        LOG.error(msg)"},{"line_number":423,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":424,"context_line":"            node.last_error \u003d msg"},{"line_number":425,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":62,"id":"9f91af0f_48f54aec","line":422,"updated":"2018-01-09 06:09:23.000000000","message":"nit: It might be better to this logging to L424 because LOG.exception is used for unexpected errors at L429.","commit_id":"b333c7b9f3babd397ee918b9cc02ac7c22bf5425"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"9cd9e016746b64a8a4cb904349154e13dce71b6f","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    \"\"\""},{"line_number":407,"context_line":"    node \u003d task.node"},{"line_number":408,"context_line":"    msg \u003d _(\u0027Timeout reached while waiting for rescue ramdisk callback \u0027"},{"line_number":409,"context_line":"            \u0027for node\u0027)"},{"line_number":410,"context_line":"    node.last_error \u003d msg"},{"line_number":411,"context_line":"    LOG.error(msg)"},{"line_number":412,"context_line":"    node.save()"}],"source_content_type":"text/x-python","patch_set":63,"id":"7f96bb07_58e11e9a","line":409,"updated":"2018-01-12 02:23:47.000000000","message":"It might be helpful if the node UUID is logged.","commit_id":"dcf9e7db225a5ab91f69cbefcdbc05ef9872dc9f"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"de8b8e158728ee1aff71507501d952ad91357b51","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    \"\"\""},{"line_number":407,"context_line":"    node \u003d task.node"},{"line_number":408,"context_line":"    msg \u003d _(\u0027Timeout reached while waiting for rescue ramdisk callback \u0027"},{"line_number":409,"context_line":"            \u0027for node\u0027)"},{"line_number":410,"context_line":"    node.last_error \u003d msg"},{"line_number":411,"context_line":"    LOG.error(msg)"},{"line_number":412,"context_line":"    node.save()"}],"source_content_type":"text/x-python","patch_set":63,"id":"7f96bb07_d34aec25","line":409,"in_reply_to":"7f96bb07_58e11e9a","updated":"2018-01-12 09:35:23.000000000","message":"Done","commit_id":"dcf9e7db225a5ab91f69cbefcdbc05ef9872dc9f"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"3b5cfcb5950c9de92db9ef7866c13d0848669977","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                  \u0027%(error)s\u0027)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    try:"},{"line_number":419,"context_line":"        node_power_action(task, states.POWER_OFF)"},{"line_number":420,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":421,"context_line":"    except Exception as e:"},{"line_number":422,"context_line":"        msg \u003d error_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"}],"source_content_type":"text/x-python","patch_set":65,"id":"7f96bb07_751ce311","line":419,"updated":"2018-01-15 14:26:07.000000000","message":"The last error is reset here[1]. It would be better to set the last error after cleaning up finishes.\n\nhttps://review.openstack.org/#/c/353156/65/ironic/conductor/utils.py@219","commit_id":"675aebbf7d5a27ae7ddbdeaf78dbc790749b5403"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b8e22019e89455059f033dcbb432841686f9eccd","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                  \u0027%(error)s\u0027)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    try:"},{"line_number":419,"context_line":"        node_power_action(task, states.POWER_OFF)"},{"line_number":420,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":421,"context_line":"    except Exception as e:"},{"line_number":422,"context_line":"        msg \u003d error_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"}],"source_content_type":"text/x-python","patch_set":65,"id":"7f96bb07_5dde976d","line":419,"in_reply_to":"7f96bb07_751ce311","updated":"2018-01-17 16:14:07.000000000","message":"Done","commit_id":"675aebbf7d5a27ae7ddbdeaf78dbc790749b5403"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"7a694451e07687c345af226ba38a1c19d0988e4b","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        node.save()"},{"line_number":419,"context_line":"    except Exception as e:"},{"line_number":420,"context_line":"        msg \u003d error_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":421,"context_line":"        LOG.error(msg)"},{"line_number":422,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":423,"context_line":"            node.last_error \u003d msg"},{"line_number":424,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":66,"id":"7f96bb07_483eba8c","line":421,"updated":"2018-01-16 19:34:22.000000000","message":"you could have done \n\nLOG.error(error_msg, {\u0027node\u0027: node.uuid, \u0027error\u0027: e})\n\nIn fact, I think you could move L412 to here, where it is actually used.","commit_id":"d121485441f201fbaaa81bb4f8b50a4581348df3"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b8e22019e89455059f033dcbb432841686f9eccd","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        node.save()"},{"line_number":419,"context_line":"    except Exception as e:"},{"line_number":420,"context_line":"        msg \u003d error_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":421,"context_line":"        LOG.error(msg)"},{"line_number":422,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":423,"context_line":"            node.last_error \u003d msg"},{"line_number":424,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":66,"id":"7f96bb07_9b639242","line":421,"in_reply_to":"7f96bb07_483eba8c","updated":"2018-01-17 16:14:07.000000000","message":"Done","commit_id":"d121485441f201fbaaa81bb4f8b50a4581348df3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"7a694451e07687c345af226ba38a1c19d0988e4b","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        msg \u003d error_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":421,"context_line":"        LOG.error(msg)"},{"line_number":422,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":423,"context_line":"            node.last_error \u003d msg"},{"line_number":424,"context_line":"        else:"},{"line_number":425,"context_line":"            node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"},{"line_number":426,"context_line":"                                \u0027exception was encountered while aborting. \u0027"}],"source_content_type":"text/x-python","patch_set":66,"id":"7f96bb07_e85786c9","line":423,"updated":"2018-01-16 19:34:22.000000000","message":"hmm. There is an inconsistency. At L417, the string doesn\u0027t include the node\u0027s uuid, but in this one, it does. I\u0027m guessing since the node is known, that the uuid is not needed.","commit_id":"d121485441f201fbaaa81bb4f8b50a4581348df3"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b8e22019e89455059f033dcbb432841686f9eccd","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        msg \u003d error_msg % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":421,"context_line":"        LOG.error(msg)"},{"line_number":422,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":423,"context_line":"            node.last_error \u003d msg"},{"line_number":424,"context_line":"        else:"},{"line_number":425,"context_line":"            node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"},{"line_number":426,"context_line":"                                \u0027exception was encountered while aborting. \u0027"}],"source_content_type":"text/x-python","patch_set":66,"id":"7f96bb07_31f7fdd5","line":423,"in_reply_to":"7f96bb07_e85786c9","updated":"2018-01-17 16:14:07.000000000","message":"Done","commit_id":"d121485441f201fbaaa81bb4f8b50a4581348df3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"7a694451e07687c345af226ba38a1c19d0988e4b","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        node.last_error \u003d (_(\"No free conductor workers available\"))"},{"line_number":438,"context_line":"        node.save()"},{"line_number":439,"context_line":"        LOG.warning(\"No free conductor workers available to perform \""},{"line_number":440,"context_line":"                    \"%(state)s on node %(node)s\","},{"line_number":441,"context_line":"                    {\u0027state\u0027: state, \u0027node\u0027: node.uuid})"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"7f96bb07_08e0b2f9","line":440,"updated":"2018-01-16 19:34:22.000000000","message":"it seems more like s/state/action/ ? or operation?","commit_id":"d121485441f201fbaaa81bb4f8b50a4581348df3"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b8e22019e89455059f033dcbb432841686f9eccd","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        node.last_error \u003d (_(\"No free conductor workers available\"))"},{"line_number":438,"context_line":"        node.save()"},{"line_number":439,"context_line":"        LOG.warning(\"No free conductor workers available to perform \""},{"line_number":440,"context_line":"                    \"%(state)s on node %(node)s\","},{"line_number":441,"context_line":"                    {\u0027state\u0027: state, \u0027node\u0027: node.uuid})"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"7f96bb07_712a652c","line":440,"in_reply_to":"7f96bb07_08e0b2f9","updated":"2018-01-17 16:14:07.000000000","message":"Done","commit_id":"d121485441f201fbaaa81bb4f8b50a4581348df3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"201d9d2f11e7f70c36b0c4223f58f1f4d28884ec","unresolved":false,"context_lines":[{"line_number":417,"context_line":"    except Exception as e:"},{"line_number":418,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":419,"context_line":"            error_msg \u003d _(\u0027Cleanup failed for %(node_info)s after rescue \u0027"},{"line_number":420,"context_line":"                          \u0027timeout: %(error)s\u0027)"},{"line_number":421,"context_line":"            node_info \u003d (\u0027node\u0027)"},{"line_number":422,"context_line":"            node.last_error \u003d error_msg % {\u0027node_info\u0027: node_info, \u0027error\u0027: e}"},{"line_number":423,"context_line":"            node_info \u003d (\u0027node %s\u0027) % node.uuid"}],"source_content_type":"text/x-python","patch_set":68,"id":"7f96bb07_4ffc5d3d","line":420,"updated":"2018-01-17 17:31:20.000000000","message":"might have been easier if you had changed this string to e.g. \u0027After timeout reached while waiting for rescue ramdisk callback, clean up failed for node\u0027.","commit_id":"94909699c8350fdde6a5a18edf23f0afa9d5d9d2"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"8456b0be758554cae217f79ef662fa79c763abf4","unresolved":false,"context_lines":[{"line_number":417,"context_line":"    except Exception as e:"},{"line_number":418,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":419,"context_line":"            error_msg \u003d _(\u0027Cleanup failed for %(node_info)s after rescue \u0027"},{"line_number":420,"context_line":"                          \u0027timeout: %(error)s\u0027)"},{"line_number":421,"context_line":"            node_info \u003d (\u0027node\u0027)"},{"line_number":422,"context_line":"            node.last_error \u003d error_msg % {\u0027node_info\u0027: node_info, \u0027error\u0027: e}"},{"line_number":423,"context_line":"            node_info \u003d (\u0027node %s\u0027) % node.uuid"}],"source_content_type":"text/x-python","patch_set":68,"id":"7f96bb07_830c6e94","line":420,"in_reply_to":"7f96bb07_4ffc5d3d","updated":"2018-01-18 11:21:16.000000000","message":"Done as part of Agent rescue patch [1] as this method gets updated there as well.\n[1] https://review.openstack.org/#/c/400437","commit_id":"94909699c8350fdde6a5a18edf23f0afa9d5d9d2"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"201d9d2f11e7f70c36b0c4223f58f1f4d28884ec","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        node.save()"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"def _spawn_error_handler(e, node, state):"},{"line_number":436,"context_line":"    \"\"\"Handle spawning error for node.\"\"\""},{"line_number":437,"context_line":"    if isinstance(e, exception.NoFreeConductorWorker):"},{"line_number":438,"context_line":"        node.last_error \u003d (_(\"No free conductor workers available\"))"}],"source_content_type":"text/x-python","patch_set":68,"id":"7f96bb07_cf12ad62","line":435,"updated":"2018-01-17 17:31:20.000000000","message":"nit s/state/operation/","commit_id":"94909699c8350fdde6a5a18edf23f0afa9d5d9d2"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"8456b0be758554cae217f79ef662fa79c763abf4","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        node.save()"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"def _spawn_error_handler(e, node, state):"},{"line_number":436,"context_line":"    \"\"\"Handle spawning error for node.\"\"\""},{"line_number":437,"context_line":"    if isinstance(e, exception.NoFreeConductorWorker):"},{"line_number":438,"context_line":"        node.last_error \u003d (_(\"No free conductor workers available\"))"}],"source_content_type":"text/x-python","patch_set":68,"id":"7f96bb07_e319b2d6","line":435,"in_reply_to":"7f96bb07_cf12ad62","updated":"2018-01-18 11:21:16.000000000","message":"Done as part of Agent rescue patch \n[1] https://review.openstack.org/#/c/400437","commit_id":"94909699c8350fdde6a5a18edf23f0afa9d5d9d2"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"201d9d2f11e7f70c36b0c4223f58f1f4d28884ec","unresolved":false,"context_lines":[{"line_number":433,"context_line":""},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"def _spawn_error_handler(e, node, state):"},{"line_number":436,"context_line":"    \"\"\"Handle spawning error for node.\"\"\""},{"line_number":437,"context_line":"    if isinstance(e, exception.NoFreeConductorWorker):"},{"line_number":438,"context_line":"        node.last_error \u003d (_(\"No free conductor workers available\"))"},{"line_number":439,"context_line":"        node.save()"}],"source_content_type":"text/x-python","patch_set":68,"id":"7f96bb07_1a02150b","line":436,"updated":"2018-01-17 17:31:20.000000000","message":"How about\n\nHandle error while trying to spawn a process to perform an operation on a node.","commit_id":"94909699c8350fdde6a5a18edf23f0afa9d5d9d2"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"8456b0be758554cae217f79ef662fa79c763abf4","unresolved":false,"context_lines":[{"line_number":433,"context_line":""},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"def _spawn_error_handler(e, node, state):"},{"line_number":436,"context_line":"    \"\"\"Handle spawning error for node.\"\"\""},{"line_number":437,"context_line":"    if isinstance(e, exception.NoFreeConductorWorker):"},{"line_number":438,"context_line":"        node.last_error \u003d (_(\"No free conductor workers available\"))"},{"line_number":439,"context_line":"        node.save()"}],"source_content_type":"text/x-python","patch_set":68,"id":"7f96bb07_c316f6a8","line":436,"in_reply_to":"7f96bb07_1a02150b","updated":"2018-01-18 11:21:16.000000000","message":"Done as part of Agent rescue patch https://review.openstack.org/#/c/400437","commit_id":"94909699c8350fdde6a5a18edf23f0afa9d5d9d2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d21f8de1d00287061868123f4c5494dc7f52ba1f","unresolved":false,"context_lines":[{"line_number":407,"context_line":"    node \u003d task.node"},{"line_number":408,"context_line":"    msg \u003d _(\u0027Timeout reached while waiting for rescue ramdisk callback \u0027"},{"line_number":409,"context_line":"            \u0027for node\u0027)"},{"line_number":410,"context_line":"    errmsg \u003d msg + \u0027 %(node)s\u0027"},{"line_number":411,"context_line":"    LOG.error(errmsg, {\u0027node\u0027: node.uuid})"},{"line_number":412,"context_line":"    try:"},{"line_number":413,"context_line":"        node_power_action(task, states.POWER_OFF)"}],"source_content_type":"text/x-python","patch_set":71,"id":"7f96bb07_e11b67c7","line":410,"updated":"2018-01-23 10:41:30.000000000","message":"thi is not localization-friendly, not all languages may have %(node)s in the end. I\u0027d rather have two messages: one localized for last_error, one with %(node)s for logging.","commit_id":"a9bc2e6ddf81d7bb22ddeb32f57d2c7bf368d6bd"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"7f7f53145d4409f87277264124bcf37865ed588e","unresolved":false,"context_lines":[{"line_number":407,"context_line":"    node \u003d task.node"},{"line_number":408,"context_line":"    msg \u003d _(\u0027Timeout reached while waiting for rescue ramdisk callback \u0027"},{"line_number":409,"context_line":"            \u0027for node\u0027)"},{"line_number":410,"context_line":"    errmsg \u003d msg + \u0027 %(node)s\u0027"},{"line_number":411,"context_line":"    LOG.error(errmsg, {\u0027node\u0027: node.uuid})"},{"line_number":412,"context_line":"    try:"},{"line_number":413,"context_line":"        node_power_action(task, states.POWER_OFF)"}],"source_content_type":"text/x-python","patch_set":71,"id":"7f96bb07_5eda18e9","line":410,"in_reply_to":"7f96bb07_e11b67c7","updated":"2018-01-24 06:39:26.000000000","message":"Done","commit_id":"a9bc2e6ddf81d7bb22ddeb32f57d2c7bf368d6bd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d21f8de1d00287061868123f4c5494dc7f52ba1f","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        node_power_action(task, states.POWER_OFF)"},{"line_number":414,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":415,"context_line":"        node.last_error \u003d msg"},{"line_number":416,"context_line":"        node.save()"},{"line_number":417,"context_line":"    except Exception as e:"},{"line_number":418,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":419,"context_line":"            error_msg \u003d _(\u0027Cleanup failed for %(node_info)s after rescue \u0027"}],"source_content_type":"text/x-python","patch_set":71,"id":"7f96bb07_817863f8","line":416,"updated":"2018-01-23 10:41:30.000000000","message":"maybe\n\n except IronicException\n  ...\n except Exception as e:\n  ...\n finally:\n  node.save()","commit_id":"a9bc2e6ddf81d7bb22ddeb32f57d2c7bf368d6bd"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"7f7f53145d4409f87277264124bcf37865ed588e","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        node_power_action(task, states.POWER_OFF)"},{"line_number":414,"context_line":"        task.driver.rescue.clean_up(task)"},{"line_number":415,"context_line":"        node.last_error \u003d msg"},{"line_number":416,"context_line":"        node.save()"},{"line_number":417,"context_line":"    except Exception as e:"},{"line_number":418,"context_line":"        if isinstance(e, exception.IronicException):"},{"line_number":419,"context_line":"            error_msg \u003d _(\u0027Cleanup failed for %(node_info)s after rescue \u0027"}],"source_content_type":"text/x-python","patch_set":71,"id":"7f96bb07_7ed594b6","line":416,"in_reply_to":"7f96bb07_817863f8","updated":"2018-01-24 06:39:26.000000000","message":"Done","commit_id":"a9bc2e6ddf81d7bb22ddeb32f57d2c7bf368d6bd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d21f8de1d00287061868123f4c5494dc7f52ba1f","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            error_msg \u003d _(\u0027Cleanup failed for %(node_info)s after rescue \u0027"},{"line_number":420,"context_line":"                          \u0027timeout: %(error)s\u0027)"},{"line_number":421,"context_line":"            node_info \u003d (\u0027node\u0027)"},{"line_number":422,"context_line":"            node.last_error \u003d error_msg % {\u0027node_info\u0027: node_info, \u0027error\u0027: e}"},{"line_number":423,"context_line":"            node_info \u003d (\u0027node %s\u0027) % node.uuid"},{"line_number":424,"context_line":"            LOG.error(error_msg, {\u0027node_info\u0027: node_info, \u0027error\u0027: e})"},{"line_number":425,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":71,"id":"7f96bb07_a17b1ff2","line":422,"updated":"2018-01-23 10:41:30.000000000","message":"ditto about localization: when translating you will end up with English word \"node\" in the middle of non-English text. I\u0027d probably just have two different error messages.","commit_id":"a9bc2e6ddf81d7bb22ddeb32f57d2c7bf368d6bd"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"7f7f53145d4409f87277264124bcf37865ed588e","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            error_msg \u003d _(\u0027Cleanup failed for %(node_info)s after rescue \u0027"},{"line_number":420,"context_line":"                          \u0027timeout: %(error)s\u0027)"},{"line_number":421,"context_line":"            node_info \u003d (\u0027node\u0027)"},{"line_number":422,"context_line":"            node.last_error \u003d error_msg % {\u0027node_info\u0027: node_info, \u0027error\u0027: e}"},{"line_number":423,"context_line":"            node_info \u003d (\u0027node %s\u0027) % node.uuid"},{"line_number":424,"context_line":"            LOG.error(error_msg, {\u0027node_info\u0027: node_info, \u0027error\u0027: e})"},{"line_number":425,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":71,"id":"7f96bb07_1ee490ab","line":422,"in_reply_to":"7f96bb07_a17b1ff2","updated":"2018-01-24 06:39:26.000000000","message":"Done","commit_id":"a9bc2e6ddf81d7bb22ddeb32f57d2c7bf368d6bd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d21f8de1d00287061868123f4c5494dc7f52ba1f","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        else:"},{"line_number":426,"context_line":"            node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"},{"line_number":427,"context_line":"                                \u0027exception was encountered while aborting. \u0027"},{"line_number":428,"context_line":"                                \u0027More info may be found in the log file.\u0027)"},{"line_number":429,"context_line":"            LOG.exception(\u0027Rescue timed out for node %(node)s, an exception \u0027"},{"line_number":430,"context_line":"                          \u0027was encountered while aborting. Error: %(err)s\u0027,"},{"line_number":431,"context_line":"                          {\u0027node\u0027: node.uuid, \u0027err\u0027: e})"}],"source_content_type":"text/x-python","patch_set":71,"id":"7f96bb07_41825bca","line":428,"updated":"2018-01-23 10:41:30.000000000","message":"nit: users don\u0027t have access to a log file...","commit_id":"a9bc2e6ddf81d7bb22ddeb32f57d2c7bf368d6bd"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"7f7f53145d4409f87277264124bcf37865ed588e","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        else:"},{"line_number":426,"context_line":"            node.last_error \u003d _(\u0027Rescue timed out, but an unhandled \u0027"},{"line_number":427,"context_line":"                                \u0027exception was encountered while aborting. \u0027"},{"line_number":428,"context_line":"                                \u0027More info may be found in the log file.\u0027)"},{"line_number":429,"context_line":"            LOG.exception(\u0027Rescue timed out for node %(node)s, an exception \u0027"},{"line_number":430,"context_line":"                          \u0027was encountered while aborting. Error: %(err)s\u0027,"},{"line_number":431,"context_line":"                          {\u0027node\u0027: node.uuid, \u0027err\u0027: e})"}],"source_content_type":"text/x-python","patch_set":71,"id":"7f96bb07_3edf0cd7","line":428,"in_reply_to":"7f96bb07_41825bca","updated":"2018-01-24 06:39:26.000000000","message":"Done","commit_id":"a9bc2e6ddf81d7bb22ddeb32f57d2c7bf368d6bd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d21f8de1d00287061868123f4c5494dc7f52ba1f","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                                \u0027exception was encountered while aborting. \u0027"},{"line_number":428,"context_line":"                                \u0027More info may be found in the log file.\u0027)"},{"line_number":429,"context_line":"            LOG.exception(\u0027Rescue timed out for node %(node)s, an exception \u0027"},{"line_number":430,"context_line":"                          \u0027was encountered while aborting. Error: %(err)s\u0027,"},{"line_number":431,"context_line":"                          {\u0027node\u0027: node.uuid, \u0027err\u0027: e})"},{"line_number":432,"context_line":"        node.save()"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"7f96bb07_618517cf","line":430,"updated":"2018-01-23 10:41:30.000000000","message":"logging the error message is redundant, LOG.exception will do it for you","commit_id":"a9bc2e6ddf81d7bb22ddeb32f57d2c7bf368d6bd"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"7f7f53145d4409f87277264124bcf37865ed588e","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                                \u0027exception was encountered while aborting. \u0027"},{"line_number":428,"context_line":"                                \u0027More info may be found in the log file.\u0027)"},{"line_number":429,"context_line":"            LOG.exception(\u0027Rescue timed out for node %(node)s, an exception \u0027"},{"line_number":430,"context_line":"                          \u0027was encountered while aborting. Error: %(err)s\u0027,"},{"line_number":431,"context_line":"                          {\u0027node\u0027: node.uuid, \u0027err\u0027: e})"},{"line_number":432,"context_line":"        node.save()"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"7f96bb07_fef2046f","line":430,"in_reply_to":"7f96bb07_618517cf","updated":"2018-01-24 06:39:26.000000000","message":"Done","commit_id":"a9bc2e6ddf81d7bb22ddeb32f57d2c7bf368d6bd"}],"ironic/conf/conductor.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"a16fee6fcaf6ae82bda36310734ea997b8897e26","unresolved":false,"context_lines":[{"line_number":48,"context_line":"               help\u003d_(\u0027Interval between checks of provision timeouts, \u0027"},{"line_number":49,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027check_rescue_state_interval\u0027,"},{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               help\u003d_(\u0027Interval between checks of rescue timeouts, \u0027"},{"line_number":53,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":54,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_66861667","line":51,"updated":"2017-01-10 00:28:08.000000000","message":"min\u003d0 or some other value to prevent negative values.","commit_id":"114a360587bd83d2fd544d15059fecc748aa9005"},{"author":{"_account_id":11642,"name":"Jesse J. Cook","email":"jesse.cook@rackspace.com","username":"crashenx"},"change_message_id":"33fb8028a966d0f90d13a38a3ba6842f10011ec4","unresolved":false,"context_lines":[{"line_number":48,"context_line":"               help\u003d_(\u0027Interval between checks of provision timeouts, \u0027"},{"line_number":49,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027check_rescue_state_interval\u0027,"},{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               help\u003d_(\u0027Interval between checks of rescue timeouts, \u0027"},{"line_number":53,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":54,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_1d0c9793","line":51,"in_reply_to":"ba5201f7_66861667","updated":"2017-01-10 15:16:51.000000000","message":"Done","commit_id":"114a360587bd83d2fd544d15059fecc748aa9005"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"a16fee6fcaf6ae82bda36310734ea997b8897e26","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                      \u0027the node will be put in the \"clean failed\" provision \u0027"},{"line_number":137,"context_line":"                      \u0027state. Set to 0 to disable timeout.\u0027)),"},{"line_number":138,"context_line":"    cfg.IntOpt(\u0027rescue_callback_timeout\u0027,"},{"line_number":139,"context_line":"               default\u003d1800,"},{"line_number":140,"context_line":"               help\u003d_(\u0027Timeout (seconds) to wait for a callback from the \u0027"},{"line_number":141,"context_line":"                      \u0027rescue ramdisk. If the timeout is reached the node \u0027"},{"line_number":142,"context_line":"                      \u0027will be put in the \"rescue failed\" provision state. \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_4681124d","line":139,"updated":"2017-01-10 00:28:08.000000000","message":"default\u003d1800, min\u003d0,","commit_id":"114a360587bd83d2fd544d15059fecc748aa9005"},{"author":{"_account_id":11642,"name":"Jesse J. Cook","email":"jesse.cook@rackspace.com","username":"crashenx"},"change_message_id":"33fb8028a966d0f90d13a38a3ba6842f10011ec4","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                      \u0027the node will be put in the \"clean failed\" provision \u0027"},{"line_number":137,"context_line":"                      \u0027state. Set to 0 to disable timeout.\u0027)),"},{"line_number":138,"context_line":"    cfg.IntOpt(\u0027rescue_callback_timeout\u0027,"},{"line_number":139,"context_line":"               default\u003d1800,"},{"line_number":140,"context_line":"               help\u003d_(\u0027Timeout (seconds) to wait for a callback from the \u0027"},{"line_number":141,"context_line":"                      \u0027rescue ramdisk. If the timeout is reached the node \u0027"},{"line_number":142,"context_line":"                      \u0027will be put in the \"rescue failed\" provision state. \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_5d261f17","line":139,"in_reply_to":"ba5201f7_4681124d","updated":"2017-01-10 15:16:51.000000000","message":"Done","commit_id":"114a360587bd83d2fd544d15059fecc748aa9005"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"726f10dd1f5d0eb30b65c9737249539b054dda1e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027check_rescue_state_interval\u0027,"},{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               min\u003d0,"},{"line_number":53,"context_line":"               help\u003d_(\u0027Interval between checks of rescue timeouts, \u0027"},{"line_number":54,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a30ddce_b662ffd6","line":52,"updated":"2017-03-07 12:25:29.000000000","message":"Not sure that 0 is correct value for futurist.","commit_id":"dfd3e934a9dd85d58591742a81350e2474cb3963"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"9cc5c8ec6984694f1d0cbcf913d9322c9bb94055","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027check_rescue_state_interval\u0027,"},{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               min\u003d0,"},{"line_number":53,"context_line":"               help\u003d_(\u0027Interval between checks of rescue timeouts, \u0027"},{"line_number":54,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a30ddce_ef55701d","line":52,"in_reply_to":"9a30ddce_b662ffd6","updated":"2017-03-07 16:27:54.000000000","message":"Hmm. There are no restrictions on check_provision_state_interval, as you see above.\n\nMaybe I should fix both in a follow-up, after checking that \u003c\u003d 0 does not work?","commit_id":"dfd3e934a9dd85d58591742a81350e2474cb3963"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"9bfaf6e48992d9a0d97e3066ffe6407731f9f944","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027check_rescue_state_interval\u0027,"},{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               min\u003d0,"},{"line_number":53,"context_line":"               help\u003d_(\u0027Interval between checks of rescue timeouts, \u0027"},{"line_number":54,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_99f95083","line":52,"range":{"start_line":52,"start_character":0,"end_line":52,"end_character":21},"updated":"2017-03-21 05:21:13.000000000","message":"Does min\u003d0 disable the checks? If so, it\u0027d be nice to state it.","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6a60a22c989f89bab0eea433854c0ee0e0e22225","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027check_rescue_state_interval\u0027,"},{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               min\u003d0,"},{"line_number":53,"context_line":"               help\u003d_(\u0027Interval between checks of rescue timeouts, \u0027"},{"line_number":54,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_d8f642f8","line":52,"range":{"start_line":52,"start_character":0,"end_line":52,"end_character":21},"in_reply_to":"1a1ced50_99f95083","updated":"2017-03-21 19:16:35.000000000","message":"Actually, you\u0027ll get an error if you try to set spacing to 0: https://github.com/openstack/futurist/blob/68557fec45d095e859d4829c526392cf9dff796b/futurist/periodics.py#L154\n\nYou disable the checks by setting rescue_callback_timeout\u003d0.\n\nI\u0027ll change the min to 1.\n\nGood catch!","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":19593,"name":"Anup Navare","email":"anup.d.navare@intel.com","username":"anup"},"change_message_id":"b00a62589e0981fb053a86f4c98d7f4c733feabb","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                      \u0027state. Set to 0 to disable timeout.\u0027)),"},{"line_number":150,"context_line":"    cfg.IntOpt(\u0027rescue_callback_timeout\u0027,"},{"line_number":151,"context_line":"               default\u003d1800,"},{"line_number":152,"context_line":"               min\u003d0,"},{"line_number":153,"context_line":"               help\u003d_(\u0027Timeout (seconds) to wait for a callback from the \u0027"},{"line_number":154,"context_line":"                      \u0027rescue ramdisk. If the timeout is reached the node \u0027"},{"line_number":155,"context_line":"                      \u0027will be put in the \"rescue failed\" provision state. \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_2a83d205","line":152,"range":{"start_line":152,"start_character":15,"end_line":152,"end_character":21},"updated":"2017-03-20 00:49:31.000000000","message":"Shouldn\u0027t this be more? Imagine a case where user put \u0027rescue_callback_timeout\u003d1\u0027 then rescue ramdisk won\u0027t get enough time for getting node info and sending a heartbeat.","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6a60a22c989f89bab0eea433854c0ee0e0e22225","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                      \u0027state. Set to 0 to disable timeout.\u0027)),"},{"line_number":150,"context_line":"    cfg.IntOpt(\u0027rescue_callback_timeout\u0027,"},{"line_number":151,"context_line":"               default\u003d1800,"},{"line_number":152,"context_line":"               min\u003d0,"},{"line_number":153,"context_line":"               help\u003d_(\u0027Timeout (seconds) to wait for a callback from the \u0027"},{"line_number":154,"context_line":"                      \u0027rescue ramdisk. If the timeout is reached the node \u0027"},{"line_number":155,"context_line":"                      \u0027will be put in the \"rescue failed\" provision state. \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_b86c26d1","line":152,"range":{"start_line":152,"start_character":15,"end_line":152,"end_character":21},"in_reply_to":"1a1ced50_19de4011","updated":"2017-03-21 19:16:35.000000000","message":"Solio\u0027s right. 0 is just used to disable the feature.","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"9bfaf6e48992d9a0d97e3066ffe6407731f9f944","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                      \u0027state. Set to 0 to disable timeout.\u0027)),"},{"line_number":150,"context_line":"    cfg.IntOpt(\u0027rescue_callback_timeout\u0027,"},{"line_number":151,"context_line":"               default\u003d1800,"},{"line_number":152,"context_line":"               min\u003d0,"},{"line_number":153,"context_line":"               help\u003d_(\u0027Timeout (seconds) to wait for a callback from the \u0027"},{"line_number":154,"context_line":"                      \u0027rescue ramdisk. If the timeout is reached the node \u0027"},{"line_number":155,"context_line":"                      \u0027will be put in the \"rescue failed\" provision state. \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_19de4011","line":152,"range":{"start_line":152,"start_character":15,"end_line":152,"end_character":21},"in_reply_to":"1a1ced50_2a83d205","updated":"2017-03-21 05:21:13.000000000","message":"Maybe, but in general 0 is used to disable the feature. IMHO, 0 is OK here.","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":19593,"name":"Anup Navare","email":"anup.d.navare@intel.com","username":"anup"},"change_message_id":"1bf9bd06227e4bf15cb7260c4006f45813b9de6e","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                      \u0027state. Set to 0 to disable timeout.\u0027)),"},{"line_number":150,"context_line":"    cfg.IntOpt(\u0027rescue_callback_timeout\u0027,"},{"line_number":151,"context_line":"               default\u003d1800,"},{"line_number":152,"context_line":"               min\u003d0,"},{"line_number":153,"context_line":"               help\u003d_(\u0027Timeout (seconds) to wait for a callback from the \u0027"},{"line_number":154,"context_line":"                      \u0027rescue ramdisk. If the timeout is reached the node \u0027"},{"line_number":155,"context_line":"                      \u0027will be put in the \"rescue failed\" provision state. \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_f90ae824","line":152,"range":{"start_line":152,"start_character":15,"end_line":152,"end_character":21},"in_reply_to":"1a1ced50_b86c26d1","updated":"2017-03-22 21:11:04.000000000","message":"I get that. My only concern is what if someone puts value as 3 or 2 then wouldn\u0027t that be too short? do you think there should be some check?","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"eb21c9da35505d3e6a566990231497e8b290868b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027check_rescue_state_interval\u0027,"},{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               min\u003d1,"},{"line_number":53,"context_line":"               help\u003d_(\u0027Interval between checks of rescue timeouts, \u0027"},{"line_number":54,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_ccd4bf21","line":52,"updated":"2017-03-21 21:10:30.000000000","message":"sample config shows 0?","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"edbdd9fce132ba714cd953a2c07715d2b28e279c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027check_rescue_state_interval\u0027,"},{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               min\u003d1,"},{"line_number":53,"context_line":"               help\u003d_(\u0027Interval between checks of rescue timeouts, \u0027"},{"line_number":54,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_b30fb635","line":52,"in_reply_to":"1a1ced50_8c0e3d39","updated":"2017-03-22 17:57:27.000000000","message":"Done","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"01d7bdecea82786fe8c2e83fc3ddbb686b83ddc2","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027check_rescue_state_interval\u0027,"},{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               min\u003d1,"},{"line_number":53,"context_line":"               help\u003d_(\u0027Interval between checks of rescue timeouts, \u0027"},{"line_number":54,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_8c0e3d39","line":52,"in_reply_to":"1a1ced50_ccd4bf21","updated":"2017-03-22 04:38:25.000000000","message":"+1 Sample config needs update","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"eb21c9da35505d3e6a566990231497e8b290868b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    cfg.IntOpt(\u0027check_rescue_state_interval\u0027,"},{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               min\u003d1,"},{"line_number":53,"context_line":"               help\u003d_(\u0027Interval between checks of rescue timeouts, \u0027"},{"line_number":54,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"},{"line_number":56,"context_line":"               default\u003d1800,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_eca7bbba","line":53,"updated":"2017-03-21 21:10:30.000000000","message":"I don\u0027t find this description useful - shouldn\u0027t it be the interval between checks of rescue callback?\nI mean, there should be only 1 timeout, and this interval is for checking for the result before the timeout happens, right?","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"edbdd9fce132ba714cd953a2c07715d2b28e279c","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    cfg.IntOpt(\u0027check_rescue_state_interval\u0027,"},{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               min\u003d1,"},{"line_number":53,"context_line":"               help\u003d_(\u0027Interval between checks of rescue timeouts, \u0027"},{"line_number":54,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"},{"line_number":56,"context_line":"               default\u003d1800,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_0d2f8b88","line":53,"in_reply_to":"1a1ced50_0c4c0d9d","updated":"2017-03-22 17:57:27.000000000","message":"Yeah, it\u0027s checking if the rescue callback (RESCUEWAIT) has timed out. I copied most of the string from L48, which probably could be clearer is well.\n\nI like Solio\u0027s suggestion. Joanna, please let me know if the next patch set makes sense.","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"01d7bdecea82786fe8c2e83fc3ddbb686b83ddc2","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    cfg.IntOpt(\u0027check_rescue_state_interval\u0027,"},{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               min\u003d1,"},{"line_number":53,"context_line":"               help\u003d_(\u0027Interval between checks of rescue timeouts, \u0027"},{"line_number":54,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"},{"line_number":56,"context_line":"               default\u003d1800,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_0c4c0d9d","line":53,"in_reply_to":"1a1ced50_eca7bbba","updated":"2017-03-22 04:38:25.000000000","message":"At first it wasn\u0027t clear, but then it makes sense.\n\nRight, this is how often we check if a rescue callback timeout has occurred. Maybe (not) this is better:\nInterval between checks of rescue callback timeouts","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"6fcbecf3259ce5993a77c4b394658185ecd814d7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    cfg.IntOpt(\u0027check_rescue_state_interval\u0027,"},{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               min\u003d1,"},{"line_number":53,"context_line":"               help\u003d_(\u0027Interval between checks of rescue callback timeouts, \u0027"},{"line_number":54,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"},{"line_number":56,"context_line":"               default\u003d1800,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a1ced50_39a80077","line":53,"updated":"2017-03-22 20:29:29.000000000","message":"looks good to me :)","commit_id":"0582333e75339f43cff3f67948f1e9ebe8c23d5a"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"69e68aa862a093dc62a9d7bdfd6c0f1cf0451d8e","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    cfg.IntOpt(\u0027check_rescue_state_interval\u0027,"},{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               min\u003d1,"},{"line_number":53,"context_line":"               help\u003d_(\u0027Interval between checks of rescue callback timeouts, \u0027"},{"line_number":54,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"},{"line_number":56,"context_line":"               default\u003d1800,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ffe62b97_07bc2ab9","line":53,"in_reply_to":"1a1ced50_39a80077","updated":"2017-03-27 15:25:52.000000000","message":"\\o/","commit_id":"0582333e75339f43cff3f67948f1e9ebe8c23d5a"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"45d4bec36bc71fda2147fd8f6c1fb7d564379317","unresolved":false,"context_lines":[{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               min\u003d1,"},{"line_number":53,"context_line":"               help\u003d_(\u0027Interval between checks of rescue callback timeouts, \u0027"},{"line_number":54,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"},{"line_number":56,"context_line":"               default\u003d1800,"},{"line_number":57,"context_line":"               help\u003d_(\u0027Timeout (seconds) to wait for a callback from \u0027"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff0f0b1f_623ab134","line":54,"range":{"start_line":54,"start_character":23,"end_line":54,"end_character":34},"updated":"2017-05-22 09:39:39.000000000","message":"Let\u0027s enclose this is brackets () to be consistent and visible.","commit_id":"11407fb8200f65d00c8b718d5407ee1e9c83eae2"},{"author":{"_account_id":15074,"name":"Aparna","email":"aparnavtce@gmail.com","username":"Aparna"},"change_message_id":"7d27ff1b46d33015eef5fd48968b23fdf6c8be87","unresolved":false,"context_lines":[{"line_number":51,"context_line":"               default\u003d60,"},{"line_number":52,"context_line":"               min\u003d1,"},{"line_number":53,"context_line":"               help\u003d_(\u0027Interval between checks of rescue callback timeouts, \u0027"},{"line_number":54,"context_line":"                      \u0027in seconds.\u0027)),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027deploy_callback_timeout\u0027,"},{"line_number":56,"context_line":"               default\u003d1800,"},{"line_number":57,"context_line":"               help\u003d_(\u0027Timeout (seconds) to wait for a callback from \u0027"}],"source_content_type":"text/x-python","patch_set":26,"id":"df140735_d61439eb","line":54,"range":{"start_line":54,"start_character":23,"end_line":54,"end_character":34},"in_reply_to":"ff0f0b1f_623ab134","updated":"2017-06-06 03:59:51.000000000","message":"Done","commit_id":"11407fb8200f65d00c8b718d5407ee1e9c83eae2"}],"ironic/drivers/base.py":[{"author":{"_account_id":19593,"name":"Anup Navare","email":"anup.d.navare@intel.com","username":"anup"},"change_message_id":"493b27f79a96c09f53befe5112429ec5bdbcf811","unresolved":false,"context_lines":[{"line_number":578,"context_line":"    def clean_up(self, task):"},{"line_number":579,"context_line":"        \"\"\"Clean up the node after a timeout during RESCUEWAIT."},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"           This is only useful for nodes that rescue asynchronously (nodes that"},{"line_number":582,"context_line":"           use the RESCUEWAIT state)."},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        :param task: a TaskManager instance containing the node to act on."}],"source_content_type":"text/x-python","patch_set":16,"id":"1a1ced50_8caff47b","line":581,"range":{"start_line":581,"start_character":8,"end_line":581,"end_character":11},"updated":"2017-03-22 21:09:56.000000000","message":"minor nit: This line is not aligned.","commit_id":"0582333e75339f43cff3f67948f1e9ebe8c23d5a"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"69e68aa862a093dc62a9d7bdfd6c0f1cf0451d8e","unresolved":false,"context_lines":[{"line_number":578,"context_line":"    def clean_up(self, task):"},{"line_number":579,"context_line":"        \"\"\"Clean up the node after a timeout during RESCUEWAIT."},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"           This is only useful for nodes that rescue asynchronously (nodes that"},{"line_number":582,"context_line":"           use the RESCUEWAIT state)."},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        :param task: a TaskManager instance containing the node to act on."}],"source_content_type":"text/x-python","patch_set":16,"id":"ffe62b97_87f5da85","line":581,"range":{"start_line":581,"start_character":8,"end_line":581,"end_character":11},"in_reply_to":"1a1ced50_8caff47b","updated":"2017-03-27 15:25:52.000000000","message":"Done","commit_id":"0582333e75339f43cff3f67948f1e9ebe8c23d5a"},{"author":{"_account_id":19593,"name":"Anup Navare","email":"anup.d.navare@intel.com","username":"anup"},"change_message_id":"493b27f79a96c09f53befe5112429ec5bdbcf811","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        \"\"\"Clean up the node after a timeout during RESCUEWAIT."},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"           This is only useful for nodes that rescue asynchronously (nodes that"},{"line_number":582,"context_line":"           use the RESCUEWAIT state)."},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":585,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"1a1ced50_4ce09ccd","line":582,"range":{"start_line":582,"start_character":8,"end_line":582,"end_character":11},"updated":"2017-03-22 21:09:56.000000000","message":"ditto","commit_id":"0582333e75339f43cff3f67948f1e9ebe8c23d5a"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"69e68aa862a093dc62a9d7bdfd6c0f1cf0451d8e","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        \"\"\"Clean up the node after a timeout during RESCUEWAIT."},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"           This is only useful for nodes that rescue asynchronously (nodes that"},{"line_number":582,"context_line":"           use the RESCUEWAIT state)."},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":585,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"ffe62b97_67f41687","line":582,"range":{"start_line":582,"start_character":8,"end_line":582,"end_character":11},"in_reply_to":"1a1ced50_4ce09ccd","updated":"2017-03-27 15:25:52.000000000","message":"Done","commit_id":"0582333e75339f43cff3f67948f1e9ebe8c23d5a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"21763c5459aef930f34b8af6eb06d356a499c33d","unresolved":false,"context_lines":[{"line_number":568,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":569,"context_line":"        \"\"\""},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    def clean_up(self, task):"},{"line_number":572,"context_line":"        \"\"\"Clean up the node after a timeout during RESCUEWAIT."},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"        This is only useful for nodes that rescue asynchronously (nodes that"}],"source_content_type":"text/x-python","patch_set":37,"id":"7f287b81_976939f9","line":571,"updated":"2017-09-08 10:36:10.000000000","message":"Please update \"Driver API impact\" in rescue spec.","commit_id":"676ad460d1839ada84e4ec0e506419f960442e88"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3246ea6ba070a2630b6a650efd94d41b2423ded5","unresolved":false,"context_lines":[{"line_number":568,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":569,"context_line":"        \"\"\""},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    def clean_up(self, task):"},{"line_number":572,"context_line":"        \"\"\"Clean up the node after a timeout during RESCUEWAIT."},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"        This is only useful for nodes that rescue asynchronously (nodes that"}],"source_content_type":"text/x-python","patch_set":37,"id":"5f2577a7_5476b0a6","line":571,"in_reply_to":"7f287b81_976939f9","updated":"2017-09-12 05:56:17.000000000","message":"Ok. Updated spec is https://review.openstack.org/#/c/502891/","commit_id":"676ad460d1839ada84e4ec0e506419f960442e88"}],"ironic/tests/unit/conductor/test_manager.py":[{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6f42a3206596037963984ab62b4fae3cd2593b9f","unresolved":false,"context_lines":[{"line_number":1362,"context_line":"    def test__check_cleanwait_timeouts_manual_clean(self):"},{"line_number":1363,"context_line":"        self._check_cleanwait_timeouts(manual\u003dTrue)"},{"line_number":1364,"context_line":""},{"line_number":1365,"context_line":"    def _check_rescuewait_timeouts(self, manual\u003dFalse):"},{"line_number":1366,"context_line":"        self._start_service()"},{"line_number":1367,"context_line":"        CONF.set_override(\u0027rescue_callback_timeout\u0027, 1, group\u003d\u0027conductor\u0027)"},{"line_number":1368,"context_line":"        tgt_prov_state \u003d states.RESCUE"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_119311fb","line":1365,"updated":"2017-01-06 18:12:13.000000000","message":"This won\u0027t actually be run. The method name has to be prefixed by test_ for the test runner to pick it up.\n\nAlso, it would be good to add a test for the case where there isn\u0027t a timeout","commit_id":"6a3207de06e1505bae26e2f71688aafc63897c55"},{"author":{"_account_id":11642,"name":"Jesse J. Cook","email":"jesse.cook@rackspace.com","username":"crashenx"},"change_message_id":"78127cfd0c5ccdb3190bd5edc5fb0679d5bc4c11","unresolved":false,"context_lines":[{"line_number":1362,"context_line":"    def test__check_cleanwait_timeouts_manual_clean(self):"},{"line_number":1363,"context_line":"        self._check_cleanwait_timeouts(manual\u003dTrue)"},{"line_number":1364,"context_line":""},{"line_number":1365,"context_line":"    def _check_rescuewait_timeouts(self, manual\u003dFalse):"},{"line_number":1366,"context_line":"        self._start_service()"},{"line_number":1367,"context_line":"        CONF.set_override(\u0027rescue_callback_timeout\u0027, 1, group\u003d\u0027conductor\u0027)"},{"line_number":1368,"context_line":"        tgt_prov_state \u003d states.RESCUE"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_eacf7653","line":1365,"in_reply_to":"ba5201f7_119311fb","updated":"2017-01-06 20:32:05.000000000","message":"Thanks.\n\nI don\u0027t know that a no timeout test is valuable here since that is the general case and should be a well-tested path by more broad rescue tests. I\u0027d argue that it will cost more in maintenance than the value it adds. If you feel strongly about it, reply, and I will add.","commit_id":"6a3207de06e1505bae26e2f71688aafc63897c55"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"a16fee6fcaf6ae82bda36310734ea997b8897e26","unresolved":false,"context_lines":[{"line_number":1420,"context_line":"    def test__check_cleanwait_timeouts_manual_clean(self):"},{"line_number":1421,"context_line":"        self._check_cleanwait_timeouts(manual\u003dTrue)"},{"line_number":1422,"context_line":""},{"line_number":1423,"context_line":"    def test_check_rescuewait_timeouts(self, manual\u003dFalse):"},{"line_number":1424,"context_line":"        self._start_service()"},{"line_number":1425,"context_line":"        CONF.set_override(\u0027rescue_callback_timeout\u0027, 1, group\u003d\u0027conductor\u0027)"},{"line_number":1426,"context_line":"        tgt_prov_state \u003d states.RESCUE"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_669ff6b4","line":1423,"range":{"start_line":1423,"start_character":45,"end_line":1423,"end_character":57},"updated":"2017-01-10 00:28:08.000000000","message":"How will this be ever used?\n\nIf it was a helper function I could understand its purpose. But here I don\u0027t understand.","commit_id":"114a360587bd83d2fd544d15059fecc748aa9005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"47be32d40152b64033d7497c1fa8ae1fbd552734","unresolved":false,"context_lines":[{"line_number":1420,"context_line":"    def test__check_cleanwait_timeouts_manual_clean(self):"},{"line_number":1421,"context_line":"        self._check_cleanwait_timeouts(manual\u003dTrue)"},{"line_number":1422,"context_line":""},{"line_number":1423,"context_line":"    def test_check_rescuewait_timeouts(self, manual\u003dFalse):"},{"line_number":1424,"context_line":"        self._start_service()"},{"line_number":1425,"context_line":"        CONF.set_override(\u0027rescue_callback_timeout\u0027, 1, group\u003d\u0027conductor\u0027)"},{"line_number":1426,"context_line":"        tgt_prov_state \u003d states.RESCUE"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_a8e6fae5","line":1423,"range":{"start_line":1423,"start_character":45,"end_line":1423,"end_character":57},"in_reply_to":"ba5201f7_669ff6b4","updated":"2017-01-10 10:34:44.000000000","message":"Probably it was just copy\u0026paste error from another function. I don\u0027t see the use of it for anything else other than cleaning.","commit_id":"114a360587bd83d2fd544d15059fecc748aa9005"},{"author":{"_account_id":11642,"name":"Jesse J. Cook","email":"jesse.cook@rackspace.com","username":"crashenx"},"change_message_id":"33fb8028a966d0f90d13a38a3ba6842f10011ec4","unresolved":false,"context_lines":[{"line_number":1420,"context_line":"    def test__check_cleanwait_timeouts_manual_clean(self):"},{"line_number":1421,"context_line":"        self._check_cleanwait_timeouts(manual\u003dTrue)"},{"line_number":1422,"context_line":""},{"line_number":1423,"context_line":"    def test_check_rescuewait_timeouts(self, manual\u003dFalse):"},{"line_number":1424,"context_line":"        self._start_service()"},{"line_number":1425,"context_line":"        CONF.set_override(\u0027rescue_callback_timeout\u0027, 1, group\u003d\u0027conductor\u0027)"},{"line_number":1426,"context_line":"        tgt_prov_state \u003d states.RESCUE"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_9d4967d3","line":1423,"range":{"start_line":1423,"start_character":45,"end_line":1423,"end_character":57},"in_reply_to":"ba5201f7_a8e6fae5","updated":"2017-01-10 15:16:51.000000000","message":"Done","commit_id":"114a360587bd83d2fd544d15059fecc748aa9005"},{"author":{"_account_id":19593,"name":"Anup Navare","email":"anup.d.navare@intel.com","username":"anup"},"change_message_id":"b00a62589e0981fb053a86f4c98d7f4c733feabb","unresolved":false,"context_lines":[{"line_number":1538,"context_line":"        node.refresh()"},{"line_number":1539,"context_line":"        self.assertEqual(states.RESCUEFAIL, node.provision_state)"},{"line_number":1540,"context_line":"        self.assertEqual(tgt_prov_state, node.target_provision_state)"},{"line_number":1541,"context_line":"        self.assertIsNotNone(node.last_error)"},{"line_number":1542,"context_line":""},{"line_number":1543,"context_line":"    def test_do_node_tear_down_invalid_state(self):"},{"line_number":1544,"context_line":"        self._start_service()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_eaba9ae0","line":1541,"range":{"start_line":1541,"start_character":8,"end_line":1541,"end_character":45},"updated":"2017-03-20 00:49:31.000000000","message":"Would be better to check the last_error message to know if exception was handled or not.","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6a60a22c989f89bab0eea433854c0ee0e0e22225","unresolved":false,"context_lines":[{"line_number":1538,"context_line":"        node.refresh()"},{"line_number":1539,"context_line":"        self.assertEqual(states.RESCUEFAIL, node.provision_state)"},{"line_number":1540,"context_line":"        self.assertEqual(tgt_prov_state, node.target_provision_state)"},{"line_number":1541,"context_line":"        self.assertIsNotNone(node.last_error)"},{"line_number":1542,"context_line":""},{"line_number":1543,"context_line":"    def test_do_node_tear_down_invalid_state(self):"},{"line_number":1544,"context_line":"        self._start_service()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_98192ada","line":1541,"range":{"start_line":1541,"start_character":8,"end_line":1541,"end_character":45},"in_reply_to":"1a1ced50_eaba9ae0","updated":"2017-03-21 19:16:35.000000000","message":"Done","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"}],"ironic/tests/unit/conductor/test_utils.py":[{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"9bfaf6e48992d9a0d97e3066ffe6407731f9f944","unresolved":false,"context_lines":[{"line_number":992,"context_line":"        self.assertFalse(self.node.save.called)"},{"line_number":993,"context_line":"        self.assertFalse(log_mock.warning.called)"},{"line_number":994,"context_line":""},{"line_number":995,"context_line":"    def test_cleanup_rescuewait_timeout(self):"},{"line_number":996,"context_line":"        conductor_utils.cleanup_rescuewait_timeout(self.task)"},{"line_number":997,"context_line":"        self.node.save.assert_called_once_with()"},{"line_number":998,"context_line":"        self.task.driver.rescue.clean_up.assert_called_once_with(self.task)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_39f21c70","line":995,"range":{"start_line":995,"start_character":0,"end_line":995,"end_character":46},"updated":"2017-03-21 05:21:13.000000000","message":"Need test case for exceptions as Shivanand suggested.\nIf the \u0027Timeout reached\u0027 in L999 gets translated (we\u0027re using _() in utils.py@324), would this work?","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6a60a22c989f89bab0eea433854c0ee0e0e22225","unresolved":false,"context_lines":[{"line_number":992,"context_line":"        self.assertFalse(self.node.save.called)"},{"line_number":993,"context_line":"        self.assertFalse(log_mock.warning.called)"},{"line_number":994,"context_line":""},{"line_number":995,"context_line":"    def test_cleanup_rescuewait_timeout(self):"},{"line_number":996,"context_line":"        conductor_utils.cleanup_rescuewait_timeout(self.task)"},{"line_number":997,"context_line":"        self.node.save.assert_called_once_with()"},{"line_number":998,"context_line":"        self.task.driver.rescue.clean_up.assert_called_once_with(self.task)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_787b8ef5","line":995,"range":{"start_line":995,"start_character":0,"end_line":995,"end_character":46},"in_reply_to":"1a1ced50_39f21c70","updated":"2017-03-21 19:16:35.000000000","message":"A lot of unit tests use this test strategy. Also, our gate runs in English. :)\n\nWill add exception test cases.","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"01d7bdecea82786fe8c2e83fc3ddbb686b83ddc2","unresolved":false,"context_lines":[{"line_number":992,"context_line":"        self.assertFalse(self.node.save.called)"},{"line_number":993,"context_line":"        self.assertFalse(log_mock.warning.called)"},{"line_number":994,"context_line":""},{"line_number":995,"context_line":"    def test_cleanup_rescuewait_timeout(self):"},{"line_number":996,"context_line":"        conductor_utils.cleanup_rescuewait_timeout(self.task)"},{"line_number":997,"context_line":"        self.node.save.assert_called_once_with()"},{"line_number":998,"context_line":"        self.task.driver.rescue.clean_up.assert_called_once_with(self.task)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_6f29f336","line":995,"range":{"start_line":995,"start_character":0,"end_line":995,"end_character":46},"updated":"2017-03-22 04:38:25.000000000","message":"This could also be tested:\n@mock.patch.object(conductor_utils, \u0027LOG\u0027)\nself.assertTrue(log_mock.error.called)","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"edbdd9fce132ba714cd953a2c07715d2b28e279c","unresolved":false,"context_lines":[{"line_number":992,"context_line":"        self.assertFalse(self.node.save.called)"},{"line_number":993,"context_line":"        self.assertFalse(log_mock.warning.called)"},{"line_number":994,"context_line":""},{"line_number":995,"context_line":"    def test_cleanup_rescuewait_timeout(self):"},{"line_number":996,"context_line":"        conductor_utils.cleanup_rescuewait_timeout(self.task)"},{"line_number":997,"context_line":"        self.node.save.assert_called_once_with()"},{"line_number":998,"context_line":"        self.task.driver.rescue.clean_up.assert_called_once_with(self.task)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a1ced50_8d5a9bf0","line":995,"range":{"start_line":995,"start_character":0,"end_line":995,"end_character":46},"in_reply_to":"1a1ced50_6f29f336","updated":"2017-03-22 17:57:27.000000000","message":"Done","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"7a694451e07687c345af226ba38a1c19d0988e4b","unresolved":false,"context_lines":[{"line_number":1273,"context_line":"        node_power_mock.assert_called_once_with(mock.ANY, states.POWER_OFF)"},{"line_number":1274,"context_line":"        self.node.save.assert_called_once_with()"},{"line_number":1275,"context_line":"        self.assertIn(\u0027Rescue timed out\u0027, self.node.last_error)"},{"line_number":1276,"context_line":"        self.assertTrue(log_mock.exception.called)"},{"line_number":1277,"context_line":""},{"line_number":1278,"context_line":""},{"line_number":1279,"context_line":"class ValidatePortPhysnetTestCase(db_base.DbTestCase):"}],"source_content_type":"text/x-python","patch_set":66,"id":"7f96bb07_08bbd271","line":1276,"updated":"2018-01-16 19:34:22.000000000","message":"I have a programming style comment to make. These three tests test the same method, with a few differences. From a reviewer point of view, it would make it a lot easier to review if the tests were written so that the differences are easy to see/review. For example, why wouldn\u0027t you mock the LOG in the 2nd test; something is logged there too. And why would the order of checks/asserts be different between the three unit tests? In the code, node_power_action() is called before driver.rescue.clean_up(). When reviewing, it\u0027d be easier for me to see the same order wrt checking that they were called.","commit_id":"d121485441f201fbaaa81bb4f8b50a4581348df3"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b8e22019e89455059f033dcbb432841686f9eccd","unresolved":false,"context_lines":[{"line_number":1273,"context_line":"        node_power_mock.assert_called_once_with(mock.ANY, states.POWER_OFF)"},{"line_number":1274,"context_line":"        self.node.save.assert_called_once_with()"},{"line_number":1275,"context_line":"        self.assertIn(\u0027Rescue timed out\u0027, self.node.last_error)"},{"line_number":1276,"context_line":"        self.assertTrue(log_mock.exception.called)"},{"line_number":1277,"context_line":""},{"line_number":1278,"context_line":""},{"line_number":1279,"context_line":"class ValidatePortPhysnetTestCase(db_base.DbTestCase):"}],"source_content_type":"text/x-python","patch_set":66,"id":"7f96bb07_ac95f234","line":1276,"in_reply_to":"7f96bb07_08bbd271","updated":"2018-01-17 16:14:07.000000000","message":"Done","commit_id":"d121485441f201fbaaa81bb4f8b50a4581348df3"}],"releasenotes/notes/add-rescuewait-timeout-fa0a22fb45ff257a.yaml":[{"author":{"_account_id":19593,"name":"Anup Navare","email":"anup.d.navare@intel.com","username":"anup"},"change_message_id":"b00a62589e0981fb053a86f4c98d7f4c733feabb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds new options ``[conductor]/check_rescue_state_interval`` and"},{"line_number":4,"context_line":"    ``rescue_callback_timeout`` to time out nodes stuck in the RESCUEWAIT"},{"line_number":5,"context_line":"    state."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"1a1ced50_2aacb29f","line":4,"range":{"start_line":4,"start_character":6,"end_line":4,"end_character":29},"updated":"2017-03-20 00:49:31.000000000","message":"nit: s/rescue_callback_timeout/[conductor]/rescue_callback_timeout","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6a60a22c989f89bab0eea433854c0ee0e0e22225","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds new options ``[conductor]/check_rescue_state_interval`` and"},{"line_number":4,"context_line":"    ``rescue_callback_timeout`` to time out nodes stuck in the RESCUEWAIT"},{"line_number":5,"context_line":"    state."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"1a1ced50_3dfbc3c2","line":4,"range":{"start_line":4,"start_character":6,"end_line":4,"end_character":29},"in_reply_to":"1a1ced50_2aacb29f","updated":"2017-03-21 19:16:35.000000000","message":"Done","commit_id":"d71ed0e9c8280d94336ffd5d68db846d8cb49cbc"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"c332d2bde1d2555a5ff4ba3e7e10c93a0359c1c2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds new options ``[conductor]/check_rescue_state_interval`` and"},{"line_number":4,"context_line":"    ``[conductor]/rescue_callback_timeout`` to time out nodes stuck in the"},{"line_number":5,"context_line":"    RESCUEWAIT state."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"1a1ced50_1d0b558f","line":5,"range":{"start_line":4,"start_character":44,"end_line":5,"end_character":21},"updated":"2017-03-22 06:23:57.000000000","message":"May be:-\ns/ \u0027to time out nodes stuck in the RESCUEWAIT state.\u0027 / \u0027to clean up nodes stuck in the RESCUEWAIT state upon time out.\u0027/","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"edbdd9fce132ba714cd953a2c07715d2b28e279c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds new options ``[conductor]/check_rescue_state_interval`` and"},{"line_number":4,"context_line":"    ``[conductor]/rescue_callback_timeout`` to time out nodes stuck in the"},{"line_number":5,"context_line":"    RESCUEWAIT state."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"1a1ced50_533762fe","line":5,"range":{"start_line":4,"start_character":44,"end_line":5,"end_character":21},"in_reply_to":"1a1ced50_1d0b558f","updated":"2017-03-22 17:57:27.000000000","message":"Done","commit_id":"383500a086ff4612f414eeda152eb5c4af5a058f"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"ffcfafffe59026a3c4ea99a64860ae87e8c0369e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds new options ``[conductor]/check_rescue_state_interval`` and"},{"line_number":4,"context_line":"    ``[conductor]/rescue_callback_timeout`` to clean up nodes stuck in the"},{"line_number":5,"context_line":"    RESCUEWAIT state upon timeout."}],"source_content_type":"text/x-yaml","patch_set":21,"id":"7ffa3b31_fa81ed4b","line":3,"updated":"2017-04-18 16:30:28.000000000","message":"We seem to have such tradition, whenever we increase the minimum number of greenthreads we can run ironic on, we should mention it in a reno :)","commit_id":"4f704ab977d1077cf5cc58392df03352b996ba53"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"3b3a013529d202c0326135b0913b8981e5be7636","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    ``[conductor]/rescue_callback_timeout`` to clean up nodes stuck in the"},{"line_number":5,"context_line":"    RESCUEWAIT state upon timeout."},{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - Increases the worker threads in ironic by 1 to check the rescue wait"},{"line_number":8,"context_line":"    timeouts."}],"source_content_type":"text/x-yaml","patch_set":39,"id":"7f515b1d_59e7dee5","line":8,"range":{"start_line":7,"start_character":4,"end_line":8,"end_character":13},"updated":"2017-09-26 02:55:45.000000000","message":"I didn\u0027t find the related changes in this patch, did you miss it?","commit_id":"196fd70e48be37cc2d2b15d5a5a3ff88885c0482"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"22f1667bd426c2cb1c2cf0f375c1569d65c50e5b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    ``[conductor]/rescue_callback_timeout`` to clean up nodes stuck in the"},{"line_number":5,"context_line":"    RESCUEWAIT state upon timeout."},{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - Increases the worker threads in ironic by 1 to check the rescue wait"},{"line_number":8,"context_line":"    timeouts."}],"source_content_type":"text/x-yaml","patch_set":39,"id":"7f515b1d_a7579558","line":8,"range":{"start_line":7,"start_character":4,"end_line":8,"end_character":13},"in_reply_to":"7f515b1d_59e7dee5","updated":"2017-09-27 16:30:40.000000000","message":"It adds the method _check_rescuewait_timeouts() as a periodic task to futurist library. When invoked it would spawn a new thread for the same.","commit_id":"196fd70e48be37cc2d2b15d5a5a3ff88885c0482"}]}
